./0000755000175000017500000000000011535143526007756 5ustar yvesyves./build.xml0000600000175000017500000000650610717347426011604 0ustar yvesyves Builds, tests, and runs the project CaRMetal. ./build-before-profiler.xml0000644000175000017500000000641710717347426014675 0ustar yvesyves Builds, tests, and runs the project CaRMetal. ./manifest.mf0000600000175000017500000000012210427606012012064 0ustar yvesyvesManifest-Version: 1.0 X-COMMENT: Main-Class will be added automatically by build ./src/0000755000175000017500000000000011535143540010541 5ustar yvesyves./src/builtin.mcr0000770000175000017500000014164711057510625012730 0ustar yvesyves =O =X =Y =Z t Point à "(windoww/(windoww-d(windoww)))*(x(t)-windowcx)+windowcx+d(windowcx)", "(windoww/(windoww-d(windoww)))*(y(t)-windowcy)+windowcy+d(windowcy)" Point à 33.49486, 0.30428 Expression "2" à 27.87463, 1.12336 Point à 32.50974, 0.26203 Point à 33.66676, 0.06216 Point à 33.49486, 1.27361 Point à "x(P19)+x(P76)-x(M2)", "y(P19)+y(P76)-y(M2)" Point à "x(P16)+x(P76)-x(M2)", "y(P16)+y(P76)-y(M2)" Point à "x(P17)+x(P76)-x(M2)", "y(P17)+y(P76)-y(M2)" Point à "x(P18)+x(P76)-x(M2)", "y(P18)+y(P76)-y(M2)" Point à "x(P24)+x(P76)-x(M2)", "y(P24)+y(P76)-y(M2)" Point à "x(P20)+x(P76)-x(M2)", "y(P20)+y(P76)-y(M2)" Point à "x(P21)+x(P76)-x(M2)", "y(P21)+y(P76)-y(M2)" Point à "x(P22)+x(P76)-x(M2)", "y(P22)+y(P76)-y(M2)" Point à "x(P23)+x(P76)-x(M2)", "y(P23)+y(P76)-y(M2)" Point à "x(P13)+x(P76)-x(M2)", "y(P13)+y(P76)-y(M2)" Point à "2*x(P76)-x(P34)", "2*y(P76)-y(P34)" Point à "2*x(P76)-x(P30)", "2*y(P76)-y(P30)" Point à "2*x(P76)-x(P31)", "2*y(P76)-y(P31)" Point à "2*x(P76)-x(P32)", "2*y(P76)-y(P32)" Point à "2*x(P76)-x(P33)", "2*y(P76)-y(P33)" Point à "2*x(P76)-x(P26)", "2*y(P76)-y(P26)" Point à "2*x(P76)-x(P35)", "2*y(P76)-y(P35)" Point à "2*x(P76)-x(P28)", "2*y(P76)-y(P28)" Point à "2*x(P76)-x(P29)", "2*y(P76)-y(P29)" Point à "2*x(P76)-x(P27)", "2*y(P76)-y(P27)" Segment de P20 à P21 Segment de P21 à P22 Segment de P22 à P19 Segment de P19 à P28 Segment de P28 à P20 Segment de P36 à P32 Segment de P37 à P33 Segment de P34 à P29 Segment de P38 à P31 Segment de P32 à P27 Segment de P32 à P23 Segment de P33 à P23 Segment de P29 à P24 Segment de P29 à P25 Segment de P30 à P25 Segment de P30 à P26 Segment de P31 à P26 Segment de P31 à P27 Segment de P30 à P35 Segment de P38 à P35 Segment de P35 à P34 Segment de P34 à P37 Segment de P37 à P36 Segment de P36 à P38 Segment de P24 à P20 Segment de P25 à P21 Segment de P26 à P22 Segment de P27 à P19 Segment de P23 à P28 Segment de P33 à P24 =O =X =Y =Z G Point à "(windoww/(windoww-d(windoww)))*(x(G)-windowcx)+windowcx+d(windowcx)", "(windoww/(windoww-d(windoww)))*(y(G)-windowcy)+windowcy+d(windowcy)" Point à -1.65605, 0.61452 Expression "2" à 3.24368, 1.07715 Point à -2.26239, 0.38163 Point à -0.86084, 0.43694 Point à -1.65605, 1.57067 Point à "x(C)+x(B)-x(A)", "y(C)+y(B)-y(A)" Point à "x(P7)+2*(x(P7)-x(P8))", "y(P7)+2*(y(P7)-y(P8))" Point à "x(C)+x(B)-x(A)", "y(C)+y(B)-y(A)" Point à "x(C)+x(B)-x(A)", "y(C)+y(B)-y(A)" Segment de P6 à P11 Segment de P6 à P10 Segment de P6 à P9 Segment de P9 à P11 Segment de P10 à P9 Segment de P11 à P10 D E F B Point à 57.39831, 21.2484 Point à 57.39831, 25.15035 Point à 55.04322, 25.86185 Point à 60.6315, 25.66861 Segment de E à B =O =X =Y =Z o Point à "(windoww/(windoww-d(windoww)))*(x(o)-windowcx)+windowcx+d(windowcx)", "(windoww/(windoww-d(windoww)))*(y(o)-windowcy)+windowcy+d(windowcy)" Point à 74.67689, 21.58149 Expression "2" à 82.56393, 23.87493 Point à 74.93019, 21.39424 Point à 75.64428, 21.63052 Point à 74.67689, 22.56258 Point à "x(o)+E1*(-x(X)+x(Y)-x(Z)+x(O))", "y(o)+E1*(-y(X)+y(Y)-y(Z)+y(O))" Point à "x(o)+E1*(-x(X)+x(Y)+x(Z)-x(O))", "y(o)+E1*(-y(X)+y(Y)+y(Z)-y(O))" Point à "x(o)+E1*(x(X)+x(Y)-x(Z)-x(O))", "y(o)+E1*(y(X)+y(Y)-y(Z)-y(O))" Point à "x(o)+E1*(x(X)+x(Y)+x(Z)-3*x(O))", "y(o)+E1*(y(X)+y(Y)+y(Z)-3*y(O))" Point à "2*x(o)-x(P9)", "2*y(o)-y(P9)" Point à "2*x(o)-x(P8)", "2*y(o)-y(P8)" Point à "2*x(o)-x(P7)", "2*y(o)-y(P7)" Point à "2*x(o)-x(P6)", "2*y(o)-y(P6)" Segment de P7 à P6 Segment de P11 à P10 Segment de P13 à P12 Segment de P9 à P8 Segment de P11 à P13 Segment de P7 à P9 Segment de P13 à P9 Segment de P11 à P7 Segment de P8 à P12 Segment de P6 à P8 Segment de P10 à P6 Segment de P12 à P10 =O =X =Y =Z p Point à 1.03933, 0.46474 Point à "(windoww/(windoww-d(windoww)))*(x(p)-windowcx)+windowcx+d(windowcx)", "(windoww/(windoww-d(windoww)))*(y(p)-windowcy)+windowcy+d(windowcy)" Expression "0" à -6.68004, 2.71076 Expression "0" à -5.68004, 2.71076 Expression "0" à -4.58004, 2.71076 Segment de P3 à P4 Point à 1.01578, 1.45964 Point à 2.00625, 0.46247 Point à 0.78533, 0.36384 Point à "x(O)+E1*(x(X)-x(O))+E2*(x(Y)-x(O))+E3*(x(Z)-x(O))", "y(O)+E1*(y(X)-y(O))+E2*(y(Y)-y(O))+E3*(y(Z)-y(O))" O M Point à -2.57, 4.13 Point à -0.67, 2.7 Point à "2*x(O)-x(M)", "2*y(O)-y(M)" l1 A Point à 1.20702, 2.09123 ??? Intersection entre perp1 et c1 A B M Point à -3.98502, 1.73034 Point à -2.41199, 2.26966 Point à -1.87266, 1.16105 Point à "x(C)+x(B)-x(A)", "y(C)+y(B)-y(A)" A B Point à 3.92161, -13.62031 Point à -4.98046, 17.29785 Droite passant par I1 et I2 A B C Point à -0.3038, 2.25823 Point à -2.47089, 0.61772 Point à 3.28101, 0.21266 Demi-droite d'origine B vers E A B C Point à -5.89698, 0.72469 Point à -3.7087, 2.54352 Point à -0.12789, -0.49734 Point à "(x(A)^2*y(P4)-x(A)^2*y(P5)+y(P4)^2*y(P5)-y(P4)^2*y(A)-y(P4)*y(P5)^2+y(P4)*y(A)^2-y(P4)*x(P5)^2+y(P5)^2*y(A)-y(P5)*y(A)^2+y(P5)*x(P4)^2+y(A)*x(P5)^2-y(A)*x(P4)^2)/(2*x(A)*y(P4)+(-(2*x(A)))*y(P5)+(-(2*y(P4)))*x(P5)+2*y(P5)*x(P4)+2*y(A)*x(P5)+(-(2*y(A)))*x(P4))", "(-x(A)^2*x(P4)+x(A)^2*x(P5)+x(A)*x(P4)^2-x(A)*x(P5)^2+x(A)*y(P4)^2-x(A)*y(P5)^2-x(P4)^2*x(P5)+x(P4)*x(P5)^2+x(P4)*y(P5)^2-x(P4)*y(A)^2-x(P5)*y(P4)^2+x(P5)*y(A)^2)/(2*x(A)*y(P4)+(-(2*x(A)))*y(P5)+2*x(P4)*y(P5)+(-(2*x(P4)))*y(A)+(-(2*x(P5)))*y(P4)+2*x(P5)*y(A))" Cercle de centre P10 passant par P7 M N P Point à -6.74, 2.9 Point à -5.50775, 4.13336 Point à -4.56, 3.86 Cercle de centre P6 passant par P4 M a b P4 Point à -1.0, 2.0 Point à 2.0, 2.0 Point à 4.0, 2.0 Point à "(windoww/(windoww-d(windoww)))*(x(P4)-windowcx)+windowcx+d(windowcx)", "(windoww/(windoww-d(windoww)))*(y(P4)-windowcy)+windowcy+d(windowcy)" Les points sont alignés Les points ne sont pas alignés l1 l2 P5 ??? ??? Point à "(windoww/(windoww-d(windoww)))*(x(P5)-windowcx)+windowcx+d(windowcx)", "(windoww/(windoww-d(windoww)))*(y(P5)-windowcy)+windowcy+d(windowcy)" Les objets ne sont pas parallèles Les objets sont parallèles l1 l2 P5 ??? ??? Point à "(windoww/(windoww-d(windoww)))*(x(P5)-windowcx)+windowcx+d(windowcx)", "(windoww/(windoww-d(windoww)))*(y(P5)-windowcy)+windowcy+d(windowcy)" Les objets ne sont pas perpendiculaires Les objets sont perpendiculaires o a b P5 Point à 1.0, -1.0 Point à 1.0, 3.0 Point à 5.0, 0.0 Point à "(windoww/(windoww-d(windoww)))*(x(P5)-windowcx)+windowcx+d(windowcx)", "(windoww/(windoww-d(windoww)))*(y(P5)-windowcy)+windowcy+d(windowcy)" Les points ne sont pas équidistants Les points sont équidistants P13 l4 P14 ??? Point à 5.0, 0.0 Point à "(windoww/(windoww-d(windoww)))*(x(P14)-windowcx)+windowcx+d(windowcx)", "(windoww/(windoww-d(windoww)))*(y(P14)-windowcy)+windowcy+d(windowcy)" Le point est sur l'objet Le point n'est pas sur l'objet M A P3 Point à 3.0, 2.0 Point à 3.0, 2.0 Point à "(windoww/(windoww-d(windoww)))*(x(P3)-windowcx)+windowcx+d(windowcx)", "(windoww/(windoww-d(windoww)))*(y(P3)-windowcy)+windowcy+d(windowcy)" Les points sont confondus Les points ne sont pas confondus A f1(x)=0 ./src/Main.java0000644000175000017500000000766511360277413012311 0ustar yvesyves import eric.FileTools; import eric.GUI.palette.PaletteManager; import eric.GUI.window.MainApplet; import eric.GUI.window.MainWindow; import eric.JLogoWindow; import eric.OS; import eric.macros.MacroTools; import eric.bar.JPropertiesBar; import java.io.FileOutputStream; import java.io.PrintStream; import java.util.Locale; import java.util.Properties; import javax.swing.SwingUtilities; import rene.gui.Global; /* * To change this template, choose Tools | Templates * and open the template in the editor. */ /** * * @author erichake */ public class Main extends MainApplet { public Main() { super(); } public void init() { rene.gui.Global.DetectDesktopSize(); Global.initBundles(); Global.initProperties(); eric.JGlobalPreferences.initPreferences(); // Global.FirstRun(); JPropertiesBar.CreatePopertiesBar(); super.init(); } public void start() { super.start(); SwingUtilities.invokeLater(new Runnable() { public void run() { PaletteManager.init(); } }); } static public void main(final String[] args) { final int PORT=32145; int i=0; String filename=""; while (iKlg-J q|&v“7פ7a"W'eWSفxuQZHFؗɥFzq9ۑIhj4|jF$*HP%O^Ě\ZnRk&ŵt2T+pb˚PSxӴӔivKI8iDZ!xb+ U0*Uohz?+HwnwY'o5-.NUn1:F^n*C={ܟw>< ˛?>Ҧvo%E<ܣa5jSeɹ1ie{auH'Q_ &aRy=Q j^Fe`@qsH©"N*1X4aUd"=("!*:YT;dU0.IH^`Ȣ@4Ny5韖-~8aY[+ϙW˄E~U\^1uhN^f)z/)~QB$lNWM4ǔv[Gic Ujr$Zʕ([mY=HErI笝,xIԦiJ7ɓNԆ[Z˖c&A 亯zGխ=(Vn'ӰZf@?:^K G)J⺉c6Ջg LL!&Wׯjh<&EkW&Lvle%H~CEn)HX$eԑ՜ v:?]Ĕ 'x3'^"orNָ'jV )_T$XKe6 T'߻O(ԾJް? w mc(cc-b2N{bR/3 ǽdfP̄&֏&leQRzN} ,,(iqhDZ:r2gb^N{fVrC7nFp4?;BaH|;ٙ'MS?70w{hU~x58) GLiXiV=X2hm|F8凭D)jMqBp8&聑8:RG7yh8Sdٗi)IyQtlP &P^ @4Qk_&)I#YbIuZ9;\aw]rSd&m[9|È]v[ 68$}:D %iW9>vne% xv(rg#GKʤ }K?j xUH)q\Q@We[PfVeoڸzh3];:T%O> ygEF ꂶ#8kE'#Fڤ *ih|[H&@D&%~UX,E `ب&ykʧE%_Ƃ V =z}ԝGrh /AhG/Å:JŕTRB ZZ)éog YJʰ  R;./src/atp/Des12.gif0000644000175000017500000001515211302613614012672 0ustar yvesyveswt aleph.gifsrjava.awt.RectangleðjjtIheightIwidthIxIyxp t alpha.gifsq~ t amalg.gifsq~ (t angle.gifsq~ . */ package atp; import java.awt.Color; import java.awt.image.RGBImageFilter; class a extends RGBImageFilter { Color a; boolean _fldif; a(final Color color) { _fldif = false; a = color; _fldif = false; super.canFilterIndexColorModel = true; } a(final Color color, final boolean flag) { _fldif = false; a = color; _fldif = flag; super.canFilterIndexColorModel = true; } @Override public int filterRGB(final int i, final int j, final int k) { if (_fldif) { return 0x1fff0000; } final int l = k & 0xffffff; if (l == 0xffffff) { return l; } else { return 0xff000000 | a.getRGB(); } } } ./src/atp/e.java0000644000175000017500000000324111302613615012411 0ustar yvesyvespackage atp; class e { public int y; public String w; public static final int k = 0; public static final int _fldbyte = 1; public static final int o = 2; public static final int r = 3; public static final int _fldlong = 4; public static final int j = 5; public static final int _fldelse = 7; public static final int _fldfor = 8; public static final int q = 9; public static final int s = 10; public static final int B = 11; public static final int _fldvoid = 12; public static final int _flddo = 13; public static final int t = 14; public static final int _fldchar = 15; public static final int i = 16; public static final int A = 17; public static final int u = 18; public static final int _fldcase = 19; public static final int C = 20; public static final int d = 22; public static final int m = 24; public static final int g = 25; public static final int f = 50; public static final int v = 51; public static final int _fldint = 99; public static final int p = 100; public static final int _fldif = 108; public static final int n = 109; public static final int _fldnull = 110; public static final int a = 113; public static final int b = 114; public static final int c = 115; public static final int D = 116; public static final int l = 117; public static final int h = 118; public static final int z = 119; public static final int x = 120; public static final int _fldnew = 121; public static final int _fldtry = 122; public static final int e = 123; public static final int _fldgoto = 124; public e(final int i1, final String s1) { y = i1; w = s1; } public e(final int i1) { y = i1; w = ""; } public e() { y = 0; w = ""; } } ./src/atp/f.java0000644000175000017500000001037711302613615012422 0ustar yvesyves/***************************************************************************** * * * HotEqn Equation Viewer Basic Applet * * * ****************************************************************************** * Java Applet to view mathematical Equations provided in the LaTeX language * ****************************************************************************** Copyright 2006 Stefan Müller and Christian Schmid, modified by Rene Grothmann This file is part of the HotEqn package. HotEqn is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; HotEqn is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package atp; import java.awt.Graphics; import java.awt.Image; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.image.CropImageFilter; import java.awt.image.FilteredImageSource; import java.awt.image.ImageProducer; import java.io.BufferedInputStream; import java.io.InputStream; import java.io.ObjectInputStream; import java.util.Hashtable; import java.util.StringTokenizer; // Referenced classes of package atp: // a class f { private final ImageProducer _flddo[] = { null, null, null, null, null }; private final String _fldif[] = { "8", "10", "12", "14", "18" }; private final Hashtable _fldfor; public f() { _fldfor = new Hashtable(189); } @SuppressWarnings("unchecked") public Image a(final String s, final Graphics g) { final StringTokenizer stringtokenizer = new StringTokenizer(s, "/"); String s1 = stringtokenizer.nextToken(); s1 = stringtokenizer.nextToken().substring(5); final String s2 = stringtokenizer.nextToken(); int i = -1; boolean flag2 = true; while (flag2) { if (_fldif[++i].equals(s1)) { flag2 = false; } if (i == 4) { flag2 = false; } } if (_flddo[i] == null) { _flddo[i] = a("Fonts" + s1 + ".gif"); final String s3 = "Des" + s1 + ".gif"; BufferedInputStream bufferedinputstream = null; try { getClass().getResourceAsStream(s3); bufferedinputstream = new BufferedInputStream(getClass() .getResourceAsStream(s3)); final ObjectInputStream objectinputstream = new ObjectInputStream( bufferedinputstream); final int j = objectinputstream.readInt(); for (int k = 0; k < j; k++) { final String s4 = (String) objectinputstream.readObject(); _fldfor.put(s1 + s4, new Rectangle( (Rectangle) objectinputstream.readObject())); } bufferedinputstream.close(); } catch (final Exception exception1) { // System.out.println(exception1.toString()); _flddo[i] = null; } } Image image = null; if (_flddo[i] != null) { final Rectangle rectangle = (Rectangle) _fldfor.get(s1 + s2); image = Toolkit.getDefaultToolkit().createImage( new FilteredImageSource(new FilteredImageSource(_flddo[i], new CropImageFilter(rectangle.x, rectangle.y, rectangle.width, rectangle.height)), new a( g.getColor()))); } return image; } ImageProducer a(final String s) { ImageProducer imageproducer = null; try { final InputStream inputstream = getClass().getResourceAsStream(s); int i = inputstream.available(); byte abyte0[] = new byte[i]; int j = 0; for (int k = 0; k != -1;) { k = inputstream.read(abyte0, j, i); if (k != -1) { j += k; i = inputstream.available(); final int l = j + i; if (l > abyte0.length) { final byte abyte1[] = (byte[]) abyte0.clone(); abyte0 = new byte[l]; System.arraycopy(abyte1, 0, abyte0, 0, j); } } if (i == 0) { break; } } imageproducer = Toolkit.getDefaultToolkit().createImage(abyte0) .getSource(); } catch (final Exception exception) { } return imageproducer; } } ./src/atp/Des14.gif0000644000175000017500000001515211302613614012674 0ustar yvesyveswt aleph.gifsrjava.awt.RectangleðjjtIheightIwidthIxIyxpt alpha.gifsq~ t amalg.gifsq~.t angle.gifsq~ Et approx.gifsq~ \tast.gifsq~ st asymp.gifsq~ tbeta.gifsq~ t bigcirc.gifsq~tbigtriangledown.gifsq~tbigtriangleup.gifsq~tbot.gifsq~ t bowtie.gifsq~tBox.gifsq~+t bullet.gifsq~ Btcap.gifsq~ Ytcdot.gifsq~pt cdots.gifsq~tchi.gifsq~ tcirc.gifsq~ t clubsuit.gifsq~'tcong.gifsq~ 'tcup.gifsq~ '.t dagger.gifsq~ 'Et dashv.gifsq~'\t ddagger.gifsq~ 'st ddots.gifsq~'t delta.gifsq~ 't DeltaBig.gifsq~'t diamond.gifsq~ 'tDiamondBig.gifsq~ 'tdiamondsuit.gifsq~'tdiv.gifsq~ 't doteq.gifsq~ '+t downarrow.gifsq~ 'BtDownarrowBig.gifsq~'Ytell.gifsq~ 'pt emptyset.gifsq~ 't epsilon.gifsq~ 't equiv.gifsq~ 'teta.gifsq~ Nt exists.gifsq~ Ntflat.gifsq~ N.t forall.gifsq~NEt Fourier.gifsq~N\t frown.gifsq~Nst gamma.gifsq~ Nt GammaBig.gifsq~Ntge.gifsq~Ntgeq.gifsq~Ntgets.gifsq~ Ntgg.gifsq~ Nthbar.gifsq~ Nt heartsuit.gifsq~N+thookleftarrow.gifsq~ NBthookrightarrow.gifsq~ NYtIm.gifsq~Npt imath.gifsq~ Ntin.gifsq~ Nt infty.gifsq~ Ntint.gifsq~utiota.gifsq~ ut jmath.gifsq~ u.tJoin.gifsq~uEt kappa.gifsq~ u\t lambda.gifsq~ ust LambdaBig.gifsq~ ut Laplace.gifsq~ut ldots.gifsq~utle.gifsq~ut leadsto.gifsq~ ut leftarrow.gifsq~ utLeftarrowBig.gifsq~ utleftharpoondown.gifsq~u+tleftharpoonup.gifsq~ uBtleftrightarrow.gifsq~ uYtLeftrightarrowBig.gifsq~ uptleq.gifsq~utlhd.gifsq~utll.gifsq~ utlongleftarrow.gifsq~ &tLongleftarrowBig.gifsq~ %tlongleftrightarrow.gifsq~ &.tLongleftrightarrowBig.gifsq~ $Etlongmapsto.gifsq~ '\tlongrightarrow.gifsq~ &stLongrightarrowBig.gifsq~ %t mapsto.gifsq~ tmho.gifsq~tmid.gifsq~ t models.gifsq~tmp.gifsq~ tmu.gifsq~ t nabla.gifsq~+t natural.gifsq~ Bt nearrow.gifsq~Ytneg.gifsq~ptneq.gifsq~ tni.gifsq~ tnu.gifsq~ t nwarrow.gifsq~todot.gifsq~ toint.gifsq~.t omega.gifsq~ Et OmegaBig.gifsq~\t ominus.gifsq~ st oplus.gifsq~ t oslash.gifsq~ t otimes.gifsq~ t parallel.gifsq~ t partial.gifsq~ tperp.gifsq~ tphi.gifsq~t PhiBig.gifsq~+tpi.gifsq~ Bt PiBig.gifsq~Ytpm.gifsq~ ptprec.gifsq~ t preceq.gifsq~t prime.gifsq~ tprod.gifsq~t propto.gifsq~ tpsi.gifsq~.t PsiBig.gifsq~EtRe.gifsq~\trhd.gifsq~strho.gifsq~ trightarrow.gifsq~ tRightarrowBig.gifsq~ trightharpoondown.gifsq~trightharpoonup.gifsq~ trightleftharpoons.gifsq~t searrow.gifsq~t setminus.gifsq~ +t sharp.gifsq~ Bt sigma.gifsq~ Yt SigmaBig.gifsq~ptsim.gifsq~t simeq.gifsq~ t smile.gifsq~t spadesuit.gifsq~t sqcap.gifsq~ t sqcup.gifsq~ .t sqsubset.gifsq~ Etsqsubseteq.gifsq~\t sqsupset.gifsq~ stsqsupseteq.gifsq~tstar.gifsq~t subset.gifsq~ t subseteq.gifsq~tsucc.gifsq~ t succeq.gifsq~tsum.gifsq~t supset.gifsq~ +t supseteq.gifsq~Bt swarrow.gifsq~Yttau.gifsq~ pt theta.gifsq~ t ThetaBig.gifsq~t times.gifsq~ tto.gifsq~ 8ttop.gifsq~8t triangle.gifsq~8.ttriangleleft.gifsq~ 8Ettriangleright.gifsq~ 8\t unlhd.gifsq~8st unrhd.gifsq~8t uparrow.gifsq~ 8tUparrowBig.gifsq~8tupdownarrow.gifsq~ 8tUpdownarrowBig.gifsq~8t uplus.gifsq~ 8t upsilon.gifsq~ 8tUpsilonBig.gifsq~8+tvarepsilon.gifsq~ 8Bt varphi.gifsq~ 8Yt varpi.gifsq~ 8pt varrho.gifsq~ 8t varsigma.gifsq~ 8t vartheta.gifsq~ 8t vdash.gifsq~_t vdots.gifsq~ _tvee.gifsq~ _.t wedge.gifsq~ _Etwp.gifsq~ _\twr.gifsq~_stxi.gifsq~ _t XiBig.gifsq~ _tzeta.gifsq~ _./src/atp/Des10.gif0000644000175000017500000001515211302613614012670 0ustar yvesyveswt aleph.gifsrjava.awt.RectangleðjjtIheightIwidthIxIyxp t alpha.gifsq~t amalg.gifsq~ t angle.gifsq~ 0t approx.gifsq~ @tast.gifsq~Pt asymp.gifsq~ `tbeta.gifsq~ pt bigcirc.gifsq~ tbigtriangledown.gifsq~ tbigtriangleup.gifsq~ tbot.gifsq~ t bowtie.gifsq~ tBox.gifsq~ t bullet.gifsq~tcap.gifsq~ tcdot.gifsq~t cdots.gifsq~tchi.gifsq~  tcirc.gifsq~0t clubsuit.gifsq~ tcong.gifsq~ tcup.gifsq~  t dagger.gifsq~ 0t dashv.gifsq~ @t ddagger.gifsq~ Pt ddots.gifsq~`t delta.gifsq~ pt DeltaBig.gifsq~ t diamond.gifsq~tDiamondBig.gifsq~ tdiamondsuit.gifsq~ tdiv.gifsq~ t doteq.gifsq~ t downarrow.gifsq~ tDownarrowBig.gifsq~ tell.gifsq~ t emptyset.gifsq~ t epsilon.gifsq~ t equiv.gifsq~ 0teta.gifsq~ 4t exists.gifsq~ 4tflat.gifsq~ 4 t forall.gifsq~ 40t Fourier.gifsq~ 4@t frown.gifsq~4Pt gamma.gifsq~ 4`t GammaBig.gifsq~ 4ptge.gifsq~ 4tgeq.gifsq~ 4tgets.gifsq~4tgg.gifsq~ 4thbar.gifsq~ 4t heartsuit.gifsq~ 4thookleftarrow.gifsq~4thookrightarrow.gifsq~4tIm.gifsq~ 4t imath.gifsq~4tin.gifsq~ 4 t infty.gifsq~40tint.gifsq~ Ntiota.gifsq~Nt jmath.gifsq~ N tJoin.gifsq~ N0t kappa.gifsq~N@t lambda.gifsq~ NPt LambdaBig.gifsq~ N`t Laplace.gifsq~ Npt ldots.gifsq~Ntle.gifsq~ Nt leadsto.gifsq~Nt leftarrow.gifsq~NtLeftarrowBig.gifsq~ Ntleftharpoondown.gifsq~Ntleftharpoonup.gifsq~Ntleftrightarrow.gifsq~NtLeftrightarrowBig.gifsq~ Ntleq.gifsq~ Ntlhd.gifsq~ N tll.gifsq~ N0tlongleftarrow.gifsq~htLongleftarrowBig.gifsq~htlongleftrightarrow.gifsq~h tLongleftrightarrowBig.gifsq~h0tlongmapsto.gifsq~h@tlongrightarrow.gifsq~hPtLongrightarrowBig.gifsq~h`t mapsto.gifsq~hptmho.gifsq~ htmid.gifsq~ht models.gifsq~ htmp.gifsq~ htmu.gifsq~ ht nabla.gifsq~ ht natural.gifsq~ ht nearrow.gifsq~ htneg.gifsq~ htneq.gifsq~htni.gifsq~ h tnu.gifsq~h0t nwarrow.gifsq~ todot.gifsq~ toint.gifsq~ t omega.gifsq~ 0t OmegaBig.gifsq~ @t ominus.gifsq~ Pt oplus.gifsq~ `t oslash.gifsq~ pt otimes.gifsq~ t parallel.gifsq~ t partial.gifsq~ tperp.gifsq~ tphi.gifsq~ t PhiBig.gifsq~ tpi.gifsq~ t PiBig.gifsq~ tpm.gifsq~ tprec.gifsq~ t preceq.gifsq~  t prime.gifsq~0tprod.gifsq~ t propto.gifsq~tpsi.gifsq~ t PsiBig.gifsq~ 0tRe.gifsq~ @trhd.gifsq~ Ptrho.gifsq~ `trightarrow.gifsq~ptRightarrowBig.gifsq~ trightharpoondown.gifsq~trightharpoonup.gifsq~trightleftharpoons.gifsq~ t searrow.gifsq~ t setminus.gifsq~t sharp.gifsq~ t sigma.gifsq~t SigmaBig.gifsq~ tsim.gifsq~ t simeq.gifsq~  t smile.gifsq~0t spadesuit.gifsq~ t sqcap.gifsq~ t sqcup.gifsq~ t sqsubset.gifsq~ 0tsqsubseteq.gifsq~ @t sqsupset.gifsq~ Ptsqsupseteq.gifsq~ `tstar.gifsq~pt subset.gifsq~ t subseteq.gifsq~ tsucc.gifsq~ t succeq.gifsq~ tsum.gifsq~t supset.gifsq~ t supseteq.gifsq~ t swarrow.gifsq~ ttau.gifsq~t theta.gifsq~ t ThetaBig.gifsq~  t times.gifsq~ 0tto.gifsq~ttop.gifsq~ t triangle.gifsq~ ttriangleleft.gifsq~0ttriangleright.gifsq~@t unlhd.gifsq~ Pt unrhd.gifsq~ `t uparrow.gifsq~ ptUparrowBig.gifsq~ tupdownarrow.gifsq~tUpdownarrowBig.gifsq~ t uplus.gifsq~ t upsilon.gifsq~tUpsilonBig.gifsq~ tvarepsilon.gifsq~t varphi.gifsq~ t varpi.gifsq~ t varrho.gifsq~ t varsigma.gifsq~ t vartheta.gifsq~ 0t vdash.gifsq~ t vdots.gifsq~tvee.gifsq~ t wedge.gifsq~ 0twp.gifsq~ @twr.gifsq~ Ptxi.gifsq~ `t XiBig.gifsq~ ptzeta.gifsq~ ./src/atp/Fonts12.gif0000644000175000017500000001567111302613614013256 0ustar yvesyvesGIF89aJ,Jb)cNsS. Jൌʬjn?[|\:APDGsD5Jl {-*Mna_3wf4bF76HȵX Yv5Ǘ)wVxvXf4X +G':(v|j{U' L)L:;l" Tgi*-f=\mzYZk IbHyC6CiiGvJh#Ć>X4۷p"",´5C Nn 浄< ec.1 lʨB Mb£Erej(VBIJmkJ刂g[e+EZѾ`Ɠ'P#MjpUC̈́Ku&忙,8`8ɲNV![~;wgt]{]>`?nm;|O F=Cl:˗WMܼfkջx?+K[JY H jAW` dgyQm ^&5dT5&X8!HWE8'Ρ0FȠ7 :^ؔD}ݢȉШE^C!mЇ8yn0ViGdj8ȴW:[2L187 TheRXJ']Ej2O/&5{2eDS[r^`pDBf(Bjgh"G}OVlˤN-n\r☓UX ^+R .ɡq!z+V)i|l*d&"# 7*N.ֻsnf:/Iw븞0p*q_bov r&r&r*r. sb'5RS lGQM7޵㮛-#BtӶJ/IZKW6bN[slLx{6p\ 1|#]$7z4Fg@-e 3_RwYcC8 e3ֶ& x1 ɈHl(q[Rd,?:ӢAv/*g8r)P8&fuJ̒( 8^ XI\Ւ>0f]FSS*tsԚZh$6 Wؐ'( E'2# 5I+0TJh4_Q=҉2QDw-?%C>Onwl)EC裕R A@eZ;A$IH^ԥtGpd!&ar>|9%j *5xn(B>%&VEvVӠ (;]m5D^/|49ʃ",ʧg.G|3K6R>!k'=(\HbLg 55\V ְud-YϊִulmN4cH8+Y ^r=&(hu|e*&Ru )P\ H~S#e$iؙ,njz>iϤ|\%rI:VOdV7yCpdTϢhiTr2M0UW=$+L8}g'axW&rE'Fܤ){Źh K[r(f*/4y.:-E5_@c;%bvй>{X?jb[ppznYOZЗvp_٘–4ό$MZns3:8ߊLd>xoj~jYp.)HtBNsK:կk}\/^i{s$&~qNthq``|?ϥ ,^,HW+ں1&Dv](qSd۳[F9tǣAt9KL{`we][aU+ vj=I<芧AyóWH߻~kn;>I&՝<o~]?S\}7}'Fx*?LG rle'P}wxp|w'pFrv} 9u#e| R3s{~W{xvԁenbs4Vx})jUe6%Rd78t>uv,rŖEx5W2ԧdoFO}VxsN`UcHehggh^4?'~FkyK?i`Gn"3vc68҂xSVja@8A8pW}'$Kiƅ'AA$mDmJ)TT:W. g9_1w6sy0GH<xY"{qƊry.@s|xŌh؋=Gt%68OLKӌFnf"oȉ$EՎ ȆO}JO~d*֨W8tIɸI49lC.sT,|9fj08LĶu749ّdE0GMO Q)SI~gFebzPX[ΆauSE@!AyL4H^I0o8H8?ZiQf[xl8\ERzp&{`旲z9~oWQV6@Pra3 eɚѴh|Ywecim&:7)ItFZliKRX 6$GÂwl P5OI\Ǚo(!U=l!4rs|8(eGIɛJ՞LhxHxV6Xi]ԅPED_CveYlxq[vН"?c|;8^'Ֆ)CxPɝ0*'9r*ju7Z/2tr8UKʤMO Q*VIH,czj|)zsc-B K76> `aZog`v)Z WJiɣ $j9\iMG?U),H9G1٦jZӌ%SgizXʧ@)FȜ.RVԨ)Sʩd{id Jd#py HʙUbs* fI+j׊d[*Cz*H /گ]n=5ljʆkjE2 Ԡ: 3ۣ9JmX69*YRʳ=?˓?N8!@6W*`I'QyZT6$nk 2ȑ9e6:Sca}fz:Ѳw\SYʶ,M**Zx^B~Ĉj,[[q0mg ~*xis&|6U+Ba 퉍튳1K-qٍYg9L (Jakn8jvm5))s[;K$V걬EĻKymU*{0`RIZ@E7v2Z)l rdj$ʶ˯˔r۶H ]k"5}vJ{F+RD!Lk& _\f[!BN|J˪\NH 9 ګ8r@ku;CGSȜ~{='=rRT|ljFyH,Ji{I.xA {W"W8 }۾. .+W0\BB\}wܥ /iGE<_"ɚŤ><+`l,|ߗd§8b"i6ۅ,3e=̀KOi  ,L匰MΩc5,y{ ʸr#| ܇s9w(bByX+tQ}|/Auc9ŷ9} Ҁj$5h;#lv$а6lnt"TS`锞3~ۅZ|}k Y,9m|P[( hp,n=~1\5GZI:ޏJ5ʺ]a|b+wsEQKeVNPR~"BaMBj<ȉ^T3.NhȅlWzR|}iax55() ̢|@ǃ,M=R8Cb!xenzSloo/· {Zum{}8P /褝L u}/߽!K1u`AN TsP4ҪBɳ}[?ؾqR>YS=9aD I²-\!WgV2aOfE*^3=x!#%')+-/13579;=?ACE;rN P/^LZӴfSmTpg)Lvj}k 8t&[ԚS]_]&~l){Ղ}ӢəGi]glJ0k½;խxqǑ'Wysϡ3>'J)SXWdQ9S*vh'K4)}^%'^XjrFrD=)t<>tOA= fʐs/2ĩA0Bhĵ& 8|dlhJT씰HeF^BRñ8z2FH)J+J1drB'Y[`쒡$ R$". */ package atp; import java.applet.Applet; import java.awt.Graphics; import java.awt.Image; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.image.CropImageFilter; import java.awt.image.FilteredImageSource; import java.awt.image.ImageProducer; import java.io.BufferedInputStream; import java.io.InputStream; import java.io.ObjectInputStream; import java.net.URL; import java.util.Hashtable; import java.util.StringTokenizer; // Referenced classes of package atp: // a class d { private final ImageProducer _flddo[] = { null, null, null, null, null }; private final String _fldif[] = { "8", "10", "12", "14", "18" }; private final Hashtable _fldfor; private static boolean a = true; public d() { _fldfor = new Hashtable(189); } public Image a(final boolean flag, final boolean flag1, final String s, final Graphics g, final Applet applet) { final StringTokenizer stringtokenizer = new StringTokenizer(s, "/"); String s1 = stringtokenizer.nextToken(); s1 = stringtokenizer.nextToken().substring(5); final String s2 = stringtokenizer.nextToken(); int i = -1; boolean flag2 = true; while (flag2) { if (_fldif[++i].equals(s1)) { flag2 = false; } if (i == 4) { flag2 = false; } } if (_flddo[i] == null) { _flddo[i] = a(flag, flag1, "Fonts" + s1 + ".gif", applet); final String s3 = "Des" + s1 + ".gif"; BufferedInputStream bufferedinputstream = null; try { if (a) { getClass().getResourceAsStream(s3); bufferedinputstream = new BufferedInputStream(getClass() .getResourceAsStream(s3)); } else if ((!flag) & (!flag1)) { bufferedinputstream = new BufferedInputStream((new URL(s3)) .openStream()); } else if (flag) { bufferedinputstream = new BufferedInputStream((new URL( applet.getCodeBase(), s3)).openStream()); } else { try { bufferedinputstream = new BufferedInputStream( getClass().getResource(s3).openStream()); } catch (final Exception exception) { } } final ObjectInputStream objectinputstream = new ObjectInputStream( bufferedinputstream); final int j = objectinputstream.readInt(); for (int k = 0; k < j; k++) { final String s4 = (String) objectinputstream.readObject(); _fldfor.put(s1 + s4, new Rectangle( (Rectangle) objectinputstream.readObject())); } bufferedinputstream.close(); } catch (final Exception exception1) { // System.out.println(exception1.toString()); _flddo[i] = null; } } Image image = null; if (_flddo[i] != null) { final Rectangle rectangle = (Rectangle) _fldfor.get(s1 + s2); image = Toolkit.getDefaultToolkit().createImage( new FilteredImageSource(new FilteredImageSource(_flddo[i], new CropImageFilter(rectangle.x, rectangle.y, rectangle.width, rectangle.height)), new a( g.getColor()))); } return image; } public ImageProducer a(final boolean flag, final boolean flag1, final String s, final Applet applet) { ImageProducer imageproducer = null; if (a) { imageproducer = a(s); } if (imageproducer == null) { a = false; if ((!flag) & (!flag1)) { imageproducer = Toolkit.getDefaultToolkit().getImage(s) .getSource(); } else if (flag) { imageproducer = applet.getImage(applet.getCodeBase(), s) .getSource(); } else { try { final URL url = getClass().getResource(s); imageproducer = (ImageProducer) url.getContent(); } catch (final Exception exception) { } } } return imageproducer; } ImageProducer a(final String s) { ImageProducer imageproducer = null; try { final InputStream inputstream = getClass().getResourceAsStream(s); int i = inputstream.available(); byte abyte0[] = new byte[i]; int j = 0; for (int k = 0; k != -1;) { k = inputstream.read(abyte0, j, i); if (k != -1) { j += k; i = inputstream.available(); final int l = j + i; if (l > abyte0.length) { final byte abyte1[] = (byte[]) abyte0.clone(); abyte0 = new byte[l]; System.arraycopy(abyte1, 0, abyte0, 0, j); } } if (i == 0) { break; } } imageproducer = Toolkit.getDefaultToolkit().createImage(abyte0) .getSource(); } catch (final Exception exception) { } return imageproducer; } } ./src/atp/Fonts10.gif0000644000175000017500000001203611337523366013260 0ustar yvesyvesGIF87a@,@@Dߐ T" ;^7) b*j ^ r ޑfqגٌBrӢiۤV}!)%)@3~&TW2VEw)iy%dz 婕ZIE֘j( ąĥי:Ȼxlh;%zZx1Qf:{Ջ Yk} U" .omwYWݚ ȁ̞ۧ8 ,*~!hIOFq|Tm /6 "*jJȳɕ,O>94Fnl@ALs.z^ژϒSXj(s@1d Xk"= |b$F(^)m/fmk'Z|Dd(nôoQD,kxZp\ d)#ر2N)ߝo=THboF穳G.8L8д+}UriT॥fs>h\3L1gX 49ߜL%"vۂnRÌ^)`Dճ`-L2o.*y?:M6MlEOo h/;kNbչ[Xh^f4Y#2(0OO}J wYV^n˼32ĝ3&O0avX{{[U%&xͫ.׮ S@Y-fʕ?/*hb*˹gBȸu tyoAA,Pkkaө&q8\mYY,;׌PN,IHet4~\( 2?q":V䕨Qe;@.u!ƙhl&GPI|: Ɩ /HpkQvD|/%_٢5]ʵQG>K|(/tO̡KXf@YP](HSkДV귦5uTTQB%* \ Q~ZZ8jެ=%O%3:U ƹ*0ЄV_)dFJwKJh}A G3 Q[h gGLJo0#ҏ4UY Ȑ: [4q)F~Ϝ&'\k;Q5^]qvME:hԑ.8],3S艶ԓiiI vL^"i\8+*A*fgfC+ ;86-eg,Flۛ)R1LT\k5NzlbuOk*u(wM6/c9YN1eqG*J;g< +/!Tٴ*{hs[짒;Rv͒fq (Xw)tsm%9[2U)^[$REܶ9ho=cC kx0dEnVR9WN=Bc&`0K'5 1 ٹ*6 W.21SZXn= ]׿?Pʩ%#QL(FIyu qksZħ ZE`gF3'~sR2]9*PN]mtJKs= z[25\52;Zh|\F.0;[D5N"yy-[j܌ْsӣvKPc9*'Gi~WJmdL;IpNC(upEl l'2ǽEGzA+ba]'ſsj؈S'fu[x77QҁwizAzhg7-TuWd!ch5/bo"s'&vBe|fA{ ZB]:}rUWȃ W|%(`O%U[Ḃ)~td;}aƇeF+Xhy\nD`}pc7P7s:wD le°ѡ|r$a}hiKvXu xb,~龍%9"Dfd7ya:rkhWXؑXK 0)3{h)ɀՈEP h(K鉢E 'I7b RTy=966\B[6p^Ry-vYh"5 @Cz`u#=Ïj=銅>hSlDBfYALy[S([&xZRPs;X(&XA5)O< zuEMI@U f;i p!UqRHS@@7px0}Ri牞VvkR`f5VSdZ_b ,5͈Yy1'&`I: 4uzFih!i_WcIQR` ٞHB.˗kq>Ii=G7*Hool+*giÖ[!:$[9^#@ZũPizIq<:|UfafcxxUcV'l噥> |*DJ]u=,tJZ6Br 'R[l=s9rD4M7 0f+q}jk=w$? Rj82yfңsQDpgArh:xJDJwy|z}w$6fypEeړ?j(8 L:8DƣEz[xMvOЉ|ڐd9z~&I JʝgVɕ%jѦ\8'u䏏0zw h*-H[5RI肳>BUw׭S $1h/$6bBIJ*W`JHtyvS孩95´RHX:%Aڒa3"*mP*Jk4'5˞5ˤ$}Y`ס$RHPqg :~ndبaJcymU'W J; WNx'g7p`ˍ8׺S)ꡜ˺{_ۺ:Ufڸ4h{w{YH71ڴgTmHlKTc9F-t+շo׫l],K6K+(@T= 8#*%%X4 h^鼾{&pjGTN[szZ# ggV]qWD|mMխ\7;kYչ)WjQ=uӥ{h{C]>,)]%V*n`G'$V,MySՠԜF[H8$mQu>qDz]eMp-dťzG,Im+&>9J7JƂv[؀,\% \l[xD'=]nWG)f(6L Tq놤|9=77mX8\]G!^v|}ɛH6ʑ:?Ͷ!4;8y'e N镎;./src/atp/Fonts18.gif0000644000175000017500000003105311302613614013254 0ustar yvesyvesGIF89aD,Dc 42l|p֠.eLם`»d %>R4-eTU/ !mDĞIS.Kh[>Egrr7UX3eŨVI8W9#7s٧idhY`'Wy+1$ z\KDzZܜskKe;ܘ $> z]:9 9[pq"w{@ H/h뭓6&#e}wn{jp5_5?̷\}ER}hܵw4ZYm~B4g8W2ih-tոnU^R*^¢z)砓R'E>xlK"hWN颈&cRH_Ԛ&M8d\樥+&ID)'suh!g]jhmn(z{F أ EOzzi2tꏓ>SiJ]DJ&˟ź[ K(>fc@QR*O ;۰T>#GӒގLbcf-n+HbI}Kps:pO lŸJlGV* r̎jD0!r R˩Ɵ2ߌa 3QKB1tK4?tN?.CMuՑ벼e/ʊy:R#;5/UiB/{iwXV-b Ol1-]$[Aީdgj拇<{}F8{r~ٷs5ۘ3' g^FG;^7}ĵ. dj#\QEC<5 AW7jD9i0z3J,ߠV@gP*剰#saC;. '>1m1Xn\m^$ c)MKKTc=աu'>zWS%[ r%{#NW*֩!!O0TeX6F6^geJnՃӍ9ȤfBZbbg jMgn YFM-h$!*.e\IL$XVF"VXE ղS"ro^7Lyw8]%Ü/Wk"Pw.Z*X͕&r+7~v/35Qbb]/TfK/L>2KZ{?أLL3xm{&l\îⱓ鸙;X9fo9\/$Yl-MƑ24%q rxN,V0;AIVr?c [ 0zOYˊګzw\:ڷ- lhl[RSbvI5]N`{XhZu_ z4Y KoXet5Z?k2s*lZ/SE9 .vхխ{(&VنP5dlVEUɬ>/oӻX7?p3{78OP,8o=<9@t #i.+_w1|5e{d,'ċBNc#Tڃ:Lڍ~_<BFoe1lWi7{'$s fXtBbj'e%}q)Q+wKhdzt`=5|Ft'Bo[Jb}?6msUrGlgw6Sh/K3Sh(>#,h税>Վ(Hhȏ)7'-CedM~2\xvq*|TdK#3Avjb&V X 8xSni($I&X9b0+FuvU&pBV4[LJҵAxc.y#EYmEK?Zva BkgiV&X>0hBP62ckH{pX[' d-pH5d ɋMLvi_GqF8K^Z"w)7X]8 bh.IdHŨ'`gHRtnDNp- EﴙgZu鐥m6/Y]?IJ$|∵Kf@j(vHLtEYɹIJspaVLśQLnz $r=tzPHu:F%W(a9{e+苏 Z^O2.yDQh%GZuan%Jyh%FY3W.XFX_%uh2n-Zi4x8tfeNT99G) ?nrmHԷ5cQ9sV*i9}wRzSlBGI0ƧDQ1POu4ᨑK)2jʩ꩟ *Jj${VըMʜ؟38^;j:4JQF2f誶)ڱ' :"gTYjL¬ׂ7X:<*fh;IȚ@9f7RvEx(ʌV #ş c#jz8dgX)w*ְDg4WF]37f$tzwWxT/U1e K4gyq{#⮭J[93(yن=1xFT+){I.-ʰ^k4MOk]ӺٺMB\y7K9+)tzf{PA #V%*nIKT UZmh ;7y z nԚxPio z>Y%b۶X[NwĴ>:WXJlJ-zHnk+`]*=5yaڢ鰾[291QOGKer* Q ,SKbg!,#L%l')ɯh EG [ aع@G5Aw{Lry:Q;xi2xmR_i4'D5 TjTf\Br@øThEBzbܺTb9:=\+oy>.'Zq˻ehW}K̖LR6֐ZN =t kR\ܽyz^Ch,*j J:Û|˚~H8q-L)b˴:Ī̙jʬC<#,, ;8qlFRi,ZGZZ\Β;| ~4΁hJV 8|ܩZ\ɶ 9LϦ,vyE dF2 cܚW\ Њe+:zg*tZ+&]SyVY_ 0+[ӯG4fT,zܺS՘MLWR)ByLBn tN^j茌L=N^MʶK ^qo@PG6?;զ,"z?U0ȕ.Ni;ݕ-OҾyfB=n=ԝPLEV'.08Ms?5UKM/0-cmYS[2]9+#cSekmoq/sO%lUMBg-4iil(͆)+epl^Ҟ15_ZW)ԔW7__ lDk)J~ό5rZ.W gjLᴏѵA&ڙ̘x:2 vj"loWn¾=ܻk7¶K |O@ˇJE! Qa1{jwP,փu3iddn2Fd%KrYmE{mu0iY tmm/5|N^.ИSMl06q#&C3y UE_P]."k']ZOmVO KL?yM`H}v +yYs%QYi4ő-/S=[ dǨkmWi wG5yVkx>]Td,=|Yv3GzSyRl+E؋%t GrO= O]0Tzikn25~y+j9ym 1qS>=v1^e;?}]`ӏ{qw=/|_(r tl@ zNsgN & Ng4'{c A*o qC= @)hoe2جm 72QwNw"B3[ .2b*KXؘ O^"lhFoQcC80q#˝HE>vyٽ󕑐@*@-JQD1fR:,G"}&yD J><3I 6v``<9PżfJ-II57ǽIfiڹ^2xP槆QR\ƜiNB%AJǎn#ekOC3D%y*zs7H7 j):'ѕJ w%%ZD&9FhH[,^D5Q U`OT]ZLj_+K᫦3seD!zđ/zTvW7%*)ZyԀ1$Uy,S_j[ \;+-փ ]S@J_bul,16*]N麔W51J&(,iRYqeecVGe|ërI.q[UbV.O:ƥyxћ^PzU{;}jڠ◿E0_xt#y4 vp|O8Y$1a o dofD6!/BAF.Gp{^ԑP(c0{⨑°}Suw,ǭ_5_>;@;rm6.f[ {LX\Ljg*1PAqvOcjE9:] 1v)b8$'ݻ0w5v|-eRM㪠aOfEJb+Tf1}~@]+?s ;xMFla&vv֭ѫs:Jtִj1J /V}֤KZȃ6sv7Φ{-iN֝Trg<cl+CVƅD3kl678Iid:-bFz/qāj`úܙ8^\xIS:\FGKꝿ fx*/:֎lw4ypyۡ/:ң[tqGa:'{+/jMr.y4ǧ.ZE*C<2Ӝ;]yƱ&p:p1gᪧ$Õ،`u:_?^;5ԃg[vryR7|/w}O{c-R@py6UMt~ByqTڗq}IEOyvll >W؏fMO@/Z-qP lmdOjΊsϔJah"0o@N#Pς P6Ok.&KmI20 2I..#zP.7(  B K m.G0 5 >O LpP 0 hNࢠP 7@M* Je?41Cd$HptKސ(͸!EӶb.=jPq+*W|q 9qMf upqrʒpk oƑ1ߑD o['DO у U'(O2zqH}v#Kim0"=U2&n$ї&g̕ ѺAњ@(%#χЩ ..(,\ol 0)SBpH2*}r1.o.#$?PR//JK0dF0!12%11g,3&(2=s4[D4Qsn&S5NJ.L|<~mz@\R h8 *"ol#a2 8sNS3Sw1zp;: Rp+R3C / *3qJ>H%:wH2! 30>f>RWA`sPDN TE T'GDzzO>-O A 몟$ /=u;K</#T,Q$QHKC8HIӓMFtE/t?4;BLS4rMs9"OjwNפ%CJ OPPdzy@ =cOmS2ʐO5NREaB6@;>-%SOMUa5{VjRs5AϝR.n M,ԯT隇ўTREt4S͛@ PPU;Xm\EU}5Kɓ]i,}5^0X^#U9)A\^ECa 6b-$bUo,6c.4c%c=6d[EdIdM6eUe]eao ZNg N7y*Y`wf9f3ErVeOkthhkn6H':0r3GōgYNjeji kN@լjo rqj!o8rZ]-#i)hoVXhFE3OukE=n6'^mUM')5.7nln9&s6w%@iG7fƔvktV vm_@vsq6{{3NSzz7Wlv%|PvzEymKWUO}x_j|jwW^3 86wu }mJӴ:[+eg G7--8=7 I.MLQa79u^jCwk3giuMCq/Wk$BUyoBǴ+oW/:I]%`w5X˸uW8 &ֈS{KYcUXi;Ϗ?e5x8a8Yc195y9=A964/[5j v 0a!kg[i hA0Dh)Cs'5:X)Y(ys"C YYW4;j:5#tSpo[OVK\Z$3r ,5[Ĺԙ[\ιKƞGAnMZJ:IeNw*9} կ+6!Eb׍c/'k9~O_MS"8_y1!d WUەpwP8Zt}tk{١퇢}eԟu,étZ֋wUZĝIN~9{Zug.7Cpiz:n(! Գ׬M?d*K7۵yWF_!IS"ڮ3Ü 94f)u4Lzn%У3Iӻ%MD;{b0ձ;Yx8{BxeYf;"uڐ`y–;)|-Y7 9\=g$}͘H\EQ\FSE98'<ӱ}}]Ӽy|ȉȍȑ,>ĨmyXbe%h)gQ+7>~>~?}x.!S[}wJA(B_\j{)mxֿ,QrFf#J\ߝԝz4+XPgqQY@R}cGgw{lؽŬcfR2!.}@4C#%$F;|}9& ђQͅ\WO}o:?  ,?/!C/rˌp葫`Q֜wz?08y1?^d*%vWOeZkh׸ pY>n1'u"ŧUKS `\S!_d\Ȏ%RCb_Ti*ccN(Ũk&^nXVls2+Zu1Rtw)yѢX-%v}7OJ'q+A;*^js!CI F4(1,Σ$[Τy,IH zuLa A2e4u.$goaύ5Y-Y;2-7^PC9*֬Z_ǒ ʥΛeײm-KtoҭkdܻzK.l0Ċ3n1Ȓ'Sl2̚7s3Т)})U=Y\lL,kh$ldR vdթ]Ȗ =ܳ%5ZozXZ-c߱wy'xJXtiu͗La4M ^WSE#VM{9[|]O1F$sWoOތbT5rW(6ZDCi<&51]n?d+DᖰA#Xח.GС iʛ#&GBgyFVNVٜvIMz &ҧl䦠m>_~ÀXχ]sN-#uYo\4fjY>jݨW)r@$DH*iڦ k6Ģyݫ-B")՘00o \ k)vc}Ǒ/[ҥ {_; )jawzkjG5KƱx^ls%2 x2S0g2183c:ZT}tdg))M;OK=uSQS}5F5]{5a=6e}6i6m6q]?(iJD6sIuסn0M[?|BF_R gslv+|r -$)I a,G>M(a}3쯔Nhπ|82 &7ߪIa>w Org7/~.r;ߞx=L0Tb7Yo= G{1_EUp6Ӌ^Ȕ nxb_ v@l+!7huP!ưu4 C+J_f 1=ɂh Ʋ1fjuctłL)w wH-rQ9S']W@e}! ]AGk4YSF6D+ ~gFAC$9I%+#B4Z1pPDO],csI^_$&2&6RȻ)ͦ(Ӽ&6mr&8)q<':өu|'<)i;./src/atp/sHotEqn.java0000644000175000017500000013274011302613615013555 0ustar yvesyves/***************************************************************************** * * * HotEqn Equation Viewer Basic Applet * * * ****************************************************************************** * Java Applet to view mathematical Equations provided in the LaTeX language * ****************************************************************************** Copyright 2006 Stefan Müller and Christian Schmid, modified by Rene Grothmann This file is part of the HotEqn package. HotEqn is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; HotEqn is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package atp; import java.awt.Dimension; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Image; import java.awt.MediaTracker; import java.awt.event.ActionListener; import java.util.Hashtable; import javax.swing.JComponent; public class sHotEqn { JComponent PC; // container panel private int width; private int height; private String _fldcase; private String _fldint; ActionListener G; private final b S; private e D; private Font d; private Font b; private Font _fldnull; private Font _fldlong; private final int j[] = { 14, 12, 10, 8 }; private final int _fldfor[] = { 3, 3, 3, 3 }; private Image s; private boolean Q; private int f; private int H; private final boolean K; private int g; private String z; private String E; private final f _flddo; private final MediaTracker B; private final Hashtable w; public boolean r; public boolean L; public boolean q; private boolean A; private boolean t; private int _fldelse; private int _fldchar; private int J; private int I; private int a; private int m; private int R; private int l; private int F; private boolean c; private int p; private int o; public sHotEqn(final JComponent PC) { width = 0; height = 0; _fldcase = null; _fldint = "Helvetica"; Q = false; f = 0; H = 0; K = false; g = 0; z = "left"; E = "top"; w = new Hashtable(13); r = false; L = false; q = true; A = false; t = true; _fldelse = 0; _fldchar = 0; J = 0; I = 0; a = 0; m = 0; R = 0; l = 0; F = 5; c = false; p = 0; o = 0; _flddo = new f(); B = new MediaTracker(PC); S = new b(""); } public void setEquation(final String s1) { _fldcase = s1; S.a(s1); Q = false; } public String getEquation() { return _fldcase; } public String Status; public void printStatus(final String s1) { Status = s1; } private void a(final String s1) { Status = s1; } public Image getImage() { if (Q) { return s; } else { return null; } } public void setDebug(final boolean flag) { q = flag; } public boolean isDebug() { return q; } public void setFontname(final String s1) { _fldint = s1; } public String getFontname() { return _fldint; } int i10, j10, k10, l10; boolean bold0, fonts = false; public void setHAlign(final String s1) { z = s1; Q = false; } public String getHAlign() { return z; } public void setVAlign(final String s1) { E = s1; Q = false; } public String getVAlign() { return E; } public void setEditable(final boolean flag) { t = flag; } public boolean isEditable() { return t; } public String getSelectedArea() { return S.a(p, o); } public Dimension getPreferredSize() { if ((width == 0) & (height == 0)) { final Graphics g1 = PC.getGraphics(); if (g1 != null) { g1.setFont(d); S._mthdo(); final c c1 = _mthnew(0, 150, false, g1, 1); if (K) { g = 5; } else { g = 0; } f = 1 + c1._flddo + 2 * g; H = 1 + c1._fldif + c1.a + 2 * g; } } width = f; height = H; if (f <= 1) { return new Dimension(100, 100); } else { return new Dimension(f, H); } } final int ff1 = 8, ff2 = 6; public Dimension getSizeof(final String s1, final Graphics g1) { if (d != g1.getFont()) { d = g1.getFont(); final int fs = d.getSize(); b = new Font(d.getFamily(), d.getStyle(), fs * ff1 / 10); _fldnull = _fldlong = new Font(d.getFamily(), d.getStyle(), fs * ff2 / 10); } S.a(s1); final c c1 = _mthnew(0, 150, false, g1, 1); byte byte0; if (K) { byte0 = 5; } else { byte0 = 0; } return new Dimension(1 + c1._flddo + 2 * byte0, 1 + c1._fldif + c1.a + 2 * byte0); } public int getAscent(final String s1, final Graphics g1) { if (d != g1.getFont()) { d = g1.getFont(); final int fs = d.getSize(); b = new Font(d.getFamily(), d.getStyle(), fs * ff1 / 10); _fldnull = _fldlong = new Font(d.getFamily(), d.getStyle(), fs * ff2 / 10); } S.a(s1); final c c1 = _mthnew(0, 150, false, g1, 1); byte byte0; if (K) { byte0 = 5; } else { byte0 = 0; } return c1._fldif + byte0; } public Dimension getMinimumSize() { return getPreferredSize(); } public synchronized int paint(final int cc, final int rr, final Graphics g2) { if (d != g2.getFont()) { d = g2.getFont(); final int fs = d.getSize(); b = new Font(d.getFamily(), d.getStyle(), fs * ff1 / 10); _fldnull = _fldlong = new Font(d.getFamily(), d.getStyle(), fs * ff2 / 10); } c c1 = new c(); g2.setFont(d); g = 0; S._mthdo(); c1 = _mthnew(cc, rr, false, g2, 1); final int hh = c1._fldif; c1 = new c(); S._mthdo(); c1 = _mthnew(cc, rr + hh, true, g2, 1); a(" "); if (z.equals("center")) { } else if (z.equals("right")) { } if (E.equals("middle")) { } else if (E.equals("bottom")) { } f = 1 + c1._flddo + 2 * g; H = 1 + c1._fldif + c1.a + 2 * g; if (f > width) { } if (H > height) { } Q = true; notify(); return c1._fldif + c1.a; } private c _mthnew(final int i1, final int j1, final boolean flag, final Graphics g1, final int k1) { return _mthtry(i1, j1, flag, g1, k1, true); } private c _mthtry(final int i1, final int j1, final boolean flag, final Graphics g1, final int k1, final boolean flag1) { c c1 = new c(); final c c2 = new c(); boolean flag2 = true; boolean flag5 = false; int l1 = 0; while (!S._mthnew() && flag2) { D = S._mthint(); if (A && flag) { l1 = S._mthif(); } boolean flag4 = false; final int i2 = l1; final int j2 = D.y; switch (D.y) { case 4: // '\004' case 7: // '\007' case 8: // '\b' case 17: // '\021' case 51: // '3' if (c && flag) { if (l1 > o) { o = l1; } if (l1 < p) { p = l1; } } return c2; case 22: // '\026' c1 = _mthbyte(i1 + c2._flddo, j1, flag, g1, k1); break; case 5: // '\005' c1 = a(i1 + c2._flddo, j1, flag, g1); break; case 15: // '\017' if (c && flag) { flag5 = true; } c1 = _mthif(i1 + c2._flddo, j1, flag, g1, k1); break; case 50: // '2' if (c && flag) { flag5 = true; } c1 = _mthgoto(i1 + c2._flddo, j1, flag, g1, k1); break; case 3: // '\003' c1 = _mthtry(i1 + c2._flddo, j1, flag, g1, k1, true); break; case 123: // '{' if (c && flag) { flag5 = true; } c1 = _mthelse(i1 + c2._flddo, j1, flag, g1, k1); break; case 1: // '\001' c1 = _mthnew(i1 + c2._flddo, j1, flag, g1); break; case 110: // 'n' c1 = _mthtry(i1 + c2._flddo, j1, flag, g1, k1); break; case 108: // 'l' c1 = _mthint(i1 + c2._flddo, j1, flag, g1); break; case 12: // '\f' c1 = _mthfor(i1 + c2._flddo, j1, flag, g1, k1, true); break; case 1001: // '\f' c1 = _mthfor(i1 + c2._flddo, j1, flag, g1, k1 - 1, true); break; case 115: // 's' c1 = _mthfor(i1 + c2._flddo, j1, flag, g1, k1, false); break; case 2: // '\002' case 9: // '\t' c1 = _mthif(i1 + c2._flddo, j1, flag, g1); break; case 18: // '\022' c1 = _mthif(i1 + c2._flddo, j1, flag, g1, k1, false); break; case 19: // '\023' c1 = _mthif(i1 + c2._flddo, j1, flag, g1, k1, true); break; case 16: // '\020' if (c && flag) { flag5 = true; } c1 = _mthnull(i1 + c2._flddo, j1, flag, g1, k1); break; case 24: // '\030' c1 = _mthfor(i1 + c2._flddo, j1, flag, g1, k1); break; case 124: // '|' c1 = _mthdo(i1 + c2._flddo, j1, flag, g1); break; case 118: // 'v' c1 = a(i1 + c2._flddo, j1, flag, g1, k1); break; case 119: // 'w' c1 = _mthlong(i1 + c2._flddo, j1, flag, g1, k1); break; case 116: // 't' c1 = a(i1 + c2._flddo, j1, flag, g1, k1, true); break; case 117: // 'u' c1 = a(i1 + c2._flddo, j1, flag, g1, k1, false); break; case 109: // 'm' c1 = _mthtry(i1 + c2._flddo, j1, flag, g1); break; case 113: // 'q' c1 = _mthfor(i1 + c2._flddo, j1, flag, g1); break; case 13: // '\r' if (c && flag) { flag5 = true; } c1 = _mthcase(i1 + c2._flddo, j1, flag, g1, k1); break; case 120: // 'x' c1 = _mthchar(i1 + c2._flddo, j1, flag, g1, k1); break; case 10: // '\n' c1 = _mthint(i1 + c2._flddo, j1, flag, g1, k1, true); break; case 11: // '\013' c1 = _mthdo(i1 + c2._flddo, j1, flag, g1, k1, true); break; case 20: // '\024' c1 = _mthdo(i1 + c2._flddo, j1, flag, g1, k1); break; case 14: // '\016' c1 = _mthint(i1 + c2._flddo, j1, flag, g1, k1); break; case 25: // '\031' c1 = new c(0, 0, 0); flag4 = true; break; case 99: // 'c' case 100: // 'd' c1 = new c(0, 0, 0); break; case 6: // '\006' case 21: // '\025' case 23: // '\027' case 26: // '\032' case 27: // '\033' case 28: // '\034' case 29: // '\035' case 30: // '\036' case 31: // '\037' case 32: // ' ' case 33: // '!' case 34: // '"' case 35: // '#' case 36: // '$' case 37: // '%' case 38: // '&' case 39: // '\'' case 40: // '(' case 41: // ')' case 42: // '*' case 43: // '+' case 44: // ',' case 45: // '-' case 46: // '.' case 47: // '/' case 48: // '0' case 49: // '1' case 52: // '4' case 53: // '5' case 54: // '6' case 55: // '7' case 56: // '8' case 57: // '9' case 58: // ':' case 59: // ';' case 60: // '<' case 61: // '=' case 62: // '>' case 63: // '?' case 64: // '@' case 913: case 914: case 915: case 916: case 917: case 918: case 919: case 920: case 921: case 922: case 923: case 924: case 925: case 926: case 927: case 928: case 929: case 930: case 931: case 932: case 933: case 934: case 935: case 936: case 937: case 945: case 946: case 947: case 948: case 949: case 950: case 951: case 952: case 953: case 954: case 955: case 956: case 957: case 958: case 959: case 960: case 961: case 962: case 963: case 964: case 965: case 966: case 967: case 968: case 969:// GreekLetters (unicode) case 65: // 'A' case 66: // 'B' case 67: // 'C' case 68: // 'D' case 69: // 'E' case 70: // 'F' case 71: // 'G' case 72: // 'H' case 73: // 'I' case 74: // 'J' case 75: // 'K' case 76: // 'L' case 77: // 'M' case 78: // 'N' case 79: // 'O' case 80: // 'P' case 81: // 'Q' case 82: // 'R' case 83: // 'S' case 84: // 'T' case 85: // 'U' case 86: // 'V' case 87: // 'W' case 88: // 'X' case 89: // 'Y' case 90: // 'Z' case 91: // '[' case 92: // '\\' case 93: // ']' case 94: // '^' case 95: // '_' case 96: // '`' case 97: // 'a' case 98: // 'b' case 101:// 'e' case 102: // 'f' case 103: // 'g' case 104: // 'h' case 105: // 'i' case 106: // 'j' case 107: // 'k' case 111: // 'o' case 112: // 'p' case 114: // 'r' default: printStatus("Parser: unknown token: " + D.y + " " + D.w); break; } if (flag) { if (A) { if (!c && i1 + c2._flddo <= _fldelse && _fldelse <= i1 + c2._flddo + c1._flddo && j1 - c1._fldif <= _fldchar && _fldchar <= j1 + c1.a) { m = l = _fldelse; a = R = _fldchar; c = true; p = l1; o = l1; } if (!c && i1 + c2._flddo <= J && J <= i1 + c2._flddo + c1._flddo && j1 - c1._fldif <= I && I <= j1 + c1.a) { m = l = J; a = R = I; c = true; p = l1; o = l1; final int k2 = J; final int l2 = I; J = _fldelse; I = _fldchar; _fldelse = k2; _fldchar = l2; } if (c) { m = Math.min(m, i1 + c2._flddo); l = Math.max(l, i1 + c2._flddo + c1._flddo); a = Math.min(a, j1 - c1._fldif); R = Math.max(R, j1 + c1.a); if (F > k1) { F = k1; } switch (j2) { case 13: // '\r' case 15: // '\017' case 16: // '\020' case 50: // '2' case 123: // '{' case 124: // '|' flag5 = true; if (i2 > o) { o = i2; } if (i2 < p) { p = i2; } l1 = S._mthif(); break; } if (l1 > o) { o = l1; } if (l1 < p) { p = l1; } if (i1 + c2._flddo <= J && J <= i1 + c2._flddo + c1._flddo && j1 - c1._fldif <= I && I <= j1 + c1.a && F == k1) { A = false; c = false; } } } if (flag5) { m = Math.min(m, i1 + c2._flddo); l = Math.max(l, i1 + c2._flddo + c1._flddo); a = Math.min(a, j1 - c1._fldif); R = Math.max(R, j1 + c1.a); switch (j2) { case 13: // '\r' case 15: // '\017' case 16: // '\020' case 50: // '2' case 123: // '{' case 124: // '|' if (i2 > o) { o = i2; } if (i2 < p) { p = i2; } l1 = S._mthif(); break; } if (l1 > o) { o = l1; } if (l1 < p) { p = l1; } flag5 = false; } } c2._flddo += c1._flddo; c2._fldif = Math.max(c2._fldif, c1._fldif); c2.a = Math.max(c2.a, c1.a); if (!flag1 && !flag4) { flag2 = false; } } return c2; } private c _mthbyte(final int i1, final int j1, final boolean flag, final Graphics g1, final int k1) { c c1 = new c(); int l1 = 0; final FontMetrics fontmetrics = g1.getFontMetrics(); final String s1 = D.w; if (flag) { l1 = S._mthif(); } c1 = _mthtry(i1, j1, false, g1, k1, false); final int i2 = Math.max(c1._flddo, fontmetrics.stringWidth(s1)); final int j2 = c1._fldif + fontmetrics.getAscent() / 2; final int k2 = c1.a; if (flag) { S.a(l1); _mthtry(i1, j1, true, g1, k1, false); final int l2 = 3 * ((i2 - fontmetrics.stringWidth(s1)) / 4); if (s1.equals(".") | s1.equals("..")) { g1.drawString(s1, i1 + l2, j1 - fontmetrics.getAscent()); } else if (s1.equals("\264") | s1.equals("`")) { g1.drawString(s1, i1 + l2, j1 - fontmetrics.getAscent() / 3); } else { g1.drawString(s1, i1 + l2, j1 - (fontmetrics.getAscent() * 2) / 3); } } return new c(i2, j2, k2); } private c a(final int i1, final int j1, final boolean flag, final Graphics g1) { new c(); final FontMetrics fontmetrics = g1.getFontMetrics(); final int k1 = g1.getFont().getSize() / 2; final int l1 = fontmetrics.getHeight() - fontmetrics.getDescent(); final int i2 = fontmetrics.getDescent(); if (flag) { final int j2 = (j1 - l1) + 1; final int k2 = (j1 + i2) - 1; final int l2 = (j2 + k2) / 2; if (D.w.equals("<")) { g1.drawLine(i1 + k1, j2, i1, l2); g1.drawLine(i1, l2, i1 + k1, k2); } else { g1.drawLine(i1, j2, i1 + k1, l2); g1.drawLine(i1 + k1, l2, i1, k2); } } return new c(k1, l1, i2); } private c _mthif(final int i1, final int j1, final boolean flag, final Graphics g1, final int k1) { int l2 = 0; final int ai[] = new int[100]; final int ai1[] = new int[100]; final int ai2[] = new int[100]; new c(); int i3 = 0; final FontMetrics fontmetrics = g1.getFontMetrics(); final int j3 = g1.getFont().getSize(); if (flag) { i3 = S._mthif(); } if (!a(3, "ARRAY: BeginSym")) { return new c(0, 0, 0); } for (int k3 = 0; k3 < 99; k3++) { int i2 = 0; int k2 = 0; for (int l3 = 0; l3 < 99; l3++) { final c c2 = _mthnew(i1, j1, false, g1, k1); i2 = Math.max(i2, c2._fldif); k2 = Math.max(k2, c2.a); ai[l3] = Math.max(ai[l3], c2._flddo + j3); if (D.y == 8 || D.y == 4) { break; } } ai1[k3] = Math.max(ai1[k3], i2); ai2[k3] = Math.max(ai2[k3], k2); l2 += i2 + k2; if (D.y == 4) { break; } } int i4 = 0; for (int j4 = 0; j4 < 99; j4++) { i4 += ai[j4]; } if (flag) { S.a(i3); a(3, "ARRAY: Begin"); int j2 = 0; for (int k4 = 0; k4 < 99; k4++) { int l1 = 0; if (k4 == 0) { j2 = ai1[k4]; } else { j2 += ai2[k4 - 1] + ai1[k4]; } for (int l4 = 0; l4 < 99; l4++) { _mthnew(i1 + l1, (j1 - l2 / 2 - fontmetrics.getDescent()) + j2, true, g1, k1); l1 += ai[l4]; if (D.y == 8 || D.y == 4) { break; } } if (D.y == 4) { break; } } } return new c(i4 - j3, l2 / 2 + fontmetrics.getDescent(), l2 / 2 - fontmetrics.getDescent()); } private c _mthgoto(final int i1, final int j1, final boolean flag, final Graphics g1, final int k1) { int i2 = 0; int j3 = 0; final int ai[] = new int[100]; final int ai1[] = new int[100]; final int ai2[] = new int[100]; final int ai3[] = new int[100]; final int ai4[] = new int[100]; int k3 = 0; int l3 = 0; int i4 = 0; new c(); int j4 = 0; final FontMetrics fontmetrics = g1.getFontMetrics(); final int k5 = g1.getFont().getSize(); int l5 = 0; boolean flag3 = false; boolean flag4 = true; boolean flag5 = true; if (!a(3)) { return new c(0, 0, 0); } if (S._mthint().w.equals("eqnarray")) { flag5 = false; } if (!a(4, "BEGIN: EndSym")) { return new c(0, 0, 0); } if (flag5) { j4 = S._mthif(); if (!a(3)) { flag4 = false; S.a(j4); } } if (flag5 && flag4) { new e(); for (e e2 = S._mthint(); e2.y != 4; e2 = S._mthint()) { final StringBuffer stringbuffer = new StringBuffer(e2.w); for (int i7 = 0; i7 < stringbuffer.length(); i7++) { switch (stringbuffer.charAt(i7)) { case 108: // 'l' ai3[l5] = 1; if (l5 < 99) { l5++; } break; case 99: // 'c' ai3[l5] = 2; if (l5 < 99) { l5++; } break; case 114: // 'r' ai3[l5] = 3; if (l5 < 99) { l5++; } break; case 64: // '@' ai3[l5] = 4; ai4[l5] = S._mthif(); final c c2 = _mthtry(i1, j1, false, g1, k1, false); k3 += c2._flddo; l3 = Math.max(l3, c2._fldif); i4 = Math.max(i4, c2.a); if (l5 < 99) { l5++; } break; case 42: // '*' a(3, "Begin *{"); int j6; try { j6 = Integer.parseInt(S._mthint().w); } catch (final NumberFormatException numberformatexception) { j6 = 0; } a(4, 3, "Begin }{"); final int l7 = S._mthif(); for (int j8 = 0; j8 < j6; j8++) { S.a(l7); for (e2 = S._mthint(); e2.y != 4; e2 = S._mthint()) { final StringBuffer stringbuffer1 = new StringBuffer( e2.w); for (int l8 = 0; l8 < stringbuffer1.length(); l8++) { switch (stringbuffer1.charAt(l8)) { case 108: // 'l' ai3[l5] = 1; if (l5 < 99) { l5++; } break; case 99: // 'c' ai3[l5] = 2; if (l5 < 99) { l5++; } break; case 114: // 'r' ai3[l5] = 3; if (l5 < 99) { l5++; } break; case 64: // '@' ai3[l5] = 4; ai4[l5] = S._mthif(); final c c3 = _mthtry(i1, j1, false, g1, k1, false); k3 += c3._flddo; l3 = Math.max(l3, c3._fldif); i4 = Math.max(i4, c3.a); if (l5 < 99) { l5++; } break; default: printStatus("P: begin: illegal format 2"); break; } } } } break; default: printStatus("P: begin: illegal format 1"); break; } } } } if (!flag5) { ai3[0] = 3; ai3[1] = 2; ai3[2] = 1; l5 = 3; } for (int k6 = 0; k6 < l5 - 1; k6++) { if (ai3[k6] != 4 && ai3[k6 + 1] != 4) { i2 += k5 / 2; } } if (flag) { j4 = S._mthif(); } for (int l6 = 0; l6 < 99; l6++) { int j2 = 0; int l2 = 0; for (int j7 = 0; j7 < 99; j7++) { final c c4 = _mthnew(i1, j1, false, g1, k1); j2 = Math.max(j2, c4._fldif); l2 = Math.max(l2, c4.a); ai[j7] = Math.max(ai[j7], c4._flddo); if (D.y == 8 || D.y == 51) { break; } } j2 = Math.max(j2, l3); l2 = Math.max(l2, i4); ai1[l6] = j2; ai2[l6] = l2; j3 += j2 + l2; if (D.y == 51) { break; } } for (int i6 = 0; i6 < 99; i6++) { i2 += ai[i6]; } i2 += (2 * k5) / 2; if (flag) { S.a(j4); int k2 = 0; final int i3 = j3 / 2 + fontmetrics.getDescent(); for (int k7 = 0; k7 < 99; k7++) { int l1 = k5 / 2; if (k7 == 0) { k2 = ai1[k7]; } else { k2 += ai2[k7 - 1] + ai1[k7]; } int i8 = 0; for (int k8 = 0; k8 < 99; k8++) { while (ai3[i8] == 4) { final int k4 = S._mthif(); S.a(ai4[i8]); final c c5 = _mthtry(i1 + l1, (j1 - i3) + k2, true, g1, k1, false); l1 += c5._flddo; S.a(k4); i8++; } switch (ai3[i8]) { case 0: // '\0' case 1: // '\001' _mthnew(i1 + l1, (j1 - i3) + k2, true, g1, k1); i8++; break; case 2: // '\002' final int l4 = S._mthif(); c c7 = _mthnew(i1, j1, false, g1, k1); S.a(l4); c7 = _mthnew(i1 + l1 + (ai[k8] - c7._flddo) / 2, (j1 - i3) + k2, true, g1, k1); i8++; break; case 3: // '\003' final int i5 = S._mthif(); c c8 = _mthnew(i1, j1, false, g1, k1); S.a(i5); c8 = _mthnew((i1 + l1 + ai[k8]) - c8._flddo, (j1 - i3) + k2, true, g1, k1); i8++; break; } if (ai3[i8] != 4) { l1 += k5 / 2; } l1 += ai[k8]; boolean flag2 = false; flag3 = false; if (D.y == 8) { flag2 = true; } else if (D.y == 51) { flag2 = true; flag3 = true; } for (; ai3[i8] == 4; i8++) { final int j5 = S._mthif(); S.a(ai4[i8]); final c c9 = _mthtry(i1 + l1, (j1 - i3) + k2, true, g1, k1, false); l1 += c9._flddo; S.a(j5); } if (flag2) { break; } } if (flag3) { break; } } } if (!a(3, "BEGIN 2: begin")) { return new c(0, 0, 0); } S._mthint(); if (!a(4, "BEGIN 2: end")) { return new c(0, 0, 0); } else { return new c(i2 + k3, j3 / 2 + fontmetrics.getDescent(), j3 / 2 - fontmetrics.getDescent()); } } private c _mthelse(final int i1, final int j1, final boolean flag, final Graphics g1, final int k1) { c c1 = new c(); final int l1 = g1.getFont().getSize() / 2; c1 = _mthtry(i1 + l1, j1, flag, g1, k1, false); if (flag) { g1.drawRect(i1 + l1 / 2, j1 - c1._fldif - l1 / 2, c1._flddo + l1, c1._fldif + c1.a + l1); } return new c(c1._flddo + l1 + l1, c1._fldif + l1, c1.a + l1); } private c _mthfor(final int i1, final int j1, final boolean flag, final Graphics g1, final int k1, final boolean flag1) { int l1 = 0; new c(); c c3 = new c(); c c4 = new c(); int i2 = 0; final Font font = g1.getFont(); font.getSize(); a(g1, k1 + 1); final FontMetrics fontmetrics = g1.getFontMetrics(); if (flag) { i2 = S._mthif(); } c3 = _mthtry(i1, j1, false, g1, k1 + 1, false); int k2 = c3._fldif + c3.a; c4 = _mthtry(i1, j1, false, g1, k1 + 1, false); int l2 = Math.max(c3._flddo, c4._flddo); int i3 = c4._fldif + c4.a; final Font font1 = g1.getFont(); final int j3 = (3 * font1.getSize()) / 18; l2 += 2 * j3; if (fontmetrics.getAscent() < i3) { l1 = fontmetrics.getAscent() / 2; } k2 += 2 + l1; i3 += 1 - l1; if (flag) { S.a(i2); if (flag1) { g1.drawLine(i1 + j3, j1 - l1, (i1 + l2) - j3, j1 - l1); } _mthtry(i1 + (l2 - c3._flddo) / 2, j1 - 2 - c3.a - l1, true, g1, k1 + 1, false); if (c && k1 < F) { F = k1; } _mthtry(i1 + (l2 - c4._flddo) / 2, (j1 + 1 + c4._fldif) - l1, true, g1, k1 + 1, false); } a(g1, k1); return new c(l2, k2, i3); } private c _mthnew(final int i1, final int j1, final boolean flag, final Graphics g1) { final FontMetrics fontmetrics = g1.getFontMetrics(); if (flag) { g1.drawString(D.w, i1, j1); // System.out.println(g1.getFont()); // System.out.println("5: "+D.w); } final int k1 = fontmetrics.stringWidth(D.w); final int l1 = fontmetrics.getHeight() - fontmetrics.getDescent(); final int i2 = fontmetrics.getDescent(); return new c(k1, l1, i2); } private void a(final Graphics g1, final int i1, final int j1, final int k1, final int l1, final int i2) { g1.drawArc(i1 - k1, j1 - k1, 2 * k1, 2 * k1, l1, i2); } private void a(final Graphics g1, final String s1, final int i1, final int j1, final int k1, final int l1, final int i2, final int j2) { final int k2 = j1 / 2; final int l2 = i1 + k2; final int i3 = i1 + j1; final int j3 = i1 + k2 / 2; final int k3 = l2 + k2 / 2; final int l3 = (k1 + l1) / 2; final int i4 = (int) ((double) k2 * 0.86602540378444004D); final int j4 = k1 + i4; final int k4 = l1 - i4; if (s1.equals("[")) { g1.drawLine(j3, k1, j3, l1); g1.drawLine(j3, l1, k3, l1); g1.drawLine(j3, k1, k3, k1); } else if (s1.equals("]")) { g1.drawLine(k3, k1, k3, l1); g1.drawLine(j3, l1, k3, l1); g1.drawLine(j3, k1, k3, k1); } else if (s1.equals("|")) { g1.drawLine(l2, k1, l2, l1); } else if (s1.equals("||")) { final int l4 = l2 + i2 / 4; g1.drawLine(l2, k1, l2, l1); g1.drawLine(l4, k1, l4, l1); } else if (s1.equals("(")) { for (int i5 = j2; i5 < 2 + j2; i5++) { final int i6 = j3 + i5; a(g1, k3 + i5, j4, k2, 180, -60); g1.drawLine(i6, j4, i6, k4); a(g1, k3 + i5, k4, k2, 180, 60); } } else if (s1.equals(")")) { for (int j5 = j2; j5 < 2 + j2; j5++) { final int j6 = k3 + j5; a(g1, j3 + j5, j4, k2, 0, 60); g1.drawLine(j6, j4, j6, k4); a(g1, j3 + j5, k4, k2, 0, -60); } } else if (s1.equals("<")) { g1.drawLine(j3, l3, k3, k1); g1.drawLine(j3, l3, k3, l1); } else if (s1.equals(">")) { g1.drawLine(k3, l3, j3, k1); g1.drawLine(k3, l3, j3, l1); } else if (s1.equals("{")) { for (int k5 = j2; k5 < 2 + j2; k5++) { final int k6 = l2 + k5; a(g1, i3 + k5, j4, k2, 180, -60); g1.drawLine(k6, j4, k6, l3 - k2); a(g1, i1 + k5, l3 - k2, k2, 0, -90); a(g1, i1 + k5, l3 + k2, k2, 0, 90); g1.drawLine(k6, l3 + k2, k6, k4); a(g1, i3 + k5, k4, k2, 180, 60); } } else if (s1.equals("}")) { for (int l5 = j2; l5 < 2 + j2; l5++) { final int l6 = l2 + l5; a(g1, i1 + l5, j4, k2, 0, 60); g1.drawLine(l6, j4, l6, l3 - k2); a(g1, i3 + l5, l3 - k2, k2, -180, 90); a(g1, i3 + l5, l3 + k2, k2, 180, -90); g1.drawLine(l6, l3 + k2, l6, k4); a(g1, i1 + l5, k4, k2, 0, -60); } } } private c _mthnull(final int i1, final int j1, final boolean flag, final Graphics g1, final int k1) { int l1 = 0; int i2 = 0; c c1 = new c(); int j2 = 0; final Font font = g1.getFont(); final int k2 = font.getSize(); final int l2 = (int) (2.0F * (float) k2); int i3 = k2 / 9; if (flag) { j2 = S._mthif(); } final String s1 = S._mthint().w; c1 = _mthnew(i1, j1, false, g1, k1); final int j3 = c1._flddo; int k3 = c1._fldif; int l3 = c1.a; final int i4 = (j1 - k3) + 1; final int j4 = (j1 + l3) - 1; final String s3 = S._mthint().w; final int k4 = (k3 + l3) - 2; final Font font1 = new Font(font.getFamily(), font.getStyle(), k4); g1.setFont(font1); final FontMetrics fontmetrics = g1.getFontMetrics(); if (s1.equals("<") || s1.equals(">")) { l1 = k2; } else if (k4 < l2) { l1 = fontmetrics.stringWidth(s1); if ("([{)]}".indexOf(s1) >= 0) { l1 += i3; } } else { l1 = k2; } if (s3.equals("<") || s3.equals(">")) { i2 = k2; } else if (k4 < l2) { i2 = fontmetrics.stringWidth(s3); if ("([{)]}".indexOf(s3) >= 0) { i2 += i3; } } else { i2 = k2; } g1.setFont(font); final int l4 = S._mthif(); int j5 = 0; int k5 = 0; if (S._mthint().y == 11) { final c c2 = _mthdo(i1, j1, false, g1, k1, false); j5 = c2._flddo; k5 = (j4 + c2._fldif) - (c2._fldif + c2.a) / 2; l3 += (c2._fldif + c2.a) / 2; } else { S.a(l4); } final int l5 = S._mthif(); int j6 = 0; int k6 = 0; if (S._mthint().y == 10) { final c c3 = _mthint(i1, j1, false, g1, k1, false); j6 = c3._flddo; k6 = (i4 + c3._fldif) - (c3._fldif + c3.a) / 2; k3 += (c3._fldif + c3.a) / 2; } else { S.a(l5); } j5 = Math.max(j5, j6); if (flag) { S.a(j2); final String s2 = S._mthint().w; if (!s2.equals(".")) { if (k4 < l2 && !s2.equals("<") && !s2.equals(">")) { g1.setFont(font1); g1.drawString(s2, i1, j4 - fontmetrics.getDescent() - fontmetrics.getLeading() / 2); g1.setFont(font); } else { a(g1, s2, i1, l1, i4, j4, k2, 0); } } _mthnew(i1 + l1, j1, true, g1, k1); final String s4 = S._mthint().w; if (!s4.equals(".")) { if (k4 < l2 && !s4.equals("<") && !s4.equals(">")) { g1.setFont(font1); if ("([{)]}".indexOf(s4) < 0) { i3 = 0; } g1.drawString(s4, i1 + j3 + l1 + i3, j4 - fontmetrics.getDescent() - fontmetrics.getLeading() / 2); // System.out.println("2: "+s4); g1.setFont(font); } else { a(g1, s4, i1 + j3 + l1, i2, i4, j4, -k2, -1); } } final int i5 = S._mthif(); if (a(11)) { _mthdo(i1 + j3 + l1 + i2, k5, true, g1, k1, false); } else { S.a(i5); } final int i6 = S._mthif(); if (a(10)) { _mthint(i1 + j3 + l1 + i2, k6, true, g1, k1, false); } else { S.a(i6); } } return new c(j3 + l1 + i2 + j5, k3 + 2, l3 + 2); } private c _mthfor(final int i1, final int j1, final boolean flag, final Graphics g1, final int k1) { int l1 = 0; new c(); int i2 = 0; int j2 = 0; final FontMetrics fontmetrics = g1.getFontMetrics(); final String s1 = D.w; final int k2 = S._mthif(); final int l2 = l1 = fontmetrics.stringWidth(s1); final int i3 = fontmetrics.getHeight() - fontmetrics.getDescent(); int j3 = fontmetrics.getDescent(); if (a(11)) { final c c2 = _mthdo(i1, j1, false, g1, k1, false); i2 = c2._flddo; l1 = Math.max(l1, c2._flddo); j2 = c2._fldif; j3 = c2._fldif + c2.a; } else { S.a(k2); } if (flag) { S.a(k2); g1.drawString(s1, i1 + (l1 - l2) / 2, j1); if (a(11)) { _mthdo(i1 + (l1 - i2) / 2, j1 + j2, true, g1, k1, false); } else { S.a(k2); } } return new c(l1, i3, j3); } private c _mthdo(final int i1, final int j1, final boolean flag, final Graphics g1) { int k1 = 0; int l1 = 0; int i2 = 0; new c(); if (!a(3)) { return new c(0, 0, 0); } while (!S._mthnew()) { D = S._mthint(); if (D.y == 4) { break; } final c c2 = _mthif(i1 + k1, j1, flag, g1); k1 += c2._flddo; l1 = Math.max(l1, c2._fldif); i2 = Math.max(i2, c2.a); } return new c(k1, l1, i2); } private c _mthtry(final int i1, final int j1, final boolean flag, final Graphics g1, final int k1) { c c1 = new c(); c1 = _mthtry(i1, j1, flag, g1, k1, false); if (flag) { g1.drawLine(i1 + c1._flddo / 4, j1 + c1.a, i1 + (c1._flddo * 3) / 4, j1 - c1._fldif); } return c1; } private c _mthint(final int i1, final int j1, final boolean flag, final Graphics g1) { final FontMetrics fontmetrics = g1.getFontMetrics(); if (flag) { g1.drawString(D.w, i1 + 1, j1); // System.out.println("3: "+D.w); } return new c(fontmetrics.stringWidth(D.w) + 2, fontmetrics.getHeight() - fontmetrics.getDescent(), fontmetrics.getDescent()); } private c a(final int i1, final int j1, final boolean flag, final Graphics g1, final int k1) { int l1 = 0; c c1 = new c(); final int i2 = g1.getFont().getSize() / 4; final int j2 = i2 / 2; int k2 = 0; int l2 = 0; int i3 = 0; if (flag) { l1 = S._mthif(); } c1 = _mthtry(i1, j1, false, g1, k1, false); int j3 = c1._flddo; final int k3 = j3 / 2; int l3 = k3; int i4 = c1._fldif; final int j4 = c1.a; final int k4 = S._mthif(); if (a(10)) { final c c2 = _mthint(i1, j1, false, g1, k1, false); k2 = c2._flddo; l3 = Math.max(l3, k2 / 2); l2 = i4 + c2.a; i3 = c2._fldif + c2.a; } else { S.a(k4); } if (flag) { S.a(l1); final int i5 = (i1 + l3) - k3; _mthtry(i5, j1, true, g1, k1, false); final int j5 = (int) ((double) i2 * 0.86602540378444004D); for (int k5 = 0; k5 < 2; k5++) { final int l5 = (j1 - i4 - j2) + k5; a(g1, i5 + j5, l5 + i2, i2, 90, 60); g1.drawLine(i5 + j5, l5, (i5 + k3) - i2, l5); a(g1, (i5 + k3) - i2, l5 - i2, i2, 0, -90); a(g1, i5 + k3 + i2, l5 - i2, i2, -90, -90); g1.drawLine(i5 + k3 + i2, l5, (i5 + j3) - j5, l5); a(g1, (i5 + j3) - j5, l5 + i2, i2, 90, -60); } final int l4 = S._mthif(); if (a(10)) { _mthint((i1 + l3) - k2 / 2, j1 - l2 - i2 - j2, true, g1, k1, false); } else { S.a(l4); } } i4 += i3 + i2 + j2; j3 = Math.max(j3, k2); return new c(j3, i4, j4); } private c _mthlong(final int i1, final int j1, final boolean flag, final Graphics g1, final int k1) { int l1 = 0; c c1 = new c(); final int i2 = g1.getFont().getSize() / 4; final int j2 = i2 / 2; int k2 = 0; int l2 = 0; int i3 = 0; if (flag) { l1 = S._mthif(); } c1 = _mthtry(i1, j1, false, g1, k1, false); int j3 = c1._flddo; final int k3 = j3 / 2; int l3 = k3; final int i4 = c1._fldif; int j4 = c1.a; final int k4 = S._mthif(); if (a(11)) { final c c2 = _mthdo(i1, j1, false, g1, k1, false); k2 = c2._flddo; l3 = Math.max(l3, k2 / 2); l2 = j4 + c2._fldif; i3 = c2._fldif + c2.a; } else { S.a(k4); } if (flag) { S.a(l1); final int i5 = (i1 + l3) - k3; _mthtry(i5, j1, true, g1, k1, false); final int j5 = (int) ((double) i2 * 0.86602540378444004D); for (int k5 = 0; k5 < 2; k5++) { final int l5 = (j1 + j4 + j2) - k5; a(g1, i5 + j5, l5 - i2, i2, -90, -60); g1.drawLine(i5 + j5, l5, (i5 + k3) - i2, l5); a(g1, (i5 + k3) - i2, l5 + i2, i2, 90, -90); a(g1, i5 + k3 + i2, l5 + i2, i2, 90, 90); g1.drawLine(i5 + k3 + i2, l5, (i5 + j3) - j5, l5); a(g1, (i5 + j3) - j5, l5 - i2, i2, -90, 60); } final int l4 = S._mthif(); if (S._mthint().y == 11) { _mthdo((i1 + l3) - k2 / 2, j1 + l2 + i2 + j2, true, g1, k1, false); } else { S.a(l4); } } j4 += i3 + i2 + j2; j3 = Math.max(j3, k2); return new c(j3, i4, j4); } private c a(final int i1, final int j1, final boolean flag, final Graphics g1, final int k1, final boolean flag1) { int l1 = 0; c c1 = new c(); if (flag) { l1 = S._mthif(); } c1 = _mthtry(i1, j1, false, g1, k1, false); if (flag1) { c1._fldif += 2; } else { c1.a += 2; } final int i2 = c1._fldif; final int j2 = c1.a; if (flag) { S.a(l1); if (flag1) { g1.drawLine(i1 + 1, (j1 - i2) + 2, (i1 + c1._flddo) - 1, (j1 - i2) + 2); } else { g1.drawLine(i1, (j1 + j2) - 2, i1 + c1._flddo, (j1 + j2) - 2); } c1 = _mthtry(i1, j1, true, g1, k1, false); } return new c(c1._flddo, i2, j2); } private c _mthtry(int i1, final int j1, final boolean flag, final Graphics g1) { final FontMetrics fontmetrics = g1.getFontMetrics(); final int k1 = g1.getFont().getSize() / 9; int l1 = fontmetrics.stringWidth(D.w); final int i2 = "([{)]}".indexOf(D.w); if (i2 >= 0) { l1 += k1; if (i2 > 2) { i1 += k1; } } if (flag) { g1.drawString(D.w, i1, j1); // System.out.println("2: "+D.w); } return new c(l1, fontmetrics.getHeight() - fontmetrics.getDescent(), fontmetrics.getDescent()); } private c _mthif(final int i1, final int j1, final boolean flag, final Graphics g1) { final FontMetrics fontmetrics = g1.getFontMetrics(); if (flag) { g1.drawString(D.w, i1, j1); // System.out.println(g1.getFont()); // System.out.println("1: "+D.w); } return new c(fontmetrics.stringWidth(D.w), fontmetrics.getHeight() - fontmetrics.getDescent(), fontmetrics.getDescent()); } private c _mthfor(final int i1, final int j1, final boolean flag, final Graphics g1) { int k1 = 0; final Font font = g1.getFont(); try { k1 = Integer.parseInt(D.w); } catch (final NumberFormatException numberformatexception) { k1 = 0; } k1 = (k1 * font.getSize()) / 18; return new c(k1, 0, 0); } private c _mthcase(final int i1, final int j1, final boolean flag, final Graphics g1, final int k1) { c c1 = new c(); int l1 = 0; final FontMetrics fontmetrics = g1.getFontMetrics(); int i2 = 0; int k2 = 0; int l2 = 0; boolean flag2 = false; if (flag) { l1 = S._mthif(); } final int i3 = fontmetrics.stringWidth("A"); final int j3 = i3 / 2; final int k3 = S._mthif(); e e1 = new e(); e1 = S._mthint(); if (e1.w.equals("[")) { a(g1, k1 + 1); c1 = _mthtry(i1, j1, false, g1, k1 + 1, true); a(g1, k1); i2 = c1._flddo; final int j2 = c1._fldif; k2 = c1.a; l2 = k2 + j2; flag2 = true; } else { S.a(k3); } c1 = _mthtry(i1, j1, false, g1, k1, false); int l3 = c1._flddo + i3; int i4 = c1._fldif + 2; final int j4 = c1.a; if (flag2 & (i2 > j3)) { l3 += i2 - j3; } if (flag) { S.a(l1); int k4 = 0; if (flag2 & (i2 > j3)) { k4 = i2 - j3; } g1.drawLine(i1 + k4 + 1, j1 - i4 / 2, i1 + k4 + j3, (j1 + j4) - 1); g1.drawLine(i1 + k4 + j3, (j1 + j4) - 1, (i1 + k4 + i3) - 2, (j1 - i4) + 2); g1.drawLine((i1 + k4 + i3) - 2, (j1 - i4) + 2, i1 + l3, (j1 - i4) + 2); if (flag2) { S._mthint(); a(g1, k1 + 1); if (i2 >= j3) { g1.drawLine(i1 + 1, j1 - i4 / 2, i1 + k4 + 1, j1 - i4 / 2); _mthtry(i1 + 1, j1 - i4 / 2 - k2 - 1, true, g1, k1 + 1, true); } else { _mthtry(i1 + 1 + (j3 - i2), j1 - i4 / 2 - k2 - 1, true, g1, k1 + 1, true); } a(g1, k1); } _mthtry(i1 + k4 + i3, j1, true, g1, k1, false); } if (flag2 & (i4 / 2 < l2)) { i4 = i4 / 2 + l2; } return new c(l3, i4, j4); } private c _mthchar(final int i1, final int j1, final boolean flag, final Graphics g1, final int k1) { c c1 = new c(); int l1 = 0; final int i2 = g1.getFontMetrics().getLeading(); if (flag) { l1 = S._mthif(); } c1 = _mthint(i1, j1, false, g1, k1, true); int j2 = c1._flddo; final int k2 = c1._flddo; int l2 = (c1._fldif + c1.a) - i2; int i3 = c1.a - i2; c1 = _mthtry(i1, j1, false, g1, k1, false); j2 = Math.max(j2, c1._flddo); final int j3 = j2 / 2; final int k3 = c1._flddo; l2 += c1._fldif; final int l3 = c1.a; i3 += c1._fldif; if (flag) { S.a(l1); _mthint((i1 + j3) - k2 / 2, j1 - i3, true, g1, k1, false); _mthtry((i1 + j3) - k3 / 2, j1, true, g1, k1, false); } return new c(j2, l2, l3); } private c _mthdo(final int i1, final int j1, final boolean flag, final Graphics g1, final int k1, final boolean flag1) { int l1 = 0; int i2 = 0; c c1 = new c(); int j2 = 0; final int l2 = g1.getFontMetrics().getAscent() / 2; if (flag) { j2 = S._mthif(); } a(g1, k1 + 1); c1 = _mthtry(i1, j1, false, g1, k1 + 1, false); int i3 = c1._flddo; if (flag1) { l1 = l2 - 1; i2 = (c1._fldif + c1.a) - l1; } else { i2 = c1._fldif + c1.a; } if (flag) { S.a(j2); if (flag1) { c1 = _mthtry(i1, (j1 + c1._fldif) - l1, true, g1, k1 + 1, false); } else { c1 = _mthtry(i1, j1 + c1._fldif, true, g1, k1 + 1, false); } } a(g1, k1); if (flag1) { final int k2 = S._mthif(); if (a(10)) { final c c2 = _mthint(i1, j1, flag, g1, k1, true); i3 = Math.max(i3, c2._flddo); l1 = Math.max(l1, c2._fldif); } else { S.a(k2); } } return new c(i3, l1, i2); } private c _mthint(final int i1, final int j1, final boolean flag, final Graphics g1, final int k1, final boolean flag1) { int l1 = 0; int i2 = 0; c c1 = new c(); int j2 = 0; final int l2 = g1.getFontMetrics().getAscent() / 2; if (flag) { j2 = S._mthif(); } a(g1, k1 + 1); c1 = _mthtry(i1, j1, false, g1, k1 + 1, false); int i3 = c1._flddo; if (flag1) { i2 = -l2 - 1; l1 = (c1._fldif + c1.a) - i2; } else { l1 = c1._fldif + c1.a; } if (flag) { S.a(j2); if (flag1) { c1 = _mthtry(i1, (j1 - c1.a) + i2, true, g1, k1 + 1, false); } else { c1 = _mthtry(i1, j1 - c1.a, true, g1, k1 + 1, false); } } a(g1, k1); if (flag1) { final int k2 = S._mthif(); if (a(11)) { final c c2 = _mthdo(i1, j1, flag, g1, k1, true); i3 = Math.max(i3, c2._flddo); i2 = Math.max(i2, c2.a); } else { S.a(k2); } } return new c(i3, l1, i2); } private Image _mthif(final Graphics g1, final int i1) { final String s1 = D.w + j[i1 - 1] + g1.getColor().getRGB(); if (!w.containsKey(s1)) { final String s2 = "Fonts/Greek" + j[i1 - 1] + "/" + D.w + ".gif"; final Image image = _flddo.a(s2, g1); final int j1 = S._mthif(); B.addImage(image, j1); a("Loading " + D.w); try { B.waitForID(j1, 10000L); } catch (final InterruptedException interruptedexception) { } if (B.isErrorID(j1)) { a("Error loading " + D.w); } else { w.put(s1, image); } return image; } else { return (Image) w.get(s1); } } private c _mthif(final int i1, final int j1, final boolean flag, final Graphics g1, int k1, final boolean flag1) { final FontMetrics fontmetrics = g1.getFontMetrics(); k1 = Math.min(k1, j.length); final Image image = _mthif(g1, k1); int l1 = image.getWidth(PC); if (l1 < 0) { l1 = fontmetrics.getMaxAdvance(); } if (flag) { int i2 = 0; if (flag1) { i2 = _fldfor[k1 - 1]; } g1.drawImage(image, i1, (j1 - image.getHeight(PC)) + i2, PC); } return new c(l1, fontmetrics.getHeight() - fontmetrics.getDescent(), fontmetrics.getDescent()); } private c _mthdo(final int i1, final int j1, final boolean flag, final Graphics g1, int k1) { int l1 = 0; new c(); int i2 = 0; int j2 = 0; int k2 = 0; int l2 = 0; int i3 = 0; final int j3 = g1.getFontMetrics().getAscent(); k1 = Math.min(k1, j.length); final Image image = _mthif(g1, k1); int k3 = l1 = image.getWidth(PC); int l3 = image.getHeight(PC); if (l3 < 0) { l3 = 2 * j3; k3 = l1 = j3; } int i4 = (int) ((double) (l3 / 2) - 0.40000000000000002D * (double) j3); int j4 = i3 = l3 - i4; final int k4 = S._mthif(); if (a(11)) { final c c2 = _mthdo(i1, j1, false, g1, k1, false); k2 = c2._flddo; l1 = Math.max(l1, c2._flddo); i2 = i4 + c2._fldif; i4 += c2._fldif + c2.a; } else { S.a(k4); } final int l4 = S._mthif(); if (a(10)) { final c c3 = _mthint(i1, j1, false, g1, k1, false); l2 = c3._flddo; l1 = Math.max(l1, c3._flddo); j2 = j4 + c3.a; j4 += c3._fldif + c3.a; } else { S.a(l4); } if (flag) { S.a(k4); g1.drawImage(image, i1 + (l1 - k3) / 2, j1 - i3, PC); if (a(11)) { _mthdo(i1 + (l1 - k2) / 2, j1 + i2, true, g1, k1, false); } else { S.a(k4); } final int i5 = S._mthif(); if (a(10)) { _mthint(i1 + (l1 - l2) / 2, j1 - j2, true, g1, k1, false); } else { S.a(i5); } } return new c(l1, j4, i4); } private c _mthint(final int i1, final int j1, final boolean flag, final Graphics g1, final int k1) { c c1 = new c(); final int l1 = g1.getFont().getSize(); final String s1 = D.w; c1 = _mthtry(i1, j1, flag, g1, k1, false); final int i2 = c1._flddo; final int j2 = i2 / 2; final int k2 = l1 / 4; final int l2 = c1._fldif + k2; final int i3 = c1.a; if (flag) { final int j3 = (j1 - l2) + k2; final int k3 = l1 / 8; final int l3 = i1 + i2; final int i4 = i1 + j2; if (s1.equals("")) { g1.drawLine(i1, j3, l3, j3); g1.drawLine(i1 + (int) ((double) i2 * 0.80000000000000004D), j3 - k3, l3, j3); g1.drawLine(i1 + (int) ((double) i2 * 0.80000000000000004D), j3 + k3, l3, j3); } else if (s1.equals("bar")) { g1.drawLine(i1, j3, l3, j3); } else if (s1.equals("widehat")) { g1.drawLine(i1, j3, i4, j3 - k2); g1.drawLine(i4, j3 - k2, l3, j3); } else if (s1.equals("widetilde")) { int k4 = 0; for (int l4 = 1; l4 < j2; l4++) { final int j4 = k4; k4 = (int) ((double) k3 * Math .sin((4.0840704496667311D * (double) l4) / (double) j2)); g1.drawLine((i4 + l4) - 1, j3 + j4, i4 + l4, j3 + k4); g1.drawLine((i4 - l4) + 1, j3 - j4, i4 - l4, j3 - k4); } } } return new c(i2, l2 + 2, i3); } private boolean a(final int i1) { return a(i1, ""); } private boolean a(final int i1, final String s1) { int j1; while ((j1 = S._mthint().y) == 25) { } if (j1 == i1) { return true; } if (!s1.equals("")) { printStatus("Parser: " + s1 + " not found"); } return false; } private boolean a(final int i1, final int j1, final String s1) { int k1; while ((k1 = S._mthint().y) == 25) { } boolean flag = k1 == i1; while ((k1 = S._mthint().y) == 25) { } flag = k1 == j1; if (!flag && !s1.equals("")) { printStatus("Parser: " + s1 + " not found"); } return flag; } private void a(final Graphics g1, final int i1) { if (i1 <= 1) { g1.setFont(d); } else if (i1 == 2) { g1.setFont(b); } else if (i1 == 3) { g1.setFont(_fldnull); } else { g1.setFont(_fldlong); } } } ./src/atp/Fonts14.gif0000644000175000017500000002102111337523366013256 0ustar yvesyvesGIF87a,by*S)XjulUW6X.n:-͕rk56ads@ R"(Z#09waN#'4]Pv&zǥGAgb6Iv(CWQy&sR'6XIV5:(ԄE XjI:Ӛ((wx[ XS|Dz r< ʮ6OO\"> ҩzjlg Z,ZwbzR&0v^y7B?)c8Qx1c>;4 eŗN=H0TvGٴ/|$4_Q ᴡ`NdlVv4kJ4Yn9h6_g'HFkaQwպF_rHx;#) Yy Nbɴ)luX`]\ƫC^2ӓpú] y)Na+w!yIQ'^X剅֧[;>ݟu%'`qg%a^`ug{~b x"Xم d (Hcj"G|<dB fT~6dN>y/B g QeZ.'梗b d4Րٝ9tnIgU\dkJ6a^%g7~[,!s]kDgVSDw :mT9VfŦQSbZjoѤC ٔ)0J]dJiym߰HdN{6M,PYA8% e$h@KOrgv2ۺ-bIO?衮H+f[T W|Ŏ6Zm@Kz.(8v,,JF,1,ajpflK ,N *Cсܫ2~"\"JoDcJ13:pRC-0%%Od#+ V/wpɵ̈́+T+eE6~uˇ7MvHgCxmNNBg,꥓ꮿ.N{Vl{;O|/|?}OO=6x( C sR^Ռ.E@`/tl!nuTٳ,-~'%p#4q:#E}"@JKڐA5-V{WI4S\2X rN!OZyOy+K&HQ d qqE håR9=@|D[kE/H"j9 O g<!w#eda?M'ߓ9 9,] G$: H6E&!F%GxO>_#ّIiE(t|e"ȡ\ꒌsPPZ1K3*a|1mK08LqiTZAIg}|$igYzHj~J(h=!TB,}E)UB螋ZD>ǝR -Mt{\JҘΥ2McԦ4ݩOWZ)t{ *۠ΗfX7_ښ̈2B_VTU#*d)wp`(dO4E&6no'yΙvdYYh.BOuhj{ &̔VfWQ~cg !Tr%M* +c3pmQڰxLb)Gжd%WI˜֬epʘדe87[N@E+5˜[䎐,:Zhvc[Kյm/7v_ 򮤠,3G7.]jJ띒%/<9Ä ~#!֬*m|"k^]vĥtOʭ q,^"O,>Fꕙ$uыVC^jzC>qIb47P^p` 4 Gdb!z2NCehACk+!::/|-׽B'J>Tͤ'g#5X\)VjKN2`7[w+͎xAmڍ(M#,uqn]û+:6y=i?d7b>™8^=mϑZhVWg.VOI-k|NݸYv N~RJ?!da6u'~mG<%Z}v &=D$<mΨ'qXzIz!,+Z~o~ϝdA[2oyh*N46a"^Q.sgWs b@=v^vrj5e#lW8t=Lw|(MTn7GzxmwlvvDOO0/WA?~=l5% &~~K#~7m8N[Tn(wEM$y hwx`he[J|QK/9wfJ1f~Ƅ;a!U:8Ba7p/5օB$6q}RHP}EsDdUp_%ZiCAR_Ŧ7uY}q[b"yG 8bhMֆ!WJWeЉz7DAͳxhM"w{ebaH:Wf^؋389 (HhŘ>9paO[ǀLD/%[ xx-&X er=Lh ՁF`s 0ox  h ZpJɡFx;)O,( 䇁*8@\W}Iu6vXϒ{q %i+'bgմsɚSuE.F_f6yp2O]0e 2TؖLHXGxJXR>Y1g~{XVdZ!jݳ9l*ke.^@WGfQCsst{[ʒzxЙ^ۙlj֦-{E^MZ1Ţ3y).*m"i˔OzXpT3ZdZyrwɕ !ǘ**}ʩګu:P"vJo3q8GJկk;Z&Hpj3w ;ְʡ#O'ؚ%+˲è1K5k79;;T:q=JDII珂!WLZcE^\vfJrH(3^kjKHR76ku~Kr,6O|Erú1BuUEvˋ,1f2xjELK[oT"zj>9MC"x:I׮hiVXy5CLmե&izAa+6ɸ{yB,G[msKk1hiȋHk.ktK{4xK`uX)H0ۊ{pAW׋ay!|Q6©p@)ɿ.vChk+J )jD0-džZd9>W{& ⩫D %PfETT5NJ:sԃUp+^A8>! D\MEBUm'f$l@lS<_ۣ.#-nEqe^WTN^`ʳUhX-2}\iMJ=Ş.%G~\^9Θn^^~D;Sّz\TnEdFz̷N\ͪ]-Թ J}r. ϬdS|̀D+?N|Ǿ8ۉ*MCKl _@&'_RU'md\^-γcmoq/sOmV*YYAZ=JvH^L1.R*u5Iڍ/El Nx⨕o v^[[B_hx$c[ ,邿]_9{-/xb .V@ k}e)_N]x<ÉHe9B0nvnvM1u9{!0Ǝ35އ:$gFwUS=ol*OtB(1g]a[,N&Wv7 3zHnֲܘ憰Ш!u\"\.7  yfz8UAcW+a!=XRFIE9PSiɈ<B-iDvx+FL9q'AU1?r8 YqUB1bc-;29d /vTȉ(9gqXgO?Wʋ~ӯ\V|]c4,0ţzȟsOvio[ 8XS MXI_g]s:;>5| fp߿|>+{?u#7Sn%Iu/͈h|3k;/[ z<t)VBAOBa ΰqPoP<;FBDӎ-ht F%IdBQ&mь4 MrDo 25.Ü(#sƵN84Pms/ 1E RAK9STQIe4RQMӻTm՞ |UYU[qU]y_ 6E˓:1۫N|$*CR*írPb4DʡF!3r66 YEQ0k6g6s]Hy2u?-[seӣuwKBzdz|8e%E X)}y˗$j3lQȊmoF(̴hآM(eMY~jG+ĘCm 9Q8WLxklvcr綗͵۷%|;gvJ1]I4p^hqa5wqE[o+wɜ`ն.|#f\eMU'U9H~1x &'ݧO[Y^Rblߗ/VlN{PdDK-Տ__UAiOA~M9p";PWMYRS@=!X T'AM *:iTR41Y7fB!,׃EsbBqx>a &lQDi~X/Ub>ܜ x@-IBn؂Lg?+ΰպ9pW$6>yq蹵KmdY7Qo["6G(Aׄ2{38nU,H 104\K"PlR<+K.KH -3 +шʦ-iWD&1 k&o41Cp3](͠s]& h lÃ%<_~jBa\YQjBi\ß=b9aUV,hIT Utr<کf>ML<~ҨMuSUNUh|I]KSjSOAIHr+p^y/ETr.TS?(:t/Mh!6eLòTA2ۊ:KZȑWet%,^Φ3Vǒ\fIymPm L$m5WiTb4tV6-[=Ta5ZAJqt.Ě1 :\].lKXxYAd򲏓:X庺,kH7#Uɞ]')tո2K" ߢLYxHPfVeV΄0*n=QDME[aS͠XGq*gacg9d!E6򑑜d%/MvɲZnfe )"k7.,p(:ޙƀ 6ZH3Wѹj'\~.Snlh*SN忺iKͨ)#XdhD%c=%QVKDs1J[YWPяl'TYoKAYiVlnvgL({ͻ.7W}rY:\^d٫ h-VuX&3ӲMmzV5q Q,?qMWq 7E5y Tuѷ)|-w~1.ӚNy (35Üɓ[S=ρtE7zߩ ί\].Ri=TJ 0qϑYZa{yM gwN3s>4˼8n~ ujZ8焯[M<?t-ܵ5%xR6bmك?O,AQZ)L1p-#3xGr׻'̛Qq~v+CScKՋ-e̍wh[~]Kh)ýicדMZ${lnr͎.--%dLhmjf:ХW+T.M2ltx0p0 Pfpp&&`r!ZKŜhEpNp_ 喀!( ƒj< DmN0ԨD`PN 6 hָ+=PQLj:* Z۞ѦBˌq(o_vD=q 9 V>,AOvƏ"M:z a@n<ћZ@٤ .1 jٜCUv.ig C4᲏V~zа &d wLo 8#A2$Er$I$M$Q2%Ur%Y%Q;./src/atp/c.java0000644000175000017500000000270511302613615012413 0ustar yvesyves/***************************************************************************** * * * HotEqn Equation Viewer Basic Applet * * * ****************************************************************************** * Java Applet to view mathematical Equations provided in the LaTeX language * ****************************************************************************** Copyright 2006 Stefan Müller and Christian Schmid, modified by Rene Grothmann This file is part of the HotEqn package. HotEqn is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; HotEqn is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package atp; class c { public int _flddo; public int _fldif; public int a; public c(final int i, final int j, final int k) { _flddo = i; _fldif = j; a = k; } public c() { _flddo = 0; _fldif = 0; a = 0; } }./src/atp/b.java0000644000175000017500000005774611302613614012430 0ustar yvesyves/***************************************************************************** * * * HotEqn Equation Viewer Basic Applet * * * ****************************************************************************** * Java Applet to view mathematical Equations provided in the LaTeX language * ****************************************************************************** Copyright 2006 Stefan Müller and Christian Schmid, modified by Rene Grothmann This file is part of the HotEqn package. HotEqn is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; HotEqn is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package atp; import java.util.Vector; // Referenced classes of package atp: // e class b { private String _fldelse; private int _fldcase; private int _flddo; private boolean _fldbyte; private final Vector _fldfor; private boolean _fldchar; private boolean a; private int _fldnew; private int _fldint; private StringBuffer _fldif; public static char TranslationC[] = { '\u03B1', '\u0391', '\u03B2', '\u0392', '\u03B3', '\u0393', '\u03B4', '\u0394', '\u03B5', '\u0395', '\u03D5', '\u03A6', '\u03C6', '\u03B3', '\u0393', '\u03B7', '\u0397', '\u03B9', '\u0399', '\u03BA', '\u039A', '\u03BB', '\u039B', '\u03BC', '\u039C', '\u03BD', '\u039D', '\u03BF', '\u03A9', '\u03C0', '\u03A0', '\u03C7', '\u03A7', '\u03C1', '\u03A1', '\u03C3', '\u03A3', '\u03C4', '\u03A4', '\u03C5', '\u03A5', '\u03C8', '\u03A8', '\u03C9', '\u03A9', '\u03BE', '\u039E', '\u03C7', '\u03A7', '\u03B6', '\u0396', '\u03B8', '\u0398', '$', '%', '&', 'ß', '\u00A9', '\u00AE', '\u2030', '\u00BD', '\u2153', '\u00BC', '\u00BE', '\u2154', '\u00B1', '\u2202', '\u2206', '\u221E', }; public String TranslationS[] = { "alpha", "Alpha", "beta", "Beta", "gamma", "Gamma", "delta", "Delta", "epsilon", "Epsilon", "phi", "Phi", "varphi", "gamma", "Gamma", "eta", "Eta", "iota", "I", "kappa", "Kappa", "lambda", "Lambda", "mu", "Mu", "nu", "Nu", "omikron", "Omikron", "pi", "Pi", "chi", "Chi", "rho", "Rho", "sigma", "Sigma", "tau", "Tau", "uu", "Uu", "psi", "Psi", "omega", "Omega", "chi", "Chi", "ypsilon", "Ypsilon", "zeta", "Zeta", "theta", "Theta", "dollar", "percent", "ampersand", "paragraph", "copyright", "trademark", "promille", "half", "third", "quarter", "threequarters", "twothirds", "pm", "partial", "deltaop", "infty", }; public b(final String s) { _fldbyte = false; _fldfor = new Vector(50, 50); _fldchar = false; a = false; _fldnew = 0; _fldint = 0; _fldif = new StringBuffer(""); new e(99); a(s); } public String a(final int i, final int j) { _fldnew = Math.min(i, j); _fldint = Math.max(i, j); _fldchar = true; _fldif = new StringBuffer(""); a(_fldelse); _fldchar = false; return _fldif.toString(); } public void a(final String s) { _fldelse = s; int i = 0; _fldbyte = false; _flddo = -1; _fldcase = -1; _fldfor.removeAllElements(); a(); while (!_fldbyte) { _flddo++; if (_fldchar && _flddo == _fldnew) { a = true; } _fldfor.addElement(_mthtry()); if (_fldchar && _flddo == _fldint) { a = false; } } _flddo = -1; for (; i < _fldfor.size(); i++) { if (((e) _fldfor.elementAt(i)).y == 114) { int k = i - 1; int j1 = 0; for (; k > 0; k--) { if (((e) _fldfor.elementAt(k)).y == 4) { j1--; } else if (((e) _fldfor.elementAt(k)).y == 3) { j1++; } if (j1 == 1) { break; } } int i2 = i + 1; j1 = 0; for (; i2 < _fldfor.size(); i2++) { if (((e) _fldfor.elementAt(i2)).y == 4) { j1++; } else if (((e) _fldfor.elementAt(i2)).y == 3) { j1--; } if (j1 == 1) { break; } } if (j1 == 1 && k >= 0) { _fldfor.insertElementAt(new e(109, ")"), i2 + 1); _fldfor.insertElementAt(new e(17), i2 + 1); _fldfor.setElementAt(new e(4), i); _fldfor.insertElementAt(new e(3), i + 1); _fldfor.insertElementAt(new e(115), k); _fldfor.insertElementAt(new e(109, "("), k); _fldfor.insertElementAt(new e(16), k); i += 4; } } else if (((e) _fldfor.elementAt(i)).y == 115) { int l = i - 1; int k1 = 0; for (; l > 0; l--) { if (((e) _fldfor.elementAt(l)).y == 4) { k1--; } else if (((e) _fldfor.elementAt(l)).y == 3) { k1++; } if (k1 == 1) { break; } } if (l >= 0) { _fldfor.setElementAt(new e(4), i); _fldfor.insertElementAt(new e(3), i + 1); _fldfor.insertElementAt(new e(115), l); i += 2; } } } for (int j = 0; j < _fldfor.size() - 2; j++) { if (((e) _fldfor.elementAt(j)).y == 13 && ((e) _fldfor.elementAt(j + 1)).y == 109) { int i1 = j + 2; int l1 = 0; int j2 = 1; for (; i1 < _fldfor.size(); i1++) { if (((e) _fldfor.elementAt(i1)).y == 4) { l1--; } else if (((e) _fldfor.elementAt(i1)).y == 3) { l1++; } if (l1 != 0) { continue; } if (((e) _fldfor.elementAt(i1)).w.equals("[")) { j2++; } else if (((e) _fldfor.elementAt(i1)).w.equals("]")) { j2--; } if (j2 != 0) { continue; } _fldfor.setElementAt(new e(4), i1); break; } j++; } } } public void _mthdo() { _flddo = -1; } public int _mthif() { return _flddo; } public void a(final int i) { _flddo = i; } public e _mthint() { _flddo++; if (_flddo >= _fldfor.size()) { _flddo = _fldfor.size() - 1; return new e(99); } else { return (e) _fldfor.elementAt(_flddo); } } public boolean _mthnew() { return _flddo == _fldfor.size() - 1; } private char _mthfor() { return _fldelse.charAt(_fldcase); } private void a() { if (a) { _fldif.append(_fldelse.charAt(_fldcase)); } if (_fldcase < _fldelse.length() - 1) { _fldcase++; _fldbyte = false; } else { _fldcase = _fldelse.length(); _fldbyte = true; } } private e _mthtry() { final StringBuffer stringbuffer = new StringBuffer(""); new String(""); new e(); while (!_fldbyte) { char c = _mthfor(); switch (c) { case 9: // '\t' case 10: // '\n' case 13: // '\r' a(); break; case 32: // ' ' a(); return new e(25, new String(" ")); case 33: // '!' case 35: // '#' case 42: // '*' case 43: // '+' case 44: // ',' case 45: // '-' case 47: // '/' case 58: // ':' case 59: // ';' case 60: // '<' case 61: // '=' case 62: // '>' case 126: // '~' a(); return new e(108, String.valueOf(c)); case 123: // '{' a(); return new e(3); case 125: // '}' a(); return new e(4); case 40: // '(' case 41: // ')' case 91: // '[' case 93: // ']' case 124: // '|' a(); return new e(109, String.valueOf(c)); case 38: // '&' a(); return new e(7); case 39: // '\'' case 64: // '@' case 913: case 914: case 915: case 916: case 917: case 918: case 919: case 920: case 921: case 922: case 923: case 924: case 925: case 926: case 927: case 928: case 929: case 930: case 931: case 932: case 933: case 934: case 935: case 936: case 937: case 945: case 946: case 947: case 948: case 949: case 950: case 951: case 952: case 953: case 954: case 955: case 956: case 957: case 958: case 959: case 960: case 961: case 962: case 963: case 964: case 965: case 966: case 967: case 968: case 969:// GreekLetters (unicode) case 65: // 'A' case 66: // 'B' case 67: // 'C' case 68: // 'D' case 69: // 'E' case 70: // 'F' case 71: // 'G' case 72: // 'H' case 73: // 'I' case 74: // 'J' case 75: // 'K' case 76: // 'L' case 77: // 'M' case 78: // 'N' case 79: // 'O' case 80: // 'P' case 81: // 'Q' case 82: // 'R' case 83: // 'S' case 84: // 'T' case 85: // 'U' case 86: // 'V' case 87: // 'W' case 88: // 'X' case 89: // 'Y' case 90: // 'Z' case 97: // 'a' case 98: // 'b' case 99: // 'c' case 100: // 'd' case 101: // 'e' case 102: // 'f' case 103: // 'g' case 104: // 'h' case 105: // 'i' case 106: // 'j' case 107: // 'k' case 108: // 'l' case 109: // 'm' case 110: // 'n' case 111: // 'o' case 112: // 'p' case 113: // 'q' case 114: // 'r' case 115: // 's' case 116: // 't' case 117: // 'u' case 118: // 'v' case 119: // 'w' case 120: // 'x' case 121: // 'y' case 122: // 'z' case 37: // '%' stringbuffer.append(c); a(); for (boolean flag1 = false; !_fldbyte && !flag1;) { c = _mthfor(); switch (c) { case 39: // '\'' case 64: // '@' case 913: case 914: case 915: case 916: case 917: case 918: case 919: case 920: case 921: case 922: case 923: case 924: case 925: case 926: case 927: case 928: case 929: case 930: case 931: case 932: case 933: case 934: case 935: case 936: case 937: case 945: case 946: case 947: case 948: case 949: case 950: case 951: case 952: case 953: case 954: case 955: case 956: case 957: case 958: case 959: case 960: case 961: case 962: case 963: case 964: case 965: case 966: case 967: case 968: case 969:// GreekLetters (unicode) case 65: // 'A' case 66: // 'B' case 67: // 'C' case 68: // 'D' case 69: // 'E' case 70: // 'F' case 71: // 'G' case 72: // 'H' case 73: // 'I' case 74: // 'J' case 75: // 'K' case 76: // 'L' case 77: // 'M' case 78: // 'N' case 79: // 'O' case 80: // 'P' case 81: // 'Q' case 82: // 'R' case 83: // 'S' case 84: // 'T' case 85: // 'U' case 86: // 'V' case 87: // 'W' case 88: // 'X' case 89: // 'Y' case 90: // 'Z' case 97: // 'a' case 98: // 'b' case 99: // 'c' case 100: // 'd' case 101: // 'e' case 102: // 'f' case 103: // 'g' case 104: // 'h' case 105: // 'i' case 106: // 'j' case 107: // 'k' case 108: // 'l' case 109: // 'm' case 110: // 'n' case 111: // 'o' case 112: // 'p' case 113: // 'q' case 114: // 'r' case 115: // 's' case 116: // 't' case 117: // 'u' case 118: // 'v' case 119: // 'w' case 120: // 'x' case 121: // 'y' case 122: // 'z' stringbuffer.append(c); a(); break; case 40: // '(' case 41: // ')' case 42: // '*' case 43: // '+' case 44: // ',' case 45: // '-' case 46: // '.' case 47: // '/' case 48: // '0' case 49: // '1' case 50: // '2' case 51: // '3' case 52: // '4' case 53: // '5' case 54: // '6' case 55: // '7' case 56: // '8' case 57: // '9' case 58: // ':' case 59: // ';' case 60: // '<' case 61: // '=' case 62: // '>' case 63: // '?' case 91: // '[' case 92: // '\\' case 93: // ']' case 94: // '^' case 95: // '_' case 96: // '`' default: flag1 = true; break; } } return new e(1, stringbuffer.toString()); case 46: // '.' case 48: // '0' case 49: // '1' case 50: // '2' case 51: // '3' case 52: // '4' case 53: // '5' case 54: // '6' case 55: // '7' case 56: // '8' case 57: // '9' stringbuffer.append(c); a(); for (boolean flag2 = false; !_fldbyte && !flag2;) { c = _mthfor(); switch (c) { case 46: // '.' case 48: // '0' case 49: // '1' case 50: // '2' case 51: // '3' case 52: // '4' case 53: // '5' case 54: // '6' case 55: // '7' case 56: // '8' case 57: // '9' stringbuffer.append(c); a(); break; case 47: // '/' default: flag2 = true; break; } } return new e(2, stringbuffer.toString()); case 92: // '\\' a(); if (_fldbyte) { break; } c = _mthfor(); switch (c) { case 92: // '\\' a(); return new e(8); case 123: // '{' a(); return new e(109, String.valueOf(c)); case 124: // '|' a(); return new e(109, "||"); case 125: // '}' a(); return new e(109, String.valueOf(c)); case 44: // ',' a(); return new e(113, "3"); case 58: // ':' a(); return new e(113, "4"); case 59: // ';' a(); return new e(113, "5"); case 33: // '!' a(); return new e(113, "-3"); case 913: case 914: case 915: case 916: case 917: case 918: case 919: case 920: case 921: case 922: case 923: case 924: case 925: case 926: case 927: case 928: case 929: case 930: case 931: case 932: case 933: case 934: case 935: case 936: case 937: case 945: case 946: case 947: case 948: case 949: case 950: case 951: case 952: case 953: case 954: case 955: case 956: case 957: case 958: case 959: case 960: case 961: case 962: case 963: case 964: case 965: case 966: case 967: case 968: case 969:// GreekLetters (unicode) case 65: // 'A' case 66: // 'B' case 67: // 'C' case 68: // 'D' case 69: // 'E' case 70: // 'F' case 71: // 'G' case 72: // 'H' case 73: // 'I' case 74: // 'J' case 75: // 'K' case 76: // 'L' case 77: // 'M' case 78: // 'N' case 79: // 'O' case 80: // 'P' case 81: // 'Q' case 82: // 'R' case 83: // 'S' case 84: // 'T' case 85: // 'U' case 86: // 'V' case 87: // 'W' case 88: // 'X' case 89: // 'Y' case 90: // 'Z' case 97: // 'a' case 98: // 'b' case 99: // 'c' case 100: // 'd' case 101: // 'e' case 102: // 'f' case 103: // 'g' case 104: // 'h' case 105: // 'i' case 106: // 'j' case 107: // 'k' case 108: // 'l' case 109: // 'm' case 110: // 'n' case 111: // 'o' case 112: // 'p' case 113: // 'q' case 114: // 'r' case 115: // 's' case 116: // 't' case 117: // 'u' case 118: // 'v' case 119: // 'w' case 120: // 'x' case 121: // 'y' case 122: // 'z' stringbuffer.append(c); a(); for (boolean flag4 = false; !_fldbyte && !flag4;) { c = _mthfor(); switch (c) { case 913: case 914: case 915: case 916: case 917: case 918: case 919: case 920: case 921: case 922: case 923: case 924: case 925: case 926: case 927: case 928: case 929: case 930: case 931: case 932: case 933: case 934: case 935: case 936: case 937: case 945: case 946: case 947: case 948: case 949: case 950: case 951: case 952: case 953: case 954: case 955: case 956: case 957: case 958: case 959: case 960: case 961: case 962: case 963: case 964: case 965: case 966: case 967: case 968: case 969:// GreekLetters (unicode) case 65: // 'A' case 66: // 'B' case 67: // 'C' case 68: // 'D' case 69: // 'E' case 70: // 'F' case 71: // 'G' case 72: // 'H' case 73: // 'I' case 74: // 'J' case 75: // 'K' case 76: // 'L' case 77: // 'M' case 78: // 'N' case 79: // 'O' case 80: // 'P' case 81: // 'Q' case 82: // 'R' case 83: // 'S' case 84: // 'T' case 85: // 'U' case 86: // 'V' case 87: // 'W' case 88: // 'X' case 89: // 'Y' case 90: // 'Z' case 97: // 'a' case 98: // 'b' case 99: // 'c' case 100: // 'd' case 101: // 'e' case 102: // 'f' case 103: // 'g' case 104: // 'h' case 105: // 'i' case 106: // 'j' case 107: // 'k' case 108: // 'l' case 109: // 'm' case 110: // 'n' case 111: // 'o' case 112: // 'p' case 113: // 'q' case 114: // 'r' case 115: // 's' case 116: // 't' case 117: // 'u' case 118: // 'v' case 119: // 'w' case 120: // 'x' case 121: // 'y' case 122: // 'z' stringbuffer.append(c); a(); break; case 91: // '[' case 92: // '\\' case 93: // ']' case 94: // '^' case 95: // '_' case 96: // '`' default: flag4 = true; break; } } final String s1 = stringbuffer.toString(); if (s1.equals("acute")) { return new e(22, "\264"); } if (s1.equals("array")) { return new e(15); } if (s1.equals("bar")) { return new e(14, "bar"); } if (s1.equals("ddot")) { return new e(22, ".."); } if (s1.equals("dot")) { return new e(22, "."); } if (s1.equals("frac")) { return new e(12); } if (s1.equals("dfrac")) { return new e(1001); } if (s1.equals("grave")) { return new e(22, "`"); } if (s1.equals("hat")) { return new e(22, "^"); } if (s1.equals("int")) { return new e(20, "int"); } if (s1.equals("oint")) { return new e(20, "oint"); } if (s1.equals("left")) { return new e(16); } if (s1.equals("limsup")) { return new e(24, "lim sup"); } if (s1.equals("liminf")) { return new e(24, "lim inf"); } if (s1.equals("prod")) { return new e(20, "prod"); } if (s1.equals("right")) { return new e(17); } if (s1.equals("sqrt")) { return new e(13); } if (s1.equals("sum")) { return new e(20, "sum"); } if (s1.equals("tilde")) { return new e(22, "~"); } if (s1.equals("vec")) { return new e(14); } if (s1.equals("widehat")) { return new e(14, "widehat"); } if (s1.equals("widetilde")) { return new e(14, "widetilde"); } if (s1.equals("quad")) { return new e(113, "18"); } if (s1.equals("qquad")) { return new e(113, "36"); } if (s1.equals("backslash")) { return new e(2, "\\"); } if (s1.equals("langle")) { return new e(5, "<"); } if (s1.equals("rangle")) { return new e(5, ">"); } if (s1.equals("not")) { return new e(110); } if (s1.equals("atop")) { return new e(115); } if (s1.equals("choose")) { return new e(114); } if (s1.equals("overline")) { return new e(116); } if (s1.equals("underline")) { return new e(117); } if (s1.equals("overbrace")) { return new e(118); } if (s1.equals("underbrace")) { return new e(119); } if (s1.equals("stackrel")) { return new e(120); } if (s1.equals("begin")) { return new e(50); } if (s1.equals("end")) { return new e(51); } if (s1.equals("fgcolor")) { return new e(121); } if (s1.equals("bgcolor")) { return new e(122); } if (s1.equals("fbox")) { return new e(123); } if (s1.equals("mbox")) { return new e(124); } if ((" arccos arcsin arctan arg cos cosh cot coth csc def deg dim exp hom ker lg ln lo" + "g sec sin sinh tan tanh ").indexOf(" " + s1 + " ") >= 0) { return new e(9, s1); } if (" det gcd inf lim max min Pr sup ".indexOf(" " + s1 + " ") >= 0) { return new e(24, s1); } { boolean found = false; for (int i = 0; i < TranslationS.length; i++) { if (s1.equals(TranslationS[i])) { found = true; c = TranslationC[i]; break; } } if (found) { stringbuffer.append(c); return new e(2, "" + c); } } if ((" alpha delta epsilon iota kappa lambda nu omega pi sigma theta tau upsilon varep" + "silon varpi vartheta pm mp times div cdot cdots ldots ast star amalg cap cup upl" + "us sqcap sqcup vee wedge wr circ bullet diamond lhd rhd oslash odot Box bigtrian" + "gleup triangleleft triangleright oplus ominus otimes ll subset sqsubset in vdash" + " models gg supset sqsupset ni dashv perp neq doteq approx cong equiv propto prec" + " sim simeq asymp smile frown bowtie succ aleph forall hbar exists imath neg flat" + " ell Re angle Im backslash mho Box prime emptyset triangle nabla partial top bot" + " Join infty vdash dashv Fourier Laplace leftarrow gets hookrightarrow leftharpoo" + "ndown rightarrow to rightharpoondown leadsto leftrightarrow mapsto hookleftarrow" + " leftharpoonup rightharpoonup rightleftharpoons longleftarrow longrightarrow lon" + "gleftrightarrow longmapsto ").indexOf(" " + s1 + " ") >= 0) { return new e(18, s1); } if ((" beta chi eta gamma mu psi phi rho varrho varsigma varphi xi zeta le leq ge geq " + "vdots ddots natural jmath bigtriangledown sharp uparrow downarrow updownarrow ne" + "arrow searrow swarrow nwarrow succeq mid preceq parallel subseteq sqsubseteq sup" + "seteq sqsupseteq clubsuit diamondsuit heartsuit spadesuit wp dagger ddagger setm" + "inus unlhd unrhd bigcirc ").indexOf(" " + s1 + " ") >= 0) { return new e(19, s1); } if ((" Delta Gamma Lambda Omega Pi Phi Psi Sigma Theta Upsilon Xi Leftarrow Rightarrow" + " Leftrightarrow Longleftarrow Longrightarrow Longleftrightarrow Diamond ") .indexOf(" " + s1 + " ") >= 0) { return new e(18, s1 + "Big"); } if (" Uparrow Downarrow Updownarrow ".indexOf(" " + s1 + " ") >= 0) { return new e(19, s1 + "Big"); } // fall through case 34: // '"' case 35: // '#' case 36: // '$' // case 37: // '%' case 38: // '&' case 39: // '\'' case 40: // '(' case 41: // ')' case 42: // '*' case 43: // '+' case 45: // '-' case 46: // '.' case 47: // '/' case 48: // '0' case 49: // '1' case 50: // '2' case 51: // '3' case 52: // '4' case 53: // '5' case 54: // '6' case 55: // '7' case 56: // '8' case 57: // '9' case 60: // '<' case 61: // '=' case 62: // '>' case 63: // '?' case 64: // '@' case 91: // '[' case 93: // ']' case 94: // '^' case 95: // '_' case 96: // '`' default: a(); // System.out.println("Scanner invalid tag: \\" + // stringbuffer.toString()); return new e(100); } case 94: // '^' a(); return new e(10); case 95: // '_' a(); return new e(11); case 11: // '\013' case 12: // '\f' case 14: // '\016' case 15: // '\017' case 16: // '\020' case 17: // '\021' case 18: // '\022' case 19: // '\023' case 20: // '\024' case 21: // '\025' case 22: // '\026' case 23: // '\027' case 24: // '\030' case 25: // '\031' case 26: // '\032' case 27: // '\033' case 28: // '\034' case 29: // '\035' case 30: // '\036' case 31: // '\037' case 34: // '"' case 36: // '$' // case 37: // '%' case 63: // '?' case 96: // '`' default: a(); // System.out.println("Scanner invalid character: " + c); return new e(100); } } return new e(99); } } ./src/.cvsignore0000644000175000017500000000001211132354527012534 0ustar yvesyves.DS_Store ./src/.#Zirkel.java.1.110000644000175000017500000000343011132723337013345 0ustar yvesyves /* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ public class Zirkel { static public void main(final String[] args) { final int PORT = 32145; int i = 0; String filename = ""; final String v = System.getProperty("java.version"); if ((v.startsWith("1.1")) || (v.startsWith("1.2")) || (v.startsWith("1.3")) || (v.startsWith("1.4"))) { new eric.JOldJavaVersionDialog(); } else { while (i < args.length) { if (args[i].startsWith("-l") && i < args.length - 1) { i += 2; } else if (args[i].startsWith("-h") && i < args.length - 1) { i += 2; } else if (args[i].startsWith("-s")) { i++; } else if (args[i].startsWith("-r")) { i++; } else if (args[i].startsWith("-d")) { i++; } else { filename += args[i] + System.getProperty("path.separator"); i++; } } final String FILES = filename; final eric.JUniqueInstance uniqueInstance = new eric.JUniqueInstance( PORT, FILES); if (uniqueInstance.launch()) { if (System.getProperty("mrj.version") != null) { new eric.JMacOShandler(); } rene.zirkel.Zirkel.main(args); } } } } ./src/eric/0000755000175000017500000000000011362014163011457 5ustar yvesyves./src/eric/JFileFilter.java0000644000175000017500000000324611344766221014477 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric; import java.io.File; import javax.swing.filechooser.FileFilter; public class JFileFilter extends FileFilter { // Description et extension acceptée par le filtre public String description; public String[] extensions; // Constructeur à partir de la description et de l'extension acceptée public JFileFilter(final String description, final String ext) { if (description == null || ext == null) { throw new NullPointerException( "La description (ou extension) ne peut être null."); } this.description = description; this.extensions = ext.split(","); } // Implémentation de FileFilter @Override public boolean accept(final File file) { if (file.isDirectory()) { return true; } final String nomFichier = file.getName().toLowerCase(); for (int i=0;i. */ package eric; import eric.GUI.palette.JIcon; import java.awt.AlphaComposite; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.Stroke; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import java.util.Vector; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JPanel; import net.java.dev.colorchooser.ColorChooser; import net.java.dev.colorchooser.Palette; /** * * @author erichake */ public class JColorPicker extends JButton { /** * */ ColorChooser CC=null; int D, IN, STRK; public static Color DefaultC=Color.GRAY; Color CurrentC=DefaultC; boolean isSelected=false, isEntered=false, isDisabled=false; Vector group; int[] x={0, 10, 0}; int[] y={0, 10, 10}; @Override public void paintComponent(final java.awt.Graphics g) { final Graphics2D g2=(Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); AlphaComposite ac; if (isDisabled) { ac=AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.2f); g2.setComposite(ac); g2.setColor(new Color(100, 100, 100)); g2.fillRect(IN, IN, D-2*IN, D-2*IN); return; } if (isSelected) { ac=AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.2f); g2.setComposite(ac); g2.setColor(new Color(0, 0, 100)); g2.fillRect(0, 0, D, D); } if (isEntered) { ac=AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.1f); g2.setComposite(ac); g2.setColor(new Color(0, 0, 80)); final Stroke stroke=new BasicStroke(3f); g2.setStroke(stroke); g2.drawRect(2, 2, D-4, D-4); } g2.setColor(CurrentC); g2.setComposite(AlphaComposite.Src); g2.setStroke(new BasicStroke(STRK, BasicStroke.CAP_SQUARE, 0)); g2.clearRect(IN, IN, D-2*IN, D-2*IN); ac=AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.4f); g2.setComposite(ac); g2.fillRect(IN, IN, D-2*IN, D-2*IN); g2.setComposite(AlphaComposite.Src); g2.drawRect(IN, IN, D-2*IN, D-2*IN); final int sze=6; x[0]=D-sze; y[0]=D; x[1]=D; y[1]=D-sze; x[2]=D; y[2]=D; g2.setComposite(AlphaComposite.SrcOver); g2.setColor(new Color(50, 50, 50)); g2.fillPolygon(x, y, 3); } public JColorPicker(final int d, final int inset, final int stroke, final Vector mygroup) { super(); group=mygroup; if (group!=null) { group.add(this); } D=d; IN=inset; STRK=stroke; setLayout(new javax.swing.BoxLayout(this, javax.swing.BoxLayout.X_AXIS)); fixsize(this, d, d); setBorder(BorderFactory.createEmptyBorder()); setContentAreaFilled(false); setFocusable(false); CC=new ColorChooser() { /** * */ @Override public void paintComponent(final java.awt.Graphics g) { } }; CC.setBorder(BorderFactory.createEmptyBorder()); CC.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent arg0) { final Color mc=CC.getColor(); CurrentC=new Color(mc.getRed(), mc.getGreen(), mc.getBlue()); doChange(); } }); CC.addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseDragged(final MouseEvent e) { final Color mc=CC.getTransientColor(); if (mc!=null) { CurrentC=new Color(mc.getRed(), mc.getGreen(), mc.getBlue()); doChange(); } } }); CC.addMouseListener(new MouseAdapter() { @Override public void mouseReleased(final MouseEvent arg0) { } @Override public void mousePressed(final MouseEvent arg0) { Select(); afterSelect(); } @Override public void mouseEntered(final MouseEvent arg0) { setPalettes(); isEntered=true; repaint(); } @Override public void mouseExited(final MouseEvent arg0) { isEntered=false; repaint(); } }); CC.setToolTipText(""); this.add(CC); } public void setDisabled(final boolean b) { isDisabled=b; if (b) { this.remove(CC); } else { this.add(CC); } } @Override public String getName() { return "scolor"; } public void setPalettes() { } public void setUsedColors(final Vector V) { Color[] cols; String[] strs; if (V.size()==0) { cols=new Color[1]; strs=new String[1]; cols[0]=Color.WHITE; strs[0]=""; } else { cols=new Color[V.size()]; strs=new String[V.size()]; for (int i=0; i. */ package eric.bar; import eric.GUI.pipe_tools; import java.awt.Color; import java.awt.Dimension; import java.awt.Point; import java.awt.Toolkit; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JPanel; import rene.gui.Global; import rene.zirkel.objects.ConstructionObject; import eric.controls.JCanvasPanel; /** * * @author erichake */ public class JPropertiesBar extends JFrame implements MouseListener, MouseMotionListener { /** * */ static private int Bx=0, By=0, Bwidth=1000, Bheight=60; CPane CP; TitleBar titlebar; JControlProperties Content; private MouseEvent pressed; private Point location; private static JPropertiesBar JPB=null; public JPropertiesBar() { JPB=this; Bx=Global.getParameter("props.paletteX", 0); if (BxGlobal.getScreenX()+Global.getScreenW()-20) { x=Global.getScreenX()+Global.getScreenW()-Bwidth; } setLocation(x, Global.getScreenY()); Toolkit.getDefaultToolkit().sync(); } public void mouseDragged(final MouseEvent me) { setBarLocation(me); } public void mousePressed(final MouseEvent me) { pressed=me; } public void mouseMoved(final MouseEvent e) { } public void mouseReleased(final MouseEvent e) { setBarLocation(e); Global.setParameter("props.paletteX", getLocation().x); Bx=getLocation().x; By=getLocation().y; pipe_tools.setWindowLocation(); pipe_tools.toFront(); } public void mouseClicked(final MouseEvent e) { } public void mouseEntered(final MouseEvent e) { } public void mouseExited(final MouseEvent e) { } } ./src/eric/bar/.cvsignore0000644000175000017500000000001211362623750014224 0ustar yvesyves.DS_Store ./src/eric/bar/gui/0000755000175000017500000000000011302564136013013 5ustar yvesyves./src/eric/bar/gui/titlebar.png0000644000175000017500000000017011337523373015333 0ustar yvesyvesPNG  IHDRtEXtSoftwareAdobe ImageReadyqe<IDATc^<31%#-5911.6:*h8+{ΕK^L% WQ> IENDB`./src/eric/bar/gui/Pclose.png0000644000175000017500000000114011337523372014747 0ustar yvesyvesPNG  IHDRVΎW'IDATxՓOauK*h;欶Vs46DiW0N@ {I"%DVauZ<۷~>m=N9̅a}R$<3z6<(p hNBP߈x|Xv kZh<|6O/Z{wT%ٌe+ tg7^ )ijw4NuvamYJJOhuÐfg!X,4ETDpw@? ;61&AKĈ/> zpIt15 pqJf097{K),a*QiH#h]YPwІXj"WY/O?[9q<q+Xn w ʯ`:K!Ȃ^o?W5l}PfG#1 OC. f+\꟱YƓ+Dodu@CZ֕e8PTJHNu\nzHFLHw$t`u ~IENDB`./src/eric/bar/gui/title_back_end.png0000644000175000017500000000052711337523373016462 0ustar yvesyvesPNG  IHDR6nr>tEXtSoftwareAdobe ImageReadyqe<IDAT8_KPc3o@r۪;BDD;m(v֗011115*(0eoBU-BlBbzCuO4MѫtQ|g9"W,(@>U"X0rQ=@.4r+'% Ps) Ͷs._c szLK2ӯ[L1l]'j;V}G`YZlIENDB`./src/eric/bar/gui/titles_back.png0000644000175000017500000000021011337523373016004 0ustar yvesyvesPNG  IHDR5#tEXtSoftwareAdobe ImageReadyqe<*IDAT[c/g)ay ˿0߿˵k71NIENDB`./src/eric/bar/gui/Pcloseover.png0000644000175000017500000000113011337523372015642 0ustar yvesyvesPNG  IHDRVΎWIDATxՓORa E%]fnlX͋~Eӭ4Z%;($ 薅܌#۬=/xSu}~yߛW<'xzDt:K"EQ88n ۃDbCE.Ղ-.s v*U٬c,4E(D,oX(A؄Stv 4i(,pξAZm8pJov? m0-DS;'z D粸}- 4iH]|D*Uu$"I88$޼/cVEo˟OgHFc"e5EM2YXyГ  ID!3Y,y~}6?8=IENDB`./src/eric/bar/gui/chkboxOFF.png0000644000175000017500000000045011337523372015336 0ustar yvesyvesPNG  IHDR r|IDATxڝAD`YBJv(5B"EtLsŽzNt~Km"IDQ%MSP) Q1MUeeeҲ,8..yC$PI}CQл;,*0:hTU]A٧dY0 \nl~a3mƅ.A8yF$g. */ package eric.bar; import eric.JColorPicker; import eric.GUI.palette.PaletteManager; import eric.JZirkelCanvas; import eric.textfieldpopup.JTextFieldPopup; import eric.textfieldpopup.JTextFieldPopup; import java.awt.AlphaComposite; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Insets; import java.awt.KeyboardFocusManager; import java.awt.RenderingHints; import java.awt.Stroke; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.InputEvent; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.net.URL; import java.util.ArrayList; import java.util.HashSet; import java.util.Vector; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.KeyStroke; import javax.swing.ScrollPaneConstants; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import javax.swing.event.PopupMenuEvent; import javax.swing.event.PopupMenuListener; import javax.swing.plaf.ComboBoxUI; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.metal.MetalComboBoxUI; import javax.swing.text.JTextComponent; import rene.gui.Global; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.ZirkelCanvas; import rene.zirkel.ZirkelFrame; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.objects.EquationXYObject; import rene.zirkel.objects.FunctionObject; import rene.zirkel.objects.InsideObject; import rene.zirkel.objects.IntersectionObject; import rene.zirkel.objects.MidpointObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.TrackObject; import rene.zirkel.objects.UserFunctionObject; /** * * @author erichake */ public class JProperties extends JTabPanel { Construction Cn=null; ConstructionObject O=null; ZirkelCanvas ZC=null; ZirkelFrame ZF=null; String typecode; Color C_TextField=new Color(50, 50, 50); Color C_TextField_OFF=new Color(150, 150, 150); Color C_Comment=new Color(0, 0, 0); int HRubSeparatorHeight=40; int HRubSeparatorWidth=40; int TextFieldHeight=17; int TextFontSize=12; // String GlobalFontName=JGlobals.GlobalFont; String GlobalFontName="System"; Font F_TextField=new Font(GlobalFontName, 0, TextFontSize); Font F_NameField=new Font(GlobalFontName, 1, 12); Font F_ConditionalField=new Font(GlobalFontName, 0, 10); Font F_Label=new Font(GlobalFontName, 0, TextFontSize); Font F_CheckBox=new Font(GlobalFontName, 0, TextFontSize); Font F_Button=new Font(GlobalFontName, 0, 10); Font F_ComboBox=new Font(GlobalFontName, 0, TextFontSize); Font F_TextArea=new Font(GlobalFontName, 0, TextFontSize); myJName name; myJAlias alias; myJMagnetObj magnetobj; myJMagnetPix magnetpix; myJUnit unit; myTRK track; myJConditional czvalue; //Layer num myJX X; myJY Y; myXYlink XYlink; myJAbsolutePos AbsPos; myJFx Fx; myJGrid Grid; myJInside Inside; myJR ray; myJRFx RFx; myJA angle; myJAFx aFx; myJTextArea text; myJExpression Exp; myJPrompt prompt; myJSMin min; myJSMax max; myJSSlider slider; ContentLine sliderline; myJUserFunction userfunc; myJUserF_Y fuey; myJEqXY eqxy; myJEqXYDHorChooser eqxychooser; ContentLine btnline; myMagnetBtn magnetbtn; myArcBtn arcbtn; myPtBindBtn ptbindbtn; myPtAwayBtn ptawaybtn; myPtCloseBtn ptclosebtn; myJFunction func; myJF_X fex; myJF_Y fey; myJF_d fd; myJF_DMin fdmin; myJF_Min fmin; myJF_Max fmax; myJF_pt fpt; myJF_Discrete ftr; myJColorLine color; myJSegmentCodeLine segmentcode; myJColorTypeLine colortype; myJTypeLine type; myJCircleLine circle; myJShowLine show; myJBoldLine boldlarge; myJAreaLine area; myJAngleLine0 angle0; myJAngleLine1 angle1; myJFilledLine filled; myJLineLine line; myJTrackDMinChooser dmintrack; myJConditional csolid, chidden, cnormal, cthick, cthin, cblack, cgreen, cblue, ccyan, cred, cbrown, cshowvalue, cshowname, cbackground, csuperhidden; // Text and checkbox items : String APoint=",PointObject,IntersectionObject,PointonObject,PointonObjectIntersectionObject,LineCircleIntersectionObject,LineQuadricIntersectionObject,LineIntersectionObject,CircleIntersectionObject,MidpointObject,"; String ACircle=",PrimitiveCircleObject,CircleObject,Circle3Object,FixedCircleObject,"; String ALine=",PrimitiveLineObject,LineObject,TwoPointLineObject,RayObject,ParallelObject,PlumbObject,"; String AAngle=",AngleObject,FixedAngleObject,"; String AExpression=",ExpressionObject,"; String AText=",TextObject,"; String AFunction=",FunctionObject,"; String AEquationXY=",EquationXYObject,"; String AUserFunction=",UserFunctionObject,"; String ATrack=",TrackObject,JLocusTrackObject,ObjectTracker,JLocusObjectTracker,"; String ASegment=",SegmentObject,"; String AArea=",AreaObject,"; public JProperties(int w, int h) { super(w, h); name=new myJName(Loc("name"), "", 40, 110, 20); name.JTF.setFont(F_NameField); alias=new myJAlias(Loc("alias"), "", 0, 90, 20); unit=new myJUnit(Loc("unit"), "", 70, 200, TextFieldHeight); magnetobj=new myJMagnetObj(Loc("magnetobj"), "", 0, 150, TextFieldHeight); magnetpix=new myJMagnetPix(Loc("magnetpix"), "", 0, 150, TextFieldHeight); X=new myJX("X :", "", 25, 300, TextFieldHeight); Y=new myJY("Y :", "", 25, 300, TextFieldHeight); XYlink=new myXYlink(); Fx=new myJFx(Loc("fix"), false, 130, TextFieldHeight); AbsPos=new myJAbsolutePos(Loc("fixedinwindow"), false, 150, TextFieldHeight); ray=new myJR(Loc("fixedray"), "", 75, 300+XYlink.W, TextFieldHeight); RFx=new myJRFx(Loc("fix"), false, 300+XYlink.W, TextFieldHeight); angle=new myJA(Loc("fixedangle"), "", 75, 300+XYlink.W, TextFieldHeight); aFx=new myJAFx(Loc("fix"), false, 300+XYlink.W, TextFieldHeight); czvalue=new myJConditional("z", Loc("belongto"), "", 70, 200, TextFieldHeight); track=new myTRK(Loc("tracks"), false, 200, TextFieldHeight); Grid=new myJGrid(Loc("grid"), "", 80, 170, TextFieldHeight); Inside=new myJInside(Loc("inside"), false, 130, TextFieldHeight); text=new myJTextArea("", 330, 55); Exp=new myJExpression("Exp :", "", 40, 330, TextFieldHeight); prompt=new myJPrompt(Loc("expl"), "", 100, 330, TextFieldHeight); min=new myJSMin("min", "", 0, 113, TextFieldHeight); max=new myJSMax("max", "", 0, 113, TextFieldHeight); slider=new myJSSlider(Loc("showasslider"), false, 100, TextFieldHeight); slider.JCBX.setText(slider.JCBX.getText()+" :"); sliderline=new ContentLine(330, TextFieldHeight); sliderline.add(slider); sliderline.add(min); sliderline.add(margin(4)); sliderline.add(max); userfunc=new myJUserFunction(Loc("vars"), "", 90, 330, TextFieldHeight); fuey=new myJUserF_Y("f(x) =", "0", 90, 331, TextFieldHeight); eqxy=new myJEqXY(Loc("equationxy"), "0", 90, 470, TextFieldHeight); eqxychooser=new myJEqXYDHorChooser(Loc("equationxychooser"), 90, 250, TextFieldHeight); // btnline = new ContentLine(300, TextFieldHeight); magnetbtn=new myMagnetBtn(30, 30); arcbtn=new myArcBtn(100, TextFieldHeight); ptbindbtn=new myPtBindBtn(100, TextFieldHeight); ptawaybtn=new myPtAwayBtn(100, TextFieldHeight); ptclosebtn=new myPtCloseBtn(100, TextFieldHeight); func=new myJFunction("", "", 0, 470, TextFieldHeight); fex=new myJF_X("x(t)=", "", 40, 470, TextFieldHeight); fey=new myJF_Y("", "", 40, 470, TextFieldHeight); fmin=new myJF_Min("Min :", "", 40, 176, TextFieldHeight); fmax=new myJF_Max("Max :", "", 40, 176, TextFieldHeight); fd=new myJF_d(Loc("step"), "", 40, 176, TextFieldHeight); fdmin=new myJF_DMin(Loc("step"), "", 50, 300, TextFieldHeight); fpt=new myJF_pt(Loc("pointsonly"), false, 200, TextFieldHeight); ftr=new myJF_Discrete(Loc("pointsonly"), false, 300, TextFieldHeight); color=new myJColorLine(26, 2); colortype=new myJColorTypeLine(32, 3); segmentcode=new myJSegmentCodeLine(30, 3); type=new myJTypeLine(26, 2); circle=new myJCircleLine(24, 1); show=new myJShowLine(28, 1); boldlarge=new myJBoldLine(26, 2); area=new myJAreaLine(26, 1); angle0=new myJAngleLine0(26, 1); angle1=new myJAngleLine1(26, 2); filled=new myJFilledLine(26, 1); line=new myJLineLine(26, 2); dmintrack=new myJTrackDMinChooser(Loc("trackdmin"), 150, 250, TextFieldHeight); int cdw=115; csolid=new myJConditional("solid", cdw, TextFieldHeight); chidden=new myJConditional("hidden", cdw, TextFieldHeight); cnormal=new myJConditional("normal", cdw, TextFieldHeight); cthick=new myJConditional("thick", cdw, TextFieldHeight); cthin=new myJConditional("thin", cdw, TextFieldHeight); cblack=new myJConditional("black", cdw, TextFieldHeight); cgreen=new myJConditional("green", cdw, TextFieldHeight); cblue=new myJConditional("blue", cdw, TextFieldHeight); cbrown=new myJConditional("brown", cdw, TextFieldHeight); ccyan=new myJConditional("cyan", cdw, TextFieldHeight); cred=new myJConditional("red", cdw, TextFieldHeight); // cinvisible=new myJConditional("invisible",Loc("invisible"),"",70,true); csuperhidden=new myJConditional("superhidden", cdw, TextFieldHeight); cshowname=new myJConditional("showname", cdw, TextFieldHeight); cshowvalue=new myJConditional("showvalue", cdw, TextFieldHeight); cbackground=new myJConditional("background", cdw, TextFieldHeight); HashSet forwardKeys=new HashSet(); forwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0)); // forwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0)); forwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0)); this.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forwardKeys); HashSet backwardKeys=new HashSet(); backwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0)); backwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, InputEvent.SHIFT_DOWN_MASK)); this.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, backwardKeys); } public void setObject(ConstructionObject o, boolean forcevisible, boolean forcefocus) { if (JZirkelCanvas.getCurrentZF()==null) { return; } ZF=JZirkelCanvas.getCurrentZF(); ZC=JZirkelCanvas.getCurrentZC(); O=o; Cn=ZC.getConstruction(); String[] tab=O.getClass().getName().split("\\."); typecode=","+tab[tab.length-1]+","; this.clearAll(); addTopStandardLine(); // addToNum(new myRubSep()); addCoords(); addPointsGoodies(); addRadius(); addAngle(); addText(); addExpressionLine(); addUserFunction(); addEquationXY(); addButtons(); addFunction(); addTrack(); addAspectIcons(); addConditionals(); this.revalidate(); this.repaint(); if (forcefocus) { if (isExpression()) { if (O.isSlider()) { FocusAndSelect(min.JTF, forcevisible); } else { FocusAndSelect(Exp.JTF, forcevisible); } } else if (isText()) { FocusAndSelect(text.JTX, forcevisible); } else if (isUserFunction()) { FocusAndSelect(fuey.JTF, forcevisible); } else if (isFunction()) { FocusAndSelect(fey.JTF, forcevisible); } else if ((ACircle.indexOf(typecode)!=-1)) { FocusAndSelect(ray.JTF, forcevisible); } else if ((ASegment.indexOf(typecode)!=-1)) { FocusAndSelect(ray.JTF, forcevisible); } else if ((AAngle.indexOf(typecode)!=-1)) { FocusAndSelect(angle.JTF, forcevisible); } else { FocusAndSelect(name.JTF, forcevisible); } return; } FocusAndSelect(name.JTF, false); } public void refresh() { if (O instanceof PointObject) { magnetobj.init(); if (!O.isStrongSelected()) { magnetbtn.setSelected(false); } } } public void clearme() { O=null; Cn=null; this.clearAll(); // String str = JGlobals.Loc("props.help"); // str = str.replace("
", " "); // // JLabel hlp = new JLabel(str); // hlp.setOpaque(false); // hlp.setFont(new Font("System", 0, 12)); // hlp.setHorizontalAlignment(SwingConstants.CENTER); // hlp.setVerticalAlignment(SwingConstants.CENTER); // fixsize(hlp, 600, RightPanel.getSize().height); // hlp.setForeground(new Color(100,100,100)); repaint(); } private void FocusAndSelect(final JTextComponent cp, final boolean forcevisible) { SwingUtilities.invokeLater(new Runnable() { public void run() { if (forcevisible) { selectTab(1); } cp.requestFocus(); cp.selectAll(); } }); } private void addTopStandardLine() { JPanel rubname=new myRub(); name.init(); rubname.add(name); addMain(margin(5)); addMain(rubname); addMain(margin(5)); JPanel rub=new myRub(); alias.init(); rub.add(alias); addMain(rub); } private void addCoords() { JPanel rub=new myRub(); if (isNotObjectWithCoords()) { return; } X.init(); Y.init(); rub.add(margintop(2)); JPanel coordsCOL=new JPanel(); coordsCOL.setOpaque(false); coordsCOL.setLayout(new BoxLayout(coordsCOL, BoxLayout.Y_AXIS)); JPanel coordsLNE=new JPanel(); coordsLNE.setOpaque(false); coordsLNE.setLayout(new BoxLayout(coordsLNE, BoxLayout.X_AXIS)); coordsLNE.setAlignmentX(0F); coordsCOL.add(X); coordsCOL.add(margintop(1)); coordsCOL.add(Y); coordsLNE.add(coordsCOL); coordsLNE.add(XYlink); rub.add(coordsLNE); // rub.add(margintop(1)); // rub.add(AbsPos); rub.add(margintop(1)); ContentLine myline=new ContentLine(X.W+XYlink.W, Fx.H); rub.add(myline); // if it's a Point : (not moveable) or (a PointOn) if (!(O.fixed())) { if ((APoint.indexOf(typecode)!=-1)&&((!((PointObject) O).moveable())||((PointObject) O).isPointOn())) { X.setEditable(false); Y.setEditable(false); } else { Fx.init(); myline.add(Fx); } } else { X.setEditable(true); Y.setEditable(true); Fx.init(); myline.add(Fx); } //if it's a point inside a polygon or circle : if (((APoint.indexOf(typecode)!=-1))&&((PointObject) O).isPointOn()) { X.setEditable(false); Y.setEditable(false); if (((PointObject) O).getBound() instanceof InsideObject) { Inside.init(); myline.add(Inside); } } if (((APoint.indexOf(typecode)!=-1))&&((PointObject) O).moveable()&&(!(((PointObject) O).isPointOn()))) { Grid.setEditable(true); X.setEditable(true); Y.setEditable(true); Grid.init(); myline.add(Grid); } if (((APoint.indexOf(typecode)!=-1))&&(((PointObject) O).isPointOn())) { Grid.setEditable(true); Grid.init(); // myline.add(margin(Fx.W)); myline.add(Grid); } addToNum(rub); addToNum(new myRubSep()); } private void addPointsGoodies() { if ((APoint.indexOf(typecode)==-1)) { return; } if ((!O.fixed())&&(!((PointObject) O).moveable())) { return; } JPanel rub=new myRub(); rub.add(margintop(2)); if (!((PointObject) O).isPointOn()) { AbsPos.init(); rub.add(AbsPos); rub.add(margintop(AbsPos.H+2)); } else { rub.add(margintop(2*AbsPos.H+2)); } PointObject p=(PointObject) O; if (p.moveablePoint()) { ptbindbtn.init(); rub.add(ptbindbtn); } addToNum(rub); rub.add(margintop(2*AbsPos.H+4)); addToNum(new myRubSep()); } private void addRadius() { if ((ACircle.indexOf(typecode)==-1)&&(ASegment.indexOf(typecode)==-1)) { return; } if (O.canFix()) { JPanel rub=new myRub(); ray.init(); RFx.init(); String mytxt=(ACircle.indexOf(typecode)!=-1)?Loc("fixedray"):Loc("fixedsegment"); ray.setLabelTxt(mytxt); rub.add(margintop(2)); rub.add(ray); rub.add(margintop(ray.H+2)); rub.add(RFx); addToNum(rub); addToNum(new myRubSep()); } } private void addAngle() { if (AAngle.indexOf(typecode)==-1) { return; } if (O.canFix()) { JPanel rub=new myRub(); angle.init(); aFx.init(); rub.add(margintop(2)); rub.add(angle); rub.add(margintop(angle.H+2)); rub.add(aFx); addToNum(rub); addToNum(new myRubSep()); } } public void addText() { if (AText.indexOf(typecode)==-1) { return; } JPanel rub=new myRub(); text.init(); rub.add(text); addToNum(rub); } private void addExpressionLine() { if (AExpression.indexOf(typecode)==-1) { return; } JPanel rub=new myRub(); rub.add(margintop(2)); Exp.init(); prompt.init(); slider.init(); max.init(); min.init(); rub.add(Exp); rub.add(margintop(1)); rub.add(sliderline); rub.add(margintop(1)); rub.add(prompt); addToNum(rub); } private void addTrack() { if (ATrack.indexOf(typecode)==-1) { return; } JPanel rub=new myRub(); rub.add(margintop(2)); dmintrack.init(); rub.add(dmintrack); rub.add(margintop(dmintrack.H*2+4)); addToNum(rub); } private void addUserFunction() { if (AUserFunction.indexOf(typecode)==-1) { return; } userfunc.init(); addToNum(userfunc); } private void addEquationXY() { if (AEquationXY.indexOf(typecode)==-1) { return; } JPanel rub=new myRub(); rub.add(margintop(2)); eqxy.init(); eqxychooser.init(); rub.add(eqxy); rub.add(margintop(eqxy.H+2)); rub.add(eqxychooser); addToNum(rub); } private void addFunction() { if (AFunction.indexOf(typecode)==-1) { return; } func.init(); addToNum(func); addToNum(new myRubSep()); JPanel rub=new myRub(); fmin.init(); fmax.init(); fd.init(); rub.add(margintop(2)); rub.add(fmin); rub.add(margintop(1)); rub.add(fmax); rub.add(margintop(1)); rub.add(fd); rub.add(margintop(1)); addToNum(rub); // func.init(); // content.add(func); // content.add(new mySep()); } public void addButtons() { JPanel rub=new myRub(); rub.add(margintop(2)); if (ACircle.indexOf(typecode)!=-1) { arcbtn.init(); rub.add(arcbtn); rub.add(margintop(1)); } if (APoint.indexOf(typecode)!=-1) { PointObject p=(PointObject) O; if ((p.moveablePoint())&&(!p.isPointOn())) { // ptbindbtn.init(); magnetobj.init(); magnetpix.init(); magnetbtn.init(); // rub.add(ptbindbtn); // rub.add(margintop(1)); JPanel jp=new JPanel(); jp.setLayout(new BoxLayout(jp, BoxLayout.X_AXIS)); jp.setOpaque(false); jp.setAlignmentX(0F); jp.add(magnetbtn); jp.add(margin(15)); JPanel rub2=new myRub(); rub2.add(magnetobj); rub2.add(margintop(5)); rub2.add(magnetpix); jp.add(rub2); rub.add(jp); } else if (p instanceof IntersectionObject&&((IntersectionObject) p).isSwitchable()) { rub.add(ptawaybtn); rub.add(margintop(1)); rub.add(ptclosebtn); } } if (rub.getComponentCount()>1) { JPanel myspacer=new JPanel(); myspacer.setOpaque(false); // addToNum(myspacer); addToNum(rub); addToNum(margin(3)); } } private void addAspectIcons() { color.init(); // color.setSelect(O.getColorIndex(true)); addToAspect(color); addToAspect(new myRubSep()); colortype.setSelect(O.getColorType(true)); addToAspect(colortype); addToAspect(new myRubSep()); show.init(); addToAspect(show); if (O.canDisplayName()) { boldlarge.init(); addToAspect(new myRubSep()); addToAspect(boldlarge); } if ((ASegment.indexOf(typecode))!=-1) { segmentcode.init(); addToAspect(new myRubSep()); addToAspect(segmentcode); } if ((APoint.indexOf(typecode)!=-1)||(AFunction.indexOf(typecode)!=-1)||(ATrack.indexOf(typecode)!=-1)) { type.setSelect(O.getType()); addToAspect(new myRubSep()); addToAspect(type); } else if (AAngle.indexOf(typecode)!=-1) { angle1.setSelect(O.getDisplaySize()); addToAspect(new myRubSep()); addToAspect(angle1); } if (ACircle.indexOf(typecode)!=-1) { circle.init(); addToAspect(new myRubSep()); addToAspect(circle); } else if (ALine.indexOf(typecode)!=-1) { line.init(); addToAspect(new myRubSep()); addToAspect(line); } else if (AAngle.indexOf(typecode)!=-1) { angle0.init(); addToAspect(new myRubSep()); addToAspect(angle0); } else if (AFunction.indexOf(typecode)!=-1) { filled.init(); addToAspect(new myRubSep()); addToAspect(filled); } else if (ATrack.indexOf(typecode)!=-1) { filled.init(); addToAspect(new myRubSep()); addToAspect(filled); } else if (AArea.indexOf(typecode)!=-1) { area.init(); addToAspect(new myRubSep()); addToAspect(area); } JPanel myspacer=new JPanel(); myspacer.setOpaque(false); JPanel rub=new myRub(); rub.add(margintop(2)); czvalue.init(); rub.add(czvalue); if (O.hasUnit()) { rub.add(margintop(1)); unit.init(); rub.add(unit); } if ((AFunction.indexOf(typecode)!=-1)||(ATrack.indexOf(typecode)!=-1)) { rub.add(margintop(1)); fpt.init(); rub.add(fpt); } rub.add(margintop(1)); track.init(); rub.add(track); // if (APoint.indexOf(typecode)!=-1) { // track.init(); // rub.add(track); // } // addToAspect(new myRubSep()); addToAspect(myspacer); addToAspect(rub); addToAspect(margin(3)); } private void addConditionals() { JPanel rub=new myRub(); chidden.init(); csuperhidden.init(); csolid.init(); rub.add(margintop(1)); rub.add(chidden); rub.add(margintop(1)); rub.add(csuperhidden); rub.add(margintop(1)); rub.add(csolid); addToConditional(rub); addToConditional(new myRubSep(14)); rub=new myRub(); cnormal.init(); cthick.init(); cthin.init(); rub.add(margintop(1)); rub.add(cnormal); rub.add(margintop(1)); rub.add(cthick); rub.add(margintop(1)); rub.add(cthin); addToConditional(rub); addToConditional(new myRubSep(14)); rub=new myRub(); cshowname.init(); cshowvalue.init(); // cbackground.init(); rub.add(margintop(1)); rub.add(margintop(1)); rub.add(cshowname); rub.add(margintop(1)); rub.add(cshowvalue); // rub.add(cbackground); rub.add(margintop(cshowname.H+1)); addToConditional(rub); addToConditional(new myRubSep(14)); rub=new myRub(); cblack.init(); cgreen.init(); cblue.init(); rub.add(margintop(1)); rub.add(cblack); rub.add(margintop(1)); rub.add(cgreen); rub.add(margintop(1)); rub.add(cblue); addToConditional(rub); addToConditional(new myRubSep(14)); rub=new myRub(); cbrown.init(); ccyan.init(); cred.init(); rub.add(margintop(1)); rub.add(cbrown); rub.add(margintop(1)); rub.add(ccyan); rub.add(margintop(1)); rub.add(cred); addToConditional(rub); } public void addToNum(JComponent cp) { add(cp, 1); } public void addToAspect(JComponent cp) { add(cp, 0); } public void addToConditional(JComponent cp) { add(cp, 2); } public String Loc(String s) { return Global.Loc("props."+s); } static void fixsize(JComponent cp, int w, int h) { Dimension d=new Dimension(w, h); cp.setMaximumSize(d); cp.setMinimumSize(d); cp.setPreferredSize(d); cp.setSize(d); } static JPanel margin(int w) { JPanel mypan=new JPanel(); fixsize(mypan, w, 1); mypan.setLayout(new javax.swing.BoxLayout(mypan, javax.swing.BoxLayout.X_AXIS)); mypan.setAlignmentX(0F); mypan.setAlignmentY(0F); mypan.setOpaque(false); mypan.setFocusable(false); return mypan; } JPanel margintop(int h) { JPanel mypan=new JPanel(); fixsize(mypan, 1, h); mypan.setOpaque(false); mypan.setFocusable(false); return mypan; } private boolean isExpression() { boolean bool=(AExpression.indexOf(typecode)!=-1); return (bool); } private boolean isText() { boolean bool=(AText.indexOf(typecode)!=-1); return (bool); } private boolean isUserFunction() { boolean bool=(AUserFunction.indexOf(typecode)!=-1); return (bool); } private boolean isFunction() { boolean bool=(AFunction.indexOf(typecode)!=-1); return (bool); } private boolean isNotObjectWithCoords() { boolean bad=(APoint.indexOf(typecode)==-1); bad&=(AExpression.indexOf(typecode)==-1); bad&=(AText.indexOf(typecode)==-1); bad&=(AUserFunction.indexOf(typecode)==-1); return (bad); } private boolean isAbsolutePoint() { boolean b=O.fixed(); if (b) { String x=O.getEXpos(), y=O.getEY(); b=b&&x.startsWith("(windoww/(windoww-d(windoww)))*("); b=b&&x.endsWith("-windowcx)+windowcx+d(windowcx)"); b=b&&y.startsWith("(windoww/(windoww-d(windoww)))*("); b=b&&y.endsWith("-windowcy)+windowcy+d(windowcy)"); } return b; } boolean isValidExpression(String myexp) { boolean bool=true; try { Expression exp=new Expression(myexp, O.getConstruction(), O); if (!(exp.isValid())) { bool=false; } } catch (Exception ex) { bool=false; } return bool; } double ValueOf(String myexp) { double rep; try { Expression exp=new Expression(myexp, O.getConstruction(), O); rep=exp.getValue(); } catch (Exception ex) { rep=0.0; } return rep; } // static Construction V_CONST=new Construction(); // static UserFunctionObject V_FONC=new UserFunctionObject(V_CONST); static double VARS[]={1, 2, 3, 4}; // set text : public static String Point_To_Comma(String mynum, Construction C, boolean check) { if (C==null) { return mynum; } if (check) { try { UserFunctionObject V_FONC=new UserFunctionObject(C); V_FONC.setExpressions("x y z t", mynum.replace("invalid", "1")); double d=V_FONC.evaluateF(VARS); } catch (Exception ex) { return mynum; } } if (Global.isDecimalWithComma()) { String s=mynum.replace(",", ";"); return s.replace(".", ","); } else { return mynum; } } // get text : public static String Comma_To_Point(String mynum, Construction C, boolean check) { if (C==null) { return mynum; } String s=mynum.replace(",", "."); s=s.replace(";", ","); if (check) { try { UserFunctionObject V_FONC=new UserFunctionObject(C); V_FONC.setExpressions("x y z t", s.replace("invalid", "1")); double d=V_FONC.evaluateF(VARS); } catch (Exception ex) { return mynum; } } if (Global.isDecimalWithComma()) { return s; } else { return mynum; } } static class MyComboBoxUI extends MetalComboBoxUI { public static ComponentUI createUI(JComponent c) { return new MyComboBoxUI(); } } class myRub extends JPanel { public myRub() { this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); this.setAlignmentX(0F); this.setOpaque(false); } public myRub(String rubname) { this(); } public myRub(int width, int height) { this(""); fixsize(this, width, height); } } class myRubSep extends JPanel { public void paintComponent(java.awt.Graphics g) { super.paintComponent(g); ImageIcon myicon=new ImageIcon(getClass().getResource("gui/sep.png")); java.awt.Dimension d=this.getSize(); int x=(d.width+myicon.getIconWidth())/2; g.drawImage(myicon.getImage(), x, 0, myicon.getIconWidth(), d.height, this); } public myRubSep() { this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); this.setAlignmentX(0f); this.setAlignmentY(0.5f); this.setOpaque(false); fixsize(this, HRubSeparatorWidth, HRubSeparatorHeight); } public myRubSep(int width) { this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); this.setAlignmentX(0f); this.setAlignmentY(0.5f); this.setOpaque(false); fixsize(this, width, HRubSeparatorHeight); } } class ContentLine extends JPanel { int W, H; public ContentLine() { setLayout(new javax.swing.BoxLayout(this, javax.swing.BoxLayout.X_AXIS)); setAlignmentX(0F); setAlignmentY(0F); setFocusable(false); setOpaque(false); } public ContentLine(int width, int height) { this(); W=width; H=height; fixsize(this, width, height); } } class myJLine extends ContentLine { String contextHelp=""; ArrayList carPopupMenuItemAllowed=new ArrayList(); JTextFieldPopup carPopup=null; JButton carBTN=null; JLabel myTXT; myJTextField JTF; JCheckBox JCBX; JButton JBTN; int CW; boolean Cinside; String InitValue=""; // With text field : public myJLine(String comment, String txt, int comwidth, int width, int height) { super(width, height); CW=comwidth; Cinside=((!comment.equals(""))&&(comwidth==0)); //comment must be inside the JTF as an init value if (Cinside) { InitValue=comment; InitValue=InitValue.trim(); InitValue=InitValue.replace(":", ""); InitValue=InitValue.trim(); InitValue="<"+InitValue+">"; } ; addnewlabel(comment, comwidth, H); JTF=new myJTextField(txt); JTF.setFont(F_TextField); JTF.setForeground(C_TextField); JTF.setBackground(new Color(245, 246, 255)); JTF.setBorder(BorderFactory.createLineBorder(new Color(150, 150, 150), 1)); JTF.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent arg0) { doHelp(); doEnter(); } }); JTF.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if ((Cinside)&&(JTF.getText().equals(InitValue))) { JTF.setForeground(C_TextField_OFF); } else { JTF.setForeground(C_TextField); } } public void keyReleased(KeyEvent e) { doAction(e.getComponent()); } }); JTF.addFocusListener(new FocusAdapter() { public void focusGained(FocusEvent e) { if ((carPopup!=null)&&(carPopup.isVisible())) { return; } if ((Cinside)&&(JTF.getText().equals(InitValue))) { JTF.setText(""); JTF.setForeground(C_TextField); } if (carBTN!=null) { carBTN.setEnabled(true); } JTF.selectAll(); } public void focusLost(FocusEvent e) { if ((carPopup!=null)&&(carPopup.isVisible())) { return; } if ((Cinside)&&(JTF.getText().equals(""))) { JTF.setText(InitValue); JTF.setForeground(C_TextField_OFF); } if (carBTN!=null) { carBTN.setEnabled(false); } doQuitMe(e.getComponent()); } }); this.add(JTF); } public myJLine(String comment, String txt, int comwidth, int width, int height, boolean withhelp) { this(comment, txt, comwidth, width, height); carPopup=new JTextFieldPopup(JTF); carPopup.addPopupMenuListener(new PopupMenuListener() { public void popupMenuWillBecomeVisible(PopupMenuEvent arg0) { } public void popupMenuWillBecomeInvisible(PopupMenuEvent arg0) { doAction(JTF); } public void popupMenuCanceled(PopupMenuEvent arg0) { } }); ImageIcon carimg=new ImageIcon(getClass().getResource("/eric/GUI/icons/bar/carbtn.png")); ImageIcon carimg_dis=new ImageIcon(getClass().getResource("/eric/GUI/icons/bar/carbtn_dis.png")); carBTN=new JButton(carimg); carBTN.setDisabledIcon(carimg_dis); // carbtn.setRolloverIcon(closeoverimg); carBTN.setBorder(BorderFactory.createEmptyBorder()); carBTN.setOpaque(false); carBTN.setContentAreaFilled(false); carBTN.setFocusable(false); carBTN.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { doShowPopup(e); } }); carBTN.setEnabled(false); fixsize(carBTN, carimg.getIconWidth(), carimg.getIconHeight()); this.add(margin(2)); this.add(carBTN); } // with checkbox : public myJLine(String comment, boolean checked, int width, int height) { super(width, height); this.setFocusable(false); comment=comment.replace(":", ""); comment=comment.trim(); JCBX=new JCheckBox(""); JCBX.setOpaque(false); JCBX.setFocusable(false); JCBX.setFont(F_CheckBox); fixsize(JCBX, W, H); JCBX.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { doAction(e.getComponent()); } }); JCBX.setIcon(new ImageIcon(getClass().getResource("gui/chkboxOFF.png"))); JCBX.setSelectedIcon(new ImageIcon(getClass().getResource("gui/chkboxON.png"))); JCBX.setText(comment); this.add(JCBX); } // with button : public myJLine(String comment, int btnwidth, int width, int height) { super(width, height); JBTN=new JButton(); JBTN.setFont(F_Button); // JBTN.setBorder(BorderFactory.createEtchedBorder()); fixsize(JBTN, btnwidth, H); JBTN.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { doAction(e.getComponent()); } }); JBTN.setText(comment); this.add(JBTN); } // TxtField with caracter palette btn public void addnewlabel(String comment, int w, int h) { myTXT=new JLabel(comment); myTXT.setFocusable(false); myTXT.setFont(F_Label); fixsize(myTXT, w, h); myTXT.setHorizontalAlignment(SwingConstants.LEFT); myTXT.setVerticalAlignment(SwingConstants.CENTER); this.add(myTXT); } public void setLabelTxt(String lbltxt) { myTXT.setText(lbltxt); } public void setSelected(boolean on) { JCBX.setSelected(on); } public boolean isSelected() { return JCBX.isSelected(); } public void setText(String txt) { JTF.setText(Point_To_Comma(txt, Cn, true)); } public String getText() { return Comma_To_Point(JTF.getText(), Cn, true); } public void setEditable(boolean bool) { if (bool) { JTF.setForeground(C_TextField); } else { JTF.setForeground(C_TextField_OFF); } JTF.setFocusable(bool); JTF.setEditable(bool); } public void setInitValue() { if ((Cinside)&&(JTF.getText().equals(""))) { JTF.setText(InitValue); JTF.setForeground(C_TextField_OFF); JTF.setHorizontalAlignment(SwingConstants.CENTER); } else { JTF.setForeground(C_TextField); } } public void doAction(Component cp) { } public void doQuitMe(Component cp) { } public void doEnter() { } public void doShowPopup(MouseEvent e) { if (carBTN.isEnabled()) { carPopup.openMenu(e); } } public void doHelp() { if (!contextHelp.equals("")) { ZF.setinfo(contextHelp, false); } } } class myJName extends myJLine { public myJName(String comment, String txt, int comwidth, int width, int height) { super(comment, txt, comwidth, width, height); contextHelp="prop_name"; this.JTF.setHorizontalAlignment(SwingConstants.CENTER); } public void doAction(Component e) { JTextField jtf=(JTextField) e; if (O.getName().equals(jtf.getText())) { return; } O.setName(jtf.getText()); O.setShowName(true); show.forceSelect(2); // Force the ShowName icon to be selected if (ZC!=null) { ZC.repaint(); } } public void init() { setText(O.getName()); } } class myJAlias extends myJLine { public myJAlias(String comment, String txt, int comwidth, int width, int height) { super(comment, txt, comwidth, width, height, true); contextHelp="prop_alias"; carPopup.setDisabled(","+JTextFieldPopup.FUNCTIONMENU+","); } public void doAction(Component e) { JTextField jtf=(JTextField) e; if ((O.getAlias()!=null)&&(O.getAlias().equals(jtf.getText()))) { return; } if (jtf.getText().equals("")) { O.setAlias(null); } else { O.setAlias(jtf.getText()); // jtf.setText(O.getAlias()); } ; O.setShowName(true); show.forceSelect(2); ZC.repaint(); } public void init() { setText(O.getAlias()); setInitValue(); } } class myJMagnetObj extends myJLine { public myJMagnetObj(String comment, String txt, int comwidth, int width, int height) { super(comment, txt, comwidth, width, height); contextHelp="prop_magnetic"; } public void doEnter() { PointObject P=(PointObject) O; if (P==null) { return; } magnetbtn.setSelected(true); ZC.magnet(P); } public void doAction(Component e) { JTextField jtf=(JTextField) e; PointObject P=(PointObject) O; P.selectMagnetObjects(false); P.setMagnetObjects(Comma_To_Point(JTF.getText(), Cn, false)); P.selectMagnetObjects(true); ZC.repaint(); } public void init() { PointObject P=(PointObject) O; JTF.setText(Point_To_Comma(P.getMagnetObjectsString(), Cn, false)); setInitValue(); } } class myJMagnetPix extends myJLine { public myJMagnetPix(String comment, String txt, int comwidth, int width, int height) { super(comment, txt, comwidth, width, height); contextHelp="prop_magnetic"; } public void doEnter() { PointObject P=(PointObject) O; if (P==null) { return; } magnetbtn.setSelected(true); ZC.magnet(P); } public void doAction(Component e) { PointObject P=(PointObject) O; P.setMagnetRayExp(getText()); P.magnet(); ZC.validate(); ZC.repaint(); } public void init() { PointObject P=(PointObject) O; // setText("" + P.getMagnetRayExp()); if (P.getMagnetRayExp().equals("20")) { setText(""); } else { setText(P.getMagnetRayExp()); } setInitValue(); } } class myJUnit extends myJLine { public myJUnit(String comment, String txt, int comwidth, int width, int height) { super(comment, txt, comwidth, width, height, true); contextHelp="prop_unit"; carPopup.setDisabled(","+JTextFieldPopup.LATEXMENU+","); } public void doAction(Component e) { if (O.hasUnit()) { JTextField jtf=(JTextField) e; if (O.getUnit().equals(jtf.getText())) { return; } O.setUnit(jtf.getText()); O.setShowValue(true); show.forceSelect(1); ZC.repaint(); } ; } public void init() { setText(O.getUnit()); setInitValue(); } } class myJX extends myJLine { String origin=""; String current=""; public myJX(String comment, String txt, int comwidth, int width, int height) { super(comment, txt, comwidth, width, height, true); contextHelp="prop_coordinates"; carPopup.setDisabled(","+JTextFieldPopup.LATEXMENU+","); // fixsize(this.JTF,this.JTF.getSize().width-18,this.JTF.getSize().height); // fixsize(this,this.getSize().width-30,this.getSize().height); } public void doAction(Component e) { if (current.equals(getText())) { return; } if (XYlink.isSelected()) { String myX=X.getText(); myX=myX.replace("x(", "y("); Y.setText(myX); } ; O.setFixed(X.getText(), Y.getText()); Fx.setSelected(true); current=getText(); O.move(O.getX(), O.getY()); ZC.recompute(); ZC.validate(); ZC.repaint(); } public void doQuitMe(Component e) { if (O==null) { return; } if (!(isValidExpression(getText()))) { JOptionPane.showMessageDialog(null, Loc("error")); if (!(isValidExpression(origin))) { origin="0"; } setText(origin); if (XYlink.isSelected()) { Y.setText(Y.origin); } ; O.setFixed(X.getText(), Y.getText()); Fx.setSelected(true); O.move(O.getX(), O.getY()); ZC.recompute(); ZC.validate(); ZC.repaint(); this.JTF.requestFocus(); } else { origin=getText(); if (XYlink.isSelected()) { Y.origin=Y.getText(); } } } public void init() { if (O.fixed()) { if (isAbsolutePoint()) { current=Loc("fixedinwindow"); } else { current=(isValidExpression(O.getEXpos()))?O.getEXpos():"????"; } } else { current=String.valueOf(O.getX()); } setText(current); origin=current; } } class myJY extends myJLine { String origin=""; String current=""; public myJY(String comment, String txt, int comwidth, int width, int height) { super(comment, txt, comwidth, width, height, true); contextHelp="prop_coordinates"; carPopup.setDisabled(","+JTextFieldPopup.LATEXMENU+","); // fixsize(this.JTF,this.JTF.getSize().width-18,this.JTF.getSize().height); // fixsize(this,this.getSize().width-30,this.getSize().height); } public void doAction(Component e) { if (current.equals(getText())) { return; } O.setFixed(X.getText(), Y.getText()); Fx.setSelected(true); current=getText(); O.move(O.getX(), O.getY()); ZC.recompute(); ZC.validate(); ZC.repaint(); } public void doQuitMe(Component e) { if (O==null) { return; } if (!(isValidExpression(getText()))) { JOptionPane.showMessageDialog(null, Loc("error")); if (!(isValidExpression(origin))) { origin="0"; } setText(origin); O.setFixed(X.getText(), Y.getText()); Fx.setSelected(true); O.move(O.getX(), O.getY()); ZC.recompute(); ZC.validate(); ZC.repaint(); this.JTF.requestFocus(); } else { origin=getText(); } } public void init() { if (O.fixed()) { if (isAbsolutePoint()) { current=Loc("fixedinwindow"); } else { current=(isValidExpression(O.getEYpos()))?O.getEYpos():"????"; } } else { current=String.valueOf(O.getY()); } setText(current); origin=current; } } class myJR extends myJLine { String origin=""; String current=""; public myJR(String comment, String txt, int comwidth, int width, int height) { super(comment, txt, comwidth, width, height, true); contextHelp="prop_length"; carPopup.setDisabled(","+JTextFieldPopup.LATEXMENU+","); } public void doAction(Component e) { if (current.equals(getText())) { return; } try { O.setFixed(true, getText()); O.setFixed(getText()); O.setDragable(false); RFx.setSelected(true); current=getText(); ZC.recompute(); ZC.validate(); ZC.repaint(); } catch (Exception ex) { } } public void doQuitMe(Component e) { if (O==null) { return; } if (!(isValidExpression(getText()))) { JOptionPane.showMessageDialog(null, Loc("error")); if (!(isValidExpression(origin))) { origin="0"; } try { O.setFixed(true, origin); setText(origin); RFx.setSelected(true); ZC.recompute(); ZC.validate(); ZC.repaint(); } catch (Exception ex) { } this.JTF.requestFocus(); } else { origin=getText(); } } public void init() { current=O.getStringLength(); setText(current); origin=current; } } class myJA extends myJLine { String origin=""; String current=""; public myJA(String comment, String txt, int comwidth, int width, int height) { super(comment, txt, comwidth, width, height, true); contextHelp="prop_angle"; carPopup.setDisabled(","+JTextFieldPopup.LATEXMENU+","); } public void doAction(Component e) { if (current.equals(getText())) { return; } try { O.setFixed(getText()); O.setDragable(false); aFx.setSelected(true); current=getText(); ZC.recompute(); ZC.validate(); ZC.repaint(); } catch (Exception ex) { } } public void doQuitMe(Component e) { if (O==null) { return; } if (!(isValidExpression(getText()))) { JOptionPane.showMessageDialog(null, Loc("error")); if (!(isValidExpression(origin))) { origin="0"; } try { O.setFixed(origin); setText(origin); aFx.setSelected(true); ZC.recompute(); ZC.validate(); ZC.repaint(); } catch (Exception ex) { } this.JTF.requestFocus(); } else { origin=getText(); } } public void init() { current=O.getE(); setText(current); origin=current; } } class myJRFx extends myJLine { public myJRFx(String comment, boolean bool, int width, int height) { super(comment, bool, width, height); } public void doAction(Component e) { if (isSelected()) { try { String val=String.valueOf(ValueOf(O.getStringLength())); ray.setText(val); O.setDragable(true); O.setFixed(false, val); } catch (Exception ex) { } } else { try { String val=String.valueOf(ValueOf(O.getStringLength())); ray.setText(val); O.setDragable(false); O.setFixed(true, val); O.setFixed(val); } catch (Exception ex) { } } } public void init() { setSelected((!(O.isDragable()))&&(O.fixed())); } } class myJAFx extends myJLine { public myJAFx(String comment, boolean bool, int width, int height) { super(comment, bool, width, height); } public void doAction(Component e) { if (isSelected()) { try { String val=String.valueOf(ValueOf(O.getE())); angle.setText(val); O.setDragable(true); O.setFixed(false); } catch (Exception ex) { } } else { try { String val=String.valueOf(ValueOf(O.getE())); angle.setText(val); O.setDragable(false); O.setFixed(val); } catch (Exception ex) { } } } public void init() { setSelected((!(O.isDragable()))&&(O.fixed())); } } class myJAbsolutePos extends myJLine { public myJAbsolutePos(String comment, boolean bool, int width, int height) { super(comment, bool, width, height); } public void doAction(Component e) { if (isSelected()) { O.setFixed(false); X.setText(String.valueOf(O.getX())); Y.setText(String.valueOf(O.getY())); X.setEditable(true); Y.setEditable(true); Fx.setSelected(false); Fx.JCBX.setEnabled(true); } else { String x="(windoww/(windoww-d(windoww)))*(x("+O.getName()+")-windowcx)+windowcx+d(windowcx)"; String y="(windoww/(windoww-d(windoww)))*(y("+O.getName()+")-windowcy)+windowcy+d(windowcy)"; O.setFixed(x, y); X.setEditable(false); Y.setEditable(false); X.setText(Loc("fixedinwindow")); Y.setText(Loc("fixedinwindow")); Fx.setSelected(true); Fx.JCBX.setEnabled(false); ZC.recompute(); ZC.validate(); ZC.repaint(); } } public void init() { boolean b=isAbsolutePoint(); setSelected(b); if (b) { X.setEditable(false); Y.setEditable(false); Fx.JCBX.setEnabled(false); } } } class myXYlink extends JPanel { int H, W; JButton btn; // ImageIcon myimage; public myXYlink() { this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); this.setOpaque(false); btn=new JButton(); ImageIcon imgOFF=new ImageIcon(getClass().getResource("/eric/GUI/icons/palette/chaineOFF.png")); btn.setIcon(imgOFF); btn.setSelectedIcon(new ImageIcon(getClass().getResource("/eric/GUI/icons/palette/chaine.png"))); btn.setSelected(true); btn.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { btn.setSelected(!btn.isSelected()); } }); btn.setOpaque(false); btn.setContentAreaFilled(false); btn.setFocusable(false); W=imgOFF.getIconWidth(); H=imgOFF.getIconHeight(); fixsize(btn, W, H); btn.setBorder(BorderFactory.createEmptyBorder()); this.add(btn); } public boolean isSelected() { return btn.isSelected(); } } class myJGrid extends myJLine { String origin=""; String current=""; public myJGrid(String comment, String txt, int comwidth, int width, int height) { super(comment, txt, comwidth, width, height, true); contextHelp="prop_grid"; carPopup.setDisabled(","+JTextFieldPopup.LATEXMENU+","); } public void doAction(Component e) { if (current.equals(getText())) { return; } current=getText(); if (isValidExpression(current)) { O.setIncrement(ValueOf(current)); } ZC.recompute(); ZC.validate(); ZC.repaint(); } public void doQuitMe(Component e) { if (O==null) { return; } if (!(isValidExpression(getText()))) { JOptionPane.showMessageDialog(null, Loc("error")); current=origin; setText(current); O.setIncrement(ValueOf(current)); ZC.recompute(); ZC.validate(); ZC.repaint(); this.JTF.requestFocus(); } else { origin=getText(); setText(String.valueOf(ValueOf(origin))); } } public void init() { current=String.valueOf(O.getIncrement()); setText(current); origin=current; } } class myJFx extends myJLine { public myJFx(String comment, boolean bool, int width, int height) { super(comment, bool, width, height); } public void doAction(Component e) { if (isSelected()) { O.setFixed(false); X.setText(String.valueOf(O.getX())); Y.setText(String.valueOf(O.getY())); } else { O.setFixed(String.valueOf(O.getX()), String.valueOf(O.getY())); } } public void init() { JCBX.setEnabled(true); setSelected(O.fixed()); } } class myTRK extends myJLine { public myTRK(String comment, boolean bool, int width, int height) { super(comment, bool, width, height); } public void doAction(Component e) { if (isSelected()) { O.setTracked(false); } else { O.setTracked(true); } } public void init() { JCBX.setEnabled(true); setSelected(O.tracked()); } } class myJInside extends myJLine { public myJInside(String comment, boolean bool, int width, int height) { super(comment, bool, width, height); } public void doAction(Component e) { O.setInside(!isSelected()); ZC.recompute(); ZC.validate(); ZC.repaint(); } public void init() { setSelected(O.isInside()); } } class myJTextArea extends ContentLine { JButton carBTN=null; JTextArea JTX; public myJTextArea(String mytxt, int width, int height) { super(width, height); this.setFocusable(false); this.add(margin(5)); JTX=new JTextArea(mytxt); JTX.setFont(F_TextArea); JTX.setBackground(new Color(245, 246, 255)); // JTX.setBorder(BorderFactory.createEtchedBorder()); JTX.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent e) { doAction(e.getComponent()); } }); JTX.addFocusListener(new FocusAdapter() { public void focusGained(FocusEvent e) { // JTX.selectAll(); carBTN.setEnabled(true); } public void focusLost(FocusEvent e) { carBTN.setEnabled(false); doQuitMe(e.getComponent()); } }); JTX.setLineWrap(true); // JScrollPane jstxt=new JScrollPane(JTX); jstxt.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); jstxt.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); // jstxt.setViewportView(JTX); // fixsize(jstxt,PW-11,h); this.add(jstxt); ImageIcon carimg=new ImageIcon(getClass().getResource("/eric/GUI/icons/bar/carbtn.png")); ImageIcon carimg_dis=new ImageIcon(getClass().getResource("/eric/GUI/icons/bar/carbtn_dis.png")); carBTN=new JButton(carimg); carBTN.setDisabledIcon(carimg_dis); // carbtn.setRolloverIcon(closeoverimg); carBTN.setBorder(BorderFactory.createEmptyBorder()); carBTN.setOpaque(false); carBTN.setContentAreaFilled(false); carBTN.setFocusable(false); carBTN.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { doShowPopup(e); } }); carBTN.setEnabled(false); this.add(margin(2)); this.add(carBTN); } public void doShowPopup(MouseEvent e) { if (carBTN.isEnabled()) { JTextFieldPopup mypop=new JTextFieldPopup(JTX); mypop.addPopupMenuListener(new PopupMenuListener() { public void popupMenuWillBecomeVisible(PopupMenuEvent arg0) { } public void popupMenuWillBecomeInvisible(PopupMenuEvent arg0) { doAction(JTX); } public void popupMenuCanceled(PopupMenuEvent arg0) { } }); mypop.openMenu(e); } } public void setText(String txt) { JTX.setText(txt); } public String getText() { return JTX.getText(); } public void doAction(Component cp) { if (O.getText().equals(getText())) { return; } O.setLines(getText()); O.setText(getText(), true); // setText(O.getText()); ZC.recompute(); ZC.validate(); ZC.repaint(); } public void doQuitMe(Component cp) { } public void init() { setText(O.getLines()); } ; } class myJExpression extends myJLine { String origin=""; public myJExpression(String comment, String txt, int comwidth, int width, int height) { super(comment, txt, comwidth, width, height, true); carPopup.setDisabled(","+JTextFieldPopup.LATEXMENU+","); } public void init() { origin=O.getExpression(); if (O.isSlider()) { setText(""); } else { setText(origin); } } public void doAction(Component e) { if (getText().equals("")) { O.setSlider(min.getText(), max.getText()); slider.setSelected(true); try { O.setExpression(min.getText(), O.getConstruction()); } catch (Exception ex) { } } else { try { O.setExpression(getText(), O.getConstruction()); O.setSlider(false); slider.setSelected(false); } catch (Exception ex) { } } ZC.recompute(); ZC.validate(); ZC.repaint(); } public void doQuitMe(Component e) { if (O==null) { return; } if (getText().equals("")) { return; } if (!(isValidExpression(getText()))) { JOptionPane.showMessageDialog(null, Loc("error")); if (!(isValidExpression(origin))) { origin="0"; } setText(origin); try { O.setExpression(origin, O.getConstruction()); } catch (ConstructionException ex) { } this.JTF.requestFocus(); } else { origin=getText(); try { O.setExpression(origin, O.getConstruction()); O.setSlider(false); slider.setSelected(false); } catch (ConstructionException ex) { } } ZC.recompute(); ZC.validate(); ZC.repaint(); } } class myJPrompt extends myJLine { public myJPrompt(String comment, String txt, int comwidth, int width, int height) { super(comment, txt, comwidth, width, height, true); carPopup.setDisabled(","+JTextFieldPopup.FUNCTIONMENU+","); } public void doAction(Component e) { if ((O.getPrompt()!=null)&&(O.getPrompt().equals(getText()))) { return; } O.setPrompt(getText()); O.setShowName(true); show.forceSelect(2); ZC.repaint(); } public void init() { setText(O.getPrompt()); } } class myJSMin extends myJLine { String origin=""; String current=""; public myJSMin(String comment, String txt, int comwidth, int width, int height) { super(comment, txt, comwidth, width, height, true); carPopup.setDisabled(","+JTextFieldPopup.LATEXMENU+","); } public void doAction(Component e) { if (current.equals(getText())) { return; } O.setSlider(getText(), max.getText()); slider.setSelected(true); current=getText(); Exp.setText(""); if (isValidExpression(current)) { try { O.setExpression(current, O.getConstruction()); } catch (ConstructionException ex) { } } ZC.recompute(); ZC.validate(); ZC.repaint(); } public void doQuitMe(Component e) { if (O==null) { return; } if (!(isValidExpression(getText()))) { JOptionPane.showMessageDialog(null, Loc("error")); if (!(isValidExpression(origin))) { origin="0"; } setText(origin); O.setSlider(getText(), max.getText()); try { O.setExpression(origin, O.getConstruction()); } catch (ConstructionException ex) { } // slider.setSelected(true); ZC.recompute(); ZC.validate(); ZC.repaint(); this.JTF.requestFocus(); } else { origin=getText(); current=origin; if (ValueOf(current)>=ValueOf(max.getText())) { String goodmax=String.valueOf(ValueOf(getText())+10); max.setText(goodmax); if (O.isSlider()) { O.setSlider(getText(), goodmax); try { O.setExpression(current, O.getConstruction()); } catch (ConstructionException ex) { } ZC.recompute(); ZC.validate(); ZC.repaint(); } } } } public void init() { if (O.isSlider()) { setText(O.getMin()); } else { setText("-5"); } origin=getText(); } } class myJSMax extends myJLine { String origin=""; String current=""; public myJSMax(String comment, String txt, int comwidth, int width, int height) { super(comment, txt, comwidth, width, height, true); carPopup.setDisabled(","+JTextFieldPopup.LATEXMENU+","); } public void doAction(Component e) { if (current.equals(getText())) { return; } O.setSlider(min.getText(), getText()); slider.setSelected(true); current=getText(); Exp.setText(""); if (isValidExpression(current)) { try { O.setExpression(min.getText(), O.getConstruction()); } catch (ConstructionException ex) { } } ZC.recompute(); ZC.validate(); ZC.repaint(); } public void doQuitMe(Component e) { if (O==null) { return; } if (!(isValidExpression(getText()))) { JOptionPane.showMessageDialog(null, Loc("error")); if (!(isValidExpression(origin))) { origin="0"; } setText(origin); O.setSlider(min.getText(), getText()); slider.setSelected(true); ZC.recompute(); ZC.validate(); ZC.repaint(); this.JTF.requestFocus(); } else { origin=getText(); current=origin; if (ValueOf(current)<=ValueOf(min.getText())) { String goodmin=String.valueOf(ValueOf(getText())-10); O.setSlider(goodmin, getText()); min.setText(goodmin); try { O.setExpression(goodmin, O.getConstruction()); } catch (ConstructionException ex) { } ZC.recompute(); ZC.validate(); ZC.repaint(); } } } public void init() { if (O.isSlider()) { setText(O.getMax()); } else { setText("5"); } origin=getText(); } } class myJSSlider extends myJLine { public myJSSlider(String comment, boolean bool, int width, int height) { super(comment, bool, width, height); } public void doAction(Component e) { if (isSelected()) { O.setSlider(false); Exp.setText(Exp.origin); try { O.setExpression(Exp.origin, O.getConstruction()); } catch (ConstructionException ex) { } Exp.JTF.selectAll(); Exp.JTF.requestFocus(); } else { Exp.setText(""); O.setSlider(min.getText(), max.getText()); try { O.setExpression(min.getText(), O.getConstruction()); } catch (ConstructionException ex) { } min.JTF.selectAll(); min.JTF.requestFocus(); } ZC.recompute(); ZC.validate(); ZC.repaint(); } public void init() { setSelected(O.isSlider()); } } class myJUserFunction extends myRub { JComboBox JCB; ContentLine comboline; UserFunctionObject f; boolean doaction=true; public myJUserFunction(String comment, String txt, int comwidth, int linewidth, int lineheight) { super("user fonction"); comboline=new ContentLine(linewidth, lineheight); comboline.setFocusable(false); addnewlabel(comment, comwidth, lineheight); JCB=new JComboBox(); JCB.setUI((ComboBoxUI) MyComboBoxUI.createUI(JCB)); JCB.setFont(F_ComboBox); JCB.addItem("x"); JCB.addItem("x y"); JCB.addItem("x y z"); JCB.addItem("x y z t"); JCB.setMaximumRowCount(5); JCB.setOpaque(false); JCB.setFocusable(false); JCB.setEditable(false); fixsize(JCB, linewidth-comwidth, lineheight); JCB.addItemListener(new ItemAdapter()); comboline.add(JCB); } class ItemAdapter implements ItemListener { public void itemStateChanged(ItemEvent evt) { if (evt.getStateChange()==ItemEvent.SELECTED) { if (doaction) { String menuitem=(String) evt.getItem(); doAction(menuitem); } ; } } } public void addnewlabel(String comment, int w, int h) { JLabel myTXT=new JLabel(comment); myTXT.setFocusable(false); myTXT.setFont(F_Label); fixsize(myTXT, w, h); comboline.add(myTXT); } public void doAction(Object item) { fuey.setVar((String) item); fuey.JTF.requestFocus(); ZC.recompute(); ZC.validate(); ZC.repaint(); this.validate(); } public void init() { f=(UserFunctionObject) O; this.removeAll(); this.add(margintop(2)); fuey.init(); this.add(fuey); this.add(margintop(fuey.H+1)); this.add(comboline); this.revalidate(); JCB.setSelectedItem(f.getVar()); doaction=true; } } class myJEqXY extends myJLine { String origin=""; String current="0"; EquationXYObject f; public myJEqXY(String comment, String txt, int comwidth, int width, int height) { super(comment, txt, comwidth, width, height, true); remove(carBTN); addnewlabel(" = 0", 35, H); carPopup.setDisabled(","+JTextFieldPopup.LATEXMENU+","); add(carBTN); } public void doAction(Component e) { if (current.equals(getText())) { return; } setEquation(getText()); // if (isValidExpression(current)){ // } } public void setEquation(String cf) { current=cf; f=(EquationXYObject) O; f.setEquation(cf, ZC); ZC.recompute(); ZC.validate(); ZC.repaint(); ZC.reloadCD(); f.compute(); // } } public void doQuitMe(Component e) { if (O==null) { return; } origin=getText(); } public void init() { f=(EquationXYObject) O; current=f.getEY(); setText(current); origin=current; } } class myJUserF_Y extends myJLine { String origin=""; String current="0"; String currentvars="x"; UserFunctionObject f; public myJUserF_Y(String comment, String txt, int comwidth, int width, int height) { super(comment, txt, comwidth, width, height, true); carPopup.setDisabled(","+JTextFieldPopup.LATEXMENU+","); } public void doAction(Component e) { if (current.equals(getText())) { return; } setExpression(currentvars, getText()); // if (isValidExpression(current)){ // } } public void setExpression(String v, String cf) { // if (isValidExpression(cf)){ currentvars=v; current=cf; f=(UserFunctionObject) O; f.setExpressions(currentvars, current); myTXT.setText("f("+currentvars.replaceAll(" ", ",")+")="); ZC.recompute(); ZC.validate(); ZC.repaint(); ZC.reloadCD(); // } } public void setVar(String v) { setExpression(v, current); } public void doQuitMe(Component e) { if (O==null) { return; } origin=getText(); } public void init() { f=(UserFunctionObject) O; current=f.getEY(); currentvars=f.getVar(); setText(current); origin=current; } } // Tells if the function or track must be plot // with points only or segments : class myJF_pt extends myJLine { public myJF_pt(String comment, boolean bool, int width, int height) { super(comment, bool, width, height); } public void doAction(Component e) { O.setSpecial((!isSelected())); ZC.recompute(); ZC.validate(); ZC.repaint(); } public void init() { setSelected(O.isSpecial()); } } class myJF_Discrete extends myJLine { TrackObject t; public myJF_Discrete(String comment, boolean bool, int width, int height) { super(comment, bool, width, height); } public void doAction(Component e) { t.setDiscrete((!isSelected())); ZC.recompute(); ZC.validate(); ZC.repaint(); } public void init() { t=(TrackObject) O; setSelected(t.isDiscrete()); } } class myJF_d extends myJLine { String origin=""; String current=""; FunctionObject f; public myJF_d(String comment, String txt, int comwidth, int width, int height) { super(comment, txt, comwidth, width, height, true); carPopup.setDisabled(","+JTextFieldPopup.LATEXMENU+","); } public void doAction(Component e) { if (current.equals(getText())) { return; } current=getText(); if (current.equals("")) { current="0"; } // if (isValidExpression(current)){ f.setRange(f.VarMin.toString(), f.VarMax.toString(), current); ZC.recompute(); ZC.validate(); ZC.repaint(); // } } public void doQuitMe(Component e) { // origin=getText(); if (O==null) { return; } if (!(isValidExpression(current))) { JOptionPane.showMessageDialog(null, Loc("error")); if (!(isValidExpression(origin))) { origin="0"; } setText(origin); current=origin; f.setRange(f.VarMin.toString(), f.VarMax.toString(), current); ZC.recompute(); ZC.validate(); ZC.repaint(); this.JTF.requestFocus(); } else { origin=current; } } public void init() { f=(FunctionObject) O; current=f.DVar.toString(); if (current.equals("0")) { setText(""); } else { setText(current); } origin=current; } } class myJF_DMin extends myJLine { String origin=""; String current=""; TrackObject t; public myJF_DMin(String comment, String txt, int comwidth, int width, int height) { super(comment, txt, comwidth, width, height); } public void doAction(Component e) { if (current.equals(getText())) { return; } current=getText(); if (isValidExpression(current)) { t.setDMin(ValueOf(current)); } ZC.recompute(); ZC.validate(); ZC.repaint(); } public void doQuitMe(Component e) { if (O==null) { return; } if (!(isValidExpression(getText()))) { JOptionPane.showMessageDialog(null, Loc("error")); current=origin; setText(current); t.setDMin(ValueOf(current)); ZC.recompute(); ZC.validate(); ZC.repaint(); this.JTF.requestFocus(); } else { origin=getText(); setText(String.valueOf(ValueOf(origin))); } } public void init() { t=(TrackObject) O; current=String.valueOf(t.getDMin()); setText(current); origin=current; } } class myJF_Min extends myJLine { String origin=""; String current=""; FunctionObject f; public myJF_Min(String comment, String txt, int comwidth, int width, int height) { super(comment, txt, comwidth, width, height, true); carPopup.setDisabled(","+JTextFieldPopup.LATEXMENU+","); } public void doAction(Component e) { if (current.equals(getText())) { return; } current=getText(); if (current.equals("")) { current="windowcx-windoww"; } f.setRange(current, f.VarMax.toString(), f.DVar.toString()); ZC.recompute(); ZC.validate(); ZC.repaint(); } public void doQuitMe(Component e) { if (O==null) { return; } if (!(isValidExpression(current))) { JOptionPane.showMessageDialog(null, Loc("error")); if (!(isValidExpression(origin))) { origin="0"; } setText(origin); current=origin; f.setRange(current, f.VarMax.toString(), f.DVar.toString()); ZC.recompute(); ZC.validate(); ZC.repaint(); this.JTF.requestFocus(); } else { origin=current; } } public void init() { f=(FunctionObject) O; current=f.VarMin.toString(); if (current.equals("windowcx-windoww")) { setText(""); } else { setText(current); } origin=current; } } class myJF_Max extends myJLine { String origin=""; String current=""; FunctionObject f; public myJF_Max(String comment, String txt, int comwidth, int width, int height) { super(comment, txt, comwidth, width, height, true); carPopup.setDisabled(","+JTextFieldPopup.LATEXMENU+","); } public void doAction(Component e) { if (current.equals(getText())) { return; } current=getText(); if (current.equals("")) { current="windowcx+windoww"; } f.setRange(f.VarMin.toString(), current, f.DVar.toString()); ZC.recompute(); ZC.validate(); ZC.repaint(); } public void doQuitMe(Component e) { if (O==null) { return; } if (!(isValidExpression(current))) { JOptionPane.showMessageDialog(null, Loc("error")); if (!(isValidExpression(origin))) { origin="0"; } setText(origin); current=origin; f.setRange(f.VarMin.toString(), current, f.DVar.toString()); ZC.recompute(); ZC.validate(); ZC.repaint(); this.JTF.requestFocus(); } else { origin=current; } } public void init() { f=(FunctionObject) O; current=f.VarMax.toString(); if (current.equals("windowcx+windoww")) { setText(""); } else { setText(current); } origin=current; } } class myJF_X extends myJLine { String origin=""; String current=""; FunctionObject f; public myJF_X(String comment, String txt, int comwidth, int width, int height) { super(comment, txt, comwidth, width, height, true); carPopup.setDisabled(","+JTextFieldPopup.LATEXMENU+","); } public void doAction(Component e) { if (current.equals(getText())) { return; } current=getText(); // if (isValidExpression(current)){ f.setExpressions(f.Var[0], current, f.getEY()); ZC.recompute(); ZC.validate(); ZC.repaint(); // } } public void doQuitMe(Component e) { if (O==null) { return; } origin=getText(); // if (!(isValidExpression(getText()))) { // JOptionPane.showMessageDialog(null, Loc("error")); // if (!(isValidExpression(origin))) origin="0"; // setText(origin); // current=origin; // this.JTF.requestFocus(); // }else{ // origin=getText(); // } } public void init() { f=(FunctionObject) O; current=f.getEX(); setText(current); origin=current; } } class myJF_Y extends myJLine { String origin=""; String current=""; FunctionObject f; public myJF_Y(String comment, String txt, int comwidth, int width, int height) { super(comment, txt, comwidth, width, height, true); carPopup.setDisabled(","+JTextFieldPopup.LATEXMENU+","); } public void doAction(Component e) { if (current.equals(getText())) { return; } current=getText(); // if (isValidExpression(current)){ f.setExpressions(f.Var[0], f.getEX(), current); ZC.recompute(); ZC.validate(); ZC.repaint(); // } } public void doQuitMe(Component e) { if (O==null) { return; } origin=getText(); // if (!(isValidExpression(getText()))) { // JOptionPane.showMessageDialog(null, Loc("error")); // if (!(isValidExpression(origin))) origin="0"; // setText(origin); // current=origin; // this.JTF.requestFocus(); // }else{ // origin=getText(); // } } public void init() { f=(FunctionObject) O; current=f.getEY(); setText(current); if (func.cartesian) { this.setLabelTxt("f(x)="); } else { this.setLabelTxt("y(t)="); } origin=current; } } class myJFunction extends myRub { myJFunctionselector myJsel; myJFunction ME; FunctionObject f; public boolean cartesian; boolean doaction=true; public myJFunction(String comment, String txt, int comwidth, int linewidth, int lineheight) { super("fonction"); myJsel=new myJFunctionselector(Loc("parametric"), true, linewidth, lineheight); ME=this; } public void init() { f=(FunctionObject) O; cartesian=(f.Var[0].equals(f.getEX())); this.removeAll(); this.add(margintop(2)); doaction=false; // f.setRange("-5","5","0.1"); if (cartesian) { fey.init(); this.add(fey); myJsel.setSelected(false); this.add(margintop(fex.H+2)); } else { fex.init(); fey.init(); this.add(fex); this.add(margintop(1)); this.add(fey); this.add(margintop(1)); myJsel.setSelected(true); } this.add(myJsel); this.revalidate(); this.repaint(); doaction=true; } class myJFunctionselector extends myJLine { public myJFunctionselector(String comment, boolean bool, int width, int height) { super(comment, bool, width, height); } public void doAction(Component e) { ME.removeAll(); ME.add(margintop(2)); cartesian=isSelected(); if (cartesian) { f.setRange("windowcx-windoww", "windowcx+windoww", "0"); f.setExpressions("x", "", "0"); fmin.init(); fmax.init(); fd.init(); fey.init(); ME.add(fey); fey.JTF.requestFocus(); ME.add(margintop(fex.H+2)); } else { f.setRange("-pi", "pi", "0"); f.setExpressions("t", "rsin(t)", "rcos(t)"); fmin.init(); fmax.init(); fd.init(); fex.init(); fey.init(); ME.add(fex); ME.add(margintop(1)); ME.add(fey); ME.add(margintop(1)); fex.JTF.requestFocus(); } ME.add(this); ZC.recompute(); ZC.validate(); ZC.repaint(); ME.revalidate(); ME.repaint(); } } } class myBtn extends JButton { int H, W; public myBtn(String label, int width, int height) { H=height; W=width; this.setText(label); this.setFont(F_Button); fixsize(this, width, height); this.setFocusable(false); this.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { doClick(); } }); } public void doClick() { } } class myMagnetBtn extends myBtn { public myMagnetBtn(int width, int height) { super("", width, height); ImageIcon img=new ImageIcon(getClass().getResource("/eric/GUI/icons/bar/aimant.png")); ImageIcon selimg=new ImageIcon(getClass().getResource("/eric/GUI/icons/bar/aimantON.png")); setIcon(img); setSelectedIcon(selimg); setBorder(BorderFactory.createEtchedBorder()); this.setFocusable(true); } public void init() { // PointObject p = (PointObject) O; // if (p.isPointOn()) { // this.setText(Loc("release")); // } else { // this.setText(Loc("bind")); // } setSelected(false); } public void doClick() { if (!isSelected()) { ZC.magnet((PointObject) O); setSelected(true); } else { setSelected(false); ZC.reset(); } } } class myArcBtn extends myBtn { public myArcBtn(int width, int height) { super("", width, height); } public void init() { PrimitiveCircleObject o=(PrimitiveCircleObject) O; if (o.hasRange()) { this.setText(Loc("killarc")); } else { this.setText(Loc("arc")); } } public void doClick() { PrimitiveCircleObject o=(PrimitiveCircleObject) O; if (o.hasRange()) { o.clearRange(); this.setText(Loc("arc")); } else { ZC.range(o); this.setText(Loc("killarc")); } ZC.validate(); ZC.repaint(); } } class myPtBindBtn extends myBtn { public myPtBindBtn(int width, int height) { super("", width, height); } public void init() { PointObject p=(PointObject) O; if (p.isPointOn()) { this.setText(Loc("release")); } else { this.setText(Loc("bind")); } } public void doClick() { PointObject p=(PointObject) O; if (p.isPointOn()) { p.setBound(""); O.getConstruction().updateCircleDep(); this.setText(Loc("bind")); } else { ZC.bind(p); this.setText(Loc("release")); } ZC.validate(); ZC.repaint(); } } class myPtAwayBtn extends myBtn { public myPtAwayBtn(int width, int height) { super(Loc("setaway"), width, height); } public void doClick() { ZC.setAway((IntersectionObject) O, true); ZC.recompute(); ZC.validate(); ZC.repaint(); } } class myPtCloseBtn extends myBtn { public myPtCloseBtn(int width, int height) { super(Loc("setclose"), width, height); } public void doClick() { ZC.setAway((IntersectionObject) O, false); ZC.recompute(); ZC.validate(); ZC.repaint(); } } class myJIcon extends JButton implements MouseListener { String name; Vector V;// contain 1 elt-> togglebutton , contain more elts-> group member public int code;// boolean isSelected; // icon state boolean isGrouped; boolean isEntered=false; // Mouseover ? private ImageIcon myimage; int iconsize; public void paintComponent(java.awt.Graphics g) { /* I learned things from this pages : http://java.sun.com/developer/technicalArticles/GUI/java2d/java2dpart1.html http://www.apl.jhu.edu/~hall/java/Java2D-Tutorial.html */ super.paintComponent(g); java.awt.Dimension d=this.getSize(); int w=d.width; int h=d.height; Graphics2D g2=(Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); g2.drawImage(myimage.getImage(), 0, 0, w, h, this); if (isSelected) { AlphaComposite ac= AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.2f); g2.setComposite(ac); g2.setColor(new Color(0, 0, 100)); g2.fillRect(1, 1, w-2, h-2); } if (isEntered) { AlphaComposite ac= AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.1f); g2.setComposite(ac); g2.setColor(new Color(0, 0, 80)); Stroke stroke=new BasicStroke(3f); g2.setStroke(stroke); g2.drawRect(2, 2, w-4, h-4); } } // Create an Icon wich belongs to a group // If Vector is null, then it's a simple toggle button public myJIcon(String nm, Vector v, int sze, boolean isgrouped) { name=nm; this.isSelected=false; this.isGrouped=isgrouped; this.V=v; this.iconsize=sze; URL myurl=getClass().getResource("/eric/GUI/icons/bar/"+name+".png"); myimage=new ImageIcon(myurl); // this.setIcon(new ImageIcon(myurl)); this.setOpaque(false); this.setBorder(BorderFactory.createEmptyBorder()); float k=(1.0f*sze)/myimage.getIconWidth(); int w=Math.round(k*myimage.getIconWidth()); int h=Math.round(k*myimage.getIconHeight()); fixsize(this, w, h); this.setContentAreaFilled(false); this.setFocusable(false); this.addMouseListener(this); code=V.size(); V.add(this); } public void setSelected(boolean bool) { isSelected=bool; repaint(); } public boolean isSelected() { return isSelected; } public void select() { if (isGrouped) { for (int i=0; i. */ package eric.bar; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.util.ArrayList; import javax.swing.BoxLayout; import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; import rene.gui.Global; /** * * @author erichake */ public class JTabPanel extends JPanel { /** * */ private static final long serialVersionUID = 1L; JPanel LeftPanel = new JPanel(); JPanel SouthPanel = new JPanel(); JPanel RightPanel = new JPanel(); ArrayList Panes = new ArrayList(); JTabPanelTitleBar JTitle; int Leftmargin = 5;// margin before the tabs int Rightmargin = 35;// margin after the tabs int TabHeight = 18; // tab title line height int TabTitleSize = 11; // Tab title font size int TabTitleMargin = 5; // space before and after the Tab Title @Override public void paintComponent(final Graphics g) { super.paintComponent(g); final ImageIcon myicon = new ImageIcon(getClass().getResource( "gui/panel_back.png")); final java.awt.Dimension d = this.getSize(); g.drawImage(myicon.getImage(), 0, 0, d.width, d.height, this); } public JTabPanel(final int w, final int h) { this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); LeftPanel.setLayout(new BoxLayout(LeftPanel, BoxLayout.Y_AXIS)); RightPanel.setLayout(new BoxLayout(RightPanel, BoxLayout.Y_AXIS)); SouthPanel.setLayout(new BoxLayout(SouthPanel, BoxLayout.X_AXIS)); JTitle = new JTabPanelTitleBar(this); LeftPanel.add(JTitle); LeftPanel.add(SouthPanel); add(LeftPanel); add(RightPanel); RightPanel.setOpaque(false); SouthPanel.setOpaque(false); LeftPanel.setOpaque(false); SouthPanel.setAlignmentX(0.0f); SouthPanel.setAlignmentY(0.0f); fixsize(this, w, h); // this.setBorder(BorderFactory.createLineBorder(new // Color(82,82,82),1)); } public void add(final JComponent cp, final int i) { final JPanel mypane = (JPanel) Panes.get(i); mypane.add(cp); } public void addMain(final JComponent cp) { SouthPanel.add(cp); } public void setMainCenteredContent(final JComponent cp) { final JPanel myjp1 = new JPanel(); myjp1.setOpaque(false); final JPanel myjp2 = new JPanel(); myjp2.setOpaque(false); SouthPanel.add(myjp1); SouthPanel.add(cp); SouthPanel.add(myjp2); } public void clearAll() { SouthPanel.removeAll(); SouthPanel.revalidate(); for (int i = 0; i < Panes.size(); i++) { final JPanel mypane = (JPanel) Panes.get(i); mypane.removeAll(); mypane.revalidate(); } } public void addPanel(final String name) { JTitle.addTabTitle(name); final JPanel mypane = new JPanel(); mypane.setLayout(new BoxLayout(mypane, BoxLayout.X_AXIS)); mypane.setOpaque(false); String str = Global.Loc("props.help"); str = str.replace("
", " "); Panes.add(mypane); JTitle.revalidate(); fixsize(LeftPanel, JTitle.getSize().width, this.getSize().height); fixsize(SouthPanel, JTitle.getSize().width, this.getSize().height - TabHeight); fixsize(RightPanel, this.getSize().width - LeftPanel.getSize().width, this.getSize().height); final JLabel hlp = new JLabel(str); hlp.setOpaque(false); hlp.setFont(new Font("System", 0, 12)); hlp.setHorizontalAlignment(SwingConstants.CENTER); hlp.setVerticalAlignment(SwingConstants.CENTER); fixsize(hlp, 600, RightPanel.getSize().height); hlp.setForeground(new Color(100, 100, 100)); mypane.add(hlp); mypane.revalidate(); } public void selectTab(final int i) { JTitle.selectTabTitle(i); RightPanel.removeAll(); final JPanel mypane = (JPanel) Panes.get(i); fixsize(mypane, RightPanel.getSize().width, RightPanel.getSize().height); RightPanel.add(mypane); RightPanel.revalidate(); RightPanel.repaint(); JTitle.repaint(); Global.setParameter("props.selectedtab", i); } private void fixsize(final JComponent cp, final int w, final int h) { final Dimension d = new Dimension(w, h); cp.setMaximumSize(d); cp.setMinimumSize(d); cp.setPreferredSize(d); cp.setSize(d); } } ./src/eric/bar/.DS_Store0000644000175000017500000001400411362655762013725 0ustar yvesyvesBud1spblobbpguibwspblobbplist00  \WindowBounds[ShowSidebar]ShowStatusBar[ShowPathbar[ShowToolbar\SidebarWidth_{{473, 182}, {1026, 664}}  ".. */ package eric.bar; import eric.JZirkelCanvas; import java.awt.Color; import java.awt.Component; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.ScrollPaneConstants; import javax.swing.event.PopupMenuEvent; import javax.swing.event.PopupMenuListener; import eric.controls.JCanvasButton; import eric.controls.JCanvasPanel; import eric.controls.JCanvasPopup; import eric.controls.JCanvasSlider; import eric.controls.JCanvasTxtfield; import eric.textfieldpopup.JTextFieldPopup; /** * * @author erichake */ public class JControlProperties extends JProperties { /** * */ JCanvasPanel JCP; myJSliderShowTicks jsShowTicks; myJSliderSnapTicks jsSnapTicks; myJSliderMin jsMin; myJSliderMax jsMax; myJSliderTicks jsTicks; myJComment jsComment; myJSliderUnit jsUnit; myJSliderShowComment jsShowcom; myJSliderShowVal jsShowval; myJSliderShowUnit jsShowunit; myJPopupItems jsPopupitems; public JControlProperties(final int w, final int h) { super(w, h); jsShowTicks=new myJSliderShowTicks(Loc("ctrlshowticks"), true, 200, TextFieldHeight); jsSnapTicks=new myJSliderSnapTicks(Loc("ctrlsnap"), true, 200, TextFieldHeight); jsMin=new myJSliderMin("min:", "", 50, 150, TextFieldHeight); jsMax=new myJSliderMax("max:", "", 50, 150, TextFieldHeight); jsTicks=new myJSliderTicks(Loc("ctrltickspacing"), "", 100, 200, TextFieldHeight); jsComment=new myJComment(Loc("expl"), "", 100, 250, TextFieldHeight); jsUnit=new myJSliderUnit(Loc("unit"), "", 100, 250, TextFieldHeight); jsShowcom=new myJSliderShowComment("", true, 18, TextFieldHeight); jsShowval=new myJSliderShowVal(Loc("ctrlshowvalue"), true, 200, TextFieldHeight); jsShowunit=new myJSliderShowUnit("", true, 18, TextFieldHeight); jsPopupitems=new myJPopupItems("", 250, TextFieldHeight*3+2); } public void setObject(final JCanvasPanel jcp) { if (JZirkelCanvas.getCurrentZF()==null) { return; } ZF=JZirkelCanvas.getCurrentZF(); ZC=JZirkelCanvas.getCurrentZC(); JCP=jcp; O=JCP.O; Cn=ZC.getConstruction(); this.clearAll(); addName(); addCommonProps(); addJSliderProps(); addJPopupProps(); addConditionals(); selectTab(1); this.revalidate(); this.repaint(); } private void addName() { final JPanel rubname=new myRub(); name.init(); rubname.add(name); addMain(margin(5)); addMain(rubname); addMain(margin(5)); final JPanel rub=new myRub(); addMain(rub); } private void addCommonProps() { jsComment.init(); jsUnit.init(); jsShowcom.init(); jsShowval.init(); jsShowunit.init(); final ContentLine l1=new ContentLine(); l1.add(jsShowcom); l1.add(jsComment); final ContentLine l2=new ContentLine(); l2.add(jsShowunit); l2.add(jsUnit); final JPanel rub4=new myRub(); rub4.add(margintop(2)); rub4.add(l1); if ((JCP instanceof JCanvasTxtfield)||(JCP instanceof JCanvasButton)) { rub4.add(margintop(jsShowval.H*2+2)); } else { rub4.add(margintop(1)); rub4.add(l2); rub4.add(margintop(1)); rub4.add(jsShowval); } addToNum(rub4); addToNum(new myRubSep()); } private void addJSliderProps() { if (!(JCP instanceof JCanvasSlider)) { return; } jsShowTicks.init(); jsSnapTicks.init(); jsMin.init(); jsMax.init(); jsTicks.init(); final JPanel rub1=new myRub(); rub1.add(margintop(2)); rub1.add(jsTicks); rub1.add(margintop(1)); rub1.add(jsSnapTicks); rub1.add(margintop(1)); rub1.add(jsShowTicks); addToNum(rub1); addToNum(new myRubSep()); final JPanel rub2=new myRub(); rub2.add(margintop(2)); rub2.add(jsMin); rub2.add(margintop(jsMin.H+2)); rub2.add(jsMax); addToNum(rub2); } private void addJPopupProps() { if (!(JCP instanceof JCanvasPopup)) { return; } final JPanel rub2=new myRub(); rub2.add(margintop(2)); jsPopupitems.init(); rub2.add(jsPopupitems); addToNum(rub2); } private void addConditionals() { final JPanel rub=new myRub(); chidden.init(); csuperhidden.init(); rub.add(margintop(1)); rub.add(chidden); rub.add(margintop(2*chidden.H+3)); addToConditional(rub); } // class myJSliderName extends myJLine { // // public myJSliderName(String comment, String txt, int comwidth, int width, // int height) { // super(comment, txt, comwidth, width, height); // this.JTF.setHorizontalAlignment(SwingConstants.CENTER); // // } // // public void doAction(Component e) { // JTextField jtf = (JTextField) e; // if (O.getName().equals(jtf.getText())) { // return; // } // O.setName(jtf.getText()); // O.setShowName(true); // show.forceSelect(2); // Force the ShowName icon to be selected // if (ZC != null) { // ZC.repaint(); // } // } // // public void init() { // setText(O.getName()); // } // } class myJComment extends myJLine { /** * */ public myJComment(final String comment, final String txt, final int comwidth, final int width, final int height) { super(comment, txt, comwidth, width, height, true); carPopup.setDisabled(","+JTextFieldPopup.LATEXMENU+","+JTextFieldPopup.FUNCTIONMENU+","); } @Override public void doAction(final Component e) { JCP.setComment(getText()); } public void init() { setText(JCP.getComment()); } } class myJSliderUnit extends myJLine { /** * */ public myJSliderUnit(final String comment, final String txt, final int comwidth, final int width, final int height) { super(comment, txt, comwidth, width, height, true); carPopup.setDisabled(","+JTextFieldPopup.LATEXMENU+","+JTextFieldPopup.FUNCTIONMENU+","); } @Override public void doAction(final Component e) { JCP.setUnit(getText()); } public void init() { setText(JCP.getUnit()); } } class myJSliderShowComment extends myJLine { /** * */ public myJSliderShowComment(final String comment, final boolean bool, final int width, final int height) { super(comment, bool, width, height); } @Override public void doAction(final Component e) { JCP.setShowComment(!isSelected()); } public void init() { setSelected(JCP.getShowComment()); } } class myJSliderShowVal extends myJLine { /** * */ public myJSliderShowVal(final String comment, final boolean bool, final int width, final int height) { super(comment, bool, width, height); } @Override public void doAction(final Component e) { JCP.setShowVal(!isSelected()); } public void init() { setSelected(JCP.getShowVal()); } } class myJSliderShowUnit extends myJLine { /** * */ public myJSliderShowUnit(final String comment, final boolean bool, final int width, final int height) { super(comment, bool, width, height); } @Override public void doAction(final Component e) { JCP.setShowUnit(!isSelected()); } public void init() { setSelected(JCP.getShowUnit()); } } class myJSliderShowTicks extends myJLine { /** * */ public myJSliderShowTicks(final String comment, final boolean bool, final int width, final int height) { super(comment, bool, width, height); } @Override public void doAction(final Component e) { ((JCanvasSlider) JCP).setShowTicks(!isSelected()); } public void init() { setSelected(((JCanvasSlider) JCP).getShowTicks()); } } class myJSliderSnapTicks extends myJLine { /** * */ public myJSliderSnapTicks(final String comment, final boolean bool, final int width, final int height) { super(comment, bool, width, height); } @Override public void doAction(final Component e) { ((JCanvasSlider) JCP).setSnap(!isSelected()); } public void init() { setSelected(((JCanvasSlider) JCP).getSnap()); } } class myJSliderMin extends myJLine { /** * */ String current; String origin; public myJSliderMin(final String comment, final String txt, final int comwidth, final int width, final int height) { super(comment, txt, comwidth, width, height); } @Override public void doAction(final Component e) { if ((current.equals(getText()))||(!(isValidExpression(getText())))) { return; } current=getText(); } @Override public void doQuitMe(final Component e) { if (!(isValidExpression(getText()))) { JOptionPane.showMessageDialog(null, Loc("error")); ((JCanvasSlider) JCP).setMin(ValueOf(origin)); setText(origin); JTF.requestFocus(); return; } current=getText(); ((JCanvasSlider) JCP).setMin(ValueOf(current)); jsMax.setText(((JCanvasSlider) JCP).getMax()); } public void init() { current=String.valueOf(((JCanvasSlider) JCP).getMin()); origin=current; setText(current); System.out.println(JTF.getText()); } } class myJSliderMax extends myJLine { /** * */ String current; String origin; public myJSliderMax(final String comment, final String txt, final int comwidth, final int width, final int height) { super(comment, txt, comwidth, width, height); } @Override public void doAction(final Component e) { if ((current.equals(getText()))||(!(isValidExpression(getText())))) { return; } current=getText(); } @Override public void doQuitMe(final Component e) { if (!(isValidExpression(getText()))) { JOptionPane.showMessageDialog(null, Loc("error")); ((JCanvasSlider) JCP).setMax(ValueOf(origin)); setText(origin); JTF.requestFocus(); return; } current=getText(); ((JCanvasSlider) JCP).setMax(ValueOf(current)); jsMin.setText(((JCanvasSlider) JCP).getMin()); } public void init() { current=String.valueOf(((JCanvasSlider) JCP).getMax()); origin=current; setText(current); } } class myJSliderTicks extends myJLine { /** * */ String current, origin; public myJSliderTicks(final String comment, final String txt, final int comwidth, final int width, final int height) { super(comment, txt, comwidth, width, height); } @Override public void doAction(final Component e) { if ((current.equals(getText()))||(!(isValidExpression(getText())))) { return; } current=getText(); ((JCanvasSlider) JCP).setTicks(ValueOf(current)); } @Override public void doQuitMe(final Component e) { if (!(isValidExpression(getText()))) { JOptionPane.showMessageDialog(null, Loc("error")); ((JCanvasSlider) JCP).setTicks(ValueOf(origin)); setText(origin); return; } current=getText(); ((JCanvasSlider) JCP).setTicks(ValueOf(current)); } public void init() { current=String.valueOf(((JCanvasSlider) JCP).getTicks()); origin=current; setText(current); } } class txtfieldTemplate extends myJLine { /** * */ public txtfieldTemplate(final String comment, final String txt, final int comwidth, final int width, final int height) { super(comment, txt, comwidth, width, height, true); } @Override public void doAction(final Component e) { } @Override public void doQuitMe(final Component e) { } public void init() { } } class myJPopupItems extends ContentLine { /** * */ JButton carBTN=null; JTextArea JTX; public myJPopupItems(final String mytxt, final int width, final int height) { super(width, height); this.setFocusable(false); this.add(margin(5)); JTX=new JTextArea(mytxt); JTX.setFont(F_TextArea); JTX.setBackground(new Color(245, 246, 255)); // JTX.setBorder(BorderFactory.createEtchedBorder()); JTX.addKeyListener(new KeyAdapter() { @Override public void keyReleased(final KeyEvent e) { doAction(e.getComponent()); } }); JTX.addFocusListener(new FocusAdapter() { @Override public void focusGained(final FocusEvent e) { // JTX.selectAll(); carBTN.setEnabled(true); } @Override public void focusLost(final FocusEvent e) { carBTN.setEnabled(false); doQuitMe(e.getComponent()); } }); JTX.setLineWrap(true); // final JScrollPane jstxt=new JScrollPane(JTX); jstxt.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); jstxt.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); // jstxt.setViewportView(JTX); // fixsize(jstxt,PW-11,h); this.add(jstxt); final ImageIcon carimg=new ImageIcon(getClass().getResource( "/eric/GUI/icons/bar/carbtn.png")); final ImageIcon carimg_dis=new ImageIcon(getClass().getResource( "/eric/GUI/icons/bar/carbtn_dis.png")); carBTN=new JButton(carimg); carBTN.setDisabledIcon(carimg_dis); // carbtn.setRolloverIcon(closeoverimg); carBTN.setBorder(BorderFactory.createEmptyBorder()); carBTN.setOpaque(false); carBTN.setContentAreaFilled(false); carBTN.setFocusable(false); carBTN.addMouseListener(new MouseAdapter() { @Override public void mousePressed(final MouseEvent e) { doShowPopup(e); } }); carBTN.setEnabled(false); this.add(margin(2)); this.add(carBTN); } public void doShowPopup(final MouseEvent e) { if (carBTN.isEnabled()) { final JTextFieldPopup mypop=new JTextFieldPopup(JTX); mypop.setDisabled(","+JTextFieldPopup.LATEXMENU+","+JTextFieldPopup.FUNCTIONMENU+","); mypop.addPopupMenuListener(new PopupMenuListener() { public void popupMenuWillBecomeVisible( final PopupMenuEvent arg0) { } public void popupMenuWillBecomeInvisible( final PopupMenuEvent arg0) { doAction(JTX); } public void popupMenuCanceled(final PopupMenuEvent arg0) { } }); mypop.openMenu(e); } } public void setText(final String txt) { JTX.setText(txt); } public String getText() { return JTX.getText(); } public void doAction(final Component cp) { if (O.getText().equals(getText())) { return; } ((JCanvasPopup) JCP).setItems(getText()); // O.setLines(getText()); // O.setText(getText(), true); // ZC.recompute(); // ZC.validate(); // ZC.repaint(); } public void doQuitMe(final Component cp) { } public void init() { // setText(O.getLines()); setText(((JCanvasPopup) JCP).getItems()); } } } ./src/eric/bar/JTabPanelTitleBar.java0000644000175000017500000001134611302723722016324 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric.bar; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.util.ArrayList; import javax.swing.BoxLayout; import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; import rene.gui.Global; /** * * @author erichake */ public class JTabPanelTitleBar extends JPanel { /** * */ private static final long serialVersionUID = 1L; ArrayList TabTitles = new ArrayList(); JTabPanel Mother; @Override public void paintComponent(final Graphics g) { super.paintComponent(g); final ImageIcon myicon1 = new ImageIcon(getClass().getResource( "gui/titles_back.png")); final ImageIcon myicon2 = new ImageIcon(getClass().getResource( "gui/title_back_end.png")); final java.awt.Dimension d = this.getSize(); g.drawImage(myicon1.getImage(), 0, 0, d.width, d.height, this); g.drawImage(myicon2.getImage(), d.width - d.height, 0, this); } public JTabPanelTitleBar(final JTabPanel parent) { Mother = parent; setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); setAlignmentX(0.0f); setAlignmentY(0.0f); add(margin(Mother.Leftmargin)); add(margin(Mother.Rightmargin)); } public void addTabTitle(final String name) { final int cnt = this.getComponentCount(); final JTabTitle jtt = new JTabTitle(Mother, name); TabTitles.add(jtt); this.add(jtt, cnt - 1); fixsize(this, getLeftWidth(), Mother.TabHeight); } public void selectTabTitle(final int n) { for (int i = 0; i < TabTitles.size(); i++) { ((JTabTitle) TabTitles.get(i)).setSelected(i == n); } } public int getLeftWidth() { int w = Mother.Leftmargin + Mother.Rightmargin; for (int i = 0; i < TabTitles.size(); i++) { final JTabTitle jtt = (JTabTitle) TabTitles.get(i); w += jtt.getSize().width; } return w; } static JPanel margin(final int w) { final JPanel mypan = new JPanel(); fixsize(mypan, w, 1); mypan.setOpaque(false); mypan.setFocusable(false); return mypan; } static void fixsize(final JComponent cp, final int w, final int h) { final Dimension d = new Dimension(w, h); cp.setMaximumSize(d); cp.setMinimumSize(d); cp.setPreferredSize(d); cp.setSize(d); } } class JTabTitle extends JPanel { /** * */ private static final long serialVersionUID = 1L; boolean isActive = false; JTabPanel Mother; int Pos; JLabel JLB = new JLabel(); ImageIcon IcON = new ImageIcon(getClass().getResource("gui/tab_on.png")); ImageIcon IcOFF = new ImageIcon(getClass().getResource("gui/tab_off.png")); @Override public void paintComponent(final Graphics g) { super.paintComponent(g); final ImageIcon icn = (isActive) ? IcON : IcOFF; final java.awt.Dimension d = this.getSize(); g.drawImage(icn.getImage(), 0, 0, d.width, d.height, this); } public JTabTitle(final JTabPanel parent, final String txt) { Mother = parent; Pos = Mother.Panes.size(); setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); setOpaque(false); // JTabPanelTitleBar.fixsize(this,Mother.TabWidth,Mother.TabHeight); JTabPanelTitleBar.fixsize(this, titleWidth(txt) + 2 * Mother.TabTitleMargin, Mother.TabHeight); JLB.setText(txt); JLB.setFont(new Font(Global.GlobalFont, 0, 11)); JLB.setOpaque(false); JLB.setHorizontalAlignment(SwingConstants.CENTER); JLB.setVerticalAlignment(SwingConstants.BOTTOM); JLB.setForeground(new Color(40, 40, 40)); JTabPanelTitleBar.fixsize(JLB, titleWidth(txt) + 2 * Mother.TabTitleMargin, Mother.TabHeight); // JTabPanelTitleBar.fixsize(JLB,Mother.TabWidth,Mother.TabHeight); JLB.addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mousePressed(final java.awt.event.MouseEvent evt) { Mother.selectTab(Pos); Mother.repaint(); } }); this.add(JLB); } private int titleWidth(final String s) { // FontMetrics fm = getFontMetrics(getFont()); final FontMetrics fm = getFontMetrics(new Font(Global.GlobalFont, 0, Mother.TabTitleSize)); return fm.stringWidth(s); } public void setSelected(final boolean b) { isActive = b; } } ./src/eric/JZirkelCanvas.java0000644000175000017500000004054411362774003015045 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric; import eric.macros.MacroTools; import eric.GUI.palette.PaletteManager; import eric.GUI.pipe_tools; import eric.GUI.themes; import eric.GUI.window.comments; import eric.GUI.window.tab_main_panel; import eric.GUI.windowComponent; import eric.macros.MacrosList; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Rectangle; import java.awt.event.MouseAdapter; import java.io.ByteArrayInputStream; import java.io.InputStream; import javax.swing.JOptionPane; import javax.swing.JPanel; import rene.gui.Global; import rene.util.FileName; import rene.util.parser.StringParser; import rene.zirkel.ZirkelCanvas; import rene.zirkel.ZirkelFrame; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionDisplayPanel; import rene.zirkel.dialogs.Replay; import rene.zirkel.objects.PointObject; import sun.swing.SwingUtilities2; /** * * @author erichake */ public class JZirkelCanvas extends JPanel { // private static ArrayList allJZFs=new ArrayList(); private ZirkelFrame ZF=null; private JPointName PointLabel; private Replay Dreplay; private static boolean restrictedsession=false; // For unused figures in workbooks, store the inputstream in a // byte array : private byte[] byteinputfile=null; private static String workbookFileName=null; private static JHelpPanel InfoPanel=new JHelpPanel(); private static MacrosList MacroPanel=null; @Override public void paintComponent(final java.awt.Graphics g) { } /** * */ public JZirkelCanvas() { super(); setLayout(new BorderLayout()); setOpaque(true); ZF=new ZirkelFrame(pipe_tools.isApplet()); ZF.ZC.addMouseListener(new MouseAdapter() { @Override public void mousePressed(final java.awt.event.MouseEvent evt) { if (Global.getParameter("smartboard", false)) { return; } PointLabel.getBetterName(null, true); } @Override public void mouseReleased(final java.awt.event.MouseEvent evt) { if (!Global.getParameter("smartboard", false)) { return; } PointLabel.getBetterName(null, true); } }); add(ZF.ZC); newReplay(); PointLabel=new JPointName(this); PointObject.setPointLabel(PointLabel); MacroTools.setDefaultMacros(ZF.ZC); ZF.ZC.getLocalPreferences(); // allJZFs.add(this); } public void init() { Rectangle r=new Rectangle(0, 0, pipe_tools.getWindowSize().width-themes.getLeftPanelWidth()-themes.getVerticalPanelBorderWidth()-themes.getTotalRightPanelWidth()-2*themes.getVerticalBorderWidth()-themes.getTabLeftBorderWidth()-themes.getTabRightBorderWidth(), pipe_tools.getWindowSize().height-themes.getTitleBarHeight()-themes.getMenuBarHeight()-themes.getMainTabPanelHeight()-themes.getCommentsHeight()-themes.getStatusBarHeight()); setBounds(r); ZF.ZC.setBounds(r); ZF.ZC.initRestrictDialog(); ZF.ZC.initJobCreationDialog(); } public byte[] getByteArrayInputFile() { return byteinputfile; } public void createByteArrayInputFile(InputStream in) { if (byteinputfile==null) { byteinputfile=FileTools.copyToByteArray(in); } } public void setInputFile(InputStream in) { if (in!=null) { createByteArrayInputFile(in); } } public void setInputFile(byte[] in) { byteinputfile=in; } public static void getCurrentLocalPreferences() { if (getCurrentZC()!=null) { getCurrentZC().getLocalPreferences(); } } public void onTabActivate() { if (byteinputfile!=null) { FileTools.openFile("", new ByteArrayInputStream(byteinputfile), false); byteinputfile=null; } ZF.ZC.setLocalPreferences(); PointObject.setPointLabel(PointLabel); ZF.ZC.updateDigits(); ZF.ZC.paint(ZF.ZC.getGraphics()); PaletteManager.refresh(); } public static boolean isWorkBook() { return (workbookFileName!=null); } public static String getWorkBookFileName() { return workbookFileName; } public static String getFileName(){ try{ if (isWorkBook()){ return getWorkBookFileName(); }else{ return getCurrentZF().Filename; } }catch(Exception e){ return null; } } public static void setWorkBookFileName(String s, boolean force) { if ((force)||(workbookFileName==null)) { workbookFileName=s; if (!pipe_tools.isApplet()){ pipe_tools.setTitle(Global.Loc("program.name")+" - "+Global.Loc("workbook.workbookmode")+" : "+FileName.filename(s)); pipe_tools.TabHaveChanged(false); } } } public static boolean isRestrictedSession() { return restrictedsession; } public Replay getReplay() { return Dreplay; } public void disposeReplay() { Dreplay.dispose(); } public void newReplay() { Dreplay=new Replay(null, ZF.ZC); } public JPointName getPointLabel() { return PointLabel; } public ZirkelFrame getZF() { return ZF; } public ZirkelCanvas getZC() { return ZF.ZC; } public static String ToolTip(final String s) { String ToolTipText=""; final String purename=(s.startsWith("bi_"))?s.substring(3):s; try { ToolTipText=Global.Loc("palette.info."+purename); } catch (final Exception e1) { try { ToolTipText=Global.Loc("palette.info."+s); } catch (final Exception e2) { ToolTipText=rene.gui.Global.name("iconhelp."+purename); } } return ToolTipText; } public static String FilteredStatus(final String status) { String newstatus=status; int index; if ((index=status.indexOf("@builtin@/syma"))>0) { newstatus=newstatus.substring(index); newstatus=newstatus.replaceAll("\\Q@builtin@/syma\\E", Global.Loc("palette.info.bi_syma")); } else if ((index=status.indexOf("@builtin@/symc"))>0) { newstatus=newstatus.substring(index); newstatus=newstatus.replaceAll("\\Q@builtin@/symc\\E", Global.Loc("palette.info.bi_symc")); } else if ((index=status.indexOf("@builtin@/trans"))>0) { newstatus=newstatus.substring(index); newstatus=newstatus.replaceAll("\\Q@builtin@/trans\\E", Global.Loc("palette.info.bi_trans")); } else if ((index=status.indexOf("@builtin@/med"))>0) { newstatus=newstatus.substring(index); newstatus=newstatus.replaceAll("\\Q@builtin@/med\\E", Global.Loc("palette.info.bi_med")); } else if ((index=status.indexOf("@builtin@/biss"))>0) { newstatus=newstatus.substring(index); newstatus=newstatus.replaceAll("\\Q@builtin@/biss\\E", Global.Loc("palette.info.bi_biss")); } else if ((index=status.indexOf("@builtin@/circ"))>0) { newstatus=newstatus.substring(index); newstatus=newstatus.replaceAll("\\Q@builtin@/circ\\E", Global.Loc("palette.info.bi_circ")); } else if ((index=status.indexOf("@builtin@/arc"))>0) { newstatus=newstatus.substring(index); newstatus=newstatus.replaceAll("\\Q@builtin@/arc\\E", Global.Loc("palette.info.bi_arc")); } else if ((index=status.indexOf("@builtin@/function_u"))>0) { newstatus=newstatus.substring(index); newstatus=newstatus.replaceAll("\\Q@builtin@/function_u\\E", ToolTip("bi_function_u")); } else if ((index=status.indexOf("@builtin@/t_align"))>0) { newstatus=newstatus.substring(index); newstatus=newstatus.replaceAll("\\Q@builtin@/t_align\\E", Global.Loc("palette.info.bi_t_align")); } else if ((index=status.indexOf("@builtin@/t_para"))>0) { newstatus=newstatus.substring(index); newstatus=newstatus.replaceAll("\\Q@builtin@/t_para\\E", Global.Loc("palette.info.bi_t_para")); } else if ((index=status.indexOf("@builtin@/t_perp"))>0) { newstatus=newstatus.substring(index); newstatus=newstatus.replaceAll("\\Q@builtin@/t_perp\\E", Global.Loc("palette.info.bi_t_perp")); } else if ((index=status.indexOf("@builtin@/t_equi"))>0) { newstatus=newstatus.substring(index); newstatus=newstatus.replaceAll("\\Q@builtin@/t_equi\\E", Global.Loc("palette.info.bi_t_equi")); } else if ((index=status.indexOf("@builtin@/t_app"))>0) { newstatus=newstatus.substring(index); newstatus=newstatus.replaceAll("\\Q@builtin@/t_app\\E", Global.Loc("palette.info.bi_t_app")); } else if ((index=status.indexOf("@builtin@/t_conf"))>0) { newstatus=newstatus.substring(index); newstatus=newstatus.replaceAll("\\Q@builtin@/t_conf\\E", Global.Loc("palette.info.bi_t_conf")); } else if ((index=status.indexOf("@builtin@/3Dcoords"))>0) { newstatus=newstatus.substring(index); newstatus=newstatus.replaceAll("\\Q@builtin@/3Dcoords\\E", Global.Loc("palette.info.bi_3Dcoords")); } else if ((index=status.indexOf("@builtin@/3Dcube"))>0) { newstatus=newstatus.substring(index); newstatus=newstatus.replaceAll("\\Q@builtin@/3Dcube\\E", Global.Loc("palette.info.bi_3Dcube")); } else if ((index=status.indexOf("@builtin@/3Darete"))>0) { newstatus=newstatus.substring(index); newstatus=newstatus.replaceAll("\\Q@builtin@/3Darete\\E", Global.Loc("palette.info.bi_3Darete")); } else if ((index=status.indexOf("@builtin@/3Dtetra"))>0) { newstatus=newstatus.substring(index); newstatus=newstatus.replaceAll("\\Q@builtin@/3Dtetra\\E", Global.Loc("palette.info.bi_3Dtetra")); } else if ((index=status.indexOf("@builtin@/3Ddode"))>0) { newstatus=newstatus.substring(index); newstatus=newstatus.replaceAll("\\Q@builtin@/3Ddode\\E", Global.Loc("palette.info.bi_3Ddode")); } return newstatus; } public static boolean workbookHaveChanged() { boolean changed=false; for (int i=0; i. */ package eric; import java.awt.Dimension; import java.awt.event.ItemEvent; import javax.swing.JComponent; import javax.swing.JPanel; import rene.gui.Global; /** * * @author erichake */ public class JGlobalPreferencesDlog extends javax.swing.JFrame { /** * */ private static final long serialVersionUID = 1L; /** Creates new form JGlobalPreferencesDlog */ public JGlobalPreferencesDlog() { initComponents(); tabs.setTitleAt(0, Loc("sizes")); tabs.setTitleAt(1, Loc("colors")); tabs.setTitleAt(2, Loc("others")); undock.setText(Loc("others.undock")); JGlobalPreferences.savePreferences(); sizes.add(Vspacer(20)); sizes.add(new JGlobalPreferencesCursor("prefs.minpointsize", Loc("sizes.minpointsize"), 1, 9, 3)); sizes.add(new JGlobalPreferencesCursor("prefs.minlinesize", Loc("sizes.minlinesize"), 1, 9, 1)); sizes.add(new JGlobalPreferencesCursor("prefs.arrowsize", Loc("sizes.arrowsize"), 3, 50, 15)); sizes.add(new JGlobalPreferencesCursor("prefs.minfontsize", Loc("sizes.minfontsize"), 1, 64, 12)); sizes.add(Vspacer(20)); sizes.add(new JGlobalPreferencesCursor("prefs.digits.lengths", Loc("sizes.digits.lengths"), 0, 12, 5)); sizes.add(new JGlobalPreferencesCursor("prefs.digits.edit", Loc("sizes.digits.edit"), 0, 12, 5)); sizes.add(new JGlobalPreferencesCursor("prefs.digits.angles", Loc("sizes.digits.angles"), 0, 12, 0)); colors.add(Vspacer(20)); colors.add(new JGlobalPreferencesColor()); undock.setSelected(Global.getParameter("prefs.undockpalette", false)); setVisible(true); } static private String Loc(final String s) { return Global.Loc("menu.special.options." + s); } static private JPanel Vspacer(final int h) { final JPanel mysep = new JPanel(); mysep.setOpaque(false); fixsize(mysep, new Dimension(1, h)); return mysep; } static private void fixsize(final JComponent cp, final Dimension d) { cp.setMaximumSize(d); cp.setMinimumSize(d); cp.setPreferredSize(d); cp.setSize(d); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { tabs = new javax.swing.JTabbedPane(); sizes = new javax.swing.JPanel(); colors = new javax.swing.JPanel(); other = new javax.swing.JPanel(); jPanel2 = new javax.swing.JPanel(); undock = new javax.swing.JCheckBox(); jPanel1 = new javax.swing.JPanel(); jPanel3 = new javax.swing.JPanel(); jButton2 = new javax.swing.JButton(); getContentPane().setLayout( new javax.swing.BoxLayout(getContentPane(), javax.swing.BoxLayout.Y_AXIS)); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("Preferences"); setAlwaysOnTop(true); setResizable(false); addWindowListener(new java.awt.event.WindowAdapter() { @Override public void windowClosed(final java.awt.event.WindowEvent evt) { formWindowClosed(evt); } }); tabs.setMaximumSize(new java.awt.Dimension(330, 360)); tabs.setMinimumSize(new java.awt.Dimension(330, 360)); tabs.setPreferredSize(new java.awt.Dimension(330, 360)); sizes.setLayout(new javax.swing.BoxLayout(sizes, javax.swing.BoxLayout.Y_AXIS)); sizes.setOpaque(false); tabs.addTab("Sizes", sizes); colors.setLayout(new javax.swing.BoxLayout(colors, javax.swing.BoxLayout.Y_AXIS)); colors.setOpaque(false); tabs.addTab("Colors", colors); other.setLayout(new javax.swing.BoxLayout(other, javax.swing.BoxLayout.Y_AXIS)); other.setOpaque(false); jPanel2.setEnabled(false); jPanel2.setFocusable(false); jPanel2.setMaximumSize(new java.awt.Dimension(32767, 20)); jPanel2.setMinimumSize(new java.awt.Dimension(10, 20)); jPanel2.setOpaque(false); jPanel2.setPreferredSize(new java.awt.Dimension(10, 20)); other.add(jPanel2); undock.setText("Accept undocked palette"); undock.setBorder(javax.swing.BorderFactory .createEmptyBorder(0, 0, 0, 0)); undock.setMargin(new java.awt.Insets(0, 0, 0, 0)); undock.setOpaque(false); undock.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(final java.awt.event.ItemEvent evt) { undockItemStateChanged(evt); } }); other.add(undock); tabs.addTab("Other", other); getContentPane().add(tabs); jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.X_AXIS)); jPanel1.setMaximumSize(new java.awt.Dimension(330, 40)); jPanel1.setMinimumSize(new java.awt.Dimension(330, 40)); jPanel1.setPreferredSize(new java.awt.Dimension(330, 40)); jPanel3.setLayout(new javax.swing.BoxLayout(jPanel3, javax.swing.BoxLayout.X_AXIS)); jPanel3.setMaximumSize(new java.awt.Dimension(247, 40)); jPanel3.setMinimumSize(new java.awt.Dimension(247, 40)); jPanel3.setOpaque(false); jPanel3.setPreferredSize(new java.awt.Dimension(247, 40)); jPanel1.add(jPanel3); jButton2.setText("close"); jButton2.setAlignmentX(0.5F); jButton2.setFocusPainted(false); jButton2.setFocusable(false); jButton2.setMaximumSize(new java.awt.Dimension(75, 35)); jButton2.setMinimumSize(new java.awt.Dimension(75, 35)); jButton2.setPreferredSize(new java.awt.Dimension(75, 35)); jButton2.addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mouseClicked(final java.awt.event.MouseEvent evt) { jButton2MouseClicked(evt); } }); jPanel1.add(jButton2); getContentPane().add(jPanel1); final java.awt.Dimension screenSize = java.awt.Toolkit .getDefaultToolkit().getScreenSize(); setBounds((screenSize.width - 330) / 2, (screenSize.height - 422) / 2, 330, 422); }// //GEN-END:initComponents private void undockItemStateChanged(final java.awt.event.ItemEvent evt) {// GEN-FIRST:event_undockItemStateChanged Global.setParameter("prefs.undockpalette", (evt.getStateChange() == ItemEvent.SELECTED)); }// GEN-LAST:event_undockItemStateChanged private void formWindowClosed(final java.awt.event.WindowEvent evt) {// GEN-FIRST:event_formWindowClosed JGlobalPreferences.initPreferences();// TODO add your handling code // here: }// GEN-LAST:event_formWindowClosed private void jButton2MouseClicked(final java.awt.event.MouseEvent evt) {// GEN-FIRST:event_jButton2MouseClicked dispose();// TODO add your handling code here: }// GEN-LAST:event_jButton2MouseClicked /** * @param args * the command line arguments */ public static void main(final String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new JGlobalPreferencesDlog().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel colors; private javax.swing.JButton jButton2; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JPanel other; private javax.swing.JPanel sizes; private javax.swing.JTabbedPane tabs; private javax.swing.JCheckBox undock; // End of variables declaration//GEN-END:variables } ./src/eric/JMacOShandler.java0000644000175000017500000000325511344406100014735 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric; import javax.swing.SwingUtilities; import com.apple.eawt.Application; import com.apple.eawt.ApplicationAdapter; import eric.GUI.pipe_tools; /** * * @author erichake */ public class JMacOShandler extends Application { /** Creates a new instance of JMacOShandler */ public JMacOShandler() { addApplicationListener(new OpenHandler()); } class OpenHandler extends ApplicationAdapter { @Override public void handleOpenFile(final com.apple.eawt.ApplicationEvent evt) { final String filename=evt.getFilename(); if (FileTools.isStartup()) { FileTools.addStartupFile(filename); } else { SwingUtilities.invokeLater(new Runnable() { public void run() { FileTools.open(filename); } }); } } @Override public void handleQuit(final com.apple.eawt.ApplicationEvent e) { pipe_tools.quitAll(); } } } ./src/eric/.cvsignore0000644000175000017500000000001211313421111013437 0ustar yvesyves.DS_Store ./src/eric/JGlobalPreferencesColor.java0000644000175000017500000002251211310111111016777 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric; import eric.GUI.pipe_tools; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Stroke; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.BoxLayout; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; import net.java.dev.colorchooser.ColorChooser; import net.java.dev.colorchooser.Palette; import rene.gui.Global; /** * * @author erichake */ public class JGlobalPreferencesColor extends JPanel implements MouseListener, MouseMotionListener { /** * */ private static final long serialVersionUID = 1L; private final ColorChooser cchooser; private Palette Pal; int PW = 193; int PaletteType; int xx, yy; colorline mycolorpickerline; JGlobalPreferencesColor me; JComboBox JCB; JLabel comment; JPanel colorsample = new JPanel(); @Override public void paintComponent(final java.awt.Graphics g) { super.paintComponent(g); } private void fixsize(final JComponent cp, final Dimension d) { cp.setMaximumSize(d); cp.setMinimumSize(d); cp.setPreferredSize(d); cp.setSize(d); } /** Creates a new instance of JColorPanel */ public JGlobalPreferencesColor() { me = this; xx = -1; yy = -1; PaletteType = Global.getParameter("prefs.colorbackgroundPal", 1); cchooser = new ColorChooser(); // Pal=cchooser.getPalettes()[4]; this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); this.setAlignmentX(0.5f); this.setOpaque(false); this.add(margintop(5)); JCB = new JComboBox(); JCB.setMaximumRowCount(5); JCB.setOpaque(false); JCB.setFocusable(false); JCB.setEditable(false); JCB.setAlignmentX(0.5f); JCB.setFont(new Font("System", 0, 11)); JCB.addItem(Loc("saturated1")); JCB.addItem(Loc("desaturated1")); JCB.addItem(Loc("saturated2")); JCB.addItem(Loc("desaturated2")); JCB.addItem(Loc("constants")); JCB.setSelectedIndex(PaletteType); JCB.addItemListener(new ItemAdapter()); final JPanel JCBpanel = new JPanel(); JCBpanel.setLayout(new BoxLayout(JCBpanel, BoxLayout.X_AXIS)); JCBpanel.setAlignmentX(0.5f); JCBpanel.setOpaque(false); fixsize(JCBpanel, PW, 24); JCBpanel.add(margin(5)); fixsize(JCB, PW - 10, 22); JCBpanel.add(JCB); this.add(JCBpanel); mycolorpickerline = new colorline(PaletteType); this.add(mycolorpickerline); comment = new JLabel("coucou"); comment.setOpaque(false); comment.setAlignmentX(0.5f); comment.setFont(new Font("System", 0, 9)); fixsize(comment, PW, 14); comment.setHorizontalAlignment(SwingConstants.CENTER); this.add(comment); fixsize(colorsample, new Dimension(80, 80)); colorsample.setAlignmentX(0.5f); this.add(colorsample); } public String Loc(final String s) { return Global.Loc("palette.colors." + s); } class ItemAdapter implements ItemListener { public void itemStateChanged(final ItemEvent evt) { if (evt.getStateChange() == ItemEvent.SELECTED) { me.remove(mycolorpickerline); mycolorpickerline = new colorline(JCB.getSelectedIndex()); Global.setParameter("prefs.colorbackgroundPal", JCB .getSelectedIndex()); me.add(mycolorpickerline, 2); // JDialog father=GetDialog(me); // father.validate(); // father.pack(); int x = Global.getParameter("prefs.colorbackgroundx", 154); int y = Global.getParameter("prefs.colorbackgroundy", 5); x = x * Pal.getSize().width / mycolorpickerline.mycolors.getSize().width; y = y * Pal.getSize().height / mycolorpickerline.mycolors.getSize().height; final Color mycolor = Pal.getColorAt(x, y); if (mycolor != null) { Global.setParameter("prefs.colorbackground", mycolor); Global.setParameter("prefs.colorbackgroundx", x); Global.setParameter("prefs.colorbackgroundy", y); } me.repaint(); } } } public JDialog GetDialog(final Component c) { if (c instanceof JDialog || null == c) return c == null ? null : (JDialog) c; return GetDialog(c.getParent()); } class colorline extends JPanel { /** * */ private static final long serialVersionUID = 1L; JPanel mymargin; onlycolors mycolors; colorline(final int ptype) { PaletteType = ptype; Pal = cchooser.getPalettes()[ptype]; this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); this.setAlignmentX(0.5f); mymargin = margin(0); // if (PW>Pal.getSize().width){ // fixsize(mymargin,(PW-Pal.getSize().width)/2,1); // }; this.add(mymargin); mycolors = new onlycolors(ptype); this.add(mycolors); this.setOpaque(false); } } private class onlycolors extends JPanel { /** * */ private static final long serialVersionUID = 1L; Image bimage; @Override public void paintComponent(final java.awt.Graphics g) { super.paintComponent(g); final Dimension d = this.getSize(); final int w = d.width; final int h = d.height; g.drawImage(bimage, 0, 0, w, h, this); final Color mycolor = Global.getParameter("prefs.colorbackground", new Color(231, 238, 255)); cchooser.setColor(mycolor); colorsample.setBackground(mycolor); // ZF.ZC.setBackground(mycolor); // ZF.ZC.repaint(); int x = Global.getParameter("prefs.colorbackgroundx", 154); int y = Global.getParameter("prefs.colorbackgroundy", 5); if (PaletteType == 4) { x = ((int) (x / 12)) * 12 + 6; y = ((int) (y / 12)) * 12 + 6; } final Graphics2D g2 = (Graphics2D) g; // AlphaComposite ac = // AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.5f); // g2.setComposite(ac); g2.setColor(new Color(0, 0, 0)); Stroke stroke = new BasicStroke(1f); g2.setStroke(stroke); g2.drawRect(x - 4, y - 4, 8, 8); stroke = new BasicStroke(1f); g2.setStroke(stroke); g2.setColor(new Color(255, 255, 255)); g2.drawRect(x - 3, y - 3, 6, 6); // g.drawRect(x-5,y-5,10,10); comment.setText(Pal.getNameAt(x, y)); } onlycolors(final int ptype) { final int w = (PW < Pal.getSize().width) ? PW : Pal.getSize().width; fixsize(this, w, Pal.getSize().height); // bimage=JPM.MW.createImage(Pal.getSize().width,Pal.getSize().height); bimage = this.createImage(Pal.getSize().width, Pal.getSize().height); Pal.paintTo(bimage.getGraphics()); this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); this.setAlignmentX(0.5f); this.setOpaque(false); this.addMouseMotionListener(me); this.addMouseListener(me); } // public void changePal(int i){ // // Pal=cchooser.getPalettes()[i]; // int w=(PW mycolorpickerline.mycolors.getSize().width) x = mycolorpickerline.mycolors.getSize().width; if (x < 0) x = 0; if (y > mycolorpickerline.mycolors.getSize().height) y = mycolorpickerline.mycolors.getSize().height; if (y < 0) y = 0; Global.setParameter("prefs.colorbackgroundx", x); Global.setParameter("prefs.colorbackgroundy", y); x = x * Pal.getSize().width / mycolorpickerline.mycolors.getSize().width; y = y * Pal.getSize().height / mycolorpickerline.mycolors.getSize().height; final Color mycolor = Pal.getColorAt(x, y); if (mycolor != null) { Global.setParameter("prefs.colorbackground", mycolor); mycolorpickerline.mycolors.repaint(); } } public void mouseReleased(final MouseEvent e) { xx = -1; yy = -1; } public void mouseEntered(final MouseEvent e) { } public void mouseExited(final MouseEvent e) { } public void mouseDragged(final MouseEvent e) { mousePressed(e); } public void mouseMoved(final MouseEvent e) { } } ./src/eric/OS.java0000644000175000017500000000214211364531001012637 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric; /** * * @author erichake */ public class OS { public static boolean isWindows() { String os=System.getProperty("os.name").toLowerCase(); //windows return (os.contains("win")); } public static boolean isMac() { String os=System.getProperty("os.name").toLowerCase(); //Mac return (os.contains("mac")); } public static boolean isUnix() { String os=System.getProperty("os.name").toLowerCase(); //linux or unix return (os.contains("nix") || os.contains("nux")); } /** * * @param ver : 1 for java 1.1 , 2 for java 1.2 , 3 for java 1.3 etc.... * @return true if java version is older than the one you asked for */ public static boolean isJavaOlderThan(int ver){ String version=System.getProperty("java.version"); for (int i=0;i. */ package eric; import java.awt.Frame; import java.awt.MouseInfo; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import javax.swing.JDialog; import javax.swing.JPanel; import rene.util.MyVector; import rene.zirkel.ZirkelCanvas; import rene.zirkel.objects.ConstructionObject; // JDialog for MODAL popup // It is a "modal" popup for ZirkelCanvas "select" methods. Popup menu appear // in a 1 pixel w/h modal JDialog : it seems it's in ZirkelCanvas, but it's not... // It replaces the René Dialog box which appears when you click on more than one object // It must be modal because it have to interrupt the code, waiting a user choice public class JSelectPopupDialog extends JDialog implements WindowListener { /** * */ private static final long serialVersionUID = 1L; MyVector V; ZirkelCanvas ZC; JPanel Content; ConstructionObject O = null; int WindowEventCount = 0; public JSelectPopupDialog(final Frame parent, final ZirkelCanvas zc, final MyVector v) { super(parent); V = v; ZC = zc; this.setModal(true); setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE); setTitle(""); this.setUndecorated(true); this.addWindowListener(this); final int x = MouseInfo.getPointerInfo().getLocation().x; final int y = MouseInfo.getPointerInfo().getLocation().y; // another Linux patch (I get tired) ! if (OS.isUnix()) { this.setLocation(x - 2, y - 2); this.setSize(4, 4); } else { this.setLocation(x + 2, y + 2); this.setSize(1, 1); } Content = new JPanel(); this.setContentPane(Content); this.setVisible(true); this.toFront(); } public void setConstructionObject(final ConstructionObject o) { O = o; } public ConstructionObject getConstructionObject() { return O; } public void doclose() { setVisible(false); final Thread t = new Thread() { @Override public void run() { dispose(); } }; t.start(); } // In Linux (tested on ubuntu), windowActivated Event seems // to occurs after windowOpened. // In windows and mac OS it's the opposite. // So I display the popup after the last event : public void showPopup() { WindowEventCount++; if (WindowEventCount == 2) { new JSelectPopup(ZC, this, V); } } public void windowOpened(final WindowEvent e) { showPopup(); } public void windowActivated(final WindowEvent e) { showPopup(); } public void windowClosing(final WindowEvent e) { } public void windowClosed(final WindowEvent e) { } public void windowIconified(final WindowEvent e) { } public void windowDeiconified(final WindowEvent e) { } public void windowDeactivated(final WindowEvent e) { } } ./src/eric/JBrowserLauncher.java0000644000175000017500000001145111355564550015557 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric; import java.lang.reflect.Method; public class JBrowserLauncher { final static String[] hex = { "%00", "%01", "%02", "%03", "%04", "%05", "%06", "%07", "%08", "%09", "%0a", "%0b", "%0c", "%0d", "%0e", "%0f", "%10", "%11", "%12", "%13", "%14", "%15", "%16", "%17", "%18", "%19", "%1a", "%1b", "%1c", "%1d", "%1e", "%1f", "%20", "%21", "%22", "%23", "%24", "%25", "%26", "%27", "%28", "%29", "%2a", "%2b", "%2c", "%2d", "%2e", "%2f", "%30", "%31", "%32", "%33", "%34", "%35", "%36", "%37", "%38", "%39", "%3a", "%3b", "%3c", "%3d", "%3e", "%3f", "%40", "%41", "%42", "%43", "%44", "%45", "%46", "%47", "%48", "%49", "%4a", "%4b", "%4c", "%4d", "%4e", "%4f", "%50", "%51", "%52", "%53", "%54", "%55", "%56", "%57", "%58", "%59", "%5a", "%5b", "%5c", "%5d", "%5e", "%5f", "%60", "%61", "%62", "%63", "%64", "%65", "%66", "%67", "%68", "%69", "%6a", "%6b", "%6c", "%6d", "%6e", "%6f", "%70", "%71", "%72", "%73", "%74", "%75", "%76", "%77", "%78", "%79", "%7a", "%7b", "%7c", "%7d", "%7e", "%7f", "%80", "%81", "%82", "%83", "%84", "%85", "%86", "%87", "%88", "%89", "%8a", "%8b", "%8c", "%8d", "%8e", "%8f", "%90", "%91", "%92", "%93", "%94", "%95", "%96", "%97", "%98", "%99", "%9a", "%9b", "%9c", "%9d", "%9e", "%9f", "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%a6", "%a7", "%a8", "%a9", "%aa", "%ab", "%ac", "%ad", "%ae", "%af", "%b0", "%b1", "%b2", "%b3", "%b4", "%b5", "%b6", "%b7", "%b8", "%b9", "%ba", "%bb", "%bc", "%bd", "%be", "%bf", "%c0", "%c1", "%c2", "%c3", "%c4", "%c5", "%c6", "%c7", "%c8", "%c9", "%ca", "%cb", "%cc", "%cd", "%ce", "%cf", "%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7", "%d8", "%d9", "%da", "%db", "%dc", "%dd", "%de", "%df", "%e0", "%e1", "%e2", "%e3", "%e4", "%e5", "%e6", "%e7", "%e8", "%e9", "%ea", "%eb", "%ec", "%ed", "%ee", "%ef", "%f0", "%f1", "%f2", "%f3", "%f4", "%f5", "%f6", "%f7", "%f8", "%f9", "%fa", "%fb", "%fc", "%fd", "%fe", "%ff" }; public static String encode(final String s) { final StringBuffer sbuf = new StringBuffer(); final int len = s.length(); for (int i = 0; i < len; i++) { final int ch = s.charAt(i); if ('A' <= ch && ch <= 'Z') { // 'A'..'Z' sbuf.append((char) ch); } else if ('a' <= ch && ch <= 'z') { // 'a'..'z' sbuf.append((char) ch); } else if ('0' <= ch && ch <= '9') { // '0'..'9' sbuf.append((char) ch); } else if (ch == '-' || ch == '_' // unreserved || ch == '.' || ch == '!' || ch == '~' || ch == '*' || ch == '\'' || ch == '(' || ch == ')' || ch == '/' || ch == ':' || ch == '\\') { sbuf.append((char) ch); } else if (ch <= 0x007f) { // other ASCII sbuf.append(hex[ch]); } else if (ch <= 0x07FF) { // non-ASCII <= 0x7FF sbuf.append(hex[0xc0 | (ch >> 6)]); sbuf.append(hex[0x80 | (ch & 0x3F)]); } else { // 0x7FF < ch <= 0xFFFF sbuf.append(hex[0xe0 | (ch >> 12)]); sbuf.append(hex[0x80 | ((ch >> 6) & 0x3F)]); sbuf.append(hex[0x80 | (ch & 0x3F)]); } } return sbuf.toString(); } public static void openURL(String url) { try { if (OS.isMac()) { final Class fileMgr = Class .forName("com.apple.eio.FileManager"); final Method openURL = fileMgr.getDeclaredMethod("openURL", new Class[] { String.class }); if (!(url.startsWith("http://"))) url = "file://" + encode(url); openURL.invoke(null, new Object[] { url }); } else if (OS.isWindows()) Runtime.getRuntime().exec( "rundll32 url.dll,FileProtocolHandler " + url); else { // assume Unix or Linux final String[] browsers = { "firefox", "opera", "konqueror", "epiphany", "mozilla", "netscape" }; String browser = null; for (int count = 0; count < browsers.length && browser == null; count++) if (Runtime.getRuntime().exec( new String[] { "which", browsers[count] }) .waitFor() == 0) browser = browsers[count]; if (browser == null) throw new Exception("Could not find web browser"); else Runtime.getRuntime().exec(new String[] { browser, url }); } } catch (final Exception e) { } } }./src/eric/Media.java0000644000175000017500000000424611343513362013353 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric; import java.awt.Image; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.ArrayList; import javax.imageio.ImageIO; import rene.util.FileName; /** * * @author erichake */ public class Media { private byte[] imagebytes; private String imagefilename; //short name, with extension and without path private static ArrayList medias=new ArrayList(); private Media(String name, byte[] datas) { imagefilename=name; imagebytes=datas; } private Media(String name, InputStream in) { this(name, FileTools.copyToByteArray(in)); } public String getImageFileName(){ return imagefilename; } public byte[] getImageBytes(){ return imagebytes; } static public ArrayList getMedias(){ return medias; } public static void clearMedias() { medias=null; medias=new ArrayList(); } static public void createMedia(String name, byte[] datas) { medias.add(new Media(name, datas)); } static public void createMedia(String filename) { String shortname=FileName.filename(filename); for (int i=0; i mobiles=new ArrayList(); private ArrayList mobilesCoords=new ArrayList(); private boolean inprogress=false; private static Thread shakeThread=null; public monkey(ZirkelCanvas zc) { ZC=zc; initMobiles(); } public void initMobiles() { mobiles.clear(); mobilesCoords.clear(); Enumeration e=ZC.getConstruction().elements(); while (e.hasMoreElements()) { final ConstructionObject c=(ConstructionObject) e.nextElement(); if (c instanceof PointObject) { PointObject pt=(PointObject) c; if (pt.moveable()&&pt.insidewindow()) { mobiles.add(pt); double[] tab={pt.getX(), pt.getY()}; mobilesCoords.add(tab); } } } } public void reset() { for (int k=25; k>0; k--) { long t0=System.currentTimeMillis(); for (int i=0; i0) { Thread.sleep(time); } } catch (Exception ex) { } } } public void move1step() { for (int i=0; i0) { Thread.sleep(time); } } catch (Exception ex) { } } reset(); shakeThread=null; } }; shakeThread.setPriority(Thread.MIN_PRIORITY); shakeThread.start(); } public void stop() { inprogress=false; } } ./src/eric/jobs/0000755000175000017500000000000011362634656012433 5ustar yvesyves./src/eric/jobs/JobValidPanel.java0000644000175000017500000000540111363140435015734 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.jobs; import eric.GUI.ZDialog.ZButton; import eric.GUI.ZDialog.ZDialog; import eric.GUI.ZDialog.ZLabel; import eric.GUI.ZDialog.ZTools; import java.awt.Component; import java.awt.Font; import java.awt.Graphics; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import rene.gui.Global; /** * * @author erichake */ public class JobValidPanel extends ZDialog { private JobManager MAN; private ZButton validBTN, restoreBTN; private ZLabel label; protected int BWIDTH=180; // Button width public JobValidPanel(JobManager man,int x,int y,int w,int h) { super("", x,y,w,h,false,false); MAN=man; setLayout(null); validBTN=new ZButton(Global.Loc("job.gui.valid")) { @Override public void action() { MAN.validate(); } }; restoreBTN=new ZButton(Global.Loc("job.gui.restore")) { @Override public void action() { MAN.restore(); } }; label=new ZLabel(Global.Loc("job.gui.exercise")); add(label); add(validBTN); add(restoreBTN); increaseFonts(1); fixComponents(); } public void increaseFonts(int size){ for (int i=0;i mobiles=new ArrayList(); private ArrayList mobilesCoords=new ArrayList(); private ArrayList targets, clones; public JobValidation(ZirkelCanvas zc) { ZC=zc; C=ZC.getConstruction(); initMobiles(); targets=ZC.job_getTargets(); } public void initMobiles() { mobiles.clear(); mobilesCoords.clear(); Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject c=(ConstructionObject) e.nextElement(); if (c instanceof PointObject) { PointObject pt=(PointObject) c; if (pt.moveable()&&pt.insidewindow()) { mobiles.add(pt); double[] tab={pt.getX(), pt.getY()}; mobilesCoords.add(tab); } } } } /** * Find every clones of targets object in the whole construction * @return true if everything is fine. return false in case of * error. */ public boolean initClones() { clones=new ArrayList(); for (int i=0; i"; JobMessage.showMessage(message); } public void constructionOk() { reset(); JobMessage.showMessage(ZC.job_getMessageOk()); } public void constructionOkExceptAlignment() { reset(); String message=""+ZC.job_getMessageOk(); message+="
("+Global.Loc("job.gui.alignment")+")"; JobMessage.showMessage(message); } public void justSee() { ZC.paint(ZC.getGraphics()); try { Thread.sleep(200); } catch (InterruptedException ex) { } } public void checkAllsteps() { if (mobiles.size()>0) { // if it's a dynamic exercise : int failed=0; if (!initClones()) { dynamicConstructionFailed(); return; } int progress=0; Progress_Bar.create(Global.Loc("job.gui.progressmessage"), 0, MAX-1); for (int i=0; i0) { dynamicConstructionFailed(failed); return; } if (!checkHorizontalAligment()) { constructionOkExceptAlignment(); return; } constructionOk(); } else { // if it's a static exercise : if (!initClones()||!check1step()) { staticConstructionFailed(); return; } constructionOk(); } } } ./src/eric/jobs/Base64Coder.java0000644000175000017500000002177311361630466015303 0ustar yvesyves// Copyright 2003-2010 Christian d'Heureuse, Inventec Informatik AG, Zurich, Switzerland // www.source-code.biz, www.inventec.ch/chdh // // This module is multi-licensed and may be used under the terms // of any of the following licenses: // // EPL, Eclipse Public License, http://www.eclipse.org/legal // LGPL, GNU Lesser General Public License, http://www.gnu.org/licenses/lgpl.html // AL, Apache License, http://www.apache.org/licenses // BSD, BSD License, http://www.opensource.org/licenses/bsd-license.php // // Please contact the author if you need another license. // This module is provided "as is", without warranties of any kind. package eric.jobs; /** * A Base64 encoder/decoder. * *

* This class is used to encode and decode data in Base64 format as described in RFC 1521. * *

* Project home page: www.source-code.biz/base64coder/java
* Author: Christian d'Heureuse, Inventec Informatik AG, Zurich, Switzerland
* Multi-licensed: EPL / LGPL / AL / BSD. */ public class Base64Coder { // The line separator string of the operating system. private static final String systemLineSeparator = System.getProperty("line.separator"); // Mapping table from 6-bit nibbles to Base64 characters. private static char[] map1 = new char[64]; static { int i=0; for (char c='A'; c<='Z'; c++) map1[i++] = c; for (char c='a'; c<='z'; c++) map1[i++] = c; for (char c='0'; c<='9'; c++) map1[i++] = c; map1[i++] = '+'; map1[i++] = '/'; } // Mapping table from Base64 characters to 6-bit nibbles. private static byte[] map2 = new byte[128]; static { for (int i=0; isun.misc.BASE64Encoder.encodeBuffer(byte[]). * @param in An array containing the data bytes to be encoded. * @return A String containing the Base64 encoded data, broken into lines. */ public static String encodeLines (byte[] in) { return encodeLines(in, 0, in.length, 76, systemLineSeparator); } /** * Encodes a byte array into Base 64 format and breaks the output into lines. * @param in An array containing the data bytes to be encoded. * @param iOff Offset of the first byte in in to be processed. * @param iLen Number of bytes to be processed in in, starting at iOff. * @param lineLen Line length for the output data. Should be a multiple of 4. * @param lineSeparator The line separator to be used to separate the output lines. * @return A String containing the Base64 encoded data, broken into lines. */ public static String encodeLines (byte[] in, int iOff, int iLen, int lineLen, String lineSeparator) { int blockLen = (lineLen*3) / 4; if (blockLen <= 0) throw new IllegalArgumentException(); int lines = (iLen+blockLen-1) / blockLen; int bufLen = ((iLen+2)/3)*4 + lines*lineSeparator.length(); StringBuilder buf = new StringBuilder(bufLen); int ip = 0; while (ip < iLen) { int l = Math.min(iLen-ip, blockLen); buf.append (encode(in, iOff+ip, l)); buf.append (lineSeparator); ip += l; } return buf.toString(); } /** * Encodes a byte array into Base64 format. * No blanks or line breaks are inserted in the output. * @param in An array containing the data bytes to be encoded. * @return A character array containing the Base64 encoded data. */ public static char[] encode (byte[] in) { return encode(in, 0, in.length); } /** * Encodes a byte array into Base64 format. * No blanks or line breaks are inserted in the output. * @param in An array containing the data bytes to be encoded. * @param iLen Number of bytes to process in in. * @return A character array containing the Base64 encoded data. */ public static char[] encode (byte[] in, int iLen) { return encode(in, 0, iLen); } /** * Encodes a byte array into Base64 format. * No blanks or line breaks are inserted in the output. * @param in An array containing the data bytes to be encoded. * @param iOff Offset of the first byte in in to be processed. * @param iLen Number of bytes to process in in, starting at iOff. * @return A character array containing the Base64 encoded data. */ public static char[] encode (byte[] in, int iOff, int iLen) { int oDataLen = (iLen*4+2)/3; // output length without padding int oLen = ((iLen+2)/3)*4; // output length including padding char[] out = new char[oLen]; int ip = iOff; int iEnd = iOff + iLen; int op = 0; while (ip < iEnd) { int i0 = in[ip++] & 0xff; int i1 = ip < iEnd ? in[ip++] & 0xff : 0; int i2 = ip < iEnd ? in[ip++] & 0xff : 0; int o0 = i0 >>> 2; int o1 = ((i0 & 3) << 4) | (i1 >>> 4); int o2 = ((i1 & 0xf) << 2) | (i2 >>> 6); int o3 = i2 & 0x3F; out[op++] = map1[o0]; out[op++] = map1[o1]; out[op] = op < oDataLen ? map1[o2] : '='; op++; out[op] = op < oDataLen ? map1[o3] : '='; op++; } return out; } /** * Decodes a string from Base64 format. * No blanks or line breaks are allowed within the Base64 encoded input data. * @param s A Base64 String to be decoded. * @return A String containing the decoded data. * @throws IllegalArgumentException If the input is not valid Base64 encoded data. */ public static String decodeString (String s) { return new String(decode(s)); } /** * Decodes a byte array from Base64 format and ignores line separators, tabs and blanks. * CR, LF, Tab and Space characters are ignored in the input data. * This method is compatible with sun.misc.BASE64Decoder.decodeBuffer(String). * @param s A Base64 String to be decoded. * @return An array containing the decoded data bytes. * @throws IllegalArgumentException If the input is not valid Base64 encoded data. */ public static byte[] decodeLines (String s) { char[] buf = new char[s.length()]; int p = 0; for (int ip = 0; ip < s.length(); ip++) { char c = s.charAt(ip); if (c != ' ' && c != '\r' && c != '\n' && c != '\t') buf[p++] = c; } return decode(buf, 0, p); } /** * Decodes a byte array from Base64 format. * No blanks or line breaks are allowed within the Base64 encoded input data. * @param s A Base64 String to be decoded. * @return An array containing the decoded data bytes. * @throws IllegalArgumentException If the input is not valid Base64 encoded data. */ public static byte[] decode (String s) { return decode(s.toCharArray()); } /** * Decodes a byte array from Base64 format. * No blanks or line breaks are allowed within the Base64 encoded input data. * @param in A character array containing the Base64 encoded data. * @return An array containing the decoded data bytes. * @throws IllegalArgumentException If the input is not valid Base64 encoded data. */ public static byte[] decode (char[] in) { return decode(in, 0, in.length); } /** * Decodes a byte array from Base64 format. * No blanks or line breaks are allowed within the Base64 encoded input data. * @param in A character array containing the Base64 encoded data. * @param iOff Offset of the first character in in to be processed. * @param iLen Number of characters to process in in, starting at iOff. * @return An array containing the decoded data bytes. * @throws IllegalArgumentException If the input is not valid Base64 encoded data. */ public static byte[] decode (char[] in, int iOff, int iLen) { if (iLen%4 != 0) throw new IllegalArgumentException ("Length of Base64 encoded input string is not a multiple of 4."); while (iLen > 0 && in[iOff+iLen-1] == '=') iLen--; int oLen = (iLen*3) / 4; byte[] out = new byte[oLen]; int ip = iOff; int iEnd = iOff + iLen; int op = 0; while (ip < iEnd) { int i0 = in[ip++]; int i1 = in[ip++]; int i2 = ip < iEnd ? in[ip++] : 'A'; int i3 = ip < iEnd ? in[ip++] : 'A'; if (i0 > 127 || i1 > 127 || i2 > 127 || i3 > 127) throw new IllegalArgumentException ("Illegal character in Base64 encoded data."); int b0 = map2[i0]; int b1 = map2[i1]; int b2 = map2[i2]; int b3 = map2[i3]; if (b0 < 0 || b1 < 0 || b2 < 0 || b3 < 0) throw new IllegalArgumentException ("Illegal character in Base64 encoded data."); int o0 = ( b0 <<2) | (b1>>>4); int o1 = ((b1 & 0xf)<<4) | (b2>>>2); int o2 = ((b2 & 3)<<6) | b3; out[op++] = (byte)o0; if (op"+m+"", w, h)); } } private static JPanel getPanel(String m, int w, int h) { JPanel jp=new JPanel(); jp.setLayout(new BoxLayout(jp, BoxLayout.X_AXIS)); jp.setOpaque(false); JLabel label=new JLabel(m); jp.add(label); fixsize(jp, w, h); return jp; } private static void fixsize(JComponent jc, int w, int h) { Dimension d=new Dimension(w, h); jc.setSize(d); jc.setMaximumSize(d); jc.setMinimumSize(d); jc.setPreferredSize(d); } } ./src/eric/jobs/JobManager.java0000644000175000017500000002124711364767050015306 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.jobs; import eric.FileTools; import eric.GUI.palette.PaletteManager; import eric.GUI.pipe_tools; import java.util.ArrayList; import java.util.Enumeration; import rene.gui.Global; import rene.util.xml.XmlWriter; import rene.zirkel.ZirkelCanvas; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.tools.DefineJobTool; /** * * @author erichake */ public class JobManager { ZirkelCanvas ZC; private String target_names=null; // Only for loading process... private ArrayList targets=new ArrayList(); private String backup=null; private String message_ok=Global.getParameter("job.message.ok", Global.Loc("job.message.ok")); private String message_failed=Global.getParameter("job.message.failed", Global.Loc("job.message.failed")); private boolean hidefinals=false; private JobControlPanel controlPanel=null; private JobValidPanel validPanel=null; private boolean printExerciseArguments=true; private int ctrlX=3,ctrlY=3,ctrlW=374,ctrlH=133; private int validX,validY,validW=550,validH=36; public JobManager(ZirkelCanvas zc) { ZC=zc; } public void backup() { try { printExerciseArguments=false; // protect from recursively get Exercise arguments String file=FileTools.getCurrentFileSource(); printExerciseArguments=true; // Compress the byte representation of the file : byte[] b=StringCompressionUtils.Compress(file.getBytes()); // then save it into base64 format : backup=new String(Base64Coder.encode(b)); } catch (Exception ex) { System.out.println("backup error"); } } public void restore() { if (backup!=null) { try { String targets_backup=getTargetNames(); // decode the base64 representation of the compressed file : byte[] b=Base64Coder.decode(backup); // decompress the file : byte[] b1=StringCompressionUtils.Decompress(b); // restore the construction : FileTools.setCurrentFileSource(new String(b1)); setTargets(targets_backup); setTargetsColor(true); setHiddenToSuperHidden(); } catch (Exception ex) { } } } public ArrayList getTargets() { return targets; } public String getTargetNames() { String names=""; for (int i=0; i0)&&(printExerciseArguments)) { xml.startTagStart("Exercise"); xml.printArg("message_ok", message_ok); xml.printArg("message_failed", message_failed); xml.printArg("hidefinals", String.valueOf(hidefinals)); xml.printArg("targets", getTargetNames()); xml.printArg("backup", backup); xml.finishTagNewLine(); } } /******************************* * GUI PART : *******************************/ public void init() { if (controlPanel!=null) { controlPanel.init(); } else if (validPanel!=null) { validPanel.init(ZC.getSize().width, ZC.getSize().height); } } public void addControlPanel() { removeControlPanel(); controlPanel=new JobControlPanel(this,ctrlX,ctrlY,ctrlW,ctrlH); ZC.add(controlPanel,0); ZC.repaint(); init(); } public void removeControlPanel() { if (controlPanel!=null) { ctrlX=controlPanel.getLocation().x; ctrlY=controlPanel.getLocation().y; ZC.remove(controlPanel); controlPanel=null; ZC.repaint(); } } public void addValidPanel() { removeValidPanel(); if (targets.size()>0) { validPanel=new JobValidPanel(this,0,0,validW,validH); ZC.add(validPanel,0); ZC.repaint(); init(); } } public void removeValidPanel() { if (validPanel!=null) { ZC.remove(validPanel); validPanel=null; ZC.repaint(); } } public void cancelControlDialog(){ hideControlDialog(false); } public void hideControlDialog(boolean createJob) { setTargetSelected(false); removeControlPanel(); pipe_tools.getContent().requestFocus(); if (createJob&&targets.size()>0) { backup(); addValidPanel(); setHiddenToSuperHidden(); } else { targets.clear(); backup=null; setSuperHiddenToHidden(); } setTargetsColor(true); PaletteManager.ClicOn("point"); } public void showControlDialog() { removeValidPanel(); restore(); setTargetsColor(false); setSuperHiddenToHidden(); addControlPanel(); setTargetsField(); setJobTool(); } public void setJobTool() { setTargetSelected(true); PaletteManager.deselectgeomgroup(); ZC.setTool(new DefineJobTool()); } public void setTargetsField() { if (controlPanel!=null) { controlPanel.setTargetslist(getTargetNames()); } } public void validate() { JobValidation v=new JobValidation(ZC); v.checkAllsteps(); } } ./src/eric/JSprogram/0000755000175000017500000000000011360546073013373 5ustar yvesyves./src/eric/JSprogram/JSBlankIcon.java0000644000175000017500000000127611337712567016350 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.JSprogram; import java.awt.Dimension; import javax.swing.BorderFactory; import javax.swing.JButton; /** * * @author erichake */ public class JSBlankIcon extends JButton{ public JSBlankIcon(int size) { this.setBorder(BorderFactory.createEmptyBorder()); fixsize(size); this.setContentAreaFilled(false); this.setOpaque(false); } private void fixsize(final int sze) { final Dimension d=new Dimension(sze, sze); this.setMaximumSize(d); this.setMinimumSize(d); this.setPreferredSize(d); this.setSize(d); } } ./src/eric/JSprogram/JSRun.java0000644000175000017500000017002611364072133015240 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.JSprogram; import eric.*; import eric.GUI.palette.PaletteManager; import java.awt.Color; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.ArrayList; import java.util.Vector; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; import javax.swing.filechooser.FileFilter; import org.mozilla.javascript.Context; import org.mozilla.javascript.RhinoException; import org.mozilla.javascript.Scriptable; import org.mozilla.javascript.ScriptableObject; import rene.gui.Global; import rene.util.FileName; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.expression.Expression; import rene.zirkel.objects.AreaObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.FunctionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.SegmentObject; /** * * @author erichake */ public class JSRun { static Context cx = null; static ScriptableObject scope = null; static Construction C = null; static ZirkelCanvas ZC = null; static String CTOOL = ""; static String CBACKUP = ""; static String FILENAME = ""; static ArrayList BACKUPS = new ArrayList(); // static String[] cmdnames={"P","M"}; static String[] allnames = {"cm", "Input", "Prompt", "Print", "Println", "Shownames", "Hidenames", "Hide", "Show", "Point", "Intersection", "Intersection2", "MidPoint", "Symmetry", "Line", "Segment", "Circle", "Parallel", "Perpendicular", "FixedCircle", "Move", "X", "Y", "GetExpressionValue", "Ray", "Angle", "Polygon", "Quadric", "CartesianFunction", "ParametricFunction", "SetColor", "SetThickness", "SetFixed", "Vector", "SetRGBColor", "SetShowName", "SetShowValue", "SetFilled", "SetPartial", "Expression", "SetAlias", "SetMagneticObjects", "AddMagneticObject", "SetMagneticRay", "SetPointType", "InteractiveInput", "FixedSegment", "SetHide", "Pause", "Delete", "SetExpressionValue", "Reflection", "Translation", "PerpendicularBisector", "AngleBisector", "Circle3pts", "Arc3pts", "FixedAngle", "Circle3", "ExecuteMacro", "Alert", "Conditional", "Layer"}; static JSOuputConsole console = null; static public boolean busy = false; static public Thread JST = null; static JSConsole JSC = null; // static public ConstructionObject O=null; // static public Thread t=null; static public String[] getKeywords() { return allnames; } static public void deselect() { if (ZC != null) { ZC.clearSelected(); PaletteManager.ClicOn(CTOOL); } } static public void init() { ZC = JZirkelCanvas.getCurrentZC(); } static public void InitBeforeRun() { cx = Context.enter(); // cx.setOptimizationLevel(-1); // cx.setLanguageVersion(Context.VERSION_1_7); scope = cx.initStandardObjects(); scope.defineFunctionProperties(allnames, JSRun.class, ScriptableObject.DONTENUM); //Object wrappedOut = Context.javaToJS(System.out, scope); //ScriptableObject.putProperty(scope, "out", wrappedOut); // Création d'une classe accessible en javascript, qui correspond // à celle de la classe java : Const bb = new Const(); Object wrappedOut2 = Context.javaToJS(bb, scope); ScriptableObject.putProperty(scope, "Const", wrappedOut2); CTOOL = PaletteManager.geomSelectedIcon(); ZC = JZirkelCanvas.getCurrentZC(); C = ZC.getConstruction(); // try to backup the whole xml construction : // backup(); try { console = new JSOuputConsole(); } catch (Exception ex) { } } static public void clear() { deselect(); cx = null; scope = null; C = null; ZC = null; CTOOL = ""; console = null; JST = null; // CBACKUP=""; BACKUPS.clear(); busy = false; Global.setJSquit(false); Global.setJSO(null); } static public void cancelThread() { if (JST != null) { JST.interrupt(); } JST = null; } static public void backup() { try { BACKUPS.add(FileTools.getCurrentFileSource()); } catch (Exception ex) { } } static public boolean isBackup() { return (BACKUPS.size() > 0); } static public void restore() { cancelThread(); if (BACKUPS.size() > 0) { C.clear(); try { FileTools.setCurrentFileSource(BACKUPS.get(BACKUPS.size() - 1)); } catch (final Exception e) { } BACKUPS.remove(BACKUPS.size() - 1); if (JSC != null) { JSC.setBackBtnEnabled(BACKUPS.size() > 0); } } } static public void openEditor() { if (JSC == null) { JSC = new JSConsole(); } else { JSC.toFront(); } } static public void closeEditor() { if (JSC != null) { if (JSC.cancelSaveChanges()) { return; } JSRun.clear(); JSC.dispose(); } } // static public void closeEditor() { // if (JSC==null) { // JSC=new JSConsole(); // } else { // JSC.toFront(); // } // } static public void newScriptInConstruction() { openEditor(); JSC.selectScriptInfileChk(true); saveScriptInConstruction(); } static public void saveScript(final String script, final boolean forcedlog) { Writer output = null; File file = null; String myFileName = null; if ((JSC.isFileOpened()) && (!forcedlog)) { myFileName = JSC.getFileName(); } else { myFileName = FileTools.getSaveFile(); } if (myFileName == null) { return; } myFileName += (myFileName.toLowerCase().endsWith(".js")) ? "" : ".js"; file = new File(myFileName); try { output = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF8")); output.write(script); output.close(); JSC.setTextAreaChanged(false); JGeneralMenuBar.s_InitJSMenu(); JSC.setWindowTitle(myFileName); JSC.setFileName(myFileName); } catch (Exception ex) { Logger.getLogger(JSRun.class.getName()).log(Level.SEVERE, null, ex); } } static public void runScript(final String script) { JST = new Thread() { public void run() { InitBeforeRun(); backup(); if (JSC != null) { JSC.setBackBtnEnabled(true); } Global.setJSquit(false); busy = true; try { cx.evaluateString(scope, script, "", 0, null); } catch (RhinoException e) { // System.out.println("syntaxic bug :"); if (JSC != null) { JSC.Error(e.getMessage()); } else { openEditor(); JSC.setScriptArea(script); JSC.setWindowTitle(FILENAME); JSC.setTextAreaChanged(false); JSC.Error(e.getMessage()); } restore(); } finally { if (cx != null) { cx.exit(); } } if (JSC != null) { JSC.setAlwaysOnTop(true); } deselect(); C.dovalidate(); ZC.paint(ZC.getGraphics()); busy = false; if (JSC != null) { SwingUtilities.invokeLater(new Runnable() { public void run() { JSC.setAlwaysOnTop(false); } }); } } }; JST.setPriority(Thread.MIN_PRIORITY); JST.start(); } public static String getScriptsFolder() { String name = ""; final JFileChooser jfc = new JFileChooser(Global.getOpenSaveDirectory()); jfc.addChoosableFileFilter(new FileFilter() { @Override public boolean accept(File f) { if (f.isDirectory()) { return true; } if (f.getAbsolutePath().toLowerCase().endsWith(".js")) { return true; } return false; } @Override public String getDescription() { return ""; } }); jfc.setDialogType(javax.swing.JFileChooser.OPEN_DIALOG); jfc.setFileSelectionMode(javax.swing.JFileChooser.DIRECTORIES_ONLY); jfc.setApproveButtonText(Global.Loc("JSeditor.opendfavfolder")); int rep = jfc.showOpenDialog(null); if (rep == JFileChooser.APPROVE_OPTION) { name = jfc.getSelectedFile().getAbsolutePath(); Global.setOpenSaveDirectory(name); Global.setParameter("scriptfolder", name); } else { name = ""; } return name; } static public void removeScriptFromConstruction() { if (!JSC.getScriptName().equals("")) { ZirkelCanvas zc = JZirkelCanvas.getCurrentZC(); if (zc != null) { zc.removeScript(JSC.getScriptName()); } JSC.setScriptName(""); if (JSC.getFileName().equals("")) { JSC.setWindowTitle(Global.Loc("JSeditor.title")); } } } static public void saveScriptInConstruction() { if (JSC.getScriptName().equals("")) { if (JSC.getFileName().equals("")) { String s = (String) JOptionPane.showInputDialog( JSC, Global.Loc("JSeditor.saveinfig.question"), Global.Loc("JSeditor.saveinfig.title"), JOptionPane.PLAIN_MESSAGE, null, null, ""); if ((s != null) && (s.length() > 0)) { s = uniqueScriptName(s); JSC.setWindowTitle(Global.Loc("JSeditor.infig") + s); JSC.setScriptName(s); } } else { String s = FileName.filename(JSC.getFileName()); s = s.replaceAll("\\Q.js\\E$", ""); s = s.replaceAll("\\Q.JS\\E$", ""); JSC.setScriptName(s); } } ZirkelCanvas zc = JZirkelCanvas.getCurrentZC(); if (zc != null) { zc.saveScript(JSC.getScriptName(), JSC.getScript()); } } public static boolean unique(String s, Vector V) { boolean unique = true; for (int i = 0; i < V.size(); i++) { if (s.equals(V.get(i).getScriptName())) { unique = false; } } return unique; } public static String uniqueScriptName(String base) { ZirkelCanvas zc = JZirkelCanvas.getCurrentZC(); if (zc == null) { return base; } Vector V = zc.getScripts(); if (!unique(base, V)) { int num = 0; do { num++; base = base.replaceAll("[\\s0-9]+$", "") + " " + num; } while (!unique(base, V)); } return base; } static public void openEmbeddedScript(String name, String source) { openEditor(); JSC.setScriptArea(source); JSC.setWindowTitle(Global.Loc("JSeditor.infig") + name); JSC.setScriptName(name); JSC.selectScriptInfileChk(true); JSC.setTextAreaChanged(false); } static public void openScriptFile(final String Filename, final boolean forceeditor) { closeEditor(); String myscript = ""; if (Filename.equals("")) { myscript = FileTools.getOpenFile(); } else { myscript = Filename; } String str = ""; String mystr = ""; try { InputStream input = new FileInputStream(myscript); BufferedReader in = new BufferedReader(new InputStreamReader(input, "UTF-8")); while ((str = in.readLine()) != null) { str = str.trim(); mystr += str + "\n"; } } catch (Exception ex) { // System.out.println("bug !"); FILENAME = ""; return; } FILENAME = myscript; if ((!forceeditor) && (Global.getParameter("jsdumb", false))) { init(); runScript(mystr); } else { openEditor(); JSC.setScriptArea(mystr); JSC.setWindowTitle(FILENAME); JSC.setFileName(FILENAME); JSC.setTextAreaChanged(false); JSC.selectScriptInfileChk(false); } } private static void refreshZC() { if (C != null) { C.dovalidate(); ZC.paint(ZC.getGraphics()); } } private static String parseVariables(String s) { String origin = ""; String endtxt = s.replaceAll("([0-9]+)e([0-9]+)", "$1E$2"); do { origin = endtxt; StringBuffer sb1 = new StringBuffer(); Pattern pxy = Pattern.compile("(x|y)_(\\w*)", Pattern.CASE_INSENSITIVE); Matcher m = pxy.matcher(origin); while (m.find()) { Object x = scope.get(m.group(2), scope); if (x != Scriptable.NOT_FOUND) { m.appendReplacement(sb1, m.group(1) + "(" + Context.toString(x) + ")"); } } m.appendTail(sb1); m.reset(); StringBuffer sb2 = new StringBuffer(); Pattern pexp = Pattern.compile("_(\\w*)", Pattern.CASE_INSENSITIVE); m = pexp.matcher(sb1.toString()); while (m.find()) { Object x = scope.get(m.group(1), scope); if (x != Scriptable.NOT_FOUND) { m.appendReplacement(sb2, Context.toString(x)); } } m.appendTail(sb2); m.reset(); endtxt = sb2.toString(); } while (!(origin.equals(endtxt))); return endtxt; } static public String Loc(final String s) { return Global.Loc("JSerror." + s); } static public String LastObjectName() { if (C.last() != null) { return C.last().getName(); } else { return ""; } } static public void NormalizeLast() { ConstructionObject o = C.last(); if (o != null) { o.setColorType(ConstructionObject.NORMAL); o.setShowName(false); o.setShowValue(false); o.setFilled(false); o.setPartial(false); } } /** * Pause in milliseconds * @param pause time, in milliseconds */ static public void Pause(int millis) { try { Thread.sleep(millis); } catch (InterruptedException e) { e.printStackTrace(); } } /** * Print a string in a console. Print calls won't generate carriage return * at the end of the output. If the console is not visible, it will be * bring to front automatically. * @param a String to be displayed */ static public void Print(String a) { if (!console.isVisible()) { console.setVisible(true); } console.print(parseVariables(a)); } /** * Print a string in a console. Println calls will generate carriage return * at the end of the output. If the console is not visible, it will be * bring to front automatically. * @param a String to be displayed */ static public void Println(String a) { if (!console.isVisible()) { console.setVisible(true); } console.println(parseVariables(a)); } /** * Ask and wait for a data input. This will bring a modal dialog to front * and the script will be interrupted until the user presses the ok button. * @param msg Question to ask the user * @return String which was typed in the box (typically : answer to the question) */ static public Object Input(String msg) { Object s = JOptionPane.showInputDialog( JZirkelCanvas.getCurrentZC(), msg, "Input dialog", JOptionPane.QUESTION_MESSAGE, null, null, // c'est ouvert !!! ""); // valeur initiale return s; } /** * This will stop the script execution until the user shows an object of * a given type in the current CaRMetal window. The message msg will be * displayed in the status bar (bottom of the window) and the name of the * object you clicked on will be return. If the user selects a tool in the * palette, the script execution will ends. * @param msg Message to be displayed in the status bar * @param type Type of the object. This can be : Point, Line, * Segment, Circle and Expression * @return Name of the selected object */ static public Object InteractiveInput(String msg, String type) throws Exception { Global.setJSO(null); Global.setJSquit(false); ZC.setJSTool(msg, type); while (Global.getJSO() == null) { if (Global.getJSquit()) { // cx.exit(); // clear(); // return null; throw new Exception(Loc("interactiveinput")); } } return Global.getJSO().getName(); } /** * Shows an alert message. This will stop the * script execution until the user presses on the ok button. * @param msg Message to be displayed */ static public void Prompt(String msg) { JOptionPane.showMessageDialog( JZirkelCanvas.getCurrentZC(), parseVariables(msg), "Prompt dialog", JOptionPane.WARNING_MESSAGE); } /** * Shows an alert message. This will stop the * script execution until the user presses on the ok button. * @param msg Message to be displayed */ static public void Alert(String msg) { JOptionPane.showMessageDialog( JZirkelCanvas.getCurrentZC(), parseVariables(msg), "Prompt dialog", JOptionPane.WARNING_MESSAGE); } static public void c(String a) { ZC.JSsend(a); } static public String cm(String a) { ZC.JSsend(a); return LastObjectName(); } /** * Moves a given object to an (x;y) position in the current CaRMetal window. * @param name Name of the object you want to move. * @param i x-coordinate * @param j y-coordinate */ static public void Move(String name, String i, String j) throws Exception { ConstructionObject o = C.find(name); if (o == null) { throw new Exception(Loc("notfound")); } if (!(o instanceof PointObject)) { throw new Exception(Loc("notgoodtype")); } try { double x = Math.round(Double.valueOf(parseVariables(i)) * 1E13) / 1E13; double y = Math.round(Double.valueOf(parseVariables(j)) * 1E13) / 1E13; o.move(x, y); } catch (Exception e) { Expression expX = new Expression(parseVariables(i), o.getConstruction(), o); Expression expY = new Expression(parseVariables(j), o.getConstruction(), o); o.move(expX.getValue(), expY.getValue()); } C.dovalidate(); ZC.paint(ZC.getGraphics()); } /** * Delete a given object in the current CaRMetal window. * @param name Name of the object you want to delete. */ static public void Delete(String name) throws Exception { ConstructionObject o = C.find(name); if (o == null) { throw new Exception(Loc("notfound")); } ZC.delete(o); } // ******************************************************* // Méthode retournant des informations sur les objets : // ******************************************************* /** * Returns the value of a given expression which is in the construction. * Remember that "controls" are expressions too, so you can capture a * value of a control by this way. * @param name Name of an existing expression * @return Expression's numeric value. */ static public double GetExpressionValue(String name) throws Exception { ConstructionObject o = C.find(name); if (o == null) { throw new Exception(Loc("notfound")); } if (!(o instanceof ExpressionObject)) { throw new Exception(Loc("notgoodtype")); } ExpressionObject oc = (ExpressionObject) o; double res = Double.NaN; try { res = oc.getValue(); } catch (Exception ex) { } return res; } /** * Set the value of a given expression which is in the construction. * @param name Name of an existing expression * @param value Value you want to give to the expression */ static public void SetExpressionValue(String name, String value) throws Exception { ConstructionObject o = C.find(name); if (o == null) { throw new Exception(Loc("notfound")); } if (!(o instanceof ExpressionObject)) { throw new Exception(Loc("notgoodtype")); } ExpressionObject oc = (ExpressionObject) o; o.setFixed(parseVariables(value)); refreshZC(); } /** *Return the x-coordinate of an object. If no object is found, then it returns NaN. * @param name the name of the object * @return the numeric value of the x-coordinate */ static public double X(String name) throws Exception { ConstructionObject o = C.find(name); if (o != null) { return o.getX(); } else { throw new Exception(Loc("notfound")); } } /** *Return the y-coordinate of an object. If no object is found, then it returns NaN. * @param name the name of the object * @return the numeric value of the y-coordinate */ static public double Y(String name) throws Exception { ConstructionObject o = C.find(name); if (o != null) { return o.getY(); } else { throw new Exception(Loc("notfound")); } } // ********************************************** // Modification des attributs des objets // ********************************************** /** * Set the color of an object using one of the 6 predifined colors * of CaRMetal. *
Note : It's possible to change this property in one step for * multiple object. *
Example : SetColor("A,B,c1,E1","cyan") will give the "cyan" color * to the objects A, B, c1 and E1 * @param name Name of the object you want to change color * @param col Name of the color. It can be "green", "blue", "brown", "cyan", "red" or "black". */ static public void SetColor(String name, String col) { String[] names = name.split(","); for (int i = 0; i < names.length; i++) { c("color(" + col + "," + names[i] + ")"); } } /** *Set the shape of a point. It has no effect if the object is not a point. *
Note : It's possible to change this property in one step for * multiple points. *
Example : SetPointType("A,B,E,F","square") will give the "square" shape * to the points A, B, E and F * @param name Name of the point you want to change shape * @param type Name of the shape. It can be "square", "circle", "diamond", "point", "cross", "dcross". */ static public void SetPointType(String name, String type) { String[] names = name.split(","); for (int i = 0; i < names.length; i++) { c("type(" + type + "," + names[i] + ")"); } } /** * Set the RGB color of an object using 3 integer numbers in [0..255]. *
Note : It's possible to change this property in one step for * multiple object. *
Example : SetColor("A,B,c1",120,40,245) will give the same color * to the objects A, B and c1. This color is defined by r=120, g=40 and b=245. * @param name Name of the object you want to change color * @param r Red value (integer in [0..255] * @param g Green value (integer in [0..255] * @param b Blue value (integer in [0..255] */ static public void SetRGBColor(String name, int r, int g, int b) { Color mycolor = new Color(r, g, b); String[] names = name.split(","); for (int i = 0; i < names.length; i++) { ConstructionObject o = C.find(names[i]); if (o != null) { o.setColor(0, mycolor); } } } /** * Set the thickness of an object. *
Note : It's possible to change this property in one step for * multiple objects. *
Example : SetThickness("A,B,c1,l1","thick") will give the "thick" aspect * to the objects A, B, c1 and l1 * @param name Name of the point you want to change shape * @param thc Name of the thickness. It can be "thick", "normal" and "thin". */ static public void SetThickness(String name, String thc) { String[] names = name.split(","); for (int i = 0; i < names.length; i++) { c("thickness(" + thc + "," + names[i] + ")"); } } /** * Set the alias name of an object. *
Note : It's possible to change this property in one step for * multiple objects. *
Example : SetAlias("A,B,c1,l1","My beautiful object") * will give the "My beautiful object" alias name to the objects A, B, c1 and l1 * @param name Name of the point you want to change alias name. * @param alias Alias name. */ static public void SetAlias(String name, String alias) { String[] names = name.split(","); for (int i = 0; i < names.length; i++) { ConstructionObject o = C.find(names[i]); if (o != null) { o.setAlias(alias); } } } /** * Set the standard magnetic attraction lenght of a point * @param name Name of a point * @param ray Attraction lenght, in pixels (number or expression) * @see #SetMagneticObjects * @see #AddMagneticObject */ static public void SetMagneticRay(String name, String ray) { ConstructionObject o = C.find(name); if ((o == null) || (!(o instanceof PointObject))) { return; } PointObject pt = (PointObject) o; pt.setMagnetRayExp(ray); C.dovalidate(); ZC.paint(ZC.getGraphics()); } /** * Set the objects that will magnetize a given point *
Example : SetMagneticObjects("P","c1,d1,A") will * make the point P attracted by the objects c1, d1 and A. *
It's possible to define exceptions using the ":" separator. * If, for instance, objectlist contains "A,E,c1:20,l1" and the attraction * field is defined by 50 pixels, objects "A", "E" and "l1" have an attraction * radius of 50 pixels, but the object c1 will have an attraction radius of 20 pixels. * @param name Name of a point * @param objectlist List of objects * @see #AddMagneticObject * @see #SetMagneticRay */ static public void SetMagneticObjects(String name, String objectlist) { ConstructionObject o = C.find(name); if ((o == null) || (!(o instanceof PointObject))) { return; } PointObject pt = (PointObject) o; pt.setMagnetObjects(parseVariables(objectlist)); } /** * Add an object to the list of magnetic objects of a given point. * @param name Name of the point * @param object Object to add to the magnetic point list * @see #SetMagneticObjects * @see #SetMagneticRay */ static public void AddMagneticObject(String name, String object) { ConstructionObject o = C.find(name); if ((o == null) || (!(o instanceof PointObject))) { return; } PointObject pt = (PointObject) o; pt.addMagnetObject(object); } /** * Fix or unfix an object in the CaRMetal current window. A fixed object * can't be moved with the mouse. *
Note : It's possible to change this property in one step for * multiple objects. *
Example : SetFixed("A,B,c1,l1",true) * will fix the objects A, B, c1 and l1 in the CaRMetal current window. * @param name Name of the object * @param bool "true" value to fix the object, "false" to unfix it. */ static public void SetFixed(String name, boolean bool) { String[] names = parseVariables(name).split(","); for (int i = 0; i < names.length; i++) { ConstructionObject o = C.find(names[i]); if (o != null) { o.setFixed(bool); } } } /** * Shows or hide the name of an object (or multiple objects). *
Example : SetShowName("A,B,c1,l1",true) * will shows the names of objects A, B, c1 and l1. * @param name Name(s) of object. * @param bool "true" to show name, and "false" to hide it. */ static public void SetShowName(String name, boolean bool) { String[] names = parseVariables(name).split(","); for (int i = 0; i < names.length; i++) { ConstructionObject o = C.find(names[i]); if (o != null) { o.setShowName(bool); } } } /** * Shows or hide the value of an object (or multiple objects). *
Example : SetShowValue("A,B,c1,l1",true) * will shows the value of objects A, B, c1 and l1. * @param name Name(s) of object. * @param bool "true" to show value, and "false" to hide it. */ static public void SetShowValue(String name, boolean bool) { String[] names = parseVariables(name).split(","); for (int i = 0; i < names.length; i++) { ConstructionObject o = C.find(names[i]); if (o != null) { o.setShowValue(bool); } } } /** * Some objects can be filled (circles, polygons, etc...). This will * fill or unfill an object (or multiple objects). *
Example : SetFilled("A,B,c1,l1",true) * will fill objects A, B, c1 and l1. * @param name Name(s) of object. * @param bool "true" to fill objects, and "false" to unfill it. */ static public void SetFilled(String name, boolean bool) { String[] names = parseVariables(name).split(","); for (int i = 0; i < names.length; i++) { ConstructionObject o = C.find(names[i]); if (o != null) { o.setFilled(bool); } } } /** * Some objects can be drawn partially (circles, lines). This will * draw partially or not an object (or multiple objects). *
Example : SetPartial("A,B,c1,l1",true) * will draw partially objects A, B, c1 and l1. * @param name Name(s) of object. * @param bool "true" to draw partially, and "false" to draw completly. */ static public void SetPartial(String name, boolean bool) { String[] names = parseVariables(name).split(","); for (int i = 0; i < names.length; i++) { ConstructionObject o = C.find(names[i]); if (o != null) { o.setPartial(bool); C.updateCircleDep(); } } } /** *After calling this command, names of new objects will be displayed. */ static public void Shownames() { cm("shownames"); } /** *After calling this command, names of new objects will not be displayed. */ static public void Hidenames() { cm("hidenames"); } /** * Hides an object (or multiple objects). *
Example : Hide("A,B,c1,l1",true) * will hide objects A, B, c1 and l1. * @param name Name(s) of object(s). */ static public void Hide(String name) { String[] names = parseVariables(name).split(","); for (int i = 0; i < names.length; i++) { c("hide(true," + names[i] + ")"); } ZC.paint(ZC.getGraphics()); } static public void SetHide(String name, boolean b) { String[] names = parseVariables(name).split(","); for (int i = 0; i < names.length; i++) { c("hide(" + b + "," + names[i] + ")"); } ZC.paint(ZC.getGraphics()); } /** * Shows an object (or multiple objects). *
Example : Show("A,B,c1,l1",true) * will show objects A, B, c1 and l1. * @param name Name(s) of object(s). */ static public void Show(String name) { String[] names = parseVariables(name).split(","); for (int i = 0; i < names.length; i++) { c("hide(false," + names[i] + ")"); } ZC.paint(ZC.getGraphics()); } // static public void Delete(String name) { // String[] names=parseVariables(name).split(","); // for (int i=0; iFrom javascript, you can also do something like this : *

    *
  1. a=Point("",1,2)
  2. *
  3. b=Point("",-2,3)
  4. *
  5. m=4
  6. *
  7. c=Point("","(x_a+x_b)/_m","(y_a+y_b)/_m")
  8. *
* The "_" symbol means that javascript must use the content of variables. * For example The string "_m" will be replaced by "4" (line 3).
Another * "shortcut" : if, for example, a contains "P1" (the real name of the point * created by step 1), the string x_a is equivalent to the string "x(P1)". * @param name Name of the point (suggestion) * @param x x-coordinate (number or expression) * @param y y-coordinate (number or expression) * @return Name of the created point */ static public String Point(String name, String x, String y) throws Exception { if (name.equals("undefined")) { double xx = C.getX() + 2 * Math.random() * C.getW() - C.getW(); double yy = C.getY() - Math.random() * C.getH() + C.getH() / 2; x = "" + xx; y = "" + yy; name = ""; } else if (y.equals("undefined")) { y = x; x = name; name = ""; } PointObject pt = null; try { pt = new PointObject(C, Math.round(Double.valueOf(x) * 1E13) / 1E13, Math.round(Double.valueOf(y) * 1E13) / 1E13); } catch (Exception e) { try { pt = new PointObject(C, 0, 0); pt.setFixed(parseVariables(x), parseVariables(y)); pt.validCoordinates(); } catch (Exception ex) { throw new Exception(Loc("pointcoords")); } } pt.setDefaults(); if (!name.equals("")) { pt.setName(name); } pt.setColorType(ConstructionObject.NORMAL); pt.setShowName(false); pt.setShowValue(false); pt.validate(); C.add(pt); return pt.getName(); } /** * Create the midpoint of two existing points * @param name Name of the midpoint * @param a Name of first point * @param b Name of second point * @return the midpoint name */ static public String MidPoint(String name, String a, String b) { if (b.equals("undefined")) { b = a; a = name; name = ""; } if (name.equals("")) { c("M(" + a + "," + b + ")"); C.last().setShowName(false); } else { c(name + "=" + "M(" + a + "," + b + ")"); } return LastObjectName(); } /** * Reflect the point p with line d * @param name Name of the Symmetric * @param d Reflection line * @param p Point to relect * @return the reflection point name */ static public String Reflection(String name, String d, String p) throws Exception { if (p.equals("undefined")) { p = d; d = name; name = ""; } if (name.equals("")) { c("@builtin@/syma(" + d + "," + p + ")"); C.last().setShowName(false); } else { c(name + "=@builtin@/syma(" + d + "," + p + ")"); } return LastObjectName(); } /** * Translate the point p with vector ab * @param name Name of the Translated point * @param a first point of the vector * @param b second point of the vector * @param p Point to translate * @return the translated point name */ static public String Translation(String name, String a, String b, String p) throws Exception { if (p.equals("undefined")) { p = b; b = a; a = name; name = ""; } if (name.equals("")) { c("@builtin@/trans(" + a + "," + b + "," + p + ")"); C.last().setShowName(false); } else { c(name + "=@builtin@/trans(" + a + "," + b + "," + p + ")"); } return LastObjectName(); } /** * Reflect the point b with center a * @param name Name of the Reflect point * @param a Symmetry center * @param b Point to relect * @return the symmetric point name */ static public String Symmetry(String name, String a, String b) { if (b.equals("undefined")) { b = a; a = name; name = ""; } if (name.equals("")) { c("P(2*x(" + a + ")-x(" + b + "),2*y(" + a + ")-y(" + b + "))"); C.last().setShowName(false); } else { c(name + "=" + "P(2*x(" + a + ")-x(" + b + "),2*y(" + a + ")-y(" + b + "))"); } return LastObjectName(); } /** * Create the perpendicular bisector between two points a and b * @param name Name of the perpendicular bisector * @param a first point * @param b second point * @return the perpendicular bisector name */ static public String PerpendicularBisector(String name, String a, String b) { if (b.equals("undefined")) { b = a; a = name; name = ""; } if (name.equals("")) { c("@builtin@/med(" + a + "," + b + ")"); C.last().setShowName(false); } else { c(name + "=@builtin@/med(" + a + "," + b + ")"); } return LastObjectName(); } /** * Create the angle bisector between 3 points a, b and c * @param name Name of the perpendicular bisector * @param a first point * @param b second point * @param c third point * @return the angle bisector name */ static public String AngleBisector(String name, String a, String b, String c) throws Exception { if (c.equals("undefined")) { c = b; b = a; a = name; name = ""; } if (name.equals("")) { c("@builtin@/biss(" + a + "," + b + "," + c + ")"); C.last().setShowName(false); } else { c(name + "=@builtin@/biss(" + a + "," + b + "," + c + ")"); } return LastObjectName(); } /** * Create the circumcircular circle between 3 points a, b and c * @param name Name of the perpendicular bisector * @param a first point * @param b second point * @param c third point * @return the circumcircular circle name */ static public String Circle3pts(String name, String a, String b, String c) throws Exception { if (c.equals("undefined")) { c = b; b = a; a = name; name = ""; } if (name.equals("")) { c("@builtin@/circ(" + a + "," + b + "," + c + ")"); C.last().setShowName(false); } else { c(name + "=@builtin@/circ(" + a + "," + b + "," + c + ")"); } return LastObjectName(); } /** * Create the circle around a with radius bc * @param name Name of the circle * @param a center point * @param b first point * @param c second point * @return the circle name */ static public String Circle3(String name, String a, String b, String c) throws Exception { if (c.equals("undefined")) { c = b; b = a; a = name; name = ""; } if (name.equals("")) { c("c(" + a + "," + b + "," + c + ")"); C.last().setShowName(false); } else { c(name + "=c(" + a + "," + b + "," + c + ")"); } return LastObjectName(); } /** * Create the circumcircular arc between 3 points a, b and c * @param name Name of the perpendicular bisector * @param a first point * @param b second point * @param c third point * @return the circumcircular arc name */ static public String Arc3pts(String name, String a, String b, String c) throws Exception { if (c.equals("undefined")) { c = b; b = a; a = name; name = ""; } if (name.equals("")) { c("@builtin@/arc(" + a + "," + b + "," + c + ")"); C.last().setShowName(false); } else { c(name + "=@builtin@/arc(" + a + "," + b + "," + c + ")"); } return LastObjectName(); } /** * Creates the intersection between two objects. If you provide a name * for the intersection, only one intersection point will be created. * If you give the empty string "" as name parameter, two intersection * points will be created, if the a and b objects are two circles * or line/circle. * @param name Name of the intersection point * @param a Name of first object * @param b Name of second object * @return Name of intersection point * @see #Intersection2 */ static public String Intersection(String name, String a, String b) { if (b.equals("undefined")) { b = a; a = name; name = ""; } if (name.equals("")) { // System.out.println("int"); c("I(" + a + "," + b + ")"); C.last().setShowName(false); } else { c(name + "=" + "I(" + a + "," + b + ")"); } return LastObjectName(); } /** * When two objects have two intersection points (two circles or one line/one circle) * you may use this command to create them both. * @param name1 Name of first intersection point * @param name2 Name of second intersection point * @param a Name of first object * @param b Name of second object * @return Name of intersection point * @see #Intersection */ static public String Intersection2(String name1, String name2, String a, String b) { if (b.equals("undefined")) { b = a; a = name2; name2 = name1; name1 = ""; if (b.equals("undefined")) { b = a; a = name2; name2 = ""; } } if (name1.equals("")) { c("I1,I2=I(" + a + "," + b + ")"); C.last().setShowName(false); } else { c(name1 + "," + name2 + "=" + "I(" + a + "," + b + ")"); } return LastObjectName(); } /** * Creates a line between two points * @param name Name of the line (suggestion) * @param a Name of first point * @param b Name of second point * @return Name of the created line */ static public String Line(String name, String a, String b) { if (b.equals("undefined")) { b = a; a = name; name = ""; } if (name.equals("")) { c("l(" + a + "," + b + ")"); C.last().setShowName(false); } else { c(name + "=" + "l(" + a + "," + b + ")"); } NormalizeLast(); return LastObjectName(); } /** * Creates a ray from point a to point b * @param name Name of the ray (suggestion) * @param a Name of first point * @param b Name of second point * @return Name of the created ray */ static public String Ray(String name, String a, String b) { if (b.equals("undefined")) { b = a; a = name; name = ""; } if (name.equals("")) { c("r(" + a + "," + b + ")"); C.last().setShowName(false); } else { c(name + "=r(" + a + "," + b + ")"); } NormalizeLast(); return LastObjectName(); } /** * Creates an angle defined by 3 points a,b and c (b is the vertex). * @param name Name of the angle (suggestion) * @param a Name of first point * @param b Name of the vertex * @param c Name of the third point * @return Name of the created angle */ static public String Angle(String name, String a, String b, String c) { if (c.equals("undefined")) { c = b; b = a; a = name; name = ""; } if (name.equals("")) { c("a(" + a + "," + b + "," + c + ")"); C.last().setShowName(false); } else { c(name + "=a(" + a + "," + b + "," + c + ")"); } return LastObjectName(); } /** * Creates an angle defined by 2 points a,b and an expression c (b is the vertex). * @param name Name of the angle (suggestion) * @param a Name of first point * @param b Name of the vertex * @param c angle in degree * @return Name of the created angle */ static public String FixedAngle(String name, String a, String b, String c) { if (c.equals("undefined")) { c = b; b = a; a = name; name = ""; } if (name.equals("")) { c("a(" + a + "," + b + "," + c + ")"); C.last().setShowName(false); } else { c(name + "=a(" + a + "," + b + "," + c + ")"); } return LastObjectName(); } /** * Execute a macro-construction m with parameters params * @param lastObjName Name of last created object * @param macroname Name of macro * @param params list of objects (e.g. "A,E,F,G") * @return Name of the last created object */ static public String ExecuteMacro(String lastObjName, String macroname, String params) { if (params.equals("undefined")) { params = macroname; macroname = lastObjName; lastObjName = ""; } if (lastObjName.equals("")) { c(macroname + "(" + parseVariables(params) + ")"); C.last().setShowName(false); } else { c(lastObjName + "=" + macroname + "(" + parseVariables(params) + ")"); } return LastObjectName(); } /** * Creates a polygon define by a list of points. e.g. Polygon("","A,B,C") * will create the triangle ABC. * @param name Name of the polygon (suggestion) * @param params list of objects * @return Name of the created polygon */ static public String Polygon(String name, String params) { if (params.equals("undefined")) { params = name; name = ""; } String[] c = parseVariables(params).split(","); Vector V = new Vector(); for (int i = 0; i < c.length; i++) { ConstructionObject o = C.find(c[i]); if (o != null) { V.add(o); } } AreaObject poly = new AreaObject(C, V); poly.setDefaults(); if (!name.equals("")) { poly.setName(name); } poly.validate(); C.add(poly); return LastObjectName(); } /** * Creates a quadric defined by five points * @param name Name of the quadric (suggestion) * @param a Name of first point * @param b Name of second point * @param c Name of third point * @param d Name of fourth point * @param e Name of fifth point * @return Name of the created quadric */ static public String Quadric(String name, String a, String b, String c, String d, String e) { if (e.equals("undefined")) { e = d; d = c; c = b; b = a; a = name; name = ""; } if (name.equals("")) { c("quadric(" + a + "," + b + "," + c + "," + d + "," + e + ")"); C.last().setShowName(false); } else { c(name + "=quadric(" + a + "," + b + "," + c + "," + d + "," + e + ")"); } NormalizeLast(); return LastObjectName(); } /** * Creates the graph of a cartesian function with x variable in [a,b] * @param name Name of the function (suggestion) * @param a Minimum (number or expression) * @param b Maximum (number or expression) * @param fx expression of the function (variable x) * @return Name of the function */ static public String CartesianFunction(String name, String a, String b, String fx) { if (fx.equals("undefined")) { fx = b; b = a; a = name; name = ""; } final FunctionObject f = new FunctionObject(C); f.setDefaults(); if (!name.equals("")) { f.setName(name); } f.setExpressions("x", "", fx); if ((!a.equals("")) && (!b.equals(""))) { f.setRange(a, b, "0"); } C.add(f); C.dovalidate(); ZC.paint(ZC.getGraphics()); NormalizeLast(); return f.getName(); } /** * Creates the graph of a parmetric function with t variable in [a,b] * @param name Name of the function (suggestion) * @param a Minimum (number or expression) * @param b Maximum (number or expression) * @param xt expression of x(t) (variable t) * @param yt expression of y(t) (variable t) * @return Name of the function */ static public String ParametricFunction(String name, String a, String b, String xt, String yt) { if (yt.equals("undefined")) { yt = xt; xt = b; b = a; a = name; name = ""; } final FunctionObject f = new FunctionObject(C); f.setDefaults(); if (!name.equals("")) { f.setName(name); } f.setExpressions("t", xt, yt); if ((!a.equals("")) && (!b.equals(""))) { f.setRange(a, b, "0"); } C.add(f); C.dovalidate(); ZC.paint(ZC.getGraphics()); NormalizeLast(); return f.getName(); } /** * Creates a segment with center a and length r. * @param name Name of the segment (suggestion) * @param a Center point * @param r Length (number or expression) * @return Name of the segment */ static public String FixedSegment(String name, String a, String r) { if (r.equals("undefined")) { r = a; a = name; name = ""; } if (name.equals("")) { c("s(" + a + "," + r + ")"); C.last().setShowName(false); } else { c(name + "=" + "s(" + a + "," + r + ")"); } NormalizeLast(); return LastObjectName(); } /** * Creates a segment between two points. * @param name Name of the segment (suggestion) * @param a Name of first point * @param b Name of second point * @return Name of the created segment */ static public String Segment(String name, String a, String b) { if (b.equals("undefined")) { b = a; a = name; name = ""; } SegmentObject so = null; try { so = new SegmentObject(C, (PointObject) C.find(a), (PointObject) C.find(b)); } catch (Exception e) { return ""; } so.setDefaults(); if (!name.equals("")) { so.setName(name); } so.setArrow(false); so.setColorType(ConstructionObject.NORMAL); so.setShowName(false); so.setShowValue(false); so.validate(); C.add(so); return so.getName(); } /** * Creates a vector between two points. * @param name Name of the vector (suggestion) * @param a Name of origin point * @param b Name of second point * @return Name of the created vector */ static public String Vector(String name, String a, String b) { if (b.equals("undefined")) { b = a; a = name; name = ""; } SegmentObject so = null; try { so = new SegmentObject(C, (PointObject) C.find(a), (PointObject) C.find(b)); } catch (Exception e) { return ""; } so.setDefaults(); if (!name.equals("")) { so.setName(name); } so.setArrow(true); so.setColorType(ConstructionObject.NORMAL); so.setShowName(false); so.setShowValue(false); C.add(so); return so.getName(); } /** * Creates a circle with center a to point b. * @param name Name of the circle (suggestion) * @param a center point * @param b point of the circle * @return Name of the circle */ static public String Circle(String name, String a, String b) { if (b.equals("undefined")) { b = a; a = name; name = ""; } if (name.equals("")) { c("c(" + a + "," + b + ")"); C.last().setShowName(false); } else { c(name + "=" + "c(" + a + "," + b + ")"); } NormalizeLast(); return LastObjectName(); } /** * Creates a circle with center a and radius r. * @param name Name of the circle (suggestion) * @param a Center point * @param r Radius (number or expression) * @return Name of the circle */ static public String FixedCircle(String name, String a, String r) { if (r.equals("undefined")) { r = a; a = name; name = ""; } if (name.equals("")) { c("c(" + a + "," + r + ")"); C.last().setShowName(false); } else { c(name + "=" + "c(" + a + "," + r + ")"); } NormalizeLast(); return LastObjectName(); } /** * Creates a parallel line through point pt to line lne. * @param name Name of the parallel line (suggestion) * @param lne Name of the line * @param pt Name of the point * @return Name of the parallel line */ static public String Parallel(String name, String lne, String pt) { if (pt.equals("undefined")) { pt = lne; lne = name; name = ""; } if (name.equals("")) { c("par(" + lne + "," + pt + ")"); C.last().setShowName(false); } else { c(name + "=" + "par(" + lne + "," + pt + ")"); } NormalizeLast(); return LastObjectName(); } /** * Creates a perpendicular line through point pt to line lne. * @param name Name of the parallel line (suggestion) * @param lne Name of the line * @param pt Name of the point * @return Name of the perpendicular line */ static public String Perpendicular(String name, String lne, String pt) { if (pt.equals("undefined")) { pt = lne; lne = name; name = ""; } if (name.equals("")) { c("perp(" + lne + "," + pt + ")"); C.last().setShowName(false); } else { c(name + "=" + "perp(" + lne + "," + pt + ")"); } NormalizeLast(); return LastObjectName(); } /** * Creates an expression. * @param name Name of expression (suggestion) * @param exp Expression * @param x x-coordinate of expression (number or expression) * @param y y-coordinate of expression (number or expression) * @return Name of expression */ static public String Expression(String name, String exp, String x, String y) { if (y.equals("undefined")) { y = x; x = exp; exp = name; name = ""; } exp = parseVariables(exp); final ExpressionObject p = new ExpressionObject(C, 0, 0); p.setDefaults(); if (!name.equals("")) { p.setName(name); } try { p.setExpression(exp, C); } catch (final Exception e) { return ""; } try { double xx = Math.round(Double.valueOf(x) * 1E13) / 1E13; double yy = Math.round(Double.valueOf(y) * 1E13) / 1E13; p.move(xx, yy); } catch (Exception e) { x = parseVariables(x); y = parseVariables(y); p.setFixed(x, y); } C.add(p); NormalizeLast(); p.setShowValue(true); C.dovalidate(); ZC.paint(ZC.getGraphics()); return p.getName(); } } ./src/eric/JSprogram/.cvsignore0000644000175000017500000000001211347171104015356 0ustar yvesyves.DS_Store ./src/eric/JSprogram/JSOuputConsole.java0000644000175000017500000000160011337712572017132 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.JSprogram; import java.awt.*; import java.io.*; import javax.swing.*; public class JSOuputConsole extends JFrame { JTextArea textArea = new JTextArea(); public JSOuputConsole() { // Add a scrolling text area textArea.setEditable(false); textArea.setRows(20); textArea.setColumns(50); getContentPane().add(new JScrollPane(textArea), BorderLayout.CENTER); pack(); setVisible(false); // Create reader threads // new ReaderThread(piOut).start(); } public void print(String msg){ textArea.append(msg); } public void println(String msg){ textArea.append("\n"+msg); } }./src/eric/JSprogram/Const.java0000644000175000017500000000056411337712566015337 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.JSprogram; /** * * @author erichake */ public class Const{ public double BLA=3.5; public Const(){ } public double getBLA(){ return BLA; } public double m(String a,String b){ return 1.0; } public double m(String a){ return 2.0; } } ./src/eric/JSprogram/ScriptItem.java0000644000175000017500000000326711340706637016333 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.JSprogram; import eric.GUI.themes; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JMenuItem; import rene.util.xml.XmlTree; import rene.util.xml.XmlWriter; /** * * @author erichake */ public class ScriptItem extends JMenuItem implements ActionListener{ private String name,source; public ScriptItem(XmlTree tree) { super(tree.getTag().getValue("Name")); name=tree.getTag().getValue("Name"); // this.setText(name); source=tree.getText(); source=source.replaceAll("^[\n]*", ""); source=source.replace("<", "<"); source=source.replace(">", ">"); // System.out.println(name+":"+content); addActionListener(this); setFont(themes.TabMenusFont); } public ScriptItem(String N,String S){ super(N); name=N; source=S; addActionListener(this); setFont(themes.TabMenusFont); } public String getScriptName(){ return name; } public String getScriptSource(){ return source; } public void setScriptName(String s){ name=s; } public void setScriptSource(String s){ source=s; } public void saveScript(final XmlWriter xml) { xml.startTagStart("Script"); xml.printArg("Name", name); xml.startTagEndNewLine(); xml.println(source); xml.endTagNewLine("Script"); } public void action() { JSRun.runScript(source); } public void actionPerformed(ActionEvent e) { action(); } } ./src/eric/JSprogram/myStatusBarPanel.java0000644000175000017500000000260311337721202017466 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.JSprogram; import eric.GUI.themes; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.net.URL; import javax.swing.ImageIcon; import javax.swing.JPanel; /** * * @author erichake */ public class myStatusBarPanel extends JPanel { private ImageIcon myimage; @Override public void paintComponent(Graphics g) { final java.awt.Dimension d=this.getSize(); final int w=d.width; final int h=d.height; final Graphics2D g2=(Graphics2D) g; // g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, // RenderingHints.VALUE_ANTIALIAS_ON); // g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, // RenderingHints.VALUE_TEXT_ANTIALIAS_ON); // g2.setRenderingHint(RenderingHints.KEY_RENDERING, // RenderingHints.VALUE_RENDER_QUALITY); // g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, // RenderingHints.VALUE_INTERPOLATION_BICUBIC); // g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, // RenderingHints.VALUE_STROKE_PURE); g2.drawImage(myimage.getImage(), 0, 0, w, h, this); } public myStatusBarPanel() { super(); myimage=themes.getIcon("statusbar.gif"); } } ./src/eric/JSprogram/JSConsole.java0000644000175000017500000022753711361245630016111 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ /* * JConsole2.java * * Created on 20 avr. 2009, 08:24:41 */ package eric.JSprogram; import eric.JBrowserLauncher; import eric.JZirkelCanvas; import eric.OS; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Insets; import java.awt.MouseInfo; import java.awt.Point; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.AbstractAction; import javax.swing.BorderFactory; import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JTextPane; import javax.swing.KeyStroke; import javax.swing.SwingUtilities; import javax.swing.ToolTipManager; import javax.swing.border.BevelBorder; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.event.UndoableEditEvent; import javax.swing.event.UndoableEditListener; import javax.swing.text.AbstractDocument; import javax.swing.text.Element; import javax.swing.text.Style; import javax.swing.text.StyleConstants; import javax.swing.text.StyledDocument; import javax.swing.text.TabSet; import javax.swing.text.TabStop; import javax.swing.undo.CannotRedoException; import javax.swing.undo.CannotUndoException; import javax.swing.undo.UndoManager; import javax.swing.undo.UndoableEdit; import rene.gui.Global; /** * * @author erichake */ public class JSConsole extends javax.swing.JFrame { // final UndoManager undo=new UndoManager(); StyledDocument doc; final int ctrlkey = (OS.isMac()) ? InputEvent.META_DOWN_MASK : InputEvent.CTRL_DOWN_MASK; private boolean NoTypeNoClic = true; UndoManager undo; private Point origin; private Point winloc; private Point current; private int xx; private int yy; private int w; private int h; private int JSsel = 0; private String filename = ""; // script in file private String scriptname = ""; // script in figure /** Creates new form JConsole2 */ public JSConsole() { initComponents(); doc = script_area.getStyledDocument(); initCaRMetalBtns(); initScriptArea(); initUndoRedo(); initJSlist(); setWindowTitle(Loc("JSeditor.title")); if ((OS.isMac())) { fixsize(macpanel, 1, 1); winpanel.removeAll(); winpanel.add(title_lbl); winpanel.revalidate(); } else { fixsize(winpanel, 1, 1); } this.setLocationRelativeTo(JZirkelCanvas.getCurrentZC()); errorpanel.removeAll(); errorpanel.revalidate(); setTabs(script_area, 3); setSize(750, 500); // Show tool tips immediately ToolTipManager.sharedInstance().setInitialDelay(50); JSRun.init(); setVisible(true); } public void setBackBtnEnabled(boolean bool) { backbtn.setEnabled(bool); } public void selectScriptInfileChk(boolean b) { infilechk.setSelected(b); } public void setScriptName(String s) { scriptname = s; } public String getScriptName() { return scriptname; } public void setFileName(String s) { filename = s; } public String getFileName() { return filename; } public void setWindowTitle(String s) { title_lbl.setText(s); } public String getWindowTitle() { return title_lbl.getText(); } public boolean isFileOpened() { return !(filename.equals("")); } private void initJSlist() { } static void fixsize(final JComponent cp, final int w, final int h) { final Dimension d = new Dimension(w, h); cp.setMaximumSize(d); cp.setMinimumSize(d); cp.setPreferredSize(d); cp.setSize(d); } public void NoTypeNoClic() { NoTypeNoClic = true; } public void addOrChange(String st) { if (NoTypeNoClic) { undo.undo(); } else { NoTypeNoClic(); } addToScript(st); } public void addToScript(String st) { script_area.requestFocus(); script_area.replaceSelection(st); // syntaxColoring(); script_area.requestFocus(); } public void clearSelection() { script_area.replaceSelection(""); script_area.requestFocus(); } public JSIcon addCMicon(String obj, String syntax) { JSIcon jsi = new JSIcon(this, obj, syntax); c_carmetal.add(jsi); return jsi; } /** * * @param obj * @param example * @return */ public JSButton addJSIcon(String obj, final String example) { JSButton jb = new JSButton(obj, 24, true); jb.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { addToScript(example); } }); js_btns.add(jb); return jb; } public void addBlankIcon(int nb, int size) { for (int i = 0; i < nb; i++) { c_carmetal.add(new JSBlankIcon(size)); } } public void addSeparator(int nb) { javax.swing.JSeparator jSeparator1 = new javax.swing.JSeparator(); jSeparator1.setPreferredSize(new java.awt.Dimension(170, nb)); jSeparator1.setBorder(BorderFactory.createLineBorder(Color.BLACK)); c_carmetal.add(jSeparator1); } public void syntaxColoring() { String[] keynames = {"for", "while", "if", "else", "do", "new", "function", "true", "false", "var", "return"}; String[] mathkeynames = {"Math.PI", "Math.sin", "Math.cos", "Math.tan", "Math.asin", "Math.acos", "Math.atan", "Math.abs", "Math.ceil", "Math.round", "Math.min", "Math.max", "Math.floor", "Math.PI", "Math.E", "Math.pow", "Math.exp", "Math.log", "Math.sqrt", "Math.LN10", "Math.random", "Math.LN2", "Math.LOG2E"}; String scp = "\n" + script_area.getText() + "\n"; // scp=scp.replace("(", "@").replace(")", "@"); //CaRMetal javascript instructions coloring : String[] allnames = JSRun.getKeywords(); ArrayList carmetal_matches = new ArrayList(); for (int i = 1; i < allnames.length; i++) { Matcher m = Pattern.compile("\\W{1}(\\Q" + allnames[i] + "\\E)\\W{1}", Pattern.MULTILINE).matcher(scp); while (m.find()) { carmetal_matches.add(m.start(1) - 1); carmetal_matches.add(m.end(1) - 1); } } //Standard javascript instructions coloring : ArrayList js_matches = new ArrayList(); for (int i = 0; i < keynames.length; i++) { Matcher m = Pattern.compile("\\W{1}(\\Q" + keynames[i] + "\\E)\\W{1}", Pattern.MULTILINE).matcher(scp); while (m.find()) { js_matches.add(m.start(1) - 1); js_matches.add(m.end(1) - 1); } } //Standard Math object javascript instructions coloring : ArrayList js_maths_matches = new ArrayList(); for (int i = 0; i < mathkeynames.length; i++) { Matcher m = Pattern.compile("\\W{1}(\\Q" + mathkeynames[i] + "\\E)\\W{1}", Pattern.MULTILINE).matcher(scp); while (m.find()) { js_maths_matches.add(m.start(1) - 1); js_maths_matches.add(m.end(1) - 1); } } //Comment coloring : ArrayList js_comments = new ArrayList(); // Matcher m = Pattern.compile("[\n\t]+(\\Q//\\E[^\n]*)", Pattern.MULTILINE).matcher(scp); Matcher m = Pattern.compile("(\\Q//\\E[^\n]*)", Pattern.MULTILINE).matcher(scp); while (m.find()) { js_comments.add(m.start(1) - 1); js_comments.add(m.end(1) - 1); // System.out.println("start="+m.start(1)+" end="+m.end(1)); } // Text coloring : ArrayList text_matches = new ArrayList(); m = Pattern.compile("\"([^\"]*)\"", Pattern.MULTILINE).matcher(scp); while (m.find()) { text_matches.add(m.start(1) - 1); text_matches.add(m.end(1) - 1); // System.out.println("start="+m.start(1)+" end="+m.end(1)); } doc.setCharacterAttributes(0, script_area.getText().length(), script_area.getStyle("Normal"), true); for (int i = 0; i < carmetal_matches.size(); i += 2) { int start = carmetal_matches.get(i); int end = carmetal_matches.get(i + 1); doc.setCharacterAttributes(start, end - start, script_area.getStyle("CMkeyword"), true); } for (int i = 0; i < js_matches.size(); i += 2) { int start = js_matches.get(i); int end = js_matches.get(i + 1); doc.setCharacterAttributes(start, end - start, script_area.getStyle("Blue"), true); } for (int i = 0; i < js_maths_matches.size(); i += 2) { int start = js_maths_matches.get(i); int end = js_maths_matches.get(i + 1); doc.setCharacterAttributes(start, end - start, script_area.getStyle("Math_keyword"), true); } for (int i = 0; i < text_matches.size(); i += 2) { int start = text_matches.get(i); int end = text_matches.get(i + 1); doc.setCharacterAttributes(start, end - start, script_area.getStyle("Green"), true); } for (int i = 0; i < js_comments.size(); i += 2) { int start = js_comments.get(i); int end = js_comments.get(i + 1); doc.setCharacterAttributes(start, end - start, script_area.getStyle("Comment"), true); } } public void clearStatusBar() { errorpanel.removeAll(); errorpanel.revalidate(); errorpanel.repaint(); } public void setTextAreaChanged(boolean bool) { savebtn.setEnabled(bool); } public boolean isTextAreaChanged() { Boolean bool = (!script_area.getText().equals("")) && (savebtn.isEnabled()); return bool; } // Ask if user wants to save the script. It returns true if the user cancelled // operation. Otherwise it returns false and save the file if the user pressed // ok button : public boolean cancelSaveChanges() { if ((getFileName().equals("")) && (!getScriptName().equals(""))) { return false; } if (isTextAreaChanged()) { setAlwaysOnTop(true); int n = JOptionPane.showConfirmDialog( this, Loc("JSEditor.savequestion"), "", JOptionPane.YES_NO_CANCEL_OPTION); setAlwaysOnTop(false); if (n == JOptionPane.CANCEL_OPTION) { return true; } if (n == JOptionPane.YES_OPTION) { JSRun.saveScript(script_area.getText(), false); } } return false; } public void initScriptArea() { // unbelievable... with those two lines, windows understands what // symbol it must use as carriage return : script_area.setText("\n"); script_area.setText(""); Style style = script_area.addStyle("Normal", null); StyleConstants.setForeground(style, new Color(70, 70, 70)); style = script_area.addStyle("CMkeyword", null); StyleConstants.setForeground(style, new Color(143, 69, 0)); StyleConstants.setBold(style, true); style = script_area.addStyle("Math_keyword", null); StyleConstants.setForeground(style, new Color(194, 151, 0)); StyleConstants.setBold(style, true); // Makes text green style = script_area.addStyle("Green", null); StyleConstants.setForeground(style, new Color(0, 153, 116)); StyleConstants.setBold(style, true); // Makes text blue style = script_area.addStyle("Blue", null); StyleConstants.setForeground(style, new Color(0, 95, 163)); StyleConstants.setBold(style, true); // Makes comment text style = script_area.addStyle("Comment", null); StyleConstants.setForeground(style, new Color(150, 150, 150)); StyleConstants.setItalic(style, true); // Makes text red style = script_area.addStyle("Red", null); StyleConstants.setForeground(style, Color.red); // Inherits from "Red"; makes text red and underlined style = script_area.addStyle("Red Underline", style); StyleConstants.setUnderline(style, true); // Makes text 24pts style = script_area.addStyle("24pts", null); StyleConstants.setFontSize(style, 24); // Makes text 12pts style = script_area.addStyle("12pts", null); StyleConstants.setFontSize(style, 12); // Makes text italicized style = script_area.addStyle("Italic", null); StyleConstants.setItalic(style, true); // A style can have multiple attributes; this one makes text bold and italic style = script_area.addStyle("Bold Italic", null); StyleConstants.setBold(style, true); StyleConstants.setItalic(style, true); script_area.getDocument().addDocumentListener(new DocumentListener() { public void insertUpdate(DocumentEvent e) { setTextAreaChanged(true); SwingUtilities.invokeLater(new Runnable() { public void run() { syntaxColoring(); } }); if (infilechk.isSelected()) { JSRun.saveScriptInConstruction(); } } public void removeUpdate(DocumentEvent e) { setTextAreaChanged(true); SwingUtilities.invokeLater(new Runnable() { public void run() { syntaxColoring(); } }); if (infilechk.isSelected()) { JSRun.saveScriptInConstruction(); } } public void changedUpdate(DocumentEvent e) { } }); script_area.setFont(new Font("monospaced", Font.PLAIN, 13)); script_area.setMargin(new Insets(0, 5, 0, 0)); KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0); script_area.getInputMap().put(enter, "enterCommand"); script_area.getActionMap().put("enterCommand", new AbstractAction("enterCommand") { public void actionPerformed(ActionEvent evt) { FindDelimiters(); int t = tabIndent(script_area.getCaretPosition()); script_area.replaceSelection("\n" + tabs(t)); } }); KeyStroke comment = KeyStroke.getKeyStroke(KeyEvent.VK_C, ctrlkey + KeyEvent.SHIFT_DOWN_MASK); script_area.getInputMap().put(comment, "commentCommand"); script_area.getActionMap().put("commentCommand", new AbstractAction("commentCommand") { public void actionPerformed(ActionEvent evt) { commentSelection(); } }); jScrollPane1.setRowHeaderView(new LineNumberView(script_area)); } public String getScript() { return script_area.getText(); } public void setScriptArea(String s) { script_area.setText(s); Format(); } private char endline = "\n".charAt(0); private boolean firstLineCar(int pos) { if (pos == 0) { return true; } return (script_area.getText().charAt(pos - 1) == endline); } public int linestartAt(int pos) { while (!firstLineCar(pos)) { pos--; } return pos; } private boolean lastLineCar(int pos) { if (pos == script_area.getText().length()) { return true; } return (script_area.getText().charAt(pos) == endline); } public int lineendAt(int pos) { while (!lastLineCar(pos)) { pos++; } return pos; } public void commentSelection() { int caret = script_area.getCaretPosition(); int start = script_area.getSelectionStart(); int end = script_area.getSelectionEnd(); script_area.setSelectionStart(linestartAt(start)); script_area.setSelectionEnd(lineendAt(end)); String mystr = script_area.getSelectedText(); int caretoffs = 2; if (mystr == null) { mystr = ""; } mystr = "\n" + mystr; if (Pattern.compile("\n([ \t]*)\\Q//\\E", Pattern.MULTILINE).matcher(mystr).find()) { mystr = Pattern.compile("\n([ \t]*)\\Q//\\E", Pattern.MULTILINE).matcher(mystr).replaceAll("\n$1"); caretoffs = -2; } else { mystr = mystr.replaceAll("\n", "\n//"); } mystr = mystr.substring(1); script_area.replaceSelection(mystr); script_area.setCaretPosition(caret + caretoffs); } public void initCaRMetalBtns() { // "point", "intersection", "midpoint", "bi_syma", // "bi_symc", "bi_trans", "line", "ray", "parallel", "plumb", // "bi_med", "bi_biss", "segment", "fixedsegment", "vector", // "area", "angle", "fixedangle", "circle", "fixedcircle", // "circle3", "bi_circ", "bi_arc", "quadric" addCMicon("point", "=Point(,,);"); addCMicon("intersection", "=Intersection(,,);"); addCMicon("midpoint", "=MidPoint(,,);"); addCMicon("bi_syma", "=Reflection(,,);"); addCMicon("bi_symc", "=Symmetry(,,);"); addCMicon("bi_trans", "=Translation(,,,);"); addCMicon("line", "=Line(,,);"); addCMicon("ray", "=Ray(,,);"); addCMicon("parallel", "=Parallel(,,);"); addCMicon("plumb", "=Perpendicular(,,);"); addCMicon("bi_med", "=PerpendicularBisector(,,);"); addCMicon("bi_biss", "=AngleBisector(,,,);"); addCMicon("segment", "=Segment(,,);"); addCMicon("fixedsegment", "=FixedSegment(,,);"); addCMicon("vector", "=Vector(,,);"); addCMicon("area", "=Polygon(,);"); addCMicon("angle", "=Angle(,,,);"); addCMicon("fixedangle", "=FixedAngle(,,,);"); addCMicon("circle", "=Circle(,,);"); addCMicon("fixedcircle", "=FixedCircle(,,);"); addCMicon("circle3", "=Circle3(,,,);"); addCMicon("bi_circ", "=Circle3pts(,,,);"); addCMicon("bi_arc", "=Arc3pts(,,,);"); addCMicon("quadric", "=Quadric(,,,,,);"); // addCMicon("text", ""); addCMicon("expression", "=Expression(,\"Votre expression\",,);"); // addCMicon("image3", ""); // addBlankIcon(3); addCMicon("function", "=CartesianFunction(,-5,5,\"x^2-2*x+1\");"); addCMicon("parametricfunction", "=ParametricFunction(,-3.14,3.14,\"3*rcos(t)^3\",\"3*rsin(t)^3\");"); addSeparator(1); addCMicon("interactiveinput", "=InteractiveInput(\"Message\",<\"Point,Segment,Line,Circle\">);"); addCMicon("aimant", "SetMagneticObjects(,);"); addCMicon("hide", "SetHide(,<\"true,false\">);"); addCMicon("type2", "SetPointType(,<\"square,circle,diamond,point,cross,dcross\">);"); addCMicon("color4", "SetColor(,<\"green,blue,brown,cyan,red,black\">);"); addCMicon("thickness1", "SetThickness(,<\"thick,normal,thin\">);"); addCMicon("partial", "SetPartial(,<\"true,false\">);"); addCMicon("showvalue", "SetShowValue(,<\"true,false\">);"); addCMicon("showname", "SetShowName(,<\"true,false\">);"); addCMicon("filled", "SetFilled(,<\"true,false\">);"); addJSIcon("js_cos", "Math.cos(x)"); addJSIcon("js_sin", "Math.sin(x)"); addJSIcon("js_tan", "Math.tan(x)"); addJSIcon("js_acos", "Math.acos(x)"); addJSIcon("js_asin", "Math.asin(x)"); addJSIcon("js_atan", "Math.atan(x)"); addJSIcon("js_abs", "Math.abs(x)"); addJSIcon("js_ceil", "Math.ceil(x)"); addJSIcon("js_floor", "Math.floor(x)"); addJSIcon("js_round", "Math.round(x)"); addJSIcon("js_min", "Math.min(x,y)"); addJSIcon("js_max", "Math.max(x,y)"); addJSIcon("js_pi", "Math.PI"); addJSIcon("js_e", "Math.E"); addJSIcon("js_xn", "Math.pow(x,n)"); addJSIcon("js_ex", "Math.exp(x)"); addJSIcon("js_ln", "Math.log(x)"); addJSIcon("js_sqrt", "Math.sqrt(x)"); } public void initUndoRedo() { undo = new UndoManager() { public synchronized boolean addEdit(UndoableEdit anEdit) { if (anEdit instanceof AbstractDocument.DefaultDocumentEvent) { AbstractDocument.DefaultDocumentEvent de = (AbstractDocument.DefaultDocumentEvent) anEdit; if (de.getType() == DocumentEvent.EventType.CHANGE) { return false; } } return super.addEdit(anEdit); } }; script_area.getStyledDocument().addUndoableEditListener(new UndoableEditListener() { public void undoableEditHappened(UndoableEditEvent e) { undo.addEdit(e.getEdit()); } }); script_area.getActionMap().put("Undo", new AbstractAction("Undo") { public void actionPerformed(ActionEvent evt) { try { if (undo.canUndo()) { undo.undo(); } } catch (CannotUndoException e) { } } }); script_area.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, ctrlkey), "Undo"); script_area.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_Y, ctrlkey), "Redo"); script_area.getActionMap().put("Redo", new AbstractAction("Redo") { public void actionPerformed(ActionEvent evt) { try { if (undo.canRedo()) { undo.redo(); } } catch (CannotRedoException e) { } } }); } // Select a line (linenumber starts at 1) private void selectLine(int linenumber) { Element root = script_area.getDocument().getDefaultRootElement(); Element myline = root.getElement(linenumber - 1); int start = myline.getStartOffset(); int end = myline.getEndOffset(); script_area.select(start, end); } static public String Loc(final String s) { return Global.Loc(s); } /** * In case of errors, it's called at Runtime by JSRun class * @param errormessage */ public void Error(String errormessage) { StringBuffer sb = new StringBuffer(); int errorline = 1; Pattern p = Pattern.compile("\\([^#]*#([0-9]+)\\)", Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(errormessage); if (m.find()) { errorline = Integer.parseInt(m.group(1)) + 1; m.appendReplacement(sb, ""); } else { sb = sb.append(errormessage); } errorpanel.removeAll(); errortitlelabel.setText(" " + Loc("JSerror.title") + " (" + Loc("JSerror.line") + " " + errorline + ") :"); errormessagelabel.setText(sb.toString()); errorpanel.add(errortitlelabel); errorpanel.add(errormessagelabel); errorpanel.revalidate(); errorpanel.repaint(); selectLine(errorline); // script_area.requestFocus(); } public void setTabs(JTextPane textPane, int charactersPerTab) { FontMetrics fm = textPane.getFontMetrics(textPane.getFont()); int charWidth = fm.charWidth('w'); int tabWidth = charWidth * charactersPerTab; TabStop[] tabs = new TabStop[10]; for (int j = 0; j < tabs.length; j++) { int tab = j + 1; tabs[j] = new TabStop(tab * tabWidth); } TabSet tabSet = new TabSet(tabs); Style style = textPane.getLogicalStyle(); StyleConstants.setTabSet(style, tabSet); textPane.setLogicalStyle(style); } private ArrayList braces; private int tabIndent(int carnum) { int priority = 0; int i = 0; while ((i < braces.size()) && (carnum > braces.get(i))) { priority = braces.get(i + 1); i += 2; } // // // // for (int i=0;ibraces.get(i)) { // return braces.get(i+1); // } // } return priority; } private void shiftposition(int lg, int sh) { for (int i = 0; i < braces.size(); i += 2) { if (braces.get(i) > lg) { braces.set(i, braces.get(i) + sh); } } } private String tabs(int t) { String st = ""; for (int i = 0; i < t; i++) { st += "\t"; } return st; } private void indentText() { String alltxt = script_area.getText(); String myline; String newtxt = ""; int length = 0; int linenum = 1; BufferedReader reader = new BufferedReader(new StringReader(alltxt)); try { while ((myline = reader.readLine()) != null) { int tabnb = tabIndent(length); if (myline.matches("^[ \t]*}.*$")) { // System.out.println("line="+linenum); tabnb--; } String newline = myline.replaceAll("^([ \t]*)([^ \t])", tabs(tabnb) + "$2"); int shift = newline.length() - myline.length(); newtxt += newline + "\n"; // System.out.println("line="+(linenum++)+" pos="+length+" indent="+tabs(tabIndent(length))+tabIndent(length)); length += newline.length() + 1; shiftposition(myline.length(), shift); } } catch (IOException e) { e.printStackTrace(); } script_area.setText(newtxt); } private void FindDelimiters() { char openedbrace = "{".charAt(0); char closedbrace = "}".charAt(0); char quotemark = "\"".charAt(0); char backslash = "\\".charAt(0); braces = new ArrayList(); String alltxt = script_area.getText(); boolean inquote = false; char oldcur = 0; char cur = 0; int bracesnum = 0; int oldbracesnum = 0; for (int i = 0; i < alltxt.length(); i++) { oldcur = cur; cur = alltxt.charAt(i); if ((cur == quotemark) && (oldcur != backslash)) { inquote = (!inquote); } if (!inquote) { if (alltxt.charAt(i) == openedbrace) { bracesnum++; braces.add(i); braces.add(bracesnum); oldbracesnum = bracesnum; } else if (alltxt.charAt(i) == closedbrace) { bracesnum--; braces.add(i); braces.add(bracesnum); oldbracesnum = bracesnum; } } } // System.out.println(newtxt); // System.out.println("******"); // for (int i=0; i//GEN-BEGIN:initComponents private void initComponents() { jPanel3 = new myJTitleBar(); macpanel = new javax.swing.JPanel(); title_lbl = new javax.swing.JLabel(); closeBTN = new javax.swing.JButton(); winpanel = new javax.swing.JPanel(); jPanel1 = new javax.swing.JPanel(); LeftBorder = new myJVerticalSeparatorPanel(); jPanel15 = new javax.swing.JPanel(); jPanel2 = new javax.swing.JPanel(); action_buttons = new javax.swing.JPanel(); jPanel6 = new javax.swing.JPanel(); openbtn = new javax.swing.JButton(); jPanel7 = new javax.swing.JPanel(); savebtn = new javax.swing.JButton(); jPanel8 = new javax.swing.JPanel(); savebtn1 = new javax.swing.JButton(); jPanel17 = new javax.swing.JPanel(); jPanel9 = new javax.swing.JPanel(); infilechk = new javax.swing.JCheckBox(); jPanel18 = new javax.swing.JPanel(); openbtn5 = new javax.swing.JButton(); jPanel16 = new javax.swing.JPanel(); openbtn2 = new javax.swing.JButton(); jPanel10 = new javax.swing.JPanel(); backbtn = new javax.swing.JButton(); jPanel11 = new javax.swing.JPanel(); openbtn3 = new javax.swing.JButton(); jPanel12 = new javax.swing.JPanel(); openbtn4 = new javax.swing.JButton(); jPanel4 = new javax.swing.JPanel(); jScrollPane1 = new javax.swing.JScrollPane(); script_area = new javax.swing.JTextPane(); jPanel14 = new javax.swing.JPanel(); commands = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); c_carmetal = new javax.swing.JPanel(); c_js = new javax.swing.JPanel(); jLabel2 = new javax.swing.JLabel(); js_btns = new javax.swing.JPanel(); jScrollPane2 = new javax.swing.JScrollPane(); JSlist = new javax.swing.JList(); RightBorder = new myJVerticalSeparatorPanel(); controls = new myStatusBarPanel(); jPanel13 = new javax.swing.JPanel(); errorpanel = new javax.swing.JPanel(); errortitlelabel = new javax.swing.JLabel(); errormessagelabel = new javax.swing.JLabel(); jButton2 = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setBackground(new java.awt.Color(245, 245, 245)); setUndecorated(true); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { formWindowClosing(evt); } public void windowClosed(java.awt.event.WindowEvent evt) { formWindowClosed(evt); } public void windowActivated(java.awt.event.WindowEvent evt) { formWindowActivated(evt); } public void windowDeactivated(java.awt.event.WindowEvent evt) { formWindowDeactivated(evt); } }); getContentPane().setLayout(new javax.swing.BoxLayout(getContentPane(), javax.swing.BoxLayout.Y_AXIS)); jPanel3.setMaximumSize(new java.awt.Dimension(32767, 25)); jPanel3.setMinimumSize(new java.awt.Dimension(0, 25)); jPanel3.setPreferredSize(new java.awt.Dimension(199, 25)); jPanel3.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { jPanel3MouseDragged(evt); } }); jPanel3.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { jPanel3MousePressed(evt); } }); jPanel3.setLayout(new javax.swing.BoxLayout(jPanel3, javax.swing.BoxLayout.X_AXIS)); macpanel.setAlignmentX(0.0F); macpanel.setEnabled(false); macpanel.setFocusable(false); macpanel.setMaximumSize(new java.awt.Dimension(32767, 25)); macpanel.setMinimumSize(new java.awt.Dimension(0, 25)); macpanel.setOpaque(false); macpanel.setPreferredSize(new java.awt.Dimension(523, 25)); macpanel.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { macpanelMouseDragged(evt); } }); macpanel.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { macpanelMousePressed(evt); } }); macpanel.setLayout(new javax.swing.BoxLayout(macpanel, javax.swing.BoxLayout.X_AXIS)); title_lbl.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); title_lbl.setText("jLabel3"); title_lbl.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); title_lbl.setMaximumSize(new java.awt.Dimension(32767, 32767)); title_lbl.setMinimumSize(new java.awt.Dimension(0, 25)); title_lbl.setPreferredSize(new java.awt.Dimension(45, 25)); macpanel.add(title_lbl); jPanel3.add(macpanel); closeBTN.setIcon(new javax.swing.ImageIcon(getClass().getResource("/eric/GUI/icons/themes/gray/zclosebutton.png"))); // NOI18N closeBTN.setBorder(null); closeBTN.setBorderPainted(false); closeBTN.setContentAreaFilled(false); closeBTN.setFocusPainted(false); closeBTN.setFocusable(false); closeBTN.setMaximumSize(new java.awt.Dimension(25, 30)); closeBTN.setMinimumSize(new java.awt.Dimension(25, 30)); closeBTN.setPreferredSize(new java.awt.Dimension(25, 30)); closeBTN.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/eric/GUI/icons/themes/gray/zclosebuttonover.png"))); // NOI18N closeBTN.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { closeBTNMouseClicked(evt); } }); jPanel3.add(closeBTN); winpanel.setAlignmentX(0.0F); winpanel.setEnabled(false); winpanel.setFocusable(false); winpanel.setMaximumSize(new java.awt.Dimension(32767, 25)); winpanel.setMinimumSize(new java.awt.Dimension(0, 25)); winpanel.setOpaque(false); winpanel.setPreferredSize(new java.awt.Dimension(523, 25)); winpanel.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { winpanelMouseDragged(evt); } }); winpanel.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { winpanelMousePressed(evt); } }); winpanel.setLayout(new javax.swing.BoxLayout(winpanel, javax.swing.BoxLayout.X_AXIS)); jPanel3.add(winpanel); getContentPane().add(jPanel3); jPanel1.setOpaque(false); jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.X_AXIS)); LeftBorder.setMaximumSize(new java.awt.Dimension(5, 32767)); LeftBorder.setMinimumSize(new java.awt.Dimension(5, 0)); LeftBorder.setOpaque(false); LeftBorder.setPreferredSize(new java.awt.Dimension(5, 457)); LeftBorder.setLayout(null); jPanel1.add(LeftBorder); jPanel15.setAlignmentX(0.0F); jPanel15.setMaximumSize(new java.awt.Dimension(3, 1)); jPanel15.setMinimumSize(new java.awt.Dimension(3, 1)); jPanel15.setOpaque(false); jPanel15.setPreferredSize(new java.awt.Dimension(3, 1)); jPanel15.setLayout(new javax.swing.BoxLayout(jPanel15, javax.swing.BoxLayout.LINE_AXIS)); jPanel1.add(jPanel15); jPanel2.setFocusable(false); jPanel2.setOpaque(false); jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.Y_AXIS)); action_buttons.setAlignmentX(0.0F); action_buttons.setAlignmentY(0.0F); action_buttons.setMaximumSize(new java.awt.Dimension(32727, 36)); action_buttons.setMinimumSize(new java.awt.Dimension(370, 36)); action_buttons.setPreferredSize(new java.awt.Dimension(370, 36)); action_buttons.setLayout(new javax.swing.BoxLayout(action_buttons, javax.swing.BoxLayout.X_AXIS)); jPanel6.setFocusable(false); jPanel6.setMaximumSize(new java.awt.Dimension(10, 1)); jPanel6.setMinimumSize(new java.awt.Dimension(10, 1)); jPanel6.setOpaque(false); jPanel6.setPreferredSize(new java.awt.Dimension(10, 1)); action_buttons.add(jPanel6); openbtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/eric/GUI/icons/jswindow/open2.png"))); // NOI18N openbtn.setToolTipText(Loc("JSeditor.open")); openbtn.setBorder(null); openbtn.setContentAreaFilled(false); openbtn.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { openbtnMouseClicked(evt); } }); openbtn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { openbtnActionPerformed(evt); } }); openbtn.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { openbtnKeyPressed(evt); } }); action_buttons.add(openbtn); jPanel7.setFocusable(false); jPanel7.setMaximumSize(new java.awt.Dimension(10, 1)); jPanel7.setMinimumSize(new java.awt.Dimension(10, 1)); jPanel7.setOpaque(false); jPanel7.setPreferredSize(new java.awt.Dimension(10, 1)); action_buttons.add(jPanel7); savebtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/eric/GUI/icons/jswindow/save.png"))); // NOI18N savebtn.setToolTipText(Loc("JSeditor.save")); savebtn.setBorder(null); savebtn.setContentAreaFilled(false); savebtn.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { savebtnMouseClicked(evt); } }); savebtn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { savebtnActionPerformed(evt); } }); savebtn.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { savebtnKeyPressed(evt); } }); action_buttons.add(savebtn); jPanel8.setFocusable(false); jPanel8.setMaximumSize(new java.awt.Dimension(10, 1)); jPanel8.setMinimumSize(new java.awt.Dimension(10, 1)); jPanel8.setOpaque(false); jPanel8.setPreferredSize(new java.awt.Dimension(10, 1)); action_buttons.add(jPanel8); savebtn1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/eric/GUI/icons/jswindow/saveas.png"))); // NOI18N savebtn1.setToolTipText(Loc("JSeditor.saveas")); savebtn1.setBorder(null); savebtn1.setContentAreaFilled(false); savebtn1.setCursor(new java.awt.Cursor(java.awt.Cursor.TEXT_CURSOR)); savebtn1.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { savebtn1MouseClicked(evt); } }); savebtn1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { savebtn1ActionPerformed(evt); } }); savebtn1.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { savebtn1KeyPressed(evt); } }); action_buttons.add(savebtn1); jPanel17.setFocusable(false); jPanel17.setMaximumSize(new java.awt.Dimension(10, 1)); jPanel17.setMinimumSize(new java.awt.Dimension(10, 1)); jPanel17.setOpaque(false); jPanel17.setPreferredSize(new java.awt.Dimension(10, 1)); action_buttons.add(jPanel17); jPanel9.setFocusable(false); jPanel9.setMaximumSize(new java.awt.Dimension(35, 1)); jPanel9.setMinimumSize(new java.awt.Dimension(35, 1)); jPanel9.setOpaque(false); jPanel9.setPreferredSize(new java.awt.Dimension(35, 1)); action_buttons.add(jPanel9); infilechk.setToolTipText(Loc("JSeditor.saveinfig")); infilechk.setIcon(new javax.swing.ImageIcon(getClass().getResource("/eric/GUI/icons/jswindow/fileoff.png"))); // NOI18N infilechk.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/eric/GUI/icons/jswindow/fileon.png"))); // NOI18N infilechk.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { infilechkItemStateChanged(evt); } }); action_buttons.add(infilechk); jPanel18.setFocusable(false); jPanel18.setMaximumSize(new java.awt.Dimension(35, 1)); jPanel18.setMinimumSize(new java.awt.Dimension(35, 1)); jPanel18.setOpaque(false); jPanel18.setPreferredSize(new java.awt.Dimension(35, 1)); action_buttons.add(jPanel18); openbtn5.setIcon(new javax.swing.ImageIcon(getClass().getResource("/eric/GUI/icons/jswindow/comment.png"))); // NOI18N openbtn5.setToolTipText(Loc("JSEditor.comment")); openbtn5.setBorder(null); openbtn5.setContentAreaFilled(false); openbtn5.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { openbtn5ActionPerformed(evt); } }); openbtn5.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { openbtn5KeyPressed(evt); } }); openbtn5.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { openbtn5MouseClicked(evt); } }); action_buttons.add(openbtn5); jPanel16.setFocusable(false); jPanel16.setMaximumSize(new java.awt.Dimension(10, 1)); jPanel16.setMinimumSize(new java.awt.Dimension(10, 1)); jPanel16.setOpaque(false); jPanel16.setPreferredSize(new java.awt.Dimension(10, 1)); action_buttons.add(jPanel16); openbtn2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/eric/GUI/icons/jswindow/format.png"))); // NOI18N openbtn2.setToolTipText(Loc("JSeditor.format")); openbtn2.setBorder(null); openbtn2.setContentAreaFilled(false); openbtn2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { openbtn2ActionPerformed(evt); } }); openbtn2.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { openbtn2KeyPressed(evt); } }); openbtn2.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { openbtn2MouseClicked(evt); } }); action_buttons.add(openbtn2); jPanel10.setFocusable(false); jPanel10.setMaximumSize(new java.awt.Dimension(10, 1)); jPanel10.setMinimumSize(new java.awt.Dimension(10, 1)); jPanel10.setOpaque(false); jPanel10.setPreferredSize(new java.awt.Dimension(10, 1)); action_buttons.add(jPanel10); backbtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/eric/GUI/icons/jswindow/restore.png"))); // NOI18N backbtn.setToolTipText(Loc("JSeditor.restore")); backbtn.setBorder(null); backbtn.setContentAreaFilled(false); backbtn.setEnabled(false); backbtn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { backbtnActionPerformed(evt); } }); backbtn.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { backbtnKeyPressed(evt); } }); backbtn.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { backbtnMouseClicked(evt); } }); action_buttons.add(backbtn); jPanel11.setFocusable(false); jPanel11.setMaximumSize(new java.awt.Dimension(10, 1)); jPanel11.setMinimumSize(new java.awt.Dimension(10, 1)); jPanel11.setOpaque(false); jPanel11.setPreferredSize(new java.awt.Dimension(10, 1)); action_buttons.add(jPanel11); openbtn3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/eric/GUI/icons/jswindow/run.png"))); // NOI18N openbtn3.setToolTipText(Loc("JSeditor.run")); openbtn3.setBorder(null); openbtn3.setContentAreaFilled(false); openbtn3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { openbtn3ActionPerformed(evt); } }); openbtn3.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { openbtn3KeyPressed(evt); } }); openbtn3.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { openbtn3MouseClicked(evt); } }); action_buttons.add(openbtn3); jPanel12.setFocusable(false); jPanel12.setMaximumSize(new java.awt.Dimension(35, 1)); jPanel12.setMinimumSize(new java.awt.Dimension(35, 1)); jPanel12.setOpaque(false); jPanel12.setPreferredSize(new java.awt.Dimension(35, 1)); action_buttons.add(jPanel12); openbtn4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/eric/GUI/icons/jswindow/help.png"))); // NOI18N openbtn4.setToolTipText(Loc("JSeditor.help")); openbtn4.setBorder(null); openbtn4.setContentAreaFilled(false); openbtn4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { openbtn4ActionPerformed(evt); } }); openbtn4.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { openbtn4KeyPressed(evt); } }); openbtn4.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { openbtn4MouseClicked(evt); } }); action_buttons.add(openbtn4); jPanel2.add(action_buttons); jPanel4.setAlignmentX(0.0F); jPanel4.setAlignmentY(0.0F); jPanel4.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); jPanel4.setOpaque(false); jPanel4.setLayout(new javax.swing.BoxLayout(jPanel4, javax.swing.BoxLayout.X_AXIS)); jScrollPane1.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); jScrollPane1.setOpaque(false); script_area.setFont(new java.awt.Font("Monospaced", 0, 12)); // NOI18N script_area.setCursor(new java.awt.Cursor(java.awt.Cursor.TEXT_CURSOR)); script_area.addKeyListener(new java.awt.event.KeyAdapter() { public void keyTyped(java.awt.event.KeyEvent evt) { script_areaKeyTyped(evt); } public void keyPressed(java.awt.event.KeyEvent evt) { script_areaKeyPressed(evt); } public void keyReleased(java.awt.event.KeyEvent evt) { script_areaKeyReleased(evt); } }); script_area.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { script_areaMouseClicked(evt); } }); jScrollPane1.setViewportView(script_area); jPanel4.add(jScrollPane1); jPanel2.add(jPanel4); jPanel14.setAlignmentX(0.0F); jPanel14.setMaximumSize(new java.awt.Dimension(1, 2)); jPanel14.setMinimumSize(new java.awt.Dimension(1, 2)); jPanel14.setOpaque(false); jPanel14.setPreferredSize(new java.awt.Dimension(1, 2)); jPanel14.setLayout(new javax.swing.BoxLayout(jPanel14, javax.swing.BoxLayout.LINE_AXIS)); jPanel2.add(jPanel14); jPanel1.add(jPanel2); commands.setBackground(new java.awt.Color(204, 204, 255)); commands.setFocusable(false); commands.setMaximumSize(new java.awt.Dimension(182, 98397)); commands.setMinimumSize(new java.awt.Dimension(182, 0)); commands.setOpaque(false); commands.setPreferredSize(new java.awt.Dimension(182, 457)); commands.setLayout(new javax.swing.BoxLayout(commands, javax.swing.BoxLayout.Y_AXIS)); jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel1.setText("CaRMetal"); jLabel1.setAlignmentX(0.5F); jLabel1.setEnabled(false); jLabel1.setFocusable(false); jLabel1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); jLabel1.setIconTextGap(0); jLabel1.setMaximumSize(new java.awt.Dimension(182, 25)); jLabel1.setMinimumSize(new java.awt.Dimension(182, 25)); jLabel1.setPreferredSize(new java.awt.Dimension(182, 25)); jLabel1.setRequestFocusEnabled(false); jLabel1.setVerifyInputWhenFocusTarget(false); commands.add(jLabel1); c_carmetal.setMaximumSize(new java.awt.Dimension(182, 32000)); c_carmetal.setMinimumSize(new java.awt.Dimension(182, 100)); c_carmetal.setOpaque(false); c_carmetal.setPreferredSize(new java.awt.Dimension(182, 200)); c_carmetal.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 3, 3)); commands.add(c_carmetal); c_js.setMaximumSize(new java.awt.Dimension(182, 217)); c_js.setMinimumSize(new java.awt.Dimension(182, 217)); c_js.setOpaque(false); c_js.setPreferredSize(new java.awt.Dimension(182, 217)); c_js.setLayout(new javax.swing.BoxLayout(c_js, javax.swing.BoxLayout.Y_AXIS)); jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel2.setText("Javascript"); jLabel2.setAlignmentX(0.5F); jLabel2.setEnabled(false); jLabel2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); jLabel2.setIconTextGap(0); jLabel2.setMaximumSize(new java.awt.Dimension(182, 25)); jLabel2.setMinimumSize(new java.awt.Dimension(182, 25)); jLabel2.setPreferredSize(new java.awt.Dimension(182, 25)); jLabel2.setRequestFocusEnabled(false); jLabel2.setVerifyInputWhenFocusTarget(false); c_js.add(jLabel2); js_btns.setMaximumSize(new java.awt.Dimension(182, 90)); js_btns.setMinimumSize(new java.awt.Dimension(182, 90)); js_btns.setOpaque(false); js_btns.setPreferredSize(new java.awt.Dimension(182, 90)); js_btns.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 3, 3)); c_js.add(js_btns); jScrollPane2.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jScrollPane2.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); jScrollPane2.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); jScrollPane2.setAutoscrolls(true); jScrollPane2.setFont(new java.awt.Font("Lucida Grande", 0, 12)); jScrollPane2.setMaximumSize(new java.awt.Dimension(160, 100)); jScrollPane2.setMinimumSize(new java.awt.Dimension(160, 100)); jScrollPane2.setPreferredSize(new java.awt.Dimension(160, 100)); JSlist.setBackground(new java.awt.Color(214, 221, 229)); JSlist.setModel(new javax.swing.AbstractListModel() { String[] strings = { "Input()", "Print()", "Println()", "Alert()", "Pause()", "if() {...} else {...}", "for() {...}", "while() {...}", "do {...} while()", "function {...}" }; public int getSize() { return strings.length; } public Object getElementAt(int i) { return strings[i]; } }); JSlist.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); JSlist.setAutoscrolls(false); JSlist.setFixedCellHeight(20); JSlist.setFocusable(false); JSlist.setMaximumSize(new java.awt.Dimension(160, 32767)); JSlist.setMinimumSize(new java.awt.Dimension(160, 20)); JSlist.setPreferredSize(new java.awt.Dimension(160, 200)); JSlist.setVisibleRowCount(-1); JSlist.addListSelectionListener(new javax.swing.event.ListSelectionListener() { public void valueChanged(javax.swing.event.ListSelectionEvent evt) { JSlistValueChanged(evt); } }); jScrollPane2.setViewportView(JSlist); c_js.add(jScrollPane2); commands.add(c_js); jPanel1.add(commands); RightBorder.setMaximumSize(new java.awt.Dimension(5, 32767)); RightBorder.setMinimumSize(new java.awt.Dimension(5, 0)); RightBorder.setPreferredSize(new java.awt.Dimension(5, 457)); RightBorder.setLayout(null); jPanel1.add(RightBorder); getContentPane().add(jPanel1); controls.setMaximumSize(new java.awt.Dimension(32000, 22)); controls.setMinimumSize(new java.awt.Dimension(35, 22)); controls.setPreferredSize(new java.awt.Dimension(35, 22)); controls.setLayout(new javax.swing.BoxLayout(controls, javax.swing.BoxLayout.X_AXIS)); jPanel13.setAlignmentX(0.0F); jPanel13.setAlignmentY(0.0F); jPanel13.setMaximumSize(new java.awt.Dimension(10, 1)); jPanel13.setMinimumSize(new java.awt.Dimension(10, 1)); jPanel13.setOpaque(false); jPanel13.setPreferredSize(new java.awt.Dimension(10, 1)); controls.add(jPanel13); errorpanel.setAlignmentX(0.0F); errorpanel.setAlignmentY(0.0F); errorpanel.setMaximumSize(new java.awt.Dimension(32737, 32737)); errorpanel.setMinimumSize(new java.awt.Dimension(0, 30)); errorpanel.setOpaque(false); errorpanel.setPreferredSize(new java.awt.Dimension(0, 30)); errorpanel.setLayout(new javax.swing.BoxLayout(errorpanel, javax.swing.BoxLayout.X_AXIS)); errortitlelabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/eric/GUI/icons/jswindow/error.png"))); // NOI18N errortitlelabel.setText("Error"); errortitlelabel.setAlignmentY(0.0F); errortitlelabel.setIconTextGap(10); errortitlelabel.setMaximumSize(new java.awt.Dimension(250, 30)); errortitlelabel.setMinimumSize(new java.awt.Dimension(250, 30)); errortitlelabel.setPreferredSize(new java.awt.Dimension(250, 30)); errorpanel.add(errortitlelabel); errormessagelabel.setForeground(new java.awt.Color(102, 102, 102)); errormessagelabel.setText("Error message"); errormessagelabel.setAlignmentY(0.0F); errormessagelabel.setMaximumSize(new java.awt.Dimension(10000, 30)); errormessagelabel.setMinimumSize(new java.awt.Dimension(300, 30)); errormessagelabel.setPreferredSize(new java.awt.Dimension(300, 30)); errorpanel.add(errormessagelabel); controls.add(errorpanel); jButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/eric/GUI/icons/themes/gray/zoombox.png"))); // NOI18N jButton2.setAlignmentY(0.0F); jButton2.setBorderPainted(false); jButton2.setContentAreaFilled(false); jButton2.setMaximumSize(new java.awt.Dimension(25, 30)); jButton2.setMinimumSize(new java.awt.Dimension(25, 30)); jButton2.setPreferredSize(new java.awt.Dimension(25, 30)); jButton2.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { jButton2MouseDragged(evt); } }); jButton2.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { jButton2MousePressed(evt); } public void mouseClicked(java.awt.event.MouseEvent evt) { jButton2MouseClicked(evt); } }); controls.add(jButton2); getContentPane().add(controls); pack(); }// //GEN-END:initComponents private void script_areaKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_script_areaKeyReleased // syntaxColoring(); // TODO add your handling code here: // if (evt.getKeyCode()==KeyEvent.VK_ENTER) { // FindDelimiters(); // int c=script_area.getCaretPosition(); // int t=tabIndent(c); // script_area.replaceSelection(tabs(t)); // //// script_area.setCaretPosition(c-t); // } }//GEN-LAST:event_script_areaKeyReleased private void script_areaKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_script_areaKeyPressed // TODO add your handling code here: NoTypeNoClic = false; // errorpanel.removeAll(); }//GEN-LAST:event_script_areaKeyPressed private void script_areaKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_script_areaKeyTyped // errorpanel.removeAll(); // TODO add your handling code here: clearStatusBar(); }//GEN-LAST:event_script_areaKeyTyped private void script_areaMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_script_areaMouseClicked NoTypeNoClic = false; // TODO add your handling code here: clearStatusBar(); }//GEN-LAST:event_script_areaMouseClicked private void closeBTNMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_closeBTNMouseClicked if (cancelSaveChanges()) { return; } JSRun.clear(); dispose(); }//GEN-LAST:event_closeBTNMouseClicked private void macpanelMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_macpanelMousePressed origin = MouseInfo.getPointerInfo().getLocation(); winloc = getLocation(); // TODO add your handling code here: }//GEN-LAST:event_macpanelMousePressed private void jPanel3MousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jPanel3MousePressed origin = MouseInfo.getPointerInfo().getLocation(); winloc = getLocation(); // TODO add your handling code here: }//GEN-LAST:event_jPanel3MousePressed private void jPanel3MouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jPanel3MouseDragged current = MouseInfo.getPointerInfo().getLocation(); xx = winloc.x + current.x - origin.x; yy = winloc.y + current.y - origin.y; setLocation(xx, yy); Toolkit.getDefaultToolkit().sync(); // TODO add your handling code here: }//GEN-LAST:event_jPanel3MouseDragged private void macpanelMouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_macpanelMouseDragged current = MouseInfo.getPointerInfo().getLocation(); xx = winloc.x + current.x - origin.x; yy = winloc.y + current.y - origin.y; setLocation(xx, yy); Toolkit.getDefaultToolkit().sync(); // TODO add your handling code here: }//GEN-LAST:event_macpanelMouseDragged private void winpanelMouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_winpanelMouseDragged current = MouseInfo.getPointerInfo().getLocation(); xx = winloc.x + current.x - origin.x; yy = winloc.y + current.y - origin.y; setLocation(xx, yy); Toolkit.getDefaultToolkit().sync(); // TODO add your handling code here: }//GEN-LAST:event_winpanelMouseDragged private void winpanelMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_winpanelMousePressed origin = MouseInfo.getPointerInfo().getLocation(); winloc = getLocation(); // TODO add your handling code here: }//GEN-LAST:event_winpanelMousePressed private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton2MouseClicked // TODO add your handling code here: }//GEN-LAST:event_jButton2MouseClicked private void jButton2MousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton2MousePressed origin = MouseInfo.getPointerInfo().getLocation(); winloc = getLocation(); w = this.getWidth(); h = this.getHeight(); // TODO add your handling code here: }//GEN-LAST:event_jButton2MousePressed private void jButton2MouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton2MouseDragged current = MouseInfo.getPointerInfo().getLocation(); setSize(current.x - origin.x + w, current.y - origin.y + h); Toolkit.getDefaultToolkit().sync(); // TODO add your handling code here: }//GEN-LAST:event_jButton2MouseDragged private void JSlistValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_JSlistValueChanged if (evt.getValueIsAdjusting() == false) { int sel = JSlist.getSelectedIndex(); JSlist.removeSelectionInterval(sel, sel); if (sel == 0) { script_area.replaceSelection("a=Input(\"" + Loc("JScmd.inputmessage") + "\");"); } else if (sel == 1) { script_area.replaceSelection("Print(\"" + Loc("JScmd.promptmessage") + "\");"); } else if (sel == 2) { script_area.replaceSelection("Println(\"" + Loc("JScmd.promptmessage") + "\");"); } else if (sel == 3) { script_area.replaceSelection("Alert(\"" + Loc("JScmd.promptmessage") + "\");"); } else if (sel == 4) { script_area.replaceSelection("Pause(1000);"); } else if (sel == 5) { script_area.replaceSelection("if (i<20){\n\n} else {\n\n}"); } else if (sel == 6) { script_area.replaceSelection("for (i=0; i<20; i=i+1){\n\n}"); } else if (sel == 7) { script_area.replaceSelection("while (i<20){\ni=i+1\n}\n"); } else if (sel == 8) { script_area.replaceSelection("do{\ni=i+1\n\n}while (i<20)\n"); } else if (sel == 9) { script_area.replaceSelection("function myfunction(i){\n\n}"); } Format(); script_area.requestFocus(); } // TODO add your handling code here: }//GEN-LAST:event_JSlistValueChanged private void formWindowClosed(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosed JSRun.JSC = null; // TODO add your handling code here: }//GEN-LAST:event_formWindowClosed private void formWindowActivated(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowActivated // System.out.println("activated"); // TODO add your handling code here: }//GEN-LAST:event_formWindowActivated private void formWindowDeactivated(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowDeactivated // System.out.println("déactivated"); // TODO add your handling code here: }//GEN-LAST:event_formWindowDeactivated private void openbtnKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_openbtnKeyPressed // TODO add your handling code here: }//GEN-LAST:event_openbtnKeyPressed private void openbtnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_openbtnMouseClicked // TODO add your handling code here: clearStatusBar(); if (cancelSaveChanges()) { return; } JSRun.openScriptFile("", true); }//GEN-LAST:event_openbtnMouseClicked private void openbtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openbtnActionPerformed // TODO add your handling code here: }//GEN-LAST:event_openbtnActionPerformed private void savebtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_savebtnActionPerformed // TODO add your handling code here: }//GEN-LAST:event_savebtnActionPerformed private void savebtnKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_savebtnKeyPressed // TODO add your handling code here: }//GEN-LAST:event_savebtnKeyPressed private void savebtnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_savebtnMouseClicked // TODO add your handling code here: clearStatusBar(); JSRun.saveScript(script_area.getText(), false); }//GEN-LAST:event_savebtnMouseClicked private void backbtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_backbtnActionPerformed // TODO add your handling code here: }//GEN-LAST:event_backbtnActionPerformed private void backbtnKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_backbtnKeyPressed // TODO add your handling code here: }//GEN-LAST:event_backbtnKeyPressed private void backbtnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_backbtnMouseClicked // TODO add your handling code here: clearStatusBar(); JSRun.restore(); }//GEN-LAST:event_backbtnMouseClicked private void openbtn2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openbtn2ActionPerformed // TODO add your handling code here: }//GEN-LAST:event_openbtn2ActionPerformed private void openbtn2KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_openbtn2KeyPressed // TODO add your handling code here: }//GEN-LAST:event_openbtn2KeyPressed private void openbtn2MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_openbtn2MouseClicked // TODO add your handling code here: clearStatusBar(); Format(); syntaxColoring(); }//GEN-LAST:event_openbtn2MouseClicked private void openbtn3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openbtn3ActionPerformed // TODO add your handling code here: }//GEN-LAST:event_openbtn3ActionPerformed private void openbtn3KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_openbtn3KeyPressed // TODO add your handling code here: }//GEN-LAST:event_openbtn3KeyPressed private void openbtn3MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_openbtn3MouseClicked // TODO add your handling code here: clearStatusBar(); JSRun.runScript(script_area.getText()); }//GEN-LAST:event_openbtn3MouseClicked private void openbtn4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openbtn4ActionPerformed // TODO add your handling code here: }//GEN-LAST:event_openbtn4ActionPerformed private void openbtn4KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_openbtn4KeyPressed // TODO add your handling code here: }//GEN-LAST:event_openbtn4KeyPressed private void openbtn4MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_openbtn4MouseClicked // TODO add your handling code here: // setAlwaysOnTop(true); JBrowserLauncher.openURL("http://db-maths.nuxit.net/CaRMetal/carJSdoc/index.html"); //setAlwaysOnTop(false); toFront(); }//GEN-LAST:event_openbtn4MouseClicked private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing // TODO add your handling code here: }//GEN-LAST:event_formWindowClosing private void openbtn5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openbtn5ActionPerformed // TODO add your handling code here: }//GEN-LAST:event_openbtn5ActionPerformed private void openbtn5KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_openbtn5KeyPressed // TODO add your handling code here: }//GEN-LAST:event_openbtn5KeyPressed private void openbtn5MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_openbtn5MouseClicked // TODO add your handling code here: commentSelection(); }//GEN-LAST:event_openbtn5MouseClicked private void savebtn1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_savebtn1MouseClicked // TODO add your handling code here: }//GEN-LAST:event_savebtn1MouseClicked private void savebtn1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_savebtn1ActionPerformed clearStatusBar(); JSRun.saveScript(script_area.getText(), true); // TODO add your handling code here: }//GEN-LAST:event_savebtn1ActionPerformed private void savebtn1KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_savebtn1KeyPressed // TODO add your handling code here: }//GEN-LAST:event_savebtn1KeyPressed private void infilechkItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_infilechkItemStateChanged if (infilechk.isSelected()) { JSRun.saveScriptInConstruction(); } else { JSRun.removeScriptFromConstruction(); } }//GEN-LAST:event_infilechkItemStateChanged /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new JSConsole().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JList JSlist; private javax.swing.JPanel LeftBorder; private javax.swing.JPanel RightBorder; private javax.swing.JPanel action_buttons; private javax.swing.JButton backbtn; private javax.swing.JPanel c_carmetal; private javax.swing.JPanel c_js; private javax.swing.JButton closeBTN; private javax.swing.JPanel commands; private javax.swing.JPanel controls; private javax.swing.JLabel errormessagelabel; private javax.swing.JPanel errorpanel; private javax.swing.JLabel errortitlelabel; private javax.swing.JCheckBox infilechk; private javax.swing.JButton jButton2; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel10; private javax.swing.JPanel jPanel11; private javax.swing.JPanel jPanel12; private javax.swing.JPanel jPanel13; private javax.swing.JPanel jPanel14; private javax.swing.JPanel jPanel15; private javax.swing.JPanel jPanel16; private javax.swing.JPanel jPanel17; private javax.swing.JPanel jPanel18; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanel4; private javax.swing.JPanel jPanel6; private javax.swing.JPanel jPanel7; private javax.swing.JPanel jPanel8; private javax.swing.JPanel jPanel9; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JPanel js_btns; private javax.swing.JPanel macpanel; private javax.swing.JButton openbtn; private javax.swing.JButton openbtn2; private javax.swing.JButton openbtn3; private javax.swing.JButton openbtn4; private javax.swing.JButton openbtn5; private javax.swing.JButton savebtn; private javax.swing.JButton savebtn1; private javax.swing.JTextPane script_area; private javax.swing.JLabel title_lbl; private javax.swing.JPanel winpanel; // End of variables declaration//GEN-END:variables } ./src/eric/JSprogram/ScriptPanel.java0000644000175000017500000001076111352061025016455 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.JSprogram; import eric.GUI.themes; import eric.GUI.window.myJMenuItem; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.Vector; import javax.swing.JMenu; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JSeparator; import rene.gui.Global; import rene.util.xml.XmlTree; import rene.zirkel.ZirkelCanvas; /** * * @author erichake */ public class ScriptPanel extends JPanel implements MouseListener { private ZirkelCanvas ZC; private Vector items=new Vector(); private static Image icon=themes.getImage("scripts.png"); private int W=32, H=32, X=10, Y=10; public void paintComponent(Graphics g) { g.drawImage(icon, 0, 0, W, H, this); } public ScriptPanel(ZirkelCanvas zc) { ZC=zc; setBounds(X, Y, W, H); addMouseListener(this); } public void showPopup() { JPopupMenu popup=new JPopupMenu(); // add Cancel Item : myJMenuItem item=new myJMenuItem(Global.Loc("JSmenu.cancel")) { @Override public void action() { JSRun.restore(); } }; item.setEnabled(JSRun.isBackup()); popup.add(item); item=new myJMenuItem(Global.Loc("JSmenu.add")) { @Override public void action() { JSRun.newScriptInConstruction(); } }; popup.add(item); popup.add(new JSeparator()); // add Run script items : for (int i=0; i getScripts() { return items; } public void removeScript(ScriptItem si) { ZC.getConstruction().haveChanged(); items.remove(si); if (items.size()==0) { ZC.remove(this); ZC.repaint(); } } public void addScript(XmlTree tree) { items.add(new ScriptItem(tree)); // at first added script, button must be drawn in the canvas : if (items.size()==1) { ZC.add(this); } } private ScriptItem findScript(String nme) { for (int i=0; i. */ package eric.JSprogram; import java.awt.Dimension; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JTextPane; import javax.swing.plaf.metal.MetalComboBoxUI; public class JSIcon extends JSButton { /** * */ String NAME; String CODE; ArrayList PATTERNS=new ArrayList(); ArrayList STRS=new ArrayList(); ArrayList VARS=new ArrayList(); ArrayList CONST=new ArrayList(); ArrayList EXEMPLES=new ArrayList(); JSConsole JSC; private static final String REGEX_NUMERIC="(((?<=[-+*/(])|(?<=^))-)?\\d+(\\.\\d+)?"; private static final String REGEX_VARIABLE="\\$[a-zA-Z][a-zA-Z0-9]*"; public static final String REGEX_OPERATION="[a-zA-Z][a-zA-Z0-9]+|[-*/+|?:@&^<>'`=%#]"; private static final String REGEX_PARANTHESIS="[()]"; // private JPanel JPN=new JPanel(); private void fixsize(final int sze) { final Dimension d=new Dimension(sze, sze); this.setMaximumSize(d); this.setMinimumSize(d); this.setPreferredSize(d); this.setSize(d); } // Create an Icon wich belongs to group (if not null) : // public JSIcon(final JSConsole jsc, final String nm, String[] codes) { public JSIcon(JSConsole jsc, String name, String code) { super(name, 24, !code.equals("")); JSC=jsc; NAME=name; CODE=code; this.addMouseListener(new MouseAdapter() { public void mousePressed(final MouseEvent e) { if (!isDisabled) { JSC.clearStatusBar(); if (e.getButton()!=MouseEvent.BUTTON3) { ClicOnMe(); } JSC.NoTypeNoClic(); } } }); interpret(); } @Override public String getName() { return NAME; } private int[] t; private int[] T; private void interpret() { // exemple : =Point(,,); StringBuffer sb=new StringBuffer(); Pattern p=Pattern.compile("<(\\w+[,\\w]*)>", Pattern.CASE_INSENSITIVE); Matcher m=p.matcher(CODE); while (m.find()) { VARS.add(m.group(1).split(",")); m.appendReplacement(sb, "@@@@"); } m.appendTail(sb); m.reset(); String result=" "+sb.toString()+" "; String[] c=result.split("@@@@"); for (int i=0; i", Pattern.CASE_INSENSITIVE); Matcher m=p.matcher((String) EXEMPLES.get(i)); if (m.find()) { String[] c=m.group(1).split(","); m.appendReplacement(sb, "@@@@"); m.appendTail(sb); String myex=sb.toString(); for (int k=0; k0)) { T[i]=0; i=i-1; } if (T[i]1) { // st=(String) EXEMPLES.get(0); // } JSC.addToScript(exemple(0)); // String st=""; // // // // for (int i=0; i * JTextArea ta = new JTextArea(); * ta.setLineWrap(true); * ta.setWrapStyleWord(true); * JScrollPane sp = new JScrollPane(ta); * sp.setRowHeaderView(new LineNumberView(ta)); * * * @author Alan Moore */ public class LineNumberView extends JComponent { // This is for the border to the right of the line numbers. // There's probably a UIDefaults value that could be used for this. private static final Color BORDER_COLOR = Color.GRAY; private final static Color DEFAULT_BACKGROUND = new Color(214, 221, 229); private final static Color DEFAULT_FOREGROUND = Color.black; private static final int WIDTH_TEMPLATE = 99999; private static final int MARGIN = 2; private FontMetrics viewFontMetrics; private int maxNumberWidth; private int componentWidth; private int textTopInset; private int textFontAscent; private int textFontHeight; private JTextComponent text; private SizeSequence sizes; private int startLine = 0; private boolean structureChanged = true; /** * Construct a LineNumberView and attach it to the given text component. * The LineNumberView will listen for certain kinds of events from the * text component and update itself accordingly. * * @param startLine the line that changed, if there's only one * @param structureChanged if true, ignore the line number and * update all the line heights. */ public LineNumberView(JTextComponent text) { if (text == null) { throw new IllegalArgumentException("Text component cannot be null"); } this.text = text; updateCachedMetrics(); UpdateHandler handler = new UpdateHandler(); text.getDocument().addDocumentListener(handler); text.addPropertyChangeListener(handler); text.addComponentListener(handler); // setBorder(BorderFactory.createMatteBorder(0, 0, 0, 1, BORDER_COLOR)); setBorder(BorderFactory.createEmptyBorder()); setBackground(DEFAULT_BACKGROUND); } /** * Schedule a repaint because one or more line heights may have changed. * * @param startLine the line that changed, if there's only one * @param structureChanged if true, ignore the line number and * update all the line heights. */ private void viewChanged(int startLine, boolean structureChanged) { this.startLine = startLine; this.structureChanged = structureChanged; revalidate(); repaint(); } /** Update the line heights as needed. */ private void updateSizes() { if (startLine < 0) { return; } if (structureChanged) { int count = getAdjustedLineCount(); sizes = new SizeSequence(count); for (int i = 0; i < count; i++) { sizes.setSize(i, getLineHeight(i)); } structureChanged = false; } else { sizes.setSize(startLine, getLineHeight(startLine)); } startLine = -1; } /* Copied from javax.swing.text.PlainDocument */ private int getAdjustedLineCount() { // There is an implicit break being modeled at the end of the // document to deal with boundary conditions at the end. This // is not desired in the line count, so we detect it and remove // its effect if throwing off the count. Element map = text.getDocument().getDefaultRootElement(); int n = map.getElementCount(); Element lastLine = map.getElement(n - 1); if ((lastLine.getEndOffset() - lastLine.getStartOffset()) > 1) { return n; } return n - 1; } /** * Get the height of a line from the JTextComponent. * * @param index the line number * @param the height, in pixels */ private int getLineHeight(int index) { int lastPos = sizes.getPosition(index) + textTopInset; int height = textFontHeight; try { Element map = text.getDocument().getDefaultRootElement(); int lastChar = map.getElement(index).getEndOffset() - 1; Rectangle r = text.modelToView(lastChar); height = (r.y - lastPos) + r.height; } catch (BadLocationException ex) { ex.printStackTrace(); } return height; } /** * Cache some values that are used a lot in painting or size * calculations. Also ensures that the line-number font is not * larger than the text component's font (by point-size, anyway). */ private void updateCachedMetrics() { Font textFont = text.getFont(); FontMetrics fm = getFontMetrics(textFont); textFontHeight = fm.getHeight(); textFontAscent = fm.getAscent(); textTopInset = text.getInsets().top; Font viewFont = getFont(); boolean changed = false; if (viewFont == null) { viewFont = UIManager.getFont("Label.font"); changed = true; } if (viewFont.getSize() > textFont.getSize()) { viewFont = viewFont.deriveFont(textFont.getSize2D()); changed = true; } viewFontMetrics = getFontMetrics(viewFont); maxNumberWidth = viewFontMetrics.stringWidth(String.valueOf(WIDTH_TEMPLATE))-10; componentWidth = 2 * MARGIN + maxNumberWidth; if (changed) { super.setFont(viewFont); } } public Dimension getPreferredSize() { return new Dimension(componentWidth, text.getHeight()); } public void setFont(Font font) { super.setFont(font); updateCachedMetrics(); } public void paintComponent(Graphics g) { updateSizes(); Rectangle clip = g.getClipBounds(); g.setColor(getBackground()); g.fillRect(clip.x, clip.y, clip.width, clip.height); g.setColor(getForeground()); int base = clip.y - textTopInset; int first = sizes.getIndex(base); int last = sizes.getIndex(base + clip.height); String text = ""; for (int i = first; i <= last; i++) { text = String.valueOf(i+1); int x = MARGIN + maxNumberWidth - viewFontMetrics.stringWidth(text); int y = sizes.getPosition(i) + textFontAscent + textTopInset; g.drawString(text, x, y); } } class UpdateHandler extends ComponentAdapter implements PropertyChangeListener, DocumentListener { /** * The text component was resized. 'Nuff said. */ public void componentResized(ComponentEvent evt) { viewChanged(0, true); } /** * A bound property was changed on the text component. Properties * like the font, border, and tab size affect the layout of the * whole document, so we invalidate all the line heights here. */ public void propertyChange(PropertyChangeEvent evt) { Object oldValue = evt.getOldValue(); Object newValue = evt.getNewValue(); String propertyName = evt.getPropertyName(); if ("document".equals(propertyName)) { if (oldValue != null && oldValue instanceof Document) { ((Document)oldValue).removeDocumentListener(this); } if (newValue != null && newValue instanceof Document) { ((Document)newValue).addDocumentListener(this); } } updateCachedMetrics(); viewChanged(0, true); } /** * Text was inserted into the document. */ public void insertUpdate(DocumentEvent evt) { update(evt); } /** * Text was removed from the document. */ public void removeUpdate(DocumentEvent evt) { update(evt); } /** * Text attributes were changed. In a source-code editor based on * StyledDocument, attribute changes should be applied automatically * in response to inserts and removals. Since we're already * listening for those, this method should be redundant, but YMMV. */ public void changedUpdate(DocumentEvent evt) { // update(evt); } /** * If the edit was confined to a single line, invalidate that * line's height. Otherwise, invalidate them all. */ private void update(DocumentEvent evt) { Element map = text.getDocument().getDefaultRootElement(); int line = map.getElementIndex(evt.getOffset()); DocumentEvent.ElementChange ec = evt.getChange(map); viewChanged(line, ec != null); } } }./src/eric/JSprogram/.DS_Store0000644000175000017500000001400411337725244015060 0ustar yvesyvesBud1%  @ @ @ @ E%DSDB` @ @ @./src/eric/JSprogram/LineNumber.java0000644000175000017500000001167611337712575016317 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.JSprogram; //package text; import java.awt.*; import javax.swing.*; import javax.swing.border.*; import javax.swing.text.*; public class LineNumber extends JComponent { // private final static Color DEFAULT_BACKGROUND = new Color(235, 230, 225); private final static Color DEFAULT_BACKGROUND = new Color(214, 221, 229); private final static Color DEFAULT_FOREGROUND = Color.black; private final static Font DEFAULT_FONT = new Font("monospaced", Font.PLAIN, 12); // LineNumber height (abends when I use MAX_VALUE) private final static int HEIGHT = Integer.MAX_VALUE - 1000000; // Set right/left margin private final static int MARGIN = 5; // Variables for this LineNumber component private FontMetrics fontMetrics; private int lineHeight; private int currentDigits; // Metrics of the component used in the constructor private JComponent component; private int componentFontHeight; private int componentFontAscent; /** * Convenience constructor for Text Components */ public LineNumber(JComponent component) { if (component == null) { setFont( DEFAULT_FONT ); this.component = this; } else { setFont( component.getFont() ); this.component = component; } setBackground( DEFAULT_BACKGROUND ); setForeground( DEFAULT_FOREGROUND ); setPreferredWidth( 99 ); } /** * Calculate the width needed to display the maximum line number */ public void setPreferredWidth(int lines) { int digits = String.valueOf(lines).length(); // Update sizes when number of digits in the line number changes if (digits != currentDigits && digits > 1) { currentDigits = digits; int width = fontMetrics.charWidth( '0' ) * digits; Dimension d = getPreferredSize(); d.setSize(2 * MARGIN + width, HEIGHT); setPreferredSize( d ); setSize( d ); } } /** * Reset variables that are dependent on the font. */ public void setFont(Font font) { super.setFont(font); fontMetrics = getFontMetrics( getFont() ); componentFontHeight = fontMetrics.getHeight(); componentFontAscent = fontMetrics.getAscent(); } /** * The line height defaults to the line height of the font for this * component. */ public int getLineHeight() { if (lineHeight == 0) return componentFontHeight; else return lineHeight; } /** * Override the default line height with a positive value. * For example, when you want line numbers for a JTable you could * use the JTable row height. */ public void setLineHeight(int lineHeight) { if (lineHeight > 0) this.lineHeight = lineHeight; } public int getStartOffset() { return component.getInsets().top + componentFontAscent; } public void paintComponent(Graphics g) { int lineHeight = getLineHeight(); int startOffset = getStartOffset(); Rectangle drawHere = g.getClipBounds(); // Paint the background g.setColor( getBackground() ); g.fillRect(drawHere.x, drawHere.y, drawHere.width, drawHere.height); // Determine the number of lines to draw in the foreground. g.setColor( getForeground() ); int startLineNumber = (drawHere.y / lineHeight) + 1; int endLineNumber = startLineNumber + (drawHere.height / lineHeight); int start = (drawHere.y / lineHeight) * lineHeight + startOffset; for (int i = startLineNumber; i <= endLineNumber; i++) { String lineNumber = String.valueOf(i); int stringWidth = fontMetrics.stringWidth( lineNumber ); int rowWidth = getSize().width; g.drawString(lineNumber, rowWidth - stringWidth - MARGIN, start); start += lineHeight; } int rows = component.getSize().height / componentFontHeight; setPreferredWidth( rows ); } public static void main(String[] args) { JFrame frame = new JFrame("LineNumberDemo"); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); JPanel panel = new JPanel(); frame.setContentPane( panel ); panel.setBorder(BorderFactory.createEmptyBorder(20,20,20,20)); panel.setLayout(new BorderLayout()); JTextArea textPane = new JTextArea(); textPane.setFont( new Font("monospaced", Font.PLAIN, 12) ); textPane.setText("abc"); JScrollPane scrollPane = new JScrollPane(textPane); panel.add(scrollPane); scrollPane.setPreferredSize(new Dimension(300, 250)); LineNumber lineNumber = new LineNumber( textPane ); scrollPane.setRowHeaderView(lineNumber ); frame.pack(); frame.setVisible(true); } }./src/eric/JSprogram/myJVerticalSeparatorPanel.java0000644000175000017500000000263511337721073021335 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.JSprogram; import eric.GUI.themes; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.net.URL; import javax.swing.ImageIcon; import javax.swing.JPanel; /** * * @author erichake */ public class myJVerticalSeparatorPanel extends JPanel { private ImageIcon myimage; @Override public void paintComponent(Graphics g) { final java.awt.Dimension d=this.getSize(); final int w=d.width; final int h=d.height; final Graphics2D g2=(Graphics2D) g; // g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, // RenderingHints.VALUE_ANTIALIAS_ON); // g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, // RenderingHints.VALUE_TEXT_ANTIALIAS_ON); // g2.setRenderingHint(RenderingHints.KEY_RENDERING, // RenderingHints.VALUE_RENDER_QUALITY); // g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, // RenderingHints.VALUE_INTERPOLATION_BICUBIC); // g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, // RenderingHints.VALUE_STROKE_PURE); g2.drawImage(myimage.getImage(), 0, 0, w, h, this); } public myJVerticalSeparatorPanel() { super(); myimage=themes.getIcon("verticalseparator.png"); } } ./src/eric/JSprogram/JSButton.java0000644000175000017500000000775711360534773015772 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric.JSprogram; import eric.GUI.themes; import java.awt.AlphaComposite; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.Stroke; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.FilteredImageSource; import java.awt.image.ImageFilter; import javax.swing.BorderFactory; import javax.swing.GrayFilter; import javax.swing.ImageIcon; import javax.swing.JButton; public class JSButton extends JButton implements MouseListener { // private final ImageIcon myimage; int iconsize=24; boolean isEntered=false; // Mouseover ? boolean isDisabled; private String Name; // String Shortcut; @Override public void paintComponent(final java.awt.Graphics g) { final java.awt.Dimension d=this.getSize(); final int w=d.width; final int h=d.height; if (g==null) { return; } super.paintComponent(g); final Graphics2D g2=(Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); if (isDisabled) { final ImageFilter filter=new GrayFilter(true, 60); final Image disImage=createImage(new FilteredImageSource(themes.getPaletteImage(Name).getSource(), filter)); final ImageIcon myicn=new ImageIcon(disImage); g2.drawImage(myicn.getImage(), 0, 0, w, h, this); return; } g2.drawImage(themes.getPaletteImage(Name), 0, 0, w, h, this); if (isEntered) { final AlphaComposite ac=AlphaComposite.getInstance( AlphaComposite.SRC_OVER, 0.1f); g2.setComposite(ac); g2.setColor(new Color(0, 0, 80)); final Stroke stroke=new BasicStroke(3f); g2.setStroke(stroke); g2.drawRect(1, 1, w-2, h-2); } } public JSButton(String name, int size,boolean enabled) { isDisabled=!enabled; iconsize=size; Name=name; this.setBorder(BorderFactory.createEmptyBorder()); fixsize(iconsize); this.addMouseListener(this); this.setContentAreaFilled(false); this.setOpaque(false); this.setFocusable(false); } private void fixsize(final int sze) { final Dimension d=new Dimension(sze, sze); this.setMaximumSize(d); this.setMinimumSize(d); this.setPreferredSize(d); this.setSize(d); } public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(final MouseEvent e) { isEntered=true; repaint(); } public void mouseExited(final MouseEvent e) { isEntered=false; repaint(); } } ./src/eric/JSprogram/JSConsole.form0000644000175000017500000017134711361245630016130 0ustar yvesyves
./src/eric/docs/0000755000175000017500000000000011364075602012416 5ustar yvesyves./src/eric/docs/JZirkelProperties_es.properties0000644000175000017500000004243711302427451020657 0ustar yvesyves# Sample ResourceBundle properties file menu.file=Archivo menu.file.new=Nuevo menu.file.load=Abrir... menu.file.save=Registrar menu.file.saveas=Registrar como... menu.file.exportpng=Exportar como PNG menu.file.exporteps=Exportar como EPS menu.file.quit=Salir menu.edit=Edici\u00F3n menu.edit.copy=Copiar menu.edit.move=mover menu.edit.rename=Cambiar nombre menu.edit.edit=Modificar menu.edit.hide=Ocultar menu.edit.delete=Suprimir menu.display=Mostrar menu.display.hidden=Mostrar/Ocultar los objetos invisibles menu.display.grid=Mostrar/Ocultar la rejilla menu.display.finegrid=Ejes solamente menu.display.leftsnap=Rejilla magn\u00E9tica menu.display.manage_macros=Inspeccionar macros menu.display.history_panel=Hist\u00F3rico menu.display.help_panel=Panel de ayuda menu.display.properties_panel=Inspeccionar objetos menu.display.small= Iconos peque\u00F1os menu.display.medium= Iconos medianos menu.display.large=Iconos grandes menu.display.restrictedpalette=Fijar la paleta restringida menu.display.restrictedpaletteedit=Modificar la paleta restringida menu.display.restrictmessage=
Esta utilidad permite visualizar la paleta restringida.

Esto solo afecta al archivo en uso.

Al guardar, usted podr\u00E1 elegir la opci\u00F3n de guardar tambi\u00E9n la figura restringida;.
Se crean entonces dos archivos: El primero (.zir) se abrir\u00E1 en modo normal, y
el segundo (.r.zir) en modo restringido.
menu.macros=Macros menu.special=Especial menu.special.newmacro=Crear macro menu.special.loadmacros=Abrir un archivo de macros... menu.special.definejob=Definir un ejercicio menu.special.loadjob=Abrir un ejercicio... menu.special.jobcomment=Redactar el texto del ejercicio menu.special.testjob=Revisar este ejercicio menu.special.savejob=Guardar el ejercicio menu.special.export=Crear un archivo HTML y verlo con el navegador menu.special.exporttemplate=Exportar a HTML con las plantillas menu.help=Ayuda menu.help.about=Acerca de CaRMetal... menu.help.info=Ayuda contextual menu.help.url0=P\u00E1gina de CaRMetal menu.help.url1=P\u00E1gina de CARzine menu.help.url2=P\u00E1gina oficial de C.a.R. filedialog.options=Opciones de guardado filedialog.saveas=Guardar construcci\u00F3n filedialog.alsorestricted=Guardar tambi\u00E9n las restricciones de la construcci\u00F3n filedialog.restrictedmessage=Est\u00E1 trabajando ahora en una sesi\u00F3n restringida,
la construcci\u00F3n se guardar\u00E1 en modo restringido. filedialog.filefilter=Archivo CaR (.zir) filedialog.compressedfilefilter=Archivo CaR comprimido (.zirz) filedialog.macrofilefilter=Archivo de macros (.mcr) filedialog.savemessage1=El archivo :\n filedialog.savemessage2=\ya existe, \u00BFest\u00E1 seguro de querer reemplazarlo ? palette.file=Archivo palette.edit=Edici\u00F3n palette.construction=Construcci\u00F3n palette.aspect=Aspecto y color palette.history=Historico palette.sizes=Tama\u00F1o palette.sizes.point=Puntos palette.sizes.line=Lineas palette.sizes.arrow=Flechas palette.sizes.font=Fuentes palette.prec=Precisi\u00F3n num\u00E9rica palette.prec.lengths=Longitud palette.prec.edit=Expresiones palette.prec.angles=\u00C1ngulos palette.colors=Fondo: color e imagen palette.colors.saturated1=Colores saturados palette.colors.desaturated1=Colores desaturados palette.colors.saturated2=Colores saturados 2 palette.colors.desaturated2=Colores desaturados 2 palette.colors.constants=Colores Web palette.image.fileerror=Debe guardar la construcci\u00F3n antes de utilizar esta herramienta.

Despu\u00E9s, la imagen que elija debe figurar
en la misma ubicaci\u00F3n que esta figura. palette.info.vector=Vector palette.info.image3=Insertar una imagen utilizando 2 o 3 puntos palette.info.background=Elegir/borrar una imagen de fondo palette.info.imcenter=Centrar la imagen de fondo palette.info.imstretch=Adecuar el tama\u00F1o de la imagen a la ventana de la construcci\u00F3n palette.info.imtile=Fondo con mosaico de imagen palette.info.copy=Copiar la ventana de construcci\u00F3n en el portapapeles palette.info.exportpng=Exportar la construcci\u00F3n de la ventana actual al formato PNG palette.info.exportpng= Exportar la construcci\u00F3n de la ventana actual al formato PNG palette.info.exporteps= Exportar la construcci\u00F3n de la ventana actual al formato EPS palette.info.newmacro=Crear una nueva macro palette.info.loadmacros=Abrir un archivo de macros palette.info.manage_macros=Mostrar/Ocultar el panel de gestion de macros palette.info.properties_panel=Mostrar/Ocultar el panel de propiedades de los objetos palette.info.history_panel=Mostrar/ Ocultar el panel de hist\u00F3rico de la construcci\u00F3n palette.info.help_panel=Mostrar/ Ocultar el panel de ayuda contextual macros.untitledmacro=Macro sin nombre macros.untitledfolder=Carpeta sin nombre macros.emptynode=-- Vac\u00EDo -- macros.addfolder=A\u00F1adir una nueva carpeta macros.deleteselected=Suprimir las macros seleccionadas macros.renamemacro=Cambiar el nombre de la macro seleccionada macros.recordmacro=Guardar una macro macros.initials=\u00BFObjetos iniciales? macros.pleaseselect=!Seleccione, por favor! macros.finals=\u00BFObjetos finales? macros.cancel=\u00BFCancelar? macros.popup.run=Arrancar la macro macros.popup.rename= Cambiar nombre macros.popup.delete=Borrar macros.popup.addtolibrary=A\u00F1adir a la biblioteca macros.popup.removefromlibrary=Quitar de la biblioteca macros.popup.publish=Incluir en la figura macros.popup.notpublish=No incluir en la figura macros.popup.saveas=Guardar como... macros.popup.properties=Mostrar las propiedades macros.popup.duplicate=Duplicar macros.savedlog.buttonok=Guardar el archivo de macro(s) macros.question.delete=\u00BFEst\u00E1 seguro de querer borrar estas macros ? rene.zirkel.objects.PointObject=Pto. rene.zirkel.objects.PrimitiveCircleObject=Cir. rene.zirkel.objects.PrimitiveLineObject=Lin. rene.zirkel.objects.ExpressionObject=Exp. rene.zirkel.objects.FixedAngleObject=AngF. rene.zirkel.objects.SegmentObject=Seg. rene.zirkel.objects.RayObject=Ray rene.zirkel.objects.TwoPointLineObject=Rec. rene.zirkel.objects.FunctionObject=Func. rene.zirkel.objects.AreaObject=\u00C1rea mi.pal.name=Revisar macros mi.name=Nombre : mi.comment=Comentario : mi.properties=Propiedades de los objetos iniciales : mi.hideproperties=Propiedades de los objetos finales : mi.hideduplicates=Buscar duplicados mi.apply=Aplicar mi.tab.type=Tipo mi.tab.name=Nombre mi.tab.prompt=invitaci\u00F3n mi.tab.fix=\u00BFFijar ? mi.tab.ask=\u00BFasociar? mi.error.initial=Error : al menos un objeto inicial\ndebe estar libre (ni fijo, ni dependiente)\n\nNinguna modificaci\u00F3n\nser\u00E1 guardada en esta macro. props.help=Para poder visualizar las propiedades de un objeto clicar aqu\u00ED con el bot\u00F3n derecho.

Si se crea un nuevo objeto conteniendo estos puntos, podr\u00E1 editar sus propiedades durante el proceso. props.name=Nombre : props.alias=Alias : props.unit=Unidades : props.fix=Fijar: props.expl=Explicaci\u00F3n : props.belongto=copiar : props.conditional=Apariencia : props.solid=Opaco : props.hidden=Cach\u00E9 : props.normal=Normal : props.bold=s\u00F3lido: props.thin=Punteado : props.black=Negro : props.green=Verde : props.blue=Azul : props.brown=Marr\u00F3n : props.cyan=Cyan : props.red=Rojo : props.showasslider=En modo cursor props.error=Error de sintaxis en esta expresi\u00F3n.
Se va a reiniciar. props.cartesian=Funci\u00F3n cartesiana props.parametric= Funci\u00F3n param\u00E9trica props.functiontype=Tipo : props.killarc=Arco cortado props.arc=Arco props.release=liberar props.bind=asociar props.setaway=Lejos de props.setclose=Cerca de # v1.3 : props.grid=Incremento de la rejilla (0=libre) : props.inside=Sobre el objeto: props.pointsonly=Solamente con dos puntos: props.step=Paso : palette.grid=Aspecto de la rejilla leftpanel.macros=Panel de gesti\u00F3n de macros leftpanel.properties=Panel de propiedades de los objetos leftpanel.history=Panel de historico leftpanel.help=Panel de ayuda selectpopup.whatobject=\u00BFQu\u00E9 objeto ? selectpopup.RightClick=Editar selectpopup.MoverTool=Desplazar selectpopup.HiderTool=Mostrar/Ocultar selectpopup.DeleteTool=Suprimir selectpopup.RenamerTool=Cambiar nombre selectpopup.EditTool=Editar selectpopup.SetParameterTool=Macro inciales : selectpopup.SetTargetsTool=Macro finales : palette.info.locus=Lugar del punto+ envolvente de recta # v1.4 : menu.special.savezirset=Crear un diaporama filedialog.openfolder.title=Dialogo de selecci\u00F3n de la carpeta del diaporama filedialog.openfolder.approve=Seleccionar la carpeta del diaporama filedialog.openfolder.saveicons=Guardar tambi\u00E9n las restricciones de iconos slideshow.next=siguiente slideshow.previous=anterior slideshow.download=Cargar el archivo slideshow.signature=Diaporama realizado con # v1.5 : menu.language=Idiomas menu.help.url3=Traducir CaRMetal # v1.6 : palette.info.bi_syma=Simetr\u00EDa axial palette.info.bi_symc=Simetr\u00EDa central palette.info.bi_trans=Translaci\u00F3n palette.info.bi_med=Mediatriz palette.info.bi_biss=Bisectriz palette.info.bi_circ=Circunc\u00EDrculo palette.info.bi_arc=Arco por tres puntos palette.info.bi_t_align=Puntos alineados? palette.info.bi_t_para=Rectas paralelas? palette.info.bi_t_perp=Rectas perpendiculares? palette.info.bi_t_equi=Punto equidistante a dos otros? palette.info.bi_t_app=Pertenece a una recta? palette.info.bi_t_conf=Puntos coinciden? macro.bi_syma.0=Eje de simetr\u00EDa? macro.bi_syma.1=Sim\u00E9trico de qu\u00E9 punto? macro.bi_symc.0=Centro de simetr\u00EDa? macro.bi_symc.1=Sim\u00E9trico de qu\u00E9 punto? macro.bi_trans.0=Origen del vector? macro.bi_trans.1=Extremo del vector? macro.bi_trans.2=Imagen de qu\u00E9 punto? macro.bi_med.0=Primer extremo del segmento? macro.bi_med.1=Segundo extremo del segmento? macro.bi_biss.0=Primer punto? macro.bi_biss.1=v\u00E9rtice del \u00E1ngulo? macro.bi_biss.2=\u00FAltimo punto? macro.bi_circ.0=Primer punto? macro.bi_circ.1=Segundo punto? macro.bi_circ.2=Tercer punto? macro.bi_t_para.0=Primera recta (o segmento)? macro.bi_t_para.1=segunda recta (o segemento)? macro.bi_t_equi.0=Este punto es equidistante... macro.bi_t_equi.1=De este punto... macro.bi_t_equi.2=y de este punto? macro.bi_t_app.0=Qu\u00E9 punto? macro.bi_t_app.1=Pertenece a cu\u00E1l recta (segmento)? macro.bi_t_conf.0=Qu\u00E9 punto? macro.bi_t_conf.1=coincide con cu\u00E1l punto? macro.bi_t_align.text0=Los puntos est\u00E1n alineados macro.bi_t_align.text1=Los puntos no est\u00E1n alineados macro.bi_t_para.text0=Los objetos son paralelos macro.bi_t_para.text1=Los objetos no son paralelos macro.bi_t_perp.text0=Los objetos son perpendiculares macro.bi_t_perp.text1=Los objetos no son perpendiculares macro.bi_t_equi.text0=Los puntos son equidistantes macro.bi_t_equi.text1=Los puntos no son equidistantes macro.bi_t_app.text0=El punto est\u00E1 sobre el objeto macro.bi_t_app.text1=el punto no est\u00E1 sobre el objeto macro.bi_t_conf.text0=Los dos puntos coinciden macro.bi_t_conf.text1=Los dos puntos no coinciden # v1.7 : filedialog.openfolder.appletsize=Tama\u00F1o del applet: filedialog.openfolder.actualsize=Tama\u00F1o actual filedialog.openfolder.other=Otro... filedialog.openfolder.selected=Carpeta seleccionada: filedialog.openfolder.cancel=Cancelar menu.file.exportsvg=Exportar como SVG menu.objects.points=Puntos menu.objects.lines=Rectas menu.objects.segments=Segmentos menu.objects.circles=C\u00EDrculos y c\u00F3nicas menu.objects.angles=Angulos menu.objects.tracks=Trazas y lugares menu.objects.functions=Funciones y f\u00F3rmulas palette.info.function_u=Funci\u00F3n definida por el usuario palette.info.function=Trazar una funci\u00F3n o una curva param\u00E9trica props.superhidden=Ocultar completamente: props.showvalue=Mostrar valor: props.showname=Mostrar nombre: props.background=Fondo: macro.bi_expression.0=Punto de anclaje? # v1.9a : licence.txt=

Este programa es gratuito bajo licencia GNU-GPL, lo que significa que usted puede redistribuirlo y/o modificarlo seg\u00FAn los t\u00E9rminos de la licencia publicada por la "Free Software Foundation"
Voir :

# v2.0 : menu.special.theme=Temas menu.special.theme.gray=Metal pulido menu.special.theme.brushed=Metal cepillado menu.special.options=Preferencias... menu.special.options.sizes=Tama\u00F1os menu.special.options.sizes.minpointsize=Tama\u00F1o de puntos menu.special.options.sizes.minlinesize=Grosor de l\u00EDneas menu.special.options.sizes.arrowsize=Tama\u00F1o de flechas menu.special.options.sizes.minfontsize=Tama\u00F1o de caracteres menu.special.options.sizes.digits.lengths=Precisi\u00F3n de longitudes menu.special.options.sizes.digits.edit=Precisi\u00F3n de f\u00F3rmulas menu.special.options.sizes.digits.angles=Precisi\u00F3n de \u00E1ngulos menu.special.options.colors=Colores menu.special.options.others=Otros menu.special.options.others.undock=Posibilidad de separar las paletas # v2.1 : menu.file.close=Cerrar ventana # v2.3 : alert.toomuchwins=Hay demadiadas ventanas abiertas:
cierre algunas
para poder abrir otras... # v2.4 : menu.file.new3D=Nueva figura 3D palette.info.bi_3Dcoords=Coordenadas 3D macro.bi_3Dcoords.0=Punto de anclaje de las coordenadas? palette.info.bi_3Dcube=Cubo macro.bi_3Dcube.0=Centro del cubo? palette.info.bi_3Darete=Arista 3D (gesti\u00F3n de punteado) macro.bi_3Darete.0=Primer punto? macro.bi_3Darete.1=Segundo punto? macro.bi_3Darete.2=Tercer punto? macro.bi_3Darete.3=cuarto punto? palette.info.bi_3Dtetra=Tetraedro regular macro.bi_3Dtetra.0=Centro del tetraedro? menu.newdoc=Nuevo # v2.5.5 : palette.aspect.label.text=Aspecto de palette.aspect.label.point=puntos palette.aspect.label.line=rectas palette.aspect.label.segment=segmentos palette.aspect.label.circle=c\u00EDrculos palette.aspect.label.angle=angulos palette.aspect.label.area=pol\u00EDgonos palette.aspect.label.bi_text=textos palette.info.bi_3Ddode=Dodecaedro regular macro.bi_3Ddode.0=Centro del dodecaedro? # v2.7 : palette.aspect.label.pointshape=Forma & nombre de los puntos: palette.aspect.label.locus=lugares menu.edit.deleteall=Borrar todo # v2.7.1 : java.old.message=No puede lanzar CaRMetal porque su versi\u00F3n de Java es muy vieja... java.old.quit=Salir java.old.go=Descargar una nueva versi\u00F3n de java palette.info.boundedpoint=punto sobre plano o sobre cara de un poliedro #v2.7.2 : user.foldername=Perfil de usuario CaRMetal #v2.8 props.fixedray=Radio : props.fixedsegment=Longitud : props.fixedangle=Angulo : props.expl=Comentario : props.aspecttab=Aspecto props.numerictab=Num\u00E9rico props.conditionaltab=Condicional props.popup.special=Caracteres especiales props.popup.functions=Funciones predefinidas props.popup.latex=Comandos LaTeX #v2.8.1 props.fixedinwindow=Atado a la ventana #v2.8.5 palette.controls=Controles props.ctrlshowvalue=Mostrar el valor del control props.ctrlsnap=Atado a las graduaciones props.ctrlshowticks=Mostrar las graduaciones props.ctrltickspacing=Incremento : palette.info.ctrl_edit=Editar, desplazar o redimensionar el control palette.info.ctrl_chkbox=Agregar una casilla de selecci\u00F3n palette.info.ctrl_popup=Agregar un menu desplegable palette.info.ctrl_slider=Agregar un cursor #v2.8.6 props.trackdmin=N\u00FAmero de etapas : opendialog.preview=Vista previa : pngdialog.options=Opciones de exportaci\u00F3n : pngdialog.scale=Escala : pngdialog.originsize=Tama\u00F1o original : pngdialog.scaledsize=Tama\u00F1o a escala : #v2.8.7 canvas.3D.floor=Piso canvas.3D.system=sistema de coordenadas canvas.3D.rightclic=Utilizar el clic derecho para hacer girar #v2.8.8 palette.info.equationxy=Curva definida por f(x,y)=0 props.equationxy=Ecuaci\u00F3n : props.equationxychooser=Precisi\u00F3n : palette.function=Funciones y lugares #v2.8.9 menu.edit.deletealltracks=Borrar las trazas menu.edit.deactivatealltracks=Desactivar las trazas props.tracks=Activar la traza menu.edit.zoom=Agrandar o desplazar #v2.9.0 menu.windows=Ventana #v2.9.1 contexthelp.seealso=Temas relacionados : #v2.9.2 menu.help.licence=Licencia... #v2.9.2 menu.display.restrictmessage.dontdisplay=No mostrar m\u00E1s este mensaje props.thick=\u00C9pais : #v2.9.6 props.magnetmessage=Haga clic sobre los objetos que quiere a\u00F1adir a (o eliminar de) la lista de objetos magn\u00E9ticos props.magnetobj=Objets magn\u00E9tiques props.magnetpix=Attraction (20 px) : #v2.9.7 palette.info.ctrl_txtfield=A\u00F1adir una zona de entrada num\u00E9rica palette.info.ctrl_button=A\u00F1adir un bot\u00F3n #v2.9.8.4 JSerror.title=Error de sintaxis JSerror.line=l\u00EDnea JSerror.pointcoords=Error de sintaxis en las coordenadas del punto JSerror.interactiveinput=Error en la designaci\u00F3n del objeto JSerror.notfound=Objeto no encontrado JSerror.notgoodtype=Imposibla aplicar a este tipo de objeto JScmd.inputmessage=Pregunta? JScmd.promptmessage=Mensaje... menu.js=Javascript menu.js.script=Abrir un archivo javascript... menu.js.command=Abrir el editor de script JSeditor.title=Editor javascript #v3.0 JSeditor.save=Guardar el script JSeditor.open=Abrir un script JSeditor.opendlogmsg=Abrir el script JSeditor.savedlogmsg=Guardar el script JSeditor.format=Formatear el script JSeditor.restore=Anular los efectos del \u00FAltimo script JSeditor.run=Lanzar el script JSeditor.help=Obtener ayuda de sintaxis JSEditor.comment=Comentar la selecci\u00F3n JSEditor.savequestion=Este script cambi\u00F3: quiere guardarlo? # v3.1.1 menu.js.define=Definir la carpeta de scripts... menu.js.dumb=Ejecutar los scripts sin editor JSeditor.opendfavfolder=Seleccionar como carpeta de scripts JSeditor.saveas=Guardar el script como..../src/eric/docs/JZirkelProperties_nl.properties0000644000175000017500000002560211302427452020655 0ustar yvesyves# Sample ResourceBundle properties file menu.file=Bestand menu.file.new=Nieuw menu.file.load=Open... menu.file.save=Bewaar menu.file.saveas=Bewaar als... menu.file.exportpng=Exporteer als PNG menu.file.exporteps=Exporteer als EPS menu.file.quit=Stop menu.edit=Wijzig menu.edit.copy=Kopieer menu.edit.move=Verplaats menu.edit.rename=Hernoem menu.edit.edit=Wijzig menu.edit.hide=Verberg menu.edit.delete=Verwijder menu.display=Toon menu.display.hidden=Toon/Verberg voorwerpen menu.display.grid=Toon/Verberg raster menu.display.finegrid=Enkel as menu.display.leftsnap=Snap met slepen met linkermuistoets menu.display.manage_macros=Macro Inspector menu.display.history_panel=Geschiedenis menu.display.help_panel=Help menu.display.properties_panel=Voorwerpeigenschappen venster menu.display.small=Kleine iconen menu.display.medium=Medium iconen menu.display.large=Grote iconen menu.display.restrictedpalette=Toon beperkt palet menu.display.restrictedpaletteedit=Wijzig beperkt palet menu.display.restrictmessage=
Dit item laat je toe om het beperkte palet te tonen.

Het heeft alleen betrekking op het huidige bestand:

als je 'bewaar als' uitvoert, is het mogelijk om te kiezen voor 'bewaar ook de beperkte figuur'.
Er worden dan twee bestanden aangemaakt: het eerste (.zir) zal in 'normale modus' openen, en
het tweede (.r.zir) in 'beperkte modus'
menu.macros=Macro's menu.special=Speciaal menu.special.newmacro=Nieuwe macro menu.special.loadmacros=Open Macrobestand... menu.special.definejob=Definieer een opgave menu.special.loadjob=Laad een opgave ... menu.special.jobcomment=Geef opgavetekst ... menu.special.testjob=Test deze opgave menu.special.savejob=Bewaar als opgave ... menu.special.export=Maak HTML-bestand en voorvertoning in browser menu.special.exporttemplate=HTML export met templates menu.help=Help menu.help.about=Over CaRMetal... menu.help.info=Contexthelp menu.help.url0=Ga naar CaRMetal site menu.help.url1=Ga naar CARzine site menu.help.url2=Ga naar offici\u00EBle C.a.R. site filedialog.saveas=Bewaar tekening filedialog.alsorestricted=Bewaar ook beperkte figuur filedialog.options=Opties bewaren filedialog.restrictedmessage=Je werkt in een sessie met beperkingen,
dus wordt je figuur bewaard in beperkte modus. filedialog.filefilter=CaR-bestand (.zir) filedialog.compressedfilefilter=Gecomprimeerd CaR-bestand (.zirz) filedialog.macrofilefilter=CaR Macro-bestand (.mcr) filedialog.savemessage1=Bestand :\n filedialog.savemessage2=\nbestaat al. Wil je het echt vervangen? palette.file=Bestand palette.edit=Wijzig palette.construction=Constructie palette.aspect=Aspectkleur palette.history=Geschiedenis palette.sizes=Groottes palette.sizes.point=Punt palette.sizes.line=Lijn palette.sizes.arrow=Pijl palette.sizes.font=Lettertype palette.prec=Numerieke nauwkeurigheid palette.prec.lengths=Lengtes palette.prec.edit=Uitdrukkingen palette.prec.angles=Hoeken palette.colors=Achtergrondkleur afbeelding palette.colors.saturated1=Gesatureerde kleuren palette.colors.desaturated1=Gedesatureerde kleuren palette.colors.saturated2=Gesatureerde kleuren 2 palette.colors.desaturated2=Gedesatureerde kleuren 2 palette.colors.constants=Webconstanten palette.image.fileerror=Voordat je dit werktuig gebruikt moet je deze tekening bewaren.

De figuur die je daarna kiest moet
in dezelfde map zitten. palette.info.vector=Vector palette.info.image3=Voeg afbeelding met 2 of 3 punten in palette.info.background=Kies/Wis achtergrondafbeelding palette.info.imcenter=Centreer de achtergrondafbeelding palette.info.imstretch=Rek de achtergrondafbeelding schermvullend uit palette.info.imtile=Herhaal de achtergrondafbeelding palette.info.copy=Kopieer het constructievenster palette.info.exportpng=Exporteer het constructievenster als png palette.info.exporteps=Exporteer het constructievenster als eps palette.info.newmacro=Maak een nieuwe macro palette.info.loadmacros=Laad een macrobestand palette.info.manage_macros=Toon/Verberg het macrovenster palette.info.properties_panel=Toon/Verberg het voorwerpeigenschappen venster palette.info.history_panel=Toon/Verberg het constructiegeschiedenis venster palette.info.help_panel=Toon/Verberg het contextuele helpvenster macros.untitledmacro=Naamoze macro macros.untitledfolder=Naamloze map macros.emptynode=-- Leeg -- macros.addfolder=Voeg nieuwe map toe macros.deleteselected=Verwijder geselecteerde macro's macros.renamemacro=Hernoem geselecteerde macro's macros.recordmacro=Neem macro op macros.initials=Beginvoorwerpen? macros.pleaseselect=AUB selecteren! macros.finals=Eindobjecten? macros.cancel=Annuleer? macros.popup.run=Voer macro uit macros.popup.rename=Hernoem macros.popup.delete=Verwijder macros.popup.addtolibrary=Voeg toe aan bibliotheek macros.popup.removefromlibrary=Verwijder uit bibliotheek macros.popup.publish=Voeg toe aan de tekening macros.popup.notpublish=Voeg niet toe aan de tekening macros.popup.saveas=Bewaar als... macros.popup.properties=Toon eigenschappen macros.popup.duplicate=Dupliceer macros.savedlog.buttonok=Bewaar macrobestand macros.question.delete=Ben je zeker dat je deze macro's wil verwijderen? rene.zirkel.objects.PointObject=Pt rene.zirkel.objects.PrimitiveCircleObject=Cir rene.zirkel.objects.PrimitiveLineObject=Lne rene.zirkel.objects.ExpressionObject=Exp. rene.zirkel.objects.FixedAngleObject=Vhoek. rene.zirkel.objects.SegmentObject=Seg. rene.zirkel.objects.RayObject=Ray rene.zirkel.objects.TwoPointLineObject=Lne rene.zirkel.objects.FunctionObject=Fct rene.zirkel.objects.AreaObject=Opp mi.pal.name=Macro-inspector mi.name=Naam: mi.comment=Commentaar: mi.properties=Parametereigenschappen: mi.hideproperties=Doeleneigenschappen: mi.hideduplicates=Verberg duplicaten mi.apply=Pas toe mi.tab.type=Type mi.tab.name=Naam mi.tab.prompt=Prompt mi.tab.fix=Maak vast? mi.tab.ask=Vraag? mi.error.initial=Fout: ten minste een parameter \nmoet vrij zijn (niet vast, niet gevraagd)\n\nDeze macro zal niet veranderd worden props.help=Om de eigenschappen te zien moet je rechtsklikken op een voorwerp.

Als je een nieuw voorwerp aanmaakt met dit venster open, kan je ook bij het aanmaken zelf de eigenschappen veranderen. props.name=Naam: props.alias=Alias: props.unit=Eenheid: props.fix=Vast: props.expl=Uitleg: props.belongto=Laag: props.conditional=Voorwaardelijk aspect: props.solid=Solid: props.hidden=Verborgen: props.normal=Normaal: props.bold=Dik: props.thin=Gepunt: props.black=Zwart: props.green=Groen: props.blue=Blauw: props.brown=Bruin: props.cyan=Cyaan: props.red=Rood: props.showasslider=Schuifbalk: props.error=Er is een syntaxisfout in deze uitdrukking.
Ze wordt opnieuw ge\u00EFnitialiseerd. props.cartesian=Cartesiaanse functie props.parametric=Parameterfunctie props.functiontype=Type: props.killarc=Geen boog props.arc=Boog props.release=Laat los props.bind=Maak vast props.setaway=Weg van props.setclose=Dichtbij # v1.3 : props.grid=Increment : props.inside=Binnen voorwerp: props.pointsonly=Enkel met punten: props.step=Stap: palette.grid=Rasteraspect leftpanel.macros=Macrovenster leftpanel.properties=Eigenschappen venster leftpanel.history=Geschiedenis venster leftpanel.help=Help venster selectpopup.whatobject=Welk voorwerp? selectpopup.RightClick=Wijzig selectpopup.MoverTool=Beweeg selectpopup.HiderTool=Toon/Verberg selectpopup.DeleteTool=Verwijder selectpopup.RenamerTool=Hernoem selectpopup.EditTool=Wijzig selectpopup.SetParameterTool=Macroparameters: selectpopup.SetTargetsTool=Macrodoelen: palette.info.locus=Meetkundige plaats van omhullende # v1.4 : menu.special.savezirset=Maak diavoorstelling... filedialog.openfolder.title=Diavoorstelling map selectiedialoog filedialog.openfolder.approve=Selecteer map diavoorstelling filedialog.openfolder.saveicons=Bewaar ook de beperkte iconen slideshow.next=volgende slideshow.previous=vorige slideshow.download=Download bestand slideshow.signature=Slideshow gemaakt met # v1.5 : menu.language=Talen menu.language.de=Deutsch menu.language.en=English menu.language.fr=Fran\u00E7ais menu.language.es=Espa\u00F1ol menu.language.gl=Galego menu.language.zh_TW=Chinees (Traditioneel) menu.help.url3=Vertaal CaRMetal # v1.6 : palette.info.bi_syma=Lijnspiegeling palette.info.bi_symc=Puntspiegeling palette.info.bi_trans=Verschuiving palette.info.bi_med=Middelloodlijn palette.info.bi_biss=Bissectrice palette.info.bi_circ=Cirkel door 3 punten palette.info.bi_arc=Boog door 3 punten palette.info.bi_t_align=Collineaire punten ? palette.info.bi_t_para=Evenwijdige rechten ? palette.info.bi_t_perp=Loodrechte rechten ? palette.info.bi_t_equi=Even ver van twee punten ? palette.info.bi_t_app=Ligt op rechte ? palette.info.bi_t_conf=Samenvallende punten ? macro.bi_syma.0=Spiegelrechte ? macro.bi_syma.1=Punt dat gespiegeld wordt ? macro.bi_symc.0=Spiegelpunt ? macro.bi_symc.1=Punt dat gespiegeld wordt ? macro.bi_trans.0=Eerste punt van de vector ? macro.bi_trans.1=Tweede punt van de vector ? macro.bi_trans.2=Punt dat verschoven wordt ? macro.bi_med.0=Eerste punt van het lijnstuk ? macro.bi_med.1=Tweede punt van het lijnstuk ? macro.bi_biss.0=Eerste punt ? macro.bi_biss.1=Hoekpunt ? macro.bi_biss.2=Laatste punt ? macro.bi_circ.0=Eerste punt ? macro.bi_circ.1=Tweede punt ? macro.bi_circ.2=Derde punt ? macro.bi_t_para.0=Eerste rechte ? macro.bi_t_para.1=Tweede rechte ? macro.bi_t_equi.0=Ligt dit punt even ver ... macro.bi_t_equi.1=van dit punt ... macro.bi_t_equi.2=als van dit punt ? macro.bi_t_app.0=Welk punt ? macro.bi_t_app.1=Ligt op welke rechte (of lijnstuk) ? macro.bi_t_conf.0=Welk punt ? macro.bi_t_conf.1=valt samen met wel punt ? macro.bi_t_align.text0=Punten liggen op zelfde rechte macro.bi_t_align.text1=Punten liggen niet op zelfde rechte macro.bi_t_para.text0=Voorwerpen zijn evenwijdig macro.bi_t_para.text1=Voorwerpen zijn niet evenwijdig macro.bi_t_perp.text0=Voorwerpen staan loodrecht op elkaar macro.bi_t_perp.text1=Voorwerpen staan niet loodrecht op elkaar macro.bi_t_equi.text0=Punten staan even ver macro.bi_t_equi.text1=Punten staan niet even ver macro.bi_t_app.text0=Het punt ligt op het voorwerp macro.bi_t_app.text1=Het punt ligt niet op het voorwerp macro.bi_t_conf.text0=De twee punten vallen samen macro.bi_t_conf.text1=De twee punten vallen niet samen palette.test=Testen # v1.7 : filedialog.openfolder.appletsize=Grootte applet : filedialog.openfolder.actualsize=Actuele grootte filedialog.openfolder.other=Ander... filedialog.openfolder.selected=Kies map : filedialog.openfolder.cancel=Annuleer menu.file.exportsvg=Exporteer als SVG props.vars=Variabelen : menu.objects.points=Punten menu.objects.lines=Rechten menu.objects.segments=Lijnstukken menu.objects.circles=Cirkels en kegelsneden menu.objects.angles=Hoeken menu.objects.tracks=Meetkundige plaatsen menu.objects.functions=Functies en uitdrukkingen palette.info.function_u=Functie gedefinieerd door gebruiker palette.info.function=Toon functie of parameterkromme props.superhidden=Volledig verborgen : props.showvalue=Toon waarde : props.showname=Toon naam : props.background=Achtergrond : macro.bi_expression.0=Ankerpunt ?./src/eric/docs/JZirkelProperties.properties0000644000175000017500000004573111364076220020172 0ustar yvesyves# Sample ResourceBundle properties file menu.file=File menu.file.new=New menu.file.load=Open... menu.file.save=Save menu.file.saveas=Save As... menu.file.exportpng=Export to PNG menu.file.exporteps=Export to EPS menu.file.quit=Quit menu.edit=Edit menu.edit.copy=Copy menu.edit.move=Move object menu.edit.rename=Rename menu.edit.edit=Edit menu.edit.hide=Hide menu.edit.delete=Delete menu.display=Display menu.display.hidden=Show/Hide Objects menu.display.grid=Show/Hide Grid menu.display.finegrid=Axis only menu.display.leftsnap=Snap with left button drag menu.display.manage_macros=Macro Inspector menu.display.history_panel=History menu.display.help_panel=Help menu.display.properties_panel=Object Properties Panel menu.display.small=Small icons menu.display.medium=Medium icons menu.display.large=Large icons menu.display.restrictedpalette=Show Restricted Palette menu.display.restrictedpaletteedit=Edit Restricted Palette menu.display.restrictmessage=
This item allows you to visualize restricted palette.

It only concerns the current file :

when you will 'save as', it will be possible to choose the 'also save the restrict figure'
two files will be created : the first (.zir) will open in 'normal' mode, and
the second (.r.zir) in restricted mode
menu.macros=Macros menu.special=Special menu.special.newmacro=New Macro menu.special.loadmacros=Open Macro File... menu.special.definejob=Define an Assignment menu.special.loadjob=Load an Assignment ... menu.special.jobcomment=Set Assignment Text ... menu.special.testjob=Test this Assignment menu.special.savejob=Save as Assignment ... menu.special.export=Create HTML File and Browser Preview menu.special.exporttemplate=HTML Export with Templates menu.help=Help menu.help.about=About CaRMetal... menu.help.info=Context help menu.help.url0=Go to CaRMetal site menu.help.url1=Go to CARzine site menu.help.url2=Go to official C.a.R. site filedialog.saveas=Save Figure filedialog.alsorestricted=Also save restricted figure filedialog.options=Saving options filedialog.restrictedmessage=You are working in a restricted session,
so your figure will be save in restricted mode filedialog.filefilter=CaR File (.zir) filedialog.compressedfilefilter=Compressed CaR File (.zirz) filedialog.macrofilefilter=CaR Macro File (.mcr) filedialog.savemessage1=File :\n filedialog.savemessage2=\nalready exists. Do you really want to replace it ? palette.file=File palette.edit=Edit palette.construction=Construction palette.aspect=Aspect & Color palette.history=History palette.sizes=Sizes palette.sizes.point=Point palette.sizes.line=Line palette.sizes.arrow=Arrow palette.sizes.font=Font palette.prec=Numerical precision palette.prec.lengths=Lengths palette.prec.edit=Expressions palette.prec.angles=Angles palette.colors=Background color & image palette.colors.saturated1=Saturated colors palette.colors.desaturated1=Desaturated colors palette.colors.saturated2=Saturated colors 2 palette.colors.desaturated2=Desaturated colors 2 palette.colors.constants=Web constants palette.image.fileerror=You must save this figure before using this tool

After, the picture you will choose must be
in the same directory. palette.info.vector=Vector palette.info.image3=Insert image+with 2 or 3 points palette.info.background=Choose/Clear background image palette.info.imcenter=Center the background image palette.info.imstretch=Stretch the background image+to fit the construction window palette.info.imtile=Tile the background image palette.info.copy=Copy the construction window palette.info.exportpng=Export the construction+window to png format palette.info.exporteps=Export the construction+window to eps format palette.info.newmacro=Create a new macro palette.info.loadmacros=Load a macros file palette.info.manage_macros=Show/Hide the macro panel palette.info.properties_panel=Show/Hide the objects+properties panel palette.info.history_panel=Show/Hide the construction+history panel palette.info.help_panel=Show/Hide the contextual help panel macros.untitledmacro=Untitled Macro macros.untitledfolder=Untitled Folder macros.emptynode=-- Empty -- macros.addfolder=Add new folder macros.deleteselected=Delete selected macros macros.renamemacro=Rename selected macro macros.recordmacro=Record macro macros.initials=Initial objects ? macros.pleaseselect=please select ! macros.finals=Final objects ? macros.cancel=Cancel ? macros.popup.run=Run macro macros.popup.rename=Rename macros.popup.delete=Delete macros.popup.addtolibrary=Add to library macros.popup.removefromlibrary=Remove from library macros.popup.publish=Include in the figure macros.popup.notpublish=Do not include in the figure macros.popup.saveas=Save As... macros.popup.properties=Show properties macros.popup.duplicate=Duplicate macros.savedlog.buttonok=Save macro file macros.question.delete=Are you sure you want to delete these macros ? rene.zirkel.objects.PointObject=Pt rene.zirkel.objects.PrimitiveCircleObject=Cir rene.zirkel.objects.PrimitiveLineObject=Lne rene.zirkel.objects.ExpressionObject=Exp. rene.zirkel.objects.FixedAngleObject=Fangle. rene.zirkel.objects.SegmentObject=Seg. rene.zirkel.objects.RayObject=Ray rene.zirkel.objects.TwoPointLineObject=Lne rene.zirkel.objects.FunctionObject=Fct rene.zirkel.objects.AreaObject=Area mi.pal.name=Macros inspector mi.name=Name : mi.comment=Comment : mi.properties=Parameters properties : mi.hideproperties=Targets properties : mi.hideduplicates=Hide duplicates mi.apply=Apply mi.tab.type=Type mi.tab.name=Name mi.tab.prompt=Prompt mi.tab.fix=Fix ? mi.tab.ask=Ask ? mi.error.initial=Error : at least one parameter \nhave to be free (no fix, no ask)\n\nThis macro will not be changed props.help=In order to see properties, you must right-clic on an object.

If you create a new object with this panel open, you will be able to change the properties during the creation. props.name=Name : props.alias=Alias : props.unit=Unit : props.fix=Fix : props.expl=Explanation : props.belongto=Layer : props.conditional=Conditional aspect : props.solid=Solid : props.hidden=Hidden : props.normal=Normal : props.bold=Thick : props.thin=Dotted : props.black=Black : props.green=Green : props.blue=Blue : props.brown=Brown : props.cyan=Cyan : props.red=Red : props.showasslider=Slider props.error=There is a syntax error in this expression.
It will be reinitialized props.cartesian=Cartesian function props.parametric=Parametric function props.functiontype=Type : props.killarc=Kill arc props.arc=Arc props.release=Release props.bind=Bind props.setaway=Set away props.setclose=Set close # v1.3 : props.grid=Increment : props.inside=Inside object : props.pointsonly=With points only : props.step=Step : palette.grid=Grid aspect leftpanel.macros=Macros panel leftpanel.properties=Properties panel leftpanel.history=History panel leftpanel.help=Help panel selectpopup.whatobject=which object ? selectpopup.RightClick=Select selectpopup.MoverTool=Move selectpopup.HiderTool=Show/Hide selectpopup.DeleteTool=Delete selectpopup.RenamerTool=Rename selectpopup.EditTool=Edit selectpopup.SetParameterTool=Macro parameters : selectpopup.SetTargetsTool=Macro targets : palette.info.locus=Locus of point+Envelope of line # v1.4 : menu.special.savezirset=Create slideshow... filedialog.openfolder.title=Slideshow folder selection dialog filedialog.openfolder.approve=Select slideshow folder filedialog.openfolder.saveicons=Also save the restrict icons slideshow.next=next slideshow.previous=previous slideshow.download=Download file slideshow.signature=Slideshow made with # v1.5 : menu.language=Languages menu.language.de=Deutsch menu.language.en=English menu.language.fr=Fran\u00E7ais menu.language.es=Espa\u00F1ol menu.language.gl=Galego menu.language.zh_TW=Chinese (Traditional) menu.help.url3=Translate CaRMetal menu.display.smartboard=Smartboard mode # v1.6 : menu.language.no=Norsk palette.info.bi_syma=Reflection palette.info.bi_symc=Symmetry palette.info.bi_trans=Translation palette.info.bi_med=Perpendicular bisector palette.info.bi_biss=Angle bisector palette.info.bi_circ=Circle through 3 points palette.info.bi_arc=Circumcircular arc through 3 points palette.info.bi_t_align=Collinear points ? palette.info.bi_t_para=Parallel lines ? palette.info.bi_t_perp=Perpendicular lines ? palette.info.bi_t_equi=Equidistant from two points ? palette.info.bi_t_app=Lies on a line ? palette.info.bi_t_conf=Points at the same place ? macro.bi_syma.0=Reflection line ? macro.bi_syma.1=Point to reflect ? macro.bi_symc.0=Symmetry center ? macro.bi_symc.1=Point to reflect ? macro.bi_trans.0=First point of the vector ? macro.bi_trans.1=Second point of the vector ? macro.bi_trans.2=Point to translate ? macro.bi_med.0=First point of the segment ? macro.bi_med.1=Second point of the segment ? macro.bi_biss.0=First point ? macro.bi_biss.1=Angle vertex ? macro.bi_biss.2=Last point ? macro.bi_circ.0=First point ? macro.bi_circ.1=Second point ? macro.bi_circ.2=Third point ? macro.bi_t_para.0=First line ? macro.bi_t_para.1=Second line ? macro.bi_t_equi.0=Is this point equidistant ... macro.bi_t_equi.1=From this point ... macro.bi_t_equi.2=And this point ? macro.bi_t_app.0=Which point ? macro.bi_t_app.1=Lies on which line (or segment) ? macro.bi_t_conf.0=Which point ? macro.bi_t_conf.1=Is on which point ? macro.bi_t_align.text0=Points are collinear macro.bi_t_align.text1=Points are not collinear macro.bi_t_para.text0=Objects are parallel macro.bi_t_para.text1=Objects are not parallel macro.bi_t_perp.text0=Objects are perpendicular macro.bi_t_perp.text1=Objects are not perpendicular macro.bi_t_equi.text0=Points are equidistant macro.bi_t_equi.text1=Points are not equidistant macro.bi_t_app.text0=The point lies on the object macro.bi_t_app.text1=The point doesn't lie on the object macro.bi_t_conf.text0=The two points are at the same place macro.bi_t_conf.text1=The two points are not at the same place palette.test=Tests # v1.7 : filedialog.openfolder.appletsize=Applet size : filedialog.openfolder.actualsize=Actual size filedialog.openfolder.other=Other... filedialog.openfolder.selected=Selected folder : filedialog.openfolder.cancel=Cancel menu.file.exportsvg=Export to SVG menu.language.sl=Slovenski menu.language.nl=Nederlands menu.language.pt=Portugu\u00EAs props.vars=Variables : menu.objects.points=Points menu.objects.lines=Lines menu.objects.segments=Segments menu.objects.circles=Circles and conics menu.objects.angles=Angles menu.objects.tracks=Tracks and locus menu.objects.functions=Functions and expressions palette.info.function_u=User defined function palette.info.function=Display function+or parametric curve props.superhidden=Completely hidden : props.showvalue=Show value : props.showname=Show name : props.background=Background : macro.bi_expression.0=Anchor point ? # v1.9a : menu.help.licence=Licence... licence.txt=

This program is free software under GNU-GPL licence, which means you can redistribute it and/or modify it under the terms of the licence published by the Free Software Foundation;
See :

# v2.0 : menu.special.theme=Themes menu.special.theme.gray=Polished metal menu.special.theme.brushed=Brushed metal menu.special.options=Preferences... menu.special.options.sizes=Sizes menu.special.options.sizes.minpointsize=Point size menu.special.options.sizes.minlinesize=Line size menu.special.options.sizes.arrowsize=Arrow size menu.special.options.sizes.minfontsize=Font size menu.special.options.sizes.digits.lengths=Length precision menu.special.options.sizes.digits.edit=Expression precision menu.special.options.sizes.digits.angles=Angle precision menu.special.options.colors=Colors menu.special.options.others=Others menu.special.options.others.undock=Able to undock palettes # v2.1 : menu.file.close=Close window # v2.3 : alert.toomuchwins=There are too much open windows :
please close some of them before opening
a new one # v2.4 : menu.file.new3D=New 3D figure palette.3D=3D palette.info.bi_3Dcoords=3D coordinates macro.bi_3Dcoords.0=Anchor point ? palette.info.bi_3Dcube=Cube macro.bi_3Dcube.0=Center of cube ? palette.info.bi_3Darete=3D edges macro.bi_3Darete.0=First point ? macro.bi_3Darete.1=Second point ? macro.bi_3Darete.2=Third point ? macro.bi_3Darete.3=Forth point ? palette.info.bi_3Dtetra=Regular tetrahedon macro.bi_3Dtetra.0=Center of tetrahedon ? menu.newdoc=New menu.language.it=Italiano # v2.5.5 : palette.aspect.label.text=Aspect of palette.aspect.label.point=points palette.aspect.label.line=lines palette.aspect.label.segment=segments palette.aspect.label.circle=circles palette.aspect.label.angle=angles palette.aspect.label.area=polygons palette.aspect.label.bi_text=texts palette.info.bi_3Ddode=Regular dodecahedron macro.bi_3Ddode.0=Center of dodecahedron ? # v2.7 : palette.aspect.label.pointshape=Points shape & name : palette.aspect.label.locus=loci menu.edit.deleteall=Delete all # v2.7.1 : java.old.message=Sorry, you can't start CaRMetal program, because your java version is too old ! java.old.quit=Quit java.old.go=Download new java version palette.info.boundedpoint=Place a point into a plane+or onto a polyhedron face #v2.7.2 : user.foldername=CarMetal User Profile #v2.8 props.fixedray=Ray : props.fixedsegment=Length : props.fixedangle=Angle : props.expl=Comment line : props.aspecttab=Aspect props.numerictab=Numeric props.conditionaltab=Conditional props.thick=Thick : props.popup.special=Special Characters props.popup.functions=Predefined functions props.popup.latex=LaTeX commands menu.language.pl=Polski #v2.8.1 props.fixedinwindow=Linked to window #v2.8.5 palette.controls=Controls props.ctrlshowvalue=Show value props.ctrlsnap=Snap to ticks props.ctrlshowticks=Show ticks props.ctrltickspacing=Increment : palette.info.ctrl_edit=Edit, move or resize control palette.info.ctrl_chkbox=Add CheckBox palette.info.ctrl_popup=Add Popup Menu palette.info.ctrl_slider=Add Slider #v2.8.6 props.trackdmin=Number of steps : opendialog.preview=Preview : pngdialog.options=Export options : pngdialog.scale=Scale : pngdialog.originsize=Original size : pngdialog.scaledsize=Scaled size : #v2.8.7 canvas.3D.floor=Floor canvas.3D.system=Coordinate system canvas.3D.rightclic=Use right-clic-drag to rotate the coordinate system #v2.8.8 palette.info.equationxy=Curvus defined by f(x,y)=0 props.equationxy=Equation : props.equationxychooser=Precision : palette.function=Functions & locus #v2.8.9 menu.edit.deletealltracks=Clear tracks menu.edit.deactivatealltracks=Deactivate tracks props.tracks=Activate track menu.edit.zoom=Zoom or move #v2.9.0 menu.windows=Window #v2.9.1 contexthelp.seealso=See also : #v2.9.2 menu.language.pt_BR=Brazilian menu.display.restrictmessage.dontdisplay=Don't display this message anymore #v2.9.6 props.magnetmessage=Clic on the objects you want to add to (or remove from) the magnetic list props.magnetobj=Magnetic objects props.magnetpix=Attraction (20 px) : props.show=Show #v2.9.7 palette.info.ctrl_txtfield=Add Numerical Input Box palette.info.ctrl_button=Add Button #v2.9.8.4 JSerror.title=Syntax error JSerror.line=line JSerror.pointcoords=Syntax error in the coordinates of point JSerror.interactiveinput=Error during selection of the object JSerror.notfound=Object not found JSerror.notgoodtype=Impossible to apply to this type of object JScmd.inputmessage=Your question ? JScmd.promptmessage=Your message... menu.js=Javascript menu.js.script=Open javascript file... menu.js.command=Open the script editor JSeditor.title=Javascript editor #v3.0 JSeditor.save=Save script JSeditor.open=Open script JSeditor.opendlogmsg=Open script JSeditor.savedlogmsg=Save script JSeditor.format=Format script JSeditor.restore=Cancel last run JSeditor.run=Run script JSeditor.help=Get syntax help JSEditor.comment=Comment/Uncomment selection JSEditor.savequestion=This script changed : would you like to save it ? menu.language.ar_TN=Arabic # v3.1.1 menu.js.define=Define scripts folder... menu.js.dumb=Execute favorites scripts without editor JSeditor.opendfavfolder=Select script folder JSeditor.saveas=Save script as... # v3.5 menu.language.sv=Svenska tab.popup.newfigure=New figure tab.popup.rename=Rename figure tab.popup.duplicate=Duplicate figure tab.popup.openworkbook=Open workbook... tab.popup.saveworkbookas=Save workbook as... tab.popup.saveworkbook=Save workbook tab.newfigurebasename=Figure workbook.workbookmode=Workbook mode workbook.savequestion=This Workbook have been modified. Do you want to save it ? progressbar.loadmessage=Loading file : please wait... progressbar.workbookloadmessage=Loading workbook : please wait... progressbar.workbooksavemessage=Saving workbook : please wait... macro.creationdlog.title=Macro creation macros.name=Macro name ? JSmenu.cancel=Cancel last run JSmenu.add=Add new script JSmenu.modify=Modify script JSmenu.delete=Delete script JSeditor.saveinfig.question=Enter script name : JSeditor.saveinfig.title=Save script to current file JSeditor.saveinfig=Save script to current file JSeditor.infig=File included script : menu.js.newscriptinconstruction=New script in construction... menu.workbook.saveas=Save Workbook As... media.saveas=Images were found in open constructions,
so you're going to save files in a same workbook. menu.display.comment=Show/Hide comments menu.display.palette=Show/Hide palette menu.display.leftpanel=Show/Hide left panel comment.emptycomment= menu.export.workbook=Workbook HTML page export menu.export.workbook.error=You must menu.assigment=Exercise JSerror.condition=Conditional expression error filedialog.workbook=CaRMetal workbook (.zirs) filedialog.job=CaRMetal exercise (.job) filedialog.js=CaRMetal scripts (.js) filedialog.allfiles=CaRMetal files (.zirs,.zir,.zirz,.mcr,.job,.js) tab.popup.savefileonly=Save figure animation.run=Start Animations animation.stop=Stop Animations animation.speed=Animations Speed animation.removeall=Remove All Animations animation.reverse=Reverse Animations restrict.title=Restricted environment manager menu.display.restrictedenvironment=Restricted environment manager restrict.ok=Ok restrict.cancel=Cancel restrict.activate=Activate restricted environment restrict.factory=Factory settings restrict.comment=In order to select or deselect easily multiple palette tools, you can use a right-click/drag on icons. restrict.menubar=Display menu bar restrict.librarymacros=Allow library macros menu.help.opendefaultfolder=Open configuration folder monkey.btn.tooltip=Shaking construction job.message.ok=Well Done ! job.message.failed=Invalid construction... job.gui.hidebox=Hide target objects job.gui.ok=Success message : job.gui.failed=Failed message : job.gui.targets=Targets list : click here to select job.gui.close=Create job.gui.delete=Remove job.gui.valid=Verify construction job.gui.restore=Back to origin job.gui.exercise=This is an exercise : job.gui.progressmessage=Construction checking in progress job.gui.alignment=but construction is not valid in some alignment cases job.gui.title=Exercise editor restrict.historypanel=Allow history panel display restrict.macropanel=Allow macro panel display restrict.helppanel=Allow help panel display restrict.failed.percent=the recorded failure rate was : restrict.failed.initial=failed in initial position./src/eric/docs/.cvsignore0000644000175000017500000000001211344215474014410 0ustar yvesyves.DS_Store ./src/eric/docs/index.html0000644000175000017500000001062211302427452014410 0ustar yvesyves CaRMetal slideshow

Lien 1

Figure n° Navigation
télécharger
Activité réalisée avec CaRMetal
./src/eric/docs/JZirkelProperties_sl.properties0000644000175000017500000002427111302427452020663 0ustar yvesyves filedialog.alsorestricted=Shrani tudi omejeno konstrukcijo filedialog.compressedfilefilter=Stisnjena Ri\u0160 datoteka (.zirz) filedialog.filefilter=Ri\u0160 datoteka (.zir) filedialog.macrofilefilter=Ri\u0160 makro datoteka (.mcr) filedialog.openfolder.actualsize=Trenutna velikost # v1.7 : filedialog.openfolder.appletsize=Velikost apleta : filedialog.openfolder.approve=Mapa s predstavitvijo filedialog.openfolder.cancel=Prekini filedialog.openfolder.other=Ostalo... filedialog.openfolder.saveicons=Shrani tudi omejene ikone filedialog.openfolder.selected=Izbrani imenik : filedialog.openfolder.title=Izbira mape s predstavitvijo filedialog.options=Mo\u017Enosti shranjevanja filedialog.restrictedmessage=Dela\u0161 v omejeni seji,
zato bo slika shranjena v omejenem na\u010Dinu filedialog.saveas=Shrani konstrukcijo filedialog.savemessage1=Datoteka :\n\ filedialog.savemessage2=\n\ obstaja. Ali jo \u017Eeli\u0161 zamenjati? leftpanel.help=Okvir s pomo\u010Djo leftpanel.history=Okvir zgodovine leftpanel.macros=Okvir z makroji leftpanel.properties=Okvir z lastnostmi macro.bi_biss.0=Prva to\u010Dka? macro.bi_biss.1=Vrh kota? macro.bi_biss.2=Tretja to\u010Dka? macro.bi_circ.0=Prva to\u010Dka? macro.bi_circ.1=Druga to\u010Dka? macro.bi_circ.2=Tretja to\u010Dka? macro.bi_med.0=Prva to\u010Dka daljice? macro.bi_med.1=Druga to\u010Dka daljice? macro.bi_syma.0=Premica zrclajenja? macro.bi_syma.1=To\u010Dka, ki jo zrcalimo? macro.bi_symc.0=Sredi\u0161\u010De simetrije? macro.bi_symc.1=To\u010Dka zrcaljenja? macro.bi_t_align.text0=To\u010Dke so kolinearne macro.bi_t_align.text1=To\u010Dke niso kolinearne macro.bi_t_app.0=Izberi to\u010Dko macro.bi_t_app.1=Na kateri premici (daljici) le\u017Ei? macro.bi_t_app.text0=To\u010Dka le\u017Ei na objektu macro.bi_t_app.text1=To\u010Dka ne le\u017Ei na objektu macro.bi_t_conf.0=Izberi to\u010Dko macro.bi_t_conf.1=Na kateri to\u010Dki? macro.bi_t_conf.text0=To\u010Dki se pokrivata macro.bi_t_conf.text1=To\u010Dki se ne pokrivata macro.bi_t_equi.0=Je ta to\u010Dka enako oddaljena ... macro.bi_t_equi.1=od te to\u010Dke ... macro.bi_t_equi.2=In ta to\u010Dka ? macro.bi_t_equi.text0=To\u010Dki sta enako oddaljeni macro.bi_t_equi.text1=To\u010Dki nista enako oddaljeni macro.bi_t_para.0=Prva premica? macro.bi_t_para.1=Druga premica? macro.bi_t_para.text0=Premici sta vzporedni macro.bi_t_para.text1=Premici nista vzporedni macro.bi_t_perp.text0=Premici sta pravokotni macro.bi_t_perp.text1=Premici nista pravokotni macro.bi_trans.0=Prva to\u010Dka vektorja? macro.bi_trans.1=Druga to\u010Dka vektorja? macro.bi_trans.2=To\u010Dka, ki jo premikamo? macros.addfolder=Dodaj novo mapo macros.cancel=Prekini? macros.deleteselected=Zbri\u0161i izbrani makro\ macros.emptynode=-- Prazno-- macros.finals=Izhodni objekti ? macros.initials=Vhodni objekti? macros.pleaseselect=izberi prosim macros.popup.addtolibrary=Dodaj v knji\u017Enico macros.popup.delete=Zbri\u0161i macros.popup.duplicate=Podvoji macros.popup.notpublish=Ne vklju\u010Di v sliko macros.popup.properties=Prika\u017Ei lastnosti macros.popup.publish=Vklju\u010Di v sliko macros.popup.removefromlibrary=Odstrani iz knji\u017Enice macros.popup.rename=Preimenuj macros.popup.run=Za\u017Eeni makro macros.popup.saveas=Shrani kot... macros.question.delete=Zares \u017Eeli\u0161 izbrisati ta makro? macros.recordmacro=Sestavi makro macros.renamemacro=Preimenuj izbrani makro macros.savedlog.buttonok=Shrani makro datoteko macros.untitledfolder=\u0160e neimenovan macros.untitledmacro=\u0160e neimenovan makro menu.display=Prikaz menu.display.finegrid=Le osi menu.display.grid=Prika\u017Ei/skrij mre\u017Eo menu.display.help_panel=Pomo\u010D menu.display.hidden=Prika\u017Ei/skrij objekt menu.display.history_panel=Zgodovina menu.display.large=Velike ikone menu.display.leftsnap=Ujemanje z mre\u017Eo menu.display.manage_macros=Upravljanje makrojev menu.display.medium=Srednje ikone menu.display.properties_panel=Okvir z latnostmi objektov menu.display.restrictedpalette=Prika\u017Ei omejeno paleto menu.display.restrictedpaletteedit=Uredi omejeno paleto menu.display.restrictmessage=
Ta mo\u017Enost omogo\u010Da preklop naomejen nabor orodij.

Nana\u0161a se na trenutno datoteko :

\u010De izbere\u0161 'shrani kot', lahko izbere\u0161 'shrani tudi omejeno sliko'
in shranjeni bosta dve datoteki: prva (.zir) 'normalni' na\u010Din z vsemi mo\u017Enostmi,
in druga (.r.zir) v omejenem na\u010Dinu
menu.display.small=Majhne ikone menu.display.smartboard=Na\u010Din z odzivno risalno povr\u0161ino menu.edit=Uredi menu.edit.copy=Kopiraj menu.edit.delete=Bri\u0161i menu.edit.edit=Uredi menu.edit.hide=Skrij menu.edit.move=Premakni menu.edit.rename=Preimenuj menu.file=Datoteka menu.file.exporteps=Izvoz v EPS menu.file.exportpng=Izvoz v PNG menu.file.exportsvg=Izvoz v SVG menu.file.load=Odpri... menu.file.new=Nova menu.file.quit=Izhod menu.file.save=Shrani menu.file.saveas=Shrani kot... menu.help=Pomo\u010D menu.help.about=Program CaRMetal... menu.help.info=Kontekstualna pomo\u010D menu.help.url0=Stran CARzine menu.help.url2=Uradna Ri\u0160 stran menu.help.url3=Prevodi CaRMetal # v1.5 : menu.language=Jeziki # v1.6 : menu.macros=Makroji menu.special=Posebno menu.special.definejob=Definiraj nalogo menu.special.export=Izvoz v HTML menu.special.exporttemplate=HTML izvoz s predlogo menu.special.jobcomment=Tekst za nalogo ... menu.special.loadjob=Odpri nalogo ... menu.special.loadmacros=Odpri datoteko z makroji... menu.special.newmacro=Nov makro menu.special.savejob=Shrani nalogo... # v1.4 : menu.special.savezirset=Naredi predstavitev... menu.special.testjob=Preveri nalogo mi.apply=Uporabi mi.comment=Komentar : mi.error.initial=Napaka: vsaj en parameter mora\n\ biti prost (nekonstanten, ne z vnosom)\n\ \n\ Ta makro ne bo spremenjen mi.hideduplicates=Skrij prekrite mi.hideproperties=Lastnosti cilja: mi.name=Ime: mi.pal.name=Upravljalnik makrojev mi.properties=Lastnosti parametrov: mi.tab.ask=Vpra\u0161aj? mi.tab.fix=Konstantno? mi.tab.name=Ime mi.tab.prompt=Vnos mi.tab.type=Vrsta palette.aspect=Pogled Barva palette.colors=Slika za ozadje palette.colors.constants=HTML konstante palette.colors.desaturated1=Neprepletajo\u010De barve palette.colors.desaturated2=Neprepletajo\u010De barve 2 palette.colors.saturated1=Prepletajo\u010De barve palette.colors.saturated2=Prepletajo\u010De barve 2 palette.construction=Konstrukcija palette.edit=Uredi palette.file=Datoteka palette.grid=Mre\u017Ea palette.history=Zgodovina palette.image.fileerror=Najprej mora\u0161 shraniti sliko

Slika, ki jo izbere\u0161,
pa mora biti v isti mapi. palette.info.background=Izberi/zbri\u0161i sliko za ozadje palette.info.bi_arc=Kro\u017Eni lok skozi tri to\u010Dke palette.info.bi_biss=Simetrala kota palette.info.bi_circ=Kro\u017Enica skozi tri to\u010Dke palette.info.bi_med=Simetrala daljice palette.info.bi_syma=Zrcaljenje palette.info.bi_symc=Simetrija palette.info.bi_t_align=Kolinearne to\u010Dke? palette.info.bi_t_app=Le\u017Ei na premici? palette.info.bi_t_conf=Se to\u010Dke prekrivajo? palette.info.bi_t_equi=Enako oddaljena od dveh to\u010Dk? palette.info.bi_t_para=Vzporednici? palette.info.bi_t_perp=Pravokotnici? palette.info.bi_trans=Translacija palette.info.copy=Kopiraj okno s konstrukcijo palette.info.exporteps=Izvoz konstrukcije v eps format palette.info.exportpng=Izvoz konstrukcije v png format palette.info.help_panel=Prika\u017Ei/skrij okvir s pomo\u010Djo palette.info.history_panel=Prika\u017Ei/skrij okvir z zgodovino\ palette.info.image3=Vstavi sliko z dvema ali tremi vogali palette.info.imcenter=Usredini sliko za ozadje palette.info.imstretch=Raz\u0161iri sliko za ozadje do velikosti okna palette.info.imtile=Razporedi sliko za ozadje palette.info.loadmacros=Odpri datoteko z makroji palette.info.locus=Sled to\u010Dke Ovojnica premice palette.info.manage_macros=Prika\u017Ei/skrij okvir z makroji palette.info.newmacro=Izdelaj makro palette.info.properties_panel=Prika\u017Ei/skrij okvir z lastnostmi objektov palette.info.vector=Vektor palette.prec=\u0160tevilo decimalk palette.prec.angles=Koti palette.prec.edit=Izrazi palette.prec.lengths=Dol\u017Eine palette.sizes=Velikosti palette.sizes.arrow=Pu\u0161\u010Dica palette.sizes.font=Pisava palette.sizes.line=Premica palette.sizes.point=To\u010Dka palette.test=Preverjanje props.alias=Alias : props.arc=Lok props.belongto=Plast : props.bind=Povezava props.black=\u010Crna : props.blue=Modra : props.bold=Debelina : props.brown=Rjava : props.cartesian=Eksplicitna funkcija props.conditional=Pgojno oblikovanje : props.cyan=Turkizna : props.error=V tem izrazu je sintakti\u010Dna napaka.
Izraz bo vrnjen na za\u010Detek. props.expl=Pojasnilo: props.fix=Konstantno: props.functiontype=Vrsta : props.green=Zelena : # v1.3 : props.grid=Korak : props.help=\u010Ce \u017Eeli\u0161 videti lastnosti, klikni z desno tipko na objektu.

\u010Ce je ta okvir odprt med ustvarjanjem novega objekta, mu lahko sproti dolo\u010Da\u0161 lastnosti. props.hidden=Skrito : props.inside=Znotraj objekta : props.killarc=Zbri\u0161i lok props.name=Ime: props.normal=Privzeto: props.parametric=Parametri\u010Dna funkcija props.pointsonly=Le s to\u010Dkami: props.red=Rde\u010Da: props.release=Sprosti props.setaway=Postavi vstran props.setclose=Nastavi zaprto props.showasslider=Drsnik: props.solid=Mo\u010Dna: props.step=Korak: props.thin=To\u010Dkasto: props.unit=Enota: rene.zirkel.objects.AreaObject=Plo\u0161\u010Dina rene.zirkel.objects.ExpressionObject=Izraz rene.zirkel.objects.FixedAngleObject=Kot z velikostjo. rene.zirkel.objects.FunctionObject=Funkcija rene.zirkel.objects.PointObject=To\u010Dka rene.zirkel.objects.PrimitiveCircleObject=Krog rene.zirkel.objects.PrimitiveLineObject=Premica rene.zirkel.objects.RayObject=Poltrak rene.zirkel.objects.SegmentObject=Daljica rene.zirkel.objects.TwoPointLineObject=Premica selectpopup.DeleteTool=Brisanje selectpopup.EditTool=Urejanje selectpopup.HiderTool=Prika\u017Ei skrij selectpopup.MoverTool=Premikanje selectpopup.RenamerTool=Preimenovanje selectpopup.RightClick=Izberi selectpopup.SetParameterTool=Parametri makroja: selectpopup.SetTargetsTool=Cilj makroja: selectpopup.whatobject=kateri objekt? slideshow.download=Prenesi datoteko slideshow.next=naslednje slideshow.previous=prej\u0161nje slideshow.signature=Predstavitev narejena z ./src/eric/docs/JZirkelProperties_sv.properties0000644000175000017500000004256111322063110020664 0ustar yvesyves# Sample ResourceBundle properties file menu.file=Fil menu.file.new=Ny menu.file.load=\u00D6ppna... menu.file.save=Spara menu.file.saveas=Spara Som... menu.file.exportpng=Exportera till PNG menu.file.exporteps=Exportera till EPS menu.file.quit=Avsluta menu.edit=Redigera menu.edit.copy=Kopiera menu.edit.move=Flytta objekt menu.edit.rename=D\u00F6p om menu.edit.edit=Redigera menu.edit.hide=G\u00F6m menu.edit.delete=Radera menu.display=Visa menu.display.hidden=Visa/G\u00F6m Objekt menu.display.grid=Visa/G\u00F6m Rutn\u00E4t menu.display.finegrid=Endast axlar menu.display.leftsnap=F\u00E4st med v\u00E4nster musdragning menu.display.manage_macros=Makro Inspekt\u00F6r menu.display.history_panel=Logg menu.display.help_panel=Hj\u00E4lp menu.display.properties_panel=Panel f\u00F6r Objektegenskaper menu.display.small=Sm\u00E5 ikoner menu.display.medium=Medium ikoner menu.display.large=Stora ikoner menu.display.restrictedpalette=Visa Begr\u00E4nsad Palett menu.display.restrictedpaletteedit=Redigera Begr\u00E4nsad Palett menu.display.restrictmessage=
Denna punkt till\u00E5ter dig att visualisera den begr\u00E4nsade paletten.

Det g\u00E4ller bara den nuvarande filen :

n\u00E4r du v\u00E4ljer 'spara som', s\u00E5 kommer det vara m\u00F6jligt att \u00E4ven v\u00E4lja 'spara \u00E4ven den begr\u00E4nsade figuren'
tv\u00E5 filer kommer att skapas : den f\u00F6rsta (.zir) kommer att \u00F6ppnas i 'normalt' l\u00E4ge, och
den andra (.r.zir) i begr\u00E4nsat l\u00E4ge
menu.macros=Makron menu.special=Special menu.special.newmacro=Nytt Makro menu.special.loadmacros=\u00D6ppna Makro Fil... menu.special.definejob=Definiera en Arbetsuppgift menu.special.loadjob=Ladda en Arbetsuppgift ... menu.special.jobcomment=Ange text f\u00F6r Arbetsuppgift ... menu.special.testjob=Testa denna Arbetsuppgift menu.special.savejob=Spara som Arbetsuppgift ... menu.special.export=Skapa HTML Fil och f\u00F6rhandsvisning i webbl\u00E4sare menu.special.exporttemplate=HTML Export med Exempel menu.help=Hj\u00E4lp menu.help.about=Om CaRMetal... menu.help.info=Sammanhangshj\u00E4lp menu.help.url0=G\u00E5 till CaRMetal sajten menu.help.url1=G\u00E5 till CARzine sajten menu.help.url2=G\u00E5 till den officiella C.a.R. sajten filedialog.saveas=Spara Figur filedialog.alsorestricted=Spara \u00E4ven begr\u00E4nsad figur filedialog.options=Spara alternativ filedialog.restrictedmessage=Du arbetar i en begr\u00E4nsad session,
s\u00E5 din figur kommer att sparas i begr\u00E4nsat l\u00E4ge filedialog.filefilter=CaR Fil (.zir) filedialog.compressedfilefilter=Komprimerad CaR Fil (.zirz) filedialog.macrofilefilter=CaR Makro Fil (.mcr) filedialog.savemessage1=Fil :\n filedialog.savemessage2=\nfinns redan. Vill du verkligen ers\u00E4tta den ? palette.file=Fil palette.edit=Redigera palette.construction=Konstruktion palette.aspect=Aspekt & F\u00E4rg palette.history=Logg palette.sizes=Storlekar palette.sizes.point=Punkt palette.sizes.line=Linje palette.sizes.arrow=Pil palette.sizes.font=Typsnitt palette.prec=Numerisk precision palette.prec.lengths=L\u00E4ngder palette.prec.edit=Uttryck palette.prec.angles=Vinklar palette.colors=Bakgrundsf\u00E4rg & bild palette.colors.saturated1=M\u00E4ttade f\u00E4rger palette.colors.desaturated1=Om\u00E4ttade f\u00E4rger palette.colors.saturated2=M\u00E4ttade f\u00E4rger 2 palette.colors.desaturated2=Om\u00E4ttade f\u00E4rger 2 palette.colors.constants=Web konstanter palette.image.fileerror=Du m\u00E5ste spara denna figur innan du anv\u00E4nder detta verktyg

Efter\u00E5t, s\u00E5 m\u00E5sta den bild som du v\u00E4ljer vara
i samma katalog. palette.info.vector=Vektor palette.info.image3=S\u00E4tt in bild+med 2 eller 3 punkter palette.info.background=Choose/Rensa bakgrundsbild palette.info.imcenter=Centrera bakgrundsbild palette.info.imstretch=St\u00E4ck ut bakgrundsbilden+s\u00E5 den passar konstruktionsf\u00F6nstret palette.info.imtile=\u00D6verlappa bakgrundsbilden palette.info.copy=Kopiera konstruktionsf\u00F6nstret palette.info.exportpng=Exportera konstruktions+f\u00F6nstret till png format palette.info.exporteps=Exportera konstruktions+f\u00F6nstret till eps format palette.info.newmacro=Skapa ett nytt makro palette.info.loadmacros=Ladda en makro fil palette.info.manage_macros=Visa/g\u00F6m makropanelen palette.info.properties_panel=Visa/g\u00F6m objekt+egenskapspanelen palette.info.history_panel=Visa/g\u00F6m konstruktions+loggpanelen palette.info.help_panel=Visa/g\u00F6m sammanhangshj\u00E4lppanelen macros.untitledmacro=Od\u00F6pt Makro macros.untitledfolder=Od\u00F6pt mapp macros.emptynode=-- Tom -- macros.addfolder=L\u00E4gg till ny mapp macros.deleteselected=Radera valda makron macros.renamemacro=D\u00F6p om valt makro macros.recordmacro=Spela in makro macros.initials=Inledande objekt ? macros.pleaseselect=V\u00E4lj ! macros.finals=Slutliga objekt ? macros.cancel=Avbryt ? macros.popup.run=K\u00F6r makro macros.popup.rename=D\u00F6p om macros.popup.delete=Radera macros.popup.addtolibrary=L\u00E4gg till bibliotek macros.popup.removefromlibrary=Ta bort fr\u00E5n bibliotek macros.popup.publish=Inkludera i figuren macros.popup.notpublish=Inkludera inte i figuren macros.popup.saveas=Spara som... macros.popup.properties=visa egenskaper macros.popup.duplicate=Duplicera macros.savedlog.buttonok=Spara makrofil macros.question.delete=\u00C4r du s\u00E4ker p\u00E5 att du vill radera dessa makron ? rene.zirkel.objects.PointObject=Punkt rene.zirkel.objects.PrimitiveCircleObject=Cirkel rene.zirkel.objects.PrimitiveLineObject=Linje rene.zirkel.objects.ExpressionObject=Uttryck rene.zirkel.objects.FixedAngleObject=Fast vinkel rene.zirkel.objects.SegmentObject=Segment rene.zirkel.objects.RayObject=Str\u00E5le rene.zirkel.objects.TwoPointLineObject=Linje rene.zirkel.objects.FunctionObject=Funktion rene.zirkel.objects.AreaObject=Area mi.pal.name=Macros inspekt\u00F6r mi.name=Namn : mi.comment=Kommentar : mi.properties=Parameteregenskaper : mi.hideproperties=M\u00E5legenskaper : mi.hideduplicates=G\u00F6m dubletter mi.apply=Verkst\u00E4ll mi.tab.type=Typ mi.tab.name=Namn mi.tab.prompt=Prompt mi.tab.fix=F\u00E4st ? mi.tab.ask=Fr\u00E5ga ? mi.error.initial=Fel : minst en parameter \nm\u00E5ste vara fri (ingen f\u00E4st, ingen fr\u00E5ga)\n\nDetta makro kommer inte att \u00E4ndras props.help=F\u00F6r att kunna se egenskaper, s\u00E5 m\u00E5sta du h\u00F6gerklicka p\u00E5 ett objekt.

Om du skapar ett nytt objekt n\u00E4r denna panel \u00E4r\u00F6ppen, s\u00E5 kommer du kunna \u00E4ndra dess egenskaper under skapandet. props.name=Namn : props.alias=Alias : props.unit=Enhet : props.fix=F\u00E4st : props.expl=F\u00F6rklaring : props.belongto=Lager : props.conditional=Villkorligt l\u00E4ge : props.solid=Solid : props.hidden=G\u00F6md : props.normal=Normal : props.bold=Tjock : props.thin=Prickad : props.black=Svart : props.green=Gr\u00F6n : props.blue=Bl\u00E5 : props.brown=Brun : props.cyan=Cyan : props.red=R\u00F6d : props.showasslider=Skjutknapp props.error=Det finns ett syntaxfel i detta uttryck.
Det kommer att \u00E5terinitieras props.cartesian=Kartesisk funktion props.parametric=Parametrisk funktion props.functiontype=Typ : props.killarc=ta bort cirkelb\u00E5ge props.arc=Cirkelb\u00E5ge props.release=Sl\u00E4pp props.bind=F\u00E4st props.setaway=H\u00E5ll borta props.setclose=h\u00E5ll n\u00E4ra # v1.3 : props.grid=Inkrement : props.inside=Inuti objekt : props.pointsonly=Endast med punkter : props.step=Steg : palette.grid=Rutn\u00E4tsutseende leftpanel.macros=Makro panel leftpanel.properties=Egenskaper panel leftpanel.history=Logg panel leftpanel.help=Hj\u00E4lp panel selectpopup.whatobject=vilket objekt ? selectpopup.RightClick=V\u00E4lj selectpopup.MoverTool=Flytta selectpopup.HiderTool=Visa/G\u00F6m selectpopup.DeleteTool=Radera selectpopup.RenamerTool=D\u00F6p om selectpopup.EditTool=Redigera selectpopup.SetParameterTool=Makro parametrar : selectpopup.SetTargetsTool=Makro m\u00E5l : palette.info.locus=Punktens ort+Linjens Envelopp # v1.4 : menu.special.savezirset=Skapa bildspel... filedialog.openfolder.title=Dialog f\u00F6r val av bildspelsmapp filedialog.openfolder.approve=V\u00E4lj bildspelsmapp filedialog.openfolder.saveicons=Spara \u00E4ven begr\u00E4nsade ikoner slideshow.next=n\u00E4sta slideshow.previous=f\u00F6reg\u00E5ende slideshow.download=Ladda ned fil slideshow.signature=Bildspel gjord med # v1.5 : menu.language=Spr\u00E5k menu.language.de=Deutsch menu.language.en=English menu.language.fr=Fran\u00E7ais menu.language.es=Espa\u00F1ol menu.language.gl=Galego menu.language.zh_TW=Chinese (Traditional) menu.help.url3=\u00D6vers\u00E4tt CaRMetal menu.display.smartboard=Smartboard l\u00E4ge # v1.6 : menu.language.no=Norsk palette.info.bi_syma=Spegling palette.info.bi_symc=Symmetri palette.info.bi_trans=F\u00F6rflyttning palette.info.bi_med=Vinkelr\u00E4t bisektris palette.info.bi_biss=Vinkel bisektris palette.info.bi_circ=Cirkel genom 3 punkter palette.info.bi_arc=Cirkelb\u00E5ge genom 3 punkter palette.info.bi_t_align=Kolinj\u00E4ra punkter ? palette.info.bi_t_para=Parallella linjer ? palette.info.bi_t_perp=Vinkelr\u00E4ta linjer ? palette.info.bi_t_equi=Samma avst\u00E5nd fr\u00E5n tv\u00E5 punkter ? palette.info.bi_t_app=Ligger p\u00E5 en linje ? palette.info.bi_t_conf=Punkter p\u00E5 samma plats ? macro.bi_syma.0=Speglingsaxel ? macro.bi_syma.1=Punkt att spegla ? macro.bi_symc.0=Symmetri center ? macro.bi_symc.1=Punkt att spegla ? macro.bi_trans.0=Vektorns f\u00F6rsta punkt ? macro.bi_trans.1=Vektorns andra punkt ? macro.bi_trans.2=Punkt att f\u00F6rflytta ? macro.bi_med.0=Segmentets f\u00F6rsta punkt ? macro.bi_med.1=Segmentets andra punkt ? macro.bi_biss.0=F\u00F6rsta punkten ? macro.bi_biss.1=Vinkelh\u00F6rn ? macro.bi_biss.2=Sista punkten ? macro.bi_circ.0=F\u00F6rsta punkten ? macro.bi_circ.1=Andra punkten ? macro.bi_circ.2=Tredje punkten ? macro.bi_t_para.0=F\u00F6rsta linjen ? macro.bi_t_para.1=Andra linjen ? macro.bi_t_equi.0=Har denna punkt samma avst\u00E5nd ... macro.bi_t_equi.1=Fr\u00E5n denna punkt ... macro.bi_t_equi.2=Och denna punkt ? macro.bi_t_app.0=Vilken punkt ? macro.bi_t_app.1=Ligger p\u00E5 vilken linje (eller segment) ? macro.bi_t_conf.0=Vilken punkt ? macro.bi_t_conf.1=\u00E4r p\u00E5 vilken punkt ? macro.bi_t_align.text0=Punkterna \u00E4r kolinj\u00E4ra macro.bi_t_align.text1=Punkterna \u00E4r inte kollinj\u00E4ra macro.bi_t_para.text0=Objekten \u00E4r parallella macro.bi_t_para.text1=Objekten \u00E4r inte parallella macro.bi_t_perp.text0=Objekten \u00E4r vinkelr\u00E4ta macro.bi_t_perp.text1=Objekten \u00E4r inte vinkelr\u00E4ta macro.bi_t_equi.text0=Punkterna har samma avst\u00E5nd macro.bi_t_equi.text1=Punkterna har inte samma avst\u00E5nd macro.bi_t_app.text0=Punkten ligger p\u00E5 objektet macro.bi_t_app.text1=Punkten ligger inte p\u00E5 objektet macro.bi_t_conf.text0=De tv\u00E5 punkterna ligger p\u00E5 samma plats macro.bi_t_conf.text1=De tv\u00E5 punkterna ligger inte p\u00E5 samma plats palette.test=Tester # v1.7 : filedialog.openfolder.appletsize=Applet storlek : filedialog.openfolder.actualsize=Aktuell storlek filedialog.openfolder.other=Annat... filedialog.openfolder.selected=Vald mapp : filedialog.openfolder.cancel=Avbryt menu.file.exportsvg=Exportera till SVG menu.language.sl=Slovenski menu.language.nl=Nederlands menu.language.pt=Portugu\u00EAs props.vars=Variabler : menu.objects.points=Punkter menu.objects.lines=Linjer menu.objects.segments=Segment menu.objects.circles=Cirklar och k\u00E4glor menu.objects.angles=Vinklar menu.objects.tracks=Sp\u00E5r och ort menu.objects.functions=Funktioner och uttryck palette.info.function_u=Anv\u00E4ndardefinierad funktion palette.info.function=Visa funktion+eller parametrisk kurva props.superhidden=Helt g\u00F6md : props.showvalue=Visa v\u00E4rde : props.showname=Visa namn : props.background=Bakgrund : macro.bi_expression.0=Ankarpunkt ? # v1.9a : menu.help.licence=Licens... licence.txt=

Detta program \u00E4r fri mjukvara under GNU-GPL licensen, vilket inneb\u00E4r att du kan redistribuera den och/eller f\u00F6r\u00E4ndra den under licensens villkor, som \u00E4r publicerad av the Free Software Foundation;
Se :

# v2.0 : menu.special.theme=Teman menu.special.theme.gray=Polerad metall menu.special.theme.brushed=Borstad metall menu.special.options=Alternativ... menu.special.options.sizes=Storlekar menu.special.options.sizes.minpointsize=Punktstorlek menu.special.options.sizes.minlinesize=Linjetjocklek menu.special.options.sizes.arrowsize=Pilstorlek menu.special.options.sizes.minfontsize=Typsnittsstorlek menu.special.options.sizes.digits.lengths=L\u00E4ngdprecision menu.special.options.sizes.digits.edit=Uttrycksprecision menu.special.options.sizes.digits.angles=Vinkelprecision menu.special.options.colors=F\u00E4rger menu.special.options.others=Annat menu.special.options.others.undock=M\u00F6jligt att koppla loss paletter # v2.1 : menu.file.close=St\u00E4ng f\u00F6nster # v2.3 : alert.toomuchwins=Det finns f\u00F6r m\u00E5nga \u00F6ppna f\u00F6nster :
st\u00E4ng n\u00E5gra av dem innan du \u00F6ppnar
ett nytt # v2.4 : menu.file.new3D=Ny 3D figur palette.3D=3D palette.info.bi_3Dcoords=3D koordinater macro.bi_3Dcoords.0=Ankarpunkt ? palette.info.bi_3Dcube=Kub macro.bi_3Dcube.0=Kubens centrum ? palette.info.bi_3Darete=3D kanter macro.bi_3Darete.0=F\u00F6rsta punkten ? macro.bi_3Darete.1=andra punkten ? macro.bi_3Darete.2=Tredje punkten ? macro.bi_3Darete.3=Fj\u00E4rde punkten ? palette.info.bi_3Dtetra=Liksidig tetrahedon macro.bi_3Dtetra.0=Tetrahedons centrum ? menu.newdoc=Ny menu.language.it=Italiano # v2.5.5 : palette.aspect.label.text=Aspekt av palette.aspect.label.point=punkter palette.aspect.label.line=linjer palette.aspect.label.segment=segment palette.aspect.label.circle=cirklar palette.aspect.label.angle=vinklar palette.aspect.label.area=polygoner palette.aspect.label.bi_text=text palette.info.bi_3Ddode=Liksidig dodekahedron macro.bi_3Ddode.0=Dodekahedrons centrum ? # v2.7 : palette.aspect.label.pointshape=Form & namn p\u00E5 punkter : palette.aspect.label.locus=Ort menu.edit.deleteall=Radera allt # v2.7.1 : java.old.message=Beklagar, du kan inte starta CaRMetal programmet, d\u00E4rf\u00F6r att versionen p\u00E5 din java \u00E4r f\u00F6r gammal ! java.old.quit=Avsluta java.old.go=Ladda ned ny java version palette.info.boundedpoint=Placera en punkt i ett plan+eller p\u00E5 en polyhedron yta #v2.7.2 : user.foldername=CarMetal Anv\u00E4ndarprofil #v2.8 props.fixedray=Str\u00E5le : props.fixedsegment=L\u00E4ngd : props.fixedangle=Vinkel : props.expl=Kommentarlinje : props.aspecttab=L\u00E4ge props.numerictab=Numerisk props.conditionaltab=Villkor props.thick=Tjocklek : props.popup.special=Specialtecken props.popup.functions=F\u00F6rdefinierade funktioner props.popup.latex=LaTeX kommandon menu.language.pl=Polski #v2.8.1 props.fixedinwindow=L\u00E4nkat till f\u00F6nster #v2.8.5 palette.controls=Kontroller props.ctrlshowvalue=Visa v\u00E4rde props.ctrlsnap=Sn\u00E4pp till rutn\u00E4t props.ctrlshowticks=Visa rutn\u00E4t props.ctrltickspacing=Inkrement : palette.info.ctrl_edit=Redigera, flytta eller \u00E4ndra storlek p\u00E5 kontrollen palette.info.ctrl_chkbox=L\u00E4gg till kryssruta palette.info.ctrl_popup=L\u00E4gg till popup-meny palette.info.ctrl_slider=Lagg till skjutkontroll #v2.8.6 props.trackdmin=Antal steg : opendialog.preview=F\u00F6rhandsvisning : pngdialog.options=Exportalternativ : pngdialog.scale=Skala : pngdialog.originsize=Original storlek : pngdialog.scaledsize=Skalad storlek : #v2.8.7 canvas.3D.floor=Golv canvas.3D.system=Koordinatsystem canvas.3D.rightclic=Anv\u00E4nd h\u00F6gerklick-dra f\u00F6r att rotera koordinatsystemet #v2.8.8 palette.info.equationxy=Kurva definierad av f(x,y)=0 props.equationxy=Ekvation : props.equationxychooser=Precision : palette.function=Funktioner & ort #v2.8.9 menu.edit.deletealltracks=Rensa sp\u00E5r menu.edit.deactivatealltracks=Avaktivera sp\u00E5r props.tracks=Aktivera sp\u00E5r menu.edit.zoom=Zoom eller flytta #v2.9.0 menu.windows=F\u00F6nster #v2.9.1 contexthelp.seealso=Se \u00E4ven : #v2.9.2 menu.language.pt_BR=Brazilian menu.display.restrictmessage.dontdisplay=Visa inte detta meddelande mer #v2.9.6 props.magnetmessage=Klicka p\u00E5 de objekt som du vill l\u00E4gga till (eller ta bort fr\u00E5n) den magnetiska listan props.magnetobj=Magnetiska objekt props.magnetpix=Attraktion (20 px) : props.show=Visa #v2.9.7 palette.info.ctrl_txtfield=L\u00E4gg till numerisk inmatningsruta palette.info.ctrl_button=L\u00E4gg till knapp #v2.9.8.4 JSerror.title=Syntaxfel JSerror.line=linje JSerror.pointcoords=Syntaxfel i punktkoordinaterna JSerror.interactiveinput=Fel under val av objektet JSerror.notfound=Objekt ej funnet JSerror.notgoodtype=Om\u00F6jligt att anv\u00E4nda p\u00E5 denna objekttyp JScmd.inputmessage=Din fr\u00E5ga ? JScmd.promptmessage=Ditt meddelande... menu.js=Javascript menu.js.script=\u00D6ppna javascript fil... menu.js.command=\u00D6ppna skriptredigeraren JSeditor.title=Javascript redigerare #v3.0 JSeditor.save=Spara skript JSeditor.open=\u00D6ppna skript JSeditor.opendlogmsg=\u00D6ppna skript JSeditor.savedlogmsg=Spara skript JSeditor.format=Formattera skript JSeditor.restore=Avbryt sista k\u00F6rningen JSeditor.run=K\u00F6r skript JSeditor.help=H\u00E4mta syntax hj\u00E4lp JSEditor.comment=Kommentera/Avkommentera valet JSEditor.savequestion=Detta skript har \u00E4ndrats : vill du spara det ? menu.language.ar_TN=Arabic # v3.1.1 menu.js.define=Definiera skriptmapp... menu.js.dumb=K\u00F6r favoritskript utan redigerare JSeditor.opendfavfolder=V\u00E4lj skriptmapp JSeditor.saveas=Spara skript som..../src/eric/docs/JZirkelProperties_pt.properties0000644000175000017500000002736111302427452020673 0ustar yvesyves# Sample ResourceBundle properties file menu.file=Ficheiro menu.file.new=Novo menu.file.load=Abrir... menu.file.save=Guardar menu.file.saveas=Guardar como... menu.file.exportpng=Exportar para PNG menu.file.exporteps=Exportar para EPS menu.file.quit=Sair menu.edit=Edi\u00E7\u00E3o menu.edit.copy=Copiar menu.edit.move=Mover menu.edit.rename=Mudar nome menu.edit.edit=Modificar menu.edit.hide=Esconder menu.edit.delete=Apagar menu.display=Visualiza\u00E7\u00E3o menu.display.hidden=Mostrar/Esconder os objectos invis\u00EDveis menu.display.grid=Mostrar/Esconder a grelha menu.display.finegrid=Eixos somente menu.display.leftsnap=Grelha magn\u00E9tica menu.display.manage_macros=Gestor de macros menu.display.history_panel=Hist\u00F3rico menu.display.help_panel=Ajuda menu.display.properties_panel=Propriedades menu.display.small=Icones pequenos menu.display.medium=Icones m\u00E9dios menu.display.large=Icones grandes menu.display.restrictedpalette=Usar paleta reduzida menu.display.restrictedpaletteedit=Modificar paleta reduzida menu.display.restrictmessage=
Esta funcionalidade permite visualizar a paleta reduzida

que s\u00F3 diz respeito ao ficheiro em uso.

Ao «Guardar como», pode escolher a op\u00E7\u00E3o «Guardar tamb\u00E9m a figura em modo restrito».
Dois ficheiros ser\u00E3o criados ent\u00E3o: o primeiro (.zir) abrir\u00E1 em modo normal, e
o segundo (.r.zir) em modo restrito.
menu.macros=Macros menu.special=Especial menu.special.newmacro=Criar macro menu.special.loadmacros=Abrir um ficheiro de macros... menu.special.definejob=Definir um exerc\u00EDcio menu.special.loadjob=Abrir um exerc\u00EDcio... menu.special.jobcomment=Redigir texto do exerc\u00EDcio menu.special.testjob=Testar este exerc\u00EDcio menu.special.savejob=Guardar como exerc\u00EDcio menu.special.export=Criar um ficheiro HTML e ver num navegador menu.special.exporttemplate=Exportar em HTML como modelo menu.help=Ajuda menu.help.about=Sobre o CaRMetal... menu.help.info=Ajuda em contexto menu.help.url0=P\u00E1gina CaRMetal menu.help.url1=P\u00E1gina CARzine menu.help.url2=P\u00E1gina Oficial de ReC. filedialog.options=Op\u00E7\u00F5es filedialog.saveas=Guardar a constru\u00E7\u00E3o filedialog.alsorestricted=Guardar tamb\u00E9m a constru\u00E7\u00E3o em modo restrito filedialog.restrictedmessage=Est\u00E1 a trabalhar numa sess\u00E3o em modo restrito,
por isso, a sua constru\u00E7\u00E3o s\u00F3 pode ser guardada em modo restrito. filedialog.filefilter=Ficheiro ReC (.zir) filedialog.compressedfilefilter=Ficheiro ReC comprimido (.zirz) filedialog.macrofilefilter=Ficheiro de macros (.mcr) filedialog.savemessage1=O ficheiro :\n filedialog.savemessage2=\n j\u00E1 existe. Quer mesmo substituir pelo novo ? palette.file=Ficheiro palette.edit=Edi\u00E7\u00E3o palette.construction=Constru\u00E7\u00E3o palette.aspect=Aspecto cor palette.history=Hist\u00F3rico palette.sizes=Tamanhos palette.sizes.point=Pontos palette.sizes.line=Linhas palette.sizes.arrow=Setas palette.sizes.font=Texto palette.prec=Precis\u00E3o num\u00E9rica palette.prec.lengths=Comprimentos palette.prec.edit=Express\u00F5es palette.prec.angles=\u00C2ngulos palette.colors=Fundo : cor da imagem palette.colors.saturated1=Cores saturadas palette.colors.desaturated1=Cores menos saturadas palette.colors.saturated2=Cores saturadas 2 palette.colors.desaturated2=Cores menos saturadas2 palette.colors.constants=Cores Web palette.image.fileerror=Deve guardar a figura antes de utilizar esta funcionalidade.

Em seguida, a imagem que escolher deve constar
na mesmamesma lista. palette.info.vector=Vector palette.info.image3=Inserir uma imagem a partir de 2 ou 3 pontos palette.info.background=Escolher/Apagar uma imagem de fundo palette.info.imcenter=Centrar a imagem de fundo palette.info.imstretch=Expandir a imagem de fundo para que preencha a janela de constru\u00E7\u00E3o. palette.info.imtile=Reptir a imagem de fundo. palette.info.copy= Copiar a janela de constru\u00E7\u00E3o palette.info.exportpng=Exportar a constru\u00E7\u00E3o da janela actual para o formato PNG palette.info.exporteps=Exportar a constru\u00E7\u00E3o da janela actual para o formato EPS palette.info.newmacro=Criar uma nova macro palette.info.loadmacros=Abrir um ficheiro de macros palette.info.manage_macros=Mostrar/Esconder o painel de gest\u00E3o das macros palette.info.properties_panel=Mostrar/Esconder o painel das propriedades dos objectos palette.info.history_panel=Mostrar/Esconder o painel da hist\u00F3rico da constru\u00E7\u00E3o palette.info.help_panel=Mostrar/Esconder o painel da ajuda em contexto macros.untitledmacro=Macro sem nome macros.untitledfolder=Pasta sem nome macros.emptynode=-- Vazio -- macros.addfolder=Novas pastas macros.deleteselected=Eliminar macros seleccionadas macros.renamemacro=Mudar o nome da macro seleccionada macros.recordmacro=Gravar macro macros.initials=Objectos iniciais ? macros.pleaseselect=Seleccione, por favor ! macros.finals=Objectos finais ? macros.cancel=Cancelar ? macros.popup.run=Correr a macro macros.popup.rename=Mudar o nome macros.popup.delete=Apagar... macros.popup.addtolibrary=Acrecentar \u00E0 bibliotheca macros.popup.removefromlibrary=Retirar da biblioteca macros.popup.publish=Incluir na figura macros.popup.notpublish=N\u00E3o incluir na figura macros.popup.saveas=Guardar como... macros.popup.properties=Mostrar propriedades macros.popup.duplicate=Duplicar macros.savedlog.buttonok=Guardar o ficheiro de macro(s) macros.question.delete= Quer mesmo apagar estes macros ? rene.zirkel.objects.PointObject=Pt rene.zirkel.objects.PrimitiveCircleObject=Cir. rene.zirkel.objects.PrimitiveLineObject=Rec. rene.zirkel.objects.ExpressionObject=Exp. rene.zirkel.objects.FixedAngleObject=Fang. rene.zirkel.objects.SegmentObject=Seg. rene.zirkel.objects.RayObject=SRec rene.zirkel.objects.TwoPointLineObject=Seg rene.zirkel.objects.FunctionObject=Func rene.zirkel.objects.AreaObject=Area mi.pal.name=Inspector de macros mi.name=Nome : mi.comment=Coment\u00E1rio: mi.properties=Propriedades dos objectos iniciais : mi.hideproperties=Propriedades dos objectos finais : mi.hideduplicates=Esconder os duplicados mi.apply=Aplicar mi.tab.type=Tipo mi.tab.name=Nome mi.tab.prompt=Convite mi.tab.fix=Fixar ? mi.tab.ask=Perguntar ? mi.error.initial=Erro: pelo menos um objecto inicial \ndeve estar livre (nem fixado, nem requerido) \n\n Nenhuma modifica\u00E7\u00E3o ser\u00E1 \nefectuada nesta macro. props.help= Para poder visualizar as propriedades de um objecto, clique com o bot\u00E3o direito do rato sobre ele.

Se criar um novo objecto contendo os pontos, pode ver e editar as propriedades destes pontos durante a cria\u00E7\u00E3o do objecto. props.name=Nome : props.alias=Alias : props.unit=Unidades : props.fix=Fixar : props.expl=Explica\u00E7\u00E3o : props.belongto=Pertence a : props.conditional=Aspecto condicionado : props.solid=Opaco : props.hidden=Escondido : props.normal=Normal : props.bold=Grosso : props.thin=Ponteado : props.black=Negro : props.green=Verde : props.blue=Azul : props.brown=Castanho : props.cyan=Ciano : props.red=Vermelho: props.showasslider=Cursor props.error= H\u00E1 um erro de sintaxe nesta express\u00E3o.
Ser\u00E1 reiniciada. props.cartesian=Fun\u00E7\u00E3o cartesiana props.parametric=Fun\u00E7\u00E3o param\u00E9trica props.functiontype=Tipo : props.killarc=Apagar arco props.arc=Arco props.release=Libertar props.bind=Ligar props.setaway=Longe de props.setclose=Perto de # v1.3 : props.grid=Incremento : props.inside=Do interior do objecto : props.pointsonly=S\u00F3 dos pontos : props.step=Passo : palette.grid=Aspecto da grelha leftpanel.macros=Painel de gest\u00E3o das macros leftpanel.properties=Painel de propriedades dos objectos leftpanel.history=Painel do hist\u00F3rico leftpanel.help=Painel de ajuda selectpopup.whatobject=qual objecto ? selectpopup.RightClick=Editar selectpopup.MoverTool=Mover selectpopup.HiderTool=Esconder/Mostrar selectpopup.DeleteTool=Apagar selectpopup.RenamerTool=Mudar nome selectpopup.EditTool=Editar selectpopup.SetParameterTool=Macro iniciais : selectpopup.SetTargetsTool=Macro finais : palette.info.locus=Lugar geom\u00E9trico Envolvente # v1.4 : menu.special.savezirset=Criar um diaporama filedialog.openfolder.title=Di\u00E1logo de selec\u00E7\u00E3o de pasta para o diaporama filedialog.openfolder.approve=Escolher a pasta para o diaporama filedialog.openfolder.saveicons=Guardar tamb\u00E9m as ferramentas restritas slideshow.next=pr\u00F3ximo slideshow.previous=anterior slideshow.download=Carregar o ficheiro slideshow.signature=Diaporama realizado com # v1.5 : menu.language=L\u00EDnguas menu.help.url3=Traduzir CaRMetal menu.display.smartboard=Modo TNI (Teclado num\u00E9rico interactivo) # v1.6 : palette.info.bi_syma=Simetria axial palette.info.bi_symc=Simetria central palette.info.bi_trans=Transla\u00E7\u00E3o palette.info.bi_med=Mediatriz palette.info.bi_biss=Bissectriz palette.info.bi_circ=C\u00EDrculo circunscrito palette.info.bi_arc=Arco passando por tr\u00EAs pontos palette.info.bi_t_align=Pontos colineares ? palette.info.bi_t_para=Rectas paralelas ? palette.info.bi_t_perp=Rectas perpendiculares ? palette.info.bi_t_equi=Ponto equidistante de outros dois ? palette.info.bi_t_app=Pertence a uma recta ? palette.info.bi_t_conf=Pontos coincidentes ? macro.bi_syma.0=Eixo de simetria ? macro.bi_syma.1=Sim\u00E9trico de que ponto ? macro.bi_symc.0=Centro de simetria ? macro.bi_symc.1=Sim\u00E9trico de que ponto ? macro.bi_trans.0=Origem do vector ? macro.bi_trans.1=Extremo do vector ? macro.bi_trans.2=Imagem de que ponto ? macro.bi_med.0=Primeiro extremo do segmento ? macro.bi_med.1=Segundo extremo do segmento ? macro.bi_biss.0=Primeiro ponto ? macro.bi_biss.1=V\u00E9rtice do \u00E2ngulo ? macro.bi_biss.2=\u00DAltimo ponto ? macro.bi_circ.0=Primeiro ponto ? macro.bi_circ.1=Segundo ponto ? macro.bi_circ.2=Terceiro ponto ? macro.bi_t_para.0=Primeira recta (ou segmento) ? macro.bi_t_para.1= Segunda recta (ou segmento) ? macro.bi_t_equi.0=Este ponto \u00E9 equidistante ... macro.bi_t_equi.1=Deste ponto ... macro.bi_t_equi.2=E deste ponto ? macro.bi_t_app.0=Qual ponto ? macro.bi_t_app.1=Pertence a qual recta (ou segmento) ? macro.bi_t_conf.0=Qual ponto ? macro.bi_t_conf.1=Coincide com qual ponto ? macro.bi_t_align.text0=Os pontos s\u00E3o colineares macro.bi_t_align.text1=Os pontos n\u00E3o s\u00E3o colineares macro.bi_t_para.text0= Os objectos s\u00E3o paralelos macro.bi_t_para.text1=Os objectos n\u00E3o s\u00E3o paralelos macro.bi_t_perp.text0=Os objectos s\u00E3o perpendiculares macro.bi_t_perp.text1=Os objectos n\u00E3o s\u00E3o perpendiculares macro.bi_t_equi.text0= Os pontos s\u00E3o equidistantes macro.bi_t_equi.text1=Os pontos n\u00E3o s\u00E3o equidistantes macro.bi_t_app.text0=O ponto est\u00E1 sobre o objecto macro.bi_t_app.text1=O ponto n\u00E3o est\u00E1 sobre o objecto macro.bi_t_conf.text0=Os dois pontos s\u00E3o coincidentes macro.bi_t_conf.text1=Os dois pontos n\u00E3o s\u00E3o coincidentes # v1.7 : filedialog.openfolder.appletsize=Tamanho do 'applet' : filedialog.openfolder.actualsize=Tamanho actual filedialog.openfolder.other=Outro ... filedialog.openfolder.selected=Pasta escolhida : filedialog.openfolder.cancel=Cancelar menu.file.exportsvg=Exportar para SVG menu.objects.points=Pontos menu.objects.lines=Rectas menu.objects.segments=Segmentos menu.objects.circles=C\u00EDrculos e c\u00F3nicas menu.objects.angles=\u00C2ngulos menu.objects.tracks=Tra\u00E7os e lugares menu.objects.functions=Fun\u00E7\u00F5es e express\u00F5es palette.info.function_u=Fun\u00E7\u00E3o definida pelo utilizador palette.info.function=Tra\u00E7ar uma fun\u00E7\u00E3o+ou uma curva param\u00E9trica props.superhidden=Completamente escondido : props.showvalue=Mostrar valor : props.showname=Mostrar nome : props.background=Fundo : macro.bi_expression.0=Ponto \u00E2ncora ?./src/eric/docs/JZirkelProperties_de.properties0000644000175000017500000002117511302427451020634 0ustar yvesyves# Sample ResourceBundle properties file menu.file=Datei menu.file.new=Neu menu.file.load=\u00D6ffnen ... menu.file.save=Speichern menu.file.saveas=Speichern unter ... menu.file.exportpng=Exportieren nach PNG menu.file.exporteps=Exportieren nach EPS menu.file.quit=Schlie\u00DFen menu.edit=Bearbeiten menu.edit.copy=Kopieren menu.edit.move=Verschieben menu.edit.rename=Umbenennen menu.edit.edit=\u00C4ndern menu.edit.hide=Verbergen menu.edit.delete=L\u00F6schen menu.display=Ansicht menu.display.hidden=Anzeigen/Verbergen von unsichtbaren Objekten menu.display.grid=Anzeigen/Verbergen des Gitters menu.display.finegrid=Nur die Achsen menu.display.leftsnap=Magnetisches Gitter menu.display.manage_macros=Makroliste menu.display.history_panel=Historie und Haltepunkte menu.display.help_panel=Hilfefenster menu.display.properties_panel=Objektliste menu.display.small=Kleine Symbole menu.display.medium=Mittlere Symbole menu.display.large=Gro\u00DFe Symbole menu.display.restrictedpalette=Reduzierte Palette anzeigen menu.display.restrictedpaletteedit=Reduzierte Palette \u00E4ndern menu.display.restrictmessage=
Mit dieser Funktion k\u00F6nnen Sie die reduzierte Palette anzeigen.

Das betrifft nur die gerade ge\u00F6ffnete Datei.

Beim Speichern k\u00F6nnen Sie die Option «auch die reduzierte Figur speichern» w\u00E4hlen.
Es werden also zwei Dateien kreiert : Die erste (.zir) \u00F6ffnet sich im nomalen Modus, und
die zweite (.r.zir) im reduzierten Modus.
menu.macros=Makros menu.special=Spezielles menu.special.newmacro=Neues Makro menu.special.loadmacros=Makros laden ... menu.special.definejob=Aufgabe definieren menu.special.loadjob=Aufgabe \u00F6ffnen ... menu.special.jobcomment=Aufgabentext bearbeiten menu.special.testjob=Aufgabe testen menu.special.savejob=Als Aufgabe speichern menu.special.export=HTML-Datei erzeugen und ansehen menu.special.exporttemplate=HTML-Export mit Vorlage menu.help=Hilfe menu.help.about=\u00DCber CaRMetal ... menu.help.info=Kontexthilfe menu.help.url0=Homepage von CaRMetal menu.help.url1=Homepage von CARzine menu.help.url2=Offizielle Homepage von C.a.R. filedialog.options=Speicherm\u00F6glichkeiten filedialog.saveas=Figur speichern filedialog.alsorestricted=Auch die reduzierte Figur speichern filedialog.restrictedmessage=Sie arbeiten momentan in einer reduzierten Umgebung,
Ihre Figur wird also im reduzierten Modus gespeichert. filedialog.filefilter=C.a.R.-Datei (.zir) filedialog.compressedfilefilter=Komprimierte C.a.R.-Datei (.zirz) filedialog.macrofilefilter=Makrodatei (.mcr) filedialog.savemessage1=Die Datei :\n filedialog.savemessage2=\nexistiert bereits. M\u00F6chten Sie sie wirklich ersetzen? palette.file=Datei palette.edit=Bearbeiten palette.construction=Konstruktion palette.aspect=Einstellungen & Farben palette.history=Historie palette.sizes=Gr\u00F6\u00DFen palette.sizes.point=Punkte palette.sizes.line=Linien palette.sizes.arrow=Pfeile palette.sizes.font=Schriftgr\u00F6\u00DFe palette.prec=Nachkommastellen palette.prec.lengths=Im Eigenschaftendialog palette.prec.edit=F\u00FCr die Anzeige palette.prec.angles=F\u00FCr Winkel palette.colors=Farbe & Bild palette.colors.saturated1=Fes\u00E4ttigte Farben palette.colors.desaturated1=Unges\u00E4ttigte Farben palette.colors.saturated2=ges\u00E4ttigte Farben 2 palette.colors.desaturated2=unges\u00E4ttigte Farben 2 palette.colors.constants=Web-Farben palette.image.fileerror=Speichern Sie die Figur ab, bevor Sie diese Funktion ausf\u00FChren.

Anschlie\u00DFend muss Ihr ausgew\u00E4hltes Bild sich
im selben Verzeichnis wie diese Figur befinden. palette.info.vector=Vektor palette.info.image3=Bild einf\u00FCgen+orientiert an 2 oder 3 Punkten palette.info.background=Auswahl/L\u00F6schen eines Hintergrundbildes palette.info.imcenter=Hintergrundbild zentrieren palette.info.imstretch=Hintergrundbild vergr\u00F6\u00DFern,+so dass es das Fenster+der Konstruktion ausf\u00FCllt palette.info.imtile=Hintergrundbild wiederholen palette.info.copy=Das Konstruktionsfenster kopieren+in der Papierpresse palette.info.exportpng=Exportieren der Konstruktion+aus dem aktuellen Fenster in das Format PNG palette.info.exporteps=Exportieren der Konstruktion+aus dem aktuellen Fenster in das Format EPS palette.info.newmacro=Neues Makro erzeugen palette.info.loadmacros=Makro \u00F6ffnen palette.info.manage_macros=Anzeigen/Verbergen des+Makro-Bearbeitungsfensters palette.info.properties_panel=Anzeigen/Verbergen der+Objekteigenschaften palette.info.history_panel=Anzeigen/Verbergen des Fensters+der Konstruktionshistorie palette.info.help_panel=Anzeigen/Verbergen des Fensters+zur Kontexthilfe macros.untitledmacro=Makro ohne Titel macros.untitledfolder=Ordner ohne Titel macros.emptynode=-- leer -- macros.addfolder=Neuen Ordner hinzuf\u00FCgen macros.deleteselected=Ausgew\u00E4hlte Makros l\u00F6schen macros.renamemacro=Ausgew\u00E4hlte Makros umbenennen macros.recordmacro=Makro speichern macros.initials=Ausgangsobjekte? macros.pleaseselect=Bitte ausw\u00E4hlen! macros.finals=Zielobjekte? macros.cancel=Abbrechen? macros.popup.run=Makro starten macros.popup.rename=Umbenennen macros.popup.delete=L\u00F6schen ... macros.popup.addtolibrary=Zur Bibliothek hinzuf\u00FCgen macros.popup.removefromlibrary=Aus der Bibliothek l\u00F6schen macros.popup.publish=In die Figur einf\u00FCgen macros.popup.notpublish=Nicht in die Ausgabe einf\u00FCgen macros.popup.saveas=Speichern unter ... macros.popup.properties=Eigenschaften anzeigen macros.popup.duplicate=Duplizieren macros.savedlog.buttonok=Makro(s) speichern macros.question.delete=Sollen die Makros wirklich gel\u00F6scht werden? rene.zirkel.objects.PointObject=Pkt rene.zirkel.objects.PrimitiveCircleObject=Kr rene.zirkel.objects.PrimitiveLineObject=Ger rene.zirkel.objects.ExpressionObject=Ausdr rene.zirkel.objects.FixedAngleObject=fWink. rene.zirkel.objects.SegmentObject=Str rene.zirkel.objects.RayObject=HGer rene.zirkel.objects.TwoPointLineObject=2PGer rene.zirkel.objects.FunctionObject=Fkt rene.zirkel.objects.AreaObject=A mi.pal.name=Makroliste mi.name=Name : mi.comment=Kommentar : mi.properties=Eigenschaften der Objekte zu Beginn : mi.hideproperties=Eigenschaften der Objekte am Ende : mi.hideduplicates=Dopplungen verbergen mi.apply=Anwenden mi.tab.type=Typ mi.tab.name=Name mi.tab.prompt=Prompt mi.tab.fix=Fixiert? mi.tab.ask=Gr\u00F6\u00DFe abfragen? mi.error.initial=Fehler : wenigstens ein Objekt \nmuss frei sein\n\Der Makro wird nicht ver\u00E4ndert. props.help=Mit der rechten Maustaste auf das Objekt klicken, um seine Eigenschaften anzuzeigen.

Wenn Sie ein neues Objekt, das Punkte beinhaltet, erzeugen, k\u00F6nnen Sie die Eigenschaften dieser Punkte sehen und ver\u00E4ndern. props.name=Name : props.alias=Alias : props.unit=Einheit : props.fix=Gr\u00F6\u00DFe : props.expl=Erkl\u00E4rung : props.conditional=Bedingungen: props.solid=Nicht transparent: props.hidden=Verborgen: props.normal=Normal: props.bold=Fett: props.thin=Gepunktet: props.black=Schwarz: props.green=Gr\u00FCn: props.blue=Blau: props.brown=Braun: props.cyan=T\u00FCrkis: props.red=Rot: props.showasslider=Schieber props.error=In dem Ausdruck ist ein Syntaxerror.
Er wird reinitialisiert. props.cartesian=Parametrisierte Kurve props.parametric=Funktionenschar props.functiontype=Typ : props.killarc=Als Vollkreis props.arc=Bogen props.release=L\u00F6sen props.bind=Verbinden props.setaway=Weg von props.setclose=Hin zu # v1.3 : props.grid=Gitter : props.inside=Innerhalb : props.pointsonly=Nur bei Punkten : props.step=Schritt : palette.grid=Gittereinstellungen leftpanel.macros=Makros leftpanel.properties=Objekteigenschaften leftpanel.history=Objektliste leftpanel.help=Hilfe selectpopup.whatobject=Welches Objekt? selectpopup.RightClick=Bearbeiten selectpopup.MoverTool=Bewegen selectpopup.HiderTool=Verbergen/Anzeigen selectpopup.DeleteTool=L\u00F6schen selectpopup.RenamerTool=Umbenennen selectpopup.EditTool=Bearbeiten selectpopup.SetParameterTool=Makroparameter : selectpopup.SetTargetsTool=Makroziele : palette.info.locus=Ortslinie+Einh\u00FCllende # v1.4 : menu.special.savezirset=Konstruktionssammlung erzeugen filedialog.openfolder.title=Ordner f\u00FCr die Konstruktionssammlung filedialog.openfolder.approve=Ordner \u00F6ffnen filedialog.openfolder.saveicons=Icons verwenden slideshow.next=Weiter slideshow.previous=Zur\u00FCck slideshow.download=Download slideshow.signature=Konstruktionssammlung erzeugt mit # v1.5 : menu.language=Sprachen menu.help.url3=\u00DCbersetzen CaRMetal./src/eric/docs/applet.html0000644000175000017500000000321611360407262014570 0ustar yvesyves Applet CaRMetal

@workbook@

./src/eric/docs/JZirkelProperties_fr.properties0000644000175000017500000005353111363247575020672 0ustar yvesyves# Sample ResourceBundle properties file menu.file=Fichier menu.file.new=Nouvelle figure menu.file.load=Ouvrir... menu.file.save=Enregistrer menu.file.saveas=Enregistrer sous... menu.file.exportpng=Exporter vers PNG menu.file.exporteps=Exporter vers EPS menu.file.quit=Quitter menu.edit=\u00C9dition menu.edit.copy=Copier menu.edit.move=D\u00E9placer un objet menu.edit.rename=Renommer menu.edit.edit=Modifier menu.edit.hide=Cacher menu.edit.delete=Supprimer menu.display=Affichage menu.display.hidden=Montrer/Cacher les objets invisibles menu.display.grid=Montrer/Cacher la grille menu.display.finegrid=Axes seulement menu.display.leftsnap=Grille magn\u00E9tique menu.display.manage_macros=Inspecteur de macros menu.display.history_panel=Historique menu.display.help_panel=Panneau d'aide menu.display.properties_panel=Inspecteur d'objets menu.display.small=Petites ic\u00F4nes menu.display.medium=Moyennes ic\u00F4nes menu.display.large=Grandes ic\u00F4nes menu.display.restrictedpalette=Afficher la palette restreinte menu.display.restrictedpaletteedit=Modifier la palette restreinte menu.display.restrictmessage=
Cette fonctionnalit\u00E9 vous permet de visualiser la palette restreinte.

Elle ne concerne que le fichier en cours.

Lors de l'enregistrement, vous pourrez choisir l'option «enregistrer aussi la figure restreinte».
Deux fichiers seront alors cr\u00E9\u00E9s : le premier (.zir) s'ouvrira en mode normal, et
le deuxi\u00E8me (.r.zir) en mode restreint.
menu.macros=Macros menu.special=Sp\u00E9cial menu.special.newmacro=Cr\u00E9er macro menu.special.loadmacros=Ouvrir un fichier de macros... menu.special.definejob=D\u00E9finir un exercice menu.special.loadjob=Ouvrir un exercice... menu.special.jobcomment=R\u00E9diger texte de l'exercice menu.special.testjob=Tester cet exercice menu.special.savejob=Enregistrer en tant qu'exercice menu.special.export=Cr\u00E9er un fichier HTML et voir dans le navigateur menu.special.exporttemplate=Exporter en HTML avec mod\u00E8les menu.help=Aide menu.help.about=\u00C0 propos de CaRMetal... menu.help.info=Aide contextuelle menu.help.url0=Site CaRMetal menu.help.url1=Site CARzine menu.help.url2=Site officiel de C.a.R. filedialog.options=Options de sauvegarde filedialog.saveas=Enregistrer la figure filedialog.alsorestricted=Enregistrer aussi la figure restreinte filedialog.restrictedmessage=Vous travaillez actuellement dans une session restreinte,
votre figure sera donc enregistr\u00E9e en mode restreint. filedialog.filefilter=Fichier CaR (.zir) filedialog.compressedfilefilter=Fichier CaR compress\u00E9 (.zirz) filedialog.macrofilefilter=Fichier de macros (.mcr) filedialog.savemessage1=Le fichier :\n filedialog.savemessage2=\nexiste d\u00E9j\u00E0. Voulez-vous vraiment le remplacer ? palette.file=Fichier palette.edit=\u00C9dition palette.construction=Construction palette.aspect=Aspect & couleur palette.history=Historique palette.sizes=Tailles palette.sizes.point=Points palette.sizes.line=Lignes palette.sizes.arrow=Fl\u00E8ches palette.sizes.font=Police palette.prec=Pr\u00E9cision num\u00E9rique palette.prec.lengths=Longueurs palette.prec.edit=Expressions palette.prec.angles=Angles palette.colors=Fond : couleur & image palette.colors.saturated1=Couleurs satur\u00E9es palette.colors.desaturated1=Couleurs d\u00E9satur\u00E9es palette.colors.saturated2=Couleurs satur\u00E9es 2 palette.colors.desaturated2=Couleurs d\u00E9satur\u00E9es 2 palette.colors.constants=Couleurs Web palette.image.fileerror=Vous devez enregistrer cette figure avant d'utiliser cette fonctionnalit\u00E9.

Ensuite, l'image que vous choisirez doit figurer
dans le m\u00EAme r\u00E9pertoire que cette figure. palette.info.vector=Vecteur palette.info.image3=Ins\u00E9rer une image+\u00E0 partir de 2 ou 3 points palette.info.background=Choisir/Effacer une image de fond palette.info.imcenter=Centrer l'image de fond palette.info.imstretch=\u00C9tirer l'image de fond+pour qu'elle remplisse+la fen\u00EAtre de construction palette.info.imtile=R\u00E9p\u00E9ter l'image de fond palette.info.copy=Copier la fen\u00EAtre de construction+dans le presse-papier palette.info.exportpng=Exporter la construction+de la fen\u00EAtre actuelle au format PNG palette.info.exporteps=Exporter la construction+de la fen\u00EAtre actuelle au format EPS palette.info.newmacro=Cr\u00E9er une nouvelle macro palette.info.loadmacros=Ouvrir un fichier de macros palette.info.manage_macros=Montrer/Cacher le panneau+de gestion des macros palette.info.properties_panel=Montrer/Cacher le panneau+des propri\u00E9t\u00E9s des objets palette.info.history_panel=Montrer/Cacher le panneau+de l'historique de la construction palette.info.help_panel=Montrer/Cacher le panneau+d'aide contextuelle macros.untitledmacro=Macro sans titre macros.untitledfolder=Dossier sans titre macros.emptynode=-- Vide -- macros.addfolder=Ajouter un nouveau dossier macros.deleteselected=Supprimer les macros s\u00E9lectionn\u00E9es macros.renamemacro=Renommer la macro s\u00E9lectionn\u00E9e macros.recordmacro=Enregistrer une macro macros.initials=Objets initiaux ? macros.pleaseselect=S\u00E9lectionnez, S.V.P ! macros.finals=Objets finaux ? macros.cancel=Annuler ? macros.popup.run=Lancer la macro macros.popup.rename=Renommer macros.popup.delete=Supprimer... macros.popup.addtolibrary=Ajouter \u00E0 la biblioth\u00E8que macros.popup.removefromlibrary=Retirer de la biblioth\u00E8que macros.popup.publish=Inclure dans la figure macros.popup.notpublish=Ne pas inclure dans la figure macros.popup.saveas=Enregistrer sous... macros.popup.properties=Montrer les propri\u00E9t\u00E9s macros.popup.duplicate=Dupliquer macros.savedlog.buttonok=Enregistrer le fichier de macro(s) macros.question.delete=\u00CAtes-vous s\u00FBr de vouloir vraiment effacer ces macros ? rene.zirkel.objects.PointObject=Pt rene.zirkel.objects.PrimitiveCircleObject=Cer. rene.zirkel.objects.PrimitiveLineObject=Dte rene.zirkel.objects.ExpressionObject=Exp rene.zirkel.objects.FixedAngleObject=Fangle. rene.zirkel.objects.SegmentObject=Seg. rene.zirkel.objects.RayObject=DLne rene.zirkel.objects.TwoPointLineObject=Lne rene.zirkel.objects.FunctionObject=Fct rene.zirkel.objects.AreaObject=Area mi.pal.name=Inspecteur de macros mi.name=Nom : mi.comment=Commentaire : mi.properties=Propri\u00E9t\u00E9s des objets initiaux : mi.hideproperties=Propri\u00E9t\u00E9s des objets finaux : mi.hideduplicates=Cacher les doublons \u00E9ventuels mi.apply=Appliquer mi.tab.type=Type mi.tab.name=Nom mi.tab.prompt=Invite mi.tab.fix=Fixe ? mi.tab.ask=Ask ? mi.error.initial=Erreur : au moins un objet initial \ndoit \u00EAtre libre (ni fix\u00E9, ni demand\u00E9)\n\nAucune modification ne sera\napport\u00E9e \u00E0 cette macro. props.help=Pour pouvoir visualiser les propri\u00E9t\u00E9s d'un objet, cliquer-droit sur celui-ci.

Si vous cr\u00E9ez un nouvel objet contenant des points, vous pourrez voir et \u00E9diter les propri\u00E9t\u00E9s de ces points pendant la cr\u00E9ation de l'objet. props.name=Nom : props.alias=Alias : props.unit=Unit\u00E9 : props.fix=Fixe : props.expl=Explication : props.belongto=Calque : props.conditional=Aspect conditionnel : props.solid=Opaque : props.hidden=Cach\u00E9 : props.normal=Normal : props.bold=\u00C9pais : props.thin=Pointill\u00E9s : props.black=Noir : props.green=Vert : props.blue=Bleu : props.brown=Marron : props.cyan=Cyan : props.red=Rouge : props.showasslider=Curseur props.error=Il y a une erreur de syntaxe dans cette expression.
Elle va \u00EAtre r\u00E9initialis\u00E9e. props.cartesian=Fonction cart\u00E9sienne props.parametric=Fonction param\u00E9tr\u00E9e props.functiontype=Type : props.killarc=Supp. arc props.arc=Arc props.release=D\u00E9tacher props.bind=Attacher props.setaway=Loin de props.setclose=Pr\u00E8s de # v1.3 : props.grid=Incr\u00E9ment : props.inside=Dans l'objet : props.pointsonly=Seulement avec des points : props.step=Pas : palette.grid=Aspect de la grille leftpanel.macros=Panneau de gestion des macros leftpanel.properties=Panneau de propri\u00E9t\u00E9s des objets leftpanel.history=Panneau d'historique leftpanel.help=Panneau d'aide selectpopup.whatobject=quel objet ? selectpopup.RightClick=S\u00E9lectionner selectpopup.MoverTool=D\u00E9placer selectpopup.HiderTool=Cacher/Montrer selectpopup.DeleteTool=Supprimer selectpopup.RenamerTool=Renommer selectpopup.EditTool=\u00C9diter selectpopup.SetParameterTool=Macro initiaux : selectpopup.SetTargetsTool=Macro finaux : palette.info.locus=Lieu de point+Enveloppe de droite # v1.4 : menu.special.savezirset=Cr\u00E9er un diaporama filedialog.openfolder.title=Dialogue de s\u00E9lection du dossier du diaporama filedialog.openfolder.approve=S\u00E9lectionner le dossier du diaporama filedialog.openfolder.saveicons=Enregistrer aussi les outils restreints slideshow.next=suivant slideshow.previous=pr\u00E9c\u00E9dent slideshow.download=T\u00E9l\u00E9charger le fichier slideshow.signature=Diaporama r\u00E9alis\u00E9 avec # v1.5 : menu.language=Langues menu.help.url3=Traduire CaRMetal menu.display.smartboard=Mode TNI (Tableau num\u00E9rique interactif) # v1.6 : palette.info.bi_syma=Sym\u00E9trie axiale palette.info.bi_symc=Sym\u00E9trie centrale palette.info.bi_trans=Translation palette.info.bi_med=M\u00E9diatrice palette.info.bi_biss=Bissectrice palette.info.bi_circ=Cercle circonscrit palette.info.bi_arc=Arc passant par trois points palette.info.bi_t_align=Points align\u00E9s ? palette.info.bi_t_para=Droites parall\u00E8les ? palette.info.bi_t_perp=Droites perpendiculaires ? palette.info.bi_t_equi=Point \u00E9quidistant de deux autres ? palette.info.bi_t_app=Appartient \u00E0 une droite ? palette.info.bi_t_conf=Points confondus ? macro.bi_syma.0=Axe de sym\u00E9trie ? macro.bi_syma.1=Sym\u00E9trique de quel point ? macro.bi_symc.0=Centre de sym\u00E9trie ? macro.bi_symc.1=Sym\u00E9trique de quel point ? macro.bi_trans.0=Origine du vecteur ? macro.bi_trans.1=Extr\u00E9mit\u00E9 du vecteur ? macro.bi_trans.2=Image de quel point ? macro.bi_med.0=Premi\u00E8re extr\u00E9mit\u00E9 du segment ? macro.bi_med.1=Seconde extr\u00E9mit\u00E9 du segment ? macro.bi_biss.0=Premier point ? macro.bi_biss.1=Sommet de l'angle ? macro.bi_biss.2=Dernier point ? macro.bi_circ.0=Premier point ? macro.bi_circ.1=Second point ? macro.bi_circ.2=Troisi\u00E8me point ? macro.bi_t_para.0=Premi\u00E8re droite (ou segment) ? macro.bi_t_para.1=Deuxi\u00E8me droite (ou segment) ? macro.bi_t_equi.0=Ce point est-il \u00E9quidistant ... macro.bi_t_equi.1=De ce point ... macro.bi_t_equi.2=Et de ce point ? macro.bi_t_app.0=Quel point ? macro.bi_t_app.1=Appartient \u00E0 quelle droite (ou segment) ? macro.bi_t_conf.0=Quel point ? macro.bi_t_conf.1=Est confondu avec quel point ? macro.bi_t_align.text0=Les points sont align\u00E9s macro.bi_t_align.text1=Les points ne sont pas align\u00E9s macro.bi_t_para.text0=Les objets sont parall\u00E8les macro.bi_t_para.text1=Les objets ne sont pas parall\u00E8les macro.bi_t_perp.text0=Les objets sont perpendiculaires macro.bi_t_perp.text1=Les objets ne sont pas perpendiculaires macro.bi_t_equi.text0=Les points sont \u00E9quidistants macro.bi_t_equi.text1=Les points ne sont pas \u00E9quidistants macro.bi_t_app.text0=Le point est sur l'objet macro.bi_t_app.text1=Le point n'est pas sur l'objet macro.bi_t_conf.text0=Les deux points sont confondus macro.bi_t_conf.text1=Les deux points ne sont pas confondus # v1.7 : filedialog.openfolder.appletsize=Taille de l'applet : filedialog.openfolder.actualsize=Taille actuelle filedialog.openfolder.other=Autre... filedialog.openfolder.selected=Dossier choisi : filedialog.openfolder.cancel=Annuler menu.file.exportsvg=Exporter vers SVG menu.objects.points=Points menu.objects.lines=Droites menu.objects.segments=Segments menu.objects.circles=Cercles et coniques menu.objects.angles=Angles menu.objects.tracks=Traces et lieux menu.objects.functions=Fonctions et expressions palette.info.function_u=Fonction d\u00E9finie par l'utilisateur palette.info.function=Tracer une fonction+ou une courbe param\u00E9tr\u00E9e props.superhidden=Compl\u00E8tement cach\u00E9 : props.showvalue=Montrer valeur : props.showname=Montrer nom : props.background=Arri\u00E8re-plan : macro.bi_expression.0=Point d'ancrage ? # v1.9a : licence.txt=

Ce programme est un logiciel gratuit sous licence GNU-GPL, ce qui signifie que vous pouvez le redistribuer et/ou le modifier selon les termes de la licence publi\u00E9e par la "Free Software Foundation"
Voir :

# v2.0 : menu.special.theme=Themes menu.special.theme.gray=Metal poli menu.special.theme.brushed=Metal bross\u00E9 menu.special.options=Pr\u00E9f\u00E9rences... menu.special.options.sizes=Tailles menu.special.options.sizes.minpointsize=Taille des points menu.special.options.sizes.minlinesize=Epaisseur des lignes menu.special.options.sizes.arrowsize=Taille des fl\u00E8ches menu.special.options.sizes.minfontsize=Taille des caract\u00E8res menu.special.options.sizes.digits.lengths=Pr\u00E9cision des longueurs menu.special.options.sizes.digits.edit=Pr\u00E9cision des expressions menu.special.options.sizes.digits.angles=Pr\u00E9cision des angles menu.special.options.colors=Couleurs menu.special.options.others=Autres menu.special.options.others.undock=Possibilit\u00E9 de d\u00E9tacher les palettes # v2.1 : menu.file.close=Fermer la fen\u00EAtre # v2.3 : alert.toomuchwins=Il y a trop de fen\u00EAtres ouvertes :
veuillez en fermer quelques-unes
afin de pouvoir en ouvrir d'autres... # v2.4 : menu.file.new3D=Nouvelle figure 3D palette.info.bi_3Dcoords=Coordonn\u00E9es 3D macro.bi_3Dcoords.0=Point d'ancrage des coordonn\u00E9es ? palette.info.bi_3Dcube=Cube macro.bi_3Dcube.0=Centre du cube ? palette.info.bi_3Darete=Ar\u00EAte 3D (gestion des pointill\u00E9s) macro.bi_3Darete.0=Premier point ? macro.bi_3Darete.1=Second point ? macro.bi_3Darete.2=Troisi\u00E8me point ? macro.bi_3Darete.3=Quatri\u00E8me point ? palette.info.bi_3Dtetra=Tetra\u00E8dre r\u00E9gulier macro.bi_3Dtetra.0=Centre du t\u00E9tra\u00E8dre ? menu.newdoc=Nouveau # v2.5.5 : palette.aspect.label.text=Aspect des palette.aspect.label.point=points palette.aspect.label.line=droites palette.aspect.label.segment=segments palette.aspect.label.circle=cercles palette.aspect.label.angle=angles palette.aspect.label.area=polygones palette.aspect.label.bi_text=textes palette.info.bi_3Ddode=Dod\u00E9ca\u00E8dre r\u00E9gulier macro.bi_3Ddode.0=Centre du dod\u00E9ca\u00E8dre ? # v2.7 : palette.aspect.label.pointshape=Forme & nom des points : palette.aspect.label.locus=lieux menu.edit.deleteall=Effacer tout # v2.7.1 : java.old.message=D\u00E9sol\u00E9... Vous ne pouvez demarrer l'application CaRMetal parce que votre version de Java est trop ancienne... java.old.quit=Quitter java.old.go=T\u00E9l\u00E9charger une nouvelle version de java palette.info.boundedpoint=Placer un point sur un plan+ou sur une face de poly\u00E8dre #v2.7.2 : user.foldername=Profil Utilisateur CaRMetal #v2.8 props.fixedray=Rayon : props.fixedsegment=Longueur : props.fixedangle=Angle : props.expl=Commentaire : props.aspecttab=Aspect props.numerictab=Num\u00E9rique props.conditionaltab=Conditionnel props.popup.special=Caract\u00E8res sp\u00E9ciaux props.popup.functions=Fonctions pr\u00E9d\u00E9finies props.popup.latex=Commandes LaTeX #v2.8.1 props.fixedinwindow=Li\u00E9 \u00E0 la fen\u00EAtre #v2.8.5 palette.controls=Contr\u00F4les props.ctrlshowvalue=Montrer la valeur du contr\u00F4le props.ctrlsnap=Fix\u00E9 aux graduations props.ctrlshowticks=Montrer les graduations props.ctrltickspacing=Incr\u00E9ment : palette.info.ctrl_edit=Editer, d\u00E9placer+ou redimensionner le contr\u00F4le palette.info.ctrl_chkbox=Ajouter une bo\u00EEte \u00E0 cocher palette.info.ctrl_popup=Ajouter un menu d\u00E9roulant palette.info.ctrl_slider=Ajouter un curseur #v2.8.6 props.trackdmin=Nombre d'\u00E9tapes : opendialog.preview=Aper\u00E7u : pngdialog.options=Options d'exportation : pngdialog.scale=Echelle : pngdialog.originsize=Taille d'origine : pngdialog.scaledsize=Taille \u00E0 l'echelle : #v2.8.7 canvas.3D.floor=Sol canvas.3D.system=Rep\u00E8re canvas.3D.rightclic=Utiliser le clic-droit glisser pour faire pivoter #v2.8.8 palette.info.equationxy=Courbe d\u00E9finie par f(x,y)=0 props.equationxy=Equation : props.equationxychooser=Pr\u00E9cision : palette.function=Fonctions & Lieux #v2.8.9 menu.edit.deletealltracks=Effacer les traces menu.edit.deactivatealltracks=D\u00E9sactiver les traces props.tracks=Activer la trace menu.edit.zoom=Zoomer ou d\u00E9placer #v2.9.0 menu.windows=Fen\u00EAtre #v2.9.1 contexthelp.seealso=Sujets connexes : #v2.9.2 menu.display.restrictmessage.dontdisplay=Ne plus afficher ce message props.thick=\u00C9pais : #v2.9.6 props.magnetmessage=Cliquer sur les objets que vous voulez ajouter \u00E0 (ou enlever de) la liste des objets magn\u00E9tiques props.magnetobj=Objets magn\u00E9tiques props.magnetpix=Attraction (20 px) : #v2.9.7 palette.info.ctrl_txtfield=Ajouter une boite d'entr\u00E9e num\u00E9rique palette.info.ctrl_button=Ajouter un bouton #v2.9.8.4 JSerror.title=Erreur de syntaxe JSerror.line=ligne JSerror.pointcoords=Erreur de syntaxe dans les coordonn\u00E9es du point JSerror.interactiveinput=Erreur pendant la d\u00E9signation de l'objet JSerror.notfound=Objet non trouv\u00E9 JSerror.notgoodtype=Impossible \u00E0 appliquer \u00E0 ce type d'objet JScmd.inputmessage=Votre question ? JScmd.promptmessage=Votre message... menu.js=Javascript menu.js.script=Ouvrir un fichier javascript... menu.js.command=Ouvrir l'\u00E9diteur de script JSeditor.title=Editeur javascript #v3.0 JSeditor.save=Enregistrer le script JSeditor.open=Ouvrir un script JSeditor.opendlogmsg=Ouvrir le script JSeditor.savedlogmsg=Enregistrer le script JSeditor.format=Formatter le script JSeditor.restore=Annuler les effets du dernier lancement de script JSeditor.run=Lancer le script JSeditor.help=Obtenir une aide sur la syntaxe JSEditor.comment=Commenter/D\u00E9commenter la selection JSEditor.savequestion=Ce script a chang\u00E9 : voulez-vous l'enregistrer ? # v3.1.1 menu.js.define=Definir le dossier de scripts... menu.js.dumb=Executer les scripts sans \u00E9diteur JSeditor.opendfavfolder=Choisir comme dossier de scripts JSeditor.saveas=Enregistrer le script sous... # v3.5 tab.popup.newfigure=Nouvelle figure tab.popup.rename=Renommer la figure tab.popup.duplicate=Dupliquer figure tab.popup.openworkbook=Ouvrir un classeur... tab.popup.saveworkbookas=Enregistrer le classeur sous... tab.popup.saveworkbook=Enregistrer le classeur tab.newfigurebasename=Figure workbook.workbookmode=Mode classeur workbook.savequestion=Ce classeur a \u00E9t\u00E9 modifi\u00E9. Voulez-vous l'enregistrer ? progressbar.loadmessage=Figure en cours d'ouverture : veuillez patienter... progressbar.workbookloadmessage=Classeur en cours d'ouverture : veuillez patienter... progressbar.workbooksavemessage=Classeur en cours de sauvegarde : veuillez patienter... macro.creationdlog.title=Cr\u00E9ation d'une macro macros.name=Nom de la macro ? JSmenu.cancel=Annuler les effets JSmenu.add=Ajouter un nouveau script JSmenu.modify=Modifier le script JSmenu.delete=Supprimer le script JSeditor.saveinfig.question=Entrer le nom du script : JSeditor.saveinfig.title=Enregistrer le script dans la figure JSeditor.saveinfig=Enregistrer le script dans la figure courante JSeditor.infig=Script inclus dans la figure : menu.js.newscriptinconstruction=Nouveau script dans la construction... menu.workbook.saveas=Enregistrer le classeur sous... media.saveas=Des images ont \u00E9t\u00E9 trouv\u00E9es dans la construction,
vous allez donc enregistrer les fichiers dans un m\u00EAme classeur. menu.display.comment=Montrer/Cacher les commentaires menu.display.palette=Montrer/Cacher la palette menu.display.leftpanel=Montrer/Cacher le panneau de gauche comment.emptycomment= menu.export.workbook=Exporter le classeur dans une page HTML menu.assigment=Exercice JSerror.condition=Erreur dans l'expression de condition filedialog.workbook=Classeur CaRMetal (.zirs) filedialog.job=Exercice CaRMetal (.job) filedialog.js=Scripts CaRMetal (.js) filedialog.allfiles=Fichiers CaRMetal (.zirs,.zir,.zirz,.mcr,.job,.js) tab.popup.savefileonly=Enregistrer la figure sous... animation.run=D\u00E9marrer les animations animation.stop=Arr\u00EAter les animations animation.speed=Vitesse des animations animation.removeall=Supprimer toutes les animations animation.reverse=Inverser le sens des animations restrict.title=Gestionnaire d'environnement restreint menu.display.restrictedenvironment=Gestionnaire d'environnement restreint restrict.ok=Ok restrict.cancel=Annuler restrict.activate=Activer l'environnement restreint restrict.factory=R\u00E9glages d'usine restrict.comment=Afin de s\u00E9lectionner ou d\u00E9selectionner facilement de multiples outils, vous pouvez effectuer un clic-droit/glisser sur les ic\u00F4nes. restrict.menubar=Afficher la barre des menus restrict.librarymacros=Permettre les macros de biblioth\u00E8que menu.help.opendefaultfolder=Ouvrir le dossier de configuration monkey.btn.tooltip=Secouer la construction
(Maintenir le bouton de la souris enfonc\u00E9) job.message.ok=Bravo ! job.message.failed=Construction non valide... job.gui.hidebox=Cacher les cibles job.gui.ok=Message de r\u00E9ussite : job.gui.failed=Message d'\u00E9chec : job.gui.targets=Liste des cibles : cliquer ici pour s\u00E9lectionner job.gui.close=Cr\u00E9er job.gui.delete=Supprimer job.gui.valid=V\u00E9rifier la construction job.gui.restore=Revenir \u00E0 l'\u00E9nonc\u00E9 job.gui.exercise=Ceci est un exercice : job.gui.progressmessage=V\u00E9rification de votre construction en cours job.gui.alignment=mais la construction n'est pas valide dans quelques cas d'alignement job.gui.title=Editeur d'exercices restrict.historypanel=Permettre l'affichage du panneau d'historique restrict.macropanel=Permettre l'affichage du panneau de macros restrict.helppanel=Permettre l'affichage du panneau d'aide restrict.failed.percent=Le taux d'echec enregistr\u00E9 \u00E9tait de : restrict.failed.initial=Echec d\u00E8s la position initiale./src/eric/docs/JZirkelProperties_it.properties0000644000175000017500000004200011302427452020647 0ustar yvesyves# Esempio di file di propriet\u00E0 ResourceBundle menu.file=File menu.file.new=Nuovo menu.file.load=Apri... menu.file.save=Salva menu.file.saveas=Salva con nome... menu.file.exportpng=Esporta in PNG menu.file.exporteps=Esporta in EPS menu.file.quit=Esci menu.edit=Modifica menu.edit.copy=Copia menu.edit.move=Sposta menu.edit.rename=Rinomina menu.edit.edit=Modifica menu.edit.hide=Nascondi menu.edit.delete=Elimina menu.display=Visualizza menu.display.hidden=Mostra/Nascondi oggetti menu.display.grid=Mostra/Nascondi griglia menu.display.finegrid=Solo assi menu.display.leftsnap=Blocca con trascinamento pulsante sinistro menu.display.manage_macros=Ispettore macro menu.display.history_panel=Cronologia menu.display.help_panel=Guida menu.display.properties_panel=Pannello delle propriet\u00E0 dell'oggetto menu.display.small=Icone piccole menu.display.medium=Icone medie menu.display.large=Icone grandi menu.display.restrictedpalette=Mostra tavolozza limitata menu.display.restrictedpaletteedit=Modifica tavolozza limitata menu.display.restrictmessage=
Questa voce consente la visualizzazione della tavolozza limitata.

Si riferisce esclusivamente al file corrente :

quando si salva in modalit\u00E0 'salva con nome' \u00E8 possibile scegliere l'opzione 'salva anche la figura limitata'
verranno creati due file:il primo (.zir) si aprir\u00E0 in modalit\u00E0 'normale', e
il secondo (.r.zir) in modalit\u00E0 limitata
menu.macros=Macro menu.special=Speciale menu.special.newmacro=Nuova macro menu.special.loadmacros=Apri file macro... menu.special.definejob=Definisci un Problema menu.special.loadjob=Carica un Problema ... menu.special.jobcomment=Imposta il testo del Problema ... menu.special.testjob=Verifica questo Problema menu.special.savejob=Salva come Problema ... menu.special.export=Crea file HTML e anteprima nel browser menu.special.exporttemplate=Esporta in HTML con modelli menu.help=Guida menu.help.about=Informazioni su CaRMetal... menu.help.info=Guida attiva menu.help.url0=Vai al sito di CaRMetal menu.help.url1=Vai al sito di CARzine menu.help.url2=Vai al sito ufficiale di C.a.R. filedialog.saveas=Salva figura filedialog.alsorestricted=Salva anche la figura limitata filedialog.options=Opzioni di salvataggio filedialog.restrictedmessage=Questa \u00E8 una sessione limitata,
quindi la figura verr\u00E0 salvata in modalit\u00E0 limitata filedialog.filefilter=File CaR (.zir) filedialog.compressedfilefilter=File CaR compresso (.zirz) filedialog.macrofilefilter=File macro di CaR (.mcr) filedialog.savemessage1=File :\n filedialog.savemessage2=\ngi\u00E0 esistente. Sostituire il file ? palette.file=File palette.edit=Modifica palette.construction=Costruzione palette.aspect=Aspetto e colore palette.history=Cronologia palette.sizes=Dimensioni palette.sizes.point=Punto palette.sizes.line=Retta palette.sizes.arrow=Freccia palette.sizes.font=Carattere palette.prec=Precisione numerica palette.prec.lengths=Lunghezze palette.prec.edit=Espressioni palette.prec.angles=Angoli palette.colors=Colore e immagine di sfondo palette.colors.saturated1=Colori saturati palette.colors.desaturated1=Colori desaturati palette.colors.saturated2=Colori saturati 2 palette.colors.desaturated2=Colori desaturati 2 palette.colors.constants=Costanti Web palette.image.fileerror=Salvare la figura prima di utilizzate questo strumento

In seguito, la figura da selezionare dovr\u00E0 essere
nella stessa cartella. palette.info.vector=Vettore palette.info.image3=Inserisci immagine+con 2 o 3 punti palette.info.background=Scegli/elimina l'immagine di sfondo palette.info.imcenter=Centra l'immagine di sfondo palette.info.imstretch=Adatta l'immagine di sfondo+alla finestra della costruzione palette.info.imtile=Affianca l'immagine di sfondo palette.info.copy=Copia la finestra della costruzione palette.info.exportpng=Esporta la finestra della+costruzione in formato png palette.info.exporteps=Esporta la finestra dalla+costruzione in formato eps palette.info.newmacro=Crea una nuova macro palette.info.loadmacros=Carica un file macro palette.info.manage_macros=Mostra/nascondi il pannello delle macro palette.info.properties_panel=Mostra/nascondi il pannello delle propriet\u00E0+degli oggetti palette.info.history_panel=Mostra/nascondi il pannello della cronologia+della costruzione palette.info.help_panel=Mostra/nascondi il pannello della guida attiva macros.untitledmacro=Macro senza nome macros.untitledfolder=Cartella senza nome macros.emptynode=-- Vuoto -- macros.addfolder=Aggiungi nuova cartella macros.deleteselected=Elimina macro selezionate macros.renamemacro=Rinomina macro selezionate macros.recordmacro=Registra macro macros.initials=Oggetti iniziali ? macros.pleaseselect=Scegliere ! macros.finals=Oggetti finali ? macros.cancel=Annulla ? macros.popup.run=Esegui macro macros.popup.rename=Rinomina macros.popup.delete=Elimina macros.popup.addtolibrary=Aggiungi alla libreria macros.popup.removefromlibrary=Rimuovi dalla libreria macros.popup.publish=Includi nella figura macros.popup.notpublish=Non includere nella figura macros.popup.saveas=Salva con nome... macros.popup.properties=Mostra propriet\u00E0 macros.popup.duplicate=Duplicato macros.savedlog.buttonok=Salva file macro macros.question.delete=Eliminare le macro ? rene.zirkel.objects.PointObject=Pt rene.zirkel.objects.PrimitiveCircleObject=Cir rene.zirkel.objects.PrimitiveLineObject=Rt rene.zirkel.objects.ExpressionObject=Esp. rene.zirkel.objects.FixedAngleObject=AngF rene.zirkel.objects.SegmentObject=Seg. rene.zirkel.objects.RayObject=SemRt rene.zirkel.objects.TwoPointLineObject=Rt rene.zirkel.objects.FunctionObject=Fz rene.zirkel.objects.AreaObject=Area mi.pal.name=Ispettore macro mi.name=Nome : mi.comment=Commento : mi.properties=Propriet\u00E0 parametri : mi.hideproperties=Propriet\u00E0 destinazioni : mi.hideduplicates=Nascondi duplicati mi.apply=Applica mi.tab.type=Tipo mi.tab.name=Nome mi.tab.prompt=Prompt mi.tab.fix=Fissa ? mi.tab.ask=Chiedi ? mi.error.initial=Errore : almeno un parametro \ndeve essere libero (non fissato, non chiedere)\n\nQuesta macro non verr\u00E0 modificata props.help=Per visualizzare le propriet\u00E0 fare clic con il pulsante destro del mouse su un oggetto.

Se viene creato un nuovo oggetto mentre questo pannello \u00E8 aperto, \u00E8 possibile modificarne le propriet\u00E0 durante il processo di creazione. props.name=Nome : props.alias=Alias : props.unit=Unit\u00E0 : props.fix=Fissa : props.expl=Spiegazione : props.belongto=Livello : props.conditional=Aspetto : props.solid=Solido : props.hidden=Nascosto : props.normal=Normale : props.bold=Spesso : props.thin=Punteggiato : props.black=Nero : props.green=Verde : props.blue=Blu : props.brown=Marrone : props.cyan=Azzurro : props.red=Rosso : props.showasslider=Slider : props.error=Questa espressione contiene un errore di sintassi.
L'espressione verr\u00E0 reinizializzata props.cartesian=Funzione cartesiana props.parametric=Funzione parametrica props.functiontype=Tipo : props.killarc=No arco props.arc=Arco props.release=Rilascia props.bind=Vincola props.setaway=Imposta lontano props.setclose=Imposta vicino # v1.3 : props.grid=Incremento : props.inside=Dentro all'oggetto : props.pointsonly=Solo punti : props.step=Passo : palette.grid=Aspetto della griglia leftpanel.macros=Pannello delle macro leftpanel.properties=Pannello delle propriet\u00E0 leftpanel.history=Pannello della cronologia leftpanel.help=Pannello della Guida selectpopup.whatobject=quale oggetto ? selectpopup.RightClick=Seleziona selectpopup.MoverTool=Sposta selectpopup.HiderTool=Mostra/nascondi selectpopup.DeleteTool=Elimina selectpopup.RenamerTool=Rinomina selectpopup.EditTool=Modifica selectpopup.SetParameterTool=Oggetti iniziali della macro: selectpopup.SetTargetsTool=Oggetti finali della macro: palette.info.locus=Luogo di punti+curva inviluppo # v1.4 : menu.special.savezirset=Crea presentazione... filedialog.openfolder.title=Selezione della cartella della presentazione filedialog.openfolder.approve=Selezionare la cartella della presentazione filedialog.openfolder.saveicons=Salva anche le icone limitate slideshow.next=successivo slideshow.previous=precedente slideshow.download=Scarica file slideshow.signature=Presentazione creata con # v1.5 : menu.language=Lingue menu.language.de=Tedesco menu.language.en=Inglese menu.language.fr=Francese menu.language.es=Spagnolo menu.language.gl=Galiziano menu.language.zh_TW=Cinese (Tradizionale) menu.help.url3=Traduci CaRMetal menu.display.smartboard=Modalit\u00E0 smartboard # v1.6 : menu.language.no=Norvegese palette.info.bi_syma=Simmetria assiale palette.info.bi_symc=Simmetria centrale palette.info.bi_trans=Traslazione palette.info.bi_med=Asse di un segmento palette.info.bi_biss=Bisettrice palette.info.bi_circ=Circonferenza per 3 punti palette.info.bi_arc=Arco di circonferenza per 3 punti palette.info.bi_t_align=Punti allineati ? palette.info.bi_t_para=Rette parallele ? palette.info.bi_t_perp=Rette perpendicolari ? palette.info.bi_t_equi=Equidistante da due punti ? palette.info.bi_t_app=Appartiene ad una retta ? palette.info.bi_t_conf=Punti coincidenti ? macro.bi_syma.0=Asse di simmetria ? macro.bi_syma.1=Punto da riflettere ? macro.bi_symc.0=Centro di simmetria ? macro.bi_symc.1=Punto da riflettere ? macro.bi_trans.0=Primo punto del vettore ? macro.bi_trans.1=Secondo punto del vettore ? macro.bi_trans.2=Punto da traslare ? macro.bi_med.0=Primo punto del segmento ? macro.bi_med.1=Secondo punto del segmento ? macro.bi_biss.0=Primo punto ? macro.bi_biss.1=Vertice dell'angolo ? macro.bi_biss.2=Ultimo punto ? macro.bi_circ.0=Primo punto ? macro.bi_circ.1=Secondo punto ? macro.bi_circ.2=Terzo punto ? macro.bi_t_para.0=Prima retta ? macro.bi_t_para.1=Seconda retta ? macro.bi_t_equi.0=Questo punto \u00E8 equidistante ... macro.bi_t_equi.1=Da questo punto ... macro.bi_t_equi.2=E questo punto ? macro.bi_t_app.0=Quale punto ? macro.bi_t_app.1=Su quale retta (o segmento) giace ? macro.bi_t_conf.0=Quale punto ? macro.bi_t_conf.1=Su quale punto ? macro.bi_t_align.text0=I punti sono allineati macro.bi_t_align.text1=I punti non sono allineati macro.bi_t_para.text0=Gli oggetti sono paralleli macro.bi_t_para.text1=Gli oggetti non sono paralleli macro.bi_t_perp.text0=Gli oggetti sono perpendicolari macro.bi_t_perp.text1=Gli oggetti non sono perpendicolari macro.bi_t_equi.text0=I punti sono equidistanti macro.bi_t_equi.text1=I punti non sono equidistanti macro.bi_t_app.text0=Il punto appartiene all'oggetto macro.bi_t_app.text1=Il punto non appartiene all'oggetto macro.bi_t_conf.text0=I due punti sono coincidenti macro.bi_t_conf.text1=I due punti sono distinti palette.test=Test # v1.7 : filedialog.openfolder.appletsize=Dimensione dell'applet : filedialog.openfolder.actualsize=Dimensione attuale filedialog.openfolder.other=Altro... filedialog.openfolder.selected=Cartella selezionata : filedialog.openfolder.cancel=Annulla menu.file.exportsvg=Esporta in SVG menu.language.sl=Sloveno menu.language.nl=Olandese menu.language.pt=Portoghese props.vars=Variabili : menu.objects.points=Punti menu.objects.lines=Rette menu.objects.segments=Segmenti menu.objects.circles=Circonferenze e coniche menu.objects.angles=Angoli menu.objects.tracks=Tracce e luoghi menu.objects.functions=Funzioni ed espressioni palette.info.function_u=Funzione definita dall'utente palette.info.function=Funzione+o curva parametrica props.superhidden=Completamente nascosto : props.showvalue=Mostra valore : props.showname=Mostra nome : props.background=Sfondo : macro.bi_expression.0=Ancora il punto ? # v1.9a : menu.help.licence=Licenza... licence.txt=

Questo programma \u00E8 un software libero sotto licenza GNU-GPL. Questo significa che \u00E8 possibile ridistribuire il programma e/o modificarlo secondo i termini della licenza pubblicata da Free Software Foundation;
Vedere :

# v2.0 : menu.special.theme=Temi menu.special.theme.gray=Metallo lucidato menu.special.theme.brushed=Metallo spazzolato menu.special.options=Preferenze... menu.special.options.sizes=Dimensioni menu.special.options.sizes.minpointsize=Dimensione punto menu.special.options.sizes.minlinesize=Dimensione retta menu.special.options.sizes.arrowsize=Dimensione freccia menu.special.options.sizes.minfontsize=Dimensione carattere menu.special.options.sizes.digits.lengths=Precisione lunghezza menu.special.options.sizes.digits.edit=Precisione espressione menu.special.options.sizes.digits.angles=Precisione angolo menu.special.options.colors=Colori menu.special.options.others=Altro menu.special.options.others.undock=\u00C8 possibile sbloccare le tavolozze # v2.1 : menu.file.close=Chiudi finestra # v2.3 : alert.toomuchwins=Ci sono troppe finestre aperte :
chiuderne alcune prima di aprire
una nuova finestra # v2.4 : menu.file.new3D=Nuova figura 3D palette.3D=3D palette.info.bi_3Dcoords=coordinate 3D macro.bi_3Dcoords.0=Ancora il punto ? palette.info.bi_3Dcube=Cubo macro.bi_3Dcube.0=Centro del cubo ? palette.info.bi_3Darete=spigoli 3D macro.bi_3Darete.0=Primo punto ? macro.bi_3Darete.1=Secondo punto ? macro.bi_3Darete.2=Terzo punto ? macro.bi_3Darete.3=Quarto punto ? palette.info.bi_3Dtetra=Tetraedro regolare macro.bi_3Dtetra.0=Centro del tetraedro ? menu.newdoc=Nuovo menu.language.it=Italiano # v2.5.5 : palette.aspect.label.text=Aspetto di palette.aspect.label.point=punti palette.aspect.label.line=rette palette.aspect.label.segment=segmenti palette.aspect.label.circle=circonferenze palette.aspect.label.angle=angoli palette.aspect.label.area=poligoni palette.aspect.label.bi_text=testi palette.info.bi_3Ddode=Dodecaedro regolare macro.bi_3Ddode.0=Centro del dodecaedro ? # v2.7 : palette.aspect.label.pointshape=Forma e nome dei punti : palette.aspect.label.locus=luoghi menu.edit.deleteall=Elimina tutto # v2.7.1 : java.old.message=Impossibile avviare CaRMetal, la versione disponibile di Java \u00E8 obsoleta java.old.quit=Esci java.old.go=Scarica la nuova versione di Java palette.info.boundedpoint=Posiziona un punto in un piano+o sulla faccia di un poliedro #v2.7.2 : user.foldername=Profilo Utente CarMetal #v2.8 props.fixedray=Semiretta : props.fixedsegment=Lunghezza : props.fixedangle=Angolo : props.expl=Commenti : props.aspecttab=Aspetto props.numerictab=Numerico props.conditionaltab=Condizionale props.thick=Spessore : props.popup.special=Caratteri speciali props.popup.functions=Funzioni predefinite props.popup.latex=Comandi LaTeX menu.language.pl=Polacco #v2.8.1 props.fixedinwindow=Collegato alla finestra #v2.8.5 palette.controls=Controlli props.ctrlshowvalue=Mostra valore props.ctrlsnap=Blocca sui segni di spunta props.ctrlshowticks=Mostra segni di spunta props.ctrltickspacing=Incremento : palette.info.ctrl_edit=Modifica, muovi o ridimensiona il controllo palette.info.ctrl_chkbox=Aggiungi casella di controllo palette.info.ctrl_popup=Aggiungi menu a scomparsa palette.info.ctrl_slider=Aggiungi cursore #v2.8.6 props.trackdmin=Numero di passi : opendialog.preview=Anteprima : pngdialog.options=Opzioni di esportazione : pngdialog.scale=Scala : pngdialog.originsize=Dimensioni originali : pngdialog.scaledsize=Dimensione in scala : #v2.8.7 canvas.3D.floor=Piano canvas.3D.system=Sistema di coordinate canvas.3D.rightclic=Utilizzare clic destro e trascinamento per ruotare il sistema di coordinate #v2.8.8 palette.info.equationxy=Curva implicita props.equationxy=Equazione : props.equationxychooser=Precisione : palette.function=Funzioni e luogo #v2.8.9 menu.edit.deletealltracks=Cancella tracce menu.edit.deactivatealltracks=Disattiva tracce props.tracks=Attiva tracce menu.edit.zoom=Zoom o muovi #v2.9.0 menu.windows=Finestra #v2.9.1 contexthelp.seealso=Vedere anche : #v2.9.2 menu.language.pt_BR=Brasiliano menu.display.restrictmessage.dontdisplay=Non visualizzare pi\u00F9 questo messaggio #v2.9.6 props.magnetmessage=Fare clic sugli oggetti da aggiungere / rimuovere dalla lista magnetica props.magnetobj=Oggetti magnetici props.magnetpix=Attrazione (20 px) : props.show=Mostra #v2.9.7 palette.info.ctrl_txtfield=Aggiungi casella di immissione numerica palette.info.ctrl_button=Aggiungi pulsante #v2.9.8.4 JSerror.title=Errore di sintassi JSerror.line=linea JSerror.pointcoords=Errore di sintassi nelle coordinate del punto JSerror.interactiveinput=Errore durante la selezione dell'oggetto JSerror.notfound=Oggetto non trovato JSerror.notgoodtype=Impossibile applicare a questo tipo di oggetto JScmd.inputmessage=Domanda utente ? JScmd.promptmessage=Messaggio utente... menu.js=Javascript menu.js.script=Apri file javascript... menu.js.command=Apri l'editor degli script JSeditor.title=Editor Javascript #v3.0 JSeditor.save=Salva script JSeditor.open=Apri script JSeditor.opendlogmsg=Apri script JSeditor.savedlogmsg=Salva script JSeditor.format=Formato script JSeditor.restore=Elimina l'ultima esecuzione JSeditor.run=Esegui script JSeditor.help=Guida per la sintassi JSEditor.comment=Selezione Commenta/Non commenta JSEditor.savequestion=Sono state apportate modifiche allo script : salvare ? menu.language.ar_TN=Arabo # v3.1.1 menu.js.define=Definisci la cartella degli script ... menu.js.dumb=Esegui gli script preferiti senza l'editor JSeditor.opendfavfolder=Seleziona la cartella degli script JSeditor.saveas=Salva script come... ./src/eric/docs/JZirkelProperties_en.properties0000644000175000017500000000000011302427451020626 0ustar yvesyves./src/eric/docs/JZirkelProperties_zh_TW.properties0000644000175000017500000004311411302427452021275 0ustar yvesyves# Sample ResourceBundle properties file menu.file=\u6A94\u6848 menu.file.new=\u65B0\u6A94\u6848 menu.file.load=\u958B\u555F\u820A\u6A94... menu.file.save=\u5132\u5B58 menu.file.saveas=\u5132\u5B58\u70BA... menu.file.exportpng=\u532F\u51FA PNG \u6A94 menu.file.exporteps=\u532F\u51FA EPS \u6A94 menu.file.quit=\u96E2\u958B menu.edit=\u7DE8\u8F2F menu.edit.copy=\u8907\u88FD menu.edit.move=\u79FB\u52D5 menu.edit.rename=\u6539\u540D menu.edit.edit=\u7DE8\u8F2F\u5C6C\u6027 menu.edit.hide=\u96B1\u85CF menu.edit.delete=\u522A\u9664 menu.display=\u986F\u793A menu.display.hidden=(\u4E0D)\u986F\u793A\u5DF2\u96B1\u85CF\u7269\u4EF6 menu.display.grid=(\u4E0D)\u986F\u793A\u683C\u7DDA menu.display.finegrid=\u53EA\u986F\u793A\u5EA7\u6A19\u8EF8 menu.display.leftsnap=\u5438\u9644\u683C\u5B50\u9EDE menu.display.manage_macros=\u5DE5\u5177\u76EE\u9304 menu.display.history_panel=\u7269\u4EF6\u76EE\u9304 menu.display.help_panel=\u64CD\u4F5C\u8AAA\u660E menu.display.properties_panel= \u7269\u4EF6\u5C6C\u6027 menu.display.small=\u5C0F\u578B\u6309\u9215 menu.display.medium=\u4E2D\u578B\u6309\u9215 menu.display.large=\u5927\u578B\u6309\u9215 menu.display.restrictedpalette=\u986F\u793A\u7CBE\u7C21\u578B\u9762\u7248 menu.display.restrictedpaletteedit=\u7DE8\u8F2F\u7CBE\u7C21\u578B\u9762\u7248 menu.display.restrictmessage=
\u6B64\u529F\u80FD\u6703\u986F\u793A\u300C\u7CBE\u7C21\u578B\u9762\u7248\u300D\uFF0C\u4E5F\u5C31\u662F\u53EA\u986F\u793A\u6709\u7528\u5230\u7684\u5DE5\u5177\u3002

\u5B83\u53EA\u6703\u5F71\u97FF\u76EE\u524D\u7684\u6A94\u6848\uFF0C\u8DDF\u5176\u4ED6\u6A94\u6848\u7121\u95DC\u3002

\u7576\u4F60\u5B58\u6A94\u7684\u6642\u5019\uFF0C\u4F60\u4E5F\u53EF\u4EE5\u9078\u64C7\u5132\u5B58\u300C\u7CBE\u7C21\u578B\u9762\u7248\u300D\uFF0C
\u9019\u6A23\u6703\u7522\u751F\u5169\u500B\u6A94\u6848\uFF1A\u4E00\u500B\u662F\u6B63\u5E38\u7684 .zir \u6A94\uFF0C
\u53E6\u4E00\u500B\u662F\u5177\u6709\u7CBE\u7C21\u578B\u9762\u7248\u7684 .r.zir \u6A94\u3002
menu.macros=\u5DE5\u5177 menu.special=\u9032\u968E menu.special.newmacro=\u65B0\u5DE5\u5177 menu.special.loadmacros=\u958B\u555F\u5DE5\u5177... menu.special.definejob=\u8A2D\u8A08\u65B0\u4F5C\u696D menu.special.loadjob=\u8F09\u5165\u4F5C\u696D... menu.special.jobcomment=\u8A2D\u5B9A\u4F5C\u696D\u5167\u6587... menu.special.testjob=\u6E2C\u8A66\u6B64\u4F5C\u696D menu.special.savejob=\u53E6\u5B58\u4F5C\u696D... menu.special.export=\u532F\u51FA\u7DB2\u9801\u6A94 menu.special.exporttemplate=\u7528\u6A21\u7248\u532F\u51FA\u7DB2\u9801\u6A94 menu.help=\u8AAA\u660E menu.help.about=\u95DC\u65BC CaRMetal... menu.help.info=\u64CD\u4F5C\u8AAA\u660E menu.help.url0=CaRMetal \u7DB2\u7AD9 menu.help.url1=CARzine \u7DB2\u7AD9 menu.help.url2=C.a.R. \u7DB2\u7AD9 filedialog.saveas=\u5B58\u6A94 filedialog.alsorestricted=\u5132\u5B58\u300C\u7CBE\u7C21\u578B\u9762\u7248\u300D filedialog.options=\u5B58\u6A94\u9078\u9805 filedialog.restrictedmessage=\u76EE\u524D\u7684\u6A94\u6848\u4F7F\u7528\u300C\u7CBE\u7C21\u578B\u9762\u7248\u300D\uFF0C
\u6240\u4EE5\u4E5F\u6703\u7528\u9019\u7A2E\u6A21\u5F0F\u5B58\u6A94\u3002 filedialog.filefilter=CaR \u6A94 (.zir) filedialog.compressedfilefilter=CaR \u58D3\u7E2E\u6A94(.zirz) filedialog.macrofilefilter=CaR \u5DE8\u96C6\u6A94(.mcr) filedialog.savemessage1=\u6A94\u6848\uFF1A\n filedialog.savemessage2=\n\u5DF2\u7D93\u5B58\u5728\u3002\u4F60\u8981\u8986\u84CB\u5B83\u55CE\uFF1F palette.file=\u6A94\u6848 palette.edit=\u7DE8\u8F2F palette.construction=\u4F5C\u5716 palette.aspect=\u8272\u5F69\u8207\u6A23\u5F0F palette.history=\u4F5C\u5716\u904E\u7A0B palette.sizes=\u5927\u5C0F\u5C3A\u5BF8 palette.sizes.point=\u9EDE palette.sizes.line=\u7DDA palette.sizes.arrow=\u7BAD\u982D palette.sizes.font=\u5B57\u9AD4 palette.prec=\u6578\u5B57\u7CBE\u78BA\u5EA6 palette.prec.lengths=\u9577\u5EA6 palette.prec.edit=\u8A08\u7B97\u5F0F palette.prec.angles=\u89D2\u5EA6 palette.colors=\u80CC\u666F\u8A2D\u5B9A palette.colors.saturated1=\u9BAE\u660E\u8272 palette.colors.desaturated1=\u6697\u6DE1\u8272 palette.colors.saturated2=\u9BAE\u660E\u8272 2 palette.colors.desaturated2=\u6697\u6DE1\u8272 2 palette.colors.constants=\u7DB2\u9801\u5B89\u5168\u8272 palette.image.fileerror=\u4F60\u5FC5\u9808\u5148\u5B58\u6A94\u624D\u80FD\u63D2\u5165\u5716\u7247\u3002

\u6CE8\u610F\uFF1A\u4F60\u63D2\u5165\u7684\u5716\u7247\u5FC5\u9808\u548C\u76EE\u524D\u7684\u6A94\u6848
\u5728\u540C\u4E00\u500B\u8CC7\u6599\u593E\u5167\u3002 palette.info.vector=\u5411\u91CF palette.info.image3=\u63D2\u5165\u5716\u7247\uFF08\u9700\u5148\u6307\u5B9A\u4E09\u9802\u9EDE\uFF09 palette.info.background=\u9078\u64C7/\u6E05\u9664\u80CC\u666F\u5716 palette.info.imcenter=\u80CC\u666F\u5716\u7F6E\u4E2D palette.info.imstretch=\u5EF6\u5C55\u80CC\u666F\u5716 palette.info.imtile=\u80CC\u666F\u5716\u4E26\u6392\u986F\u793A palette.info.copy=\u8907\u88FD\u76EE\u524D\u7684\u4F5C\u5716\u5230\u526A\u8CBC\u7C3F palette.info.exportpng=\u5C07\u76EE\u524D\u7684\u4F5C\u5716\u532F\u51FA\u6210 png \u6A94 palette.info.exporteps=\u5C07\u76EE\u524D\u7684\u4F5C\u5716\u532F\u51FA\u6210 eps \u6A94 palette.info.newmacro=\u81EA\u88FD\u65B0\u5DE5\u5177 palette.info.loadmacros=\u8F09\u5165\u5DE5\u5177\u6A94 palette.info.manage_macros=\u986F\u793A\u6216\u96B1\u85CF\u300C\u81EA\u88FD\u5DE5\u5177\u300D\u9762\u7248 palette.info.properties_panel=\u986F\u793A\u6216\u96B1\u85CF\u300C\u7269\u4EF6\u5C6C\u6027\u300D\u9762\u7248 palette.info.history_panel=\u986F\u793A\u6216\u96B1\u85CF\u300C\u7269\u4EF6\u76EE\u9304\u300D\u9762\u7248 palette.info.help_panel=\u986F\u793A\u6216\u96B1\u85CF\u300C\u64CD\u4F5C\u8AAA\u660E\u300D\u9762\u7248 macros.untitledmacro=\u65B0\u5DE5\u5177 macros.untitledfolder=\u65B0\u8CC7\u6599\u593E macros.emptynode=-- \u7A7A\u7684 -- macros.addfolder=\u65B0\u589E\u8CC7\u6599\u593E macros.deleteselected=\u5C07\u9078\u64C7\u7684\u5DE5\u5177\u522A\u9664 macros.renamemacro=\u5C07\u9078\u64C7\u7684\u5DE5\u5177\u6539\u540D macros.recordmacro=\u9304\u88FD\u65B0\u5DE5\u5177 macros.initials=\u8ACB\u6307\u5B9A\u521D\u59CB\u7269\u4EF6 macros.pleaseselect=\u8ACB\u9078\u64C7\uFF01 macros.finals=\u8ACB\u6307\u5B9A\u6700\u7D42\u7269\u4EF6 macros.cancel=\u8981\u53D6\u6D88\uFF1F macros.popup.run=\u57F7\u884C\u5DE5\u5177 macros.popup.rename=\u6539\u540D macros.popup.delete=\u522A\u9664 macros.popup.addtolibrary=\u65B0\u589E\u81F3\u5DE8\u96C6\u5EAB macros.popup.removefromlibrary=\u5F9E\u5DE8\u96C6\u5EAB\u79FB\u9664 macros.popup.publish=\u5F15\u5165\u6B64\u67B6\u69CB macros.popup.notpublish=\u4E0D\u5F15\u5165\u6B64\u67B6\u69CB macros.popup.saveas=\u53E6\u5B58\u5DE5\u5177\u6A94... macros.popup.properties=\u986F\u793A\u5C6C\u6027 macros.popup.duplicate=\u8907\u88FD macros.savedlog.buttonok=\u5132\u5B58\u5DE5\u5177\u6A94 macros.question.delete=\u60A8\u78BA\u5B9A\u8981\u522A\u9664\u9019\u4E9B\u5DE5\u5177\u55CE\uFF1F rene.zirkel.objects.PointObject=\u9EDE rene.zirkel.objects.PrimitiveCircleObject=\u5713 rene.zirkel.objects.PrimitiveLineObject=\u7DDA rene.zirkel.objects.ExpressionObject=\u904B\u7B97\u5F0F. rene.zirkel.objects.FixedAngleObject=\u56FA\u5B9A\u5927\u5C0F\u7684\u593E\u89D2. rene.zirkel.objects.SegmentObject=\u7DDA\u6BB5 . rene.zirkel.objects.RayObject=\u5C04\u7DDA rene.zirkel.objects.TwoPointLineObject=\u76F4\u7DDA rene.zirkel.objects.FunctionObject=\u51FD\u5F0F rene.zirkel.objects.AreaObject=\u5340\u57DF mi.pal.name=\u5DE8\u96C6\u89C0\u5BDF\u5668 mi.name=\u540D\u7A31 : mi.comment=\u8A3B\u89E3 : mi.properties=\u53C3\u6578\u7269\u4EF6\u7684\u5C6C\u6027 : mi.hideproperties=\u76EE\u6A19\u7269\u4EF6\u7684\u5C6C\u6027 : mi.hideduplicates=\u96B1\u85CF\u8907\u88FD\u7684\u7269\u4EF6 mi.apply=\u5957\u7528 mi.tab.type=\u985E\u578B mi.tab.name=\u540D\u7A31 mi.tab.prompt=\u63D0\u793A mi.tab.fix=\u56FA\u5B9A ? mi.tab.ask=\u8A62\u554F ? mi.error.initial=\u932F\u8AA4 : \u81F3\u5C11\u8981\u6709\u4E00\u500B\u53C3\u6578 \n \u4E0D\u88AB\u8A2D\u5B9A\u70BA\u88AB\u56FA\u5B9A \n\n \u5DE8\u96C6\u7121\u6CD5\u88AB\u8B8A\u66F4 props.help=\u4F60\u8981\u5728\u67D0\u500B\u7269\u4EF6\u4E0A\u6309\u6ED1\u9F20\u53F3\u9375\uFF0C\u5C6C\u6027\u9762\u677F\u624D\u6703\u6253\u958B\u3002

\u5982\u679C\u4F60\u5728\u505A\u4E00\u500B\u65B0\u7684\u7269\u4EF6\u6642\uFF0C\u5C6C\u6027\u9762\u677F\u662F\u6253\u958B\u7684\uFF0C\u90A3\u4F60\u5C31\u53EF\u4EE5\u76F4\u63A5\u4FEE\u6539\u8A72\u7269\u4EF6\u7684\u5C6C\u6027\u3002 props.name=\u540D\u7A31 : props.alias=\u5225\u540D : props.unit=\u55AE\u4F4D : props.fix=\u56FA\u5B9A : props.expl=\u8AAA\u660E\u6587\u5B57 : props.belongto=\u5C64\u6B21 : props.conditional=\u8A2D\u5B9A\u683C\u5F0F\u5316\u689D\u4EF6 : props.solid=\u5BE6\u7DDA : props.hidden=\u96B1\u85CF : props.normal=\u6B63\u5E38 : props.bold=\u7C97\u7DDA : props.thin=\u865B\u7DDA : props.black=\u9ED1\u8272 : props.green=\u7DA0\u8272 : props.blue=\u85CD\u8272 : props.brown=\u68D5\u8272 : props.cyan=\u9752\u8272 : props.red=\u7D05\u8272 : props.showasslider=\u986F\u793A\u6210\u6ED1\u52D5\u687F : props.error=\u60A8\u8A2D\u5B9A\u7684\u6578\u5B78\u5F0F\u6709\u9EDE\u554F\u984C\uFF0C
\u8ACB\u91CD\u65B0\u8A2D\u5B9A\u3002 props.cartesian=\u5EA7\u6A19\u51FD\u6578 props.parametric=\u53C3\u6578\u5F0F props.functiontype=\u985E\u578B : props.killarc=\u522A\u9664\u5713\u5F27 props.arc=\u5713\u5F27... props.release=\u812B\u96E2 props.bind=\u9644\u8457\u65BC... props.setaway=\u8A2D\u5B9A\u9060\u96E2\u65BC props.setclose=\u8A2D\u5B9A\u9760\u8FD1\u65BC # v1.3 : props.grid=\u7DB2\u683C\u905E\u589E\u91CF : props.inside=\u7269\u4EF6\u5167\u90E8 : props.pointsonly=\u53EA\u63CF\u9EDE : props.step=\u9593\u9694 : palette.grid=\u5EA7\u6A19\u8EF8 leftpanel.macros=\u5DE5\u5177\u9762\u677F leftpanel.properties=\u5C6C\u6027\u9762\u677F leftpanel.history=\u7269\u4EF6\u9762\u677F leftpanel.help=\u64CD\u4F5C\u8AAA\u660E selectpopup.whatobject=\u8981\u9078\u54EA\u4E00\u500B\uFF1F selectpopup.RightClick=\u7DE8\u8F2F selectpopup.MoverTool=\u79FB\u52D5 selectpopup.HiderTool=\u986F\u793A/\u96B1\u85CF selectpopup.DeleteTool=\u522A\u9664 selectpopup.RenamerTool=\u91CD\u547D\u540D selectpopup.EditTool=\u7DE8\u8F2F selectpopup.SetParameterTool=\u8ACB\u9078\u64C7\u521D\u59CB\u7269\u4EF6 : selectpopup.SetTargetsTool=\u8ACB\u9078\u64C7\u6700\u7D42\u7269\u4EF6 : palette.info.locus=\u9EDE\u6CBF\u8457\u7DDA\u79FB\u52D5\u7684\u8ECC\u8DE1 # v1.4 : menu.special.savezirset=\u5EFA\u7ACB\u7C21\u5831... filedialog.openfolder.title=\u7C21\u5831\u8CC7\u6599\u593E\u9078\u53D6\u4E4B\u5C0D\u8A71\u65B9\u584A filedialog.openfolder.approve=\u9078\u53D6\u7C21\u5831\u8CC7\u6599\u593E filedialog.openfolder.saveicons=\u4E26\u5132\u5B58\u5716\u793A slideshow.next=\u4E0B\u4E00\u5F35 slideshow.previous=\u524D\u4E00\u5F35 slideshow.download=\u4E0B\u8F09\u6A94\u6848 slideshow.signature=\u88FD\u4F5C\u6B64\u7C21\u5831\u7684\u5DE5\u5177 # v1.5 : menu.language=\u8A9E\u8A00 menu.language.de=Deutsch menu.language.en=English menu.language.fr=Fran\u00E7ais menu.language.es=Espa\u00F1ol menu.language.gl=Galego menu.language.zh_TW=\u6B63\u9AD4\u4E2D\u6587 menu.help.url3=\u7FFB\u8B6F CaRMetal menu.display.smartboard=Smartboard \u6A21\u5F0F # v1.6 : menu.language.no=Norsk palette.info.bi_syma=\u93E1\u5C04 palette.info.bi_symc=\u5C0D\u7A31 palette.info.bi_trans=\u5E73\u79FB palette.info.bi_med=\u4E2D\u5782\u7DDA palette.info.bi_biss=\u5206\u89D2\u7DDA palette.info.bi_circ=\u904E\u4E09\u9EDE\u7684\u5713 palette.info.bi_arc=\u904E\u4E09\u9EDE\u7684\u5713\u5F27 palette.info.bi_t_align=\u5171\u7DDA\u7684\u9EDE ? palette.info.bi_t_para=\u5E73\u884C\u7DDA ? palette.info.bi_t_perp=\u5782\u7DDA ? palette.info.bi_t_equi=\u8207\u5169\u9EDE\u7684\u8DDD\u96E2\u7686\u76F8\u7B49 ? palette.info.bi_t_app=\u518D\u7DDA\u4E0A ? palette.info.bi_t_conf=\u76F8\u540C\u4F4D\u7F6E\u7684\u9EDE ? macro.bi_syma.0=\u93E1\u5C04\u7DDA ? macro.bi_syma.1=\u93E1\u5C04\u7684\u9EDE ? macro.bi_symc.0=\u5C0D\u7A31\u4E2D\u5FC3 ? macro.bi_symc.1=\u93E1\u5C04\u7684\u9EDE ? macro.bi_trans.0=\u5411\u91CF\u7684\u59CB\u9EDE ? macro.bi_trans.1=\u5411\u91CF\u7684\u7D42\u9EDE ? macro.bi_trans.2=\u8981\u88AB\u5E73\u79FB\u7684\u9EDE ? macro.bi_med.0=\u7DDA\u6BB5\u7684\u7B2C1\u500B\u7AEF\u9EDE ? macro.bi_med.1=\u7DDA\u6BB5\u7684\u7B2C2\u500B\u7AEF\u9EDE ? macro.bi_biss.0=\u7B2C\u4E00\u500B\u9EDE ? macro.bi_biss.1=\u593E\u89D2\u9802\u9EDE ? macro.bi_biss.2=\u6700\u5F8C\u4E00\u500B\u9EDE ? macro.bi_circ.0=\u7B2C\u4E00\u500B\u9EDE ? macro.bi_circ.1=\u7B2C\u4E8C\u500B\u9EDE ? macro.bi_circ.2=\u7B2C\u4E09\u500B\u9EDE ? macro.bi_t_para.0=\u7B2C\u4E00\u689D\u7DDA ? macro.bi_t_para.1=\u7B2C\u4E8C\u689D\u7DDA ? macro.bi_t_equi.0=\u6B64\u9EDE\u662F\u5426\u7B49\u8DDD ... macro.bi_t_equi.1=\u5230\u9019\u4E00\u500B\u9EDE ... macro.bi_t_equi.2=\u4E14\u5230\u9019\u4E00\u500B\u9EDE ? macro.bi_t_app.0=\u54EA\u4E00\u500B\u9EDE ? macro.bi_t_app.1=\u4F4D\u5728\u54EA\u4E00\u689D\u76F4\u7DDA\u6216\u7DDA\u6BB5 ? macro.bi_t_conf.0=\u54EA\u4E00\u500B\u9EDE ? macro.bi_t_conf.1=\u5728\u54EA\u4E00\u500B\u9EDE\u4E4B\u4E0A ? macro.bi_t_align.text0=\u9EDE\u5F7C\u6B64\u5171\u7DDA macro.bi_t_align.text1=\u9EDE\u5F7C\u6B64\u4E0D\u5171\u7DDA macro.bi_t_para.text0=\u7269\u4EF6\u5F7C\u6B64\u4E92\u76F8\u5E73\u884C macro.bi_t_para.text1=\u7269\u4EF6\u5F7C\u6B64\u4E26\u4E0D\u4E92\u76F8\u5E73\u884C macro.bi_t_perp.text0=\u7269\u4EF6\u5F7C\u6B64\u4E92\u76F8\u5782\u76F4 macro.bi_t_perp.text1=\u7269\u4EF6\u5F7C\u6B64\u4E26\u4E0D\u4E92\u76F8\u5782\u76F4 macro.bi_t_equi.text0=\u8DDD\u96E2\u76F8\u7B49 macro.bi_t_equi.text1=\u8DDD\u96E2\u4E26\u4E0D\u76F8\u7B49 macro.bi_t_app.text0=\u9EDE\u4F4D\u5728\u6B64\u7269\u4EF6\u4E0A macro.bi_t_app.text1=\u4E0D\u53EF\u5C07\u9EDE\u653E\u5728\u6B64\u7269\u4EF6\u4E0A macro.bi_t_conf.text0=\u9019\u5169\u500B\u9EDE\u7684\u4F4D\u7F6E\u76F8\u540C macro.bi_t_conf.text1=\u9019\u5169\u500B\u9EDE\u7684\u4F4D\u7F6E\u4E0D\u76F8\u540C palette.test=\u6E2C\u8A66 # v1.7 : filedialog.openfolder.appletsize=Applet \u5C3A\u5BF8 : filedialog.openfolder.actualsize=\u5BE6\u969B\u5C3A\u5BF8 filedialog.openfolder.other=\u5176\u4ED6... filedialog.openfolder.selected=\u5DF2\u9078\u53D6\u7684\u8CC7\u6599\u593E : filedialog.openfolder.cancel=\u53D6\u6D88 menu.file.exportsvg=\u8F38\u51FA\u6210 SVG \u683C\u5F0F menu.language.sl=Slovenski menu.language.nl=Nederlands menu.language.pt=Portugu\u00EAs props.vars=\u8B8A\u6578 : menu.objects.points=\u9EDE menu.objects.lines=\u7DDA menu.objects.segments=\u7DDA\u6BB5 menu.objects.circles=\u5713\u6216\u5713\u9310\u66F2\u7DDA menu.objects.angles=\u593E\u89D2 menu.objects.tracks=\u6C42\u8ECC\u8DE1\u8207\u8ECC\u8DE1 menu.objects.functions=\u51FD\u5F0F\u6216\u7B97\u8853\u904B\u7B97\u5F0F palette.info.function_u=\u986F\u793A\u5B9A\u7FA9\u7684\u51FD\u5F0F palette.info.function=\u986F\u793A\u51FD\u5F0F\u6216\u53C3\u6578\u5316\u66F2\u7DDA props.superhidden=\u5B8C\u5168\u96B1\u85CF : props.showvalue=\u986F\u793A\u503C : props.showname=\u986F\u793A\u540D\u7A31 : props.background=\u80CC\u666F : macro.bi_expression.0=\u9328\u9EDE ? # v1.9a : menu.help.licence=\u7248\u6B0A... licence.txt=

This program is \u81EA\u7531\u8EDF\u9AD4\uFF0C\u4F7F\u7528 GNU-GPL \u6388\u6B0A\u65B9\u5F0F, which means you can redistribute it and/or modify it under the terms of the licence published by the Free Software Foundation;
See :

# v2.0 : menu.special.theme=\u4F48\u666F\u4E3B\u984C menu.special.theme.gray=\u78E8\u4EAE\u7684\u91D1\u5C6C\u5916\u89C0 menu.special.theme.brushed=\u5237\u4EAE\u7684\u91D1\u5C6C\u5916\u89C0 menu.special.options=\u559C\u597D\u8A2D\u5B9A... menu.special.options.sizes=\u5C3A\u5BF8 menu.special.options.sizes.minpointsize=\u9EDE\u7684\u5927\u5C0F menu.special.options.sizes.minlinesize=\u7DDA\u5BEC menu.special.options.sizes.arrowsize=\u7BAD\u982D\u5927\u5C0F menu.special.options.sizes.minfontsize=\u5B57\u578B\u5927\u5C0F menu.special.options.sizes.digits.lengths=\u9577\u5EA6\u7CBE\u78BA\u5EA6 menu.special.options.sizes.digits.edit=\u7B97\u8853\u904B\u7B97\u5F0F\u7CBE\u78BA\u5EA6 menu.special.options.sizes.digits.angles=\u89D2\u5EA6\u7CBE\u78BA\u5EA6 menu.special.options.colors=\u984F\u8272 menu.special.options.others=\u5176\u4ED6 menu.special.options.others.undock=\u5141\u8A31\u81EA\u7531\u653E\u7F6E\u5DE5\u5177\u7BB1\u6216\u8272\u76E4 # v2.1 : menu.file.close=\u95DC\u9589\u8996\u7A97 # v2.3 : alert.toomuchwins=\u958B\u555F\u592A\u591A\u8996\u7A97 :
\u8ACB\u95DC\u9589\u90E8\u4EFD\u8996\u7A97\u5F8C\u518D\u958B\u555F
\u65B0\u8996\u7A97 # v2.4 : menu.file.new3D=\u65B0\u958B\u67093D\u67B6\u69CB\u7684\u8996\u7A97 palette.3D=3D palette.info.bi_3Dcoords=3D \u5EA7\u6A19 macro.bi_3Dcoords.0=\u9328\u9EDE ? palette.info.bi_3Dcube=\u6B63\u7ACB\u65B9\u9AD4 macro.bi_3Dcube.0=\u6B63\u7ACB\u65B9\u9AD4\u7684\u4E2D\u5FC3 ? palette.info.bi_3Darete=3D \u908A macro.bi_3Darete.0=\u7B2C1\u500B\u9EDE ? macro.bi_3Darete.1=\u7B2C2\u500B\u9EDE ? macro.bi_3Darete.2=\u7B2C3\u500B\u9EDE ? macro.bi_3Darete.3=\u7B2C4\u500B\u9EDE ? palette.info.bi_3Dtetra=\u6B63\u56DB\u9762\u9AD4 macro.bi_3Dtetra.0=\u6B63\u56DB\u9762\u9AD4\u7684\u4E2D\u5FC3 ? menu.newdoc=\u65B0\u6587\u4EF6 menu.language.it=Italiano # v2.5.5 : palette.aspect.label.text=\u4F4D\u7F6E palette.aspect.label.point=\u9EDE palette.aspect.label.line=\u7DDA palette.aspect.label.segment=\u7DDA\u6BB5 palette.aspect.label.circle=\u5713 palette.aspect.label.angle=\u593E\u89D2 palette.aspect.label.area=\u591A\u908A\u5F62 palette.aspect.label.bi_text=\u6587\u5B57 palette.info.bi_3Ddode=\u6B63\u5341\u4E8C\u9762\u9AD4 macro.bi_3Ddode.0=\u6B63\u5341\u4E8C\u9762\u9AD4\u4E2D\u5FC3 ? # v2.7 : palette.aspect.label.pointshape=\u9EDE\u7684\u5916\u89C0\u8207\u540D\u7A31 : palette.aspect.label.locus=\u8ECC\u8DE1 menu.edit.deleteall=\u5168\u90E8\u522A\u9664 # v2.7.1 : java.old.message=\u62B1\u6B49, \u7121\u6CD5\u555F\u52D5 CaRMetal , \u539F\u56E0\u70BA\u4F60\u7684 java \u57F7\u884C\u74B0\u5883\u7248\u672C\u592A\u820A ! java.old.quit=\u505C\u6B62 java.old.go=\u4E0B\u8F09\u65B0\u7684 java \u7248\u672C palette.info.boundedpoint=\u5C07\u9EDE\u653E\u5728\u5E73\u9762\u6216\u591A\u9762\u9AD4\u7684\u9762\u4E0A./src/eric/docs/.DS_Store0000644000175000017500000001400411344215451014074 0ustar yvesyvesBud1%  @ @ @ @ E%DSDB` @ @ @./src/eric/docs/JZirkelProperties_gl.properties0000644000175000017500000002106111302427452020641 0ustar yvesyves# Sample ResourceBundle properties file menu.file=Archivo menu.file.new=Novo menu.file.load=Abrir... menu.file.save=Registrar menu.file.saveas=Registrar como... menu.file.exportpng=Exportar vers PNG menu.file.exporteps=Exportar vers EPS menu.file.quit=Sa\u00EDr menu.edit=Edici\u00F3n menu.edit.copy=Copiar menu.edit.move=mover menu.edit.rename=Renomear menu.edit.edit=Modificar menu.edit.hide=Ocultar menu.edit.delete=Suprimir menu.display=Mostrar menu.display.hidden=Mostrar/Ocultar os obxectos invisibles menu.display.grid=Mostrar/Ocultar a grella menu.display.finegrid=Eixes soamente menu.display.leftsnap=Grella magn\u00E9tica menu.display.manage_macros=Inspeccioar macros menu.display.history_panel=Hist\u00F3rico menu.display.help_panel=Panel de axuda menu.display.properties_panel=Inspeccionar obxectos menu.display.small= Iconos pequenos menu.display.medium= Iconos medianos menu.display.large=Iconos grandes menu.display.restrictedpalette=Fixar a paleta restrinxida menu.display.restrictedpaletteedit=Modificar la paleta restrinxida menu.display.restrictmessage=
Esta utilidade permite visualizar a paleta restrinxida.

Esto solo afecta ao archivo en uso.

Ao gardar, vostede poder\u00E1 elexir a opci\u00F3n de gardar tam\u00E9n a figura restrinxida;.
cr\u00E9anse ent\u00F3n dous arquivos: O primeiro (.zir) abrirase en modo normal, e
o segundo (.r.zir) en modo restrinxido.
menu.macros=Macros menu.special=Especial menu.special.newmacro=Crear macro menu.special.loadmacros=Abrir un arquivo de macros... menu.special.definejob=Definir un exercicio menu.special.loadjob=Abrir un exercicio... menu.special.jobcomment=Redactar o texto do exercicio menu.special.testjob=Revisar este exercicio menu.special.savejob=Gardar el exercicio menu.special.export=Crear un arquivo HTML e velo con navegador menu.special.exporttemplate=Exportar a HTML coas plantillas menu.help=Axuda menu.help.about=Acerca de CaRMetal... menu.help.info=Axuda contextual menu.help.url0=P\u00E1xina de CaRMetal menu.help.url1=P\u00E1xina de CARzine menu.help.url2=P\u00E1xina oficial de C.a.R. filedialog.options=Opciones de gardado filedialog.saveas=Gardar construcci\u00F3n filedialog.alsorestricted=Gardar tam\u00E9n as restrcci\u00F3ns da construcci\u00F3n filedialog.restrictedmessage=Est\u00E1 a traballar agora nunha sesi\u00F3n restrinxida,
a construcci\u00F3n gardarase en modo restrinxido. filedialog.filefilter=Arquivo CaR (.zir) filedialog.compressedfilefilter=Arquivo CaR comprimido (.zirz) filedialog.macrofilefilter=Arquivo de macros (.mcr) filedialog.savemessage1=O arquivo :\n filedialog.savemessage2=\xa existe, \u00BFest\u00E1 seguro de querer reemplazalo ? palette.file=Arquivo palette.edit=Edici\u00F3n palette.construction=Construci\u00F3n palette.aspect=Aspecto e color palette.history=Historico palette.sizes=Tama\u00F1o palette.sizes.point=Puntos palette.sizes.line=Li\u00F1as palette.sizes.arrow=Flechas palette.sizes.font=Fontes palette.prec=Precisi\u00F3n num\u00E9rica palette.prec.lengths=Lonxitude palette.prec.edit=Expresi\u00F3ns palette.prec.angles=\u00C1ngulos palette.colors=Fondo: cor e imaxe palette.colors.saturated1=Cores saturados palette.colors.desaturated1=Cores desaturados palette.colors.saturated2=Cores saturados 2 palette.colors.desaturated2=Cores desaturados 2 palette.colors.constants=Cores Web palette.image.fileerror=Debe gardar a construci\u00F3n antes de usar esta ferramenta.

Despois, a imaze que elixa debe figurar
na mesma ubicaci\u00F3n que esta figura. palette.info.vector=Vector palette.info.image3=Insertar unha imaxe utilizando 2 ou 3 puntos palette.info.background=Elexir/borrar unha imaxe de fondo palette.info.imcenter=Centrar a imaxe de fondo palette.info.imstretch=Axeitar o tama\u00F1o da imaxe a vent\u00E1 da construcci\u00F3n palette.info.imtile=Fondo con mosaico de imaxe palette.info.copy=Copiar a vent\u00E1 de construcci\u00F3n no portapapeis palette.info.exportpng=Exportar a construcci\u00F3n da vent\u00E1 actual ao formato PNG palette.info.exportpng= Exportar a construcci\u00F3n da vent\u00E1 actual ao formato PNG palette.info.exporteps= Exportar a construcci\u00F3n da vent\u00E1 actual ao formato EPS palette.info.newmacro=Crear unha nova macro palette.info.loadmacros=Abrir un arquivo de macros palette.info.manage_macros=Mostrar/Ocultar o panel de xestion de macros palette.info.properties_panel=Mostrar/Ocultar o panel de propiedades dos obxectos palette.info.history_panel=Mostrar/ Ocultar o panel de hist\u00F3rico da construcci\u00F3n palette.info.help_panel=Mostrar/ Ocultar el panel de axuda contextual macros.untitledmacro=Macro sen nme macros.untitledfolder=Cartafol sen nome macros.emptynode=-- Vac\u00EDo -- macros.addfolder=Engadir unha nova carpeta macros.deleteselected=Suprimir as macros seleccioadas macros.renamemacro=Cambear o nome da macro seleccioada macros.recordmacro=Gardar unha macro macros.initials=\u00BFObxectos iniciais? macros.pleaseselect=!Seleccione, por favor! macros.finals=\u00BFObxectos finais? macros.cancel=\u00BFCancelar? macros.popup.run=Arrancar a macro macros.popup.rename= Renomear macros.popup.delete=Borrar macros.popup.addtolibrary=Engadir \u00E1 biblioteca macros.popup.removefromlibrary=Quitar da biblioteca macros.popup.publish=Incluir na figura macros.popup.notpublish=Non incluir na figura macros.popup.saveas=Gardar como... macros.popup.properties=Amosar as propiedades macros.popup.duplicate=Duplicar macros.savedlog.buttonok=Gardar no arquivo de macro(s) macros.question.delete=\u00BFEst\u00E1 seguro de querer borrar estas macros ? rene.zirkel.objects.PointObject=Pto. rene.zirkel.objects.PrimitiveCircleObject=Cir. rene.zirkel.objects.PrimitiveLineObject=Lin. rene.zirkel.objects.ExpressionObject=Exp. rene.zirkel.objects.FixedAngleObject=AngF. rene.zirkel.objects.SegmentObject=Seg. rene.zirkel.objects.RayObject=Ray rene.zirkel.objects.TwoPointLineObject=Rec. rene.zirkel.objects.FunctionObject=Func. rene.zirkel.objects.AreaObject=\u00C1rea mi.pal.name=Revisar macros mi.name=Nome : mi.comment=Comentario : mi.properties=Propiedades dos obxectos iniciais : mi.hideproperties=Propiedades dos obxectos finais : mi.hideduplicates=Buscar duplicados mi.apply=Aplicar mi.tab.type=Tipo mi.tab.name=Nome mi.tab.prompt=invitaci\u00F3n mi.tab.fix=\u00BFFixar ? mi.tab.ask=\u00BFasociar? mi.error.initial=Error : a lo menos un obxecto inicial\ndebe estar libre (ni fijo, ni dependiente)\n\nNingunha modificaci\u00F3n\nser\u00E1 gardada nesta macro. props.help=Para poder visualizar as propiedades dun obxecto clicar eiqu\u00ED co bot\u00F3n dereito.

Si se crea un novo obxecto contendo estes puntos, poder\u00E1 editar as s\u00FAas propiedades durante o proceso. props.name=Nome : props.alias=Alias : props.unit=Unidades : props.fix=Fixar: props.expl=Explicaci\u00F3n : props.belongto=copiar : props.conditional=Apariencia : props.solid=Opaco : props.hidden=Cach\u00E9 : props.normal=Normal : props.bold=s\u00F3lido: props.thin=Punteado : props.black=Negro : props.green=Verde : props.blue=Azul : props.brown=Marr\u00F3n : props.cyan=Cyan : props.red=Roxo : props.showasslider=Cursor props.error=Error de sintaxis en esta expresi\u00F3n.
Vaise reiniciar. props.cartesian=Funci\u00F3n cartesiana props.parametric= Funci\u00F3n param\u00E9trica props.functiontype=Tipo : props.killarc=Arco cortado props.arc=Arco props.release=liberar props.bind=asociar props.setaway=Lexos de props.setclose=Cerca de # v1.3 : props.grid=Incremento : props.inside=Sobre el objeto: props.pointsonly=Soamente con dous puntos: props.step=Paso : palette.grid=Aspecto da grella leftpanel.macros=Panel de xesti\u00F3n de macros leftpanel.properties=Panel de propiedades dos obxectos leftpanel.history=Panel de historico leftpanel.help=Panel de axuda selectpopup.whatobject=\u00BFQu\u00E9 obxecto ? selectpopup.RightClick=Editar selectpopup.MoverTool=Desplazar selectpopup.HiderTool=Mostrar/Ocultar selectpopup.DeleteTool=Suprimir selectpopup.RenamerTool=Renomear selectpopup.EditTool=Editar selectpopup.SetParameterTool=Macro-inciais : selectpopup.SetTargetsTool=Macro-finais : palette.info.locus=Lugar do punto+ desenvolvemento da recta # v1.4 : menu.special.savezirset=Crear un diaporama filedialog.openfolder.title=Dialogo de selecci\u00F3n do cartafol do diaporama filedialog.openfolder.approve=Seleccionar o cartafol do diaporama filedialog.openfolder.saveicons=Gardar tam\u00E9n as restricc\u00F3ns de iconos slideshow.next=seguinte slideshow.previous=anterior slideshow.download=Cargar o arquivo slideshow.signature=Diaporama realizado con # v1.5 : menu.language=Idiomas menu.help.url3=Traducir CaRMetal./src/eric/docs/JZirkelProperties_pl.properties0000644000175000017500000003100611302427452020652 0ustar yvesyves# Sample ResourceBundle properties file menu.file=Plik menu.file.new=Nowy menu.file.load=Otw\u00F3rz... menu.file.save=Zapisz menu.file.saveas=Zapisz jako... menu.file.exportpng=Eksport do PNG menu.file.exporteps=Eksport do EPS menu.file.quit=Zako\u0144cz menu.edit=Edycja menu.edit.copy=Kopiuj menu.edit.move=Przesu\u0144 menu.edit.rename=Zmie\u0144 nazw\u0119 menu.edit.edit=Edytuj menu.edit.hide=Ukryj menu.edit.delete=Usu\u0144 menu.display=Widok menu.display.hidden=Poka\u017C/Ukryj obiekty menu.display.grid=Poka\u017C/Ukryj Siatk\u0119 menu.display.finegrid=Tylko osie menu.display.leftsnap=Chwyt z LP myszy menu.display.manage_macros=Inspektor makr menu.display.history_panel=Historia menu.display.help_panel=Pomoc menu.display.properties_panel=Panel cech obiektu menu.display.small=Ikony malutkie menu.display.medium=Ikony \u015Brednie menu.display.large=Ikony du\u017Ce menu.display.restrictedpalette=Poka\u017C palet\u0119 ograniczon\u0105 menu.display.restrictedpaletteedit=Edytuj palet\u0119 ograniczon\u0105 menu.display.restrictmessage=
Ta opcja pozwala Ci pokaza\u0107 palet\u0119 ograniczon\u0105.

Dtyczy ona tylko aktualnego pliku:

przy zapisie pliku b\u0119dzie mo\u017Cna zaznaczy\u0107 'Zapisz tak\u017Ce figur\u0119 ograniczon\u0105'
i zapisane b\u0119d\u0105 dwa pliki: pierwszy (.zir) w trybie 'normal',
drugi (.r.zir) w trybie ograniczonym
menu.macros=Makro menu.special=Specjalne menu.special.newmacro=Nowe makro menu.special.loadmacros=Otw\u00F3rz plik makra... menu.special.definejob=Zdefiniuj zadanie menu.special.loadjob=\u0141aduj zadanie ... menu.special.jobcomment=U\u0142\u00F3\u017C tekst zadania... menu.special.testjob=Testuj to zadanie menu.special.savejob=Zapisz jako zadanie... menu.special.export=Utw\u00F3rz plik HTML i obejrzyj menu.special.exporttemplate=Eksport HTML z szablonami menu.help=Pomoc menu.help.about=O CaRMetal... menu.help.info=Pomoc kontekstowa menu.help.url0=Do strony CarMetal menu.help.url1=Do strony CarZine menu.help.url2=Do oficjalnej strony C.a.R. filedialog.saveas=Zapisz figur\u0119 filedialog.alsorestricted=Zapisz tak\u017Ce figur\u0119 ograniczon\u0105 filedialog.options=Opcje zapisu filedialog.restrictedmessage=Pracujesz w sesji ograniczonej,
wi\u0119c Twa figura b\u0119dzie zapisana w trybie ograniczonym filedialog.filefilter=Plik CaR (.zir) filedialog.compressedfilefilter=Spakowany plik CaR (.zirz) filedialog.macrofilefilter=Plik makra (.mcr) filedialog.savemessage1=Plik :\n filedialog.savemessage2=\nju\u017C istnieje. Czy zast\u0105pi\u0107 go ? palette.file=Plik palette.edit=Edycja palette.construction=Konstrukcja palette.aspect=Wygl\u0105d Kolor palette.history=Historia palette.sizes=Rozmiary palette.sizes.point=Punkt palette.sizes.line=Linia palette.sizes.arrow=Strza\u0142ka palette.sizes.font=Czcionka palette.prec=Precyzja liczb palette.prec.lengths=D\u0142ugo\u015Bci palette.prec.edit=Wyra\u017Cenia palette.prec.angles=K\u0105ty palette.colors=Kolor t\u0142a obraz palette.colors.saturated1=Kolory nasycone palette.colors.desaturated1=Kolory nienasycone palette.colors.saturated2=Kolory nasycone 2 palette.colors.desaturated2=Kolory nienasycone 2 palette.colors.constants=Kolory WWW palette.image.fileerror=Najpierw musisz zapisa\u0107 figur\u0119

After, Wybrany obrazek musi by\u0107
w tym samym folderze. palette.info.vector=Vektor palette.info.image3=Wstaw obraz na 2 lub 3 punktach palette.info.background=Wybierz/czy\u015B\u0107 obraz t\u0142a palette.info.imcenter=Wy\u015Brodkuj obraz t\u0142a palette.info.imstretch=Dopasuj obraz t\u0142a do okna konstrukcji palette.info.imtile=Kafelki z obrazu t\u0142a palette.info.copy=Kopiuj okno konstrukcji palette.info.exportpng=Eksport okna konstrukcji do formatu png palette.info.exporteps=Eksport okna konstrukcji do formatu eps palette.info.newmacro=Utw\u00F3rz nowe makro palette.info.loadmacros=\u0141aduj plik makra palette.info.manage_macros=Poka\u017C/ukryj panel makra palette.info.properties_panel=Poka\u017C/Ukryj panel cech obiektu palette.info.history_panel=Poka\u017C/Ukryj panel historii konstrukcji palette.info.help_panel=Poka\u017C/Ukryj panel pomocy kontekstowej macros.untitledmacro=Makro bez nazwy macros.untitledfolder=Folder bez nazwy macros.emptynode=-- Pusty -- macros.addfolder=Dodaj nowy folder macros.deleteselected=Usu\u0144 wybrane makra macros.renamemacro=Zmie\u0144 nazw\u0119 wybranego makra macros.recordmacro=Nagraj makro macros.initials=Obiekty startowe ? macros.pleaseselect=wybierz prosz\u0119 ! macros.finals=Obiekty wynikowe ? macros.cancel=Anulowa\u0107 ? macros.popup.run=Uruchom makro macros.popup.rename=Zmie\u0144 naz macros.popup.delete=Usu\u0144 macros.popup.addtolibrary=Dodaj do biblioteki macros.popup.removefromlibrary=Usu\u0144 z biblioteki macros.popup.publish=W\u0142\u0105cz do figury macros.popup.notpublish=Nie w\u0142\u0105czaj do figury macros.popup.saveas=Zapisz jako... macros.popup.properties=Poka\u017C cechy macros.popup.duplicate=Powiel macros.savedlog.buttonok=Zapisz plik makra macros.question.delete=Czy na pewno usun\u0105\u0107 te makra ? rene.zirkel.objects.PointObject=Pkt rene.zirkel.objects.PrimitiveCircleObject=Okr rene.zirkel.objects.PrimitiveLineObject=Lin rene.zirkel.objects.ExpressionObject=Wyr. rene.zirkel.objects.FixedAngleObject=K\u0105t rene.zirkel.objects.SegmentObject=Odc. rene.zirkel.objects.RayObject=Ppr rene.zirkel.objects.TwoPointLineObject=Lin rene.zirkel.objects.FunctionObject=Fun rene.zirkel.objects.AreaObject=Pole mi.pal.name=Inspektor makr mi.name=Nazwa : mi.comment=Notka : mi.properties=Cechy parametr\u00F3w : mi.hideproperties=Cechy obiekt\u00F3w docelowych : mi.hideduplicates=Ukryj duplikaty mi.apply=Zastosuj mi.tab.type=Typ mi.tab.name=Nazwa mi.tab.prompt=Oznacz mi.tab.fix=Ust. ? mi.tab.ask=Pyt. ? mi.error.initial=B\u0142\u0105d : cho\u0107 jeden parametr \nmusi by\u0107 wolny (ani Ust., ani Pyt.)\n\nTo makro nie b\u0119dzie zmienione props.help=Aby zobaczy\u0107 cechy, kliknij prawym PM na obiekcie.

Je\u015Bli tworzysz nowy obiekt z tym panelem otwartym, b\u0119dziesz m\u00F3g\u0142 zmienia\u0107 cechy w czasie tworzenia. props.name=Nazwa : props.alias=Podpis : props.unit=Miara : props.fix=Ust. : props.expl=Wyja\u015Bnienie : props.belongto=Warstwa : props.conditional=Wygl\u0105d warunkowy : props.solid=Matowy : props.hidden=Ukryty : props.normal=Normalny : props.bold=Gruby : props.thin=Kropkowy : props.black=Czarny : props.green=Zielony : props.blue=Niebieski : props.brown=Br\u0105zowy : props.cyan=Turkus : props.red=Czerwony : props.showasslider=Poka\u017C jako suwak : props.error=W tym wyra\u017Ceniu jest b\u0142\u0105d sk\u0142adniowy.
B\u0119dzie ono ponownie zainicjowane. props.cartesian=Funkcja XY props.parametric=Funkcja parametryczna props.functiontype=Typ : props.killarc=Usu\u0144 \u0142uk props.arc=\u0141uk props.release=Uwolnij props.bind=Przywi\u0105\u017C props.setaway=Ustaw daleko props.setclose=Ustaw blisko # v1.3 : props.grid=Skok siatki : props.inside=Wewn\u0105trz obiektu : props.pointsonly=Tylko z punktami : props.step=Krok : palette.grid=Wygl\u0105d siatki leftpanel.macros=Panel makr leftpanel.properties=Panel cech leftpanel.history=Panel historii leftpanel.help=Panel pomocy selectpopup.whatobject=kt\u00F3ry obiekt ? selectpopup.RightClick=Wybierz selectpopup.MoverTool=Przesu\u0144 selectpopup.HiderTool=Poka\u017C/Ukryj selectpopup.DeleteTool=Usu\u0144 selectpopup.RenamerTool=Zmie\u0144 nazw\u0119 selectpopup.EditTool=Edytuj selectpopup.SetParameterTool=Parametry makra : selectpopup.SetTargetsTool=Cele makra : palette.info.locus=Locus punktu Obwiednia linii # v1.4 : menu.special.savezirset=Tw\u00F3rz pokaz... filedialog.openfolder.title=Wyb\u00F3r folderu pokazu filedialog.openfolder.approve=Wybierz folder pokazu filedialog.openfolder.saveicons=Zapisz tak\u017Ce ikony ograniczone slideshow.next=dalej slideshow.previous=wstecz slideshow.download=Pobierz plik slideshow.signature=Pokaz wykreowany w # v1.5 : menu.language=J\u0119zyki menu.language.de=Niemiecki menu.language.en=Angielski menu.language.fr=Francuski menu.language.es=Hiszpa\u0144ski menu.language.gl=Galego menu.language.zh_TW=Chi\u0144ski (Tradycyjny) menu.help.url3=CarMetal - translacja menu.display.smartboard=Tryb Smartboard # v1.6 : menu.language.no=Norweski palette.info.bi_syma=Symetria osiowa palette.info.bi_symc=Symetria \u015Brodkowa palette.info.bi_trans=Translacja palette.info.bi_med=Symetralna odcinka palette.info.bi_biss=Dwusieczna k\u0105ta palette.info.bi_circ=Okr\u0105g przez 3 punkty palette.info.bi_arc=\u0142uk opisany przez 3 punkty palette.info.bi_t_align=Punkty wsp\u00F3\u0142liniowe ? palette.info.bi_t_para=Linie r\u00F3wnoleg\u0142e ? palette.info.bi_t_perp=Linie prostopad\u0142e ? palette.info.bi_t_equi=Punkt r\u00F3wnoodleg\u0142y ? palette.info.bi_t_app=Le\u017Cy na linii ? palette.info.bi_t_conf=Punkty pokrywaj\u0105ce si\u0119 ? macro.bi_syma.0=O\u015B symetrii ? macro.bi_syma.1=Punkt do odbicia ? macro.bi_symc.0=\u015Arodek symetrii ? macro.bi_symc.1=Punkt do odbicia ? macro.bi_trans.0=Pocz\u0105tek wektora ? macro.bi_trans.1=Koniec wektora ? macro.bi_trans.2=Punkt do translacji ? macro.bi_med.0=Pierwszy koniec odcinka ? macro.bi_med.1=Drugi koniec odcinka ? macro.bi_biss.0=Pierwszy punkt ? macro.bi_biss.1=Wierzcho\u0142ek k\u0105ta ? macro.bi_biss.2=Ostatni punkt ? macro.bi_circ.0=First point ? macro.bi_circ.1=Drugi punkt ? macro.bi_circ.2=Trzeci punkt ? macro.bi_t_para.0=Pierwsza linia ? macro.bi_t_para.1=Druga linia ? macro.bi_t_equi.0=Czy punkt jest r\u00F3wnoodleg\u0142y ... macro.bi_t_equi.1=Od tego punktu ... macro.bi_t_equi.2=I od tego punktu ? macro.bi_t_app.0=Kt\u00F3ry punkt ? macro.bi_t_app.1=Le\u017Cy na kt\u00F3rej prostej (odcinku) ? macro.bi_t_conf.0=Kt\u00F3ry punkt ? macro.bi_t_conf.1=Jest na kt\u00F3rym punkcie ? macro.bi_t_align.text0=Punkty s\u0105 wsp\u00F3\u0142liniowe macro.bi_t_align.text1=Punkty nie s\u0105 wsp\u00F3\u0142liniowe macro.bi_t_para.text0=Obiekty s\u0105 r\u00F3wnoleg\u0142e macro.bi_t_para.text1=Obiekty nie s\u0105 r\u00F3wnoleg\u0142e macro.bi_t_perp.text0=Obiekty s\u0105 prostopad\u0142e macro.bi_t_perp.text1=Obiekty nie s\u0105 prostopad\u0142e macro.bi_t_equi.text0=Punkty s\u0105 r\u00F3wnoodleg\u0142e macro.bi_t_equi.text1=Punkty nie s\u0105 r\u00F3wnoodleg\u0142e macro.bi_t_app.text0=Punkt le\u017Cy na obiekcie macro.bi_t_app.text1=Punkt nie le\u017Cy na obiekcie macro.bi_t_conf.text0=Dwa punkty pokrywaj\u0105 si\u0119 macro.bi_t_conf.text1=Dwa punkty nie pokrywaj\u0105 si\u0119 palette.test=Testy # v1.7 : filedialog.openfolder.appletsize=Rozmiar apletu : filedialog.openfolder.actualsize=Rozmiar aktualny filedialog.openfolder.other=Inny... filedialog.openfolder.selected=Wybrany folder : filedialog.openfolder.cancel=Anuluj menu.file.exportsvg=Eksportuj do SVG menu.language.sl=S\u0142owe\u0144ski menu.language.nl=Holenderski menu.language.pt=Portugalski props.vars=Zmienne : menu.objects.points=Punkty menu.objects.lines=Linie menu.objects.segments=Odcinki menu.objects.circles=Okr\u0119gi i sto\u017Ckowe menu.objects.angles=K\u0105ty menu.objects.tracks=\u015Alady i locus menu.objects.functions=Funkcje i wyra\u017Cenia palette.info.function_u=Funkcja u\u017Cytkownika palette.info.function=Wykres funkcji lub krzywa parametryczna props.superhidden=Ca\u0142kiem ukryty : props.showvalue=Poka\u017C warto\u015B\u0107 : props.showname=Poka\u017C nazw\u0119 : props.background=T\u0142o : macro.bi_expression.0=Punkt zaczepienia ? # v1.9a : menu.help.licence=Licencja...licence.txt=

Program ten jest wolnyna licencji GNU-GPL, tzn. mo\u017Ce by\u0107 rozpowszechniany i/lub modifikowany na warunkach licence opublikowanej przez Free Software Foundation;
Patrz :

# v2.0 : menu.special.theme=Kostiumy menu.special.theme.gray=Metal - chrom menu.special.theme.brushed=Metal - aluminium menu.special.options=Preferencje... menu.special.options.sizes=Rozmiary menu.special.options.sizes.minpointsize=Rozmiar punktu menu.special.options.sizes.minlinesize=Rozmiar linii menu.special.options.sizes.arrowsize=Rozmiar strza\u0142ki menu.special.options.sizes.minfontsize=Rozmiar czcionki menu.special.options.sizes.digits.lengths=Precyzja d\u0142ugo\u015Bci menu.special.options.sizes.digits.edit=Precyzja wyra\u017Cenia menu.special.options.sizes.digits.angles=Precyzja miary k\u0105ta menu.special.options.colors=Kolory menu.special.options.others=Inne menu.special.options.others.undock=Palety mo\u017Cna od\u0142\u0105cza\u0107 # v2.1 : menu.file.close=Zamknij okno # v2.3 : alert.toomuchwins=Zbyt wiele otwartych okien :
zamknij niekt\u00F3re przed otwarciem
nowego okna./src/eric/docs/JZirkelProperties_pt_BR.properties0000644000175000017500000004035711302427452021256 0ustar yvesyves# Sample ResourceBundle properties file menu.file=Arquivo menu.file.new=Novo menu.file.load=Abrir... menu.file.save=Salvar menu.file.saveas=Salva Como... menu.file.exportpng=Exportar para PNG menu.file.exporteps=Exportar para EPS menu.file.quit=Sair menu.edit=Editar menu.edit.copy=Copiar menu.edit.move=Mover Objeto menu.edit.rename=Renomear menu.edit.edit=Editar menu.edit.hide=Esconder menu.edit.delete=Apagar menu.display=Display menu.display.hidden=Exibir/Esconder Objetos menu.display.grid=Exibir/Esconder Malha menu.display.finegrid=Eixos apenas menu.display.leftsnap=Mover para a malha com o bot\u00E3o esquerdo menu.display.manage_macros=Gerenciador de Macros menu.display.history_panel=Hist\u00F3ria menu.display.help_panel=Ajuda menu.display.properties_panel=Propriedades menu.display.small=\u00CDcones pequenos menu.display.medium=\u00CDcones m\u00E9dios menu.display.large=\u00CDcones grandes menu.display.restrictedpalette=Exibir Paleta Reduzida menu.display.restrictedpaletteedit=Editar Paleta Reduzida menu.display.restrictmessage=
Este item permite que voc\u00EA visualize a paleta reduzida.

Esta op\u00E7\u00E3o afetar\u00E1 apenas para a constru\u00E7\u00E3o atual.

Ao salvar o arquivo ('Salvar Como...'), voc\u00EA poder\u00E1 escolher 'Salvar tamb\u00E9m a figura no modo reduzido'
e, ent\u00E3o, dois arquivos ser\u00E3o criados : o primeiro (.zir) abrir\u00E1 no modo normal e
o segundo (.r.zir) no modo reduzido
menu.macros=Macros menu.special=Especial menu.special.newmacro=Nova Macro menu.special.loadmacros=Abrir Macro... menu.special.definejob=Definir um Exerc\u00EDcio menu.special.loadjob=Abrir um Exerc\u00EDcio ... menu.special.jobcomment=Configura o Texto do Exerc\u00EDcio ... menu.special.testjob=Testar este Exerc\u00EDcio menu.special.savejob=Salvar como Exerc\u00EDcio ... menu.special.export=Criar Arquivo HTML menu.special.exporttemplate=Exportar HTML como Modelo menu.help=Ajuda menu.help.about=Sobre o CaRMetal... menu.help.info=Ajuda Contextualizada menu.help.url0=Ir para a p\u00E1gina WEB do CaRMetal menu.help.url1=Ir para a p\u00E1gina WEB do CARzine menu.help.url2=Ir para a p\u00E1gina WEB oficial do C.a.R. filedialog.saveas=Salvar Figura filedialog.alsorestricted=Salvar tamb\u00E9m a figura no modo reduzido filedialog.options=Salvar Op\u00E7\u00F5es filedialog.restrictedmessage=Voc\u00EA est\u00E1 trabalhando em uma sess\u00E3o no modo restrito,
assim sua figura ser\u00E1 salva neste modo. filedialog.filefilter=Arquivo CaR (.zir) filedialog.compressedfilefilter=Arquivo CaR Compactado (.zirz) filedialog.macrofilefilter=Arquivo Macro CaR (.mcr) filedialog.savemessage1=Arquivo :\n filedialog.savemessage2=\nj\u00E1 existe. Voc\u00EA deseja substitu\u00ED-lo? palette.file=Arquivo palette.edit=Editar palette.construction=Constru\u00E7\u00E3o palette.aspect=Aspecto Cor palette.history=Hist\u00F3ria palette.sizes=Tamanhos palette.sizes.point=Ponto palette.sizes.line=Reta palette.sizes.arrow=Seta palette.sizes.font=Fonte palette.prec=Precis\u00E3o num\u00E9rica palette.prec.lengths=Comprimentos palette.prec.edit=Express\u00F5es palette.prec.angles=\u00C2ngulos palette.colors=Cor de Fundo imagem palette.colors.saturated1=Cores saturadas palette.colors.desaturated1=Cores menos saturadas palette.colors.saturated2=Cores saturadas 2 palette.colors.desaturated2=Cores menos saturadas 2 palette.colors.constants=Constantes WEB palette.image.fileerror=Voc\u00EA deve salvar esta constru\u00E7\u00E3o antes de usar esta ferramenta.

Depois, the figura que voc\u00EA escolher deve ficar
no sesmo diret\u00F3rio. palette.info.vector=Vetor palette.info.image3=Incluir imagem com 2 ou 3 pontos palette.info.background=Escolher/Limpar imagem de fundo palette.info.imcenter=Centralizar imagem de fundo palette.info.imstretch=Redimensionar a imagem de fundo para preencher a janela da constru\u00E7\u00E3o palette.info.imtile=Ladrilhar a imagem de fundo palette.info.copy=Copiar a janela de constru\u00E7\u00E3o palette.info.exportpng=Exportar a janela de constru\u00E7\u00E3o para o formato PNG palette.info.exporteps=Exportar a janela de constru\u00E7\u00E3o para o formato EPS palette.info.newmacro=Criar uma nova macro palette.info.loadmacros=Abrir um arquivo de macros palette.info.manage_macros=Exibir/Esconder o painel de macros palette.info.properties_panel=Exibir/Esconder o painel de propriedades palette.info.history_panel=Exibir/Esconder o painel da hist\u00F3ria da constru\u00E7\u00E3o palette.info.help_panel=Exibir/Esconder o painel de ajuda contextualizada macros.untitledmacro=Macro sem nome macros.untitledfolder=Arquivo sem nome macros.emptynode=-- Vazio -- macros.addfolder=Criar um diret\u00F3rio novo macros.deleteselected=Apagar macros selecionadas macros.renamemacro=Renomear macro selecionada macros.recordmacro=Gravar macros macros.initials=Objectos iniciais ? macros.pleaseselect=por favor, selecione! macros.finals=Objetos finais ? macros.cancel=Cancelar ? macros.popup.run=Executar macro macros.popup.rename=Renomear macros.popup.delete=Apagar macros.popup.addtolibrary=Acrescentar \u00E0 biblioteca macros.popup.removefromlibrary=Remover da biblioteca macros.popup.publish=Incluir na figura macros.popup.notpublish=N\u00E3o incluir na figura macros.popup.saveas=Salvar Como ... macros.popup.properties=Exibir propriedades macros.popup.duplicate=Duplicar macros.savedlog.buttonok=Salvar o arquivo de macros macros.question.delete=Voc\u00EA tem certeza que quer apagar estas macros ? rene.zirkel.objects.PointObject=Ponto rene.zirkel.objects.PrimitiveCircleObject=Circunfer\u00EAncia rene.zirkel.objects.PrimitiveLineObject=Reta rene.zirkel.objects.ExpressionObject=Express\u00E3o. rene.zirkel.objects.FixedAngleObject=\u00C2nguloFixo rene.zirkel.objects.SegmentObject=Segmento. rene.zirkel.objects.RayObject=Semi-reta rene.zirkel.objects.TwoPointLineObject=Reta rene.zirkel.objects.FunctionObject=Fun\u00E7\u00E3o rene.zirkel.objects.AreaObject=\u00C1rea mi.pal.name=Gerenciador de macros mi.name=Nome : mi.comment=Coment\u00E1rio : mi.properties=Propriedades dos objetos iniciais : mi.hideproperties=Propriedades dos objetos finais : mi.hideduplicates=Esconder objetos duplicados mi.apply=Aplicar mi.tab.type=Tipo mi.tab.name=Nome mi.tab.prompt=Entrada de Dados mi.tab.fix=Fixar ? mi.tab.ask=Perguntar ? mi.error.initial=Erro : pelo menos um par\u00E2metro \ntem que ser um objeto livre (nem fixado, nem requerido)\n\nEsta macro n\u00E3o ser\u00E1 modificada. props.help=Para ver suas propriedades, voc\u00EA deve clicar no objeto como bot\u00E3o direito do mouse.

Se voc\u00EA criar um objeto com este painel aberto, voc\u00EA poder\u00E1 mudar sua propriedades durante o processo. props.name=Nome : props.alias=Apelido : props.unit=Unidade : props.fix=Fixar : props.expl=Explica\u00E7\u00E3o : props.belongto=Camada : props.conditional=Aspecto Condicional : props.solid=S\u00F3lido : props.hidden=Escondido : props.normal=Normal : props.bold=Fino : props.thin=Pontilhado : props.black=Preto : props.green=Verde : props.blue=Azul : props.brown=Marrom : props.cyan=Turquesa : props.red=Vermelho : props.showasslider=Seletor props.error=Existe um erro de sintaxe na express\u00E3o.
Ela ser\u00E1 reinicializada. props.cartesian=Fun\u00E7\u00E3o props.parametric=Fun\u00E7\u00E3o param\u00E9trica props.functiontype=Tipo : props.killarc=Apagar arco props.arc=Arco props.release=Liberar props.bind=Prender props.setaway=Longe de props.setclose=Perto de # v1.3 : props.grid=Incremento : props.inside=No interior do objeto : props.pointsonly=Apenas para pontos : props.step=Passo : palette.grid=Malha leftpanel.macros=Painel de macros leftpanel.properties=Painel de propriedades leftpanel.history=Painel do hist\u00F3rico leftpanel.help=Painel da ajuda selectpopup.whatobject=qual objeto ? selectpopup.RightClick=Selecionar selectpopup.MoverTool=Mover selectpopup.HiderTool=Exibir/Esconder selectpopup.DeleteTool=Apagar selectpopup.RenamerTool=Renomear selectpopup.EditTool=Editar selectpopup.SetParameterTool=Objetos iniciais da macro : selectpopup.SetTargetsTool=Objetos finais da macro : palette.info.locus=Lugar geom\u00E9trico # v1.4 : menu.special.savezirset=Criar exibi\u00E7\u00E3o ... filedialog.openfolder.title=Exibi\u00E7\u00E3o: Janela de Di\u00E1logo filedialog.openfolder.approve=Escolher diret\u00F3rio filedialog.openfolder.saveicons=Salvar tamb\u00E9m os \u00EDcones reduzidos slideshow.next=pr\u00F3ximo slideshow.previous=anterior slideshow.download=Baixar arquivo slideshow.signature=Exibi\u00E7\u00E3o feita com # v1.5 : menu.language=Idiomas menu.language.de=Deutsch menu.language.en=English menu.language.fr=Fran\u00E7ais menu.language.es=Espa\u00F1ol menu.language.gl=Galego menu.language.zh_TW=Chinese (Traditional) menu.help.url3=Translate CaRMetal menu.display.smartboard=Modo smartboard # v1.6 : menu.language.no=Norsk palette.info.bi_syma=Reflex\u00E3o palette.info.bi_symc=Simetria palette.info.bi_trans=Transla\u00E7\u00E3o palette.info.bi_med=Mediatriz palette.info.bi_biss=Bissetriz palette.info.bi_circ=Circunfer\u00EAncia por 3 pontos palette.info.bi_arc=Arco circuncircular por 3 pontos palette.info.bi_t_align=Pontos colineares ? palette.info.bi_t_para=Retas paralelas ? palette.info.bi_t_perp=Retas perpendiculares ? palette.info.bi_t_equi=Ponto eq\u00FCidistante de outros dois pontos ? palette.info.bi_t_app=Pertence a uma reta ? palette.info.bi_t_conf=Pontos coincidentes ? macro.bi_syma.0=Eixo de simetria ? macro.bi_syma.1=Ponto sim\u00E9trico a qual ponto ? macro.bi_symc.0=Centro de simetria ? macro.bi_symc.1=Ponto sim\u00E9trico a qual ponto ? macro.bi_trans.0=Extremidade inicial do vetor ? macro.bi_trans.1=Extremidade final do vetor ? macro.bi_trans.2=Ponto a ser transladado ? macro.bi_med.0=Primeira extremidade do segmento ? macro.bi_med.1=Segunda extremidade do segmento ? macro.bi_biss.0=Primeiro ponto ? macro.bi_biss.1=V\u00E9rtice do \u00E2ngulo ? macro.bi_biss.2=\u00DAltimo ponto ? macro.bi_circ.0=Primeito ponto ? macro.bi_circ.1=Segundo ponto ? macro.bi_circ.2=Terceiro ponto ? macro.bi_t_para.0=Primeira reta ? macro.bi_t_para.1=Segunda reta ? macro.bi_t_equi.0=Este ponto \u00E9 eq\u00FCidistante ... macro.bi_t_equi.1=deste ponto ... macro.bi_t_equi.2=e deste ponto ? macro.bi_t_app.0=Qual ponto ? macro.bi_t_app.1=Pertence a qual reta (ou segmento) ? macro.bi_t_conf.0=Qual ponto ? macro.bi_t_conf.1=Coincide com qual ponto ? macro.bi_t_align.text0=Pontos s\u00E3o colineares macro.bi_t_align.text1=Pontos n\u00E3o s\u00E3o colineares macro.bi_t_para.text0=Objetos s\u00E3o paralelos macro.bi_t_para.text1=Objetos n\u00E3o s\u00E3o paralelos macro.bi_t_perp.text0=Objetos s\u00E3o perpendiculares macro.bi_t_perp.text1=Objetos n\u00E3o s\u00E3o perpendiculares macro.bi_t_equi.text0=Pontos s\u00E3o eq\u00FCidistantes macro.bi_t_equi.text1=Pontos n\u00E3o s\u00E3o eq\u00FCidistantes macro.bi_t_app.text0=O ponto pertence ao objeto macro.bi_t_app.text1=O ponto n\u00E3o pertence ao objeto macro.bi_t_conf.text0=Os dois pontos s\u00E3o coincidentes macro.bi_t_conf.text1=Os dois pontos n\u00E3o s\u00E3o coincidentes palette.test=Testar # v1.7 : filedialog.openfolder.appletsize=Tamanho do applet : filedialog.openfolder.actualsize=Tamanho atual filedialog.openfolder.other=Outro ... filedialog.openfolder.selected=Selecionar diret\u00F3rio : filedialog.openfolder.cancel=Cancelar menu.file.exportsvg=Exportar no formato SVG menu.language.sl=Slovenski menu.language.nl=Nederlands menu.language.pt=Portugu\u00EAs (Portugal) props.vars=Vari\u00E1veis : menu.objects.points=Pontos menu.objects.lines=Retas menu.objects.segments=Segmentos menu.objects.circles=Circunfer\u00EAncias e c\u00F4nicas menu.objects.angles=\u00C2ngulos menu.objects.tracks=Tra\u00E7os e lugares geom\u00E9tricos menu.objects.functions=Fun\u00E7\u00F5es e express\u00F5es palette.info.function_u=Fun\u00E7\u00E3o definida pelo usu\u00E1rio palette.info.function=Exibir fun\u00E7\u00E3o ou curva param\u00E9trica props.superhidden=Completamente escondido : props.showvalue=Exibir valor : props.showname=Exibir nome : props.background=Fundo : macro.bi_expression.0=Ponto \u00E2ncora ? # v1.9a : menu.help.licence=Licen\u00E7a ... licence.txt=

Este programa \u00E9 gratuito seguindo a licen\u00E7a GNU-GPL, o que significa que voc\u00EA pode redistribu\u00ED-lo e/ou modific\u00E1-lo seguindo os termos da licen\u00E7a publicada pela Free Software Foundation;
Veja :

# v2.0 : menu.special.theme=Temas menu.special.theme.gray=Metal polido menu.special.theme.brushed=Metal escovado menu.special.options=Prefer\u00EAncias ... menu.special.options.sizes=Tamanhos menu.special.options.sizes.minpointsize=Tamanho de pontos menu.special.options.sizes.minlinesize=Espessura de retas menu.special.options.sizes.arrowsize=Tamanho de setas menu.special.options.sizes.minfontsize=Tamanho da fonte menu.special.options.sizes.digits.lengths=Precis\u00E3o em comprimentos menu.special.options.sizes.digits.edit=Precis\u00E3o em express\u00F5es menu.special.options.sizes.digits.angles=Precis\u00E3o em \u00E2ngulos menu.special.options.colors=Cores menu.special.options.others=Outros menu.special.options.others.undock=Permitir a separa\u00E7\u00E3o de paletas # v2.1 : menu.file.close=Fechar janela # v2.3 : alert.toomuchwins=Existem muitas janelas abertas :
por favor, feche algumas delas antes de abrir
uma nova # v2.4 : menu.file.new3D=Nova figura 3D palette.3D=3D palette.info.bi_3Dcoords=coordenadas 3D macro.bi_3Dcoords.0=Ponto \u00E2ncora ? palette.info.bi_3Dcube=Cubo macro.bi_3Dcube.0=Centro do cubo ? palette.info.bi_3Darete=Arestas 3D macro.bi_3Darete.0=Primeiro ponto ? macro.bi_3Darete.1=Segundo ponto ? macro.bi_3Darete.2=Terceiro ponto ? macro.bi_3Darete.3=Quarto ponto ? palette.info.bi_3Dtetra=Tetraedro regular macro.bi_3Dtetra.0=Centro do tetraedro ? menu.newdoc=Novo menu.language.it=Italiano # v2.5.5 : palette.aspect.label.text=Aspecto de palette.aspect.label.point=pontos palette.aspect.label.line=retas palette.aspect.label.segment=segmentos palette.aspect.label.circle=circunfer\u00EAncias palette.aspect.label.angle=\u00E2ngulos palette.aspect.label.area=pol\u00EDgonos palette.aspect.label.bi_text=textos palette.info.bi_3Ddode=Dodecaedro regular macro.bi_3Ddode.0=Centro do dodecaedro ? # v2.7 : palette.aspect.label.pointshape=Nome & formato de pontos : palette.aspect.label.locus=Lugar geom\u00E9trico menu.edit.deleteall=Apagar tudo # v2.7.1 : java.old.message=Lamento, mas n\u00E3o \u00E9 poss\u00EDvel abrir o CaRMetal porque sua vers\u00E3o da linguagem JAVA \u00E9 muito antiga ! java.old.quit=Sair java.old.go=Baixe uma nova vers\u00E3o da linguagem JAVA palette.info.boundedpoint=Colocar um ponto em um plano+ou sobre a face de um poliedro #v2.7.2 : user.foldername=Perfil do Usu\u00E1rio #v2.8 props.fixedray=Semi-reta : props.fixedsegment=Comprimento : props.fixedangle=\u00E2ngulo : props.expl=Coment\u00E1rio : props.aspecttab=Aspecto props.numerictab=Num\u00E9rico props.conditionaltab=Condicional props.thick=Espessura : props.popup.special=Caracteres Especiais props.popup.functions=Fun\u00E7\u00F5es pr\u00E9-definidas props.popup.latex=Comandos LaTeX menu.language.pl=Polski #v2.8.1 props.fixedinwindow=Atado \u00E0 janela #v2.8.5 palette.controls=Controles props.ctrlshowvalue=Exibir valor props.ctrlsnap=Mover para as marcas props.ctrlshowticks=Exibir marcar props.ctrltickspacing=Incremento : palette.info.ctrl_edit=Editar, mover ou redimensionar controle palette.info.ctrl_chkbox=Acrescentar caixa de controle palette.info.ctrl_popup=Acrescentar menu popup palette.info.ctrl_slider=Acrescentar seletor #v2.8.6 props.trackdmin=N\u00FAmero de passos : opendialog.preview=Visualizar : pngdialog.options=Op\u00E7\u00F5es : pngdialog.scale=Escalar : pngdialog.originsize=Tamanho original : pngdialog.scaledsize=Tamanho redimensionado : #v2.8.7 canvas.3D.floor=Ch\u00E3o canvas.3D.system=Sistema de coordenadas canvas.3D.rightclic=Use o bot\u00E3o direito do mouse para girar o sistema de coordenadas #v2.8.8 palette.info.equationxy=Curva definida por f(x,y)=0 props.equationxy=Equa\u00E7\u00E3o : props.equationxychooser=Precis\u00E3o : palette.function=Fun\u00E7\u00F5es & lugares geom\u00E9tricos #v2.8.9 menu.edit.deletealltracks=Limpar tra\u00E7os menu.edit.deactivatealltracks=Desativar tra\u00E7os props.tracks=Ativar tra\u00E7o menu.edit.zoom=Zoom ou mover #v2.9.0 menu.windows=Janela #v2.9.1 contexthelp.seealso=Veja tamb\u00E9m :./src/eric/docs/JZirkelProperties_ar_TN.properties0000644000175000017500000011725411302427451021253 0ustar yvesyves# Sample ResourceBundle properties file menu.file=\u0645\u0644\u0641 menu.file.new=\u0634\u0643\u0644 \u062C\u062F\u064A\u062F menu.file.load=\u0641\u062A\u062D... menu.file.save=\u062D\u0641\u0638 menu.file.saveas=\u062D\u0641\u0638 \u0628\u0625\u0633\u0645 menu.file.exportpng=PNG \u062A\u0635\u062F\u064A\u0631 \u0628\u0635\u064A\u063A\u0629 menu.file.exporteps=EPS \u062A\u0635\u062F\u064A\u0631 \u0628\u0635\u064A\u063A\u0629 menu.file.quit=\u062E\u0631\u0648\u062C menu.edit=\u062A\u062D\u0631\u064A\u0631 menu.edit.copy=\u0646\u0633\u062E menu.edit.move=\u062D\u0631\u0643 \u0639\u0646\u0635\u0631 menu.edit.rename=\u0625\u0639\u0627\u062F\u0629 \u062A\u0633\u0645\u064A\u0629 menu.edit.edit=\u062A\u063A\u064A\u064A\u0631 menu.edit.hide=\u0625\u062E\u0641\u0627\u0621 menu.edit.delete=\u062D\u0630\u0641 menu.display=\u0639\u0631\u0636 menu.display.hidden=\u0625\u0638\u0647\u0627\u0631\ \u0625\u062E\u0641\u0627\u0621 \u0627\u0644\u0639\u0646\u0627\u0635\u0631\u0627\u0644\u063A\u064A\u0631 \u0645\u0631\u0626\u064A\u0629 menu.display.grid=\u0625\u0638\u0647\u0627\u0631\ \u0625\u062E\u0641\u0627\u0621 \u0627\u0644\u0634\u0628\u0643\u0629 menu.display.finegrid=\u0627\u0644\u0645\u062D\u0627\u0648\u0631 \u0641\u0642\u0637 menu.display.leftsnap=\u0634\u0628\u0643\u0629 \u0645\u063A\u0646\u0627\u0637\u064A\u0633\u064A\u0629 menu.display.manage_macros=\u0644\u0648\u062D\u0629 \u062E\u0627\u0635\u064A\u0627\u062A \u0627\u0644\u0623\u062F\u0648\u0627\u062A \u0627\u0644\u062C\u062F\u064A\u062F\u0629 menu.display.history_panel=\u0645\u0631\u0627\u062D\u0644 \u0627\u0644\u0628\u0646\u0627\u0621 menu.display.help_panel=\u0644\u0648\u062D\u0629 \u0627\u0644\u0645\u0633\u0627\u0639\u062F\u0629 menu.display.properties_panel=\u0644\u0648\u062D\u0629 \u062E\u0627\u0635\u064A\u0627\u062A \u0627\u0644\u0639\u0646\u0627\u0635\u0631 menu.display.small=\u0623\u064A\u0642\u0648\u0646\u0627\u062A \u0635\u063A\u064A\u0631\u0629 menu.display.medium=\u0623\u064A\u0642\u0648\u0646\u0627\u062A \u0645\u062A\u0648\u0633\u0637\u0629 menu.display.large=\u0623\u064A\u0642\u0648\u0646\u0627\u062A \u0643\u0628\u064A\u0631\u0629 menu.display.restrictedpalette=\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0644\u0648\u062D\u0629 \u0630\u0627\u062A \u0627\u0644\u0623\u062F\u0648\u0627\u062A \u0627\u0644\u0645\u062E\u062A\u0627\u0631\u0629 menu.display.restrictedpaletteedit= \u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u0644\u0648\u062D\u0629 \u0630\u0627\u062A \u0627\u0644\u0623\u062F\u0648\u0627\u062A \u0627\u0644\u0645\u062E\u062A\u0627\u0631\u0629 menu.display.restrictmessage=
\u0647\u0630\u0647 \u0627\u0644\u0645\u064A\u0632\u0629 \u062A\u0645\u0643\u0646\u0643 \u0645\u0646 \u0631\u0624\u064A\u0629  \u0627\u0644\u0644\u0648\u062D\u0629 \u0630\u0627\u062A \u0627\u0644\u0623\u062F\u0648\u0627\u062A \u0627\u0644\u0645\u062E\u062A\u0627\u0631\u0629
\u0644\u0627 \u062A\u062E\u0635  \u0625\u0644\u0627 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u062D\u0627\u0644\u064A
\u0639\u0646\u062F \u0627\u0644\u062D\u0641\u0638\u060C \u064A\u0645\u0643\u0646\u0643 \u0625\u062E\u062A\u064A\u0627\u0631"\u062D\u0641\u0638 \u0627\u0627\u0644\u0634\u0643\u0644 \u0623\u064A\u0636\u0627 \u0628\u0623\u062F\u0648\u0627\u062A \u0645\u062E\u062A\u0627\u0631\u0629"
\u0645\u0644\u0641\u0627\u0646 \u0633\u064A\u0642\u0639 \u0625\u0646\u0634\u0627\u0626\u0647\u0645\u0627 : \u0627\u0644\u0623\u0648\u0651\u0644 \u0628\u0635\u064A\u063A\u0629 (zir.)\u0633\u064A\u0641\u062A\u062D \u0641\u064A \u0634\u0643\u0644 \u0639\u0627\u062F\u064A
\u0648 \u0627\u0644\u062B\u0627\u0646\u064A \u0628\u0635\u064A\u063A\u0629(.r.zir) \u0633\u064A\u0641\u062A\u062D \u0628\u0623\u062F\u0648\u0627\u062A \u0645\u062E\u062A\u0627\u0631\u0629
menu.macros=\u0627\u0644\u0623\u062F\u0648\u0627\u062A \u0627\u0644\u062C\u062F\u064A\u062F\u0629 menu.special=\u062E\u0627\u0635 menu.special.newmacro=\u0625\u0646\u0634\u0627\u0621 \u0623\u062F\u0627\u0629 \u062C\u062F\u064A\u062F\u0629 menu.special.loadmacros=\u0641\u062A\u062D \u0623\u062F\u0627\u0629 \u062C\u062F\u064A\u062F\u0629... menu.special.definejob=\u062A\u062D\u062F\u064A\u062F \u062A\u0645\u0631\u064A\u0646 menu.special.loadjob=\u0641\u062A\u062D \u062A\u0645\u0631\u064A\u0646... menu.special.jobcomment=\u062D\u0631\u0631 \u0646\u0635 \u0627\u0644\u062A\u0645\u0631\u064A\u0646 menu.special.testjob=\u0627\u062E\u062A\u0628\u0631 \u0647\u0630\u0627 \u0627\u0644\u062A\u0645\u0631\u064A\u0646 menu.special.savejob=\u062D\u0641\u0638 \u0643\u062A\u0645\u0631\u064A\u0646 menu.special.export=\u0625\u0646\u0634\u0627\u0621 \u0635\u0641\u062D\u0629 \u0648\u0627\u0628 \u0648 \u0631\u0624\u064A\u062A\u0647\u0627 \u0641\u064A \u0627\u0644\u0645\u062A\u0635\u0641\u062D menu.special.exporttemplate=\u062A\u0635\u062F\u064A\u0631 \u0644\u0644\u0648\u0627\u0628 \u0645\u0639 \u0646\u0645\u0627\u0630\u062C menu.help=\u0645\u0633\u0627\u0639\u062F\u0629 menu.help.about=CaRMetal\u062A\u0639\u0644\u064A\u0645\u0627\u062A \u0639\u0646 menu.help.info=\u0645\u0633\u0627\u0639\u062F\u0629 \u0646\u0635\u064A\u0629 menu.help.url0=CaRMetal \u0645\u0648\u0642\u0639 menu.help.url1=CARzine \u0645\u0648\u0642\u0639 menu.help.url2=C.a.R.\u0627\u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u0631\u0633\u0645\u064A \u0644\u0640 filedialog.options=\u062E\u064A\u0627\u0631\u0627\u062A \u0627\u0644\u062D\u0641\u0638 filedialog.saveas=\u062D\u0641\u0638 \u0627\u0644\u0634\u0643\u0644 filedialog.alsorestricted=\u062D\u0641\u0638 \u0623\u064A\u0636\u0627 \u0627\u0644\u0634\u0643\u0644 \u0628\u0623\u062F\u0648\u0627\u062A \u0645\u062E\u062A\u0627\u0631\u0629 filedialog.restrictedmessage=

\u062D\u0627\u0644\u064A\u0627\u060C \u0627\u0644\u0639\u0645\u0644 \u0641\u064A \u062C\u0644\u0633\u0629 \u062E\u0627\u0635\u0629
\u0633\u064A\u062D\u0641\u0638 \u0627\u0644\u0634\u0643\u0644 \u0628\u0627\u0644\u0623\u062F\u0648\u0627\u062A \u0627\u0644\u0645\u062E\u062A\u0627\u0631\u0629

filedialog.filefilter=\u0645\u0644\u0641 CaR(.zir) filedialog.compressedfilefilter=(.zirz) \u0645\u0636\u063A\u0648\u0637 CaR \u0645\u0644\u0641 filedialog.macrofilefilter=(.mcr) \u0645\u0644\u0641 \u0627\u0644\u0623\u062F\u0648\u0627\u062A \u0627\u0644\u062C\u062F\u064A\u062F\u0629 filedialog.savemessage1=\n:\u0627\u0644\u0645\u0644\u0641 filedialog.savemessage2=\n \u0645\u0648\u062C\u0648\u062F. \u0647\u0644 \u062A\u0631\u064A\u062F \u062A\u0639\u0648\u064A\u0636\u0647\u061F palette.file=\u0645\u0644\u0641 palette.edit=\u062A\u062D\u0631\u064A\u0631 palette.construction=\u0628\u0646\u0627\u0621 palette.aspect=\u0647\u064A\u0626\u0629 \u0648 \u0644\u0648\u0646 palette.history=\u0627\u0644\u0645\u0631\u0627\u062D\u0644 \u0627\u0644\u0645\u0646\u062C\u0632\u0629 palette.sizes=\u0623\u062D\u062C\u0627\u0645 palette.sizes.point=\u0646\u0642\u0627\u0637 palette.sizes.line=\u062E\u0637\u0648\u0637 palette.sizes.arrow=\u0623\u0633\u0647\u0645 palette.sizes.font=\u0637\u0627\u0642\u0645 \u0627\u0644\u062D\u0631\u0648\u0641 palette.prec=\u0627\u0644\u062F\u0642\u0629 \u0627\u0644\u0631\u0642\u0645\u064A\u0629 palette.prec.lengths=\u0623\u0637\u0648\u0627\u0644 palette.prec.edit=\u0639\u0628\u0627\u0631\u0627\u062A palette.prec.angles=\u0632\u0648\u0627\u064A\u0627 palette.colors=\u0644\u0648\u0646 \u0648 \u0635\u0648\u0631\u0629 palette.colors.saturated1=\u0623\u0644\u0648\u0627\u0646 \u0645\u062D\u062A\u0642\u0646\u0629 palette.colors.desaturated1=\u0623\u0644\u0648\u0627\u0646 \u063A\u064A\u0631 \u0645\u062D\u062A\u0642\u0646\u0629 palette.colors.saturated2=\u0623\u0644\u0648\u0627\u0646 \u0645\u062D\u062A\u0642\u0646\u0629 2 palette.colors.desaturated2=\u0623\u0644\u0648\u0627\u0646 \u063A\u064A\u0631 \u0645\u062D\u062A\u0642\u0646\u0629 2 palette.colors.constants=\u0623\u0644\u0648\u0627\u0646 \u062E\u0627\u0635\u0629 \u0628\u0627\u0644\u0648\u0627\u0628 palette.image.fileerror=

\u064A\u062C\u0628 \u0639\u0644\u064A\u0643 \u062D\u0641\u0638 \u0647\u0630\u0627 \u0627\u0627\u0644\u0634\u0643\u0644 \u0642\u0628\u0644 \u0627\u0633\u062A\u0639\u0645\u0627\u0644 \u0647\u0630\u0647 \u0627\u0644\u0645\u064A\u0632\u0629
\u0648 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0627\u0644\u0635\u0648\u0631\u0629 \u0627\u0644\u062A\u064A \u0627\u062E\u062A\u0631\u062A\u0647\u0627 \u0645\u0648\u062C\u0648\u062F\u0629
\u0641\u064A \u0646\u0641\u0633 \u0645\u0643\u0627\u0646  \u0627\u0644\u0634\u0643\u0644

palette.info.vector=\u0645\u062A\u0651\u062C\u0647 palette.info.image3=\u0625\u062F\u0631\u0627\u062C \u0635\u0648\u0631\u0629+\u0628\u0640 2 \u0623\u0648 3 \u0646\u0642\u0627\u0637 palette.info.background=\u0627\u062E\u062A\u064A\u0627\u0631\ \u062D\u0630\u0641 \u0635\u0648\u0631\u0629 \u062E\u0644\u0641\u064A\u0629 palette.info.imcenter=\u0648\u0633\u0637 \u0627\u0644\u0635\u0648\u0631\u0629 \u0627\u0644\u062E\u0644\u0641\u064A\u0629 palette.info.imstretch=\u062A\u0645\u062F\u064A\u062F \u0627\u0644\u0635\u0648\u0631\u0629 \u0627\u0644\u062E\u0644\u0641\u064A\u0629+\u0644\u062A\u0639\u0628\u0626\u0629 + \u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u0628\u0646\u0627\u0621 palette.info.imtile=\u0643\u0631\u0631 \u0627\u0644\u0635\u0648\u0631\u0629 \u0627\u0644\u062E\u0644\u0641\u064A\u0629 palette.info.copy=\u0627\u0646\u0633\u062E \u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u0628\u0646\u0627\u0621+\u0641\u064A \u0627\u0644\u062D\u0627\u0641\u0638\u0629 palette.info.exportpng=PNG \u062A\u0635\u062F\u064A\u0631 \u0627\u0644\u0628\u0646\u0627\u0621+\u0641\u064A \u0627\u0644\u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u062D\u0627\u0644\u064A\u0629 \u0628\u0635\u064A\u063A\u0629 palette.info.exporteps=EPS \u062A\u0635\u062F\u064A\u0631 \u0627\u0644\u0628\u0646\u0627\u0621+\u0641\u064A \u0627\u0644\u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u062D\u0627\u0644\u064A\u0629 \u0628\u0635\u064A\u063A\u0629 palette.info.newmacro=\u0625\u0646\u0634\u0627\u0621 \u0623\u062F\u0627\u0629 \u062C\u062F\u064A\u062F\u0629 palette.info.loadmacros=\u0641\u062A\u062D \u0645\u0644\u0641 \u0623\u062F\u0627\u0629 \u062C\u062F\u064A\u062F\u0629 palette.info.manage_macros=\u0625\u0638\u0647\u0627\u0631\\u0625\u062E\u0641\u0627\u0621 \u0644\u0648\u062D\u0629+ \u0627\u0644\u062A\u0635\u0631\u0641 \u0641\u064A \u0627\u0644\u0623\u062F\u0648\u0627\u062A \u0627\u0644\u062C\u062F\u064A\u062F\u0629 palette.info.properties_panel=\u0625\u0638\u0647\u0627\u0631\\u0625\u062E\u0641\u0627\u0621 \u0644\u0648\u062D\u0629+\u062E\u0627\u0635\u064A\u0627\u062A \u0627\u0644\u0639\u0646\u0627\u0635\u0631 palette.info.history_panel=\u0625\u0638\u0647\u0627\u0631\\u0625\u062E\u0641\u0627\u0621 \u0644\u0648\u062D\u0629+\u0645\u0631\u0627\u062D\u0644 \u0627\u0644\u0628\u0646\u0627\u0621 palette.info.help_panel=\u0625\u0638\u0647\u0627\u0631\\u0625\u062E\u0641\u0627\u0621 \u0644\u0648\u062D\u0629+\u0627\u0644\u0645\u0633\u0627\u0639\u062F\u0629 \u0627\u0644\u0646\u0635\u064A\u0629 macros.untitledmacro=\u0623\u062F\u0648\u0627\u062A \u062C\u062F\u064A\u062F\u0629 \u0628\u062F\u0648\u0646 \u0639\u0646\u0648\u0627\u0646 macros.untitledfolder= \u0645\u062C\u0644\u062F \u0628\u062F\u0648\u0646 \u0639\u0646\u0648\u0627\u0646 macros.emptynode=\u0641\u0627\u0631\u063A macros.addfolder=\u0623\u0636\u0641 \u0645\u062C\u0644\u062F \u062C\u062F\u064A\u062F macros.deleteselected=\u062D\u0630\u0641 \u0627\u0644\u0623\u062F\u0648\u0627\u062A \u0627\u0644\u062C\u062F\u064A\u062F\u0629 \u0627\u0644\u0645\u0646\u062A\u0642\u0627\u062A macros.renamemacro=\u0625\u0639\u0627\u062F\u0629 \u062A\u0633\u0645\u064A\u0629 \u0627\u0644\u0623\u062F\u0627\u0629 \u0627\u0644\u062C\u062F\u064A\u062F\u0629 \u0627\u0644\u0645\u0646\u062A\u0642\u0627\u0629 macros.recordmacro= \u062D\u0641\u0638 \u0623\u062F\u0627\u0629 \u062C\u062F\u064A\u062F\u0629 macros.initials=\u0639\u0646\u0627\u0635\u0631 \u0625\u0628\u062A\u062F\u0627\u0626\u064A\u0629 \u061F macros.pleaseselect=!\u0627\u0644\u0631\u062C\u0627\u0621 \u0627\u0646\u062A\u0642\u064A macros.finals=\u0639\u0646\u0627\u0635\u0631 \u0646\u0647\u0627\u0626\u064A\u0629\u061F macros.cancel=\u0625\u0644\u063A\u0627\u0621\u061F macros.popup.run=\u0627\u0633\u062A\u0639\u0645\u0644 \u0627\u0644\u0623\u062F\u0627\u0629 \u0627\u0644\u062C\u062F\u064A\u062F\u0629 macros.popup.rename=\u0625\u0639\u0627\u062F\u0629 \u062A\u0633\u0645\u064A\u0629 macros.popup.delete=\u062D\u0630\u0641... macros.popup.addtolibrary=\u0625\u0636\u0627\u0641\u0629 \u0625\u0644\u0649 \u0627\u0644\u0645\u0643\u062A\u0628\u0629 macros.popup.removefromlibrary=\u0633\u062D\u0628 \u0645\u0646 \u0627\u0644\u0645\u0643\u062A\u0628\u0629 macros.popup.publish=\u0625\u062F\u0631\u0627\u062C \u0641\u064A \u0627\u0644\u0634\u0643\u0644 macros.popup.notpublish=\u0639\u062F\u0645 \u0625\u062F\u0631\u0627\u062C\u0647\u0627 \u0641\u064A \u0627\u0644\u0634\u0643\u0644 macros.popup.saveas=\u062D\u0641\u0638 \u0628\u0625\u0633\u0645... macros.popup.properties=\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u062E\u0627\u0635\u0628\u0627\u062A macros.popup.duplicate=\u0625\u0639\u0627\u062F\u0629 \u0627\u0633\u062A\u0639\u0645\u0627\u0644 macros.savedlog.buttonok=\u062D\u0641\u0638 \u0645\u0644\u0641 \u0627\u0644\u0623\u062F\u0627\u0629 (\u0627\u0644\u0623\u062F\u0648\u0627\u062A) \u0627\u0644\u062C\u062F\u064A\u062F\u0629 macros.question.delete=\u0647\u0644 \u0623\u0646\u062A \u0645\u062A\u0623\u0643\u062F \u0645\u0646 \u062D\u0630\u0641 \u0647\u0630\u0647 \u0627\u0644\u0623\u062F\u0648\u0627\u062A \u0627\u0644\u062C\u062F\u064A\u062F\u0629\u061F rene.zirkel.objects.PointObject=\u0646\u0642\u0637\u0629 rene.zirkel.objects.PrimitiveCircleObject=\u062F\u0627\u0626\u0631\u0629 rene.zirkel.objects.PrimitiveLineObject=\u0645\u0633\u062A\u0642\u064A\u0645 rene.zirkel.objects.ExpressionObject=\u0646\u0635 rene.zirkel.objects.FixedAngleObject=\u0632\u0627\u0648\u064A\u0629 \u062B\u0627\u0628\u062A\u0629 rene.zirkel.objects.SegmentObject=\u0642\u0637\u0639\u0629 \u0645\u0633\u062A\u0642\u064A\u0645 rene.zirkel.objects.RayObject=\u0634\u0639\u0627\u0639 rene.zirkel.objects.TwoPointLineObject=\u062E\u0637 rene.zirkel.objects.FunctionObject=\u062F\u0627\u0644\u0629 rene.zirkel.objects.AreaObject=\u0645\u0633\u0627\u062D\u0629 mi.pal.name=\u0644\u0648\u062D\u0629 \u062E\u0627\u0635\u064A\u0627\u062A \u0627\u0644\u0623\u062F\u0648\u0627\u062A \u0627\u0644\u062C\u062F\u064A\u062F\u0629 mi.name=\u0623\u0633\u0645 mi.comment=\u062A\u0639\u0644\u064A\u0642 : mi.properties=\u062E\u0627\u0635\u064A\u0627\u062A \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0625\u0628\u062A\u062F\u0627\u0626\u064A\u0629: mi.hideproperties=\u062E\u0627\u0635\u064A\u0627\u062A \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0646\u0647\u0627\u0626\u064A\u0629: mi.hideduplicates=\u0625\u062E\u0641\u0627\u0621 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0645\u062D\u062A\u0645\u0644\u0629 \u0627\u0644\u062A\u0643\u0631\u0627\u0631 mi.apply=\u0637\u0628\u0642 mi.tab.type=\u0646\u0648\u0639 mi.tab.name=\u0623\u0633\u0645 mi.tab.prompt=\u062F\u0639\u0648\u0629 mi.tab.fix=\u062B\u0627\u0628\u062A\u061F mi.tab.ask=\u0627\u0633\u0623\u0644\u061F mi.error.initial=\u062E\u0637\u0623: \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644 \u0639\u0646\u0635\u0631 \u0627\u0628\u062A\u062F\u0627\u0626\u064A\n \u064A\u0643\u0648\u0646 \u062D\u0631\u0651\u0627(\u063A\u064A\u0631 \u062B\u0627\u0628\u062A \u060C\u063A\u064A\u0631 \u0645\u0637\u0644\u0648\u0628)\n\n \u0644\u0627 \u062A\u063A\u064A\u064A\u0631 \u064A\u062D\u062F\u062B \u0639\u0644\u0649\n \u0647\u0630\u0647 \u0627\u0644\u0623\u062F\u0627\u0629 \u0627\u0644\u062C\u062F\u064A\u062F\u0629 props.help= \u0644\u0631\u0624\u064A\u0629 \u062E\u0627\u0635\u064A\u0627\u062A \u0627\u0644\u0639\u0646\u0635\u0631\u060C \u0623\u0646\u0642\u0631 \u0639\u0644\u064A\u0647 \u0628\u0627\u0644\u0632\u0631 \u0627\u0644\u0623\u064A\u0645\u0646 \u0644\u0644\u0641\u0623\u0631\u0629
\u0625\u0630\u0627 \u0623\u0646\u0634\u0623\u062A \u0639\u0646\u0635\u0631\u062C\u062F\u064A\u062F \u0628\u0647 \u0646\u0642\u0627\u0637 \u060C \u064A\u0645\u0643\u0646\u0643 \u0631\u0624\u064A\u062A\u0647 \u0648\u062A\u062D\u0631\u064A\u0631 \u062E\u0627\u0635\u064A\u0627\u062A \u0647\u0630\u0647 \u0627\u0644\u0646\u0642\u0627\u0637 \u062E\u0644\u0627\u0644 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 props.name=:\u0627\u0633\u0645 props.alias=:\u0627\u0633\u0645 \u0645\u0633\u062A\u0639\u0627\u0631 props.unit=:\u0648\u062D\u062F\u0629 props.fix=:\u062B\u0627\u0628\u062A props.expl=:\u062A\u0641\u0633\u064A\u0631 props.belongto=:\u0637\u0628\u0642\u0629 props.conditional=:\u0647\u064A\u0626\u0629 \u0645\u0634\u0631\u0648\u0637\u0629 props.solid=:\u0643\u062B\u064A\u0641 props.hidden=:\u0645\u062E\u0641\u064A props.normal=:\u0639\u0627\u062F\u064A props.bold=:\u0633\u0645\u064A\u0643 props.thin=:\u0645\u0646\u0642\u0637 props.black=:\u0623\u0633\u0648\u062F props.green=:\u0623\u062E\u0636\u0631 props.blue=:\u0623\u0632\u0631\u0642 props.brown=:\u0628\u0646\u064A props.cyan=:\u0633\u0645\u0627\u0648\u064A props.red=:\u0623\u062D\u0645\u0631 props.showasslider=\u0632\u0631 \u0627\u0644\u0645\u062A\u063A\u064A\u0631\u0627\u062A props.error=

\u0647\u0646\u0627\u0643 \u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062A\u0631\u0643\u064A\u0628\u0629 \u0627\u0644\u0639\u0644\u0645\u064A\u0629.
\u0633\u062A\u062A\u0645 \u0645\u0639\u0627\u0644\u062C\u062A\u0647\u0627.

props.cartesian=\u062F\u0627\u0644\u0629 \u062F\u064A\u0643\u0627\u0631\u062A\u064A\u0629 props.parametric= \u062F\u0627\u0644\u0629 \u0648\u0633\u064A\u0637\u064A\u0629 props.functiontype=:\u0646\u0648\u0639 props.killarc=\u062D\u0630\u0641 \u0642\u0648\u0633 props.arc=\u0642\u0648\u0633 props.release=\u0641\u0635\u0644 props.bind=\u0631\u0628\u0637 props.setaway=\u0628\u0639\u064A\u062F \u0639\u0646 props.setclose=\u0642\u0631\u064A\u0628 \u0645\u0646 # v1.3 : props.grid=:\u0632\u064A\u0627\u062F\u0629 props.inside=:\u062F\u0627\u062E\u0644 \u0627\u0644\u0639\u0646\u0635\u0631 props.pointsonly=:\u0628\u0627\u0644\u0646\u0642\u0627\u0637 \u0641\u0642\u0637 props.step=:\u062E\u0637\u0648\u0629 palette.grid=\u0647\u064A\u0626\u0629 \u0627\u0644\u0634\u0628\u0643\u0629 leftpanel.macros=\u0644\u0648\u062D\u0629 \u0627\u0644\u062A\u0635\u0631\u0641 \u0641\u064A \u0627\u0644\u0623\u062F\u0648\u0627\u062A \u0627\u0644\u062C\u062F\u064A\u062F\u0629 leftpanel.properties=\u0644\u0648\u062D\u0629 \u062E\u0627\u0635\u064A\u0627\u062A \u0627\u0644\u0639\u0646\u0627\u0635\u0631 leftpanel.history=:\u0644\u0648\u062D\u0629 \u0627\u0644\u0645\u0631\u0627\u062D\u0644 \u0627\u0644\u0645\u0646\u062C\u0632\u0629 leftpanel.help=:\u0644\u0648\u062D\u0629 \u0627\u0644\u0645\u0633\u0627\u0639\u062F\u0629 selectpopup.whatobject= \u0623\u064A \u0639\u0646\u0635\u0631\u061F selectpopup.RightClick=:\u0627\u0646\u062A\u0642\u064A selectpopup.MoverTool=\u062D\u0631\u0643 selectpopup.HiderTool=\u0627\u062E\u0641\u0627\u0621\\u0625\u0638\u0647\u0627\u0631 selectpopup.DeleteTool= \u062D\u0630\u0641 selectpopup.RenamerTool=\u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u062A\u0633\u0645\u064A\u0629 selectpopup.EditTool=\u062A\u062D\u0631\u064A\u0631 selectpopup.SetParameterTool=\u0627\u0644\u0623\u062F\u0648\u0627\u062A \u0627\u0644\u062C\u062F\u064A\u062F\u0629 \u0627\u0644\u0627\u0628\u062A\u062F\u0627\u0626\u064A\u0629 selectpopup.SetTargetsTool=\u0627\u0644\u0623\u062F\u0648\u0627\u062A \u0627\u0644\u062C\u062F\u064A\u062F\u0629 \u0627\u0644\u0646\u0647\u0627\u0626\u064A\u0629 palette.info.locus=\u0645\u062D\u0644 \u0647\u0646\u062F\u0633\u064A \u0644\u0644\u0646\u0642\u0637\u0629+ \u0645\u062D\u0644 \u0647\u0646\u062F\u0633\u064A \u0644\u0644\u0645\u0633\u062A\u0642\u064A\u0645\u0627\u062A # v1.4 : menu.special.savezirset=: \u0625\u0646\u0634\u0627\u0621 \u0639\u0631\u0636 \u0627\u0644\u0634\u0631\u0627\u0626\u062D filedialog.openfolder.title=\u0641\u064A \u0645\u0631\u0628\u0639 \u0627\u0644\u062D\u0648\u0627\u0631 \u0627\u062E\u062A\u064A\u0627\u0631 \u0645\u062C\u0644\u062F \u0639\u0631\u0636 \u0627\u0644\u0634\u0631\u0627\u0626\u062D filedialog.openfolder.approve=\u0627\u0646\u062A\u0642\u064A \u0645\u062C\u0644\u062F \u0639\u0631\u0636 \u0627\u0644\u0634\u0631\u0627\u0626\u062D filedialog.openfolder.saveicons\u062D\u0641\u0638 \u0623\u064A\u0636\u0627 \u0644\u0623\u062F\u0648\u0627\u062A \u0627\u0644\u0645\u062E\u062A\u0627\u0631\u0629 slideshow.next=\u0627\u0644\u062A\u0627\u0644\u064A slideshow.previous=\u0627\u0644\u0633\u0627\u0628\u0642 slideshow.download=\u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0644\u0641 slideshow.signature=:\u0639\u0631\u0636 \u0627\u0644\u0634\u0631\u0627\u0626\u062D \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645\u0629 # v1.5 : menu.language= \u0627\u0644\u0644\u063A\u0627\u062A : menu.help.url3=CaRMetal\u062A\u0631\u062C\u0645 menu.display.smartboard=\u0627\u0644\u0633\u0628\u0648\u0631\u0629 \u0627\u0644\u062A\u0641\u0627\u0639\u0644\u064A\u0629 \u0627\u0644\u0631\u0642\u0645\u064A\u0629 # v1.6 : palette.info.bi_syma=\u0627\u0644\u062A\u0646\u0627\u0638\u0631 \u0627\u0644\u0645\u062D\u0648\u0631\u064A palette.info.bi_symc=\u0627\u0644\u062A\u0646\u0627\u0638\u0631 \u0627\u0644\u0645\u0631\u0643\u0632\u064A palette.info.bi_trans=\u0627\u0646\u0633\u062D\u0627\u0628 palette.info.bi_med=\u0627\u0644\u0645\u0648\u0633\u0637 \u0627\u0644\u0639\u0645\u0648\u062F\u064A palette.info.bi_biss=\u0645\u0646\u0635\u0641 \u0627\u0644\u0632\u0627\u0648\u064A\u0629 palette.info.bi_circ=\u0627\u0644\u062F\u0627\u0626\u0631\u0629 \u0627\u0644\u0645\u062D\u064A\u0637\u0629 palette.info.bi_arc=\u0642\u0648\u0633 \u064A\u0645\u0631 \u0645\u0646 \u062B\u0644\u0627\u062B \u0646\u0642\u0627\u0637 palette.info.bi_t_align=\u0646\u0642\u0627\u0637 \u0639\u0644\u0649 \u0627\u0633\u062A\u0642\u0627\u0645\u0629 \u0648\u0627\u062D\u062F\u0629 \u061F palette.info.bi_t_para=\u0645\u0633\u062A\u0642\u064A\u0645\u0627\u0646 \u0645\u062A\u0648\u0627\u0632\u064A\u0627\u0646 \u061F palette.info.bi_t_perp=\u0645\u0633\u062A\u0642\u064A\u0645\u0627\u0646 \u0645\u062A\u0639\u0627\u0645\u062F\u0627\u0646 \u061F palette.info.bi_t_equi=\u0627\u0644\u0646\u0642\u0637\u0629 \u0645\u062A\u0642\u0627\u064A\u0633\u0629 \u0627\u0644\u0628\u0639\u062F \u0639\u0646 \u0627\u0644\u0646\u0642\u0637\u062A\u064A\u0646 \u0627\u0644\u0622\u062E\u0631\u062A\u064A\u0646\u061F palette.info.bi_t_app=\u062A\u0646\u062A\u0645\u064A \u0625\u0644\u0649 \u0645\u0633\u062A\u0642\u064A\u0645 \u061F palette.info.bi_t_conf=\u0627\u0644\u0646\u0642\u0627\u0637 \u0645\u062A\u0637\u0627\u0628\u0642\u0629\u061F macro.bi_syma.0=\u0645\u062D\u0648\u0631 \u0627\u0644\u062A\u0646\u0627\u0638\u0631\u061F macro.bi_syma.1=\u062A\u0646\u0627\u0638\u0631 \u0645\u062D\u0648\u0631\u064A \u0644\u0623\u064A \u0646\u0642\u0637\u0629\u061F macro.bi_symc.0=\u0645\u0631\u0643\u0632 \u0627\u0644\u062A\u0646\u0627\u0638\u0631\u061F macro.bi_symc.1=\u062A\u0646\u0627\u0638\u0631 \u0645\u0631\u0643\u0632\u064A \u0644\u0623\u064A \u0646\u0642\u0637\u0629\u061F macro.bi_trans.0=\u062D\u062F\u062F \u0623\u0635\u0644 \u0627\u0644\u0645\u062A\u0651\u062C\u0647 \u061F macro.bi_trans.1=\u062D\u062F\u062F \u0637\u0631\u0641 \u0627\u0644\u0645\u062A\u062C\u0651\u0647\u061F macro.bi_trans.2=\u0635\u0648\u0631\u0629 \u0644\u0623\u064A \u0646\u0642\u0637\u0629 \u061F macro.bi_med.0=\u062D\u062F\u062F \u0637\u0631\u0641 \u0627\u0644\u0623\u0648\u0651\u0644 \u0644\u0642\u0637\u0639\u0629 \u0627\u0644\u0645\u0633\u062A\u0642\u064A\u0645\u061F macro.bi_med.1=\u062D\u062F\u062F \u0637\u0631\u0641 \u0627\u0644\u062B\u0627\u0646\u064A \u0644\u0642\u0637\u0639\u0629 \u0627\u0644\u0645\u0633\u062A\u0642\u064A\u0645\u061F macro.bi_biss.0=\u062D\u062F\u062F \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 \u061F macro.bi_biss.1=\u062D\u062F\u062F \u0631\u0623\u0633 \u0627\u0644\u0632\u0627\u0648\u064A\u0629 \u061F macro.bi_biss.2=\u062D\u062F\u062F \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u062B\u0627\u0644\u062B\u0629 \u061F macro.bi_circ.0=\u062D\u062F\u062F \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 \u061F macro.bi_circ.1=\u062D\u062F\u062F \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u062B\u0627\u0646\u064A\u0629 \u061F macro.bi_circ.2=\u062D\u062F\u062F \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u062B\u0627\u0644\u062B\u0629 \u061F macro.bi_t_para.0=\u062D\u062F\u062F \u0627\u0644\u0645\u0633\u062A\u0642\u064A\u0645 (\u0623\u0648 \u0642\u0637\u0639\u0629 \u0645\u0633\u062A\u0642\u064A\u0645)\u0627\u0644\u0623\u0648\u0644 \u061F macro.bi_t_para.1=\u062D\u062F\u062F \u0627\u0644\u0645\u0633\u062A\u0642\u064A\u0645 (\u0623\u0648 \u0642\u0637\u0639\u0629 \u0645\u0633\u062A\u0642\u064A\u0645)\u0627\u0644\u062B\u0627\u0646\u064A \u061F macro.bi_t_equi.0=...\u0647\u0644 \u0647\u0630\u0647 \u0627\u0644\u0646\u0642\u0637\u0629 \u0645\u062A\u0642\u0627\u064A\u0633\u0629 \u0627\u0644\u0628\u0639\u062F macro.bi_t_equi.1=...\u0645\u0646 \u0647\u0630\u0647 \u0627\u0644\u0646\u0642\u0637\u0629 macro.bi_t_equi.2=\u0648 \u0647\u0630\u0647 \u0627\u0644\u0646\u0642\u0637\u0629\u061F macro.bi_t_app.0=\u0623\u064A\u0651 \u0646\u0642\u0637\u0629 \u061F macro.bi_t_app.1=\u062A\u0646\u062A\u0645\u064A \u0644\u0623\u064A\u0651 \u0645\u0633\u062A\u0642\u064A\u0645 ( \u0623\u0648 \u0642\u0637\u0639\u0629 \u0645\u0633\u062A\u0642\u064A\u0645)\u061F macro.bi_t_conf.0=\u0623\u064A\u0651 \u0646\u0642\u0637\u0629 \u061F macro.bi_t_conf.1=\u0645\u062A\u0637\u0627\u0628\u0642\u0629 \u0645\u0639 \u0623\u064A\u0651 \u0646\u0642\u0637\u0629\u061F macro.bi_t_align.text0=\u0627\u0644\u0646\u0642\u0627\u0637 \u0639\u0644\u0649 \u0627\u0633\u062A\u0642\u0627\u0645\u0629 \u0648\u0627\u062D\u062F\u0629 macro.bi_t_align.text1=\u0627\u0644\u0646\u0642\u0627\u0637 \u0644\u064A\u0633\u0648\u0627 \u0639\u0644\u0649 \u0627\u0633\u062A\u0642\u0627\u0645\u0629 \u0648\u0627\u062D\u062F\u0629 macro.bi_t_para.text0=\u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0645\u062A\u0648\u0627\u0632\u064A\u0629 macro.bi_t_para.text1=\u0627\u0644\u0639\u0646\u0627\u0635\u0631\u063A\u064A\u0631\u0645\u062A\u0648\u0627\u0632\u064A\u0629 macro.bi_t_perp.text0=\u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0645\u062A\u0639\u0627\u0645\u062F\u0629 macro.bi_t_perp.text1=\u0627\u0644\u0639\u0646\u0627\u0635\u0631\u063A\u064A\u0631\u0645\u062A\u0639\u0627\u0645\u062F\u0629 macro.bi_t_equi.text0=\u0627\u0644\u0646\u0642\u0627\u0637 \u0645\u062A\u0642\u0627\u064A\u0633\u0629 \u0627\u0644\u0628\u0639\u062F macro.bi_t_equi.text1=\u0627\u0644\u0646\u0642\u0627\u0637 \u063A\u064A\u0631 \u0645\u062A\u0642\u0627\u064A\u0633\u0629 \u0627\u0644\u0628\u0639\u062F macro.bi_t_app.text0=...\u0627\u0644\u0646\u0642\u0637\u0629 \u062A\u0646\u062A\u0645\u064A macro.bi_t_app.text1=...\u0627\u0644\u0646\u0642\u0637\u0629 \u0644\u0627 \u062A\u0646\u062A\u0645\u064A macro.bi_t_conf.text0=\u0627\u0644\u0646\u0642\u0637\u062A\u0627\u0646 \u0645\u062A\u0637\u0627\u0628\u0642\u062A\u0627\u0646 macro.bi_t_conf.text1=\u0627\u0644\u0646\u0642\u0637\u062A\u0627\u0646 \u063A\u064A\u0631 \u0645\u062A\u0637\u0627\u0628\u0642\u062A\u064A\u0646 palette.test=\u0627\u062E\u062A\u0628\u0631 # v1.7 : filedialog.openfolder.appletsize=\u062D\u062C\u0645 \u0627\u0644\u062A\u0637\u0628\u064A\u0642 filedialog.openfolder.actualsize=:\u0627\u0644\u062D\u062C\u0645 \u0627\u0644\u062D\u0627\u0644\u064A filedialog.openfolder.other=...\u063A\u064A\u0631 filedialog.openfolder.selected=:\u0627\u0644\u0645\u062C\u0644\u062F \u0627\u0644\u0645\u062E\u062A\u0627\u0631 filedialog.openfolder.cancel=:\u0627\u0644\u063A\u0627\u0621 menu.file.exportsvg=: SVG \u0635\u062F\u064A\u0631 \u0628\u0635\u064A\u063A\u0629 menu.objects.points=:\u0646\u0642\u0627\u0637 menu.objects.lines=:\u0645\u0633\u062A\u0642\u064A\u0645\u0627\u062A menu.objects.segments=:\u0642\u0637\u0639 \u0645\u0633\u062A\u0642\u064A\u0645\u0627\u062A menu.objects.circles= \u062F\u0648\u0627\u0626\u0631\u0648 \u0645\u062E\u0631\u0648\u0637\u064A\u0627\u062A menu.objects.angles=:\u0632\u0648\u0627\u064A\u0627 menu.objects.tracks=:\u0622\u062B\u0627\u0631 \u0648\u0645\u062D\u0644\u0627\u062A \u0647\u0646\u062F\u0633\u064A\u0629 menu.objects.functions=:\u062F\u0627\u0644\u0627\u062A \u0648 \u0639\u0628\u0627\u0631\u0627\u062A palette.info.function_u=:\u062F\u0627\u0644\u0629 \u064A\u062D\u062F\u062F\u0647\u0627 \u0627\u0644\u0645\u0633\u062A\u0639\u0645\u0644 palette.info.function=\u0631\u0633\u0645 \u062F\u0627\u0644\u0629 +\u0623\u0648 \u0645\u0646\u062D\u0646\u0649 \u0648\u0633\u064A\u0637\u064A props.superhidden=\u0645\u062E\u0641\u064A \u062A\u0645\u0627\u0645\u0627 props.showvalue=\u0627\u0638\u0647\u0627\u0631 \u0627\u0644\u0642\u064A\u0645\u0629 props.showname=\u0627\u0638\u0647\u0627\u0631 \u0627\u0644\u0627\u0633\u0645 props.background=\u062E\u0644\u0641\u064A\u0629 macro.bi_expression.0=\u0646\u0642\u0637\u0629 \u0645\u0631\u0633\u0627\u0629 \u061F # v1.9a : menu.help.licence=\u062A\u0631\u062E\u064A\u0635 licence.txt=

\u0647\u0630\u0627 \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062C \u0645\u062C\u0627\u0646\u064A  \u0636\u0645\u0646  \u0627\u062A\u0641\u0627\u0642\u064A\u0629 \u0627\u0644\u062A\u0631\u062E\u064A\u0635 \u0627\u0644\u0639\u0645\u0648\u0645\u064A\u0629  GNU-GPL \u060C \u0648 \u0647\u0630\u0627 \u064A\u0639\u0646\u064A  \u064A\u0645\u0643\u0646 \u0625\u0639\u0627\u062F\u0629 \u062A\u0648\u0632\u064A\u0639\u0647 \u0623\u0648 \u062A\u063A\u064A\u064A\u0631\u0647 \u062D\u0633\u0628  \u0634\u0631\u0648\u0637  \u0627\u0644\u0623\u062A\u0641\u0627\u0642\u064A\u0629 \u0627\u0644\u0645\u0646\u0634\u0648\u0631\u0629 \u0645\u0646 \u0637\u0631\u0641 "\u0624\u0633\u0633\u0629 \u0627\u0644\u0628\u0631\u0645\u0627\u062C\u064A\u0627\u062A \u0627\u0644\u062D\u0631\u0651\u0629"
\u0627\u0646\u0638\u0631  :

# v2.0 : menu.special.theme=\u062E\u0644\u0641\u064A\u0627\u062A \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062C menu.special.theme.gray=\u0631\u0635\u0627\u0635\u064A menu.special.theme.brushed=\u0631\u0635\u0627\u0635\u064A \u0645\u0635\u0642\u0648\u0644 menu.special.options=...\u0627\u0644\u0645\u0641\u0636\u0644\u0627\u062A. menu.special.options.sizes=\u0627\u0644\u0623\u062D\u062C\u0627\u0645 menu.special.options.sizes.minpointsize= \u062D\u062C\u0645 \u0627\u0644\u0646\u0642\u0627\u0637 menu.special.options.sizes.minlinesize=\u0633\u0645\u0643 \u0627\u0644\u062E\u0637\u0648\u0637 menu.special.options.sizes.arrowsize=\u062D\u062C\u0645 \u0627\u0644\u0623\u0633\u0647\u0645 menu.special.options.sizes.minfontsize=\u062D\u062C\u0645 \u0627\u0644\u062D\u0631\u0648\u0641 menu.special.options.sizes.digits.lengths=\u062F\u0642\u0629 \u0627\u0644\u0623\u0637\u0648\u0627\u0644 menu.special.options.sizes.digits.edit=\u062F\u0642\u0629 \u0627\u0644\u0639\u0628\u0627\u0631\u0627\u062A menu.special.options.sizes.digits.angles=\u062F\u0642\u0629 \u0627\u0644\u0632\u0648\u0627\u064A\u0627 menu.special.options.colors=\u0623\u0644\u0648\u0627\u0646 menu.special.options.others=\u063A\u064A\u0631 menu.special.options.others.undock=\u0625\u0645\u0643\u0627\u0646\u064A\u0629 \u0641\u0635\u0644 \u0627\u0644\u0623\u0644\u0648\u0627\u062D # v2.1 : menu.file.close=\u0623\u063A\u0644\u0642 \u0627\u0644\u0646\u0627\u0641\u0630\u0629 # v2.3 : alert.toomuchwins=

\u0647\u0646\u0627\u0643 \u0627\u0644\u0643\u062B\u064A\u0631 \u0645\u0646 \u0627\u0644\u0646\u0648\u0627\u0641\u0630 \u0627\u0644\u0645\u0641\u062A\u0648\u062D\u0629 :
\u0627\u0644\u0631\u062C\u0627\u0621 \u0625\u063A\u0644\u0627\u0642 \u0627\u0644\u0628\u0639\u0636 \u0645\u0646\u0647\u0627
\u0645\u0646 \u0623\u062C\u0644 \u0641\u062A\u062D \u0627\u0644\u0645\u0632\u064A\u062F....

# v2.4 : menu.file.new3D=\u0645\u0644\u0641 \u062C\u062F\u064A\u062F \u062B\u0644\u0627\u062B\u064A \u0627\u0644\u0623\u0628\u0639\u0627\u062F palette.info.bi_3Dcoords=\u0625\u062D\u062F\u0627\u062B\u064A\u0627\u062A \u062B\u0644\u0627\u062B\u064A\u0629 \u0627\u0644\u0623\u0628\u0639\u0627\u062F macro.bi_3Dcoords.0=\u0646\u0642\u0637\u0629 \u062A\u062B\u0628\u064A\u062A \u0627\u0644\u0625\u062D\u062F\u0627\u062B\u064A\u0627\u062A \u061F palette.info.bi_3Dcube=\u0645\u0643\u0639\u0628 macro.bi_3Dcube.0=\u0645\u0631\u0643\u0632 \u0627\u0644\u0645\u0643\u0639\u0628 palette.info.bi_3Darete=\u062D\u0631\u0641 \u062B\u0644\u0627\u062B\u064A \u0627\u0644\u0623\u0628\u0639\u0627\u062F ( \u0627\u0644\u062A\u0635\u0631\u0641 \u0641\u064A \u0627\u0644\u0645\u0646\u0642\u0648\u0637) macro.bi_3Darete.0=\u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 \u061F macro.bi_3Darete.1=\u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u062B\u0627\u0646\u064A\u0629 \u061F macro.bi_3Darete.2=\u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u062B\u0627\u0644\u062B\u0629 \u061F macro.bi_3Darete.3=\u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0631\u0627\u0628\u0639\u0629 \u061F palette.info.bi_3Dtetra=\u0631\u0628\u0627\u0639\u064A \u0627\u0644\u0623\u0648\u062C\u0647 \u0645\u0646\u062A\u0638\u0645 macro.bi_3Dtetra.0=\u0645\u0631\u0643\u0632 \u0631\u0628\u0627\u0639\u064A \u0627\u0644\u0623\u0648\u062C\u0647 menu.newdoc=\u062C\u062F\u064A\u062F # v2.5.5 : palette.aspect.label.text=\u0647\u064A\u0626\u0629 palette.aspect.label.point=\u0646\u0642\u0627\u0637 palette.aspect.label.line=\u0645\u0633\u062A\u0642\u064A\u0645\u0627\u062A palette.aspect.label.segment=\u0642\u0637\u0639 \u0627\u0644\u0645\u0633\u062A\u0642\u064A\u0645\u0627\u062A palette.aspect.label.circle=\u062F\u0648\u0627\u0626\u0631 palette.aspect.label.angle=\u0632\u0648\u0627\u064A\u0627 palette.aspect.label.area=\u0645\u0636\u0644\u0639\u0627\u062A palette.aspect.label.bi_text=\u0646\u0635\u0648\u0635 palette.info.bi_3Ddode=\u0627\u0644\u0627\u062B\u0646\u0627 \u0639\u0634\u0631\u064A \u0627\u0644\u0623\u0648\u062C\u0647 \u0645\u0646\u062A\u0638\u0645 macro.bi_3Ddode.0=\u0645\u0631\u0643\u0632 \u0627\u0644\u0627\u062B\u0646\u0627 \u0639\u0634\u0631\u064A \u0627\u0644\u0623\u0648\u062C\u0647 # v2.7 : palette.aspect.label.pointshape=:\u0634\u0643\u0644 \u0648 \u0627\u0633\u0645 \u0627\u0644\u0646\u0642\u0627\u0637 palette.aspect.label.locus=\u0645\u062D\u0644\u0651 \u0647\u0646\u062F\u0633\u064A menu.edit.deleteall=\u0645\u0633\u062D \u0643\u0644\u064A # v2.7.1 : jjava.old.message=\u0639\u0641\u0648\u0627 ... \u063A\u064A\u0631 \u0645\u0645\u0643\u0646 \u062A\u0634\u063A\u064A\u0644 \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062C Carmetal \u0644\u0623\u0646 \u0646\u0633\u062E\u0629 Java \u0639\u064A\u0631 \u0645\u062D\u064A\u0646\u0629... java.old.quit=\u062E\u0631\u0648\u062C java.old.go=Java \u062A\u062D\u0645\u064A\u0644 \u0646\u0633\u062E\u0629 \u062C\u062F\u064A\u062F\u0629 \u0645\u0646 palette.info.boundedpoint=\u0639\u064A\u0651\u0646 \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0627\u0644\u0645\u0633\u062A\u0648\u064A+\u0623\u0648 \u0639\u0644\u0649 \u0648\u062C\u0647 \u0645\u0646 \u062C\u0633\u0645 \u0645\u062A\u0639\u062F\u062F \u0627\u0644\u0623\u0648\u062C\u0647 #v2.7.2 : user.foldername=CaRMetal \u0645\u0639\u0637\u064A\u0627\u062A \u0639\u0646 \u0645\u0633\u062A\u062E\u062F\u0645 #v2.8 props.fixedray=:\u0634\u0639\u0627\u0639 props.fixedsegment=:\u0637\u0648\u0644 props.fixedangle=:\u0632\u0627\u0648\u064A\u0629 props.expl=:\u062A\u0639\u0644\u064A\u0642 props.aspecttab=\u0647\u064A\u0626\u0629 props.numerictab=\u0631\u0642\u0645\u064A props.conditionaltab=\u0634\u0631\u0637\u064A props.popup.special=\u0623\u062D\u0631\u0641 \u062E\u0627\u0635\u0629 props.popup.functions=\u062F\u0627\u0644\u0627\u062A \u0627\u0644\u0645\u062A\u0639\u0627\u0631\u0641 \u0639\u0644\u064A\u0647\u0627 props.popup.latex=LaTex \u0623\u0648\u0627\u0645\u0631 #v2.8.1 props.fixedinwindow=\u0645\u0631\u062A\u0628\u0637 \u0628\u0627\u0644\u0646\u0627\u0641\u0630\u0629 #v2.8.5 palette.controls=\u0627\u0644\u062A\u062D\u0643\u0645 props.ctrlshowvalue=\u0625\u0638\u0647\u0627\u0631 \u062F\u0631\u062C\u0629 \u0627\u0644\u062A\u062D\u0643\u0645 props.ctrlsnap=\u0645\u0631\u062A\u0628\u0637 \u0628\u0627\u0644\u062A\u062F\u0631\u062C props.ctrlshowticks=\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u062A\u062F\u0631\u062C props.ctrltickspacing=\u0627\u0644\u0632\u064A\u0627\u062F\u0629 palette.info.ctrl_edit=\u062D\u0631\u0651\u0631\u060C \u062D\u0631\u0643+\u0623\u0648 \u0635\u063A\u0631\\u0643\u0628\u0631 \u0627\u0644\u062A\u062D\u0643\u0645 palette.info.ctrl_chkbox=\u0623\u0636\u0641 \u0645\u0631\u0628\u0639 \u0625\u062E\u062A\u064A\u0627\u0631 palette.info.ctrl_popup=\u0623\u0636\u0641 \u0642\u0627\u0626\u0645\u0629 \u0645\u0646\u0633\u062F\u0644\u0629 palette.info.ctrl_slider= \u0625\u0636\u0627\u0641\u0629 \u0632\u0631 \u0645\u062A\u063A\u064A\u0631\u0627\u062A #v2.8.6 props.trackdmin=:\u0639\u062F\u062F \u0627\u0644\u0645\u0631\u0627\u062D\u0644 opendialog.preview=:\u0645\u0639\u0627\u064A\u0646\u0629 pngdialog.options=:\u062E\u064A\u0627\u0631\u0627\u062A \u0627\u0644\u062A\u0635\u062F\u064A\u0631 pngdialog.scale=:\u0633\u0644\u0645 pngdialog.originsize=:\u062D\u062C\u0645 \u0627\u0644\u0623\u0635\u0644\u064A pngdialog.scaledsize=:\u062D\u062C\u0645 \u062D\u0633\u0628 \u0627\u0644\u0633\u0644\u0645 #v2.8.7 canvas.3D.floor=\u0623\u0631\u0636\u064A\u0629 canvas.3D.system=\u0645\u0639\u064A\u0646 canvas.3D.rightclic=\u0623\u0646\u0642\u0631 \u0627\u0644\u0632\u0631 \u0627\u0644\u0623\u064A\u0645\u0646 \u0648 \u062C\u0631 \u0644\u0644\u0642\u064A\u0627\u0645 \u0628\u0627\u0644\u062F\u0648\u0631\u0627\u0646 #v2.8.8 palette.info.equationxy=f(x,y)=0 \u0645\u0646\u062D\u0646\u064A \u0645\u062D\u062F\u062F \u0628 props.equationxy=:\u0645\u0639\u0627\u062F\u0644\u0629 props.equationxychooser=:\u062F\u0642\u0629 palette.function=\u062F\u0627\u0644\u0627\u062A \u0648 \u0645\u062D\u0644\u0627\u062A \u0647\u0646\u062F\u0633\u064A\u0629 #v2.8.9 menu.edit.deletealltracks=\u0645\u0633\u062D \u0627\u0644\u0622\u062B\u0627\u0631 menu.edit.deactivatealltracks=\u062A\u0639\u0637\u064A\u0644 \u0627\u0644\u0623\u062B\u0627\u0631 props.tracks=\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0623\u062B\u0627\u0631 menu.edit.zoom=\u062A\u0643\u0628\u064A\u0631 \u0623\u0648 \u062A\u062D\u0631\u064A\u0643 #v2.9.0 menu.windows=\u0646\u0627\u0641\u0630\u0629 #v2.9.1 contexthelp.seealso=:\u0645\u0648\u0636\u0648\u0639\u0627\u062A \u0630\u0627\u062A \u0635\u0644\u0629 #v2.9.2 menu.display.restrictmessage.dontdisplay=\u0644\u0627 \u062A\u0638\u0647\u0631 \u0647\u0630\u0647 \u0627\u0644\u0631\u0633\u0627\u0644\u0629 props.thick=:\u0633\u0645\u064A\u0643 #v2.9.6 props.magnetmessage=\u0623\u0646\u0642\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u062A\u064A \u062A\u0631\u064A\u062F \u0625\u0636\u0627\u0641\u062A\u0647\u0627 \u0623\u0648 \u0625\u062E\u0641\u0627\u0626\u0647\u0627 \u0645\u0646 \u0644\u0627\u0626\u062D\u0629 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0645\u063A\u0646\u0627\u0637\u0633\u064A\u0629 props.magnetobj=\u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0645\u063A\u0646\u0627\u0637\u0633\u064A\u0629 props.magnetpix=(20px) \u062C\u0627\u0630\u0628\u064A\u0629 #v2.9.7 palette.info.ctrl_txtfield=\u0625\u0636\u0627\u0641\u0629 \u0645\u0631\u0628\u0639 \u0645\u062F\u062E\u0644\u0627\u062A \u0631\u0642\u0645\u064A\u0629 palette.info.ctrl_button=\u0625\u0636\u0627\u0641\u0629 \u0632\u0631 #v2.9.8.4 JSerror.title=\u062E\u0637\u0623 \u062A\u0631\u0643\u064A\u0628\u064A JSerror.line=\u062E\u0637 JSerror.pointcoords=\u062E\u0637\u0623 \u062A\u0631\u0643\u064A\u0628\u064A \u0641\u064A \u0625\u062D\u062F\u0627\u062B\u064A\u0627\u062A \u0627\u0644\u0646\u0642\u0637\u0629 JSerror.interactiveinput=\u062E\u0637\u0623 \u0641\u064A \u062A\u0633\u0645\u064A\u0629 \u0627\u0644\u0639\u0646\u0635\u0631 JSerror.notfound=\u0639\u0646\u0635\u0631 \u063A\u064A\u0631 \u0645\u0648\u062C\u0648\u062F JSerror.notgoodtype=\u0645\u0633\u062A\u062D\u064A\u0644 \u0627\u0644\u062A\u0637\u0628\u064A\u0642 \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u0646\u0648\u0639 \u0645\u0646 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 JScmd.inputmessage=\u0645\u0627 \u0647\u0648 \u0633\u0624\u0627\u0644\u0643 \u061F JScmd.promptmessage=...\u0631\u0633\u0627\u0644\u062A\u0643 menu.js=\u062C\u0627\u0641\u0627 \u0633\u0643\u0631\u064A\u0628\u062A menu.js.script=Javascript\u0625\u0641\u062A\u062D \u0645\u0644\u0641 menu.js.command=script \u0625\u0641\u062A\u062D \u0645\u062D\u0631\u0631 JSeditor.title=javascript \u0645\u062D\u0631\u0631 ./src/eric/docs/JZirkelProperties_no.properties0000644000175000017500000001762111302427452020662 0ustar yvesyves# Sample ResourceBundle properties file menu.file=Fil menu.file.new=Ny menu.file.load=\u00C5pne... menu.file.save=Lagre menu.file.saveas=Lagre Som... menu.file.exportpng=Exporter til PNG menu.file.exporteps=Exporter til EPS menu.file.quit=Avslutt menu.edit=Rediger menu.edit.copy=Kopier menu.edit.move=Flytt menu.edit.rename=Gi Nytt Navn menu.edit.edit=Endre menu.edit.hide=Skjul menu.edit.delete=Slett menu.display=Vis menu.display.hidden=Vis/Skjul Objekter menu.display.grid=Vis/Skjul Rutenett menu.display.finegrid=Kun Aksene menu.display.leftsnap=Snap med venstre mustast menu.display.manage_macros=Makro Utforsker menu.display.history_panel=Historie menu.display.help_panel=Hjelp menu.display.properties_panel=Objekt Egenskaps Panel menu.display.small=Sm\u00E5 ikoner menu.display.medium=Medium ikoner menu.display.large=Store ikoner menu.display.restrictedpalette=Vis Begrenset Palett menu.display.restrictedpaletteedit=Endre Begrenset Palett menu.display.restrictmessage=
Dette gj\u00F8r at du ser den begrensede paletten.

Dette ang\u00E5r kun denne filen :

n\u00E5r du vil: Lagre Som.. , vil ogs\u00E5 'Lagre den begrensede figuren' komme som alternativ
to filer vil bli laget : den f\u00F8rste (.zir) vil \u00E5pne med 'normal' innstillinger, og
den andre (.r.zir) i 'begrenset palett' innstilling
menu.macros=Makroer menu.special=Spesial menu.special.newmacro=Ny Makro menu.special.loadmacros=\u00C5pne Makro Fil... menu.special.definejob=Definer Jobb menu.special.loadjob=Last inn Jobb ... menu.special.jobcomment=Skriv Jobb Kommentar ... menu.special.testjob=Test Jobben menu.special.savejob=Lagre som en Jobb ... menu.special.export=Opprett HTML Fil og Utforsker Forh\u00E5ndsvisning menu.special.exporttemplate=HTML Eksport med Maler menu.help=Hjelp menu.help.about=Om CaRMetal... menu.help.info=Kontekst hjelp menu.help.url0=G\u00E5 til CaRMetal webside menu.help.url1=G\u00E5 til CARzine webside menu.help.url2=G\u00E5 til offisiell C.a.R. webside filedialog.saveas=Lagre Figur filedialog.alsorestricted=Lagre Begrenset figur i tillegg filedialog.options=Preferanser for Lagre filedialog.restrictedmessage=Du arbeider med 'Begrenset' innstillinger,
figuren vil derfor bli lagret med disse innstillingene filedialog.filefilter=CaR Fil (.zir) filedialog.compressedfilefilter=Komprimert CaR Fil (.zirz) filedialog.macrofilefilter=CaR Makro Fil (.mcr) filedialog.savemessage1=Fil :\n filedialog.savemessage2=\nEksisterer allerede. Erstatte ? palette.file=Fil palette.edit=Endre palette.construction=Konstruksjon palette.aspect=Forhold Farge palette.history=Historie palette.sizes=St\u00F8rrelser palette.sizes.point=Punkt palette.sizes.line=Linje palette.sizes.arrow=Pil palette.sizes.font=Font palette.prec=Numerisk presisjon palette.prec.lengths=Lengder palette.prec.edit=Uttrykk palette.prec.angles=Vinkler palette.colors=Bakgrunn (farge/bilde) palette.colors.saturated1=Sterke farger palette.colors.desaturated1=Pastellfarger palette.colors.saturated2=Sterke farger 2 palette.colors.desaturated2=Pastellfarger 2 palette.colors.constants=Webkonstanter palette.image.fileerror=Du m\u00E5 lagre denne figuren f\u00F8r du bruker dette verkt\u00F8yet

Bildet du velger m\u00E5 befinne seg i
samme mappe. palette.info.vector=Vektor palette.info.image3=Sett inn bilde med 2 eller 3 punkter palette.info.background=Velg/Fjern bakgrunnsbilde palette.info.imcenter=Sentrer Bakgrunnsbilde palette.info.imstretch=Strekk bakgrunnbildet til \u00E5 passe konstruksjonsvinduet palette.info.imtile=Flislegg med bakgrunnsbilde palette.info.copy=Kopier konstruksjonsvinduet palette.info.exportpng=Eksporter konstruksjonsvindu til png format palette.info.exporteps=Ekporter konstruksjonsvindu til eps format palette.info.newmacro=Opprett Ny Makro palette.info.loadmacros=Last inn Makro fil palette.info.manage_macros=Vis/Skjul Makropanelet palette.info.properties_panel=Vis/Skjul Panel for Objektegenskaper palette.info.history_panel=Vis/Skjul Historie for Konstruksjons panelet palette.info.help_panel=Vis/Skjul Hjelp for Kontekst panelet macros.untitledmacro=Makro uten navn macros.untitledfolder=Mappe uten navn macros.emptynode=-- Tom -- macros.addfolder=Legg til ny mappe macros.deleteselected=Slett Valgte Makro macros.renamemacro=Nytt navn til valgte makro macros.recordmacro=Opptak av Makro macros.initials=F\u00F8rste objekter ? macros.pleaseselect=Vennligst Velg ! macros.finals=Siste objekter ? macros.cancel=Avbryt ? macros.popup.run=Kj\u00F8r makro macros.popup.rename=Gi nytt navn macros.popup.delete=Slett macros.popup.addtolibrary=Legg til i bibliotek macros.popup.removefromlibrary=Fjern fra bibliotek macros.popup.publish=Inkluder i figur macros.popup.notpublish=Ikke inkluder i figur macros.popup.saveas=Lagre Som... macros.popup.properties=Vis Egenskaper macros.popup.duplicate=Dupliser macros.savedlog.buttonok=Lagre Makrofil macros.question.delete=Vil du virkelig slette disse makroene ? rene.zirkel.objects.PointObject=Pt rene.zirkel.objects.PrimitiveCircleObject=Sir rene.zirkel.objects.PrimitiveLineObject=Lne rene.zirkel.objects.ExpressionObject=Uttr. rene.zirkel.objects.FixedAngleObject=F.V. rene.zirkel.objects.SegmentObject=Seg. rene.zirkel.objects.RayObject=Str\u00E5le rene.zirkel.objects.TwoPointLineObject=Lne rene.zirkel.objects.FunctionObject=Funk rene.zirkel.objects.AreaObject=Areal mi.pal.name=Makro Utforsker mi.name=Navn : mi.comment=Kommentar : mi.properties=Parameter egenskaper : mi.hideproperties=M\u00E5lets egenskaper : mi.hideduplicates=Skjul duplikater mi.apply=Utf\u00F8r mi.tab.type=Type mi.tab.name=Navn mi.tab.prompt=Prompt mi.tab.fix=Fast ? mi.tab.ask=Sp\u00F8r ? mi.error.initial=Feil : minst en parameter \nm\u00E5 v\u00E6re fri (ikke fast eller Sp\u00F8r)\n\nDenne makroen vil ikke bli endret props.help=For \u00E5 se Egenskaper m\u00E5 du h\u00F8yreklikke p\u00E5 et objekt.

Hvis du lager et nytt objekt med dette panelet \u00E5pent kan du endre egenskapene under opprettelsen. props.name=Navn : props.alias=Alias : props.unit=Enhet : props.fix=Fast : props.expl=Forklaring : props.belongto=Lag : props.conditional=Betinget forhold : props.solid=Fylt : props.hidden=Skjult : props.normal=Normal : props.bold=Tykk : props.thin=Prikket : props.black=Sort : props.green=Gr\u00F8nn : props.blue=Bl\u00E5 : props.brown=Brun : props.cyan=Turkis : props.red=R\u00F8d : props.showasslider=Glider : props.error=Det er en skrivefeil i dette uttrykket.
Uttrykket vil bli resatt props.cartesian=Kartesisk funksjon props.parametric=Parametrisk funksjon props.functiontype=Type : props.killarc=Fjern bue props.arc=Bue props.release=L\u00F8sne props.bind=Bind props.setaway=Sett: away props.setclose=Sett: close # v1.3 : props.grid=Rutest\u00F8rrelse : props.inside=Innsideobjekt : props.pointsonly=Kun med Punkter : props.step=Steg : palette.grid=Rutenett forhold leftpanel.macros=Makro panel leftpanel.properties=Egenskap panel leftpanel.history=Historie panel leftpanel.help=Hjelp panel selectpopup.whatobject=Hvilket objekt ? selectpopup.RightClick=Endre selectpopup.MoverTool=Flytt selectpopup.HiderTool=Vis/Skjul selectpopup.DeleteTool=Slett selectpopup.RenamerTool=Nytt Navn selectpopup.EditTool=Endre selectpopup.SetParameterTool=Makro parametere : selectpopup.SetTargetsTool=Makro m\u00E5l : palette.info.locus=Lokus for punkt ... Envelope of line # v1.4 : menu.special.savezirset=Lag Lysark... filedialog.openfolder.title=Lysark egenskaper filedialog.openfolder.approve=Velg lysark mappe filedialog.openfolder.saveicons=Lagre og med begrenset palett ikoner slideshow.next=neste slideshow.previous=forrige slideshow.download=Last ned fil slideshow.signature=Lysark laget med # v1.5 : menu.language=Spr\u00E5k menu.help.url3=Oversett CaRMetal ./src/eric/JHelpPanel.java0000644000175000017500000005544311355611503014322 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStreamReader; import java.net.URL; import java.util.Enumeration; import java.util.StringTokenizer; import java.util.Vector; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JEditorPane; import javax.swing.JLabel; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.metal.MetalComboBoxUI; import javax.swing.text.html.HTMLDocument; import javax.swing.text.html.HTMLEditorKit; import javax.swing.text.html.StyleSheet; import rene.gui.Global; /** * Info class. Reads a file "info.txt" or "de_info.txt" etc. that has the * structure * * .subject1 substitute1 substitute2 ... .related subject subject ... Header ... * * .subject2 ... * * and displays the text, starting from header, searching for a subject or any * of its substitutes. The headers of the related subjects are presented in a * choice list. The user can switch to any of it. * * There is a history and a back button. * * Moroever, there is a search button, that displays the first subject * containing a string and presents all other subjects containing the string in * the choice list. */ public class JHelpPanel extends JPanel { /** * */ private static final long serialVersionUID = 1L; MyJTextPane T; public static String Subject = "start"; String Search = null; // MyChoice2 L; Vector Other = null; Vector History = new Vector(); Vector Related; JPanel north; MyJTextSearch TSearch; public JHelpPanel() { T = new MyJTextPane(this); final JScrollPane scrollPane = new JScrollPane(T); setAlignmentX(0.0F); setAlignmentY(0.0F); setLayout(new javax.swing.BoxLayout(this, javax.swing.BoxLayout.Y_AXIS)); setFocusable(false); north = new JPanel(); north.setLayout(new javax.swing.BoxLayout(north, javax.swing.BoxLayout.Y_AXIS)); north.setOpaque(false); TSearch = new MyJTextSearch(this); Subject = "start"; fill(true); north.add(TSearch); north.add(vmargin(2)); add(north); add(scrollPane); } public void focusTxt() { SwingUtilities.invokeLater(new Runnable() { public void run() { TSearch.JTF.requestFocus(); } }); } static JPanel margin(final int w) { final JPanel mypan = new JPanel(); fixsize(mypan, w, 1); mypan.setLayout(new javax.swing.BoxLayout(mypan, javax.swing.BoxLayout.X_AXIS)); mypan.setAlignmentX(0F); mypan.setAlignmentY(0F); mypan.setOpaque(false); mypan.setFocusable(false); return mypan; } static JPanel vmargin(final int h) { final JPanel mypan = new JPanel(); fixsize(mypan, 1, h); mypan.setLayout(new javax.swing.BoxLayout(mypan, javax.swing.BoxLayout.X_AXIS)); mypan.setAlignmentX(0F); mypan.setAlignmentY(0F); mypan.setOpaque(false); mypan.setFocusable(false); return mypan; } // Only called by LeftPanelContent init method : public void fixPanelSize(final int w, final int h) { fixsize(north, w, 24); fixsize(TSearch, w, 24); fixsize(TSearch.wholepanel, w - 20, 18); } public static void fixsize(final JComponent cp, final int w, final int h) { final Dimension d = new Dimension(w, h); cp.setMaximumSize(d); cp.setMinimumSize(d); cp.setPreferredSize(d); cp.setSize(d); } public void clearSearchTxtField() { TSearch.JTF.setText(""); } public void fill(final boolean WithTextFocus) { final boolean vis = TSearch.ispopupvisible(); if (vis) { TSearch.hidepopup(); } TSearch.L = new MyJPopupMenu(this); T.setText(""); String TXT = ""; boolean Found = false, Appending = false; Related = null; Other = new Vector(); String pair[] = null, lastpair[] = null; String lang = Global.name("language", ""); Vector SearchResults = new Vector(); String SearchResult = ""; String FoundTopic = null; boolean FirstRun = true, FoundHeader = false; String Search1 = Search; if (Search != null && Search.length() > 0) { Search1 = Search.substring(0, 1).toUpperCase() + Search.substring(1); } read: while (true) { try { Global.name("codepage.help", ""); BufferedReader in = null; try { in = new BufferedReader(new InputStreamReader( new FileInputStream(Global.getHomeDirectory() + "docs/" + lang + "info.txt"), "UTF8")); } catch (final Exception ex) { in = new BufferedReader(new InputStreamReader( new FileInputStream(Global.getHomeDirectory() + "docs/" + lang + "info.txt"))); } boolean newline = false; newline: while (true) { String s = in.readLine(); if (s == null) { break newline; } if (s.startsWith("//")) { continue; } s = clear(s); if (!s.startsWith(".") && Search != null && (s.indexOf(Search) >= 0 || s.indexOf(Search1) >= 0)) { if (lastpair != null && pair == null && !SearchResult.equals(lastpair[0])) { SearchResults.addElement(lastpair); SearchResult = lastpair[0]; if (FoundTopic == null) { FoundTopic = lastpair[0]; } } } interpret: while (true) { if (!Appending && s.startsWith(".") && !s.startsWith(".related")) { if (!Found) { if (s.startsWith("." + Subject)) { Found = true; Appending = true; continue newline; } final StringTokenizer t = new StringTokenizer(s); while (t.hasMoreElements()) { final String name = t.nextToken(); if (name.equals(Subject)) { Found = true; Appending = true; continue newline; } } } pair = new String[2]; s = s.substring(1); final int n = s.indexOf(' '); if (n > 0) { s = s.substring(0, n); } pair[0] = s; continue newline; } if (Appending) { if (s.startsWith(".related")) { s = s.substring(".related".length()); Related = new Vector(); final StringTokenizer t = new StringTokenizer(s); while (t.hasMoreElements()) { Related.addElement(t.nextToken()); } continue newline; } if (s.startsWith(".")) { Appending = false; continue interpret; } if (s.trim().equals("")) { if (!newline) { // T.append("

"); TXT += "

"; } newline = true; } else { newline = false; if (s.startsWith(" ")) { TXT += "
"; // T.append("
"); } // T.append(s+" "); TXT += s + " "; } } else if (pair != null && !s.startsWith(".")) { pair[1] = s; Other.addElement(pair); lastpair = pair; pair = null; if (Search != null && (s.indexOf(Search) >= 0 || s .indexOf(Search1) >= 0)) { if (!SearchResult.equals(lastpair[0])) { SearchResults.addElement(lastpair); SearchResult = lastpair[0]; if (!FoundHeader) { FoundTopic = lastpair[0]; } FoundHeader = true; } } } continue newline; } } // T.append("
"); TXT += "
"; in.close(); } catch (final Exception e) { if (!lang.equals("")) { lang = ""; continue read; } else { // V.appendLine( // Global.name("help.error","Could not find the help file!")); // T.append(Global.name("help.error", // "Could not find the help file!")); TXT += Global.name("help.error", "Could not find the help file!"); } } if (FoundTopic != null && FirstRun) { Subject = FoundTopic; SearchResults = new Vector(); SearchResult = ""; pair = null; lastpair = null; Found = false; TXT = ""; // T.setText(""); // V.setText(""); FirstRun = false; continue read; } else { break read; } } // if (!Found) // V.appendLine(Global.name("info.notfound","Topic not found!")); if (!Found) { // T.append(Global.name("info.notfound", "Topic not found!")); TXT += Global.name("info.notfound", "Topic not found!"); } if (Search != null) { if (SearchResults.size() > 0) { TSearch.L.addI(Global.name("info.searchresults")); } else { TSearch.L.addI(Global.name("info.noresults")); } } else { TSearch.L.addI(Global.name("info.select")); } if (Search == null && Related != null) { final Enumeration e = Related.elements(); while (e.hasMoreElements()) { final String topic = (String) e.nextElement(); final Enumeration ev = Other.elements(); while (ev.hasMoreElements()) { final String s[] = (String[]) ev.nextElement(); if (s[0].equals(topic)) { TSearch.L.addI(s[1]); break; } } } } if (Search != null) { final Enumeration e = SearchResults.elements(); while (e.hasMoreElements()) { final String s[] = (String[]) e.nextElement(); TSearch.L.addI(s[1]); } } T.setContent(TXT); if (WithTextFocus) { focusTxt(); } T.setCaretPosition(0); History.addElement(Subject); TSearch.setCount(); if (vis) { TSearch.showpopup(); } } public String clear(String s) { s = s.replace('ß', ' '); s = s.replaceAll("__", ""); return s; } } class MyComboBoxUI extends MetalComboBoxUI { public static ComponentUI createUI(final JComponent c) { return new MyComboBoxUI(); } } class MyJTextSearch extends JPanel { /** * */ private static final long serialVersionUID = 1L; JLabel cntLBL = new JLabel(); JTextField JTF; JHelpPanel JP; JButton popBTN, clearBTN; JPanel txtpanel; JPanel wholepanel; MyJPopupMenu L; String old = ""; @Override public void paintComponent(final java.awt.Graphics g) { super.paintComponent(g); final ImageIcon OffImage = new ImageIcon(getClass().getResource( "/eric/GUI/icons/themes/common/helpsearchback.png")); final java.awt.Dimension d = this.getSize(); g.drawImage(OffImage.getImage(), 0, 0, d.width, d.height, this); } public MyJTextSearch(final JHelpPanel jp) { super(); setLayout(new javax.swing.BoxLayout(this, javax.swing.BoxLayout.Y_AXIS)); setOpaque(false); JP = jp; L = new MyJPopupMenu(JP); txtpanel = new JPanel(); txtpanel.setLayout(new javax.swing.BoxLayout(txtpanel, javax.swing.BoxLayout.X_AXIS)); txtpanel.setBorder(BorderFactory.createLineBorder(new Color(150, 150, 150), 1)); txtpanel.setOpaque(true); txtpanel.setBackground(Color.WHITE); wholepanel = new JPanel(); wholepanel.setLayout(new javax.swing.BoxLayout(wholepanel, javax.swing.BoxLayout.X_AXIS)); wholepanel.setBorder(BorderFactory.createEmptyBorder()); wholepanel.setOpaque(false); cntLBL.setOpaque(false); cntLBL.setText(""); cntLBL.setFont(new Font("System", 0, 9)); cntLBL.setHorizontalAlignment(SwingConstants.CENTER); cntLBL.setVerticalAlignment(SwingConstants.CENTER); JHelpPanel.fixsize(cntLBL, 20, 18); JTF = new JTextField(); JTF.setFont(new Font("System", 0, 11)); JTF.setForeground(new Color(50, 50, 50)); JTF.setBackground(new Color(255, 255, 255)); JTF.setBorder(BorderFactory.createEmptyBorder()); JTF.setMargin(new java.awt.Insets(0, 0, 1, 0)); JTF.addKeyListener(new KeyAdapter() { @Override public void keyReleased(final KeyEvent e) { if (JTF.getText().equals("")) { clearBTN.setVisible(false); } else { clearBTN.setVisible(true); } if ((e.getKeyCode() == KeyEvent.VK_ENTER) || (e.getKeyCode() == KeyEvent.VK_UP)) { hidepopup(); } else if (e.getKeyCode() == KeyEvent.VK_DOWN) { showpopup(); } else { doSearch(JTF.getText()); } } }); // JTF.setFocusable(true); JTF.addFocusListener(new FocusAdapter() { @Override public void focusGained(final FocusEvent e) { JTF.selectAll(); } }); final ImageIcon carimg = new ImageIcon(getClass().getResource( "/eric/GUI/icons/themes/common/helpsearch1.gif")); popBTN = new JButton(carimg); popBTN.setBorder(BorderFactory.createEmptyBorder()); popBTN.setOpaque(true); popBTN.setContentAreaFilled(true); popBTN.setFocusable(false); popBTN.addMouseListener(new MouseAdapter() { @Override public void mousePressed(final MouseEvent e) { showpopup(); } }); final ImageIcon carimg2 = new ImageIcon(getClass().getResource( "/eric/GUI/icons/themes/common/helpsearch2.png")); final JButton backBTN = new JButton(carimg2); backBTN.setBorder(BorderFactory.createEmptyBorder()); backBTN.setOpaque(false); backBTN.setContentAreaFilled(false); backBTN.setFocusable(false); backBTN.addMouseListener(new MouseAdapter() { @Override public void mousePressed(final MouseEvent e) { final int n = JP.History.size(); if (n < 2) { return; } JP.History.removeElementAt(n - 1); JHelpPanel.Subject = (String) JP.History.elementAt(n - 2); JP.History.removeElementAt(n - 2); JP.fill(true); } }); final ImageIcon carimg3 = new ImageIcon(getClass().getResource( "/eric/GUI/icons/themes/common/helpsearch3.gif")); clearBTN = new JButton(carimg3); clearBTN.setBorder(BorderFactory.createEmptyBorder()); clearBTN.setOpaque(true); clearBTN.setContentAreaFilled(true); clearBTN.setFocusable(false); clearBTN.addMouseListener(new MouseAdapter() { @Override public void mousePressed(final MouseEvent e) { JTF.setText(""); clearBTN.setVisible(false); doSearch(""); } }); clearBTN.setVisible(false); JHelpPanel.fixsize(popBTN, carimg.getIconWidth(), carimg .getIconHeight()); JHelpPanel.fixsize(clearBTN, carimg3.getIconWidth(), carimg3 .getIconHeight()); txtpanel.add(cntLBL); txtpanel.add(popBTN); txtpanel.add(JHelpPanel.margin(3)); txtpanel.add(JTF); txtpanel.add(clearBTN); wholepanel.add(JHelpPanel.margin(5)); wholepanel.add(txtpanel); wholepanel.add(JHelpPanel.margin(3)); wholepanel.add(backBTN); this.add(JHelpPanel.vmargin(3)); this.add(wholepanel); } void showpopup() { if (L.Count > 1) { L.show(popBTN, 10, 20); } } void hidepopup() { L.setVisible(false); } boolean ispopupvisible() { return L.isVisible(); } void doSearch(final String s) { if (s.equals("")) { JP.Search = null; } else { JP.Search = s; } JHelpPanel.Subject = "start"; JP.fill(true); JP.Search = null; } void setCount() { if (L.Count > 1) { cntLBL.setText("(" + (L.Count - 1) + ")"); } else { cntLBL.setText(""); } } } class MyJPopupMenuItem extends JMenuItem { /** * */ private static final long serialVersionUID = 1L; String STR; JHelpPanel JP; public MyJPopupMenuItem(final JHelpPanel jp, final String s) { super(s.replaceAll("", "").replace("
", ", ")); STR = s; JP = jp; setFont(new Font("System", 0, 11)); addMouseListener(new MouseAdapter() { @Override public void mousePressed(final MouseEvent arg0) { JP.TSearch.L.setVisible(false); JP.TSearch.JTF.setText(""); JP.TSearch.clearBTN.setVisible(false); final String s = STR; final Enumeration ev = JP.Other.elements(); while (ev.hasMoreElements()) { final String p[] = (String[]) ev.nextElement(); if (p[1].equals(s)) { JHelpPanel.Subject = p[0]; JP.fill(true); break; } } } }); } } class MyJPopupMenu extends JPopupMenu { /** * */ private static final long serialVersionUID = 1L; int Count = 0; JHelpPanel JP; public MyJPopupMenu(final JHelpPanel jp) { super(); JP = jp; setFont(new Font("System", 0, 11)); setFocusable(false); } public void addI(final String s) { Count++; add(new MyJPopupMenuItem(JP, s)); } } class MyJTextPane extends JEditorPane implements HyperlinkListener { /** * */ private static final long serialVersionUID = 1L; String content; HTMLEditorKit editorkit; HTMLDocument doc; JHelpPanel JP; public MyJTextPane(final JHelpPanel jp) { super(); JP = jp; this.setContentType("text/html;"); editorkit = (HTMLEditorKit) getEditorKit(); doc = (HTMLDocument) getDocument(); final StyleSheet myStyleSheet = new StyleSheet(); myStyleSheet .addRule("body {color: #333333;font-family: Verdana, Arial, Helvetica, sans-serif;" + "text-align: justify;font-size: 10px;background-color: #F1F3F9;}"); myStyleSheet .addRule("ul {text-align: left;list-style-type: disc;padding-left: 15px;list-style-position: outside;}"); myStyleSheet .addRule(".pfooter {text-align: center;font-size: 10px;padding-bottom: 5px;" + "padding-top: 5px;background-color: #eaedf3;}"); myStyleSheet .addRule(".pfootertitle {font-weight: bold;text-align: center;font-size: 10px;padding-bottom: 5px;" + "padding-top: 5px;background-color: #DBDDE3;}"); myStyleSheet.addRule("a {color: #0a9100;text-decoration: none;}"); myStyleSheet.addRule(".aanchor {color: #CC6633;}"); myStyleSheet.addRule(".centered {text-align: center;}"); myStyleSheet .addRule(".comment {text-align: center;font-size: 9px;font-style: oblique;font-weight: normal;}"); myStyleSheet .addRule(".comment2 {text-align: justify;font-size: 9px;font-style: oblique;font-weight: normal;}"); myStyleSheet .addRule(".ttle {color: #000000;font-family: Verdana, Arial, Helvetica, sans-serif;" + "text-align: center;font-weight: bold;font-size: 11px;background-color: #DBDDE3;}"); myStyleSheet .addRule(".tab {border-width: 1px;border-color: #909090;border-style:solid;}"); myStyleSheet .addRule(".tds {border-width: 1px;border-color: #909090;border-style:solid;background-color: #DBDDE3;}"); myStyleSheet .addRule(".image {border-width: 1px;border-color: #909090;border-style:solid;background-color: #F1F3F9;}"); editorkit.setStyleSheet(myStyleSheet); this.setEditable(false); addHyperlinkListener(this); } void fixImagePath() { final String SP = System.getProperty("file.separator"); // Check if there are external images (inside the docs folder of // carmetal_config directory Pattern p = Pattern.compile( "(]*src=\")(images/)([^\"]+)(\"[^>]*>)", Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(content); StringBuffer sb = new StringBuffer(); while (m.find()) { String myst = "

" + m.group(1) + "file:///"; myst += Global.getHomeDirectory().replace("\\", "\\\\"); myst += "docs/images/".replace("/", SP).replace("\\", "\\\\"); myst += m.group(3).replace("/", SP).replace("\\", "\\\\"); // on windows, the img tag seems to need the width and height // attribute : final ImageIcon myimg = new ImageIcon(Global .getHomeDirectory() + "docs/images/" + m.group(3)); if (myimg != null) { myst += "\" width=\"" + myimg.getIconWidth() + "\" height=\"" + myimg.getIconHeight() + "\""; } myst += m.group(4); myst += "

"; m.appendReplacement(sb, myst); } m.appendTail(sb); m.reset(); content = sb.toString(); // Check if there are internal images (inside the jar archive with root // eric/GUI/icons/ : p = Pattern.compile("(]*src=\")(#)([^\"]+)(\"[^>]*>)", Pattern.CASE_INSENSITIVE); m = p.matcher(content); sb = new StringBuffer(); while (m.find()) { final URL myIMG = Global.getPath("eric/GUI/icons/" + m.group(3)); if (myIMG == null) continue; String myst = m.group(1); myst += myIMG.toString(); myst += m.group(4); m.appendReplacement(sb, myst); } m.appendTail(sb); m.reset(); content = sb.toString(); } void setTitle() { if (content.equals("")) { return; } content = content.replace("href=\"#", "class=\"aanchor\" href=\"#"); final URL myIMG = Global.getPath("eric/GUI/icons/palette/" + JHelpPanel.Subject + ".png"); final String mytitle = content.substring(0, content.indexOf("
")); String tag = ""; if (myIMG == null) { tag = ""; tag += ""; tag += "
" + mytitle + "
"; } else { tag = ""; tag += ""; tag += ""; tag += "
" + mytitle + "

"; } content = content.replaceFirst(mytitle, tag); } void setFooter() { final Enumeration e = JP.Related.elements(); String tag = ""; while (e.hasMoreElements()) { final String topic = (String) e.nextElement(); String topicTitle = ""; final Enumeration ev = JP.Other.elements(); while (ev.hasMoreElements()) { final String s[] = (String[]) ev.nextElement(); if (s[0].equals(topic)) { topicTitle = s[1]; break; } } tag += "" + topicTitle + ""; } if (!tag.equals("")) { content += ""; content += ""; content += tag; content += "
" + Global.Loc("contexthelp.seealso") + "
"; } } void setContent(final String s) { try { content = s; fixImagePath(); setTitle(); setFooter(); editorkit.insertHTML(doc, doc.getLength(), content, 0, 0, null); } catch (final Exception ex) { } // JP.focusTxt(); } public void hyperlinkUpdate(final HyperlinkEvent r) { if (r.getEventType() == javax.swing.event.HyperlinkEvent.EventType.ACTIVATED) { String lnk = ""; if (r.getDescription().startsWith("#")) { lnk = r.getDescription().substring(1); JHelpPanel.Subject = lnk; JP.clearSearchTxtField(); JP.fill(true); return; } else { lnk = r.getDescription(); if (!lnk.startsWith("http://")) { lnk = "http://" + lnk; } JBrowserLauncher.openURL(lnk); return; } } } } ./src/eric/restrict/0000755000175000017500000000000011362014163013316 5ustar yvesyves./src/eric/restrict/RestrictPanelComment.java0000644000175000017500000000151311362014162020262 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.restrict; import eric.GUI.palette.PaletteManager; import java.awt.Color; import java.awt.Font; import javax.swing.JLabel; import javax.swing.SwingUtilities; import rene.gui.Global; /** * * @author erichake */ public class RestrictPanelComment extends JLabel { public RestrictPanelComment() { super("
"+Global.Loc("restrict.comment")+"
"); setFont(new Font(Global.GlobalFont,0,12)); setForeground(Color.darkGray); PaletteManager.fixsize(this, RestrictContainer.getContainerWidth(), 60); setHorizontalTextPosition(SwingUtilities.CENTER); setHorizontalAlignment(SwingUtilities.CENTER); setVerticalAlignment(SwingUtilities.CENTER); } } ./src/eric/restrict/RestrictPanelIconsLineTitle.java0000644000175000017500000000500111362014162021541 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.restrict; import eric.GUI.palette.PaletteManager; import eric.JZirkelCanvas; import java.awt.Font; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import javax.swing.JCheckBox; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; /** * * @author erichake */ public class RestrictPanelIconsLineTitle extends RestrictPanelLine { private String name; private ArrayList icons=new ArrayList(); public RestrictPanelIconsLineTitle(String nme, String label) { super(label); name=nme; addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { setSelectedIcons(isSelected()); } }); initState(); } public void initState() { ZirkelCanvas zc=JZirkelCanvas.getCurrentZC(); if (zc!=null) { setSelected(!zc.isHiddenItem(name)); if (!isSelected()) { setSelectedIcons(false); } } } public void initIconsState() { for (int i=0; i iconslines=new ArrayList(); private RestrictNonPalettePreference menu,macr,hist,help,lib_macros; public RestrictPanel(){ setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); setBorder(BorderFactory.createEmptyBorder()); setOpaque(false); PaletteManager.fixsize(this, W,H ); add(marginH(MARGINH)); add(new RestrictPanelActiveLine(this, Global.Loc("restrict.activate"))); add(marginH(MARGINH)); add(new RestrictSeparator(SMALLMARGINH)); add(new RestrictPanelComment()); init_Disk_zone(); init_Edit_zone(); init_Construction_zone(); init_Func_zone(); init_Test_zone(); init_Control_zone(); init_Aspect_zone(); init_Grid_zone(); init_History_zone(); init_Back_zone(); init_Size_zone(); init_Prec_zone(); add(marginH(MARGINH)); add(new RestrictSeparator(SMALLMARGINH)); add(marginH(MARGINH)); add(menu=new RestrictNonPalettePreference(RestrictItems.MENU,Global.Loc("restrict.menubar"))); add(marginH(MARGINH)); add(macr=new RestrictNonPalettePreference(RestrictItems.MCRP,Global.Loc("restrict.macropanel"))); add(marginH(MARGINH)); add(hist=new RestrictNonPalettePreference(RestrictItems.HISTP,Global.Loc("restrict.historypanel"))); add(marginH(MARGINH)); add(help=new RestrictNonPalettePreference(RestrictItems.HLPP,Global.Loc("restrict.helppanel"))); add(marginH(MARGINH)); add(lib_macros=new RestrictNonPalettePreference(RestrictItems.LMCR, Global.Loc("restrict.librarymacros"))); } public static int getPanelWidth(){ return W; } public void setSelectAll(boolean b){ for (int i=0;i hiddenItems=new ArrayList(); public static final String DISK="z_disk"; public static final String EDIT="z_edit"; public static final String GEOM="z_geom"; public static final String ASPECT="z_aspect"; public static final String FUNC="z_func"; public static final String TEST="z_test"; public static final String CTRL="z_ctrl"; public static final String GRID="z_grid"; public static final String HIST="z_hist"; public static final String BACK="z_back"; public static final String SIZE="z_size"; public static final String PREC="z_prec"; public static final String MENU="x_menu"; // for menu bar public static final String MCRP="x_macr"; // for macro panel public static final String HISTP="x_hist"; // for history panel public static final String HLPP="x_help"; // for help panel public static final String LMCR="x_lmcr"; // for library macros public static String[] geom_icns, disk_icns, edit_icns, func_icns, test_icns, control_icns, grid_icns, history_icns, back_icns, size_icns, prec_icns; public static String standardRestrictedHiddenItems="save,copy,exportpng,exporteps,edit,animate,grid,z_disk,new,load,bi_trans,intersection,fixedsegment,vector,quadric,image3,z_func,tracker,objecttracker,locus,bi_function_u,function,equationxy,z_test,bi_t_align,bi_t_para,bi_t_perp,bi_t_equi,bi_t_app,bi_t_conf,z_ctrl,ctrl_edit,ctrl_slider,ctrl_popup,ctrl_chkbox,ctrl_txtfield,ctrl_button,z_grid,z_hist,z_back,z_size,z_prec"; public RestrictItems(ZirkelCanvas zc) { ZC=zc; } public boolean isRestricted() { return (hiddenItems.size()>0); } public boolean isHidden(String s) { for (int i=0; i get() { return hiddenItems; } public void set(String items) { hiddenItems=new ArrayList(Arrays.asList(items.split(","))); } public void set(ArrayList items) { hiddenItems.clear(); for (int i=0; i0) { hiddenItems=new ArrayList(Arrays.asList(standardRestrictedHiddenItems.split(","))); } } public void initRestrictedHiddenItems() { if (hiddenItems.size()==0) { String items=Global.getParameter("standardRestrictedHiddenItems", standardRestrictedHiddenItems); if ("".equals(items)) { hiddenItems=new ArrayList(); } else { hiddenItems=new ArrayList(Arrays.asList(items.split(","))); } } } public void setStandardRestrictedItems() { if (hiddenItems.size()>0) { Global.setParameter("standardRestrictedHiddenItems", getHiddenItems()); } } public String getHiddenItems() { // join hiddenItems ArrayList in a string with comma separator. // A shame there is no such a method in java ! String items=hiddenItems.toString(); items=items.replace(" ", ""); items=items.replace("[", ""); items=items.replace("]", ""); return items; } public void printArgs(final XmlWriter xml) { if (hiddenItems.size()>0) { xml.startTagStart("RestrictedSession"); xml.printArg("HiddenIcons", getHiddenItems()); xml.finishTagNewLine(); } } /************************************************************ * Initialisation of static parameters from PaletteManager : * **********************************************************/ public static void init_disk_icns(String icns[]) { disk_icns=icns; } public static void init_edit_icns(String icns[]) { edit_icns=icns; } public static void init_geom_icns(String icns[]) { geom_icns=icns; } public static void init_func_icns(String icns[]) { func_icns=icns; } public static void init_test_icns(String icns[]) { test_icns=icns; } public static void init_control_icns(String icns[]) { control_icns=icns; } public static void init_grid_icns(String icns[]) { grid_icns=icns; } public static void init_history_icns(String icns[]) { history_icns=icns; } public static void init_back_icns(String icns[]) { back_icns=icns; } public static void init_size_icns(String icns[]) { size_icns=icns; } public static void init_prec_icns(String icns[]) { prec_icns=icns; } /******************** * End Initialisation * ******************/ } ./src/eric/restrict/RestrictContainerControls.java0000644000175000017500000000661511362014160021354 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.restrict; import eric.GUI.palette.PaletteManager; import eric.GUI.themes; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; /** * * @author erichake */ public class RestrictContainerControls extends JPanel { ZirkelCanvas ZC; private static Image offimage=themes.getImage("tab_bottom.gif"); private ArrayList originalItems; private RestrictPanel panel; @Override public void paintComponent(Graphics g){ Dimension d=getSize(); g.setColor(new Color(230,230,230)); g.fillRect(0, 0, d.width, d.height); g.setColor(new Color(130,130,130)); g.drawLine(0, 0, d.width, 0); } public RestrictContainerControls(RestrictPanel pan,ZirkelCanvas zc) { ZC=zc; panel=pan; // backup of restricted hidden items : originalItems=new ArrayList(); ArrayList items=ZC.getHiddenItems(); for (int i=0;i. */ package eric; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Toolkit; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.SwingUtilities; import rene.gui.Global; public class JLogoWindow extends JFrame { /** * */ private static final long serialVersionUID = 1L; private final ImageIcon backimage = new ImageIcon(getClass().getResource( "/rene/zirkel/logowindow.jpg")); public JLogoWindow() { setSize(300, 150); getSize(); final Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); this.setLocation((dim.width - 300) / 2, (dim.height - 150) / 2); this.setUndecorated(true); setVisible(true); setAlwaysOnTop(true); } @Override public void paint(final java.awt.Graphics g) { super.paint(g); final java.awt.Dimension d = this.getSize(); g.drawImage(backimage.getImage(), 0, 0, d.width, d.height, this); g.setFont(new Font("Dialog", Font.PLAIN, 11)); String s = Global.name("version") + " " + Global.name("program.version"); g.setColor(Color.darkGray); g.drawString(s, 115, 75); g.setFont(new Font("Dialog", Font.PLAIN, 11)); g.setColor(Color.GRAY); s = "java : " + System.getProperty("java.version"); g.drawString(s, 125, 95); } static public JLogoWindow JLW; static public void ShowLogoWindow() { JLW=new JLogoWindow(); } static public void DisposeLogoWindow() { SwingUtilities.invokeLater(new Runnable() { public void run() { if (JLW!=null){ JLW.dispose(); JLW=null; } } }); } } ./src/eric/JGlobalPreferencesCursor.java0000644000175000017500000000764411302754037017234 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric; import java.awt.Color; import java.awt.Font; import javax.swing.BoxLayout; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import rene.gui.Global; /** * * @author erichake */ public class JGlobalPreferencesCursor extends JPanel { /** * */ private static final long serialVersionUID = 1L; JLabel mylabel, myval; public JSlider mycursor; String myP, mytxt; int PW = 300;// standard palette width boolean palmember = false; /** Creates a new instance of JCursor */ @Override public void paintComponent(final java.awt.Graphics g) { super.paintComponent(g); } // JCursor constructor for palette member : public JGlobalPreferencesCursor(final String myparam, final String mytext, final int min, final int max, int sel) { // this(mytext,40,min,max,rene.gui.Global.getParameter(myparam,sel)); sel = Global.getParameter(myparam, sel); myP = myparam; palmember = true; final int lblwidth = 150; final int valwidth = 20; final int valheight = 27; mytxt = mytext; mycursor = new JSlider(); mylabel = new JLabel(); myval = new JLabel(); this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); // this.setAlignmentX(0); mylabel.setText(" " + mytxt); mylabel.setForeground(Color.DARK_GRAY); mylabel.setFont(new Font(Global.GlobalFont, Font.PLAIN, 13)); mylabel.setSize(lblwidth, 27); mylabel.setMaximumSize(new java.awt.Dimension(lblwidth, 27)); mylabel.setMinimumSize(new java.awt.Dimension(lblwidth, 27)); mylabel.setPreferredSize(new java.awt.Dimension(lblwidth, 27)); myval.setText(String.valueOf(sel)); myval.setForeground(Color.GRAY); myval.setFont(new java.awt.Font(Global.GlobalFont, Font.BOLD, 13)); myval.setSize(valwidth, valheight); myval.setMaximumSize(new java.awt.Dimension(valwidth, valheight)); myval.setMinimumSize(new java.awt.Dimension(valwidth, valheight)); myval.setPreferredSize(new java.awt.Dimension(valwidth, valheight)); mycursor.setFont(new java.awt.Font(Global.GlobalFont, 0, 11)); mycursor.setOpaque(false); mycursor.setMajorTickSpacing(1); mycursor.setMaximum(max); mycursor.setMinimum(min); mycursor.setMinorTickSpacing(1); mycursor.setPaintLabels(false); mycursor.setPaintTicks(false); mycursor.setSnapToTicks(true); mycursor.setValue(sel); mycursor.setAlignmentX(0.0F); mycursor.setMaximumSize(new java.awt.Dimension( PW - lblwidth - valwidth, valheight)); mycursor.setMinimumSize(new java.awt.Dimension( PW - lblwidth - valwidth, valheight)); mycursor.setPreferredSize(new java.awt.Dimension(PW - lblwidth - valwidth, valheight)); mycursor.setSize(new java.awt.Dimension(PW - lblwidth - valwidth, valwidth)); mycursor.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(final javax.swing.event.ChangeEvent evt) { final JSlider myc = (JSlider) evt.getSource(); final int mysel = myc.getValue(); rene.gui.Global.setParameter(myP, mysel); myval.setText(String.valueOf(mysel)); } }); this.add(mylabel); this.add(mycursor); this.add(myval); this.setOpaque(false); this.setMaximumSize(new java.awt.Dimension(PW, 27)); this.setMinimumSize(new java.awt.Dimension(PW, 27)); this.setPreferredSize(new java.awt.Dimension(PW, 27)); this.setSize(PW, 27); } } ./src/eric/GUI/0000755000175000017500000000000011363002666012111 5ustar yvesyves./src/eric/GUI/.cvsignore0000644000175000017500000000001211313421107014070 0ustar yvesyves.DS_Store ./src/eric/GUI/palette/0000755000175000017500000000000011355647641013560 5ustar yvesyves./src/eric/GUI/palette/PaletteZoneLabel.java0000644000175000017500000000173511311147025017602 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.palette; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JLabel; /** * * @author erichake */ public class PaletteZoneLabel extends JLabel { public PaletteZoneLabel(String txt) { super(txt); } public void paintComponent(Graphics g) { Dimension d=getSize(); Graphics2D g2=(Graphics2D) g; g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.05f)); g2.setColor(new Color(0, 0, 255)); g2.fillRect(3, 3, d.width-6, d.height-6); g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.15f)); g2.drawRect(3, 3, d.width-7, d.height-7); g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f)); super.paintComponent(g); } } ./src/eric/GUI/palette/PaletteZone_Aspect.java0000644000175000017500000001241311341054307020137 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.palette; import eric.GUI.themes; import eric.JColorPicker; import eric.JZirkelCanvas; import java.awt.Color; import java.util.Vector; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.SwingConstants; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; /** * * @author erichake */ public class PaletteZone_Aspect extends PaletteZone { private static int content_height; private static String[] types={"type0", "type1", "type2", "type3", "type4", "type5"}; private static String[] colors= { "color0", "color1", "color2", "color3","color4", "color5" }; private static String[] thickness = { "thickness0", "thickness1", "thickness2" }; private static int label_lineheight=20; private static PaletteZoneLabel pointshape_label,aspect_label; private static JPanel point_name_panel; private static JColorPicker color_picker; public PaletteZone_Aspect() { super(Global.Loc("palette.aspect")); pointshape_label=addLabel(Global.Loc("palette.aspect.label.pointshape")); point_name_panel=new JPanel(); point_name_panel.setLayout(new BoxLayout(point_name_panel, BoxLayout.X_AXIS)); point_name_panel.setOpaque(false); add7iconsString(types,PaletteManager.POINT_GROUP); addComponent(point_name_panel); aspect_label=addLabel(""); Vector V=add7iconsString(colors, PaletteManager.ASPECT1_GROUP); color_picker=new JColorPicker(V.get(0).getIconWidth(), 6, 3,V){ @Override public void doChange() { JIcon.setObjectColor(getCurrentColor()); } @Override public void afterSelect() { JIcon.setObjectColor(getCurrentColor()); // JPM.MW.ZF.setinfo("prop_scolor", false); } @Override public void setPalettes() { ZirkelCanvas zc=JZirkelCanvas.getCurrentZC(); if (zc!=null){ setUsedColors(zc.getConstruction().getSpecialColors()); } } }; addComponent(color_picker); createIcons(thickness,PaletteManager.ASPECT2_GROUP); createToggleIcon("partial"); createToggleIcon("plines"); createToggleIcon("showvalue"); createToggleIcon("showname"); createToggleIcon("bold"); createToggleIcon("large"); createToggleIcon("filled"); createToggleIcon("obtuse"); createToggleIcon("solid"); // setContentHeight(200); } public static JColorPicker getColorPicker(){ return color_picker; } public void init() { PaletteManager.fixsize(pointshape_label, themes.getRightPanelWidth(), label_lineheight); PaletteManager.fixsize(aspect_label, themes.getRightPanelWidth(), label_lineheight); initPointNameBtn(); super.init(); // zone_title.init(); // for (JIcon element : icons) { // element.init(); // } // zone_content.init(); } public void initPointNameBtn() { point_name_panel.removeAll(); JZirkelCanvas JZF=JZirkelCanvas.getCurrentJZF(); if (JZF!=null) { point_name_panel.add(JZF.getPointLabel().getPaletteButton()); JButton jb=JZF.getPointLabel().getPaletteButton(); int w=(themes.getPaletteIconPerRow()*themes.getPaletteIconWidth())/7; PaletteManager.fixsize(jb, w, w); point_name_panel.add(jb); point_name_panel.validate(); point_name_panel.repaint(); } } public void setLabel(String s){ aspect_label.setText(s); repaint(); } private PaletteZoneLabel addLabel(final String mytxt) { PaletteZoneLabel mylabel=new PaletteZoneLabel(mytxt); mylabel.setOpaque(false); mylabel.setFont(new java.awt.Font(Global.GlobalFont, 1, 11)); mylabel.setForeground(new Color(100, 100, 100)); mylabel.setHorizontalAlignment(SwingConstants.CENTER); addComponent(mylabel); return mylabel; } private Vector add7iconsString(String icns[],String group) { Vector V=new Vector(); for (final String element : icns) { JIcon ji=new JIcon(element,group , 7); addIcon(ji); V.add(ji); } return V; } public void addColorIcons(final String myname[], String group) { add7iconsString(myname, group); addComponent(JColorPicker.margin(5)); // JColorPicker jcp=new JColorPicker(themes.getPaletteIconWidth()-5, 6, 3) { // // /** // * // */ // // // @Override // public void doChange() { // JPM.setObjectColor(getCurrentColor()); // } // // @Override // public void afterSelect() { // JPM.setObjectColor(getCurrentColor()); // JPM.MW.ZF.setinfo("prop_scolor", false); // } // // @Override // public void setPalettes() { // setUsedColors(JPM.MW.ZF.ZC.getConstruction().getSpecialColors()); // } // }; // myLine.add(JPM.MW.ColorPicker); // addNewLine(); } } ./src/eric/GUI/palette/PaletteZoneContent.java0000644000175000017500000000405111355651653020206 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.palette; import eric.GUI.themes; import eric.GUI.windowComponent; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Image; import javax.swing.JComponent; /** * * @author erichake */ public class PaletteZoneContent extends windowComponent { private static Image back=themes.getImage("palbackground.gif"); private boolean visible=true; private int height=-1; private PaletteZone parent; @Override public void paintComponent(Graphics g) { Dimension d=getSize(); g.drawImage(back, 0, 0, d.width, d.height, this); } // For Restricted Palette only : public void setVisibleHeight() { int nb=0; // count visible icons : for (int i=0; i0)) { if (PaletteManager.isPaletteWithIconOnly(parent)) { setVisibleHeight(); } else { JComponent ji=(JComponent) getComponent(getComponentCount()-1); int start=getSize().height; int bottom=ji.getBounds().y+ji.getBounds().height; PaletteManager.fixsize(this, themes.getRightPanelWidth(), bottom); } } else { PaletteManager.fixsize(this, themes.getRightPanelWidth(), 0); } } public void setHide(boolean b) { visible=!b; } public PaletteZoneContent(PaletteZone zone) { super(); parent=zone; setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); setAlignmentX(0.0f); } } ./src/eric/GUI/palette/JIconMouseAdapter.java0000644000175000017500000000303211340200574017715 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.palette; import eric.GUI.themes; import eric.JZirkelCanvas; import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import rene.zirkel.ZirkelCanvas; /** * * @author erichake */ public class JIconMouseAdapter implements MouseMotionListener { private static ZirkelCanvas ZC=null; private static String geomSelectedIcon="point"; private static String acceptedIcons=",hide,delete,ctrl_slider,ctrl_txtfield,ctrl_popup,ctrl_chkbox,ctrl_button,"; public static void setgeomSelectedIcon() { ZC=JZirkelCanvas.getCurrentZC(); if (ZC!=null) { geomSelectedIcon=PaletteManager.geomSelectedIcon(); if ((acceptedIcons.indexOf(geomSelectedIcon)==-1)||(geomSelectedIcon.equals(""))) { ZC=null; } } } public static void deselect() { ZC=null; } public static void paintTool() { if (ZC!=null) { final Point pt=ZC.getMousePosition(); try { ZC.getGraphics().drawImage(ZC.I, 0, 0, ZC); ZC.getGraphics().drawImage(themes.getPaletteImage(geomSelectedIcon), pt.x+5, pt.y+5, themes.getToolIconSize(), themes.getToolIconSize(), ZC); } catch (Exception ex) { } } } @Override public void mouseMoved(MouseEvent e) { paintTool(); } public void mouseDragged(MouseEvent e) { } } ./src/eric/GUI/palette/JIcon.java0000644000175000017500000004777411360604726015441 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.palette; import eric.FileTools; import eric.GUI.pipe_tools; import eric.GUI.themes; import eric.GUI.window.LeftPanel; import eric.GUI.window.tab_main_panel; import java.awt.image.ImageFilter; import eric.GUI.windowComponent; import eric.JZirkelCanvas; import eric.macros.CreateMacroDialog; import eric.macros.MacroTools; import java.awt.AlphaComposite; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Point; import java.awt.Stroke; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.FilteredImageSource; import javax.swing.GrayFilter; import javax.swing.ImageIcon; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.ZirkelFrame; import rene.zirkel.constructors.AreaConstructor; import rene.zirkel.constructors.QuadricConstructor; import rene.zirkel.tools.JLocusObjectTracker; import rene.zirkel.tools.ObjectTracker; /** * * @author erichake */ public class JIcon extends windowComponent { // icon_group==null means simple push button // icon_group==icon_name name means simple toggle button private String icon_name=""; private String icon_group=""; private boolean isSelected; // icon state private boolean isDisabled=false; // icon disabled ? private boolean isEntered=false; // Mouseover ? private Image image=null; private int IconsPerRow=-1; // Number of icons per row. // If -1 then this is the standard number defined // by themes.palette_icon_per_row @Override public void paintComponent(final java.awt.Graphics g) { super.paintComponent(g); final java.awt.Dimension d=this.getSize(); final int w=d.width; final int h=d.height; final Graphics2D g2=windowComponent.getGraphics2D(g); if (isDisabled) { final ImageFilter filter=new GrayFilter(true, 60); final Image disImage=createImage(new FilteredImageSource(image.getSource(), filter)); final ImageIcon myicn=new ImageIcon(disImage); g2.drawImage(myicn.getImage(), 0, 0, w, h, this); return; } g2.drawImage(image, 0, 0, w, h, this); if (isSelected) { final AlphaComposite ac=AlphaComposite.getInstance( AlphaComposite.SRC_OVER, 0.2f); g2.setComposite(ac); g2.setColor(new Color(0, 0, 100)); // g2.fillRoundRect(1,1,w-1,h-1,14,14); g2.fillRect(1, 1, w-1, h-1); } if (isEntered) { final AlphaComposite ac=AlphaComposite.getInstance( AlphaComposite.SRC_OVER, 0.1f); g2.setComposite(ac); g2.setColor(new Color(0, 0, 80)); final Stroke stroke=new BasicStroke(3f); g2.setStroke(stroke); g2.drawRect(2, 2, w-4, h-4); } } public JIcon(String name, String group) { super(); icon_name=name; icon_group=group; image=themes.getPaletteImage(name); PaletteManager.registerIcon(this); String ttp=PaletteManager.ToolTip(name); if (ttp!=null) { setToolTipText(""+ttp.replace("+", "
")+""); } setOpaque(false); } public JIcon(String name, String group, int iconperrow) { this(name, group); IconsPerRow=iconperrow; } public String getIconGroup() { return icon_group; } public String getIconName() { return icon_name; } public boolean isToggleButton() { return (icon_name.equals(icon_group)); } public boolean isPushButton() { return (icon_group==null); } public void setOver(boolean b) { isEntered=b; } public void setSelected(boolean b) { isSelected=b; } public void setDisabled(boolean b) { isDisabled=b; } public boolean isSelected() { return isSelected; } public boolean isDisabled() { return isDisabled; } public void init() { int w=getIconWidth(); setPreferredSize(new Dimension(w, w)); } public int getIconWidth() { if (IconsPerRow==-1) { return themes.getPaletteIconWidth(); } else { int w=(themes.getPaletteIconPerRow()*themes.getPaletteIconWidth())/IconsPerRow; return w; } } @Override public Point getToolTipLocation(MouseEvent event) { return new Point(getSize().width/2, getSize().height+4); } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { ClicOnMe(); } @Override public void mouseReleased(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { PaletteManager.setOverBtn(this); } @Override public void mouseExited(MouseEvent e) { isEntered=false; PaletteManager.repaint(); } private static ZirkelFrame ZF; private static ZirkelCanvas ZC; private static JZirkelCanvas JZF; private static String moveonreselect=",delete,hide,rename,edit,zoom,animate,"; private static void TasksBeforeClick(JIcon me) { ZF.CurrentTool=0; if (PaletteManager.isGeomGroup(me.getIconName())) { AreaConstructor.deletePreview(ZF.ZC); QuadricConstructor.deletePreview(ZF.ZC); } CreateMacroDialog.quit(); ZF.ZC.JCM.hideHandles(null); } public void ClicOnMe() { if ((moveonreselect.indexOf(","+icon_name+",")!=-1)&&(isSelected)) { PaletteManager.setSelected_with_clic("move", true); return; } PaletteManager.setSelectBtn(this); ZF=JZirkelCanvas.getCurrentZF(); JZF=JZirkelCanvas.getCurrentJZF(); ZC=JZirkelCanvas.getCurrentZC(); if (ZC==null) { return; } PaletteManager.setGoodProperties(icon_name); TasksBeforeClick(this); action(this, icon_name); } private static boolean checkReplay(String o) { if (o.equals("oneforward")) { JZF.getReplay().iconPressed(o); } else if (o.equals("oneback")) { JZF.getReplay().iconPressed(o); } else if (o.equals("fastforward")) { JZF.getReplay().iconPressed(o); } else if (o.equals("fastback")) { JZF.getReplay().iconPressed(o); } else if (o.equals("allforward")) { JZF.getReplay().iconPressed(o); } else if (o.equals("setbreak")) { JZF.getReplay().iconPressed(o); } else if (o.equals("nextbreak")) { JZF.getReplay().iconPressed(o); } else { JZF.getReplay().doclose(); return false; } return true; } private static void action(JIcon me, String o) { if (checkReplay(o)) { return; } ZC.pause(true); ZC.requestFocus(); ZF.setinfo(o); if (o.equals("load")) { ZF.setinfo("save"); FileTools.openFile(); } else if (o.equals("save")) { ZF.setinfo("save"); FileTools.saveFile(); } else if (o.equals("new")) { tab_main_panel.newTabBtn(); pipe_tools.actualiseMacroPanel(); } else if (o.equals("newmacro")) { new CreateMacroDialog(JZirkelCanvas.getNewMacroPanel()); JZirkelCanvas.ActualiseMacroPanel(); } else if (o.equals("manage_macros")) { LeftPanel.showPanel(me.isSelected); } else if (o.startsWith("type")) { ZF.settype(Integer.parseInt(o.substring(4))); ZF.setinfo("zone_aspect"); } else if (o.startsWith("thickness")) { setObjectColorType(Integer.parseInt(o.substring(9))); ZF.setinfo("zone_aspect"); } else if (o.startsWith("filled")) { setObjectFilled(me.isSelected); } else if (o.startsWith("color")) { ZF.setinfo("zone_aspect"); setObjectColor(Integer.parseInt(o.substring(5))); } else if (o.startsWith("acolor")) { final int chx=Integer.parseInt(o.substring(6)); ZF.ZC.setAxis_color(chx); ZF.ZC.repaint(); } else if (o.startsWith("athickness")) { final int chx=Integer.parseInt(o.substring(10)); ZF.ZC.setAxis_thickness(chx); ZF.ZC.repaint(); } else if (o.equals("numgrid")) { ZF.ZC.setAxis_labels(me.isSelected); ZF.ZC.repaint(); } else if (o.equals("dottedgrid")) { ZF.ZC.setAxis_with_grid(me.isSelected); ZF.ZC.repaint(); } else if (o.equals("vector")) { ZF.setVectors(true); ZF.settool("segment"); } else if (o.equals("segment")) { ZF.setVectors(false); ZF.settool("segment"); } else if (o.equals("fixedsegment")) { ZF.setVectors(false); ZF.settool("fixedsegment"); } else if (o.equals("image3")) { ZF.settool("image"); // if (!ZF.haveFile()) { // JOptionPane.showMessageDialog(null, Global.Loc("palette.image.fileerror")); //// PaletteManager.MW.savefile(); // } // // if (ZF.haveFile()) { // ZF.settool("image"); // } else { // PaletteManager.setSelected("point", true); // } } else if (o.equals("background")) { ZF.setinfo("background"); if (me.isSelected) { Global.setParameter("background.usesize", false); Global.setParameter("background.tile", false); Global.setParameter("background.center", true); ZF.loadBackground(); PaletteManager.setSelected_with_clic("imcenter", true); } else { ZF.ZC.grab(false); } } else if (o.equals("imcenter")) { rene.gui.Global.setParameter("background.usesize", false); rene.gui.Global.setParameter("background.tile", false); rene.gui.Global.setParameter("background.center", true); ZF.setinfo("background"); ZF.ZC.repaint(); } else if (o.equals("imtile")) { rene.gui.Global.setParameter("background.usesize", false); rene.gui.Global.setParameter("background.tile", true); rene.gui.Global.setParameter("background.center", false); ZF.setinfo("background"); ZF.ZC.repaint(); } else if (o.equals("imstretch")) { rene.gui.Global.setParameter("background.usesize", true); rene.gui.Global.setParameter("background.tile", false); rene.gui.Global.setParameter("background.center", false); ZF.setinfo("background"); ZF.ZC.repaint(); // } else if (name.equals("loadmacros")) { // JMacrosTools.OpenMacro(""); // } else if (name.equals("new")) { // JMacrosTools.NewWindow(); // } else if (name.equals("load")) { // JMacrosTools.OpenFile(); // } else if (name.equals("save")) { // PaletteManager.MW.savefile(); } else if (o.equals("allback")) { // ZF.settool(ZF.NParameters); JZF.disposeReplay(); JZF.newReplay(); JZF.getReplay().iconPressed(o); } else if (o.equals("partial")) { ZF.ZC.setPartial(me.isSelected); } else if (o.equals("plines")) { ZF.ZC.setPartialLines(me.isSelected); } else if (o.equals("showvalue")) { setObjectShowValue(me.isSelected); } else if (o.equals("hidden")) { ZF.sethidden(me.isSelected); ZC.reloadCD(); ZF.setinfo("hidden"); } else if (o.equals("showname")) { setObjectShowName(me.isSelected); } else if (o.equals("bold")) { setObjectBold(me.isSelected); } else if (o.equals("large")) { setObjectLarge(me.isSelected); } else if (o.equals("longnames")) { ZF.setLongNames(me.isSelected); ZF.setinfo("defaults"); } else if (o.equals("obtuse")) { setObjectObtuse(me.isSelected); } else if (o.equals("solid")) { setObjectSolid(me.isSelected); } else if (o.equals("grid")) { ZF.ZC.setAxis_show(me.isSelected); if (me.isSelected) { ZF.ZC.createAxisObjects(); } else { ZF.ZC.deleteAxisObjects(); } ZF.ZC.repaint(); ZF.setinfo("grid"); } else if (o.equals("objecttracker")) { ZirkelFrame.ObjectConstructors[ZirkelFrame.NObjectTracker]=new ObjectTracker(); ZF.settool("objecttracker"); } else if (o.equals("locus")) { ZirkelFrame.ObjectConstructors[ZirkelFrame.NObjectTracker]=new JLocusObjectTracker(); ZF.settool("objecttracker"); } else if (o.equals("function")) { ZF.ZC.createCurve(); ZF.setinfo("function"); } else if (o.equals("equationxy")) { ZF.ZC.createEquationXY(); // } else if (name.equals("manage_macros")) { // PaletteManager.MW.ZContent.ShowLeftPanel(2); // } else if (name.equals("help_panel")) { // PaletteManager.MW.ZContent.ShowLeftPanel(3); // } else if (name.equals("newmacro")) { // PaletteManager.MW.ZContent.ShowMacroPanel(); // PaletteManager.MW.ZContent.macros.myJML.MacrosTree.JML.controls.createbtn.setSelected(true); // PaletteManager.MW.ZContent.macros.myJML.MacrosTree.JML.createmacropanel.appeargently(); // PaletteManager.deselectgeomgroup(); // } else if (name.equals("history_panel")) { // PaletteManager.MW.ZContent.ShowLeftPanel(1); // // } else if (name.equals("properties_panel")){ // // JGlobals.JPB.showme(me.isSelected); } else if (o.equals("copy")) { FileTools.savepng(false); } else if (o.equals("exportpng")) { FileTools.savepng(true); } else if (o.equals("exporteps")) { FileTools.saveeps(); } else if (o.startsWith("bi_")) { if (o.equals("bi_function_u")) { Global.setParameter("options.point.shownames", false); JZF.getPointLabel().getBetterName(null, true); } MacroTools.runBuiltinMacro("@builtin@/"+o.substring(3)); } else if (o.equals("back")) { ZF.ZC.back(); ZF.settool(o); } else if (o.equals("undo")) { ZF.ZC.undo(); ZF.settool(o); } else if (o.equals("boundedpoint")) { ZF.settool("boundedpoint"); } else if (o.equals("ctrl_slider")) { ZF.ZC.setNullTool(); } else if (o.equals("ctrl_popup")) { ZF.ZC.setNullTool(); } else if (o.equals("ctrl_chkbox")) { ZF.ZC.setNullTool(); } else if (o.equals("ctrl_button")) { ZF.ZC.setNullTool(); } else if (o.equals("ctrl_edit")) { ZF.ZC.setNullTool(); } else if (o.equals("ctrl_txtfield")) { ZF.ZC.setNullTool(); } else { ZF.settool(o); } JIconMouseAdapter.setgeomSelectedIcon(); ZC.pause(false); ZC.requestFocus(); } private static boolean isIconWithProperties(final String name) { final String acceptedIcons=",expression,locus,bi_function_u,text,area,ray,segment,"+"line,point,parallel,plumb,intersection,midpoint,bi_syma,"+"bi_symc,bi_trans,bi_med,bi_biss,vector,fixedsegment,circle,"+"circle3,fixedcircle,bi_arc,bi_circ,angle,fixedangle,quadric,"+"boundedpoint,"; return (acceptedIcons.indexOf(","+name+",")!=-1); } public static void setObjectColor(final int i) { String iconname=PaletteManager.geomSelectedIcon(); if (isIconWithProperties(iconname)) { iconname=PaletteManager.IconFamily(iconname); Global.setParameter("options."+iconname+".pcolor", (Color) null); Global.setParameter("options."+iconname+".color", i); PaletteZone_Aspect.getColorPicker().setSelected(false); PaletteZone_Aspect.getColorPicker().setDefaultColor(); } else { ZF.setcolor(i); } } public static void setObjectColor(final Color c) { String iconname=PaletteManager.geomSelectedIcon(); if (isIconWithProperties(iconname)) { iconname=PaletteManager.IconFamily(iconname); Global.setParameter("options."+iconname+".pcolor", c); } } private static void setObjectColorType(final int i) { String iconname=PaletteManager.geomSelectedIcon(); if (isIconWithProperties(iconname)) { iconname=PaletteManager.IconFamily(iconname); Global.setParameter("options."+iconname+".colortype", i); } else { ZF.setcolortype(i); } } private static void setObjectShowName(final boolean bool) { String iconname=PaletteManager.geomSelectedIcon(); if (isIconWithProperties(iconname)) { iconname=PaletteManager.IconFamily(iconname); Global.setParameter("options."+iconname+".shownames", bool); } else { ZF.setShowNames(bool); } ZF.setinfo("defaults"); JZF.getPointLabel().getBetterName(null, true); } private static void setObjectShowValue(final boolean bool) { String iconname=PaletteManager.geomSelectedIcon(); if (isIconWithProperties(iconname)) { iconname=PaletteManager.IconFamily(iconname); Global.setParameter("options."+iconname+".showvalues", bool); } else { ZF.ZC.setShowValues(bool); } } private static void setObjectFilled(final boolean bool) { String iconname=PaletteManager.geomSelectedIcon(); if (isIconWithProperties(iconname)) { iconname=PaletteManager.IconFamily(iconname); Global.setParameter("options."+iconname+".filled", bool); } else { // ZF.ZC.setShowValues(bool); } } private static void setObjectSolid(final boolean bool) { String iconname=PaletteManager.geomSelectedIcon(); if (isIconWithProperties(iconname)) { iconname=PaletteManager.IconFamily(iconname); Global.setParameter("options."+iconname+".solid", bool); } else { // ZF.ZC.setShowValues(bool); } } private static void setObjectLarge(final boolean bool) { String iconname=PaletteManager.geomSelectedIcon(); if (isIconWithProperties(iconname)) { iconname=PaletteManager.IconFamily(iconname); Global.setParameter("options."+iconname+".large", bool); } else { ZF.ZC.setLargeFont(bool); } } private static void setObjectBold(final boolean bool) { String iconname=PaletteManager.geomSelectedIcon(); if (isIconWithProperties(iconname)) { iconname=PaletteManager.IconFamily(iconname); Global.setParameter("options."+iconname+".bold", bool); } else { ZF.ZC.setBoldFont(bool); } } private static void setObjectObtuse(final boolean bool) { String iconname=PaletteManager.geomSelectedIcon(); if (isIconWithProperties(iconname)) { iconname=PaletteManager.IconFamily(iconname); Global.setParameter("options."+iconname+".obtuse", bool); } else { ZF.ZC.setObtuse(bool); } } } ./src/eric/GUI/palette/JColorPanel.java0000644000175000017500000002565611360371051016572 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric.GUI.palette; import eric.GUI.themes; import eric.JZirkelCanvas; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Stroke; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import javax.swing.BoxLayout; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; import net.java.dev.colorchooser.ColorChooser; import net.java.dev.colorchooser.Palette; import rene.gui.Global; /** * * @author erichake */ public class JColorPanel extends JPanel implements MouseListener, MouseMotionListener { /** * */ private final ColorChooser cchooser; private Palette Pal; int PaletteType; int xx, yy; colorline mycolorpickerline; JComboBox JCB; JLabel comment; JColorPanel me; /** * * @param g */ @Override public void paintComponent(final java.awt.Graphics g) { super.paintComponent(g); final java.awt.Dimension d=this.getSize(); g.drawImage(themes.getImage("palbackground.gif"), 0, 0, d.width, d.height, this); } /** * Creates a new instance of JColorPanel * * @param zf * @param jpm */ public JColorPanel() { me=this; xx=-1; yy=-1; PaletteType=Global.getParameter("colorbackgroundPal", 1); cchooser=new ColorChooser(); this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); this.setAlignmentX(0); this.setOpaque(false); this.add(margintop(5)); JCB=new JComboBox(); JCB.setMaximumRowCount(5); JCB.setOpaque(false); JCB.setFocusable(false); JCB.setEditable(false); JCB.setAlignmentX(0); JCB.setFont(new Font("System", 0, 11)); JCB.addItem(Global.Loc("palette.colors.saturated1")); JCB.addItem(Global.Loc("palette.colors.desaturated1")); JCB.addItem(Global.Loc("palette.colors.saturated2")); JCB.addItem(Global.Loc("palette.colors.desaturated2")); JCB.addItem(Global.Loc("palette.colors.constants")); JCB.setSelectedIndex(PaletteType); JCB.addItemListener(new ItemAdapter()); final JPanel JCBpanel=new JPanel(); JCBpanel.setLayout(new BoxLayout(JCBpanel, BoxLayout.X_AXIS)); JCBpanel.setAlignmentX(0); JCBpanel.setOpaque(false); fixsize(JCBpanel, themes.getRightPanelWidth(), 24); JCBpanel.add(margin(5)); fixsize(JCB, themes.getRightPanelWidth()-10, 22); JCBpanel.add(JCB); this.add(JCBpanel); mycolorpickerline=new colorline(PaletteType); this.add(mycolorpickerline); comment=new JLabel("coucou"); comment.setOpaque(false); comment.setAlignmentX(0); comment.setFont(new Font("System", 0, 9)); fixsize(comment, themes.getRightPanelWidth(), 14); comment.setHorizontalAlignment(SwingConstants.CENTER); this.add(comment); } public void refresh(){ JCB.setSelectedIndex(Global.getParameter("colorbackgroundPal", 1)); } class ItemAdapter implements ItemListener { public void itemStateChanged(final ItemEvent evt) { if (evt.getStateChange()==ItemEvent.SELECTED) { me.remove(mycolorpickerline); mycolorpickerline=new colorline(JCB.getSelectedIndex()); Global.setParameter("colorbackgroundPal", JCB.getSelectedIndex()); me.add(mycolorpickerline, 2); int x=Global.getParameter("colorbackgroundx", 74); int y=Global.getParameter("colorbackgroundy", 12); x=x*Pal.getSize().width/mycolorpickerline.mycolors.getSize().width; y=y*Pal.getSize().height/mycolorpickerline.mycolors.getSize().height; final Color mycolor=Pal.getColorAt(x, y); if (mycolor!=null) { Global.setParameter("colorbackground", mycolor); } me.repaint(); PaletteManager.init(); } } } public JDialog GetDialog(final Component c) { if (c instanceof JDialog||null==c) { return c==null?null:(JDialog) c; } return GetDialog(c.getParent()); } class colorline extends JPanel { /** * */ JPanel mymargin; onlycolors mycolors; colorline(final int ptype) { PaletteType=ptype; Pal=cchooser.getPalettes()[ptype]; this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); this.setAlignmentX(0); mymargin=margin(0); if (themes.getRightPanelWidth()>Pal.getSize().width) { fixsize(mymargin, (themes.getRightPanelWidth()-Pal.getSize().width)/2, 1); } this.add(mymargin); mycolors=new onlycolors(ptype); this.add(mycolors); this.setOpaque(false); } // public void fixmargin(){ // if (PW>Pal.getSize().width){ // fixsize(mymargin,(PW-Pal.getSize().width)/2,1); // } // } // public void setPalette(int i){ // mycolors.changePal(i); // fixmargin(); // } } private class onlycolors extends JPanel { /** * */ Image bimage; @Override public void paintComponent(final java.awt.Graphics g) { super.paintComponent(g); final Dimension d=this.getSize(); final int w=d.width; final int h=d.height; g.drawImage(bimage, 0, 0, w, h, this); final Color mycolor=Global.getParameter("colorbackground", new Color(231, 238, 255)); cchooser.setColor(mycolor); if (JZirkelCanvas.getCurrentZC()!=null) { JZirkelCanvas.getCurrentZC().setBackground(mycolor); JZirkelCanvas.getCurrentZC().repaint(); } int x=Global.getParameter("colorbackgroundx", 74); int y=Global.getParameter("colorbackgroundy", 12); if (PaletteType==4) { x=((int) (x/12))*12+6; y=((int) (y/12))*12+6; } final Graphics2D g2=(Graphics2D) g; // AlphaComposite ac = // AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.5f); // g2.setComposite(ac); g2.setColor(new Color(0, 0, 0)); Stroke stroke=new BasicStroke(1f); g2.setStroke(stroke); g2.drawRect(x-4, y-4, 8, 8); stroke=new BasicStroke(1f); g2.setStroke(stroke); g2.setColor(new Color(255, 255, 255)); g2.drawRect(x-3, y-3, 6, 6); // g.drawRect(x-5,y-5,10,10); comment.setText(Pal.getNameAt(x, y)); } onlycolors(final int ptype) { final int w=(themes.getRightPanelWidth()mycolorpickerline.mycolors.getSize().width) { x=mycolorpickerline.mycolors.getSize().width; } if (x<0) { x=0; } if (y>mycolorpickerline.mycolors.getSize().height) { y=mycolorpickerline.mycolors.getSize().height; } if (y<0) { y=0; } Global.setParameter("colorbackgroundx", x); Global.setParameter("colorbackgroundy", y); x=x*Pal.getSize().width/mycolorpickerline.mycolors.getSize().width; y=y*Pal.getSize().height/mycolorpickerline.mycolors.getSize().height; final Color mycolor=Pal.getColorAt(x, y); if (mycolor!=null) { Global.setParameter("colorbackground", mycolor); JZirkelCanvas.getCurrentLocalPreferences(); mycolorpickerline.mycolors.repaint(); } } public void mouseReleased(final MouseEvent e) { xx=-1; yy=-1; } public void mouseEntered(final MouseEvent e) { } public void mouseExited(final MouseEvent e) { } public void mouseDragged(final MouseEvent e) { mousePressed(e); } public void mouseMoved(final MouseEvent e) { } } ./src/eric/GUI/palette/PaletteZoneTitle.java0000644000175000017500000000463411324260671017654 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.palette; import eric.GUI.themes; import eric.GUI.windowComponent; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.BoxLayout; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.SwingConstants; import rene.gui.Global; /** * * @author erichake */ public class PaletteZoneTitle extends windowComponent { private static Image offimage=themes.getImage("PaletteTitleBarN.png"); private static Image onimage=themes.getImage("PaletteTitleBarH.png"); private static Image rightTriangle=themes.getPaletteImage("PaletteTriangleDroite"); private static Image bottomTriangle=themes.getPaletteImage("PaletteTriangleBas"); private static boolean active=false; private JLabel title=new JLabel(); @Override public void paintComponent(Graphics g) { Dimension d=getSize(); if (active) { g.drawImage(onimage, 0, 0, d.width, d.height, this); } else { g.drawImage(offimage, 0, 0, d.width, d.height, this); } } public void init() { PaletteManager.fixsize(this, themes.getRightPanelWidth(), themes.getPaletteZoneTitleHeight()); } public PaletteZoneTitle(String name) { super(); setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); setAlignmentX(0.0f); title.setText(name); title.setIcon(new ImageIcon(bottomTriangle)); setHide(Global.getParameter("hidepalette." + name, true)); title.setIconTextGap(7); title.setFont(new java.awt.Font(Global.GlobalFont, 0, 11)); title.setHorizontalAlignment(SwingConstants.LEFT); PaletteManager.fixsize(title, themes.getRightPanelWidth()-themes.getPaletteZoneTitleHeight(), themes.getPaletteZoneTitleHeight()); add(title); } public void setHide(boolean b){ if (b) title.setIcon(new ImageIcon(rightTriangle)); else title.setIcon(new ImageIcon(bottomTriangle)); repaint(); } @Override public void mousePressed(MouseEvent e) { active=true; repaint(); } @Override public void mouseReleased(MouseEvent e) { active=false; repaint(); } } ./src/eric/GUI/palette/JCursor.java0000644000175000017500000001057311360566075016015 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric.GUI.palette; import eric.*; import eric.GUI.themes; import java.awt.Color; import java.awt.Font; import javax.swing.BoxLayout; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import rene.gui.Global; /** * * @author erichake */ public class JCursor extends JPanel { /** * */ private static final long serialVersionUID = 1L; JLabel mylabel, myval; public JSlider mycursor; String myP, mytxt; boolean palmember = false; /** Creates a new instance of JCursor */ @Override public void paintComponent(final java.awt.Graphics g) { super.paintComponent(g); if (palmember) { final java.awt.Dimension d = this.getSize(); g.drawImage(themes.getImage("palbackground.gif"), 0, 0, d.width, d.height, this); } } // JCursor constructor for palette member : public JCursor(final String myparam, final String mytext, final int min, final int max, int sel) { sel = Global.getParameter(myparam, sel); myP = myparam; palmember = true; final int lblwidth = 65; mytxt = mytext; mycursor = new JSlider(); mylabel = new JLabel(); myval = new JLabel(); this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); this.setAlignmentX(0); mylabel.setText(" " + mytxt); mylabel.setForeground(Color.DARK_GRAY); mylabel.setFont(new Font(Global.GlobalFont, Font.PLAIN, 11)); mylabel.setSize(lblwidth, 27); mylabel.setMaximumSize(new java.awt.Dimension(lblwidth, 27)); mylabel.setMinimumSize(new java.awt.Dimension(lblwidth, 27)); mylabel.setPreferredSize(new java.awt.Dimension(lblwidth, 27)); myval.setText(String.valueOf(sel)); myval.setForeground(Color.GRAY); myval.setFont(new java.awt.Font(Global.GlobalFont, Font.BOLD, 11)); myval.setSize(20, 27); myval.setMaximumSize(new java.awt.Dimension(20, 27)); myval.setMinimumSize(new java.awt.Dimension(20, 27)); myval.setPreferredSize(new java.awt.Dimension(20, 27)); mycursor.setFont(new java.awt.Font(Global.GlobalFont, 0, 11)); mycursor.setOpaque(false); mycursor.setMajorTickSpacing(1); mycursor.setMaximum(max); mycursor.setMinimum(min); mycursor.setMinorTickSpacing(1); mycursor.setPaintLabels(false); mycursor.setPaintTicks(false); mycursor.setSnapToTicks(true); mycursor.setValue(sel); mycursor.setAlignmentX(0.0F); mycursor.setMaximumSize(new java.awt.Dimension(themes.getRightPanelWidth() - 82, 27)); mycursor.setMinimumSize(new java.awt.Dimension(themes.getRightPanelWidth() - 82, 27)); mycursor.setPreferredSize(new java.awt.Dimension(themes.getRightPanelWidth() - 82, 27)); mycursor.setSize(new java.awt.Dimension(themes.getRightPanelWidth() - 82, 27)); mycursor.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(final javax.swing.event.ChangeEvent evt) { final JSlider myc = (JSlider) evt.getSource(); final int mysel = myc.getValue(); rene.gui.Global.setParameter(myP, mysel); // JPM.MW.JPR.getLocalPreferences(); if (JZirkelCanvas.getCurrentZC()!=null) { JZirkelCanvas.getCurrentZC().getLocalPreferences(); JZirkelCanvas.getCurrentZC().updateDigits(); JZirkelCanvas.getCurrentZC().JCM.updateDigits(); JZirkelCanvas.getCurrentZC().resetGraphics(); JZirkelCanvas.getCurrentZC().repaint(); }; myval.setText(String.valueOf(mysel)); } }); this.add(mylabel); this.add(mycursor); this.add(myval); this.setOpaque(false); this.setMaximumSize(new java.awt.Dimension(themes.getRightPanelWidth(), 27)); this.setMinimumSize(new java.awt.Dimension(themes.getRightPanelWidth(), 27)); this.setPreferredSize(new java.awt.Dimension(themes.getRightPanelWidth(), 27)); this.setSize(themes.getRightPanelWidth(), 27); } } ./src/eric/GUI/palette/PaletteZone.java0000644000175000017500000000544111355651016016650 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.palette; import eric.GUI.windowComponent; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.util.ArrayList; import javax.swing.BoxLayout; import javax.swing.JComponent; import rene.gui.Global; /** * * @author erichake */ public class PaletteZone extends windowComponent { protected ArrayList icons=new ArrayList(); protected PaletteZoneTitle zone_title; protected PaletteZoneContent zone_content; private String zone_name; private PaletteZone me; // @Override // public void paintComponent(Graphics g) { // } public PaletteZone(String name) { super(); me=this; zone_name=name; setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); setAlignmentX(0.0f); zone_title=new PaletteZoneTitle(name) { @Override public void mouseClicked(MouseEvent e) { ToggleHideOrShow(); PaletteManager.FixPaletteHeight(me); } }; add(zone_title); zone_content=new PaletteZoneContent(this); add(zone_content); // HideOrShow(); } private void HideOrShow() { hide_zone(Global.getParameter("hidepalette."+zone_name, false)); } private void ToggleHideOrShow() { hide_zone(!Global.getParameter("hidepalette."+zone_name, false)); } private void hide_zone(boolean b) { Global.setParameter("hidepalette."+zone_name, b); zone_title.setHide(b); zone_content.setHide(b); } public void init() { validate(); HideOrShow(); zone_title.init(); for (JIcon element : icons) { element.init(); } zone_content.init(); } public void setHideContent(boolean b){ hide_zone(b); } public void setVisibleContentHeight() { zone_content.setVisibleHeight(); } public void clearContent(){ zone_content.removeAll(); } public JIcon createToggleIcon(String name) { JIcon ji=new JIcon(name, name); addIcon(ji); return ji; } public JIcon createSimpleIcon(String name) { JIcon ji=new JIcon(name, null); addIcon(ji); return ji; } public JIcon createIcon(String name, String group) { JIcon ji=new JIcon(name, group); addIcon(ji); return ji; } public void createIcons(String myname[], String group) { for (String element : myname) { createIcon(element, group); } } public void addIcon(JIcon ji) { icons.add(ji); zone_content.add(ji); } public void addComponent(JComponent jc) { zone_content.add(jc); } } ./src/eric/GUI/palette/PaletteManager.java0000644000175000017500000006160611363543762017323 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.palette; import eric.GUI.window.LeftPanel; import eric.GUI.window.MenuBar; import eric.GUI.window.RightPanel; import eric.JZirkelCanvas; import eric.macros.MacroTools; import eric.restrict.RestrictItems; import eric.restrict.RestrictPanel; import java.awt.Color; import java.awt.Dimension; import java.util.ArrayList; import javax.swing.JComponent; import javax.swing.SwingUtilities; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; /** * * @author erichake */ public class PaletteManager { private static String GEOM_GROUP="geom"; static String POINT_GROUP="point"; static String ASPECT1_GROUP="aspect1"; static String ASPECT2_GROUP="aspect2"; static String GRID1_GROUP="grid1"; static String GRID2_GROUP="grid2"; static String PHOTO_GROUP="photo"; private static RightPanel MainPanel; private static JIcon ctrlJSlider, ctrlJPopup, ctrlJCheckBox, ctrlJTextField, ctrlJButton; private static ArrayList allIcons=new ArrayList(); private static PaletteZone JPDisk, JPEdit, JP3D, JPGeom, JPfunc, JPTest, JPControls, JPHist, JPSizes, JPColors, JPPrec, JPGrid; private static ArrayList PaletteWithIconOnly; private static PaletteZone_Aspect JPAspect; private static JColorPanel colorpanel; public static void fixsize(JComponent jc, int w, int h) { Dimension d=new Dimension(w, h); jc.setSize(d); jc.setMaximumSize(d); jc.setMinimumSize(d); jc.setPreferredSize(d); } public static void construct(RightPanel mainpanel) { MainPanel=mainpanel; MainPanel.removeAll(); allIcons.clear(); constructJPDisk(); constructJPEdit(); constructJP3D(); constructJPGeom(); constructJPAspect(); constructJPfunc(); constructJPTest(); constructJPControls(); constructJPGrid(); constructJPHist(); constructJPColors(); constructJPSizes(); constructJPPrec(); setDefault(); PaletteWithIconOnly=new ArrayList(); PaletteWithIconOnly.add(JPDisk); PaletteWithIconOnly.add(JPEdit); PaletteWithIconOnly.add(JPGeom); PaletteWithIconOnly.add(JPfunc); PaletteWithIconOnly.add(JPTest); PaletteWithIconOnly.add(JPControls); } public static void init() { if (RightPanel.isPanelVisible()) { fixRestrictedEnvironment(); JPDisk.init(); JPEdit.init(); JP3D.init(); JPGeom.init(); JPAspect.init(); JPfunc.init(); JPTest.init(); JPControls.init(); JPGrid.init(); JPHist.init(); JPColors.init(); JPSizes.init(); JPPrec.init(); FixPaletteHeight(null); } } private static void setDefault() { setSelected_with_clic("type"+Global.getParameter("options.type", 0), true); // setSelected("color"+Global.getParameter("options.color",0),true); // setSelected("thickness"+Global.getParameter("options.colortype",0),true); setSelected_with_clic("obtuse", Global.getParameter("options.obtuse", true)); } public static boolean isPaletteWithIconOnly(PaletteZone pz) { for (int i=0; i=0)&&(lastpz.getBounds().y+lastpz.getBounds().height>MainPanel.getBounds().height)) { PaletteZone pz=(PaletteZone) MainPanel.getComponent(i); if (!pz.equals(caller)) { pz.setHideContent(true); pz.init(); MainPanel.validate(); } i--; } } MainPanel.repaint(); } public static void registerIcon(JIcon icn) { allIcons.add(icn); } public static void setOverBtn(JIcon icn) { icn.setOver(true); for (int i=0; i"; if ("".equals(value)) { add(field=new myTextField(InitValue)); field.setForeground(ZTools.C_TextField_OFF); } else { add(field=new myTextField(value)); } field.setHorizontalAlignment(SwingConstants.CENTER); } else { add(label=new ZLabel(lbl)); add(field=new myTextField(value)); ZTools.fixsize(label, labelWidth, labelheight); } } public void actionMouse() { } public void actionKey() { } public String getText() { if (InitValue.equals(field.getText())) { return ""; } else { return field.getText(); } } public void setText(String txt) { if ("".equals(txt)) { txt=InitValue; field.setForeground(ZTools.C_TextField_OFF); } else { field.setForeground(ZTools.C_TextField); } field.setText(txt); } private class myTextField extends ZTextField { public myTextField(String s) { super(s); } @Override public void actionMouse() { me.actionMouse(); } @Override public void actionKey() { me.actionKey(); } @Override public void focusOn() { if ((field.getText().equals(InitValue))) { field.setText(""); field.setForeground(ZTools.C_TextField); } field.selectAll(); } @Override public void focusOff() { if ((field.getText().equals(""))) { field.setText(InitValue); field.setForeground(ZTools.C_TextField_OFF); } } } } ./src/eric/GUI/ZDialog/ZTools.java0000644000175000017500000000313311363121052015526 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.ZDialog; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import javax.swing.BorderFactory; import javax.swing.JComponent; import javax.swing.border.Border; import javax.swing.border.LineBorder; import rene.gui.Global; /** * * @author erichake */ public class ZTools { public static final Color backMainColor=new Color(100, 100, 100, 50); public static final Color backTitleColor=new Color(0, 0, 0, 200); public static final Color TitleTextColor=new Color(255, 255, 255); public static final Color C_TextField=new Color(50, 50, 50); // Text color of ZTextFields public static final Color C_TextField_OFF=new Color(150, 150, 150); // Disable Text color of ZTextFields public static final Color B_TextField=new Color(245, 246, 255); // ZTextFields background color public static final Color Bord_TextField=new Color(50, 50, 50); // ZTextFields line border color public static final Font ZLabelFont=new Font(Global.GlobalFont, 0, 11); public static final Font ZCheckBoxFont=new Font(Global.GlobalFont, 0, 11); public static final Font ZTextFieldFont=new Font(Global.GlobalFont, 0, 11); public static final Font ZDialogTitleFont=new Font(Global.GlobalFont, 1, 12); public static void fixsize(JComponent jc, int w, int h) { Dimension d=new Dimension(w, h); jc.setSize(d); jc.setMaximumSize(d); jc.setMinimumSize(d); jc.setPreferredSize(d); } } ./src/eric/GUI/ZDialog/ZTextField.java0000644000175000017500000000551311363071524016332 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.ZDialog; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Insets; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.BoxLayout; import javax.swing.JPanel; import javax.swing.JTextField; /** * * @author erichake */ public class ZTextField extends JPanel { JTextField field; public void paint(Graphics g) { Dimension d=getSize(); g.setColor(ZTools.B_TextField); g.fillRect(0, 0, d.width, d.height); paintChildren(g); g.setColor(ZTools.Bord_TextField); g.drawRect(0, 0, d.width, d.height); } public ZTextField(String s) { setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); setOpaque(false); field=new JTextField(s){ @Override public void paintBorder(Graphics g){ } }; field.setMargin(new Insets(0, 0, 0, 0)); field.setOpaque(false); field.setFont(ZTools.ZTextFieldFont); field.setForeground(ZTools.C_TextField); field.setBackground(ZTools.B_TextField); field.addKeyListener(new KeyAdapter() { @Override public void keyReleased(final KeyEvent e) { actionKey(); } }); field.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { actionMouse(); } }); field.addFocusListener(new FocusAdapter() { @Override public void focusGained(FocusEvent e) { focusOn(); } @Override public void focusLost(FocusEvent e) { focusOff(); } }); JPanel panel=new JPanel(); Dimension d=new Dimension(1, 1); panel.setOpaque(false); panel.setPreferredSize(d); panel.setMinimumSize(d); panel.setMaximumSize(d); panel.setSize(d); add(panel); add(field); } public void actionMouse() { } public void actionKey() { } public void focusOn(){ } public void focusOff(){ } public void setHorizontalAlignment(int align){ field.setHorizontalAlignment(align); } public String getText(){ return field.getText(); } public void setText(String s){ field.setText(s); } public void selectAll(){ field.selectAll(); } @Override public void setForeground(Color c){ if (field!=null) field.setForeground(c); } } ./src/eric/GUI/ZDialog/ZLabel.java0000644000175000017500000000064211363015426015456 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.ZDialog; import java.awt.Graphics; import javax.swing.JLabel; /** * * @author erichake */ public class ZLabel extends JLabel { public void paint(Graphics g) { super.paintComponent(g); } public ZLabel(String s) { super(s); setFont(ZTools.ZLabelFont); } } ./src/eric/GUI/ZDialog/ZCheckBox.java0000644000175000017500000000337211363021557016132 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.ZDialog; import eric.GUI.themes; import eric.JZirkelCanvas; import java.awt.Graphics; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JLabel; import javax.swing.SwingConstants; import rene.zirkel.ZirkelCanvas; /** * * @author erichake */ public class ZCheckBox extends JLabel { private boolean selected; @Override public void paint(Graphics g) { super.paintComponent(g); if (selected) { g.drawImage(themes.getImage("chkboxON.gif"), 0, 2, this); } else { g.drawImage(themes.getImage("chkboxOFF.gif"), 0, 2, this); } } public ZCheckBox(String lbl, boolean value) { super(lbl); selected=value; setFont(ZTools.ZCheckBoxFont); setFocusable(false); setIcon(themes.getIcon("pixel")); setIconTextGap(20); setVerticalTextPosition(SwingConstants.CENTER); setVerticalAlignment(SwingConstants.CENTER); addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { setSelected(!selected); action(); } }); } public boolean isSelected() { return selected; } public void setSelected(boolean b) { selected=b; ZirkelCanvas zc=JZirkelCanvas.getCurrentZC(); if (zc!=null) { zc.repaint(); } } public void action() { } }./src/eric/GUI/ZDialog/ZButton.java0000644000175000017500000000157411363003325015712 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.ZDialog; import java.awt.Font; import java.awt.Graphics; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JLabel; import rene.gui.Global; /** * * @author erichake */ public class ZButton extends JButton { public void paint(Graphics g) { super.paintComponent(g); } public ZButton(String lbl) { super(lbl); setOpaque(false); setFont(new Font(Global.GlobalFont, 0, 11)); addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { action(); } }); } public void action() { } } ./src/eric/GUI/window/0000755000175000017500000000000011362527345013425 5ustar yvesyves./src/eric/GUI/window/tab_main_panel.java0000644000175000017500000003303411361017003017204 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.window; import eric.FileTools; import eric.GUI.palette.PaletteManager; import eric.GUI.pipe_tools; import eric.GUI.windowComponent; import eric.GUI.themes; import eric.JZirkelCanvas; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.util.ArrayList; import java.util.Collections; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JSeparator; import javax.swing.SwingUtilities; import rene.gui.Global; /** * * @author erichake */ public class tab_main_panel extends windowComponent implements MouseWheelListener { private Color foreColor=new Color(0, 0, 0); private static myJMenuItem paletteitem, leftpanelitem, commentitem; public void paintComponent(Graphics g) { Dimension d=getSize(); g.drawImage(themes.getImage("tabbar.gif"), 0, 0, d.width, d.height, this); } public void init() { // win=StaticTools.getMainWindow(this); int wdth=pipe_tools.getWindowSize().width-themes.getTotalRightPanelWidth()-themes.getTabControlPanelWidth(); setBounds(0, pipe_tools.getWindowSize().height-themes.getMainTabPanelHeight(), wdth, themes.getMainTabPanelHeight()); initBTNS(null); showActiveBtn(); } public tab_main_panel() { me=this; setOpaque(true); setLayout(null); addMouseWheelListener(this); createTabAndCanvas("Figure 1"); // setFocusable(true); } public void mouseWheelMoved(MouseWheelEvent e) { if (BTNS.size()==0) { return; } int notches=e.getWheelRotation(); int askedOffset=offset-notches*30; if ((notches<0)&&(askedOffset>0)) { askedOffset=0; } else { if ((notches>0)&&(Rect_width*BTNS.size()+askedOffset<=getSize().width)) { askedOffset=getSize().width-Rect_width*(BTNS.size()); } } offset=askedOffset; deOverAll(); initBTNS(null); } /***************/ /* STATIC PART */ /***************/ private static int Rect_width=150; private static int offset=0; private static int leftmargin=20; private static tab_main_panel me=null; private static ArrayList BTNS=new ArrayList(); private static JPopupMenu tab_popup=null, ctrl_popup=null; public static tab_main_panel getme() { return me; } public static void removeAllBtns(ContentPane content) { if (content!=null) { for (int i=0; i1) { int i=getActiveBtnPos(); removeBtn(btn); if (i1) { me.remove(btn); BTNS.remove(btn); initBTNS(null); } } public static void addBtnAndSelect(String label) { tab_btn btn=new tab_btn(label); int i=getActiveBtnPos()+1; if (i==BTNS.size()) { me.add(btn); BTNS.add(btn); } else { me.add(btn, i); BTNS.add(i, btn); } initBTNS(null); setActiveBtn(btn); showActiveBtn(); btn.editName(); } public static tab_btn addBtn(String name) { tab_btn btn=new tab_btn(name, name); me.add(btn); BTNS.add(btn); return btn; } public static void createTabAndCanvas(String label, String tooltip) { tab_btn btn=new tab_btn(label, tooltip); me.add(btn); BTNS.add(btn); setActiveBtn(btn); showActiveBtn(); } public static void createTabAndCanvas(String label) { createTabAndCanvas(label, label); } // j is the offset (1 for the next to the right, -1 to the left) public static void setNextActiveBtn(int j) { int i=getActiveBtnPos(); try { setActiveBtn(BTNS.get(i+j)); showActiveBtn(); } catch (Exception e) { } initNAVbtns(); } public static void setCurrentTabName(String name, String tooltip) { getActiveBtn().setTabName(name, tooltip); } public static void setActiveBtn(int k) { setActiveBtn(BTNS.get(k)); } public static void setActiveBtn(final tab_btn btn) { btn.setActive(true); for (int i=0; i0) { return BTNS.get(BTNS.size()-1); } else { return null; } } public static void currentTabHaveChanged(boolean b) { getActiveBtn().setChanged(b); } public static void allTabsHaveChanged(boolean b) { for (int i=0; ime.getSize().width); if ((btn.getBounds().x+btn.getSize().width>me.getSize().width)) { offset-=btn.getBounds().x+btn.getSize().width-me.getSize().width; } else if (btn.getBounds().x<0) { offset+=-btn.getBounds().x; } initBTNS(null); } public static void setOverBtn(tab_btn btn) { btn.setOver(true); for (int i=0; ime.getSize().width); boolean b2=(btn.getBounds().x, PopupMenuListener { private tab_canvas_panel panel; private Point origin; private Point current; private Point btnloc; private boolean active=true; private boolean over=false; private tab_close_btn CloseBtn; private tab_btn_label Label; private String Tooltip=""; private static Image on_btn_right=themes.getImage("tab_btn_on_right_border.gif"); private static Image on_btn_left=themes.getImage("tab_btn_on_left_border.gif"); private static Image on_btn=themes.getImage("tab_btn_on.gif"); private static Image off_btn_right=themes.getImage("tab_btn_off_right_border.gif"); private static Image off_btn_left=themes.getImage("tab_btn_off_left_border.gif"); private static Image off_btn=themes.getImage("tab_btn_off.gif"); private static Image off_over_btn_right=themes.getImage("tab_btn_off_over_right_border.gif"); private static Image off_over_btn_left=themes.getImage("tab_btn_off_over_left_border.gif"); private static Image off_over_btn=themes.getImage("tab_btn_off_over.gif"); private static Image file_icon=themes.getImage("tab_file_icon.png"); private boolean Changed=false; public void paintComponent(Graphics g) { Dimension d=getSize(); final Graphics2D g2=windowComponent.getGraphics2D(g); g2.drawImage(getBackgroundImage(), 0, 0, d.width, d.height, this); g2.drawImage(getLeftBorder(), 0, 0, themes.getTabCornerWidth(), d.height, this); g2.drawImage(getRightBorder(), d.width-themes.getTabCornerWidth(), 0, themes.getTabCornerWidth(), d.height, this); if (!JZirkelCanvas.isWorkBook()) { g2.drawImage(file_icon, 4, 2, this); } // g2.setColor(Color.darkGray); // g2.drawLine(0, d.height-1, d.width-1, d.height-1); // g2.drawLine(d.width-1, d.height-1, d.width-1, 0); // if (!active) { // g2.drawLine(d.width-1, 0, 0, 0); // } } public tab_btn(String label, String tooltip) { super(); label=pipe_tools.processTabName(label); Label=new tab_btn_label(label); Tooltip=tooltip; setLayout(null); CloseBtn=new tab_close_btn(); panel=new tab_canvas_panel(this); add(CloseBtn); add(Label); // setToolTipText(tooltip); setOpaque(true); } public tab_btn(String label) { this(label, label); } public void setChanged(boolean b) { Changed=b; Label.setChanged(b); repaint(); } public void setActive(boolean act) { active=act; if (active) { ContentPane.setCurrentPanel(panel); } } public boolean getActive() { return active; } public void setOver(boolean ov) { over=ov; } public tab_close_btn getTabCloseBtn() { return CloseBtn; } public tab_btn_label getTabLabel() { return Label; } public tab_canvas_panel getPanel() { return panel; } public void setTabName(String name, String tooltip) { name=pipe_tools.processTabName(name); Label.setLabelText(name); Tooltip=tooltip; setToolTipText(Tooltip); } public String getTabName() { return Label.getLabelText(); } public void editName() { if (pipe_tools.isTabEditAccepted()) { Label.edit(); } } public void init() { setToolTipText(Tooltip); getTabCloseBtn().init(); getTabLabel().init(); getPanel().init(); } private Image getRightBorder(){ if (active) { return tab_btn.on_btn_right; } if (over) { return tab_btn.off_over_btn_right; } return tab_btn.off_btn_right; } private Image getLeftBorder(){ if (active) { return tab_btn.on_btn_left; } if (over) { return tab_btn.off_over_btn_left; } return tab_btn.off_btn_left; } private Image getBackgroundImage() { if (active) { return tab_btn.on_btn; } if (over) { return tab_btn.off_over_btn; } return tab_btn.off_btn; } @Override public Point getToolTipLocation(MouseEvent event) { return new Point(0, getSize().height+2); } @Override public void mousePressed(MouseEvent e) { origin=pipe_tools.getWindow().getMouseLoc(); btnloc=getLocation(); tab_main_panel.setActiveBtn(this); repaint(); // pipe_tools.onTabActivate(); // Right-clic : if (e.getModifiers()==Event.META_MASK) { JPopupMenu popup=tab_main_panel.getCtrlPopup(); popup.removePopupMenuListener(this); popup.addPopupMenuListener(this); popup.show(this, (getSize().width-popup.getPreferredSize().width)/2, -2-popup.getPreferredSize().height); repaint(); } } @Override public void mouseEntered(MouseEvent e) { tab_main_panel.setOverBtn(this); repaint(); } @Override public void mouseExited(MouseEvent e) { // Check whether the mouse cursor is still over the panel // if (getMousePosition(true)!=null) { // return; // } over=false; repaint(); } @Override public void mouseReleased(MouseEvent e) { tab_main_panel.reorderBTNS(null); } @Override public void mouseDragged(MouseEvent e) { getParent().setComponentZOrder(this, 0); current=pipe_tools.getWindow().getMouseLoc(); if (current==null) { return; } setLocation(btnloc.x+current.x-origin.x, btnloc.y); tab_main_panel.reorderBTNS(this); } @Override public void mouseMoved(MouseEvent e) { tab_main_panel.setOverBtn(this); repaint(); } public int compareTo(tab_btn o) { int middle=(2*getBounds().x+getBounds().width)/2; if ((middle>o.getBounds().x)) { return 1; } if ((middle
"+s+"
"); setInviteLabel(); } } public String getLabelText() { return label; } public void setInviteLabel() { inviteLabel.setVisible(label.equals("")); } public void implementMouseAdapter() { final ContentPane pane=pipe_tools.getContent(); implementMouseAdapter(pane); } public void implementMouseAdapter(Container comp) { if (!(comp instanceof JLabel)) { comp.addMouseListener(ma); } for (int i=0; i"); // e.consume(); } else if (e.getKeyCode()==KeyEvent.VK_ESCAPE) { removeMouseAdapter(); com.remove(jtf); com.revalidate(); com.repaint(); } } public void keyReleased(final KeyEvent e) { pipe_tools.setComments(jtf.getText()); setLabelText(jtf.getText()); } }); jtf.addFocusListener(new FocusAdapter() { @Override public void focusLost(final FocusEvent e) { // setLabelText(jtf.getText()); setViewportView(text_area); com.remove(jtf); com.revalidate(); com.repaint(); com.addMouseListener(com); removeMouseAdapter(); revalidate(); validate(); repaint(); } }); setViewportView(jtf); SwingUtilities.invokeLater(new Runnable() { public void run() { jtf.requestFocus(); } }); } } ./src/eric/GUI/window/nav_right.java0000644000175000017500000000420111321607073016236 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.window; import eric.GUI.windowComponent; import eric.GUI.themes; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.image.FilteredImageSource; import javax.swing.GrayFilter; import javax.swing.ImageIcon; /** * * @author erichake */ public class nav_right extends windowComponent { private static int marginW=24; private static int W=themes.getIcon("navright.png").getIconWidth(); private static int H=themes.getIcon("navright.png").getIconHeight(); private boolean over=false; private boolean active=false; private static boolean disable=false; private static nav_right myself=null; @Override public void paintComponent(Graphics g) { Dimension d=getSize(); if (disable) { final GrayFilter filter=new GrayFilter(true, 40); Image disImage=createImage(new FilteredImageSource(themes.getImage("navright.png").getSource(), filter)); ImageIcon myicn=new ImageIcon(disImage); g.drawImage(myicn.getImage(), 0, 0, d.width, d.height, this); return; } if (active) { g.drawImage(themes.getImage("navrightpushed.png"), 0, 0, d.width, d.height, this); } else { g.drawImage(themes.getImage("navright.png"), 0, 0, d.width, d.height, this); } } public void init() { setBounds(marginW+tab_control_panel.getMarginLeft(), tab_control_panel.getMarginTop(), W, H); } public nav_right() { myself=this; } public static void setDisabled(boolean b) { disable=b; if (myself!=null) { myself.repaint(); } } @Override public void mousePressed(MouseEvent e) { active=true; repaint(); tab_main_panel.setNextActiveBtn(1); } @Override public void mouseReleased(MouseEvent e) { active=false; repaint(); } } ./src/eric/GUI/window/ImageFilter.java0000644000175000017500000000313211303422133016437 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric.GUI.window; import eric.*; import java.io.File; import javax.swing.filechooser.FileFilter; public class ImageFilter extends FileFilter { @Override public boolean accept(final File f) { if (f.isDirectory()) { return true; } final String extension = this.getExtension(f); if (extension != null) { if (extension.equals("tiff") || extension.equals("tif") || extension.equals("svg") || extension.equals("gif") || extension.equals("jpeg") || extension.equals("jpg") || extension.equals("eps") || extension.equals("png")) { return true; } else { return false; } } return false; } @Override public String getDescription() { return "Images"; } public String getExtension(final File f) { String ext = null; final String s = f.getName(); final int i = s.lastIndexOf('.'); if (i > 0 && i < s.length() - 1) { ext = s.substring(i + 1).toLowerCase(); } return ext; } } ./src/eric/GUI/window/LeftPanel_macros_btn.java0000644000175000017500000000267011324545320020345 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.window; import eric.GUI.themes; import eric.GUI.windowComponent; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.MouseEvent; /** * * @author erichake */ public class LeftPanel_macros_btn extends windowComponent implements LeftPanel_btn{ private boolean over=false; private boolean selected=true; private static int X=(themes.getIcon("leftpanel_on_btn.gif").getIconWidth()-themes.getIcon("left_macros.png").getIconWidth())/2; private static int Y=3; @Override public void paintComponent(Graphics g) { Dimension d=getSize(); if (selected) { g.drawImage(LeftPanel.getOnBtn(), 0, 0, d.width, d.height, this); } else { g.drawImage(LeftPanel.getOffBtn(), 0, 0, d.width, d.height, this); } g.drawImage(themes.getImage("left_macros.png"),X,Y,this); } public void init() { setBounds(LeftPanel.x(this),LeftPanel.y(),LeftPanel.getBtnDim().width,LeftPanel.getBtnDim().height); } public LeftPanel_macros_btn() { } @Override public void mousePressed(MouseEvent e) { LeftPanel.select(this); } public void select(boolean b) { selected=b; } public boolean isPanelSelected() { return selected; } } ./src/eric/GUI/window/tab_left.java0000644000175000017500000000217111360273727016051 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.window; import eric.GUI.pipe_tools; import eric.GUI.windowComponent; import eric.GUI.themes; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Point; /** * * @author erichake */ public class tab_left extends windowComponent { private Point winloc; public void paintComponent(Graphics g) { Dimension d=getSize(); g.drawImage(themes.getImage("tab_left.gif"), 0, 0, d.width, d.height, this); } public void init() { // win=StaticTools.getMainWindow(this); setBounds(themes.getVerticalBorderWidth()+themes.getLeftPanelWidth()+themes.getVerticalPanelBorderWidth(), themes.getTitleBarHeight()+themes.getMenuBarHeight()+themes.getCommentsHeight()-1, themes.getTabLeftBorderWidth(), pipe_tools.getWindowSize().height-themes.getTitleBarHeight()-themes.getMenuBarHeight()-themes.getCommentsHeight()-themes.getStatusBarHeight()-themes.getMainTabPanelHeight()+2); } public tab_left() { } } ./src/eric/GUI/window/nav_menu2.java0000644000175000017500000000434611351356447016172 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.window; import eric.GUI.windowComponent; import eric.GUI.themes; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseEvent; import javax.swing.JPopupMenu; import javax.swing.SwingUtilities; import javax.swing.event.PopupMenuEvent; import javax.swing.event.PopupMenuListener; /** * * @author erichake */ public class nav_menu2 extends windowComponent implements PopupMenuListener{ private static int marginW=95; private static int W=themes.getIcon("navmenu2.png").getIconWidth(); private static int H=themes.getIcon("navmenu2.png").getIconHeight(); private static Image offimage=themes.getImage("navmenu2.png"); private static Image onimage=themes.getImage("navmenu2pushed.png"); private boolean over=false; private boolean active=false; private static nav_menu2 myself=null; @Override public void paintComponent(Graphics g) { Dimension d=getSize(); if (active) { g.drawImage(onimage, 0, 0, d.width, d.height,this); } else { g.drawImage(offimage, 0, 0, d.width, d.height,this); } } public void init() { setBounds(marginW+tab_control_panel.getMarginLeft(), tab_control_panel.getMarginTop(), W, H); } public nav_menu2() { myself=this; } @Override public void mousePressed(MouseEvent e) { JPopupMenu popup=tab_main_panel.getCtrlPopup(); popup.removePopupMenuListener(this); active=true; popup.addPopupMenuListener(this); popup.show(this, (W-popup.getPreferredSize().width)/2, -2-popup.getPreferredSize().height); repaint(); } public void popupMenuWillBecomeVisible(PopupMenuEvent e) { removeMouseListener(this); } public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { active=false; repaint(); SwingUtilities.invokeLater(new Runnable() { public void run() { addMouseListener(myself); } }); } public void popupMenuCanceled(PopupMenuEvent e) { } } ./src/eric/GUI/window/Margin.java0000644000175000017500000000132311321110455015465 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.window; import java.awt.Dimension; import javax.swing.JPanel; /** * * @author erichake */ public class Margin extends JPanel { public static final int HORIZONTAL=1, VERTICAL=2; public Margin(int length, int orientation) { int w, h; if (orientation==HORIZONTAL) { w=length; h=1; } else { w=1; h=length; } Dimension d=new Dimension(w, h); setPreferredSize(d); setMinimumSize(d); setMaximumSize(d); setSize(d); setOpaque(false); setFocusable(false); } } ./src/eric/GUI/window/MainApplet.java0000644000175000017500000000640211360534744016323 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.window; import eric.FileTools; import eric.GUI.pipe_tools; import eric.GUI.themes; import eric.Media; import java.awt.Image; import java.awt.Point; import java.net.URL; import javax.swing.JApplet; import javax.swing.SwingUtilities; /** * * @author erichake */ public class MainApplet extends JApplet implements MainContainer { private ContentPane CONTENT; public MainApplet() { } @Override public void init() { try { pipe_tools.init(this); SwingUtilities.invokeAndWait(new Runnable() { public void run() { createGUI(); openFILES(); } }); } catch (Exception ex) { } } @Override public void start() { } public void createGUI() { tab_main_panel.removeAllBtns(CONTENT); Media.clearMedias(); setLayout(null); themes.init(); CONTENT=new ContentPane(); setContentPane(CONTENT); } public void openFILES() { try { final String filename=getParameter("file"); URL url=new URL(getCodeBase(), filename); if (url.getFile().toLowerCase().endsWith(".zirs")) { FileTools.openWorkBook(new URL(getCodeBase(), filename)); } } catch (Exception ex) { } } public void setComponents() { CONTENT.setComponents(); } public ContentPane getContent() { return CONTENT; } public Point getMouseLoc() { return CONTENT.getMousePosition(); } public Image getImage(String s) { Image myimage; myimage=getImage(themes.class.getResource(themes.getCommonThemePath()+s)); if (myimage==null) { myimage=getImage(themes.class.getResource(themes.getCurrentThemePath()+s)); } if (myimage==null) { myimage=getImage(themes.class.getResource(themes.getCommonThemePath()+"null.gif")); } return myimage; } public Image getPaletteImage(String s) { Image myimage; try { myimage=getImage(themes.class.getResource(themes.getPalettePath()+s+".png")); } catch (final Exception e) { try { myimage=getImage(themes.class.getResource(themes.getPalettePath()+s+".gif")); } catch (final Exception ex) { try { myimage=getImage(themes.class.getResource(themes.getBarPath()+s+".png")); } catch (final Exception ex2) { try { myimage=getImage(themes.class.getResource(themes.getBarPath()+s+".gif")); } catch (final Exception ex3) { myimage=getImage(themes.class.getResource(themes.getCommonThemePath()+"null.gif")); } } } } return myimage; } public boolean isApplet() { return true; } @Override public void setLocation(int x, int y) { } @Override public Point getLocation() { return new Point(0, 0); } @Override public void setSize(int w, int h) { } } ./src/eric/GUI/window/tab_canvas_panel.java0000644000175000017500000000054311343775233017552 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.window; import eric.JZirkelCanvas; /** * * @author erichake */ public class tab_canvas_panel extends JZirkelCanvas { private tab_btn BTN; public tab_canvas_panel(tab_btn btn) { super(); BTN=btn; } } ./src/eric/GUI/window/Open_left_panel_btn.java0000644000175000017500000000602311360276224020221 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.window; import eric.GUI.palette.PaletteManager; import eric.GUI.pipe_tools; import eric.GUI.windowComponent; import eric.GUI.themes; import eric.JGeneralMenuBar; import java.awt.AlphaComposite; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Stroke; import java.awt.event.MouseEvent; import rene.gui.Global; /** * * @author erichake */ public class Open_left_panel_btn extends windowComponent { private static Open_left_panel_btn me; private Image icon_off=themes.getImage("leftpanel_off.png"); private Image icon_on=themes.getImage("leftpanel_on.png"); private boolean isselected=false; private boolean isover=false; public void paintComponent(Graphics g) { Dimension d=this.getSize(); final int w=d.width; final int h=d.height; final Graphics2D g2=windowComponent.getGraphics2D(g); if (isselected) { g2.drawImage(icon_on, 0, 0, w, h, this); } else { g2.drawImage(icon_off, 0, 0, w, h, this); } if (isover) { final AlphaComposite ac=AlphaComposite.getInstance( AlphaComposite.SRC_OVER, 0.3f); g2.setComposite(ac); g2.setColor(new Color(0, 0, 80)); g2.fillRect(7, 5, 17, 11); } } public Open_left_panel_btn() { me=this; setToolTipText(Global.Loc("menu.display.leftpanel")); } public static void setSelected(boolean b) { me.isselected=b; me.repaint(); } public void init() { int x=pipe_tools.getWindowSize().width-themes.getTotalRightPanelWidth()-2*themes.getOpenLeftPanelBtnDim().width-themes.getOpenMiddlePanelBtnDim().width-themes.getOpenPanelsBtnsMarginW(); this.setBounds(x, themes.getOpenPanelsBtnsMarginH(), themes.getOpenLeftPanelBtnDim().width, themes.getOpenLeftPanelBtnDim().height); } public static void open() { if (!LeftPanel.isPanelVisible()) { toggle(); } } public static void setmode(){ if (me!=null) { me.isselected=LeftPanel.isPanelVisible(); } } public static void toggle() { LeftPanel.showPanel(!LeftPanel.isPanelVisible()); if (me!=null) { me.isselected=LeftPanel.isPanelVisible(); me.repaint(); } JGeneralMenuBar.initToggleItems(); tab_main_panel.initToggleItems(); if (pipe_tools.isApplet()) { pipe_tools.setWindowComponents(); PaletteManager.init(); } } public void mousePressed(MouseEvent e) { toggle(); } public void mouseEntered(MouseEvent arg0) { isover=true; repaint(); } public void mouseExited(MouseEvent arg0) { isover=false; repaint(); } } ./src/eric/GUI/window/CanvasPanel.java0000644000175000017500000000244711360273223016461 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.window; import eric.GUI.pipe_tools; import eric.GUI.windowComponent; import eric.GUI.themes; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import javax.swing.BoxLayout; import javax.swing.JPanel; /** * * @author erichake */ public class CanvasPanel extends windowComponent { public void init() { setBounds(themes.getVerticalBorderWidth()+themes.getLeftPanelWidth()+themes.getVerticalPanelBorderWidth()+themes.getTabLeftBorderWidth(), themes.getTitleBarHeight()+themes.getMenuBarHeight()+themes.getCommentsHeight(), pipe_tools.getWindowSize().width-themes.getLeftPanelWidth()-themes.getVerticalPanelBorderWidth()-themes.getTotalRightPanelWidth()-2*themes.getVerticalBorderWidth()-themes.getTabLeftBorderWidth()-themes.getTabRightBorderWidth(), pipe_tools.getWindowSize().height-themes.getTitleBarHeight()-themes.getMenuBarHeight()-themes.getMainTabPanelHeight()-themes.getCommentsHeight()-themes.getStatusBarHeight()); } public CanvasPanel() { super(); setLayout(new BorderLayout()); // setOpaque(true); } } ./src/eric/GUI/window/LeftPanel.java0000644000175000017500000001204711362024224016132 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.window; import eric.GUI.pipe_tools; import eric.GUI.windowComponent; import eric.GUI.themes; import eric.JZirkelCanvas; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import rene.gui.Global; /** * * @author erichake */ public class LeftPanel extends windowComponent { private static LeftPanel me; private static int factorySize=250; private static int actualSize=0; //width of this panel private static final int marginW=5, marginH=4, space=2; private static int H=themes.getIcon("leftpanelbackground.gif").getIconHeight(); private static Image on_btn=themes.getImage("leftpanel_on_btn.gif"); private static Image off_btn=themes.getImage("leftpanel_off_btn.gif"); private static Dimension btn_dim=new Dimension(themes.getIcon("leftpanel_on_btn.gif").getIconWidth(), themes.getIcon("leftpanel_on_btn.gif").getIconHeight()); private static LeftPanel_macros_btn macros_btn=new LeftPanel_macros_btn(); private static LeftPanel_history_btn history_btn=new LeftPanel_history_btn(); private static LeftPanel_help_btn help_btn=new LeftPanel_help_btn(); private static LeftPanel_close_btn close_btn=new LeftPanel_close_btn(); public void paintComponent(Graphics g) { Dimension d=getSize(); g.setColor(Color.white); g.fillRect(0, 0, d.width, d.height); g.drawImage(themes.getImage("leftpanelbackground.gif"), 0, 0, d.width, H, this); // super.paintComponent(g); } public static Image getOnBtn() { return on_btn; } public static Image getOffBtn() { return off_btn; } public static Dimension getBtnDim() { return btn_dim; } public static void selectHelp(){ select(help_btn); } public static void select(LeftPanel_btn btn) { macros_btn.select(macros_btn.equals(btn)); history_btn.select(history_btn.equals(btn)); help_btn.select(help_btn.equals(btn)); me.repaint(); pipe_tools.actualiseLeftPanels(); } public static int x(LeftPanel_btn btn) { int macr=marginW; int hist=macr+((macros_btn.isVisible())?space+btn_dim.width:0); int help=hist+((history_btn.isVisible())?space+btn_dim.width:0); if (macros_btn.equals(btn)) { return macr; } else if (history_btn.equals(btn)) { return hist; } else if (help_btn.equals(btn)) { return help; } return 0; } public static int y() { return marginH; } public static void setPanelWidth(int size) { actualSize=size; } public static int getPanelWidth() { return actualSize; } public static int getPanelHeight() { return H; } public static boolean isPanelVisible() { return (actualSize!=0); } public static void setMacroBtnVisible(boolean b){ macros_btn.setVisible(b); LeftPanel_content.setPanelVisibility(); me.init(); } public static void setHistoryBtnVisible(boolean b){ history_btn.setVisible(b); LeftPanel_content.setPanelVisibility(); me.init(); } public static void setHelpBtnVisible(boolean b){ help_btn.setVisible(b); LeftPanel_content.setPanelVisibility(); me.init(); } public static boolean isMacroBtnVisible(){ return macros_btn.isVisible(); } public static boolean isHistoryBtnVisible(){ return history_btn.isVisible(); } public static boolean isHelpBtnVisible(){ return help_btn.isVisible(); } public static boolean isHistoryPanelVisible() { return ((isPanelVisible())&&(history_btn.isPanelSelected())); } public static boolean isHelpPanelVisible() { return ((isPanelVisible())&&(help_btn.isPanelSelected())); } public static boolean isMacroPanelVisible() { return ((isPanelVisible())&&(macros_btn.isPanelSelected())); } public static int getFactorySize(){ return factorySize; } public static void setFactorySize(int size){ factorySize=size; actualSize=size; pipe_tools.setWindowComponents(); } public static void showPanel(boolean vis) { int w=(vis)?Global.getParameter("leftpanelwidth", factorySize):0; setPanelWidth(w); pipe_tools.setWindowComponents(); pipe_tools.actualiseLeftPanels(); } public void init() { setBounds(themes.getVerticalBorderWidth(), themes.getTitleBarHeight()+themes.getMenuBarHeight()+themes.getCommentsHeight(), actualSize, H); macros_btn.init(); history_btn.init(); help_btn.init(); close_btn.init(); } public LeftPanel() { super(); me=this; setOpaque(true); setLayout(null); add(macros_btn); add(history_btn); add(help_btn); add(close_btn); } } ./src/eric/GUI/window/myJMenuItem.java0000644000175000017500000000167111344167020016466 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.window; import eric.GUI.themes; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JMenuItem; /** * * @author erichake */ public class myJMenuItem extends JMenuItem implements ActionListener { private boolean selected; public void action() { } public myJMenuItem(String s) { super(s); addActionListener(this); setFont(themes.TabMenusFont); } public void actionPerformed(ActionEvent e) { action(); } @Override public void setSelected(final boolean sel) { selected=sel; final int fontstyle=(selected)?1:0; setFont(new java.awt.Font(themes.TabMenusFont.getFontName(), fontstyle, themes.TabMenusFont.getSize())); repaint(); } } ./src/eric/GUI/window/tab_right.java0000644000175000017500000000223711360273727016237 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.window; import eric.GUI.pipe_tools; import eric.GUI.windowComponent; import eric.GUI.themes; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Point; /** * * @author erichake */ public class tab_right extends windowComponent { private Point winloc; public void paintComponent(Graphics g) { Dimension d=getSize(); g.drawImage(themes.getImage("tab_right.gif"), 0, 0, d.width, d.height, this); } public void init() { // win=StaticTools.getMainWindow(this); setBounds(pipe_tools.getWindowSize().width-themes.getVerticalBorderWidth()-themes.getTabRightBorderWidth()-themes.getTotalRightPanelWidth(), themes.getTitleBarHeight()+themes.getMenuBarHeight()+themes.getCommentsHeight()-1, themes.getTabRightBorderWidth(), pipe_tools.getWindowSize().height-themes.getTitleBarHeight()-themes.getMenuBarHeight()-themes.getCommentsHeight()-themes.getStatusBarHeight()-themes.getMainTabPanelHeight()+2); } public tab_right() { } } ./src/eric/GUI/window/VerticalLeftBorder.java0000644000175000017500000000275311360273727020021 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.window; import eric.GUI.pipe_tools; import eric.GUI.windowComponent; import eric.GUI.themes; import java.awt.Dimension; import java.awt.Graphics; import java.awt.MouseInfo; import java.awt.Point; import java.awt.event.MouseEvent; /** * * @author erichake */ public class VerticalLeftBorder extends windowComponent { private Point origin; private Point current; private Point winloc; public void paintComponent(Graphics g) { Dimension d=getSize(); g.drawImage(themes.getImage("verticalseparator.png"), 0, 0, d.width, d.height, this); } public void init() { // win=StaticTools.getMainWindow(this); setBounds(0, themes.getTitleBarHeight()+themes.getMenuBarHeight(), themes.getVerticalBorderWidth(), pipe_tools.getWindowSize().height-themes.getTitleBarHeight()-themes.getMenuBarHeight()-themes.getMainTabPanelHeight()); } public VerticalLeftBorder() { } public void mousePressed(MouseEvent e) { origin=MouseInfo.getPointerInfo().getLocation(); winloc=pipe_tools.getWindowLocation(); } public void mouseDragged(MouseEvent arg0) { current=MouseInfo.getPointerInfo().getLocation(); pipe_tools.setWindowLocation(winloc.x+current.x-origin.x, winloc.y+current.y-origin.y); pipe_tools.setWindowComponents(); } } ./src/eric/GUI/window/MainContainer.java0000644000175000017500000000140211324274707017013 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.window; import java.awt.Color; import java.awt.Dimension; import java.awt.Image; import java.awt.Point; import javax.swing.JRootPane; /** * * @author erichake */ public interface MainContainer{ public void setComponents(); public ContentPane getContent(); public Point getMouseLoc(); public Image getImage(String s); public Image getPaletteImage(String s); public boolean isApplet(); public void setLocation(int x, int y); public Point getLocation(); public void setSize(int w,int h); public Dimension getSize(); public JRootPane getRootPane(); // public Image createImage(int width, int height); } ./src/eric/GUI/window/clock.java0000644000175000017500000000131311303422133015341 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.window; import java.util.Calendar; /** * * @author erichake */ public class clock { private static long time; // public static void start(){ // time=Calendar.getInstance().getTimeInMillis(); // System.out.println("-- start --"); // } // public static void stop(){ // System.out.println((Calendar.getInstance().getTimeInMillis()-time)+" ms"); // } // public static void print(String message){ // long newtime=Calendar.getInstance().getTimeInMillis(); // System.out.println(message+" : "+(newtime-time)); // time=newtime; // } } ./src/eric/GUI/window/comments.java0000644000175000017500000000526211364534323016116 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.window; import eric.GUI.pipe_tools; import eric.GUI.windowComponent; import eric.GUI.themes; import eric.JZirkelCanvas; import eric.OS; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.geom.Point2D; import javax.swing.BorderFactory; /** * * @author erichake */ public class comments extends windowComponent { private comments_area Label; private static comments me; private static Image bottom=themes.getImage("tab_top.gif"); private static int H=themes.getIcon("tab_top.gif").getIconHeight(); private Point2D start=new Point2D.Float(0, 0); // private float[] dist = {0.0f, 0.2f, 0.4f, 0.6f, 0.8f, 1.0f}; // private Color[] colors = {Color.YELLOW, Color.ORANGE, Color.RED, Color.MAGENTA, Color.BLUE, Color.BLACK}; private float[] dist={0.0f, 1.0f}; // private Color[] colors={new Color(213, 232, 255), new Color(193, 212, 235)}; private Color[] colors={new Color(225, 239, 253), new Color(193, 212, 235)}; // private Color[] colors={new Color(225, 239, 253), new Color(146, 196, 247)}; private boolean JavaOlderThan6=OS.isJavaOlderThan(6); public void paintComponent(Graphics g) { Dimension d=getSize(); Graphics2D g2d=windowComponent.getGraphics2D(g); if (JavaOlderThan6) { g2d.setColor(colors[1]); g2d.fillRect(0, 0, d.width, d.height); } else { java.awt.LinearGradientPaint paint=new java.awt.LinearGradientPaint(start, new Point2D.Float(0, d.height), dist, colors); g2d.setPaint(paint); g2d.fillRect(0, 0, d.width, d.height); } g2d.setColor(Color.black); g2d.drawLine(0, d.height,d.width, d.height); super.paintComponent(g); } public void init() { setBounds(themes.getVerticalBorderWidth(), themes.getTitleBarHeight()+themes.getMenuBarHeight(), pipe_tools.getWindowSize().width-2*themes.getVerticalBorderWidth()-themes.getTotalRightPanelWidth(), themes.getCommentsHeight()); Label.init(); } public comments() { me=this; setLayout(null); Label=new comments_area(); add(Label); } public static void refresh() { me.init(); me.validate(); me.repaint(); } public static void setLabelText(String s) { me.Label.setLabelText(s); } @Override public void mousePressed(MouseEvent e) { Label.edit(); } } ./src/eric/GUI/window/RightPanel.java0000644000175000017500000000516711360273347016334 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.window; import eric.GUI.palette.PaletteManager; import eric.GUI.pipe_tools; import eric.GUI.windowComponent; import eric.GUI.themes; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import javax.swing.BoxLayout; import rene.gui.Global; /** * * @author erichake */ public class RightPanel extends windowComponent { private static int VerticalSeparator=1; private static Image back=themes.getImage("rightback.png"); private static RightPanel me; // private static int actualSize; //width of this panel public static boolean isPanelVisible() { return (me.getSize().width!=0); } public static int getPanelWidth() { return me.getSize().width; } public static int getSeparatorWidth() { if (isPanelVisible()) { return VerticalSeparator; } else { return 0; } } public static void setPanelWidth(int size) { Dimension d=new Dimension(size, pipe_tools.getWindowSize().height); me.setPreferredSize(d); me.setMaximumSize(d); me.setMinimumSize(d); me.setSize(d); } public static void showPanel(boolean vis) { int w=(vis)?(themes.getPaletteIconPerRow()*themes.getPaletteIconWidth()):0; if ((w>0)&&(Global.getScreenW()>=pipe_tools.getWindowSize().width+w)) { pipe_tools.setWindowSize(pipe_tools.getWindowSize().width+w+VerticalSeparator, pipe_tools.getWindowSize().height); } if (w==0) { pipe_tools.setWindowSize(pipe_tools.getWindowSize().width-getPanelWidth()-VerticalSeparator, pipe_tools.getWindowSize().height); } setPanelWidth(w); me.setBounds(pipe_tools.getWindowSize().width-getPanelWidth(), 0, getPanelWidth(), pipe_tools.getWindowSize().height); } @Override public void paintComponent(Graphics g) { Dimension d=getSize(); g.drawImage(back, 0, 0, d.width, d.height, this); } public void init() { setBounds(pipe_tools.getWindowSize().width-themes.getRightPanelWidth(), 0, themes.getRightPanelWidth(), pipe_tools.getWindowSize().height); PaletteManager.init(); } public RightPanel() { super(); me=this; setPanelWidth(themes.getPaletteIconPerRow()*themes.getPaletteIconWidth()); setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); setAlignmentX(0.0f); PaletteManager.construct(this); } } ./src/eric/GUI/window/LeftPanel_close_btn.java0000644000175000017500000000301011344167307020162 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.window; import eric.GUI.themes; import eric.GUI.windowComponent; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.MouseEvent; /** * * @author erichake */ public class LeftPanel_close_btn extends windowComponent { private boolean over=false; private static int W=themes.getIcon("tab_close.png").getIconWidth(); private static int H=themes.getIcon("tab_close.png").getIconHeight(); private static int marginW=5; private static int marginH=8; @Override public void paintComponent(Graphics g) { Dimension d=getSize(); if (over) { g.drawImage(themes.getImage("tab_close_over.png"), 0, 0, d.width, d.height, this); } else { g.drawImage(themes.getImage("tab_close.png"), 0, 0, d.width, d.height, this); } } public void init() { setBounds(LeftPanel.getPanelWidth()-W-marginW, marginH, W, H); } public LeftPanel_close_btn() { } @Override public void mousePressed(MouseEvent e) { // LeftPanel.showPanel(false); // Open_left_panel_btn.setSelected(false); // over=false; Open_left_panel_btn.toggle(); } public void mouseEntered(MouseEvent e) { over=true; repaint(); } public void mouseExited(MouseEvent e) { over=false; repaint(); } } ./src/eric/GUI/window/tab_btn_label.java0000644000175000017500000001252411360276521017037 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.window; import eric.GUI.pipe_tools; import eric.GUI.themes; import eric.JZirkelCanvas; import java.awt.Color; import java.awt.Component; import java.awt.Graphics; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; /** * * @author erichake */ public class tab_btn_label extends JLabel { private static final int fileMarginLeft=20, workbookMarginLeft=5; private static int marginLeft=fileMarginLeft, marginTop=2, marginRight=15; private MouseAdapter ma=null; private boolean over=false; private String label=""; public void init() { int w=tab_main_panel.visibleWidth((tab_btn) getParent()); setBounds(marginLeft, marginTop, w-marginLeft-marginRight, getParent().getSize().height-2*marginTop); String lbl=(tab_main_panel.rightcut((tab_btn) getParent()))?label+"...":label; setText(lbl); } public void setLabelText(String s) { super.setText(label=s); } public String getLabelText() { return label; } public tab_btn_label(String lbl) { super(lbl); label=lbl; setFont(themes.TabFont); setVerticalTextPosition(SwingConstants.TOP); setBorder(null); setOpaque(false); } public void setChanged(boolean b) { Color col=Color.black; if (b) { col=themes.TabChangedColor; } marginLeft=(JZirkelCanvas.isWorkBook())?workbookMarginLeft:fileMarginLeft; setForeground(col); init(); repaint(); } public void implementMouseAdapter() { tab_btn btn=(tab_btn) getParent(); tab_main_panel mp=tab_main_panel.getme(); tab_control_panel tcp=tab_control_panel.getme(); final ContentPane pane=pipe_tools.getContent(); ma=new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { pane.requestFocus(); } }; for (int i=0; iGlobal.getScreenW()) { WIN_w=Global.getScreenW(); } if (WIN_h>Global.getScreenH()) { WIN_h=Global.getScreenH(); } int x=(Global.getScreenW()-WIN_w)/2; int y=(Global.getScreenH()-WIN_h)/2; setBounds(Global.getScreenX()+x, Global.getScreenY()+y, WIN_w, WIN_h); setComponents(); setVisible(true); } /** * */ public void setComponents() { CONTENT.setComponents(); } public ContentPane getContent() { return CONTENT; } public Point getMouseLoc() { return MouseInfo.getPointerInfo().getLocation(); } public Image getImage(String s) { ImageIcon myicon; try { myicon=new ImageIcon(themes.class.getResource(themes.getCommonThemePath()+s)); } catch (final Exception e) { try { myicon=new ImageIcon(themes.class.getResource(themes.getCurrentThemePath()+s)); } catch (final Exception ex) { myicon=new ImageIcon(themes.class.getResource(themes.getCommonThemePath()+"null.gif")); } } return myicon.getImage(); } public Image getPaletteImage(String s) { ImageIcon myicon; try { myicon=new ImageIcon(themes.class.getResource(themes.getPalettePath()+s+".png")); } catch (final Exception e) { try { myicon=new ImageIcon(themes.class.getResource(themes.getPalettePath()+s+".gif")); } catch (final Exception ex) { try { myicon=new ImageIcon(themes.class.getResource(themes.getBarPath()+s+".png")); } catch (final Exception ex2) { try { myicon=new ImageIcon(themes.class.getResource(themes.getBarPath()+s+".gif")); } catch (final Exception ex3) { myicon=new ImageIcon(themes.class.getResource(themes.getCommonThemePath()+"null.gif")); } } } } return myicon.getImage(); } public boolean isApplet() { return false; } public void windowOpened(WindowEvent e) { } public void windowClosing(WindowEvent e) { } public void windowClosed(WindowEvent e) { } public void windowIconified(WindowEvent e) { } public void windowDeiconified(WindowEvent e) { } public void windowActivated(WindowEvent e) { } public void windowDeactivated(WindowEvent e) { tab_main_panel.hidePopups(); } } ./src/eric/GUI/window/LeftPanel_btn.java0000644000175000017500000000040211324545752017001 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.window; /** * * @author erichake */ public interface LeftPanel_btn { public void select(boolean b); public boolean isPanelSelected(); } ./src/eric/GUI/window/Open_middle_panel_btn.java0000644000175000017500000000551211360276224020527 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI.window; import eric.GUI.pipe_tools; import eric.GUI.windowComponent; import eric.GUI.themes; import eric.JGeneralMenuBar; import java.awt.AlphaComposite; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Stroke; import java.awt.event.MouseEvent; import rene.gui.Global; import sun.awt.RepaintArea; /** * * @author erichake */ public class Open_middle_panel_btn extends windowComponent { private static Open_middle_panel_btn me; private Image icon_off=themes.getImage("middlepanel_off.png"); private Image icon_on=themes.getImage("middlepanel_on.png"); private boolean isselected=false; private boolean isover=false; public void paintComponent(Graphics g) { Dimension d=this.getSize(); final int w=d.width; final int h=d.height; final Graphics2D g2=windowComponent.getGraphics2D(g); if (isselected) { g2.drawImage(icon_on, 0, 0, w, h, this); } else { g2.drawImage(icon_off, 0, 0, w, h, this); } if (isover) { final AlphaComposite ac=AlphaComposite.getInstance( AlphaComposite.SRC_OVER, 0.3f); g2.setComposite(ac); g2.setColor(new Color(0, 0, 80)); g2.fillRect(7, 5, 17, 11); } } public Open_middle_panel_btn() { me=this; isselected=Global.getParameter("comment", false); setToolTipText(Global.Loc("menu.display.comment")); } public static void setmode(){ if (me!=null) { me.isselected=Global.getParameter("comment", false); } } public static void toggle() { if (me!=null) { me.isselected=!me.isselected; me.repaint(); } Global.setParameter("comment", !Global.getParameter("comment", false)); pipe_tools.setWindowComponents(); comments.refresh(); JGeneralMenuBar.initToggleItems(); tab_main_panel.initToggleItems(); } public void init() { int x=pipe_tools.getWindowSize().width-themes.getTotalRightPanelWidth()-themes.getOpenLeftPanelBtnDim().width-themes.getOpenPanelsBtnsMarginW()-themes.getOpenMiddlePanelBtnDim().width; this.setBounds(x, themes.getOpenPanelsBtnsMarginH(), themes.getOpenLeftPanelBtnDim().width, themes.getOpenLeftPanelBtnDim().height); } public void mousePressed(MouseEvent e) { toggle(); } public void mouseEntered(MouseEvent arg0) { isover=true; repaint(); } public void mouseExited(MouseEvent arg0) { isover=false; repaint(); } } ./src/eric/GUI/themes.java0000644000175000017500000002400111360534515014236 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric.GUI; import eric.GUI.window.*; import eric.OS; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import javax.swing.ImageIcon; import rene.gui.Global; /** * * @author erichake */ public class themes { public static String GRAY="gray"; public static String BRUSHED="brushed"; public static String CURRENT=BRUSHED; public static Color TabChangedColor=new Color(28,106,161); public static Font TabFont=new Font("Dialog", Font.PLAIN, 11); public static Font TabMenusFont=new Font("Dialog", Font.PLAIN, 12); public static Font TabSelectedMenusFont=new Font("Dialog", Font.BOLD+Font.ITALIC, 12); private static String PalettePath="/eric/GUI/icons/palette/"; private static String BarPath="/eric/GUI/icons/bar/"; private static String ThemesPath="/eric/GUI/icons/themes/"; private static String CurrentTheme="/eric/GUI/icons/themes/gray/"; private static String CommonTheme="/eric/GUI/icons/themes/common/"; private static boolean MAClook=true; private static int palette_iconwidth=28; private static int palette_icon_per_row=6; private static int TitleBarHeight=35; private static int TitleBarTextHeight=25; private static int BoxesMarginW=5; private static int BoxesMarginH=4; private static int MenuBarHeight=20; private static int VertBorderWidth=7; private static int VertPanelBorderWidth=5; private static int VertSeparatorWidth=5; private static int ResizeBoxWidth=19; private static int ResizeBoxHeight=22; private static int MainTabPanelHeight=32; private static int TabBtnHeight=22; private static int ControlTabPanelWidth=150; private static Dimension CloseBoxDim, GrowBoxDim, ReduceBoxDim,OpenLeftPanelBtnDim,OpenMiddlePanelBtnDim; private static int OpenPanelsBtnsMarginW=5; private static int OpenPanelsBtnsMarginH=29; private static int comments_height, tab_leftborder, tab_rightborder, StatusBarHeight; private static int tab_corner_width=8; private static boolean showtabs=true; private static boolean showstatus=true; private static float opacity=0.5f; private static int tooliconsize=32; private static int palette_ZoneTitleHeight=17; public themes() { } public static void init() { ReduceBoxDim=new Dimension(getIcon("zreducebutton.png").getIconWidth(), getIcon("zreducebutton.png").getIconHeight()); GrowBoxDim=new Dimension(getIcon("zgrowbutton.png").getIconWidth(), getIcon("zgrowbutton.png").getIconHeight()); CloseBoxDim=new Dimension(getIcon("zclosebutton.png").getIconWidth(), getIcon("zclosebutton.png").getIconHeight()); OpenLeftPanelBtnDim=new Dimension(getIcon("rightpanel_on.png").getIconWidth(), getIcon("rightpanel_on.png").getIconHeight()); OpenMiddlePanelBtnDim=new Dimension(getIcon("middlepanel_on.png").getIconWidth(), getIcon("middlepanel_on.png").getIconHeight()); // tab_topborder=getIcon("tab_top.gif").getIconHeight(); // tab_leftborder=getIcon("tab_left.gif").getIconWidth(); // tab_rightborder=getIcon("tab_right.gif").getIconWidth(); // tab_bottomborder=getIcon("tab_bottom.gif").getIconHeight(); comments_height=80; tab_leftborder=0; tab_rightborder=0; StatusBarHeight=25; setComponentsSize(); } public static void setComponentsSize() { CurrentTheme=ThemesPath+CURRENT+"/"; if (isApplet()) { VertBorderWidth=0; VertSeparatorWidth=0; TitleBarHeight=0; TitleBarTextHeight=0; MenuBarHeight=0; ResizeBoxWidth=0; ResizeBoxHeight=0; MAClook=true; return; } if (CURRENT.equals(GRAY)) { VertBorderWidth=5; VertPanelBorderWidth=5; VertSeparatorWidth=3; TitleBarHeight=35; TitleBarTextHeight=25; MenuBarHeight=20; ResizeBoxWidth=19; ResizeBoxHeight=22; MAClook=true; } else if (CURRENT.equals(BRUSHED)) { VertBorderWidth=7; VertSeparatorWidth=5; TitleBarHeight=25; TitleBarTextHeight=25; MenuBarHeight=20; ResizeBoxWidth=19; ResizeBoxHeight=22; MAClook=false; } } public static void setShowTabs(boolean b){ showtabs=b; } public static void setShowStatus(boolean b){ showstatus=b; } public static void setTheme(String theme) { CURRENT=theme; } public static String getTheme() { return CURRENT; } public static String getBarPath() { return BarPath; } public static String getPalettePath() { return PalettePath; } public static String getCurrentThemePath() { return CurrentTheme; } public static String getCommonThemePath() { return CommonTheme; } public static int getTabCornerWidth(){ return tab_corner_width; } public static int getToolIconSize(){ return tooliconsize; } public static int getTitleBarHeight() { return TitleBarHeight; } public static int getMenuBarHeight() { return MenuBarHeight; } public static int getResizeBoxHeight() { return ResizeBoxHeight; } public static int getResizeBoxWidth() { return ResizeBoxWidth; } public static int getVerticalBorderWidth() { return showtabs?VertBorderWidth:0; } public static int getVerticalPanelBorderWidth() { if (LeftPanel.isPanelVisible()){ return VertPanelBorderWidth; }; return 0; } public static int getBoxesMarginWidth() { return BoxesMarginW; } public static int getBoxesMarginHeight() { return BoxesMarginH; } public static Dimension getGrowBoxDim() { return GrowBoxDim; } public static Dimension getCloseBoxDim() { return CloseBoxDim; } public static Dimension getOpenLeftPanelBtnDim() { return OpenLeftPanelBtnDim ; } public static Dimension getOpenMiddlePanelBtnDim() { return OpenMiddlePanelBtnDim ; } public static int getOpenPanelsBtnsMarginW(){ return OpenPanelsBtnsMarginW; } public static int getOpenPanelsBtnsMarginH(){ return OpenPanelsBtnsMarginH; } public static Dimension getReduceBoxDim() { return ReduceBoxDim; } public static int getCommentsHeight() { return Global.getParameter("comment", false)?comments_height:0; } public static int getTabLeftBorderWidth() { return tab_leftborder; } public static int getTabRightBorderWidth() { return tab_rightborder; } public static int getStatusBarHeight() { return showstatus?StatusBarHeight:0; } public static void setStatusBarHeight(int h) { StatusBarHeight=h; } public static int getTabBtnHeight(){ return TabBtnHeight; } public static int getTabControlPanelWidth() { return ControlTabPanelWidth; } public static int getLeftPanelWidth() { return LeftPanel.getPanelWidth(); } public static int getRightPanelWidth(){ int w=(RightPanel.isPanelVisible())?(palette_icon_per_row*palette_iconwidth):0; return w; } public static int getTotalRightPanelWidth() { int w=(RightPanel.isPanelVisible())?(getRightPanelWidth()+RightPanel.getSeparatorWidth()):0; return w; } public static int getPaletteZoneTitleHeight(){ return palette_ZoneTitleHeight; } public static int getPaletteIconPerRow(){ return palette_icon_per_row; } public static void setPaletteIconWidth(int i){ palette_iconwidth=i; } public static int getPaletteIconWidth(){ return palette_iconwidth; } public static int getMainTabPanelHeight() { return showtabs?MainTabPanelHeight:0; } public static void setDisable(final Graphics g, final Dimension d) { final Graphics2D g2=(Graphics2D) g; final AlphaComposite ac=AlphaComposite.getInstance( AlphaComposite.SRC_OVER, opacity); g2.setComposite(ac); g2.setColor(new Color(255, 255, 255)); g2.fillRect(0, 0, d.width, d.height); } public static boolean AllowMacLook() { return MAClook; } public static boolean MacLF() { if (isApplet()) { return false; } return ((OS.isMac())&&themes.AllowMacLook()); } public static boolean isApplet() { return (pipe_tools.isApplet()); } public static ImageIcon getIcon(final String s) { ImageIcon myicon; try { myicon=new ImageIcon(themes.class.getResource(CurrentTheme+s)); } catch (final Exception e) { try { myicon=new ImageIcon(themes.class.getResource(CommonTheme+s)); } catch (final Exception ex) { myicon=new ImageIcon(themes.class.getResource(CommonTheme+"null.gif")); } } return myicon; } public static Image getImage(final String s) { return pipe_tools.getWindow().getImage(s); } public static Image getPaletteImage(final String s) { return pipe_tools.getWindow().getPaletteImage(s); } } ./src/eric/GUI/pipe_tools.java0000644000175000017500000002163611361073601015134 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.GUI; import eric.FileTools; import eric.GUI.palette.PaletteManager; import eric.GUI.window.*; import eric.JGeneralMenuBar; import eric.JZirkelCanvas; import eric.bar.JPropertiesBar; import eric.macros.CreateMacroDialog; import eric.macros.CreateMacroPanel; import eric.monkey.monkey; import java.awt.Dimension; import java.awt.Frame; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import javax.swing.AbstractAction; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.KeyStroke; import javax.swing.SwingUtilities; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.ZirkelFrame; import rene.zirkel.macro.Macro; /** * This is a static class provide to be a bridge between the GUI * packages and the others. Other "engine" packages should always refer to this * one whenever they need to interact with the GUI. The GUI also must go through * this class to interact with the engine. * @author erichake */ public class pipe_tools { private static MainContainer owner; /** * Called by MainWindow or MainApplet at the begining of * initialization process (constructor or init) * @param mc : the main container -> JFrame or JApplet */ public static void init(MainContainer mc) { owner=mc; themes.setTheme(Global.getParameter("LookAndFeel", themes.GRAY)); } public static boolean isApplet() { return owner.isApplet(); } public static MainContainer getWindow() { return owner; } public static Frame getFrame() { MainContainer mc=owner; if (mc instanceof MainWindow) { return (Frame) mc; } else { return new Frame(); } } public static ContentPane getContent() { return owner.getContent(); } public static void setWindowComponents() { owner.setComponents(); } public static Point getWindowLocation() { return owner.getLocation(); } public static void setWindowLocation() { setWindowLocation(owner.getLocation().x, owner.getLocation().y); } public static void setWindowLocation(int x, int y) { if (yGlobal.getScreenW()) { w=Global.getScreenW(); } if (h>Global.getScreenH()) { h=Global.getScreenH(); } int x=(Global.getScreenW()-w)/2; int y=(Global.getScreenH()-h)/2; setWindowLocation(x, y); owner.setSize(w, h); } } public static void setWindowBounds() { setWindowBounds(getFrame().getBounds()); } // r est le bounds désiré de la fenêtre : public static void setWindowBounds(Rectangle r) { if (getWindow() instanceof MainWindow) { if (r.yGlobal.getScreenY()+Global.getScreenH()) { r.height=Global.getScreenY()+Global.getScreenH()-r.y; } getFrame().setBounds(r); // I know, this is weird, but it work's (for palette display) : owner.setComponents(); owner.setComponents(); } } static private KeyStroke enter_key=KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0); public static void setStandardKeyInputs() { KeyStroke key=KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, InputEvent.SHIFT_DOWN_MASK); owner.getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(key, "objectTracker"); owner.getRootPane().getActionMap().put("objectTracker", new AbstractAction() { public void actionPerformed(final ActionEvent arg0) { ZirkelFrame zf=JZirkelCanvas.getCurrentZF(); zf.track(); } }); key=KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0); owner.getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(key, "escape"); owner.getRootPane().getActionMap().put("escape", new AbstractAction() { public void actionPerformed(final ActionEvent arg0) { PaletteManager.setSelected_with_clic("move", true); CreateMacroDialog.quit(); } }); } public static void setMacroPanelKeyInputs() { owner.getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(enter_key, "macro_enter"); owner.getRootPane().getActionMap().put("macro_enter", new AbstractAction() { public void actionPerformed(final ActionEvent arg0) { CreateMacroPanel.nextStep(); } }); } public static void removeMacroPanelKeyInputs() { owner.getRootPane().getActionMap().remove(enter_key); } public static void toFront() { if (!isApplet()) { MainWindow mw=(MainWindow) owner; mw.toFront(); } } public static JPanel getCanvasPanel() { return ContentPane.getCanvasPanel(); } public static void duplicateTab() { try { String s=FileTools.getCurrentFileSource(); tab_main_panel.addBtnAndSelect(tab_main_panel.getActiveBtn().getTabName()+" copy"); FileTools.setCurrentFileSource(s); } catch (Exception ex) { } } public static void TabHaveChanged(boolean b) { if (JZirkelCanvas.isWorkBook()) { tab_main_panel.allTabsHaveChanged(b); } else { tab_main_panel.currentTabHaveChanged(b); } } public static void actualiseMacroPanel() { LeftPanel_content.setContent(JZirkelCanvas.getNewMacroPanel()); JZirkelCanvas.ActualiseMacroPanel(); } public static void actualiseLeftPanels() { JZirkelCanvas.removeLeftPanelContent(); if (LeftPanel.isHistoryPanelVisible()) { LeftPanel_content.setContent(JZirkelCanvas.getNewCDPPanel()); } else if (LeftPanel.isHelpPanelVisible()) { LeftPanel_content.setContent(JZirkelCanvas.getNewInfoPanel()); } else if (LeftPanel.isMacroPanelVisible()) { actualiseMacroPanel(); } } public static void setTitle(String s) { getContent().setTitle(s); } public static JPanel getMenuBar() { return new JGeneralMenuBar(); } public static boolean isTabEditAccepted() { return (JZirkelCanvas.isWorkBook()); } public static void quitAll() { JZirkelCanvas.quitAll(); } public static void closeCurrent() { JZirkelCanvas.closeCurrent(); } public static void onTabActivate() { JZirkelCanvas JZF=JZirkelCanvas.getCurrentJZF(); if (JZF!=null) { JZF.onTabActivate(); SwingUtilities.invokeLater(new Runnable() { public void run() { PaletteManager.selectGeomIcon(); PaletteManager.fix3Dpalette(); PaletteManager.init(); actualiseLeftPanels(); } }); } } public static String processTabName(String name) { if (name.endsWith(".zir")) { name=name.substring(0, name.length()-4); } else if (name.endsWith(".zirz")) { name=name.substring(0, name.length()-5); } name=tab_main_panel.uniqueName(name); return name; } public static void setMacroHelp(Macro m) { } public static void setComments(String s) { ZirkelCanvas zc=JZirkelCanvas.getCurrentZC(); if (zc!=null) { zc.setJobComment(s); } } public static boolean isComments() { ZirkelCanvas zc=JZirkelCanvas.getCurrentZC(); if (zc==null) { return false; } return (!"".equals(zc.getJobComment())); } public static void saveFigure() { FileTools.saveFileAs(); } private static monkey monkey=null; public static void monkeyStart() { ZirkelCanvas zc=JZirkelCanvas.getCurrentZC(); if (zc!=null) { monkey=new monkey(zc); monkey.start(); } } public static void monkeyStop() { if (monkey!=null) { monkey.stop(); monkey=null; } } } ./src/eric/GUI/icons/0000755000175000017500000000000011340324662013222 5ustar yvesyves./src/eric/GUI/icons/bar/0000755000175000017500000000000011340324500013755 5ustar yvesyves./src/eric/GUI/icons/bar/obtuse.png0000644000175000017500000000163111340324124015767 0ustar yvesyvesPNG  IHDR DgAMAOX2PLTE > 3+)q<\?QhNwl4 &:90˷L8 @<_m3-m /=] 8+!1ďH,g"+C^-“- e17C_b hvܤB sua|s&1J>Ox)=T Ul2@b#-DBTy%bLbNgz V|T&ߕ_^Wy\u)5R>z½_(^x~\-SI]I]o U s5qQhFZ;KrV%-=NwȆȒH gPWtRNS'( "2# آxq$Ā#ӫdžlFv gHSkS CX%X ܧC wiMaIDAT8c`iBYIFFFI] LbI}}\Lb!6y] W7|T4T)@\+oTXGK0ө`IENDB`./src/eric/GUI/icons/bar/filled.png0000644000175000017500000000175711340324147015743 0ustar yvesyvesPNG  IHDR DgAMAOX2PLTE   "###$%%%&&),0$%48= B!E $L"&Q%)W',\).`+0e,2h.4m06q18t29w5;|6<7>8?:A;C=E>F?GMTSZV]Za_ebiekjpmsrxsytzy{|ěěǜHOFNCLCKAJAI@I@H@H@H@H@H@H?G?G?G?F>F>Fv"mtRNS !#$&'+* 0 8F!Wcv}!ֹͽ˜IDAT8˭O0R4"eLġ0P3Q d-F&~?WncMq xPx(Ƀ*Ȓ`quI)55ħ_,ݮat_A};}bHo _Aeʚ֎/ F^h7@B-rXXcf}5JM݊[S-8Ð&v& =4$(gAov$'XNr^Y)pJq5HB/>Rv윜 ~sjz8XOr^WJ$Gdžv6"ƙLcHx8ުjpSIENDB`./src/eric/GUI/icons/bar/cnormal.png0000644000175000017500000000111511340324337016124 0ustar yvesyvesPNG  IHDRFgPLTE@+_+j6p>, I!Z@HtRNSXq8.`v W1) 6 p4-L%G?tP0nTS< UQ5^Jc=:&l/wO7!+r3j4IDATӵV@3-MH/ iT@{,T/Ä'ٗ8b(蟧(8\ǐuTzo=i8Vj #zUZö4zLL˭?Fb&ZMnO gAR~I<2Pk5eQJYZ&aW_CB0Ƅ@OIENDB`./src/eric/GUI/icons/bar/color3.png0000644000175000017500000000122111340324243015664 0ustar yvesyvesPNG  IHDR DgAMAOX2PLTEc`bY[_WoJX]b]aO5_^_b"Y`4#wP}T[<sMlHUfDfD\k U˵§qâɫd9u:tRNS  3 %1,`#t¢ҷ.,@NpgrZ`aL3IDAT8Rr0Ī C r`Kx&䐽ij_-ut2ĆJ4Jo4n];UWXbƞ6.@@~$ks뙱ւZ0'ۣѭ88Fߞ]:5):`,1cZ]zX'WYP0[LNGT'aH`zKaM; n.- 2ffS857vzogzYn.IN)۝ƦfT*I#g9W~D";kFlIENDB`./src/eric/GUI/icons/bar/aimantON.png0000644000175000017500000000205111340324471016176 0ustar yvesyvesPNG  IHDR ^PLTEHB6WB{ /1 '& zb80 5<&!+'n'*oooZJdef%\E_F~")~4&V0." U:.yMCZ[[%%aHY(a)0Y@a ?.2)/="]b@20'N;`G *!rUXAjM<0S=kPeLG6sUx^,#oR[CctRNS V"j sk 0H3Q-e&]~9b,}(8D=g\A.9FO4ox( Z$qYIDAT(ϽmS@w "J-D*BAabR%M‹DH@@gկ==ޝ#g zbŴϹĹc bPk4ZeˁWƸ ՉK߭62*f|N bְwl"4//lG:Į"3[nQ714= 5gajZIDZt9qPD:u _-(Qs5-Q]Cm?ớw⨘̸*Z`Ɵ$x[̎2틽v a; @P~#j3П/B y>v$I+3h7d2t).,S=g PZ5VїI7=£,ddܳ&tV 2 owq]A eaﺴ^T5b{va\ղ}2iS7sn˥wS]x\uMe-. :ـaFethIENDB`./src/eric/GUI/icons/bar/cthin.png0000644000175000017500000000110511340324155015573 0ustar yvesyvesPNG  IHDRFgPLTE, pj_+@+6>I!Z@zCtRNS 40#=&' !%?*<K-C P73YUJ F. )(>+G6;$M1QTbf8%.ZIDATӵUrA=n0{$A"XdfaHQ9h8!< ?EiR)#Py[<6AaEeFwY x{7w?Z(|J *Ƌ˺jF' ;_ޙHrmN]ӪFnqTB=ΘܲL ƅ\ =Ĕb)k4VwjQIENDB`./src/eric/GUI/icons/bar/color1.png0000644000175000017500000000122211340324256015667 0ustar yvesyvesPNG  IHDR DgAMAOX2PLTEx{zowYcAy_uK\ti+tzqkmyuhtvnTTr UUqqˢЫ| p:tRNS    3%1,``.@p,Z#rtټgNa|84IDAT8Rr0Ī!^B/ * Lr!{Ӽվ[*7(ij(e :Q ߰8l-* 7t@M,1|gO:@Ǵ~$c¼r뙱e('ۣ1 ,IoO.+H0gaXVK2BXݯI+0G-A#{yș;y͓0$0SP붰A-%lکefm?ܑpjn4$MVz}1;[#40& w]?-ZT2-ϡE wFYT;IENDB`./src/eric/GUI/icons/bar/partial.png0000644000175000017500000000212511340324116016122 0ustar yvesyvesPNG  IHDR DgAMAOX2PLTE*R"eԊO ( b/R-9Ȟ ,RS* fNS -'ݮ^E #6 Z2K+rp3#߮g ʂWq^賃-a;'  }_jW4j|]  \RZ  ҝp@H P'yʘ涊%d$XE`n^]- ~ $-m3FC ^Zh1e.<"d#T":bFwp50yq3`8^ɉqtRNS   )"Eo$, W&-: *Cjw͎GXI덛L˔ 4rRXB<7@Fc6{ ~EdbQ]$NFCH!G)|Oƿ4M7!\IENDB`./src/eric/GUI/icons/bar/cod4.png0000644000175000017500000000057211340324303015321 0ustar yvesyvesPNG  IHDRdPLTE  Ӡo Y%6ɖ! ËÊ {:ӌ`;UQ ;$&҉\zFm4 ]5V1 !t>f#tRNS3NQW9Hf?3$$sA*sIDATӥ0DQ 2"e6oEzӆ&a!E4HI5sx*^]. ȩ?Iٯ8B h@$H N ) wIENDB`./src/eric/GUI/icons/bar/type5.png0000644000175000017500000000164111340323736015545 0ustar yvesyvesPNG  IHDR DgAMAOX2PLTE>CN$+< &5'&.?nu  7B[!-!'7ku ,# &5LTf \l}  '6W^n}/8N"'6 )1D"/ QVaOUb;@K"/=CQ~ )")9"(0C  -bj}$$2~| ,v09PIXzCQp!'69D_ -kzcr#*:1:Q%3KY|yCPokyGUvM[hweu NjtRNS  #"eJ奢=P3"$ww8(D τ+'q O*Y/Dz+@? oNЫ+! `43x ^mťVIDAT8c`qiti&8&FF$cf& %~N,lN*Ql*ٴdmx=}0T eFz&U)Ě2+ͯL+.Q`FWjcUQkZ?]UIDB&B FfN!&jb;P8A%N2 gƖ=jno:g8p.׿e]V5)a, 1c=4Rc, cLg@-A#{yȩ;y͓0$0fP붰Ax%lکfm?ܡpjn4$Wz}1=[C40&jaՋFζ_O_D"; 6Fn#IENDB`./src/eric/GUI/icons/bar/solid.png0000644000175000017500000000175011340324046015605 0ustar yvesyvesPNG  IHDR DgAMAOX2PLTEpFHZHNbNK^KtNH9HHZH hVb )PdPQeQMaMB-J]Js  ! !M`MTTgQ='PdP1$GXG HZHPdPRfRU1`ML_Ld0Ou BSBL`L=L=H$ 3:U;J;MaM'CTC4'K^K jM(C%U0=0ݹέuub /Ťii:KճFB^u^p{{PGGssd|dʪ@ShSae]_tRNS    ،&lMmjc 0#y+o0&EJY,.wJ,5-E;~U"[ARIDAT8ˍgOArłb vEc슽7upw<BcLJ- D+v^Ė7d MuNͲG:2=*h%maJ/+Z c? P[^EWs:s#@N>'w^CĩsUq5)8tDݩ@h'Ar{$|+@'vTfvH[,8OVej3(1e}n84Ey"X=s@ޫ&@VKF\ւC͖H p""Ŵ)zj|u33/!L?,Hb{1'L݄]i2}ͮKEr'f^,;Ϩc"2.=!i\!IENDB`./src/eric/GUI/icons/bar/csuperhidden.png0000644000175000017500000000102711340324172017145 0ustar yvesyvesPNG  IHDRFgPLTEWWW%%%{{{ kkkqqqXXXCCCKKK>>>VVV111+++)))&&&]]]666 <<< ⶶŧq9_tRNSīarnƳ`I:հ?-l*,IDATeA @.20 ;$,&M RôyBܝh9L;F}=/'+$I"Q7_N212j7{J.W>'KAep}3FO )^7nX415@ +E~;QIENDB`./src/eric/GUI/icons/bar/type1.png0000644000175000017500000000110511340323775015537 0ustar yvesyvesPNG  IHDR DgAMAOX2PLTE&Wh`pixԔUf$2O_+%3|9E_VTd1;Rr,5Itp~BOmBPn$ tRNS  %#3-B1>4kDIDAT81D./!3E__X,(!ı9 ]cr2%+Ax8T <lBuPⶠ9xӭ]W*Ar^QM?_Y4;\6AםZaJ0v([$nPv0Sʶkr73|Ca_JPƺ!.v6Om~zgH$IENDB`./src/eric/GUI/icons/bar/cbrown.png0000644000175000017500000000016611340324365015771 0ustar yvesyvesPNG  IHDR PLTEɫdn tRNS@fIDATc`@\VZ#CCC$t!ܶ@1UrIENDB`./src/eric/GUI/icons/bar/angle2.png0000644000175000017500000000212611340324440015637 0ustar yvesyvesPNG  IHDR DPLTE             #$#! %&%#',$/28*466 9'9)39#=%@$G N$ X)!a.$i4'q:/v>/{E:|F9~H2I5J3N+\9b cc fhEm2m#mJp(r?rAr;rGuTuA"ۻȤl]~QXfSμ_hIDAT8uo0sɎeLlӪN0XXT:Xd&V9 l"99(~ G0Pxqe 0)*)[m@(ᵪEkHmԱM@v~5>O&GrH{<!qM ;ԂpU@$VH+4 r(!"Wx=fi,ak/܇b1ORڌ57?U4d.GZR Fe.@PV}$hlVޛO:24 h@IĹ8pg jrɍ9;a=sQj2ѽ'^]y|>ұ cI3}ھ8ZoI*e.U%xg5ld )r׋kgKAF+zl7x% SLԽSۄW˚ɬFP+bQ@KFB A=DIENDB`./src/eric/GUI/icons/bar/angle1.png0000644000175000017500000000216611340324447015651 0ustar yvesyvesPNG  IHDR DPLTE      "%),6'6!7&8*809<#6A"AE;H"L"R&P'H(\+Z-O-h2"d4k9q9)o=B*hD*~G G/K(yP/R+S7U-W,X4X/Y0Y1Z4\5^8]2a;c=c0dJWfxtrplibZLC<46vm`>MD4%IDAT8uo0Q~@"C! 06MLhjiF F72 TDBA_pOV/p !B 8EI *#Bķ w۠]5(D '" pur ϜUw0G83#=q ,=~$$-8s`n7F Wϙ;_o5?w9`Ȝ^v6zDU/V~ur33,duڂ6AyT}Nygx]',|n3;MxI,/Ø;C?tnh maٵkJ=w4n_7rD|׫Wc1eJy9^>1ԳjSY45T`9뚲0 Y={eᩬE37ZՓTkUK WQd+,_ÒRIENDB`./src/eric/GUI/icons/bar/cred.png0000644000175000017500000000016611340324223015405 0ustar yvesyvesPNG  IHDR PLTEߪotRNS@fIDATc`@\VZ#CCC$t!ܶ@1UrIENDB`./src/eric/GUI/icons/bar/cblue.png0000644000175000017500000000016611340324372015567 0ustar yvesyvesPNG  IHDR PLTEv!itRNS@fIDATc`@\VZ#CCC$t!ܶ@1UrIENDB`./src/eric/GUI/icons/bar/cod3.png0000644000175000017500000000057311340324311015320 0ustar yvesyvesPNG  IHDRdPLTE Ӡo UÊ Y%6Ë!ɖ ;{:ӌ` ҉\zF;$& m4Q ]5V1 !t>$#tRNS3NQ?Hf9W̴3$$O&tIDATc` "0)/;c< e%@ A@\L ,b:  `i)U5}փc SK0B#٘cA`,@XfV Փ)SIENDB`./src/eric/GUI/icons/bar/showvalue.png0000644000175000017500000000204311340324071016502 0ustar yvesyvesPNG  IHDR DgAMAOX2PLTE     &""%"'+$'$+1(,0+17415.38.4:6:>]TCcUDAVYBX[BY\WZJC[hC[kS[O[FE\gE\bF\]F]ZF]b^IH_\I_bK__gQq[ybmy~ƲζеRaTBPs}tRNS "'.7CNV_mqw{}wtj_~OlFY>9H9?:DIDAT8˽k0{<#С#ْbwN0t_+t9 KK =m26H6jaa>ź!SnMjt4MWvҭI.ZSm*5޼nUȈ5V|o9u`lVG+dž3S`rej_ K@Ϯ=9Jj$/ AYĵ"IIENDB`./src/eric/GUI/icons/bar/color4.png0000644000175000017500000000122111340324235015666 0ustar yvesyvesPNG  IHDR DgAMAOX2PLTE$%$!#ff!}}$$ 11$mm VViixxKKwwqq!~~ {{$####"#````"/h~Ŭ%Z:tRNS    3%1,``.Z,#rt@gpN۷a H%eN d#9Z@m!yFw/=T=n¡JСK?3ᎄSsLuǮ'&p>iv1iU *^4rMrV9_FkIENDB`./src/eric/GUI/icons/bar/type2.png0000644000175000017500000000153611340323767015551 0ustar yvesyvesPNG  IHDR DgAMAOX2PLTECQp9E]  ,kx6>S JLSUe$ 7@V$iu)1D#v{=He$,<*)1Efu-6KJX{#04>Vϓ5?XrUeN]5?WKZ|)1DՊo~ &5L[CQp`paqixYi|ѷϸЫXhGUvz@Mkdt?LitRb2Q[R*rs$rXL&i,1M!ZHN^dݪKypOYά{r{JR:v?ܽ}?&:q'WIENDB`./src/eric/GUI/icons/bar/cod1.png0000644000175000017500000000055711340324325015325 0ustar yvesyvesPNG  IHDRdPLTE  Y%6 !;Ë Êӌ` UӠo{:ɖm4 &V1;$]5zF҉\ Q !t>m#tRNS3NQ$?fW3$Ɛ̴H9r [hIDATc` ╖į4(0HLJB`i-MP3u0c鈁@\ft,3^ +@5 ']cIENDB`./src/eric/GUI/icons/bar/cgreen.png0000644000175000017500000000016611340324352015736 0ustar yvesyvesPNG  IHDR PLTEЫ| tRNS@fIDATc`@\VZ#CCC$t!ܶ@1UrIENDB`./src/eric/GUI/icons/bar/type0.png0000644000175000017500000000103711340324002015522 0ustar yvesyvesPNG  IHDR DgAMAOX2PLTE:E`;FbP`IWyTe9E_-5J5?W@MkESsмӖr̯* ,ЎWhEStO^Yio}èŠz| '6etN]$$tRNS "7-4 # GIDAT8V@T ("Π8 c8deTxdPoeSfffSgg!h8h3iiRaiUj&j-k3lQl.m7mOm(noEpLp&o.ooAr$s!t u!rt]r|˳ʽáʩʩ~XtRNS "$',/110/-jY(K$<#5/!)#&zv{ۿdIDAT8um@SL۔V Ġ5&,/Y6TmEWiԺBNM,Ӥɝ3Δ)\R$YDL0ۺͲ>UM`.0~UFdiH!p859yA?c|t.>3+83cX'ak2Iҝe8Tl:(4-^H/njr2ۡr 4_K ;Z{sOE("9paDP,ĻvD;"7ř|>{u?F?H.%ȳ+̲oT҅ux'MӬVw}7~2DUCHՍWojY2 $B$#ݨ]n S y QG;RQ(!`8Q5t^ D eǡnٗJ!lH ؿ/" FDe dRAs IENDB`./src/eric/GUI/icons/bar/large.png0000644000175000017500000000121711340324130015555 0ustar yvesyvesPNG  IHDR DgAMAOX2PLTE000iii,,,+++RRRmmm---999TTT(((===AAA !!!CCC<<<WWW555HHH%%%VVV2W0tRNS '(&- +$) */ 4"1., 0#!%5!ZIDAT8Փv@ EF1@ {T?'>9NVHOʿc1@ekȤz Ƿ׏NR4KS-UͿ ?'[0}r^]ϧ_zxHnج̣DwZ=X6ǁ wxգW_ 3:;0J)I"AAVRIENDB`./src/eric/GUI/icons/bar/angle0.png0000644000175000017500000000214011340324457015641 0ustar yvesyvesPNG  IHDR DPLTE      ! $',/7+2:%=&@%7<?G F# O$U'L(]-"U/f3#_7p9)}B&H*rL-N)U2X4[2^,`0a;cBe6e;d8f+f2g3g$im7o"w&.ȉV9ԍRKۖ[R\^SŧtRNS  "#&)+.0459=EP\k|xssvwwwsohZRO>IxfGOUѾIDAT8uo@{ͻ{ ܋t鲭ɜj5b7+٭l_߁ԩ{E|<r!gX$2 @,OW#?.Ӥ;/& d^#wI~y5@DuGr%wsw]6|w3L[$|ܵﹻ.q:1MU1{uP_^,Zեʮ /;] @ѠM}I;s6ll0:F?Ω|RsDlT݋4A Fȡ,ʄWaP]ZS+.c[{8+RCp N<˶!+*yC6יYH5 cLTo%;=@ey5 TX*Xޟaؤ*/4Um%ŠN8 9ۊxx:uNʵ6@ FͬBDxV i/t͍``@IENDB`./src/eric/GUI/icons/bar/thickness0.png0000644000175000017500000000043111340324031016533 0ustar yvesyvesPNG  IHDR @ލkWPLTEjp6@+, >_+ZI!qtRNS'  %&^IDAT(9 @Q@ܗl,|mLB~Cp @Ks.)*JZ!13.Kh1;R%ANmHVw|l{m{qŪsȄ6AZ@Mk&-?)1D"/>Jgt&.?.7M_ogv9E_TdVg%,>Ƈ$ͭEtRNS   "*A )'376%=)0-98!=&Q#510 9) +<9EHhZIDAT8rA D=5$̌333vO]uUI]D*B庀c8\-#i%BXv lk)\].=WުlV1QBmT]OˍKnOϾkO0;2tq`B9nz.gS 3 \{6xaJɁM3Uef2 ݡTO,ki?Fڑ&(Z.o *Q~ɡڣo'IENDB`./src/eric/GUI/icons/bar/hide.png0000644000175000017500000000160611340324137015405 0ustar yvesyvesPNG  IHDR DgAMAOX2PLTEKKK666111))) CCCVVVqqq ]]]WWW>>>&&&+++<<8N G=#K4M,@xIjg3ɿ'8^ߞ)~3{bǴ/y),b/'ZS2WRIlR 8 H~UfeAxt8:?v\l,Bx;8cT>3bAX8J/P(efCAVR fPPRp U(GO ;i#Оnu)G0"t5U&h=>췙Mx]}PJ&ac٪Uo keIENDB`./src/eric/GUI/icons/bar/thickness1.png0000644000175000017500000000053511340324023016542 0ustar yvesyvesPNG  IHDR @ލk{PLTEI͝l[p鯄cE:% %?+T&k3 hmn2" ݆DLƫatRNS"7  #-*4k{IDAT(0 a"$)-*?!`:텃ku3 &!s@Qx3C}تVI=@ޫŊpٌ_KcXl$gg*2A4qMI|Gdg8f8IENDB`./src/eric/GUI/icons/bar/thickness3.png0000644000175000017500000000123111340324010016532 0ustar yvesyvesPNG  IHDR DgAMA7PLTE***,,,CCC___***vvv888+++ppp((())))))ڦwwwJJJ```nnnMMM dddooo@@@oCtRNS"=    4:* 3.,4 8 {35Y)!%6^1ЋAyIDAT8c`T\<2#tRNS3QNHΑfӱ?9Wչ̴̐$$3nIDATӭDQ"Uu&3qK\x(ʯ \I" v{)=W1=DT5OF]|nӂ`B}!c0AfMgC @IENDB`./src/eric/GUI/icons/bar/cod0.png0000644000175000017500000000034411340324332015314 0ustar yvesyvesPNG  IHDRdNPLTE Ë !ɖÊ; ӌ`{: UY%6  m4&QzF҉\;$!t>`v%tRNS3̐3$$̴Y5IDATc`̀ `KsJbB"<`i~qa ,@P,ƈp1 a%L?IENDB`./src/eric/GUI/icons/bar/cshowvalue.png0000644000175000017500000000032011340324211016635 0ustar yvesyvesPNG  IHDRf-PLTE@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!atRNS`P@0߯DIDATc` 420XO0=Zb2>=)P f>c``zg 3x.6m>wIVAIENDB`./src/eric/GUI/icons/bar/chidden.png0000644000175000017500000000114411340324344016067 0ustar yvesyvesPNG  IHDRFgGPLTE(*4BBB,.8)+5 +-8999###!!!JJJ ,.9 *-7%%% iiissswww111;;;58Epolzyv>BRDHXQQN___Ħ6:G걱#HHGa_]gfcgfdjifLLL8;I?DUPPPXXXՑ˯ǨCCC;?O⠪֪,tRNS)! |S n_׿0᪦ZeIDATc`  211)h"SQ.#薞feh&c2MOKMӄJ&%[DDzK@Ĥխ}<C¼Rt!bNɾPJљ@co3'  D en$(2 /B9IENDB`./src/eric/GUI/icons/bar/aimant.png0000644000175000017500000000153711340324500015742 0ustar yvesyvesPNG  IHDR ^PLTE3_O#m8vBY-q1skҡI|'qb]\P{m`zNwWyRzmꋋ$vbK|pK|Fte^`Muç^bEyii@叐TdnCv+X,tW|_/tѢe4R":\v`!sfK{&oPܽ`D{y:Hx^JʶO|Ew(qEzG{R}@wAz/y/tXm [ efT}/t3v7x^Xs#riM|im$p#ia𲳴Zk7v=x4t[LtRNS3 v[P%Rva91'.ᶕN E}SY2^&ckqbBIDAT(c`+#jhʅSZ_#4MЀ[tAv50++ХMb*% 62ZFhYng I/HVAqy^PuӋМѡr?!V0SE,U'Z̴JJJC3]'$*Ug.*\ZZd(HUعGsxmeTi[5Bx-2]D`H3gpzօah5:ll1m[ZR, ԵÊ02wqXFr}r`$j]+ʫ=k1 2G@?IENDB`./src/eric/GUI/icons/bar/color5.png0000644000175000017500000000122111340324230015662 0ustar yvesyvesPNG  IHDR DgAMAOX2PLTE_)m>zz ׉UUqqݡߪ:tRNS    3%1,``.@p,Z#rtۼgNa3IDAT8Rr0Ī ۴ rؖ`&䐽ij_-45e :Q aqjnfPVQ>&jb;P8A%N2 gƖ=jno:g8p.׿e]V5)a, 1c=4Rc, cLg@-A#{yȩ;y͓0$0fP붰Ax%lکfm?ܡpjn4$Wz}1=[C40&jaՋFζ_O_D"; 6Fn#IENDB`./src/eric/GUI/icons/bar/bold.png0000644000175000017500000000114011340324416015405 0ustar yvesyvesPNG  IHDR DgAMAOX2PLTEwww666```|||>>>PPPRRR[[[<<<333~~~eeeiiiDDDTTTZZZ000lll...ppp LLLFFF~/tRNS  3), 25 #8 A(7'6>+.!<1:;=uIDAT8YS1d7. ,ʭ"xK&[eWId2!O"Jb>+,Ao=I,#gӯz*%3?Ar>we9>*ڀ1oUq$޷~[g@9e9nr|w=Lv5IaZƵ R. FGHp%]jp`Ty}7IENDB`./src/eric/GUI/icons/bar/csolid.png0000644000175000017500000000143211340324202015737 0ustar yvesyvesPNG  IHDRFgPLTE    ! %%*+2.9#2>(4B-7F2=F5CJ=LKDWMMa_SRjTIqUE}V:Y4[,`*a#h$j mnpprtyyzz{|~ #)%/3މ9ڌ@ؑLҕYșn~ÙŠПϟПϞΝ͚PUhPUhPUgPUhPUhRUeQUfPUhPUhWT[TT`[SVNPdhXltRNS "&*/5;@IPW`ekpx}ϽĮKIDATM;o0a\M'q[ZƐ &4Ė(eTuAl AD⛬缃Zy6Sc+#\JKDiOGyqn<`J( Ti[2_̢/KLiX&AƔ券>4u.|`m@p۩84M?p]e*߀s{z_Yvk7HCIENDB`./src/eric/GUI/icons/bar/cshowname.png0000644000175000017500000000106111340324216016451 0ustar yvesyvesPNG  IHDRFgPLTE@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@:Wu9Sq#3C#3D8Ts?\z 7Rm ?\y.DZ7Qm  ( /DY1G_ 7Pj@@@5Ni5Nh 7Ql 6Rn@@@:Vt9Uu:WuC_|ZtZuVpXrVpe~A_|OiߴeOjVqMhB_|@@@s>tRNS@P 0p ǿXWg ca"! VS^`IDATӥEPЉ!!]Bg!lbEћzP7 9l}Q1+]Ȅ( 谡s5۞I̠D 1&#s  a/z" 1k3  &L% tw8 v 쵅Ƣzkq e0 ;n  f1'w 8 $΋K  _H#fTMדg+8G"+ ̣V;Ke( ??ڈL@T#5R/de ^7d[*L}F")K>Rkk.aS.imtRNS   ' $"# "%X.$7*L+Ԁ+T&F yUSg+*:Y58[y?Ҧ#U(^-6+IDAT8˵SRQ o9K" E,P1̊`@%(.quzzzBo@ ->ac]h<=S윙EԠqtC65~uUd4xMs4АfOC }JbcYk?֌8,mV%A>(\޷ƪ&IƘC28=0V!&oo0s9Ynhz O˓4MR޲6κb1r8l^U:@m0?n0#Z:I@"zLf˥Zه NL6gf06[U0%+_Ϸ Z_F5F¡IENDB`./src/eric/GUI/icons/bar/cblack.png0000644000175000017500000000016611340324377015721 0ustar yvesyvesPNG  IHDR PLTEytRNS@fIDATc`@\VZ#CCC$t!ܶ@1UrIENDB`./src/eric/GUI/icons/bar/showname.png0000644000175000017500000000135711340324102016310 0ustar yvesyvesPNG  IHDR DgAMAOX2PLTE9RmYv>Zw*=Q/E[>YvYv>ZwL KUtRNS  %& p۔"9䫻9+ZI!B30Y) *ֆK4Q&"qօ}d`O)HIDAT8œGr1E49`089gx /~~ % `9D z0]]VhbY TPw Rij؉kJ̟iRRnVLAؚ^]ieۈ$ <^y[d8{2svj4Tr`!LެySBstBPO7+N|BV.79I?h^*\,-UЋBhUi8&\)4F់V~6&,IENDB`./src/eric/GUI/icons/bar/cod5.png0000644000175000017500000000063111340324275015326 0ustar yvesyvesPNG  IHDRdPLTE aI3S?,ɖY%6 ! ; UÊӌ`Ë{:m4҉\zFQ &;$ o; t>! %tRNS3 E<ة銜N-Br̴$3$̴R;IDATӭ0 E&Z(:%JPk2ϔ')8<Ѧ$]2B2k.s_|lߒyg]kHiZޟn"xzE(e8e(gh#:xF)/ms IENDB`./src/eric/GUI/icons/bar/carbtn.png0000644000175000017500000000127411340324404015743 0ustar yvesyvesPNG  IHDR6YPLTEB*S+U,V(R7Y8Z'M)R:]Yvx&P(K$U$I&P1WF)S5V,Sl'N(S8>eZQz*SWVgRzHnhHpƃ``=e2ZR{OxJqYfLt7`T{DkHq3Z`yRzW+S$KKtKs$L8_GoNxLuS|"1tRNS3<Îq/\($̴3$̐ 'IDATc` 02da`cĮ Ls`eK 3)1IQkA*RK+i&h)E #p1B7!A PQM vgIENDB`./src/eric/GUI/icons/.cvsignore0000644000175000017500000000001211313422245015207 0ustar yvesyves.DS_Store ./src/eric/GUI/icons/palette/0000755000175000017500000000000011364075346014670 5ustar yvesyves./src/eric/GUI/icons/palette/lg_es.png0000644000175000017500000000070011303422557016455 0ustar yvesyvesPNG  IHDR}\tEXtSoftwareAdobe ImageReadyqe<bIDATxb?-FF4h&4]yo610 X?@. 1L-Wif?RB%óce8!hAu5%-+'(Òoeò 5#> xrͣJ9µC ZnFF@@_Oat3x^3#0(YaWhރ"el836bKˇdsiJd}bPȕ1DαۋE' Iom׬7}ԎPfx3`k`3|,0 ̥L*!w]?_f\2m7cJ l ^x; ,HȢMNa@'xzz,ut0_VCs -? B  && gFA;./src/eric/GUI/icons/palette/lg_ar_TN.png0000644000175000017500000000106311303422557017054 0ustar yvesyvesPNG  IHDR}\tEXtSoftwareAdobe ImageReadyqe<IDATxUNQ=l +* ; CgX :W@`]q̝;g<TCu"c3 9oXN2ax(Q vƉ:.9tVVqQxZ~Ͻx+ewL{IQ̱3uh.,@ǡ~gghd)U&^N62$sP8 %'[nY[.ubE}uG|zLEOips:; 6`YP翶IZy(⳴PUatڃm0PqD cd{nKb9|9%d!F"0~ .3OOQ܄'ɩ4r9 YBx϶5r4ئ8&_X]73?x`"_IENDB`./src/eric/GUI/icons/palette/thickness2.png0000644000175000017500000000053411303422560017440 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATx 0 T.BB \X={0{Zؕ-\D.?G228@@ 92-5, ֊t43N-7$,tvzxO9jJ藑󀺹'~ v9+U/$z ɘ~&?tXBڭ lNzkW{B/`S u7U7^{ } >J@@RQPOŃIENDB`./src/eric/GUI/icons/palette/nextbreak.png0000644000175000017500000000244011303422557017352 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATx[he6KZLQ$65Z%֊XCB}`@_b"B"Z/om&N:7oM2&-Լ87s,!4ba.@W|8?~C[%*)(Ayѱފ+EAV"f$BGGz`}'?kA?3aDhok68Çv!X ju7Iߞ\ig"qByy)~w.֦"Q A@ZXZjLO+;RQwx_!8傥A+O5-@uu?W jZ=niHKǹ،0J$Tf.c){H}U'?bX.nk,O1n-a\IENDB`./src/eric/GUI/icons/palette/fastback.png0000644000175000017500000000315711303422557017153 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxWmlSU~ou0 "la2$"2'2!,d@FTD(dFT$0f}o]Ӝ:]LMޤm9sy߾uc Xƹ/{EIGC",CdV3_d]n{{gG 92q8=kVo>6"௿Y=lӎzG\3Ă}/>pwsCߴ@ ] CU’x+oW}`uvV;{ rRjaoi(D q+9ymMjXj)YS+.vyyzORQ((DL wq&}`7ҎքHhYn倠,q1N QdKgAA5-&3*(sgd-Z璮E!bЃss;I pIZZpʓKSP*i =Q!8Q?P؋  15igVl3[Kt )PUV˵/'%a.5w,: FQbSvB콭7TN5 R2&Ci޹̼LQMoa,:0Ej {@'< v|e89 &=L#[lM[x*JußddrR z[-+ JkNMEu=f[a)+umI)$|  7גy_Xi$YH݊"]L樽5X>NGN؄B 0H霂- BHJX^;8R9GUw!R!f/Z⟕V/jݪFIr "#/c M'UqH0NI/aݒֆaͫѹ35gfHD;e(15$vNh 2/zN4x%8PIENDB`./src/eric/GUI/icons/palette/type3.png0000644000175000017500000000064611303422560016433 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<8IDATxJ1B/}Z_7K_"[][{(vmnc&M .{aCq9dPJa6x.nԱt8kڮeIK! Km \<@wթn?ʰB\_RKe<<qD3Z򞖥 MG˱ lhAkl cebEHsoO8;s߈+uu2M%Yn - BʉHawJvqcW?-pe%W< ]IENDB`./src/eric/GUI/icons/palette/filled.png0000644000175000017500000000241011303422557016623 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxWkU;;zyޢRh*E|(mP) /REA AК;33g:M6ggv~) C%-'a Hd+$C؃^@i)xBPt ?3/~xNwd"|Z$eARX#4-j*/x,9`۞Wo4~3_=Sw<@X%bϾe}gYc qH2PXhDJ >9 IK,ܪB ͦ.s .O2* @Vp7U$Vk?wthϸvh|HxSe 2 \a* XDb; ~59sT]+jD"~#+]?ʻx %C)%fiL;fsWKhN;:׵T5|xݔ%i)g'ju; Tֺ q"Q푓^zms;h%sajJ3XWC{[+Mh׫$L ӓ@Ҟ6MYFV1SH0Bګ2v_09t `:uѕASD$%*9aiŀn|oZk"n JŸ,jfkϱ"6vUwӿMN[6ڥ%xow6N 7ΚJBr_VQ j\t.\,+jQl)QA(Q80RBc[Īuzqe2nNG-DBbsp}@V%3Kkf<>=qb6n]l/F&@sV/ @"\h]t[ ~&&vYbs\|. %-EfK]&$Ts8\Դc+P w%Y$A"bPqHqM$Q\%(n0VuD E}LZlRv[|.IQ8S'_΢gebjeKlT4/RHkbhw G7Zg8Nsy9Az[U* FeczF1cp4ngs'H~pSRAD3dMnn<|9U3Qj)[z@[ 'Ʃ;r, 6JC_. nuS?%P֦3w}ώk3HR7YZCݍ[Ԁ,p.kW"B>;;LSSlwtNR^7E۠JfZ ޴ܒJ}L[jM˜?Fzrլ91Ė;vI^4roUss3s_%@!%!U Xuel+8{A$O MwXg !HM<{żlK~λ)lU?*mEQe3[>d^~#b}XC؞oZw&Z Y!0q0lD KI~b%AVB'E6kաf~J11OJ5:`2|{IENDB`./src/eric/GUI/icons/palette/line.png0000644000175000017500000000205411303422557016317 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxYHTQq\ 0QʐV,|1H)-"z1*B+s!% ,Qc\'Qpi4ftlvt\;h39|AA2&`Ey |P8pܔ3UI<ر̀@;1򫚡xU1_ ׍:c N ",TO?h`z N:|r{Zm>Y9C7G":E9! C6u*zwHj嗂V0dg{UΆp_/|C<S1`oO(( `{c,@Ʌ]5,o&/vmXR5=դ~R^ T-]5<zl0 ::5SNǏ*Usw =ԳMx差g2x\i׸ǓŕuH|М +!&~YW2wƭE}U!Şiuʘpepkq6'["Ζ )j~s0RVtǦU8 Z[͹ZJ֜mDPes6aJ s֜]AV ZW$cֳe T-Ty9WI?Φr6.fxpؘ EۆU&`kqe{t6vb4h΢fjJJuuH Zh@a=/x}ɒ¬r!M/L֤0\dPbήNr*_4^3 ܙe,dk\E@*L&)&Ö#pȋNF#|6XLdZ\-Q27?o".IENDB`./src/eric/GUI/icons/palette/Mcancel.png0000644000175000017500000000145311303422556016733 0ustar yvesyvesPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATx\Soa},@(%K)i^UK/ƣO=ybBbhCK( (IK,c߷newf͌ gx<%~^ rzwŢ1/bh4|?D~[-麮moo&?LO2z( (" w0 Ryf1ST\Fcff%D@sntB{QGtr2vihKf&^[*::,##{&)lzzz$Vt:$I.bK0(X06FHVeTqbSSSwVJ8qR. xN/^,U*,jY;ydU{VֳBbN >tԨOV{C!IŗJ HLvl1f"&;]M jZ|6|<A˼Y0CgיC"Xu.f``qNIENDB`./src/eric/GUI/icons/palette/color3.png0000644000175000017500000000156111303422557016573 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxWMhQ6͏i(AI z B^CЋ1GYAxГ,KPE VO^*b6UMC4l ]{;vf7ZFB8C^hiE(K@h}2ܞ [@e^5S؅0?c#GR0wYÐL*|f'N˄NQ9ws. #!,r'rȲ1a~r4U!v9^ed+$9Sul#@GMlPUE D8" 9(8m:R"0+`8񛎚ȶfK28E*6蜫l[c?ۍbHg鵯s 7K5vI$^>*gAKjLЉuޓ11ܻ7^]u QX`7%-^@t [q@9FklL91r/9f{\"`q.-1"l<> P\]-LJ(b8} Btg/Z@٭X!*nSA8G"-#x؍@,%BH ML$ S?]]6pK6(2DtB;;(O~MJh5C+ZOITAX\hj",/N%T؜6y={nVkQJ+ʄ1d9CR*s5,G:'kZ趹 a"DD+ygٛ r%8c4)b{|RvQT J6P纾[V(@!ghOe`5>XS= %yn,Iǝx;ͻG}ߵ>C"+$Hg, m*Ȼ?W8Kwp6.cY(X\(3mЕl6*f#Uߟ1{pC۔s9K4gPOzN2SSuj n)s5sz>gSp_/qzHsr !1JƢ|*S0nr{ͬ}g)?զkP)PW2"ɺKg„H<  z]|>@9𲮒Yz3t "*,]|F:%ո!K℣8m"xPt״Gtf5?k_5W ĮjFIENDB`./src/eric/GUI/icons/palette/back.png0000644000175000017500000000215711303422556016273 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxWMle~gwnZ6lCAM41jL@!xx<Eb:b6"tP.\cq.6W/r_/O9w@Ё_ Ʊgp=^qs[ < ,{N38 mx*'⃯&1z`W\9B0%ֈɛe|5r)EZ? ޖ9 y5p*ǨYvN,-ҠM+WP5j! #Q`k  )6?ܭNO}?C+b ]0п9*#[r_Xz]  K\`"2<%Nrgߌ-$bSf!&yLLFuuz[Q-H:%R~h3&vw{(WjMDZ'+2eULd)wW@&a(MQd::LL,iѰI6cjDhN鉫le "` ~2惍/(~J5 9"<0Y`o j=qU00{-D'4.[IENDB`./src/eric/GUI/icons/palette/loadmacros.png0000644000175000017500000000273411303422557017521 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<nIDATxVKlTUiNg)< ҆AM5tV \h"qL\ JBT*hZtvt9g 23$s%B3H '$+@<[H#o<1d_Gcҽr/f=Wiԭw};=*=$GuޠLJ*cJ-TBڻ'竞߇廾@OG"1,id _QkO!q`d1ԇQAt| 1$j&qe2sM6%Cβk[Г~tqG3^lºMuo:]Yӡ3Z($Fȅw rzfy&ԮUMApkxiǏ*Υ. S*W[H8v7bګ>XD<ؽˋ˷%؅⠘ i-?CG#.r;:k>Ov7WVty6qzQfwrh LH6 @2Q Y>jjM 5dۀƍ wy3&5rֹܮMĄK9͂T=䂫6IB[LYv88 vBSef?(Ͳ$Dz3}k&m4d w]vA: Qt#P7 yδ`mJe`>F BƔRi&RU5^VMtC(4uFQ$ݫa+X+˚Hq幹H*¡ ;.X) e?^OE^Dinh4 d{b,`cj(vD3ȰJby8ϝD4vS7efq˒|@DҰj'J$3)[ÖePULi>P9T@}C%%[r'ɂ`i:45CFarBE~ɪ:[&/or^!|j<薘X0oo6jԺ%Q+R(Ki+%>[%R(DEM[K>$ڂ Uj4v{gνnL-K9f̜o9\!wRXò `6~NajGohQ,g2Q-U_Dt P[f K`s+'DLv̺ݚzncu@U@4:4m25aO+  rh<9,msg"F٭i@Y ''D;>IGbƔX8 /O"~DYO# ]XG&'ΧLv:7FGmJE%-.1S_LOoxQw@%"S-+ ;,v@Ǣ3l>gc(>B4ǞH})<'L#;ij 2du-7f'.zBP. \*ut#6ٌ~x.YG 7;&G_8 _0VxuX[M}ϱA1L6y=ZN0D-WGty*\)q[I@c0.`*xS 6͖I`bNf (U\@YV nu1 1ݺ~X!ǝXMo?qIa\ˊ{ɇb:$ g5ml+ҜCu]qG>AT2siA2'fU JxJ}|mg M F>kಢH[ږ=R|}14PtH._cZ$ ;)mq"bP|@;ia_`,; -s̵wBZCjD+.1YK^d.Ά0:lWXV_\fIENDB`./src/eric/GUI/icons/palette/color1.png0000644000175000017500000000150211303422557016564 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxW;lA}wg'&BH rA7@ :H =%E ʈ((BAGiB *'+ E lv|w{N$7yz繝o 0H0 @& Xfw&cћ|j-\ID2)Va8s)'Sg4U6iږ'<8,?<VH"DUίrN+>l_[H$n6:?%_5Y=, i:GP I5^z$QxBA"W9] X8œéiՊE,YBQ噧1(J̖: T{͹ mB1Ӕ;eC<̝(Dqasn`/e;m"O5-"#8BBKC 9p6f) 56o|1bQEĶ~.*,>綈Ao++vZs^ok-UXX,2q$? fx碂mVJ#UDen"*3d)+CO)JnWHRqEɫ '"RAZ銑R6kq:hJ9&IENDB`./src/eric/GUI/icons/palette/lg_gl.png0000644000175000017500000000077511303422557016464 0ustar yvesyvesPNG  IHDR}\tEXtSoftwareAdobe ImageReadyqe<IDATxb?-FFF4ӂg D9X&X2DjFFL~pgpvpl[^s=C /+dabȽS p&!A}a|Yߠh\q&ýGĀ>/9Az?3L[y~ pd23d:?C Wv1$VeWAaCA[Y>҃KN20p3P3[Vp*6P#:?:><l,;W~UO?/ .b'y_ct9;8 un ܬp5}f[sH&@I3)W_!Mp,F %m2 IENDB`./src/eric/GUI/icons/palette/bi_trans.png0000644000175000017500000000164211303422557017173 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<DIDATxb?@&,`]!Ҁ8*g\D8q!9Xk 5: d%;R䀿~oWoFJK|3(ILdZJ`{~A5﹙o%r08x>b-tp ^AQ`9H@#O A'9k֬$'BC(sӁG`Rؘܢg9S0s7;)rR p2lN>+E~ZYSv<4+@0?e }R=QdH)X@23O؊%$AlL6#У`(сZ+''( Tg~ 3c0 3`ae" Fe v fFWQC-U | rG`"T1>y阬(7>;3t,Uԥ;ҟ rFN]Mn]pu!#q1h.xӾu~>ן믫foƒ'I ev R/*bP1%X!X*SÈ.@/y-EWH 1@SY lH @ B@| Γ?SPYf (@/ Yipx'/;,ZT?H?,I-q68Yp-`ӿP&8d $7I$ zi9}Cj wIENDB`./src/eric/GUI/icons/palette/js_xn.png0000644000175000017500000000104211303422557016505 0ustar yvesyvesPNG  IHDRw=tEXtSoftwareAdobe ImageReadyqe<IDATx=KAo/@,Vm (BŸ " +B1Nxxrg:vfޙDcz.߫w/* 2G ":kr 8,VP}.m^ .K'A8 2o <5S2hY$ 3PAAhoEQpBF=l&ha=NQ8)h*#.r2ȃʃ.̓GFx`'oB>p @;EpEIʔ'|n 43l&0 wP0J.F[@CS"3f!g"ݔKr׈~L [sZE9|hr:Bqc JfP߲A}ڹm:ՑALt_)5Gm @IENDB`./src/eric/GUI/icons/palette/angle1.gif0000644000175000017500000000076011303422556016521 0ustar yvesyvesGIF89a""ڛhڦmXiìMȼr[]V+&uqK8/1`>U3F=߄?%!,"" dihl$6`+'DǦA"CV,tJr6!r ي: t8|>@tygv~|v      ͻ̾      Hp iwlIVH87*M vܻx0m5fD70oyc^Ck[8#WgIbyBB I;~ "8q lgnv*l/R LYјXAqF*ŪcJb RlY^{[$Bd:멝3cVۗA49!#d0q$R jzzPqLU]7)unt?KtJi^2OcR GLWH!WB?;~{rn.2j߲gCa4&lE2&u`. J~a6 VAu/؀lyGYZLz6}HÃbIշᭇ~@EFVrX Jq;N0MWSĔi!y$%X{W}HDUxyQMCS-w_ܱsgJru PRֈM&\b1]Q \>1l^a a< $m*G#YKS{V)4,Pۼ֑c +14z6軄];@DLR&ͻ'ӌB6 it7ٸt]N-ToCN} nJ#LY8{!;7rSfidᾭ3%=oZK+>sˁ#A-aΪ8qx3*6N?טf%MV;wKI:~VrQ ^% SDL4bdn.9{\X]{I#&h_L.ڃB~d]9S[&ʑJ4'^r"0:)ܞm_.2lyo^;{?>Dg[oɂY)9mW/:;!{Wjö ]FJh03ڱ t. Juo=&VQrJ^3~#'1Uh;sh;U6'g& ^m0^1",bM&[:@۰; [%9l)V\]-fX01j׹C >='7- f[$IENDB`./src/eric/GUI/icons/palette/js_cos.png0000644000175000017500000000073011303422557016647 0ustar yvesyvesPNG  IHDRw=tEXtSoftwareAdobe ImageReadyqe<zIDATx;/Q]WPx$4Q#*@ RK|@A Q)=bٝ~79]42s=3s=wyf#2(ۉsVt-\j@oSD"2⏴S)e;Hg fy'}𳣷.Uy(>lC: 8R/. q9׋>{~+ΩAdbGu1'bX@sӂZz \d>@=$3j2%n_wYF↕P b؂n]>־w7}Y߼s)}YÁ}Z$o7\ζu^6g})ɩS~B$*Xwl D.{뮭eOq]Ӽ~3xܰQwi8x>.^(/& .0j-3u<7iWš:Ψ]F:7kh+EhD@wSO.Z,GMd$;9g{IoÎbf1sZO,ws A''v(ewTiWyC;Po1I 3JzɶH,Kec#,Ge9py!29&!g灘׷XIN@IH®N~9$ l"eH@Nc,$~D#@`u&{X5՗#G`?_Ԁ>IENDB`./src/eric/GUI/icons/palette/function.png0000644000175000017500000000266011303422557017220 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<RIDATxWoU9snw۲6R.)1@, j@‹d41F5j0A ^"KʭwZwg/s;34&̞|}9gY˲O܏˲a2x"$bE5>EFޓ;S}.=Lu$s^e_ٱ^D,=||.fRk} lR󣻻/oJE?=rPKz`'Qd ; e}t;&_ٯKc糅 ?>g@'1T_ ݟRƺ ۼ̐7JqK j&Zq܊ӑ@Ҟ3kߎZS2$.Bl`C{-t݅{gLʩÎ\Z ^ ^.tY-<tp7v\Wha֩E&3UG;8Uh( '56ǜ9Pd42_-ɼ9fp!^#Ei&ZFA|7^鹍Ci}ldMƳj!Ar mAw^Hzzx쌬Ԩͭds%)!ԧ\>_G:nZm5]"\$2M1A!KpSUͼA%ET4Ꭰ(8 F;w-顋ŚY2_t4 b^'!#s)-V6e /{Щ?˿MvOu(5vH>]P4(h!R[j!7' ߉hooۚ_բT[EYmPN X)HcumڔżtQn$7O,T*RitS" ֫ C±|ë繷ѪchվV1 ݕ,T]k/p\8o'ϟ%ekt!akp@@I)5^OUEq!:|*FLta=JC։"aڥyi1SI[E3[wZ bgmXEDvdb&uSCQ$Nep|i?/aaUd#U~zb28/;qs!8+`o$0r -è.G ]@:RaK,CFJ s_u|IENDB`./src/eric/GUI/icons/palette/load.png0000644000175000017500000000250411303422557016307 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxWKlE$-IKSPH B傄TK%T 787qġGGJimI8q׮ݝfƳ:u*I'.J)v)c;i gqEsIA\0q3HrÞ(b9|õ- [7wQl۞?|z.@]z|셷a֙RҢdz.V\,R.ō@ C@axM/%L ]9_`hK x"V0դmVHyh*|Nna@L|z*\F)3l',~_L ?ˬ‡Lt)f 3I!NxQǪ\G~]3S50mss6sPЪ_l2]KSZf]Q<&#[lhrĄPDU<5݈/͈^Dϡmi8ð8?㴑9@zkio?Fa  mewF>WW۩W2?sB}Mu"^ Ãl_AĭQǞwG*%nw}uhɞ P+]$>!'X[Fo_ 3KX(]^ eoL11XH*W ?mJ)I[[ZX|#Z.hN2<5tB͊!HC*n19{s I!gDWTJ#5c9,.WQdK#:g*,"!:r}bRGςԼ &ֆZ:,{8 zy3v u^,#_p@IENDB`./src/eric/GUI/icons/palette/moins.gif0000644000175000017500000000005511303422557016475 0ustar yvesyvesGIF89a !, Z;./src/eric/GUI/icons/palette/lg_fr.png0000644000175000017500000000041611303422557016461 0ustar yvesyvesPNG  IHDR}\tEXtSoftwareAdobe ImageReadyqe<IDATxb?- H&F @XK `r Vq^c]LI$?~>mYQycO_Q3|Dh*Ou Gn0e71q_<?a;i";?ޡe*phU1hn@7IENDB`./src/eric/GUI/icons/palette/lg_de.png0000644000175000017500000000051511303422557016442 0ustar yvesyvesPNG  IHDR}\tEXtSoftwareAdobe ImageReadyqe<IDATxb?-1 #hhh`pÿ2ϟ? ۶mð ALGG,,,A!̀a,,ZH8J o?-Gfu{8,@Yr3 ">/7A ?o~  ,zENT ҇(wX dJV8t ׼ pIENDB`./src/eric/GUI/icons/palette/acolor0.png0000644000175000017500000000101011303422556016715 0ustar yvesyvesPNG  IHDR"":G gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATx_N@ƻШMS/)<'xⳏ\A-$ߚ kL?d7,Bk=:dxA JSw`'-;\_#)'fS 7/ر$1nǘ{̠uаCˍ 44n-Sx/$l.7= Hզw[q+!v^F*i#كokr8 IENDB`./src/eric/GUI/icons/palette/longnames.png0000644000175000017500000000121511303422557017351 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATx+DQ3R~) %6-Ka#YٰQ" ZY_WFQ~,e" F%?1}:szwSo=s{y31qxBP@TONK6WÕ̒BRa+lC=S ,$xV0%||ŴY|z+i1s |G 0%hUs-QvlI}> s% ܂#"J),f}*pEeq]`lƸ<(Cb"ǜ ~2k4 9k~~LVp1 Db%8MVܖQQ *o_n?Gb3L x^ؿNg-`QTRf`Ƙ ]ob60)] 6%8$D$Dh>ʲ?JOD!OaʨJTPh04D.)NpQZ6 o8[_Vn  صJIENDB`./src/eric/GUI/icons/palette/image3.png0000644000175000017500000000347411303422557016544 0ustar yvesyvesPNG  IHDR"":G gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxX]l=;fl#cJ–HDHjHT>!Om RH%o ~8PZ!&xlcwggwfvgfnҍ! 9w+qh><&BV6Qϻy%G'~fʣ2nݳṚ721P{pΎG:ڕhE쨡.mDa&#!/3M"AjxCk31LHl_IrwtjbrԈV.Vdֵs7>8Uܜ315gqgYrT14ybՈ\w&y@ʈ45יᅥEƴ &y%cՀ|W#uOAg4W՟(Bm,RȡFsotHJbU !AQ"*(P|[:᭭1 EALUD@AQDTb0=V]B¢OD144!RLNBH\t="ΰI[C) =p~ K$TtB\Ğ'łD-Ͷʨ$D(+G6 =nlh8 1F/J.kLɬ$uF Ma6õ%Ǩhfaeu[IöVm&ġ !]awn/Wuhqjݪ XitXǒe=hrͰY = """lFmjj oobbb;6ŰECßC,MâQb5۞@OOCa6wFzn2V/ƶg^D* 9p@)D,0G)k )KQ݆`a "V Nζ\+щCONDmp vʵD(j'ɛ]~1- ,.l\5#[kh|v m{`";sLyMӲ2BLQïoFa~v|~0ܫWjccc˧N]t${Wny Ϧwu7sT9+]Ab ^{s̻999;w\L&S?gT%-wZۑ#]n,D;8{!d☛45+|,ED y-"y^?4 *hBV5Q"8K#OH;O:s.NQF!xb$JϽK;pvkL 9A aDŭ04zZ-@7ZeP`0U; &95\.YI dE`W̩ثWhLB!GMBY@"~AjG 8DF:t0e @(aTOl νv 0]_Ȍsq2ܲ?m.;; ffY9yoc(%!:F: ǁb%%+RZ^ZWFτQ{Bn^iױS e95f 剃cy+@` W ^7բx %R\ 瞔Vx?\AyI%@FwN FV؅YOŋzm_wުi @ Ԓ 7Q4'We,76NoVLJ#O>(o`Ƕ8< TPiCF >yG{=ܝ7[áa 8vk7Al=5<z[Zz,>d3"Hڮ9wmjolНH@j䐴5H22X/Qڻ3bƷ'?@:ATja*k4ӢjDvj:bvVPEm+ _}w=??u?)y :xN}ާ_>ҹ8fR aijT.ixD߼%]ͻЀMPBL@DN6p+5 7g@r6M@0::r"P#*^6tŋ}7DIm=Ể|fVJix6.ͣ%rS5Q2cxC&i ɶTz"WaFg6-jH`{:2Zș h~|aDž+V"̨jjԩ#ޮ=Ït| N=8-, OXV rʾyDdhLZe#=JJQXDS"(@xa鳿O~ϋuEqjHT +f)dOΌ*V#bMLH<˯c\"$Hj_W29BSגZaxřDQIENDB`./src/eric/GUI/icons/palette/lg_sv.png0000644000175000017500000000036011364075346016507 0ustar yvesyvesPNG  IHDR}\tEXtSoftwareAdobe ImageReadyqe<IDATxb?- x& xy lծ魷t2< afY,D,Aݥ."cZ\\w1K6du,bK)CJhh*"0*ZE5ڀ[`k IENDB`./src/eric/GUI/icons/palette/type5.png0000644000175000017500000000214111303422560016425 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxW[hU>getۘK+HQbZ Jm&E)HP>ZTA}('ۄM%ٝݹϙL=d y0g979]` 77^K5OzP9w 89k'6y2o% ÍqIK/?MU"~(a] ~ImoXr ş?joosgs6ܹ3gc֣ }k'/!2xg_߱-8n_4>+|?b9ԄXc1Ahj[x-KlHXJŋ]IpxoѓQ!٥d2(7z% ETB>捣v}Xl۩ mqZ.*&D"R3M/a3x&$_4<HKUaS Kղp]SXW&t-liayo[+Be9PA] bignlp[-Dɏ;v `)΀T6=ki٦ϸ 5y\oOl`Tt1E!zئy~Ƕ+rY^ JuO=r!tϤ2P|anIL^–0m # P{bn>I<@3UP]٘XHC rW0ᮖwOa~>Ï:ޡDAHʥfPQ_Vih9l"]6(bT n#d8Ј-={ҹ|513X4, Fb;+ P˄F+u"%5طRY1 I3^c6w"mPZՐmi>+ցf+!MFyu -R\r4HRZgr'9g lDŽpd366]<5oEph cНIENDB`./src/eric/GUI/icons/palette/js_floor.png0000644000175000017500000000117411303422557017207 0ustar yvesyvesPNG  IHDRw=tEXtSoftwareAdobe ImageReadyqe<IDATxKTQߛqE1!jP•mEI?@wq%ZI`HnR"tq^3<oDiӅ9=DqyOI]!/ |Ğ*'UPVW"%9qO$v!1+ҢN%͚_㕪$wZL+bUR,Ǽ:# b bgXD95H&EYs2G<"ؠhS괉҇,gļx#zQ)މȝŠ/(O l<ۘ ;/^p%[Ģ.O"թf]M5VQNl0wEI-Q#}Nsq JpK]K-PTK|GLjNUɛz[_QT61gm 5ß朄fgKKkE$<y;Y\EE='4cnڑALgA.n+ۋv_Knfqd?6~ 0q3~4qJR<T]4ɢIECWUH!.`@"l*RaA*cBIMRnGc_s;N4Ɖ>yw9sMiptat!N &A;$k#O!Qr}ܡǨɑ#}4r=;s)X4$j]Ezm0;!Mԑc=MUvk8;7bl@3=`n9H1gdH"Ȧf5m~O7?("{)óe [[`q5i!l 0# 0)i HW5NA 9ckw{pNDO8I+IW!X+*TTigkޞtv;Rn A uNf}ȔPVPGeK&sZ;^`'̵1IRFɤ+US87d^,w{/ py:[W3BM(5 g/@tdT,4v&`^В9jH0LKe+=/IENDB`./src/eric/GUI/icons/palette/color2.png0000644000175000017500000000150711303422557016572 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxW?ha]6i(v"bXEǂPqQ`EN*nRAIJ h[b$͝}z/6|^~{9!M eI@pg_'BŦ"lnpIۡ[z0pv:Gǥ~<{ ,&P@:F1y s:{M㭿[ohe ~d@6x.[o@p)-6H =KG0>~bD@|Lg')9]:/v(呀a4(XeNVPq&2*:.8?QMwl9`jHuc #{srL`( I6?=syT0$B '$3 wC0 Cۙ^ɨVj㜋nq@"ґW%oЫ.dW幡ris I:l!lƨm):ٜ SvCiğr,G&i|)iW7C #IENDB`./src/eric/GUI/icons/palette/zoom.png0000644000175000017500000000326311303422560016351 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<EIDATxW[lUvgv.q)BhbFlh&'l|ACM#B-$F5P\ Ͷ)tKJҽ_LϔV &L9;sF$Б0^ObR[൐ :z=\0Hk!V}FΞB޹s'zzzlnnkw_O*!|f(\7k.D"DQر---IbKRF. KtH/#m~Kj{-d.@XCXJ`/%leϫ 5uuull^N(⍉UFv. eו"-EEpךx||Β,~ݻwϝfҶ6tvvd4C\%߀|=~i~| sw;gb1L9qIjGkkk\8@::tYzߤW钶%@XAp4l]]]w{=sbG\Ei޽JxX(lChaXCXFp+ xk>ժ@]{{r-u |!#R%EQ#b:::$&L&YΕeeD}--DExr4 :K 盞8pSS]|ӐEҬ{vgLz"yR i&+>:l䪃U[\aQ!c)#e0Zt!I~?q7I4C9^DJ~9%}!&$ _.psw|`[- )vkqKEL?IUL[Ns_d Ӂ+dd#,a*pV6-(A3-"k7sAqVm5-*">q^ JЯl濡>L#E `9,*a#-3s _]i }@,֥`Pt=2 6v"%39G^iIENDB`./src/eric/GUI/icons/palette/palettetitlebar.gif0000644000175000017500000000014011303422560020522 0ustar yvesyvesGIF89aߎ!, - ;./src/eric/GUI/icons/palette/js_sin.png0000644000175000017500000000073711303422557016663 0ustar yvesyvesPNG  IHDRw=tEXtSoftwareAdobe ImageReadyqe<IDATx약.QXd)G4DP$xht>J@"^@ a]3&5f3A7e{9玱9LK%MјL LO _eю&WDaF$BK|yVnLu OcxTQ,g1%tgGI)n4> J]t"#n2axQt.^Q-*p&"yKxb4a]BɷIENDB`./src/eric/GUI/icons/palette/type1.png0000644000175000017500000000126011303422560016422 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<BIDATx엽kSQƟ{RA)u'A: ĵt"N$NRPIpm1m>Gr'K mȽM` o_>*Yaac09@hBct/+rAqQ9EVPB8}H!KZO`XۯnpI "O[6H q`zQWvJpq΃ZG|w[rq}qBi5/_qEٓ$h hszUʱ(\@8(NPx&dL>膍FۄށAOo '">gh , nsYue AQDǪyݵzҙ\KѭCk'įdʘJl(X7ոgu`t~ |Hս B\|KM8%œq$Ϗ .TU߳J'8s՚lX6G<! !&Ey# !b*Dy ;IRdZ7"ef4~ 0m@m&- IENDB`./src/eric/GUI/icons/palette/equationxy.png0000644000175000017500000000245111303422557017577 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxWkLU;̰cXʮ-(6}(QJ"6cZCX#D&&mh HU ,Xvvgw;sʮ,&_f̝{{ι=C ඲!;OBåluj3 'x_9$"fmܮfOHT4N`*K62;k? S G fպ_-^ʤ1hc@%?pEmVn{J  @iΛX;з0GoF2Dl/2etf2HIuyχ9۬po*DfzG(g;Z,t "EA#}n"O[#Yy98 H@%|]ʼnqZDЉFxƓ!FCey6@6]u5W>܂ T=`X46=Z 5%߾mGaՄqXg ,n C#i];֜  70ێbu|oy1Ggw4;??B7t((F*  p O3Q l%:3ӛ`Uv50c̃Dld|tY8RM R7|'~YB\|PʏBb"59nܢpeNmc2љԥj~3ݚ) m഑QTgUr NC! (c;V|ϋ|iŮZ-QU2Q5U;t<S p- χJ] m%ѕB#z(ӯO/㡸5!Ig\,x bDcD~ *cdE`܊PV쟦1 3A[D=c6Ӿ¬`r+3;Hui5/s&LݐҏFCLd w DǻȟIENDB`./src/eric/GUI/icons/palette/grid.png0000644000175000017500000000146211303422557016317 0ustar yvesyvesPNG  IHDR szzgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxWK@m!G$$։MhY+ \ \[,fXa ۩"Qc3LfϊyBQ|cCiǤ*A:fq.,= @Z.NOft]WJPd=NjHh4&8e`zZmvww't]nX [LJoJ^ޖe >c;' 8Ʊѥվ%jg!E^,&me+SNR~)( mX}RNd2ܡg8eW?ijcfw5j/ J Hf \ +'#NartWs-'em[f31|>?Ht:-qnV%:|Թ jbZ d<E lV L&wn hjHS#y@M}~ #̓3`3'` X7x*BS?tlZ ܷ>Gq>ƀyD:@̘ttv(lrcd}f XCDޚtZ n-b z$XTr= Îb$z ֒RJL磻@\cs(?@=y0>eɟ6M}o<IENDB`./src/eric/GUI/icons/palette/athickness1.png0000644000175000017500000000062011303422556017601 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<"IDATxMk1ߘhcjς'/W,=~MkwL`Q%^&L6yFcPf Cq "ᜨu Pp*";9H HI[zϛA^g]4ft95:4+'C _|1溊[4SK7~NK{I_ܖɖ 9}o%g*pb3:,Z=y{ih ľ~FPJ8˳k90 p`yGsk%IENDB`./src/eric/GUI/icons/palette/text.png0000644000175000017500000000115011303422560016342 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATx얽JAo/!QS @ !]^FV"^tU, ~sVrn. in`ػݙogwgOѵ=KP!qWw 1"&@j5 D90 KLh `h5Qߪժn_yW\̟hprvn:a|ob*$? F ^n^t:Oo2" l208|A[Hh O=eYSPZvN!Fjt l4wHQ}N:MY!dj>Is #,eq.˄tm`H4$DP͊xQvRl {Lx @ujlݟR)>Apx\~4Me*kUCy|nTda4-UNZ6ER@N0>^]*aVJHr:*7(2a-`IL\hIENDB`./src/eric/GUI/icons/palette/onepix.png0000644000175000017500000000017611303422560016667 0ustar yvesyvesPNG  IHDRĉgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxb?@ dIENDB`./src/eric/GUI/icons/palette/PaletteTriangleBas.png0000644000175000017500000000027011303422556021077 0ustar yvesyvesPNG  IHDR r|gAMAOX2tEXtSoftwareAdobe ImageReadyqe<JIDATxb? @?M,02Aݽ{Ŧ{1Ӏ,τK8!X RRRK-0\'0͵IENDB`./src/eric/GUI/icons/palette/acolor5.png0000644000175000017500000000100211303422556016723 0ustar yvesyvesPNG  IHDR"":G gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxMN0I+qkBܦ413Y&I"id~3Wc.DȈ $DC2\SQaItB#R#:/F^ qJC!ɇ^(8G tN2 ;q cy ; i vA@g$SRۓA8BzjWHN܈އ#$88%ސ4?ܑ|u{ģpK q'5 nX@-/(/-N<<r͔B!N0 , PF`m8il- \`?FYiNG@ vIENDB`./src/eric/GUI/icons/palette/ctrl_chkbox.png0000644000175000017500000000131711303422557017673 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<qIDATxnRQsEB9r-Ԥ[|'N褉OL؁ |C 85 M5\¹R[.!NXGg{w, nnM>>]X84N4WDaBq׈]HX31>*qHs";Jv 6-B%^;k:xtDZK},@cWI U/}i [rkt]LJ,X]]0 [R\.F%,5VG;n z|#*GHVl :ls6 Me1 K| $E2gZp̀a}?j5桨*eڄGX@4MGNi]09-krwoW)`e X ~Xso; AK$qt XXVb 8*F8f]=Ǻj!P6zTjBV^DZBݟ,q 'z* 2+PZպr ka9݄'wCObԸ%`^K/Kfl{ ^KIENDB`./src/eric/GUI/icons/palette/fixedangle.png0000644000175000017500000000253611303422557017503 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxڴWkLUݙux--[K*HEXbVcIlhlӆXhj (G&hR۰Hwwf,,(>ǙɝͰ KXnr2|s{/L47eTz4`ME,ЩD !W-՟>q1c"Q9ۍ/`c=}Ċڝn\'ތ S.g31s+ Yn[6J3vyݧ NH sN=ZuY2X=߀cQ@b~xߕ'oS<+B ǚʑxmBvU.^Xs vy]W~Z{폗$@ p䱻l/r ɯ,B,vh?~Xhjs@o][O];!AdXS[-[@B_ASw mwnj Ǯ3h 5Cϔ1IFR'Ox'Vo[g͜\Ӵː*_dLdg?yHN,\S)>ۂ.%##-Ù7OBv_X]Lm$\FZ]n9L@2߉du-ZՌb^?t~&%@@"ۂL8~^A*@.`D2IL\")rKgymK3Oj"ɐqI=o,s ZOWeIENDB`./src/eric/GUI/icons/palette/null.png0000644000175000017500000000021611303422557016340 0ustar yvesyvesPNG  IHDR"":G tEXtSoftwareAdobe ImageReadyqe<0IDATx1 ? H[ 0BeIENDB`./src/eric/GUI/icons/palette/vector.png0000644000175000017500000000207011303422560016662 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxWmH[~gv5[㖕bVWO#WFEXDh (Ų.FdFVPQ麥;8sNcta̙yyQJ!$<9-V?5Ty 0/)iOS-fYeY$jIkw}D dp\nQ6m '}M%A^ߝpAw`J#kslgf96@At(=T>O|U_L2i\ 'Qּ=*b.^COP7<*rJrH?kesO盍eU?  F~xύc-P*>˗S q.Qib+ɏNÑ?8"ٴBC+>'+/DjTJp,V&H,2hOqkS-PV#鮕BpI&_v~Yza]9~5-AD2ќia˟Ԟ;Tv~5M] !JlGU,Е ϖcwLUb_)Dʳ3-2bSL$#˶e>zZZࠋ3ؿ111Y7i+͛}O^m[G_,;LfoؠD?:hұЕϝېJHͽ+`pIr32#C bm0^ 8Vgç"Ź+蜔I(ňD6c"3F7L~OGʹ؝Qv @GwW,=V[C}C=Ee(ȉkЕݣc@IDd 0{Iz%e T!dl.d.Ȣ7o4Me t2񜊩Aa$z!??׸$⦜p 0,l#ig IENDB`./src/eric/GUI/icons/palette/tracker.png0000644000175000017500000000242111303422560017013 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxV]LUwP]KIk(P(5R1U&Qcj4&>ї/$6TM4DA+-!-"iP`]߲ٝٝgth8gsrg{w9-S @d0|[9 Ď3Sq2=~B[I{**9_{#wM,+$jAH媚'(Iс4 NpT*f!;}Jj'dz<sleCLKDX"Uw={b3Og&ES 2w+^:ԗ J@H42dEeT=83Q!QRɡǎQ{KX"@ w4rXtH`髞џN@(Tj,.va9ѿ|SNdeJ;shY*j&qe5C*:sa<5ԈZ6"jCஊj`v2WREF?N)/ 'fD 0w*>aQ6XXT[@ʝ5|0f o ko3P'|~ݸà s-u0dYq۬=!gKΉLĪ /k+j4wolЗJ_mbo|ML{R$x?=|L3hj7[Zjg2^Vo;WIm`m[Ae(Xک_'q,Q3tE5$]?EEP"It:a|$7%B{{ץ֮{Xn <3=j e5 -i&03J n7qVӜs@xslW^0L 6UE61q@jЉ=9~"2Q};jpa"@<'㶝͛K#~{"k# a'/ĸ/\mwr LY!vL<]Ȼ~1o 2͍~{~"a㧀nOzB8svx4N1} `^8pf?0r7CT%@ pML!Xh6`c|"^QIENDB`./src/eric/GUI/icons/palette/js_ceil.png0000644000175000017500000000105111303422557016774 0ustar yvesyvesPNG  IHDRw=tEXtSoftwareAdobe ImageReadyqe<IDATx앻JAw(xA/6XJBmAۀXll,^T%;?0Y`ݝ3U#Uy(*pWiO]NPM5nA2#ޤ4XmsIPIu{z@} #h mQ5SKy!&8o`lG3<e^+eqMg>8d@h6Y3"]J$/mlK0G2?nؚT؁pRa0 E VNE9~2Xg7S(55MfpT N,s-eX'::ٺ=Thhf,&1e(b-RBmou]|tw_=~9u=¢\y WƘ|߁TЕ%}w K^l@#oO1'C|rrj"c+:ku1'ThRgտw5"/ E'ig#(&vr~L܀Zi8#يn`.F}Mkp7[#l\I_kb ܮp+a}u āЈsdL&"VW`{ ПoC+K(-EN !w@wĹ֏+è_!mIs XTa t2NjUv sⰥ y BtPoKp]P熨8gpQi RԷ}uuU^iy&$F>Ώ!5z>H'I֧.rw]ӎ=:M^C޹y4ĨõD-zUjpPfK_Aԫg}Vb/ 104Q8Ȫx4AfLb҅o9)כI>| uZL)SЛrZAQ2j @ {~ O[8KHlD 45Tz2\mx%q׻*~`NOQ%um R/9Yݺ&䟚F MJ%դ4q"Ut |X (yKxgS_Dnq?s5ߕ-o&u/Vդ 8`@$UTFSuat0x<绒B͵u2p+V`f7cJk1 eL?&y1,玾ҖAnJ (A(\P[U?hiTDhlMݔV) Rc,#lh@"t&IENDB`./src/eric/GUI/icons/palette/bi_3Darete.png0000644000175000017500000000111111303422556017321 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxb?@&`&h]a2 oK;6k()!TI,j#rc |t4=}ΰh<"$(5`& 0>&› rx%L I$آ`:B >{_?q@TNC?\!L(T" =;6췹~dcېq96r$$Nj ]X =l~#0Mz RB,$.nN]|l9-J#ކշrbLc0wKk='rRC DA 'p6{+R)!--*gӓ{6ad3r$@\&P6M9lo#'m(?z/0 :?~`Cj"P` Bb48@_f%! CkW!Apk6l`DHg5IENDB`./src/eric/GUI/icons/palette/lg_en.png0000644000175000017500000000141211303422557016451 0ustar yvesyvesPNG  IHDR}\tEXtSoftwareAdobe ImageReadyqe<IDATx[HQm:w7RIddM*)P+*XR=(aDP HJBD=M.:2HM]aQmN ҽrn#8 _% w \t%ji??Aq^0{;<%5xx-'<ԗx+Q#$S (Dj$: tmЄfe2+|}wWgb C)4SK&ߕ7c Z!e+IK^7hΆv {.ܣ{@d쌡U.Fԏ9hV ˴h? W0GxF,v>#KOtd[M5}Nfwxr碛3I"ϝ+2 mS :]T<kNܹZFyﳔfwX?dD4'g.StL^@&!D<>{Txݺut2s/L53EIF訙c\U&bfsa5m2vM-TLNOxj!=egcϱ|vExP= a{i1i۰AL&˜ZG)x!3Ne" TidkRK.$К4#iЙ<ӾAì&tܸNFǁ8|WEӂE~0Bu IENDB`./src/eric/GUI/icons/palette/angle2.gif0000644000175000017500000000076611303422556016530 0ustar yvesyvesGIF89a""|ؤ}lWj辟LqYgY.&vٽmSAZ:W@0@.?t;!!,""` dihldd+#B Q w4mFX,&ڰ8`0nI#Pl6Q F{l        ȳ~  g    >p!‡ 8H8  00É C20AsH DN|VAT hB2h4 Tp!3 >h@ԫX%*yAF가֡7VD0z=8Y ~c+^̸;./src/eric/GUI/icons/palette/fixedcircle.png0000644000175000017500000000355211303422557017655 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxW{lTU?=wҖvJR*(D! h⪉_5A6k]}aMvqwY 5vn (u:--3iy;ssn<ɗ3s9:! ~u"$dMPQ1bL= P!Fk_@iC[^X^tneP-5"F!ASt*A Hu%$af85g܍GK5.Jœ V,`F Y s‘kc?}S4ٸ=dPW0X|.S.yod*%z&Qout 6 TN&b?pگH&fʙ=q|WbR("㣾 >!:L֎F [խkdA(4@\SϼSݍt }'_ct~=|ϺTzBd-w_w}EdGnM]k(//#"ྚT'HV:ՍE$<J]ݿzvVmS}_(a9| kV}NSn7ov4.*뢰7&bp8ؠ90'UcD0gGE ⪱ BqkjᑊӖ {sxC{WS? ?3 xv*r@x g23FlV嫆7QQy襵-5z՗o%Ot x}_Y"V53ij@" JDh6Koy;kO<.cC=O 1 h@(L۶D/Մ7bZ hPAiZ2=>Gߨ46ߚ68&9j5x T-ϻO7<31`2Hiݹý;1xX$~f<3EUX1϶qWme9)S?4>qwG?&mV='^MRۥk̓EOx귧=/t^fL-%U lsqCk659 м}TLQ*|{?0zw.\RhpdϟGB%e[gGRw]"l |K(h,/aQ|gP*(e <x:H O$.c~<Ӓ\b&@ĭ~ӶN<,ad,E6U5+d^Hf 8\znE,'{fU^FqU⹗&X1{& Q0_>͌~5qŚ]IENDB`./src/eric/GUI/icons/palette/lg_no.png0000644000175000017500000000071311303422557016466 0ustar yvesyvesPNG  IHDR}\tEXtSoftwareAdobe ImageReadyqe<mIDATx앿K@ǿϦIjjA΂JwuW?qءNkm/^>{w yq0 #W*zvЮTQW05 Kb2udi`1j 1{{h*(\@جׇ+ v9?_1HxDRn׃vlu} EQ#Q0k(Wko}>` "0NAP2cg;Ӽl~Gpte05Z|2`(Q(d<4S%Fz=K1M| 0E !&CIENDB`./src/eric/GUI/icons/palette/js_min.png0000644000175000017500000000077511303422557016657 0ustar yvesyvesPNG  IHDRw=tEXtSoftwareAdobe ImageReadyqe<IDATx+DQ}_+vFfidHd- lVVv^)H1ǻg>wfҐlޭOs={ι4Z2@"~*S/f$|]STK t wA2wGtnQU"qya{s ci[Ϩ}?,('`ԃfpR2) T˨2` 6ClUt14I0S_FC0 . > i# {C} 0,h u)xa@r7- vAܱCkt.kdX=ohVT[~jrjHogOR6W tt""|Xvܳ+a3ʉqsE Z? C|IENDB`./src/eric/GUI/icons/palette/bi_t_align.png0000644000175000017500000000113711303422556017457 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxb?@&,$N7-R>@ ; tb Ri@ Z ij.xbzZ$[41iSȎP-( |{ɎA_G ,p5]%³ ˡ4rcrψp,cC{@9b31Ol|5$/_cYg"DK YD - 9TyO@=@0 #!(qbhS^A9X=T+>Rx+&@fSk7ǏQ. cfe21ZQZѪ:&bK9rM2.~ᕦ>aĔrT`^;ُ(@| ɱg`k͜:W7j# 0tkͼwYh&ę%tH!Yf>'9ҚIܿpܷOoϩ^DHW`~JtWDIENDB`./src/eric/GUI/icons/palette/dottedgrid.png0000644000175000017500000000126011303422557017517 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<RIDATxjA34QkRm^xz>V/"Mz4f׋^4335$.˲Uj\s|#UN/ۂM[ |O>E9=+ ~%pG{mA*hn9`XD֌5U.<28}O㑙8$|8Gci.g~Z4 I(1c5m0<hIO8H9Ba :O 9S7=Ң8, >a[$T_?#7V93@ud C4;jer`'dr!Q/ϩ\bW oͬV qb_p`X{V C T: #x79٦Z);73<;ɁY1EmpnyVCOqBT!xj~!ͨq項{x%6u` ^f8O6!V f42$fO ᅴQd3nFQ^kAjFkp 7 pm,1"I8!pFsʀ IENDB`./src/eric/GUI/icons/palette/bi_symc.png0000644000175000017500000000061511303422556017015 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe</IDATxb?@&`JTBVM`ji?!- s-CsMc+iEu7=ku;r>Aa09)Jw.X O߂1,G40 Aqwt9چ4Kq#_F@v6 L_THvrTGMmMT4Twna8}4Je.;rAA099p5,߿y 6zeoPCkY@S9MlH}>s$M AB Lc%bw8]5F.'/ xg`/PM$pDHLWI/kسec?xU> JK}2xtDONcXqv's`0d7u,d{Pk{t˛}掷uEd.p"TAވ}ڏwTU[3C_R4jpN,nF\ˏhwb?gg7F-*SiGxݾ#'g^mr4wY7X dȪ·?;?p:~1[Ii=zy ~6r#ƦjtX:@!mȋ6fΗJG.` ЍWl)n9[#pUgؕ`$Kd2U ]ܶ2#.smzߑ2~vfףa6\K+i52%ѷb]!Y~Ѹ`9 HǕrg{~n؊Z&) N<]+ln7Gyx,~~ !$PXl@N+OBuUFOBI\7"C`۲qfY%% G_fl⺷e9^Ezw tTl(9Lt4"f-gVR[Zhe_ 0IT,IENDB`./src/eric/GUI/icons/palette/js_pi.png0000644000175000017500000000066211303422557016477 0ustar yvesyvesPNG  IHDRw=tEXtSoftwareAdobe ImageReadyqe<TIDATxKJAEԁcG#!W\+@ 'TQ~IOi(س{q!Hj Ut9a5s&}e y0L <ĦXIa$vĺX3(ˁ]7@\,9`5"[E 'rmزx_W5{N47 KB^xOInHk%=;VlPȼ#g,.o/̻3bU}zGYUֆ$:̲G.zcNP@~ۨ{'il?IENDB`./src/eric/GUI/icons/palette/color4.png0000644000175000017500000000161211303422557016571 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxWo@IHF̀XХQUucԡ u`ԩ,E0 T$J+%(i8c{XsQ͓w~ݻwmFA " (CMyH`15,k RN%šm,ISgӬچQ6BTj.7"$dCS˳r,~h-M{jϾE2ms@z@0@CٕR4U 7 A-:a <''Ox3,NT4̏tx^W*= rdzʁy~9 ;ac]n^J$A-@XQLfA|߮VMWrdB' 3r &$r3\n~y`DC]vp઱8sQmx&"p`%/s·(+9ñgjں/Z@lfs^?ˋXlHf`s S} ѯ80E ?lQ&@U pѫJ7HvgXw`vV^?E_-){ů,--D&&8o=E?èXQgs@~!&Ao1*D4p;+0%ACӰg)= =WG=g&Ґ jԉWĕZPK&].sgS OiI_ʁ`I-,*IENDB`./src/eric/GUI/icons/palette/edit.png0000644000175000017500000000273311303422557016321 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<mIDATxėklUnі>6(,-F11IDBPP$@PHL@b)ɶ&BQ@UB[PHJ xHHdEM>c+1. "1/ѣ_U8vKNZbY|ȩSgHO@!@LrrDtEyyFs([[OipEҖ`g}GOAF(m6bI*`4eS@<E}FzzrԿɲnaKO7Dh0<خ+Bk5WSUqLv--wyesde-znI)D#:\^AآdJK׼iu`H(&[IBQT09SRZ|[M+ &4ߴik+vlذR0,p8 4Mh1SZA-)+[|-6ZW.qbYaF;-{lVE$8b23˴p.\ UUOZ<>K=0<|atttXz" ՚eeː娿!L+=n|_ki%}ׯl>g,ݼr])0fr=v}*ɼD `PR̦hOvUIL'56?q`%ED u⁺Xv~ m06?K|h(`b{&56IqX S'Z7|A>*)ru>17xwk]@B<"K]4. {U)J(.C]zN%'L5C@p W XFk,EkG4_C[}t WNX䈠*&vKƂTy 0N`yS7{IENDB`./src/eric/GUI/icons/palette/objecttracker.png0000644000175000017500000000303411303422560020203 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxWylU3oۙv P˥U-4Q0Hb,H_HCMЦFRlKwמα{ j8͗7޾}Wㇺͷot@@ X0|vx9[_"rW0 Cc^מ71FdAR9Ee;|נ`Yёsy^MhN^̟ixnGIiQyoOoXAX>-a.",j!Ȟk9˨r]$UL%L U4vr?s`PhыLX&f.{iXꋞEgD8;֗簖- QR㝭Ugw$[9s 8Y7ꂣ1I}+|HG֍WrjXھUQUee`ԺոtpV42:cbD=xFx(. =V L?+2Vd;C!@ 2 pɼ:AQT{C. [/>0Okggh#2)E6EQp$‹r3ʄ%EC|SSۥ6{Qݴ9dP\ QsH@A'אM_W(F{I)@4TnQAԆhw;`ZZ1 YA7d Ѥu@i7*M#Wh~f,œ+v3NUU[BC<"]l"GkL[nݣunC3XT-U4iؾ"V ʱs׮4chaŝ@ X=O c6(Iv=1BmXY)lIlY)t5NM{ gC<ZwRF]{Bc5;di{QΨbQCua,!maw ZA a 岲- 3ƋOvX |L.ɠLxj*f/a{kߣ!"QSeRB@BI4 Mvn/ndD;HT1*-=3| +b Z (ga꟞:iCvzeV6ָ1O3*O0IENDB`./src/eric/GUI/icons/palette/hidden.png0000644000175000017500000000273711303422557016633 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<qIDATxڼlSUk_u+{ - SF?4$c0D0&qNF dh ~e"0cݺ9vޖnC'{9T, &pW7uM,1NJ[!rɘ9"' ΠƭP0N}'FUH2 Yhl|" 3ٺY®& DؕU" !2"ċ# 2Db\ MƐt8 Z²{&d%g"!H{dbʗ!l;]ׅj3\qt!iY'Rb*dA!șu-_vHMMMm"8nCZqO6;p1TC7wÖNy[k͟x H`ip!z_:ۑoE7v _HR-\ ]Y/$(BW"h;R"C2 xJ\1AfsֶK.xUp] L'E"l,ml(ƑQ&F2ll&.KNЙ#{&ѯ:6orU$Kx"66VpĐ(سB!bdt$}ݓx_<eeuusx!EiroڳSjw˓SI0u|bG!Dmem+>btEa+2d_:MgxjpmgEKےJ2"zt,+]5{auBD(L+o= J/eS] lW98=gSsc>4%"1JHU'GJ@@RQPOŃIENDB`./src/eric/GUI/icons/palette/angle3.gif0000644000175000017500000000104211303422556016515 0ustar yvesyvesGIF89a""rQtͫUeVìjòԲ˜M찍rX/%y7-SPވE1Ds|oﰲ~:"!,"" dihl$WpyYQpl~h4A88=nF{ښ*𸙐 b 9 o~{ {    <  8 .%GA #r@>\2*H@䁊&@JN0XL+!L8!CΕ(H DJc<

0]vc4,nQ&r&W!IvKn@-Fl{PU'Z*¯{ T;A $VWu"#_z9-ߪbs.L{ρHwO9. {W[IENDB`./src/eric/GUI/icons/palette/rename.png0000644000175000017500000000322711303422560016634 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<)IDATxWyLG-r QSP'1HQ@mSij-jj6%iP6$(VCKA RDP'ȡCxnyCM~ٙr,юf2ecDS]>%x{  0L@eujZU\Ӎs4c 0 p0 f˨7|*Wrgu0Jh=3r? k Bҳɩ3qq LGNA`s[(@4SuѾQD?T1Pnf–ۼohWE+>l_@pRF1W wwf;/H^}Jzn^3u*00 ! P :U䒦S\@>Qi' qw^4Zw,iacJf>7lR,g 1a2XxbB%Y/pyY^"$ ?G2^z %%F%o*8oNʲݝ e?aa¹fC +z-;iI}14WJr0BHBrYZkbTqIIGnpBwwut4#?(9B2`,y|w+w׼NidsRq״pleACa (fwUnp8eRO:֘f& ^f7W1= P0e@ml)+.&8qӥIح}K >NKj6GΒ$) V ^j23mU!h=e@8Vm}Ea+Ct8/3:L], [(.nZ5`9!QS $>on=C<0//CdR;3 i0)ilm|ԸoimGAT +1do=hC,N"F`ZRi8~rs2aq{?8\ou4*ҵU3_bڡW2׬*<,4 EN|0'cj5_"z؂Jذue`S3{ȑ(0g h`IENDB`./src/eric/GUI/icons/palette/js_asin.png0000644000175000017500000000100611303422557017012 0ustar yvesyvesPNG  IHDRw=tEXtSoftwareAdobe ImageReadyqe<IDATx+DQ{;>mi! $b씅,P L^ V{υ.۶am(7fm>V@Avj6:oq ,%4_^~ MBJ$IhfP][Z33U68f]oY;n)γCp]U`f\BMNʼ;9˩KDGb3 `Mf,,m%%aJGhGuCF._]'%N(R|^f lv$^uUߡrAɝjd5MM5*B|뜥rj6Gj"|IENDB`./src/eric/GUI/icons/palette/lg_pt_BR.png0000644000175000017500000000125411303422557017061 0ustar yvesyvesPNG  IHDR}\tEXtSoftwareAdobe ImageReadyqe<NIDATxKSq?L7&AZtS nbEEEAE4"DdBXW iT-bvz656wt ߳q}}{:*kFEQrx<#EҲ4$B) r_A~hͻT ЯA(,šdd 7Ŝ%;RVh+,3:qW,˄f V&iI:5@W.߻ G"*^oI,J'VLC:Y7pXF#Gy,->;6B;/ZOa^³9l-CGܐ 3Tj]-`Ú1#=հCZ)V3Ӱ+-$ ӌ6{iW_J= eWAIwå&Ή!JL[lsO7,jv$0!$#mI%AWs;pF5N6j k~9;z.c'Io>kKuT7S1 1vS!hQ]I7^  DT sU2igE`+"HIENDB`./src/eric/GUI/icons/palette/Pclose.png0000644000175000017500000000025311303422556016613 0ustar yvesyvesPNG  IHDR w&tEXtSoftwareAdobe ImageReadyqe<MIDATxڔ _n"32(Нr}<.r&5xVUT 7Gvf*ytΝcK3&?=IENDB`./src/eric/GUI/icons/palette/fixedsegment.png0000644000175000017500000000174211303422557020055 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<tIDATxWKLQNi *JTXDM(Đw&nFF~1 hFBcX臖v!J˷S:5o8ЖA6潾y3{Ͻ3EYEvr`];Na(7`;rj$Tk939t`dG MX%[ ࢨlقp8[RT=7^$Nj*U# QT+sڪu-Fb pV9#9z$_<~J;2i>UL&Y“ݸ\d 7[xusUb$=:QpFQa{kI:wjܽߤ*:,)/PkM5~2@OGY >&`uw ^aS*:{9-x ?%# nY8ZIENDB`./src/eric/GUI/icons/palette/circle.png0000644000175000017500000000361511303422557016635 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxWylU~s1^ek[b[b+ W W IMLFf 4pk,tW44v{qzKyW͌~U[(3]W5& s?|EaHvg5V]~q, &zDBG,,ǹ5R1" J{J\K64"JNzzS4勜?77r`s(6 œ}zduH@2&pVb"˪ "a>*g^Ե`w"!LG03#DEEȥ:u$.Z ͊ۅn.8"..Mx=1o+^aARM):ۄD.N^T/$\#,Ɓ3Z~R;|T\FO@rU?6ag63ئZ޶sh ?$9v!3澩]72Vj5Wۭ8gi?  掊<Q @-,$_Ckd"˛LvpabMgnrtD,v"̓T> pl9TЕ(b8݄}^{-WU)K5@m.jy.ΧǝDD3?J呛,?v,#ٚau|tɌN鄹 !Cg/{\5<4cM`$$\ Y1prz+˕3( q{29 k##nH"J$d'RĝjA7(/2amHǛV rֹ(t'6cV`ڍEgKi_# kIENDB`./src/eric/GUI/icons/palette/athickness0.png0000644000175000017500000000053111303422556017601 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATx얿0ƿ*$./8i 0 kҠġ%_A~ J)<00x7`@ :Wѵ;UtH]ORi`:f![~ h_s/̹(uӇ*.th4l_& Uy%]& ط n% m,^ {`(1IENDB`./src/eric/GUI/icons/palette/acolor2.png0000644000175000017500000000100211303422556016720 0ustar yvesyvesPNG  IHDR"":G gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATx]R0 v|q"ymF74]]RPnY[-P<\'#|qd#Nw RS₢M + A9|8"qJd;nQC&iо 1H+mѡŗz[[CO|>nu{ȶ"[5*^`ΤbIENDB`./src/eric/GUI/icons/palette/interactiveinput.png0000644000175000017500000000247211303422557020771 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxWME{faWV0rX/1"Jh4$&6AxxT^ _ V(*A nQwYvfٝ鞞fwؙb'/5]Wޫ"yE ܱEGa{댁9˃/_+B^8}D~?0:[uKv V@H3 RP{'?"' `g!ҽwt?`f65r%퉏jC#;) ISD4`I`Q][7!q#eg/z!}P$hWdx׺Uw;}t&]~jv9[ѣȕE]v`.]̫uS ޚ''2UQ)J>8/i]\_q ìcQO( ҃֊^9OW0v!l՜NA*aF?]xrP.L[Ր,L>JI~SŴ@2E!K9 k5w%0' M\S#jKs8~ac3|?ƋrL8ݤ_RP@H#yޞ*)TL#]85Ő(u}3_/hbq׬~϶02XrUMVs*A>V!4)c:l`8Lڅ_NY*m`V,BZ׮R60(Ɗ8৤Isd}}ݱi.5l i͹(8</T`+oH.8y0JN瑳8%aƦ𥉉ׂW,ldlLGEwPL񺦑EL-"|(3jc C-, g7KBHCdt6ٙmqIqa f'` Ģ#B֨m;0̑PL' +5k2sjdy %X Ʒpcb3Sb*f4uEQIk/E:S+fN[Em"{]#p-)P#a]VH)J$ͥ?qW dmYVHw8r`z?%* u R 0 zm"瀰@J3!w>NK@$F8`]mShD{;:yQ3XX}'cV}P{c/sGF=TVS)eحς!ژs< `&0~ ^)IENDB`./src/eric/GUI/icons/palette/palbackgroundpx.gif0000644000175000017500000000005311303422560020524 0ustar yvesyvesGIF89a!,D;./src/eric/GUI/icons/palette/bi_t_app.png0000644000175000017500000000203011303422556017136 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxWKLAݖhcI1LċQ$z#F &,'VM33+Ak lILos(;mZp@SO21/DZPNw)`q ޽.v69|7ſ0CdnU#41Zjǧ]*&3_8 @޵@cF>vh}>~(¹Ta]'/)Ӕ S>`4TT@*kW|T`9"h2|^IJ'!Kކ{ +S q)6dgUdDeG txIT+im$Ev)g΍%t.6ZSO^0V՚-}I.1~[SQj7BWD&z[kBƕ_oTǂ7x&'-K g*,rC }sNu7/fe.sJFSB  !;/k9l.I2QMz{>~59K<id**jDiTMJBwIĈ Fn/3T4(O>U!Un *l|%*ˈBEל\U;1uvo'CQ|d::uJ E2RfںgE#!uQ'+;TC1K+OO[&NG!{^HAw9$6KU9Rݜ!H,,6DiUM4H8fSYO6F i4$N*c7tZP0u 0m~IENDB`./src/eric/GUI/icons/palette/undo.png0000644000175000017500000000211711303422560016327 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxWoGf^ԁT(Ԥ-=T Ps^ =T=D EUJK/*H@b#NݼIF8ĔKGxoޛ1<spԹ1,F ]@71pWS ApXnh0&,+|.͊-t4bYT+C-%YMS5&S˨UH" _9;)D\2\"MZ3)X>ܖ?. ."UH-X#8k"` ~[}4f !%ºyŬi߈/t!D@ )7aHww%BƄx/WkLOZ'eA7hmX3E@䭾 n xGw\S aB`:|:O&_s~[DuoU-E8C R`zE$|iQٍ*VUʇ)s^r$*x&Κ"_]W4eNIENDB`./src/eric/GUI/icons/palette/acolor1.png0000644000175000017500000000101011303422556016716 0ustar yvesyvesPNG  IHDR"":G gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxYN0,]8'<5I$̄d7ɖƓM/LƑEQC8aA, }ǓZy?" @dd#8r"FAx")}(.h^-sSSHg(58"_wBqE HHklᔜK  A> ▲5BqI<A8Ez2V(qK31IUjX 95dGܲppO SXi/Cp8w2|x<`혃'f8 + A9|8R9H!L7(1^%#5о ԈTCQ6sm/-䦧 >űmzѽ:nȴ"mU<[%ePJIENDB`./src/eric/GUI/icons/palette/allforward.png0000644000175000017500000000235611303422556017531 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxWKEgfgv"(PpEQXD$xJJ.x2 '% .@E=x$a0&5;yLwOO-&306]U0n^ KBspG2WI{"dl6S12" -ge__o:2g:6v"~-t[Yex/) RU>/= >WqaFRLɢivω=Th6SK,],D)E z} JT`R)k0[>\?H Z/C0m Π3/H%B|RRaR>_|B%IJ.8V <[Ww̄~$ (#R4sK_?$< J |9|Q )) U-UˇN$YJ G)F)';"0醜[[rLS̭fcR*Ϟ~I#ԩ=brIp_#Ƴ   O~_DV@1 pJ +R@Ћ4{'蛗G>SްAHXψ.Tg:iw Dgul[,wx,T~?ա!l?0M@,Z7"1;ުսMbnP{mZ7SrNJoF}`k|hHjWu:p=2On^iM+#gVgSҼ|\?4BGP8,lDSE&-`ZesqPRB: $0]OB`LDMw9 zÈfIENDB`./src/eric/GUI/icons/palette/lg_nl.png0000644000175000017500000000034711303422557016466 0ustar yvesyvesPNG  IHDR}\gAMAOX2tEXtSoftwareAdobe ImageReadyqe<yIDATxb?- H&F @zYjYrǗaɠ`6m5 lhF#>%&.>F^_@`sVЪ,bvZN50IENDB`./src/eric/GUI/icons/palette/chaine.png0000644000175000017500000000101611303422557016614 0ustar yvesyvesPNG  IHDR;/tEXtSoftwareAdobe ImageReadyqe<IDATx=AAYG_D($ "VT *Q(4 QJyc76KN2ν=gf "<4yB oxAfJ3\.S  OP6'^-UUZH$p\pݘL&H./ B0^GJ(5 Z,L&Ixd z62l6 Z՘2$EɄxTJv`Zq8l6fD.N`4x\2NQ*`6naXPոʐjyv WKY.Πe+RCx<r q:˾ (J~p8`@p8d2qyT~= TӛgNW;f7?yt`uŁ@ PTIENDB`./src/eric/GUI/icons/palette/mask.gif0000644000175000017500000000011111303422557016274 0ustar yvesyvesGIF89a""!,"" ڋ޼H扦ʶ ;./src/eric/GUI/icons/palette/allback.png0000644000175000017500000000237711303422556016770 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxWMhU>{MbkF-؊tYҍ.Y"B\$+7ER ES)tQ4Zj!tQ*`[;?s_ěɛׂ ys|!BxWO~Bshw {&1QYi BdQD f%K-rNiPa=掾/=Wj W&vb?8?T/6Ye%ac5]k+{p|mkNN?ysW\6=k"pVfIӳ?xqdk.r E]pj僋DX3m'F^s!} 㳓 [^(X$Ղ(mEIק?8}dgv _ɻDykx(oy(/9qlű[ (Ǽ{{(meI1!v'qCeII4XV|趀F4Ԓ gkM`% 0 z8ٷ_T]qƾIB/f Īvv_\Jx6gl'@Rw:ͺu7\rL_Fppg33s,jSGt{'|wjz[@!C- ]hPpw5Ʒ"oB+g!2/-֍{A=Z9̱@Jz@GW$wBnikbgh= #qE`41@0T\N|Q2X9T+dB_s[ (AGp3DY(+Rz$C%Y8Ԙ p2&>l: O.hJ+{68`tq͏G^Att OXstI12TypG㵠~7V,cbg+BݪXVWU,@0PK7׾s 3 Zˊa2* BƷs:mdLG˜LvF)VQE|ϐ&mb˯L͍׺é]}uBoF2jǛVPG\.:h89=Q|`[@oq;'은.vc0ySiP6DV!MaAD$ݭ,DY3)^sJ+YthYŮrURd ?ϤE=߰+xwjWI~lIENDB`./src/eric/GUI/icons/palette/selmark.png0000644000175000017500000000050011303422560017012 0ustar yvesyvesPNG  IHDRټtEXtSoftwareAdobe ImageReadyqe<IDATx1Aq'8">NE+h]DI-:!$ QZ.$T$®Wl2/3;(۶=y"{/w>gȄr#tyTQTr ,PB5 `{h네J`8h F!LupV9Chb#?<Pd(WZI~FXMz鶒[47Zά~rnN ɋ_PkIENDB`./src/eric/GUI/icons/palette/color.png0000644000175000017500000000137511303422557016513 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATx̗1oA`0""$ʸM :7%%=? ("4F)#H9`7k`罛o$I\QrG(-URv* Xwb0ɿ ^J³`pmv&x} )drEd2( w"Y[y4=1  񇀹KCpUh4VKK{vM.;+2qrFHs UUl6z=U j\[Y=py1&J.!I7X υRΒ[eJnEH[Ip"m2U`EoȘX+|4BklOUYL%% CLFy^HcH@o%`Fd-x '8s@nGP+ WwȟflFe XnO}h+|G˛DJNhکި$'u! =̥$)؉hh8s$K/-*ezW!'Edp Rn{߹-nSTX+|EoZ% URQn_wF\Kށ-XXNF-9=g"u;~yI_o[`q/z]1u (r(}$*]8;qqdHs_6m~l*.{@<セGfT!*$ )6m?prHTjAoEL KŃ@NM.[ .PD݃!گZrݷ/aHQ}> Agn,t)]UN;/(XrTS6F:)جc=L=^ Hy5N{W@h'l :=)όOϯf#>h? `nIENDB`./src/eric/GUI/icons/palette/js_round.png0000644000175000017500000000101611303422557017210 0ustar yvesyvesPNG  IHDRw=tEXtSoftwareAdobe ImageReadyqe<IDATxM+DQ{\&6fA/ ba9R$l7f",(e={c'gNwRS<< :*?;J8ާ8A aa13hZNA؇Wf5eI8$C#8C|xju[kFȅIɍW0p5Pk5p_{G4) f 0iCza.j?Gw cf6i@D4A0e,)',kG/$[R&kW .2}AfYཔ59> *Qfr 5e ^|߇4Mat:}R3T!Op5d20 +rjnPI%h8crM:4 2jL o8EY (*7#y."^̹WE!`qFx=X6 迕`΍s-jD~!X%wVYc?BB#A@EUy^@bQ!5-d>CG=Jq ۭ}HP8K|6 6&Kk3Bd(i'N $R H.IBT@(nhLg( ɁODv3lCX$d&֏2..@R E!pP+v8ǘ˯9&c/K7]=IENDB`./src/eric/GUI/icons/palette/segment.png0000644000175000017500000000164111303422560017025 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<3IDATxW_HSQlsuF3%B0B>䃭zSVTd/YBaceIPaX K&3n߹|׎כޭ[x=۾{~3^en36yl9X^NtNTl3u;m󄐓gLGt>􏃉& ެ6T{X>__ifFN9~廁\[t9op+2 $Przv sbdS ,|\}|V. !.5r-B$Xz\J5ֵ@hq@x39g!}ܩw`ݢ۟|%T: nj%?# 9e^5/EP$_$JO#2ڐ*!^+Q_<}l[Ӗg Jg} P (\b@S;]Pb>lQ!*{<_-&nLDHSyb]4zNb67!Oڊ^&cK 8d&͒ZhusUXW'Ü#*]~?cWR*&r`qr`#={?ɍ̎.$#b?!mc-GZhӸYVyzI K +.$~9~wڴ)6W2zP>35`Ec;S"$5Gkʝ%ΟzƁρ TϣxWTg8OOp0d>0)ل딞#@pX\-+!R@p(rRtKvyGIIENDB`./src/eric/GUI/icons/palette/color0.png0000644000175000017500000000137511303422557016573 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATx̗1oA`0""$ʸM :7%%=? ("4F)#H9`7k`罛o$I\QrG(-URv* Xwb0ɿ ^J³`pmv&x} )drEd2( w"Y[y4=1  񇀹KCpUh4VKK{vM.;+2qrFHs UUl6z=U j\[Y=py1&J.!I7X υRΒ[eJnEH[Ip"m2U`EoȘX+|4BklOUYL%% CLFy^HcH@o%`Fd-x '8s@nGP+ WwȟflFe XnO}h+|G˛Dx[۝j z_s}p# .EA18`\|,Y p0ҼHOOD h3a%YE=p,ynOف[7(j48}< <73S?;alƢ<{ NoLR/[ ffPN,z\[{̨׿*jIh`t,^ J7px_~F~=@S/-2]5QգV`'.W+Jb[[|rA:GB(D~n'1=?pz't;#8y^TV_ߦ$e-V\Ë+i"l#,>٤ eF_ [dO ٭eO3#WϠiO"8AUtjTၢ97rI,~Ud*x\Uߔ$MBdnW$~,]&0SSjUp[ >o"?C!}U`N]m1b~]coߩ@sV$XsENjܠ'۝}4vrR._ {a'"KD,kAJDX.SzYXV6+u yܳ6 p BH1Z{)q @ m;XdFl?صYyGTTBe[)떸+LnN 3RNYhLM/ʐ5UBf48rܪYcAT%K!wyh49[΋$8q4X;I&R&;-u Sn4 )R4FzUjL?x$)W G& n5k; խdy;k۵:L:W>G A}= s!cSwO\z fi[q Ș < t?+p8k2pՇa=RBq7+5Sq$8QPk%37Tm _&cWop? `FJRѺIENDB`./src/eric/GUI/icons/palette/ctrl_popup.png0000644000175000017500000000117111303422557017556 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxKAƟL=hl>_ x=R%PE(z-<R!B饽O)5v`.ȼyyͮ.9GbX]Z!\$nF.O$uD< *3`so[`<}m9C8W!r4op\tBƫ&2È-ȷ{I`aZ/f̖h4 J)f%,!P)7IJ%IƄ@XS@[&\ez@zFÐ}NNyocs}Y%BnN6]A(WܽSi#@P/{a'T_n}y{Bh6kuPIENDB`./src/eric/GUI/icons/palette/thickness0.png0000644000175000017500000000053111303422560017433 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATx얿0ƿ*$./8i 0 kҠġ%_A~ J)<00x7`@ :Wѵ;UtH]ORi`:f![~ h_s/̹(uӇ*.th4l_& Uy%]& ط n% m,^ {`(1IENDB`./src/eric/GUI/icons/palette/Pdetach.gif0000644000175000017500000000045211303422556016720 0ustar yvesyvesGIF89a MMMRRRPPPCCCYYYNNNKKKOOOJJJkkkGGGVVVfffhhhIIIĥśDDD!, G@pH,GH"bjU(jnA;c:e @Dc Ӊĭ/w!sE BHFA;./src/eric/GUI/icons/palette/oneback.png0000644000175000017500000000165311303422560016770 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<=IDATxW]HQ>3;DId-D?D=c b AE=D &$RjXi,{gwIDgavvfseY- l  >:Yt[:Q 4_]ze;.tt>pXMw!TF S3|Wg=p[tH5 ]BsտѱYUOKB!ley_ቖun`^!(b< Rv 5y pLQ *gػ!pW LwnQ۩A:/}.UJ~,A)><46QV0 :$ E),RvFy"pkX mb!Y$`bcCDϺ4oouDQcWU3XQpD7WULm$lSyQkojy \%%P41llfx{ȧ| A R 8eU{}mAg IGH[/% M. 8cO$R>o̜ vQ 9x^RIkUz4e.jN.3bQ$*njI\[Qpj`sϟ 0M6IENDB`./src/eric/GUI/icons/palette/type.png0000644000175000017500000000104211303422560016337 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxWN@=\1 >C-, g7KBHCdt6ٙmqIqa f'` Ģ#B֨m;0̑PL' +5k2sjdy %X Ʒpcb3Sb*f4uEQIk/E:S+fN[Em"{]#p-)P#a]VH)J$ͥ?qW dmYVHw8r`z?%* u R 0 zm"瀰@J3!w>NK@$F8`]mShD{;:yQ3XX}'cV}P{c/sGF=TVS)eحς!ژs< `&0~ ^)IENDB`./src/eric/GUI/icons/palette/bi_arc.png0000644000175000017500000000223511303422556016607 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<?IDATxWmlSU>ڭkٺ]hY \AD!A EC4P%1ƨ`Mc8غQt]=s,?;ɓ>ܷ$'H0m- ġ/~tz 0x@isz؅Yg~ hsbY0p;@͖0KD, C8>mdƋġ~͡Zn+1+&Ɠc[ dD[%Ap/-5U~IWCVz)˾QSUpCZ S~<_l(hH{.tn '}c1[U֧ɇc)LȮoZdOh,SsHH\9 !sN4bG )׌R"`4[jԾ ǽc[]Dqq/=\}PVf|Z< )3.W@"Α7i[#Is J!"̺rO'⦄h<`b{#.Zuzʠ%A}[$@$ j]L%%0I,ƥ4sO cU6MA%՛v_'-+wǦ8:?8& E%qƍn*a Μsq}ݏXa^ RW2z+U k6?Y$܁`JHD(~\1 5=X*Gi=XŚ'>ق WYvwz3!]"0"0'k7뼛ć#<13C~ t= +$v3jƯtaR;WTPSmB0bkKE6Bs gI&]^iYMryUXk@`>_ q4QIENDB`./src/eric/GUI/icons/palette/thickness.png0000644000175000017500000000053111303422560017353 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATx얿0ƿ*$./8i 0 kҠġ%_A~ J)<00x7`@ :Wѵ;UtH]ORi`:f![~ h_s/̹(uӇ*.th4l_& Uy%]& ط n% m,^ {`(1IENDB`./src/eric/GUI/icons/palette/type4.png0000644000175000017500000000131111303422560016422 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<[IDATxV;o1nsIzPMD/@RJME E(!mۋgopp5kWxfl{eY& @M`|ptju'* <yuxa? ` g>eD*$\>֎-,м~~$g+U%IPko1mjQkAH B?hkhy08l8D'QӬ,(=l[cPD,Յ^0$yopΪYh~ :4) GJ|3Ih?ʥ0 SR&0a4AAb%1s052J`Z+al&'#cg97RЌ?͛ͭ(2yjVgNu/M8Fk3z5ٙE %¥[ɧzhS Kw[ϻH2'̒Gr(bVV&๼#7XOz@( 9~ 0!A%_IENDB`./src/eric/GUI/icons/palette/midpoint.png0000644000175000017500000000132211303422557017210 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<dIDATxWKKBA{M!"eEF- ZhZjRj%-$ʅ2"i8j3w9aQ=<Thd)3Z>6=ii>I­Y#~LkْToli)~F"I7C^}wqz;Qpڂ$0pN1[aUJb^n#fRZp$&g* ayYj=JB=0:WGWA oU$.ۣ3@A,bّN)1d9뇗nn019g}rBle?~]^&4SDvRlcG./}w8C'{e7x8@5ԨV'l͉ ssSPk%$wka<3qK)qtKjؿC}CZ27sCAp Oppp8@ ۟_-HJ`=(D~(#MHTӖ u/2#M@{EU&ܽ,EF`!PSt/b`[W5IENDB`./src/eric/GUI/icons/palette/.DS_Store0000644000175000017500000005200411361025415016341 0ustar yvesyvesBud1%  @ @ @ @ E%DSDB` @ @ @l.pngIlocblobX Pclose.gifIlocblobRX Pclose.pngIlocblobXPcloseover.gifIlocblobFPcloseover.pngIlocblob Pdetach.gifIlocblobR plines.pngIlocblob plumb.pngIlocblobF8 point.pngIlocblob8properties_panel.pngIlocblobR8 quadric.pngIlocblob8ray.pngIlocblobF rename.pngIlocblobsave.pngIlocblobR savedis.pngIlocblob segment.pngIlocblobF selmark.pngIlocblob setbreak.pngIlocblobR showname.pngIlocblob showvalue.pngIlocblobF solid.pngIlocblobtext.pngIlocblobR thickness.pngIlocblobthickness0.pngIlocblobFthickness1.pngIlocblobthickness2.pngIlocblobR tracker.pngIlocblobtype.pngIlocblobFh type0.pngIlocblobh type1.pngIlocblobRh type2.pngIlocblobh type3.pngIlocblobF type4.pngIlocblob type5.pngIlocblobRundo.pngIlocblob vector.pngIlocblobFHzoom.pngIlocblobHI acolor0.pngIlocblobF( acolor1.pngIlocblob( acolor2.pngIlocblobR( acolor3.pngIlocblob( acolor4.pngIlocblobF acolor5.pngIlocblob allback.pngIlocblobRallforward.pngIlocblob angle.pngIlocblobF angle0.gifIlocblob angle1.gifIlocblobR angle2.gifIlocblob angle3.gifIlocblobFx animate.pngIlocblobxarea.pngIlocblobRxathickness0.pngIlocblobxathickness1.pngIlocblobFathickness2.pngIlocblobback.pngIlocblobRbackground.pngIlocblobbi_3Darete.pngIlocblobFXbi_3Dcoords.pngIlocblobX bi_3Dcube.pngIlocblobRX bi_3Ddode.pngIlocblobXbi_3Dtetra.pngIlocblobF bi_arc.pngIlocblob bi_biss.pngIlocblobR bi_circ.pngIlocblobbi_function_u.pngIlocblobF8 bi_med.pngIlocblob8 bi_syma.pngIlocblobR8 bi_symc.pngIlocblob8bi_t_align.pngIlocblobF bi_t_app.pngIlocblob bi_t_conf.pngIlocblobR bi_t_equi.pngIlocblob bi_t_para.pngIlocblobF bi_t_perp.pngIlocblob bi_trans.pngIlocblobR blank.pngIlocblobbold.pngIlocblobFboundedpoint.pngIlocblob chaine.pngIlocblobR chaineOFF.pngIlocblob circle.pngIlocblobF circle3.pngIlocblob color.pngIlocblobR color0.pngIlocblob color1.pngIlocblobFh color2.pngIlocblobh color3.pngIlocblobRh color4.pngIlocblobh color5.pngIlocblobFcopy.pngIlocblobctrl_button.pngIlocblobRctrl_chkbox.pngIlocblob ctrl_edit.pngIlocblobFHctrl_popup.pngIlocblobHctrl_resize.pngIlocblobRHctrl_slider.pngIlocblobHctrl_txtfield.pngIlocblobF delete.pngIlocblobdottedgrid.pngIlocblobRedit.pngIlocblobequationxy.pngIlocblobF( exporteps.pngIlocblob( exportpng.pngIlocblobR(expression.pngIlocblob( fastback.pngIlocblobFfastforward.pngIlocblob filled.pngIlocblobRfixedangle.pngIlocblobfixedcircle.pngIlocblobF& forbidden.pngIlocblobR function.pngIlocblobgrid.pngIlocblobFxhelp_panel.pngIlocblobx hidden.pngIlocblobRxhide.pngIlocblobxhistory_panel.pngIlocblobF image3.pngIlocblob imcenter.pngIlocblobR imstretch.pngIlocblob imtile.pngIlocblobF Xinteractiveinput.pngIlocblob Xintersection.pngIlocblobR X js_abs.pngIlocblob X js_acos.pngIlocblobF js_asin.pngIlocblob js_atan.pngIlocblobR js_ceil.pngIlocblob js_cos.pngIlocblobF 8js_e.pngIlocblob 8 js_ex.pngIlocblobR 8 js_floor.pngIlocblob 8 js_ln.pngIlocblobF js_max.pngIlocblob js_min.pngIlocblobR js_pi.pngIlocblob js_round.pngIlocblobF  js_sin.pngIlocblob  js_sqrt.pngIlocblobR  js_tan.pngIlocblob  js_xn.pngIlocblobF large.pngIlocblob lg_ar_TN.pngIlocblobR lg_de.pngIlocblob lg_en.pngIlocblobF lg_es.pngIlocblob lg_fr.pngIlocblobR lg_gl.pngIlocblob 8 E  0 DSDB `@ @ @ js_max.pngIlocblob js_min.pngIlocblobR js_pi.pngIlocblob js_round.pngIlocblobF  js_sin.pngIlocblob  js_sqrt.pngIlocblobR  js_tan.pngIlocblob  js_xn.pngIlocblobF large.pngIlocblob lg_ar_TN.pngIlocblobR lg_de.pngIlocblob lg_en.pngIlocblobF lg_es.pngIlocblob lg_fr.pngIlocblobR lg_gl.pngIlocblob ./src/eric/GUI/icons/palette/setbreak.png0000644000175000017500000000203311303422560017157 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxWkAfwT[RxPA*E]?A|D/G<E=y *Zinɾ3;3ΤfI0lc~ b|UW??ZDXlAqPD[ uƝNMZgc/Fo9iuJ4UE 칂Ft*~WB 1V -+1Z ÊCp ZלIFW4# fաRu+R $"$ g۽d8l:J)PʀQߤut<.昦hgZ`lEj)@Jh]1s4%0HI!-\~M[vw|2\0?rⳇƤD1fn 4o?|yr=Oz{zU n0:1g$j}Mek0䉿8}P!Ӯn\&slT^A |&5w(W":e w޾AM߹}FB3!c䟂PԼZ[.´ oaN,:.F(eةs-Bv XzԘ00WW|rc6&Qff5ٵ yĿ-MAOMR>r[G|rv6;7+y=TKy׋c[ -*'#7rb&ñwvxD6 {(>`:.,}&g~DX'JaI)s,u33`V|g$$cDN؈7 /$jzb vm$mp++ B$(uᠩ[Kf ҎDVEۨW38 %ȤU(IENDB`./src/eric/GUI/icons/palette/hide.png0000644000175000017500000000154111303422557016301 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATx엿oaǟN ҘBHctPYŰv NL44v4.Il0R(!!H@@!;';x 183^HVAp}Lᙵ㈄d!\EjZ0`ܱ4̊]r ֵvC766:88`XqII;h]1vHjSPh-LB v=eJ2.--lZ0:DqP1zlnn`pcCNV9~O"Lfyy*8eiED"gO\l:roH |G~r1vT:r9ë59N_FBTUUm|Ḓ8K*vo=Sa?zsa>8_$@gEӮ E>r`ML@ݏּ=*yLl^*g P 36Dj8hNJ3_JMK8KuT>4IENDB`./src/eric/GUI/icons/palette/acolor3.png0000644000175000017500000000101111303422556016721 0ustar yvesyvesPNG  IHDR"":G gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxMN0I we UXs 4nSY&I"%iGh]q##@?Bs GyhGq"QdyRG|(֛dA1pC7=Op`@^?dd@HƥVpI(Ž ȀĨ|7 Ȁpm3SۡLHZoO婤r⒄>)Mi؍119tK@pK2x"V竰xx8O72Rxr0wI)> JSׁ`'-+\_ )'S 7OX$.G{̡аˍ 44n-Sx/$l>7=KHҦ [q+6v^FY)i#9o%tIENDB`./src/eric/GUI/icons/palette/expression.png0000644000175000017500000000161111303422557017565 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxkAwv7OEśiA=y ͓/"7Ax@A̩xM<$AC$ Mvg3͸[jȥ?lf}yw0 yl @a$,>5"dpLl1:jʼn}7|vw`D$@bc),r] {nx-%TJ{'(^ χjkjBǹ2;9 Ȃ`q ԛT=o]plP dbN3$ߙjC#;^:ݼ8 DL;5aYp<3Bd&4tIg|?΃xZ1Lx},S@_̈-[̂,|mL'ت_+!ocG9o܂^ }&Gbe&ز^K#x!ˮ <Ls%d!Jw-bq5ydI{̎<۠f#^! (ekrBz1sx7bT*W*awɭ6}b .???EQ j8B'd2_&{^W.XGEpp5V%K1^Gp0 0 jB"baE͆i{$UV*_ye#3EK Tk}A\{6< c8XAoO:as[vGw@҂ ;]58 "6C TQQt@%fKpT:NtH \),{ H "S6k:|<| lekb0Дo7ϙhi/iB M$)~/P^x"*T_.rH([-xiȩ#l$f ,)Lf p"|qoMD.-T3jK``wZTz,C81'B(e6|,zRh`[*bEҰ@qߏVQWt'eٱ?֡9Ċ ³ (f(m'_DξQa3S] NzCK&UNI#řId֋XZ\ãa$#<2PZ5~LDS8C>tjTt64\p(giST<<9e "P*Wƕ_oo!HZjf҈VC]w$F2 9\pr֍l]+,.,ڒHb0'&Aޚ&` 'ysE NܸwvJmߟaB#m|^/d9*=LY 55!%D<tEA^ Ot#T`mu_9@M'D$#Oo0N^Ix4Hlf7R_!eulSZEiu -~-Ph8 0yrNBԉ9bp}԰eh> 0 nO0ý'),2i, @7:gXLQ)yq3C{{;Y%G8'F$AgY jB, 'U$5.D =aJ~c/6fdP- G)Y"/x8Z=MeܞܥFUJO¦CH+4-hYOG:Sq%$5 Xp8~s?T hY>Y[K3* F 7#q~2\`䡡"mht:=KG=%< nzNWgO3i@H7vF7ƶo޼u֍7Eq<j) OʲxBAyt͛7yb\KQPX%,rdW?0sΝDիWّUSYwu]1,U+]ɮ\S6w}!Ŋ݆]+׸ DōDUb2\e\!iVk DJ*3C5?{2 |IOU/pIENDB`./src/eric/GUI/icons/palette/bi_function_u.png0000644000175000017500000000145411303422556020215 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATx엻kTAwfoE@0!DEUA)X؉+A|v*",D-X7Ub`{gΙ9g3\V:t 0% tșT!RP'&bYb*,0ϛZQK)7!;[oBA1.>hNnD$ V]؄o[ Ͼk+'ȘQxP; {9 {3o@ၟqʂ5`<HG= N3` Ntn:[YMO+)w;Q}[}=Xi6@ң x 1+8ξ 4/w^r|hU:!4 y.Wྌݤ&1MՖT ĊaЖ:Qmi[)v\L h0GÅ!s^9VREKx y{r/֎yB{A]=D+{pyEc6s\&1NFٷs P!F_%Wn#Yυ^xe(-ŨC,Z!>zX.Ie쀾de B%@T#,M`j}ԴiO"IENDB`./src/eric/GUI/icons/palette/ray.png0000644000175000017500000000177211303422560016163 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxW]HSQ⃙$iFa胾B%O JH}LKrI:S>o\ΥZkC~ܳ,bXH2@8rw>B,9nTxEb؛Q!m鱕uHG1W^6cAc%*CH^v,J*Dl?Gn7[r?4OPl!;M۴XѪB/s^;.h9""!lgfer(k:H@X!S}+p '| JvrW`<89ۋ87{#'K q͕p5Eφ$>6 /8#1bD^Oi&}ws'`.MFvlAD-u@oОIvlx06_n6۰~׽F]O-z8D!Cev6f ag)@R76Y>Rk8mf,xW0Vj_qFEUg0=mISNkXĢ pOVJTv?jhKXL'"sx]_+X}gbx[}de6rZ܊q $OOK IPywk({"c"T G^{ƾqs8Ƨ͂Η\* [V.HJ-nmb\&0{>Kå9*TJr7 tuY;~DYN3RШB}Cܢ ~"yVYȣmŸĜ-UV՟Ӹ ! CxXIENDB`./src/eric/GUI/icons/palette/ctrl_txtfield.png0000644000175000017500000000151711303422557020242 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxW[HQfF]W1ݗҞ^"F0,C!z饈+E1nH]]5QD)!el;c댻O=?|}/M?ɍ59JUCTNHHN EmySPOHtu0'rN桩 &3#=;r4r޼~NIsu#m\fmCxFޱ_G 즸G\:f9(s췣-NO-ἃlmM (9>ˣKQ$Asp=(*>>J gv꘩cچ$\.Dшl\oy?q9n%>^,Ӊ8=>٪M46Ēkomzs/C4'^s?<3&D; bK'5!%>@_->Ĥ>RӳpLON`fj0A++~oX3KL3ښ_lݖp{12<(*IXQ= IbHWq 4xNPXZz ˨,zxV^[BAX@X/:he)IENDB`./src/eric/GUI/icons/palette/parametricfunction.png0000644000175000017500000000252211303422560021257 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxW[LUnai %bKB R&Zk4Ɨj[Mj/&M41>j b,i%,2' 4:ɗ9ggUU//Me<ߝ"-p'=!`s ~ xD`=>Qg{|ަŦ%w-$R {kF¿ db]G%Pr"!.HkK-n\% n{I,5QܩVL>#0Jb$5K|?Py18-' E46\*8RA[E&?3H.%R/֛fE 2V4vСQ0 4֬dC2baXB:A a mcpؔn!< kF(FԨϢ00Xi8U[dlC j@~PB٘!N\ ^Q5e]Ȝ ߌiUOWrD}Ԇ5e7 c NfJ$Tgk>ΟH=Q_7 BF[[ -ॢrD6p8.*^Le&f5 ŋ_Y;$mWNtg͵MJa 쓉EɲLg4Cetjq^Tf匿3_HIQKL2Pq|R89}<vg8ZM%nv7{(Jx0v|<[1vI5<419LI Ng3Fz~4t /8oy:R"0.ږ1M [58'uGwaC f0gд h{g'cl58<+Q@f+r ߅,c 3`2T.P358ZG[s|oqomNfxڼ]^?'5M۟?9iG/b{C$PR~~k$xanutg=qc~C@Bt\#qE s}śKV  07oQ IENDB`./src/eric/GUI/icons/palette/bi_3Dcube.png0000644000175000017500000000170211303422556017145 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<dIDATxb?@&`A`dd鎅H= W1 zo Ŀ94v A/# 320cb`gdfd/ÛW"˓$6py5Sb?cb\/!V+Qi_;9i7=:d͉h{ Cr .>$@j.[j#˷>IsnxVɥ|(` ӓtgχg,*uK?3(Ny߼qۯ)6W98؀AJhK 6; '7/ylhdcc",o߼dߧ vb`QۍuG.ZLIv@kY M' 0c*7R@7xe`ܜlX|[ $'zxB?B@>gqgPcx9âk`pc@\@t13J&= /I8rt v;8^23czD >z@6-X\E8`=-R pdc[>,iw/#.'- XQrC'}2Yk^?I nvN^dX d$LLDzO_gm:} 2 cm )xo.`rB7T%J_ |fuwN\ܸQh8n1wguo`87)IENDB`./src/eric/GUI/icons/palette/lg_pt.png0000644000175000017500000000107111303422557016473 0ustar yvesyvesPNG  IHDR}\gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATx약/aǿ=\Q 1CYDb0AlK hC7wQw{I4k,YeIENDB`./src/eric/GUI/icons/palette/manage_macros.png0000644000175000017500000000241211303422557020162 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxW]h\Eݻ(idM1bŇ->(MIMiIDĖb(JUThR%/*mSC +IlwLfMݶi/8̝3fΙof49ngq%KjGoJD89S?UnDP;v %XqOfpm+*tSEӨR[E;LHF1Ŋ 9rJIR oz ;AbL4jP-ϩс0VVzJTGLې%aHqL̀]1߹x߮˅,-ֽO" oBVlݢ} K_{9PR]@7b%ct. Ѳ/ĘL[X^y?>9d1] Z6l803%V u/to^n U bQ&"/i>"܈9x 񶎭 F ol9ǚhB #ǟ mJW#3O0\zSY,TF[ǶG]S 3O_j:S nS85JLӖ3'Q!=1raeev^%*|&)f[榳DəΩPMm' :tuAg p酹m OFR8ߴZe3IoD,--E<ӀXLr 8;3UOhXu /KPT$=ϖЊO~,376T:1?&nd4 O=6%6ň<u{a&F喜Gp' AM\ tםfY<0- f|fO+Rr~qe"R-ms6X#eՀwg+Ov%LB븐dO_G.1 pv1ƤD%\(dX}/IN/pH^sdʮDu1O3uj?{!C _V{^~B;IuU6; JJdNS|2Hnq}@;eN"VuވHnDڭ|r^ yȈIENDB`./src/eric/GUI/icons/palette/copy.png0000644000175000017500000000154311303422557016344 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxW=hTA˽g"9"D, HQ;1QH1DB ;"GTb&&^^[wfþ}.+ٝofg6A)%Rg;V1PD>Ԑc'q01u00 F#GzlE 21zP K= ߿ƙ2xDL7coKz[iS eh"XDK b'Tp}"ߦ&8tHȰ& wGB%'xsdg1y}>\$gƉC:Hd`G&Tõ_FTs AAOC 7_20`"ոɰUܿkHLj/ӳU..Vzegg8tlAj-m -\ )ȄZT9Ygƨs+I5cc: Fqre \zJ_[G J'n'${ATb e_|XZIENDB`./src/eric/GUI/icons/palette/ctrl_resize.png0000644000175000017500000000051011303422557017710 0ustar yvesyvesPNG  IHDRtEXtSoftwareAdobe ImageReadyqe<IDATx,MN0.]{",Yz#gȮ ؀q~hkQ4h4dGRB~ipj‡邼͜g8QͲm!) V63-y@m?\,4= W2W>u. $@YAK1JQ :aXS,߉H$r1iWү}*Vqۍ7[:݀LA߇'/xp (@Yc&ς @""ρc]4qÞ ]dGeQ!<V7.@݆JbABb|FF3m7}@h2 dz½9ɵ<ԔznDIv'ƀb #wH^`+DL}ߖ~7#NWZIENDB`./src/eric/GUI/icons/palette/angle0.gif0000644000175000017500000000073311303422556016520 0ustar yvesyvesGIF89a""ޜfڛj[kSmYdΎv\-'sR8Z>Q123FF!zB!,"" dihlE\++@Ǧ"ÌI tJnCuOZ('bؠxA4bbAZaW9p49w`Kl1n+3@UPZJkQt. 9:VU SᘈSp4/۠?nPRbټYC'5Iޝqqn@`8F@c16ٴĔ %`/v|펍s+vEY \N7 @Hp`1'|mEêEӆEeBBUpІTZaz}c HQE__^Sݠ~zIy95?[";?~µgtPVN_Q[_(&+kMh9p^|hPpط?p[,߽s8V"b9:/6CZiCF%ބcuP>siRtDE_2qE!qSMҴySҹnTKjI;r.@(>)A~󄌗x){18FDFoo٘ BŐ&Ng~H s```xYIHf32q4kb'4Z3!{,5)|T_AVqܣFeʴ1 X~awu2-`[q}ںj_oo1o͌<@,#*8p IFĘ|)W_>tP|\tww&˭*$pRy Zg(+Gkhdy6]z;=b*+㭃8]Y^UufD$ɪE L ػlܩRi,76~PPȕ%)0_Qɽ7^ȆvnJړK}')qWa3/O:05a9L.yYm`ȐpurQpjuŀ[ZVd\# ܌ݨzRgtwUи[n)VdA\44/r" {!wHf)`+,7؇GE3*ZhXNqR.CVZR6O$Bnvj`L'JᔰbA͜ޢgnIaQ阢uZd&B'"vr`f + GLG[z~J2GgB($BtgyiEGNe<г YO ^cB>k?oəlIENDB`./src/eric/GUI/icons/palette/ctrl_button.png0000644000175000017500000000136711303422557017735 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxKSaǿ5:ͮR"қ.*ւ2&ӛrBŒYm1GF]E0yWx 9/<{s}s&躎Z5S),/M1tqM\B^Zn^( }ȉn0]GyjfbxG;Z նjA@,MG|]2жg@A0TMhV *#Il (J1W,6y7IJyyo Iܸ~Bw1x*19W**_Xb|^~?d&nl $,T* Lk/Ggf@ci"$P͇֭ٹ8MLba?VWO@?TđK6.^;a.H3@zpݏ}u.jnBcC=.|Ŋؿ,b@Unc@;6Μlq^[$؆Ʀg`H,Uc> MNbq?taG^8O1mq+={J6ۑчDn٪ͿS)~ 0SfxIENDB`./src/eric/GUI/icons/palette/color5.png0000644000175000017500000000151011303422557016567 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxW=hA&@NEK$ ؘFD+RDHceNEҜ?`N4rۛ nw&ξ{7AaZC}CMȠ,;203Ff/,$b5|2gA>m Д-R@fĉh>.@| xt x!5~ 0p[u$/M`Qhsc(OL ?> fKK;@|q@gδ(bBoZ-'@}[QM}Sbd% ĈJS$3Wi^DGQ KѠW]Ⱦ::?Dd\^aHmG x+n.zN:iq:lIVK*LaIENDB`./src/eric/GUI/icons/palette/bi_syma.png0000644000175000017500000000216111303422556017011 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxW{LSW?L ј-2QL!1шL0WHT*"-}7&Bz_ڞ=8 9\2q_0B\\P27E/V%BiSrppjAz  0 Bl菱cE$F dhD9[ 2,6:Dہ@ƢCmnשY=<zо{ ag{, ˏpo\jkZت@6<'#?*E 2uV7~ns{z>P)8lڼCޫ=~kKuxAj&ـa;=g$Qyݟl_[5Wk7\̍@!8=ZPVu$/ne2cOjs3]br'L#V~<5NV./.i&z#t`;RP!WH?eeOav> HIC\ޮ*+hT1S 0!4Y8f,ύ]t[ooS;TBkN$OS(Ru1w'ȷr&y0k.e,VRy|CkrH7 {5UvSϝʖK{Gl:᫤l ,iC w.[q齎_ׁnki3E7ONn&ˤݾ?QsS1Wnl~lv-&MŖ2gz6+րy)iA='8Ey'3GڿՉuYi2l'h p*"& V.}sbm\û&K=.%^S8bg y}]W9A @6p#&+{.Y/`4qNNE- $v5"M\C=K`ÑoN=bmFPO)> =)w712qHP) `rQQH"!"}\Gl$ 9td1BN:=Jw1].ANKކ.>rGu. 7h2FPbh#@0$mu/^#dVIENDB`./src/eric/GUI/icons/palette/Pclose.gif0000644000175000017500000000053011303422556016572 0ustar yvesyvesGIF89a ᜜kkkyyywww{{|fff˷{{{Ãxxx~~nnonnn~~~ؙϗ׈͊݇||}!, u@pH, Bi04 $D@d!<0SX !Vn/* ,D8 U9$D5# 0-%+'&D4(`3.E1)6F"A;./src/eric/GUI/icons/palette/properties_panel.png0000644000175000017500000000207611303422560020741 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxWoEݵq@-UBPE U JU$zꡉ8\9pUJ("RԤR>-jbljcbx[jcZ"DGzڕgvޛ{rN6v^'pg(@NSWNõB`*h" ԏGPCն'\pրaVg  pB.go+mb3ۼ\S'`u.$?ܭz|PZqay4͠G?fkޭPK>z6+E|;w;}ӟr&L8>>>W+pBm[a\KlWW+#0vprrGF`bbb)#$()@p|?=򀎾_Y}53/?ܩ0uy]ۿH\lj4l;L`*VQ%ɘ;vl:gڳs$!ۇSKl{;!9DU (e +o8yydphk|!Ҧ@Wc-iTDǕ)a7=v)gzq5^ =B,g-eJ=HcJbA%-lE #ĸhQv͢Yno!{;fҳ2_j0+b.0 (UUĐ02m` h[)=(ymq)n[@~(1HyILCT8[LLbqn #A+R`nN10_+/FW73927Su#j3Ƭ\@BϭHgp5w!~?cڋqs@a3\ h9;5j~gU4$᳠q>T/0 q߈{rS{ 0 B'횰IENDB`./src/eric/GUI/icons/palette/bi_3Dcoords.png0000644000175000017500000000132211303422556017516 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<tIDATxWO@CTL ba#BX#:ђ~UAˆޙ8„CH'}~w](c+786WU}R A~,̓ӣEEXD`kHR, Iet\ pY3m$bcHL!QpXSrh p';U$ƕ%ƝSZq1X9QR&Nw$?tiA*;U* m֌ ݭY,D`zB!2Q]Tec|l|'YYYz `!ǀǖ !'繧?y')pT$2 XH:OI¦ @32_Ę)o֌쏽 RR[&qwB j@Jp@>J&!\Zh~(wFhL9;T?TF,+BcR׎@6D}AK£V캤V1k/r-/I|CXAY M+́wjt+a)B&p'zIENDB`./src/eric/GUI/icons/palette/exporteps.png0000644000175000017500000000265311303422557017426 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<=IDATxW]h\E>gwOMZ%چB$V4P}0jS-(%VM} Ƈ( R-D-Ec4I6fw{k? ggΜo9#u~a_:: {/xj  ޢwo0T;|_ڐ, 3WGA'!R />TEKCdGB+`baƞcw{S`QD)T2@L;gFШGDom~葇xXXC,LN"ڊ`%AL&Ţ[RI/zgk*n*"ŲZ ?f:y@Cy,P9J\fULNENDD1#_;E  9"Y|ChO'ž{.0 _yIENDB`./src/eric/GUI/icons/palette/bi_3Dtetra.png0000644000175000017500000000237311303422556017353 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxb?@&`A022B47t`aOcQKn 4œμZOS(Jㄘ40H__?~lLl/ ]z񛎣g }vK6v'JJ@U:^{B]as ߿~hz9+mYf❬jU>oniN=Ox/޾f,)JGt)Y߽]RO%JO '/;*'<P3۷FJk# :.բk7߸+PT023z1h 2) @ :aޙ?}SࠫuX) fbbvh1Ȫ2 _m_$|n\vt)A^\l? 9' l )Lz7?gւhɬ/^L;{iןC-t v]| X oW?.:ǏKuZ0,['(Hв@*Ain7M޾sV_AYfwY@ ŠBr2H7+n>z|2$%œm6o`o#avcʩ5XeAu"mu|ss;orjChSw2Q̵ݗ?K&Y]jijg/ pU-{ֳ _F?|! Zϳ1's[(Iss̵+O~E;/=TtC349@fg厶vQ fg3۷;ߝXrJ+P?i aF;1rbRR"O\*)+SlQ"fbR=5ELPѴIk;&Q']kIENDB`./src/eric/GUI/icons/palette/ctrl_edit.png0000644000175000017500000000141711303422557017343 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxkAgvFRmiQTjiI "޼(Ac=JҤN o6—y{//\Q?{=ns&vh69EYt r_g?`3fO l6X,֏dgv(j2La ųm gNv .F.Jvપ927j K_s4, }#N)rQ̤ 5EX,X>gf ֑@Vr9,<" v@A Pb0=qA{F E*+~{ Ɉ~/:t:"N+G"ż^> RM,.^^nWR)L&E"hTA:u]h&j᧋@>Fg9)Y8Gr}/v#hur:.kLAT*]"r@rPdL!Z) Vd!R +DR$t3Rқfi~߶ R\4K_4ꦴm.)2K}yS+wQ[8Ak[8.M,o`wj1IENDB`./src/eric/GUI/icons/palette/circle3.png0000644000175000017500000000421211303422557016712 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxW ~}O0^,,XPENQ XUZX,r)*c*HF@.B$.jJ<{dEV>ڹvvggvΞNs%|UtϻoBQu6|͍? l D3eKYAC.BNM_xtKO",PyFޠáJ7  O_jׂEUα1 LE&8,BSw= J@Pܜu)E.) FN<ՇhLARA:3Q4~d/5|UED4P/qUقH7rp4 bzVk U =cn@Сb*,׳@oGQ5ГG_ܷQ1O >f SP(~1It 3aJe`,YeU<$7ON9A3: "AV r~k܆)Ӎq ig̠kG5u8*koX\\R_;=)I%]_η@ @DcD )T<*lw^:.tY[I4O}mW(Os3XKGXDJHYA"BTRдku۝ʡJlߛΟ̼F1[a(ߊnK`^KFo=q{:..*b`)Q3 9}ٺMK,\% H! RSX} )?O1OLΌ]gsr4<9|]`ҚQ JN%""H!Nh|es,MY[Gt*StAJ2dqUE&2T?wkXwwxk{EիKx'NN@t\&@`nRcc {OӍ$w>R:=H/E3JeqaMVSKĻS^ AmI[7ht L+8c-cmi mN9g7p[ /h IENDB`./src/eric/GUI/icons/palette/js_ln.png0000644000175000017500000000074211303422557016477 0ustar yvesyvesPNG  IHDRw=tEXtSoftwareAdobe ImageReadyqe<IDATx얽JP(  *^7꽸y:EǂnBŊmρcCL HƘ0WX^C?nq9@noϋ,ʼn#,E3bA3i7mZ(<(U?Ch~HhaPR-$BWJ@2!c-"l#&s;{83_/y|ܫ.la& NH,4GjwcO't;N)ߕ2v< "4UѹwC^8``,90;MJۃ-hDH'[Xě`1^7PC\-ͱ]{u.W@!+j_X@U& Qsν-tǸm"hK>}dpCoxaz% [FEV@ */@ KLC]s0]GnDBngy 8d t xC KZy1 ڻ(zi̅)`64eɀ%75{!S[3[>@mEO6eZ"Q_8"]5܆iӌPkD+PMR>c$fKZlD04Ig„ygeKk]1?n'T##wqBw$BFX_0񫌬Nm g܁p}*#LoHx @>~ Z w/ ]H$ $@WǦPv-j^膜eNrw^(F$t{I%C1뾔P^@W]>-41+`P"b@IENDB`./src/eric/GUI/icons/palette/move.png0000644000175000017500000000154211303422557016337 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxWkAݘT[ZeRҚ%KO9OH#GAB@Ń ɡ9"{6b%9ԅ}fގ=%Gffq\1>m$H% a`>T1 Zac@B~(c+++Ddj$TrGr<;;{ѥIPr,ZLӼT*oYvHN-,,z*q'dɭdL/Q+Ye磤( SU]^^Uh6I8)!qrrҁvv!mtġs! qs _D"'NjzvDY.(f{{{, JH4eY}|ۗJ֖Q,Ht=H;F֐q8&"4\.51RBkZּ.KR߆@G~D{k6kkk< ezẮsXZ}yPSLFI_Dn B!Nl`rh?a' K{Ȋ;N t*#.oBx܊Q@ A#e8.gрܲ,@ $0B!ᡘ|UX/V~M1%tK sCxs*sHphK)dZLU Kj{>Ls8B]RƤ>}i‰G8N$i1sf {$6>eRIENDB`./src/eric/GUI/icons/palette/plines.png0000644000175000017500000000224111303422560016652 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<3IDATxW[hW>s%M*XCتiKK[BDA,jP yKV56DI+BDڤڮً&qfٸ;;s9g32]w%ٌ3{fvgB9h '@:ke ue9mQs ÆQP,_vuSāF'ҙհ~ſfu, j8-O< ܮ` + P<mV$:Uf) abmh*?__ew|Y(OF'._k(FBZ邧̠bXt|c %i¹5gaCCt=G7چBtR0YjC˥1Wk HF.XR=8{ =x7&{$hnS'ld}u`s'<ÅϮ7&ҠyOgpvGÇ!x~5 b3967Cpj=T2[0*Ivl T{d`]$[Ov63؟}?=[L|_DL{<[lNlٶֹFH:Z#]̡p*uK"<+Ԏުklw5|DžPTJ8CHzpdž s. 3Ʒ7Ό.}`DL|An\}!$Q^Xj j=a۫!(+Th]$zstDT5)PIOW|?OTRRh40BaX-1XhLރͱSQ0 ls2*X]GE. ?n<)yD@PEwxgDDx\:bCUW$)^QX"e !ii l$<5- LVM $L% ̻2 kw_0+􂘼IENDB`./src/eric/GUI/icons/palette/chaineOFF.png0000644000175000017500000000071311303422557017152 0ustar yvesyvesPNG  IHDR;/tEXtSoftwareAdobe ImageReadyqe<mIDATx씯Aƿa Av*& 6@_`1F`1YMYwNmtas#@ȿz=rfɶmNdBu>].TUR)nq Q9|yGRFGj|~pf0(C\p^1L~)C* NJD"n\xWJ"9xoz9fcf`eE9,K8 K8Ƒ\ErT/ -edi"E+m k&6+{ܻߌ?KOEwTDxڻGtWśpųo~2 R(w"lxR1yɒdhx ['qqqF`@p c=sr)HQD%MA4 a_4-)$1 ѐ3_FBrw Uh%ɦWlހް Y(S)rO)_¢G{Vc# ؉!zkŠ qrʹqkW ԟ M8wF +0d!xYvL14ݕs3̝%EԯP3vؾsi6( }+ &-*L7`[v[’gaf-k5o[bJiCF 2$kڨ$ Jfع0z۾wG.T{Z~Q`ꍈ ~i]$nPW8_X\s>]* \c8c5U:AS{v6#t̨$ud2]e%GZ8Dk<^A ї_8Xx| \k&_7 pȹjDEe8w2Uݷ~= &3 hH:mP /NɎ!ba 8jzebLi)9qJӒ)R!O-)1$H_Y_ɓkV_[OGGF)v-'\e$_҈ ]oH'f'{2e~/1^ :PdOIENDB`./src/eric/GUI/icons/palette/blank.png0000644000175000017500000000017611303422557016462 0ustar yvesyvesPNG  IHDRĉgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxb?@ dIENDB`./src/eric/GUI/icons/palette/point.png0000644000175000017500000000070211303422560016511 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<TIDATxb?@&uF0`!G#P ? ; 9[f˰s121mcϺ_ν{@%u#)r6NG<~@ &$ ɎA_G ,v5]1ʀQ@\\LaafcR &Rڠ@qS" 5&`%8X|Al5I5Zw;S̯@h?P:Բ 9" `K߇YĿ8 {ؐZlHjH B1m "ZŌQ:`ԓ5qIENDB`./src/eric/GUI/icons/palette/null.gif0000644000175000017500000000046311303422557016325 0ustar yvesyvesGIF89a""!,""` dihlp,tmQ|pH,rl:tJZvzxL.˓znۄ|N닼~   !;./src/eric/GUI/icons/palette/new.png0000644000175000017500000000217111303422557016161 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe< IDATxWME}8YX!J@␰H r'~'=q\8H"@$Dƛugex6iӴg^Wի18f]13,T\1٨<`Ԕ8~d7O٠K1Ifw^#T$m+D-&qwU0A bXwcHŁ<(z-K{BC&Pa:W!7 W?X P_Dq7-ϮǞ|U+#)t5p(1êA5J?ӄzx=P[2_y[<î5rh´=O;YJ3i)Bۃy ؾw:\ skypN2٥BAʘ83ۄWNVC0LNB*:U2uf"J'W6uɠdJS*OCp= ko/*ɋ<ܤ]pol!#a8ř7?zD_ݯ4 nx>+Y$b=(#6i=K(byX@GxR+ Yjyo? +b+ IENDB`./src/eric/GUI/icons/palette/bi_biss.png0000644000175000017500000000246511303422556017007 0ustar yvesyvesPNG  IHDR szzgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxWkU3nnDIM Mc*(>])(AED|yЗ>X[h AcnMml6;3;)$p{ܹ9spe㸝1OoQqP~ Gh\ ]@M09F!n|3 mi}W.Ο>Xg~[0:lZ/k u* fAO`I㹏#}ɾV8GeQ8)ãfMBA}ssW㨶-~w-+BFCSb'`KCohlQDy"7KWcZR#< Pk`dV?G(&+~y"u|Ɓ}5j VRJCN==TCJ%TNaWn?7-ωmvrv ʣ2ioЃwĐx,Ac(h5#g`)RSaP.oX>~I7NϮ s( \6w";Yy!@`ė/__SF,+:[-rfsp ښh= Al3=A/,RW{=T$t5oߐMuyρ #2A74S`бuW*:]@ A¾N~q@Q%!F3kJnFX# {6RMf^/JczUחu `? =~4dҮԂ>ào|aDN*NL8nt"+ Q͗g8qʱ R]Aم `+j E#275fS?t })\`,-t0 U 43k7hbZwi;"mm(R3)4qi'AScnk{(zo%J;J0XHAKS/sA@p!(X-U@`>5 WQ!_@ӈRjБ`ñǒKiiַrA l.J.OK/Rփyd5l4;Q (uY :1fH\ZѧnSpcVC1ѪnIENDB`./src/eric/GUI/icons/palette/js_abs.png0000644000175000017500000000103711303422557016631 0ustar yvesyvesPNG  IHDRw=tEXtSoftwareAdobe ImageReadyqe<IDATxK+a\J B/ oBNllH++sޙq:eq~3\33R*UITj0bC[z {#H`\u,gҴ}&̬C[K@wQ,<w:dIl72HtA#q&.w0 O3cMlk`ʔ0V vRe crl37|t1^p,+PrsX j ;UXdmʰG,Ϯ$[)m͜,t. hX{bv;,yddqfZa@&rɽ~ҧB*M* ma/ Ak_/v| 0'? IENDB`./src/eric/GUI/icons/palette/bi_circ.png0000644000175000017500000000311311303422556016756 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxWkLTGreySY\"""ZҦHbؔ6&jjGbJM1c$5j# lAU{sof˲OefΝs77KA4 A }i|2ӋCMfRaW'¶[R# %qb͍'*;- ;xF~E޼jᢈDQ*Ш#mNsɱ+C׭JeXi7{z~9(㾿=IB%s) x˱cH h P׎ʒ&F޾ Ig-r~Aх 0Aʯk:/C1g@VZhkcҪ"܉8q /MͩSΎyNS-Dc˘* \] 3gbn@AɘV%Lw=$69e63bf2P6[>- ~rv}NAN4T"rAL 2蓀p3v{%l޾YWʹ΃qз\,pKl2Μ!9[zf:ѠUcXfSgGJ>jH# 9(xg2P %d`kB vJiOmG5}dY>sU) U4ZN),՘R]Q@ivb.eær6v\̼[z]:u:;!{*g\2͖VKnÅp5pKR'%kⳅj6V7EѼqW|edGqz]CUN?kIƆ`Bw:@AuW&.FȌ+x>6'5d"U5h|ZB#~ŭIMI }C''M - :&%d&1z=z()s;{Tܪ A/$xD{neƚ aa,`}Nk'v__GvC9ag,RgR#vVd3iɧZt磍P~e r }׽ ; (L^HB^p8]9A|C7nu%D[?#"Cbp'iO Y.MwzX|)gp ې"iPiski krIENDB`./src/eric/GUI/icons/palette/imcenter.png0000644000175000017500000000105611303422557017177 0ustar yvesyvesPNG  IHDR"":G gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxJ@[ƀQ* P=xՓW_û|A} /TTIw8kZ9lC /3;$, d0$ ̚HI*Ҁҽ6N_XpUL:`ѹd4ɸ<='00H1n<40dY 0x5(p; yhsҼݍ|,ެ+3&,+ۡC{ps ӳg7jH oA0rl&i _c, 2-N7Eu *ȣ#/јg # }Ăhx{e] ̄r_B6F)H 'k7?ߟԾ,BSNzIz m:e%'}THlf_Cظ7kB#7 7zgoa`ҭ8o!IENDB`./src/eric/GUI/icons/palette/lg_pl.png0000644000175000017500000000025711303422557016470 0ustar yvesyvesPNG  IHDR}\tEXtSoftwareAdobe ImageReadyqe<QIDATxb?- H&F T1H4Nax0y4F- 1WÊZE5ڀ[`'&IENDB`./src/eric/GUI/icons/palette/angle.png0000644000175000017500000000325011303422556016454 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<:IDATxڴWkLW3;f嵊B(* D(5icQ6iMMU6!RX .c_txbnr2w{Ϲ9;g005 2ƍv. @(8zBm~$\| => ǿy@eHO )(+Q͔=6,t]3b".-JR[1 [σrhxLq%a抑:D`^6~ ŋY NB“%Ajz0S{`]mU, <) S:JmDXڛAO|9RN,{Q}P؇>`/h|펼FP-jt]KJ s+yY;?嫿U]3ȏ%BA n8|Ⱥ9|_ QT9u'.yz[tt9/V^z1xS_I˧E$ZKBؐoPD*b*2_Ta4 ]Ճ[ikbtd| fz]nIyy"]xYT+h^0sI쿸x-ѡ8ra 6`evlʖ5geJb }=.]tG t:p͏UX>mRd=%]׾ɪ*\ 3_&66?j@̫ftYND0#z kЪ JG'p.L~}Ҋ~* QT!ֲ}#k"y'q,:qiL9.?2K.IN?d:cqIt!DG)!@إ.m\:mr18PP$t$# &'`2iq0Ma#k9 xVLL#V 4 = ,3yUQYof&ecuE4M)i ȝiH5<6{Q卜M|q{`DN@/97N%H]ee AUT݈;5n3wxײ#rXğ1+;&qP:=ù4y2B cn䀴TcA*@:<<`c iLzIENDB`./src/eric/GUI/icons/palette/ctrl_slider.png0000644000175000017500000000076111303422557017701 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxb?@&uFBg_qN(sCF\*9_|I1I '; :-[3?x Y1XoP;?0ڙ|C }m 9(/*. ;p:o ogca;0Y;j3"R j&^3cdaH.(?{B #V޽~pMWQdy32:777A2U[ϞwXu'i$NY$D r]`oc m]y)-HQ:` [XLi+IENDB`./src/eric/GUI/icons/palette/imtile.png0000644000175000017500000000112211303422557016646 0ustar yvesyvesPNG  IHDR"":G gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxXAJ@}vZ"jED춈N Gz7ԝP "vU&?TJV$ȃ43OyH 5Ω[12E0zb@ܟ2#"W_Qmvj)! +ni;c9Z R2S&hcA Ǖ.K_ŞG[G\6Z`Phc zb A r\ kaV'PռK٬_brh;-tl-2Jc ֈD>"DwOޮaL{egI/j]/>l칟NHNFu ;"^#>U<_f]3YH/$f׌I\&qO]q=w;o0<=5yb*Aq۬<oU5G73g(6nfu HcD\NVF%L?K‡b;UIENDB`./src/eric/GUI/icons/palette/history_panel.png0000644000175000017500000000236611303422557020256 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxWkke~fvfv Msi$MXB hK*TA~ (ID"`I%M$M4^\sB kF ç{?s/uͭ ߇;KT:$Fo @VÍW'dYJSdn+5<DGh <0/^2 R :u'~=v:w}dm{hz"{?]-<&X "@ 1M`_]JM.L*'}@u;HQ.Tu IUd8h|uaϙ|"$̗N?El*Mf /P6${G< m>_c8{Y&g.clOC]mIY> +NhXAW+ % 7PM(8#ip @?9 +x`ly[s(J#j\3If #t}3;g|Z@46},BzFSm]˹,n~ǚnhD :9G_t5]ҀxDJJ .5^I+V?F)!IENDB`./src/eric/GUI/icons/palette/boundedpoint.png0000644000175000017500000000205411303422557020062 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxWkhWf7IM b"**[A@~(PEl_i M1$1_%tƘ}&6>fn;$X4>;;K,)"g"0E ]8O:LPD!F~-\mʐq~9 0B_=]gx(/eC‰TM+vhもO!NBO yHvΉLͷNvm!P9jUOʐ$Z#Q8JL1J.r˅z+2.Cy݅D,#oNV H =deC"KiQv @sCNXq$3A%)-`ƴ<\2&M, 7CAgPDkh?cr*9Z۵QN̔&L&u*>>Q6 ~eD"1>_W9t0P,zQ̨ߔf^ce~ڋENɼ qt}-WLk𻺶-l.عO#9aZhZ{e邧%pG˚ ǡo,ڱ57: ܫNtqW_AKمAWƢDø@YfԶ(aa{mYQEƟAou\CU .EsKc #me< ,Z|wTӪ#TsbTAWcŦnV%h{6; ՆBx~T{?Ri.D]Z7:_8@dcw?V<ސ)q`@,@X JbeT,GE4tӺ?L#g= &c^PxIENDB`./src/eric/GUI/icons/palette/area.png0000644000175000017500000000251111303422556016275 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxWKlE}p|s5} ֯7%G -z; O֪GKOFЭn]V@m MlY{bnl|tQ\vv8X?<6:# Ol{ ^= wj}JE/ytbB J7&wŘAа+`rW#+ 4aWw& rJmd}iPJ`I-z((`Bbi2ױh_эJt} c7ݶc&{7rqx厝ۦs#˦V U;o*'(e <0Da 9ŀG VJ,+X'KK+-XW:!iPą׎xZHZk(T)( Ǐ<"fC 2]VJ K1 ۱JNg3 PAr`誎[ vKIr bőx6)p @zqxtWab`yδB"w2B pBf>rCfԪmnX+X':ж!=h? g)Q !1} (Q`o"PAri㄄%`-{|0ƕ |!6[BpEHO<@ ; tG"A A)Dh>*P9)zDYdkcb+@HPPupi3r/B# "ʟ8KBjjCBdP 6Ѣ=h:`rT-`Ȓg,y5ހ1,G@~׾C ^?eCeEet8y^|~f\oȁ 0yI2R1l$>3oi$E^("$1]hԢ@Z;Kq2S ķx)E?hj@EhLw@H@X,3@|"| ;bܕl r@~  ę@ #BlBdNY4P~E ?rhT`A\mBiiU އCu V!U3(>ӼU,lRJ 16@tALP9$T055(njbaZԀ#H H*H)ThvSɰ5"BIENDB`./src/eric/GUI/icons/palette/acolor4.png0000644000175000017500000000101311303422556016724 0ustar yvesyvesPNG  IHDR"":G gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxM0I@v``&@u3b 4nS;3LdK/I#/9`F4ؓ@H ]!<8dR)RDA`x|FX@+!H8p@ tA2o2 O$`J+@$G'd@"wRd@m_If $'q]=9qC 4ƈ:%~ Ie~#R IXs{M6m.Mbiڠ5ڢHQA">A"(oŶ j ISIͦd8g-el/s337|ci6yV:ܷkUH+ނ@#}'ފxl[,FhJJ1o429'?~YPGs\-&Bd,!SQL^bB͒& 7cdC*?9=0k_-&9L1a|w(/e{a7o㾱§Wv}\i).m %Lͬ;G7W>2 t Ѱfа-r@Vy_nČZIh~%ԆGž D7X'Ν Ċr IҢsj`0$ϽDOMπqG{oHj34OgE%b*1;+ڛm|%-^֨`[dlmDTZ-!g6uW9cF^a+(W*N_XO p[x{"MʂE`>f&cyODI!sXT|LL{KeI۬0cRKjս~8I DC`PO;%4 jSRy*e@I ԱUu粺$6E}A {"*бЭzrdg;"IpL$ oՁNL# o!PXTEny1P7 gWz CE2:8;h?;&;Tڽ|!ֵY6UWJ4 ,}AYX:f' > DR՝9Tuego|t.tRvh6w-tU^XC{ԧ"SE Y($ u!UG1BO (`KO epC'L,/r1crBpn$.iHt !%>5pX<硄%M_ [ p!4TEJ-/2[BTq7im3pˬ+G48YM W|'XM)C~嵩Hp2`l߹>IENDB`./src/eric/GUI/icons/palette/js_acos.png0000644000175000017500000000075711303422557017021 0ustar yvesyvesPNG  IHDRw=tEXtSoftwareAdobe ImageReadyqe<IDATx=(Eas=K  @޳#YdK 32YeI/qsN=S{<R   x^h|O _߳b헊c |XrXG28VAa@- 154Cqtۘ Fя MrLCg!OWN10#C}8Jiw!p L+. MqVk'gաz"6en% `Oz[`#ʱ3wIyuhl%tlט^xh`F65ت;D j|[cj(uYxYǴ(OZm,?HGt8둮);r3;DdX:Eߢo[nIENDB`./src/eric/GUI/icons/jswindow/0000755000175000017500000000000011342517744015075 5ustar yvesyves./src/eric/GUI/icons/jswindow/.cvsignore0000644000175000017500000000001211340670415017057 0ustar yvesyves.DS_Store ./src/eric/GUI/icons/jswindow/fileon.png0000644000175000017500000000155011341703325017047 0ustar yvesyvesPNG  IHDR*qotEXtSoftwareAdobe ImageReadyqe< IDATxOQƿδ6`ZB@P7ntCNWNBP]7$Bb ֶyx<ʴЎP_wM93)*s'e;㉇h&!c,K&g jɋePBg -y\hU6+OM/8xqR+Ke uƵ$aue ;K#Woj*PEP7HQdX[[C\Etv%VC :ϧagOC*9ͬd逮}h+oD}6ZggO T%mS,"6|eRGn{ bD"(VY8sQjxQcMe>*mJG=[D<72= fGs9 ,B[b%6!}&>oY*h$U u;tGG^;̨-lg>gsug Pj&N/'/{ȍb!Oݾ׫ǣݗjPfJ[햌)cd6JRCBH&pզ8k)40;VuGY\|[Nĩ<ɤ327 a~1 UU5Q4Gq럭Z1c H.f*㩯+XT>sl ??jϚ " Vpc*U>G-.}/3i@឴.ptW[R9Fr"R+# |hȨh#rQ$h$@}EX"] B#h$&qU3ϱ;[@bB _X^ZPLu!M V4!YLB. 'ПR58cDG@UuW.czjqv!4TӦ\.ƓUw)(aaVt$Ϥ翼kq,#,F]iߛ0j7R'ڐ)BEʎTKX9ٙ4:>4,HS _>Bj.N;XgbVDb-'ݦliGBLD/E1G[05ԛޮetb&RpCQ&5gjNQEM1?.C }uW°9LnLiQ Aae jcZ0?/] >%e1iPBCLb*,R M-(};.4҈C}~^ c]WFƤ߃ K-$]á0s! -"Ib@Mn/kxw\;51t;BXS,\OÕ jZ& ;E3L.-X$FԡMt۰ v }~+unZ 0}5#TWݑ: \ 5P[y,>;'TO{fn9yO]ƋgN@o~Q~ ˔DT" WЕ?؎397}fNN'Z?=[`6Os^YAP`±Fa4tt01ل0sE-NK=N?9~랤 p9f䱐.!GP4C+)wvc &V]&_ɩ9/VMgo %L9ߎצ,xJfgA 5` nfrΤop{Y@N7WϠKO\+87<1%tZklsl9dRۺ)aƩ}I+OjV6ƶ p#η3-&O=paIENDB`./src/eric/GUI/icons/jswindow/error.png0000644000175000017500000000667411303422537016741 0ustar yvesyvesPNG  IHDRa pHYs  d_ OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڔ]hu?sNg/L d8ݮEc. X1T""(BA]y'zaʙ]LzQw9;ykFh"}2avv'b _'iq %as[ vȉ-O1S%mH]/--a/Rb f؈+|4Z'''-`$@Y0[ޏul6 o^)0̇J%q%!˧bJzgJY.#fGbYSF2-J;ڳB666[?hp&z(;߇~?}@8<<$+h Tju8??Cm[ m;00 Dý8׍yYXϰ5(3-.w{dLqߛ:x{;9V+ֲFps,//cM>hz+se.,F (*z (r }H"a3@ Eh4իas3 &ɖ^PY.c/AS_μ04[7ۼKf!`:!D} [~HsMs s1;h[\ZT ?7’@>Ղ=ILNhr>49h4r L&Q7 BZ['NM$DՉ(:gv>\cQٵmYk3dVz&ͪ]L[Cnl6 ae7lVKQ.@ƗǗw9h/&8ZSg5ri ߆Jp<2sT*eՖ< #k.<ϲo@sHLqHS\G̊eB‰Xl8X,c+SEc{ hfV(]= )r/hmz^; J]v}GwH{S}]b'μ4NԪ@}^7,B"c-KEhe 0aC~IENDB`./src/eric/GUI/icons/jswindow/help.png0000644000175000017500000000305211303422537016523 0ustar yvesyvesPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxWoU^^[i --mi)jC(&FR7ƍ{&L Y&n D#h""DŴ׾7;9wǪ ={k$ILl~l&Sױ˄eY4L 'cæmzێ-4,߷6{Z/>\ӏϾse*B'PJA=cLj"<G4d⭘!QX(TA 01= ˴F1#TLύi)Q(ᡁKQS6`ƶ @j*)nhw!#x+pBb+BF=xM`Zն ,vXDgG2k9 R~+zgw` 0#?=8_(B@MtKX9twuߕ\###: ] 5tBZZT&ÁuGGGq( _%&$B Hb2 |T36@R*.\؂/kKemB@BT [E{cʬ ݽKD}HwWp uKfjxqf#YӔ\c̛#㼵 OWpD`#wjL$[FObB84:`嫩[XQoЕr`UqZ[P3rY13yePr @&dIp%F]Z(lv] Zm"ҞRH F$zF:z'8sZP:wȄbzf&cqM}CK Iߣ!ޤ*=`zGSD}qUB90Z)x".7/m<>}*F !M|v58/Dt҉r-49J)t7dI;È80!]<-A{t}j:\i,J|S } mLv44<tL1aB7|=:sOWWUp0(erl(.?Y$ ;W!39zKt$?.UwWs}BV>Rּ3> igS#ʮ$=2Ћqճ K_tw 懟!^7N~vi: (8oJ֎v ف}8u o|{׋|eP69]Tt?y+ރGH?w?E8~g/J[p=IMXiD 2t',G-IENDB`./src/eric/GUI/icons/jswindow/format.png0000644000175000017500000000246611303422537017073 0ustar yvesyvesPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxW[LUfBhE$Bk4/K X>y0T4&M_lB_ͤmMZ|(M)[. XX]v {ϙ]vedYI.]'\/YV W|X^^bXYe:YEfP-&u oX#rYW>W6Y6SMMMkii݅o^{]ER#~2BD&|N~D  "{t;DePFUy2%zNA~_m2>ֻ)7#yEvg܅Otsy aQB^:yxGǯ .WD0*:TF˨h|OD(5?5AxU4<5?l.ɰر3/bqqqcvJ(}/b2B;ӁݴAq/+g02j#cL HT֤s$Ihkkkί(w/wssS ͮŹIq52e$"/KE#|~x pFODhiiG;#P}m`z?p!xW#E8mY8!0zF Φ8=;X,ZrC7vyrl0L7҅mͅP:րF^_e 3tF`2ЛN>WqƘ{hxG'"bN≠FdFpzS@X: 8S d/* Ɔx[ßSӄcP} 5,%_@ L`{shptD/,<Ƀ BcpL x(,3N#)e:M< #n#7=#[cmL$]f/ ȟF0ŜψJR$j%OJ7Fir/D2q p&7U ̌;r1f.F;P3hhh*3fsf2b5D H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FeIDATxڴߋ]W?{;2Lcl~)$ZH >)C_$H  s}Ђ` a(I11)H:I2{u9g3S$vB,ps>˨*2,814}4W5s^9km]/N8֙(JCՕNwffGd}_2dI_{UNx=CVKH4PS!`LLlrevÇ/:U- sUȲr\w9K1)W$'4/nGlmCbޛq/,Zק2gb{V|~+jB@D 無WG2e6!}(UȪbE>t=NkԟywYF/hU%sISfE&bDsU-sک5q̾m,ܠc^^lEQSC1L6|-FZ@MB} E"21Q}&&e3@|yJ9'G1of/SHOReٳ2N F)j"zl#oE ؘ5GkY\MXFj F-ƬMv(>|'N~\Wn@v@1P;{ kNfIENDB`./src/eric/GUI/icons/jswindow/save.png0000644000175000017500000001003011303422537016523 0ustar yvesyvesPNG  IHDR szz pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FCIDATxo]G?gfϱk?)R!eŒ ;kXUBb #HBTUHV\?ݙslCɆ]͝w{qw<_꯶@.E`4Fg"-~̼|vgv*Ev{ T)r⹏u"1!Y펮o?rm:ciq}l#{wz + p^`.t 縰>ox͟U' l[}b\78Ψ( Sǁ^5b ~o}T5|Kmon_1 7U掹ؼCgx,+ \\Y >Nnų|틟/cGlx B]%RJC߸n8q[n/zSN)F.jG Ws0 `iD.{Zb1Q~p4tˌN\ʸʹHUaoܢEqGSSQۻ=2j:O; ͝0w,!t"HS-F)ҭ?:Y#03Ӱ0LN_D -"sYŘwɊFuW^X23M̓!N~Vav[.h?wT 8Baf fk „`0C= qz#@H"B7ҥDۻ#!\N 9!kf(i*zMEUG*$R 씉FYEbG;MLrhyb9JcsGDhRI)4)I>|+/t =adh *06LB#}_"˨ - 1Ɯ0B30Yˁ[` X&!40w_5@ lJkxܟ CΪ@J3|HMx.N$Jow(^m4_ܦQՄkܽ`SC5w@*@VP gŠj&{3{'/L9ȼ^' `4P[Qسv}jࡐs7锎"x!@&&A$5#}ȵء8g_#م]8VmC1D)MS,+!dL*?i ,suv4}̟^Z[[`AXS-mjZh&vC@Xn-a& )6x?::{v>2_$C2J*8?h_Db!%HHBJ5CP;O#`" IwH(MMyD^+g W+O~5KHZaLR+2<<-I 0N)/_+#T 0*_Lv~g˕^ʯsew G%uE)\! ONA[^)03chh@ᇪNk(lۛkr`reɀ5Hupf1PR@_QC)AX]23XI8 DHH>\2TTTjŁAM2 D.{kSKXK"D\a"6XV\3&\9- H;q`q f8;17!a! \:@B% 7d vagdB D$VfO3`"r-$Ne5{$"/h8H H6fSE24EA_DrH9^kF=yK,Vاdâ:D`ݦj ?002|1%2,ʓl\V H~׬ xEֱ/OinPE3l}fZ֎|E%X+=k7',MџsִUB' z*QX4:pGGߵ^ &x 6XM|8-aG8&"vw.! ˧gbslTzbSimbn"ngHfT:EFwhw~>29—ݿdP]ev"X \$Fƣ'f_ {#@ ږ;lKS%t7.eFw{ᄎ:"J%"PĥqK.O.EF cO3XKxozYO0_Ԧ`@fifQD}z5'E*JiYH=i(6ؒ!)r91Ocs7E-4qi{؂ Dr #;}ƿ #ds:e2-:nr;߆&GgQᨘզD2I &cx'w䉆 kϝӻS+F9խKp?w#|t`ys{Y̱v?]q3 IENDB`./src/eric/GUI/icons/jswindow/.DS_Store0000644000175000017500000001400411344505666016561 0ustar yvesyvesBud1%  @ @ @ @ E%DSDB` @ @ @./src/eric/GUI/icons/jswindow/open2.png0000644000175000017500000001120511303422537016615 0ustar yvesyvesPNG  IHDR }Jb pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxb?2`?˗/\;;;D{[@m/^eb0իW/_)77qŊ?23<} =×/3\ͽ 0FRR T(4R1THH1>z$BX5&m#L))9mk&7zd]g" 017djP@b] o92?Q:dvPJ \!9CGmQ{@Yu"BeEqZ@y.u]c3GPi;0Q4AUIu.Xǩ܍i\*^od_Ώ~k:kx~~!"s'U(.Zn#6Zj{ ,}AGJA0e }(ZBpA6b EO3Ss>f%U NQ3ZjjO^E3c @$?fdY~}KL'#ým 5(ˈ1DTh6+hŶvY[*1*QpDAT͔~^wټ'GL%"JYF1:2F&;Wg#bD7Gm^@8X2z'(ms?A4pha!+ HIH1(ZzX;;B FM.b7k,DƁ׼yǛfH$N&-Z ؅Bj9qRb߿Gvmy:@(vCBHXLh4UVoVrTJRyz"HHiz=J%cvv61^BL #jFWFag28^p)S>m`\{8Vw-^t=<BH0aL c-CQd2I7>} ۟j FRF0׋QT쥥tƁ Ʈ/m)_ǗGw7߹NƇϾq]`R* b n\,^]e \qT0jFJ) Ƿ/xN#^X$R:d;' ugZkjfa8}kȟ :'QM8֔ &BdI ) DLDkTR\ zޕ?0p˽ܽ}~9D)5Zbii sss#T*qfggH$bHj>"hoojDhH$DDYSE c`=*ɤ`LMMdSszk qߏT*uImxx8TT,0MŲZ&Gq,ͻkQfQ'_K[T3 Y;FDІBlB]G;>,NPu2ҪD\@[o\CիkE*qm`` d9:s "#m1kث 0Lf($AZr-~?JW/G0664k08ЏαAQ{ARBZWp{&TE$T-m~dޞ~j2"C_׾7Dfc Һ;ua;YHi:]6*:} bZ߽7q|zz.`k[Y뺀0U8`pB*|,>\ҵk{/0 T- 7 u-B;. \b+  ߺ38;sbg0`A?7镗?-@I#:~NO>ȣq(w*|sIENDB`./src/eric/GUI/icons/jswindow/fileoff.png0000644000175000017500000000070611341703352017207 0ustar yvesyvesPNG  IHDR*qotEXtSoftwareAdobe ImageReadyqe<hIDATxKN0=n.WH+$$kz$!A]p B5`xI5R7I<֧yEk8@l2?PV3H u>=:-]DkcgEy&5BJ5,br'Kʷ֠uј&KQKoST}_SI}S-:+k#c@]3DIh*l; ~$Ϸj7ԣ]zc"*T|GX*RA4mB"wc=\G|Ňi\l`wYe8 ]( 7䝋Mŗ:'_8#O{ۀk3xw' Tة㏵3V6à +[o}}z聪G*\ݛck֜h| Բ8A.D 7-ϵmG_Z\[9 B֠Znhff8K'zW6m:b--{&4rays_Maacet %3z[V@Kb_FwGCI)S*ο•ƥst&6;Z\[QYyBxտJw(( voDt]H_w=R=ZW @n Po{wY!He46TNѺݱvIvET- zzTV졡J[H@ղ"Hec:)d'4݀M`f:[[h:<98pmd輪 亶m>@`bw)>fLfEZY ˴a[Em̊TRAbvcwz}=p"w,tX3 p#Wl G`$9 Y=X=5vJ \Pg'r?3sU$ @YRVUj>MonԑArIENDB`./src/eric/GUI/icons/.DS_Store0000644000175000017500000003600411362637354014721 0ustar yvesyvesBud1 ttebwspblpalettebwspblobbplist00  \WindowBounds[ShowSidebar]ShowStatusBar[ShowPathbar[ShowToolbar\SidebarWidth_{{554, 283}, {916, 591}}  ". UindexUwidthYascendingd BCDEF UindexUwidthYascendings JKLMN UindexUwidthYascendingK RSTUV UindexUwidthYascendingZ[\]^_ UindexUwidt./src/eric/GUI/icons/themes/0000755000175000017500000000000011313422245014503 5ustar yvesyves./src/eric/GUI/icons/themes/.cvsignore0000644000175000017500000000001211313422245016474 0ustar yvesyves.DS_Store ./src/eric/GUI/icons/themes/common/0000755000175000017500000000000011362643160016000 5ustar yvesyves./src/eric/GUI/icons/themes/common/tab_left.gif0000644000175000017500000000005411303422626020243 0ustar yvesyvesGIF89a!, ;./src/eric/GUI/icons/themes/common/navrightpushed.png0000644000175000017500000000133711321610533021536 0ustar yvesyvesPNG  IHDR $tEXtSoftwareAdobe ImageReadyqe<IDATxڌTKP#I۩uQΥC\ \ɸNF\č CaQkg̴W\ﹷIҢCaFC aRꟸ8((( {T*-H@vdN 1wq U`El,?8I&|*WWn|sjZ[~ű+'a䛛ޫ.lL{Ž Kq}??+'@H) +BB؀^7:87,.8 pkdH 7b;F W nc?O/12ihҦ\s%(1G~YB8Q)45%J%Iՙq| vBi4,qlٟgy2a$8(Pa8Wf~ʰ ho2Rȕ9CR4HWRpmlͭhZ-]d2dNu+rwY5Nn=}tSor L^~VhQ5= $2ƭ_*llhlkRF(nᒅ]vavhwrN|9Wd2iJ( o$Q.9٬yYkۍr]S-`b LJ,Ƨ?=Ot8g}[lGf\,t^ klo,S̙pQuڦUEՍϣ@\!<{kR*dķЛtk'\b Z:jk()l#4mFOөQUUEB)Lw/dD*ӬLt=7aD"VW،bx\d)Ay?' R'4JV4}XKX=`+J}jS@c+,g||vyeuFit/ahx= QkI$㙬TX}I,'L .㍭QR}tv\]QJO^e[YKsܹ{bqP(o[9GhcB=Y:NQ"ÛTT**TQE l!TXZfv\&wg}C[#!D,SymJٸ҂7vI ӻP{w?; f!?=)R}X4YQE EJ{M 5MG&᭯a !8FϳM اfJП8ĄnDTV[Ɠ7 ,hnhBOx_oSPM1ۅL&':: k-m6N)#b)_~8(0J? ?hHPt\A2aœSˋN  ,VP87{J\{Ј"tdƅ dp{0B9LPT, 94lا^ӳn@ T*ݻz=t|[m2r~Nl/я%_XU#/sL!Sq-ԏ$[v#d: ]YVxY^+f>vf4f0Pө噘2Ux.:5le.%ci:-t`X̀3N B/B– 0@s`"!;./src/eric/GUI/icons/themes/common/leftpanel_off.png0000644000175000017500000000123511344144737021321 0ustar yvesyvesPNG  IHDRQ^atEXtSoftwareAdobe ImageReadyqe<?IDATxڼoRQσǀ0hR6q1iQ'P'W0&n.CCP`۱&LMZmu{黅!;|sKAJe׶5z.fijUPiXY뺔f zJa ƀ7G:_ VWonWUA@WI>ߜn49KnS*ѽ; zRIJX#td?}_mͻ#>7'jMiy`Ƙ FHCNK}j}`T51qz}+K˪oR1b$:̀<}}*6:&d2j=b3hSzR{}7OGPK;IzHzOLIRhy 拷C~`<I@)$V}N\.GBA%q\l\`\C Ne( PuR$4}Mж`??Z|>??/=(;$6 J' a#/WE,q[)oB^~ 0L/IENDB`./src/eric/GUI/icons/themes/common/JTreeleaf_1.gif0000644000175000017500000000043611303422626020550 0ustar yvesyvesGIF89ap׽Tjcwbudu[mf{x`^revOeԟ"_v?蚥o~!,'diQ!'eqUX0$8@CP8@Cm]%`B$bLj`# H FL"uQ T w   # "M'y-"&!;./src/eric/GUI/icons/themes/common/tab_btn_off.gif0000644000175000017500000000014011321322267020722 0ustar yvesyvesGIF89aɹͺ!, 0ETBD;./src/eric/GUI/icons/themes/common/monkeybtn_off.png0000644000175000017500000000246611361253117021354 0ustar yvesyvesPNG  IHDRQ^atEXtSoftwareAdobe ImageReadyqe<IDATxڼOuǿ3;{vY. (7Ъ`$HZVM56h5o_/bZRcH*u.0{²@I&ss~w~gUUq\$IhnnvM=,,dJ].(29Vyn} Pzތ <[BYsO]G"ei9*\,T qڃocu`QHQ  //xWq<9Hp^@fY{?bE+,eY$|V+XFi٨zM+qwO7<Կ-%33>t4c3 ^z$vznpo_GՏa2z+DEq t0 ! @`qyivd9025[j0][&:[u޼GqYyF# J _bp1J_^ cu k +qt-|?R68n 6Hf$,$ZS&@xf\6aMρOA$Vc1{*IְGK-"#i9oIVD0&P mr="/;\j‰;T0=O :M7Ԣ٢Ăk㗫["jj"$*yQZ $zHi;Oaeу_{`6(yF1}0̶S=g7ZCaA i4=2)TeXҽ*x AłѣHD[ 7ߩ7j 1`:hIb H% f$S㓡#/~H~ " C@~2H#{[(gw-L-;G.՟G\eH*U%I,'h4$hmRЉ?zqi302dHȒ#麉 @x* _ƃ#3迫`N/q$+ğ/YX’lY=IiXh1H!Ot:0`@Eu܅p=T1 %t' r%K P=hKڋxpѠ#Dv4hbT&tۨN0Wc' nշ111`!G0LP&C>ƹ.aCfI՘4i>d&z浯%r֚ RTI]"lD  0;./src/eric/GUI/icons/themes/common/tab_btn_off_left_border.gif0000644000175000017500000000033011321342120023260 0ustar yvesyvesGIF89aǤծغĨү˲ͼó!,U&#fƭ,ipJwY|o2X5l28eJl*lex#!0);ʋFiC V@@ $DCc`H"!;./src/eric/GUI/icons/themes/common/middlepanel_off.png0000644000175000017500000000070611344154674021630 0ustar yvesyvesPNG  IHDR5r5tEXtSoftwareAdobe ImageReadyqe<hIDATxԕN0r9w7 xgGW|'`]4 @@%qp|MG'+nuS7 ce9RSj% $S|@H\ij)!͎P^DEHy7ۻ*EC7O]g׶mΝV ܺ^]*BljHreaGcmChu.@!_<꧀6Spq~~0,a\lԻX»UMՋ':|VMݜ[%]\jCzxK!ed:yA0^\˖IENDB`./src/eric/GUI/icons/themes/common/left_history.png0000644000175000017500000000022711323535657021232 0ustar yvesyvesPNG  IHDR5TtEXtSoftwareAdobe ImageReadyqe<9IDATxb? ƈ(wҊ~GFt1l*.!&`Gcg4vF`O$bpIENDB`./src/eric/GUI/icons/themes/common/tab_close.png0000644000175000017500000000027511303422626020442 0ustar yvesyvesPNG  IHDR tEXtSoftwareAdobe ImageReadyqe<_IDATxb`N{@l oC _!)4Ѝ)LťWRbq# m3 ˪~Zz^IENDB`./src/eric/GUI/icons/themes/common/middlepanel_on.png0000644000175000017500000000100511344154754021462 0ustar yvesyvesPNG  IHDRbtEXtSoftwareAdobe ImageReadyqe<IDATxV;N@k; M PS!Q!q:J#R Gh(R);70$X0j?vfazq:뚪z=2Ɛ`Y\.eL=]@X3 |g] pf h4"@&9~Ϡbc{9wVP3y3Bl6QpTYOu}گa,suDJ k~2 :_cb-OՎ&=P3+@h41h5lcHN fYL!JThmR'IBWB3 i$MStN4ۋNUWF0*fzhp` ||&!Ƨ.p[f2 POYEY ,'߿Õn;zЍ+y=VIaQ)FF&~#y 3wfvv׻3~!◪*Ji ڄhF*i@jRUōd7ԍ؀}ٻ;W{$z]3tuT(duz i1 D`Q g$zRMtZY.98{L_b&IRc;߬˻qDu/#ɽkKKbq_ 蕲m?RTv㼻 a<\]{)}a#ʭ* 봴\W'K<0::JpG\d% pxԇFxFe y{mv3ovzMn7 R,5kQ=`/x6xAϻss,JOUu'!_UesTU9n+ׂq_}M٪*h}}TSF`57 S>x6SPY0t ? Ķrm$6SFCC >sgA ǵ@1g*cەݩd qV<4˪'4H2Gsp/7CwaaˣLo.S @{-x8+\zZP.IpY q<0Rɗ ,3v/̈Čh-q) ƞ.[EbgH)_W  0E0bVhs*YNP$^A Tؐp2drɌgT.f0sb~8v RLNQH8XOo.JqQ DpEx^ݙBLaRWJ{Gf+"'PΗ t?oUq$ |S8 m֭6ikb ]]0B5Iǹ 1C=Rl8/皑ɤˠ$eнYBc|pdK9=`[J(!Y~(8+_6_q43>ܑ؅/݀!OeaW YhT๹YxЛ|g=7*ZQT}R IWo=8ǘGTI+JP5_Ξ?Ϗk~*q`>zb0,;SS78O\@2vygQE<,9A?`EG\#TʄRL{\.F^ o֮.eaaX<йsD $(b˒3DYu]m[ԑ_d21MvVNEY*n1[8R< dUjUaFCvPl` `mP0XPVS>}AbH|zj x|7q&} I8M(ʚ=$F1 W4.B})yFU์;BC/߬$/8YI_ݑ2Nvz}ؓ;N?xu]SkEH~ f`^Eꈛ xiҎOpp8]ky?.~vV{WXgeHSIENDB`./src/eric/GUI/icons/themes/common/sep.png0000644000175000017500000000020011303422626017262 0ustar yvesyvesPNG  IHDR WtEXtSoftwareAdobe ImageReadyqe<"IDATxb?v 5 lIENDB`./src/eric/GUI/icons/themes/common/palbackground.gif0000644000175000017500000000005311303422626021276 0ustar yvesyvesGIF89a!,D;./src/eric/GUI/icons/themes/common/helpsearch3.gif0000644000175000017500000000023411303422626020664 0ustar yvesyvesGIF89a׹俿񽽽־!,IIEh, cBT Y甬HH`R F[nSi@JXs2ZW 8t%;./src/eric/GUI/icons/themes/common/JTreeleaf_2.gif0000644000175000017500000000040711303422626020547 0ustar yvesyvesGIF89aW]K3ft_ZfQƳyž탴߭nl!,'dh(o ĴA#\xL0 YOGL!h,BAay&c~I QD3"x|vNl ' :JPw120m*)&!;./src/eric/GUI/icons/themes/common/rightcanvas.png0000644000175000017500000000015611303422626021016 0ustar yvesyvesPNG  IHDRĉtEXtSoftwareAdobe ImageReadyqe<IDATxb?@ۢMIENDB`./src/eric/GUI/icons/themes/common/navmenu1pushed.png0000644000175000017500000000130211321611531021435 0ustar yvesyvesPNG  IHDR4%tEXtSoftwareAdobe ImageReadyqe<dIDATxڔTMP=J'!c4-!ŬLw/XrNohbb\h@Ni¹IsϹG:NsX4)f0D!cߤ_\3MX,qi|<;FxJڸ D'h׏8nJ1mB}@ ΩUgnLJ>(L޾niUjHMOvmmUoݛb`tf"A%Xz]ѽEèf cZ)i%ͶI+S!Yڙ²N.AfddFB~ŊD]ϲ +FR$2' j3v, -8&9C8ȣ79P9 'GFd)-=rLא*/?R:H9KJñThaK<vdI$侔]8CަÅ/G+I8ZM4M,,,86XYxu9z{{%*DbӍa4+ha ">UgPbFJ$$M$W/"FP ]ai: 1*ͅBLOHp0* *m_/Hz&RVr9sJub4D iC*~A>SZDQ/ZVkF%>hZXשZ j6G@Q" '2oJ&Cna 6V LyB f6x^p9^}`[#k'hMIENDB`./src/eric/GUI/icons/themes/common/monkeybtn_on.png0000644000175000017500000000232711361253173021214 0ustar yvesyvesPNG  IHDRQ^atEXtSoftwareAdobe ImageReadyqe<yIDATxڴVKoUf=~Վ'!j$]E%XdX;Yg l*JH %?j;Ǟ;/Νd,5lJt4};c)"H`>zF a^IBgٯ4MTŦ+>JPh\.kY Y/oII 6Cbb#qd:0 A|^` cdɒ#KY% zaQWl \p(@ ,$N"GXe7( G=(QJ0[c`&5 #&1Ƚr(,l [l~enzy G}@&Y#5C%/R(^D7UX% U Rue2la! v@9 % V7_L> K<&)B(r<=ZoQ~qzw"ń߇@s}'7$9D.eaJ1qDL O⼏~`. 3]Tl {6YFLF<ȓLԚtR^T#XY\@1gǻX-)8܇xC"K5ʘŘJ%ȧ olӈdu\U K YF++kxR#/Ѥ)IFL8Xį ,+PI2) 5bE*4Cnq]Zm-)?V[x0nA(a@;dDŊތJ a@wft?}Kyt:]F;M*zJȣQ Q}m ɓrQAD" t+Tך+ '0f&z*uT]wCCkHM)Tx?Vr I\’hRd͖E4@E-/<4#EN}wxң+~84iPOE=;u"'혻( bB ,)7f|S"3 l8h"2/B6*t( uggWG$G_IENDB`./src/eric/GUI/icons/themes/common/JTreeleaf_3.gif0000644000175000017500000000025211303422626020546 0ustar yvesyvesGIF89a3f!,WI8 JB`40t@ĩ,;qԷIc8da@ؖ9WsǗ0݆D SCX#;./src/eric/GUI/icons/themes/common/rightpanel_off.png0000644000175000017500000000124311344145310021467 0ustar yvesyvesPNG  IHDRQ^atEXtSoftwareAdobe ImageReadyqe<EIDATxڼ=L@9GQF`sPf$JQՁ.A#N(Lt$ 8JbĎk㊈<:˽sX>w`vJqR,g.˛\E4oR~QQ^v/aȽKlMӒꕟ[[[F`!difҩM~x<>9b]qz&lYun+A\c;.zGkN]Wd~`U˔A8N!Q=VDbiçnu5١0Xd,l wˏ*oa9&`weCQ, >%0\pQUOuEj=vVm_} n X<,LnOJ`!m`yPpw؎[V,@(kO&m\\W>"& ?hEU*_c[X\@6IVb;Vt:RvR֔N?lllBQ H|oঀZ6K ȷ%DfՕP6猀`0||%IB.`|R'h4*(]-`Z˲ I{s SR=: XTjvwvcq@twEK&:EEP qwΏ_5,:IAbFƞIǷF r@錡Y~4"dD|3*B3Zu^WO2']@k X\{1bءC>@/4- Řzi.C3 :NNOCDJ _DTdq߆l]j{;| *3ro7(8(X !;./src/eric/GUI/icons/themes/common/chkboxOFF.gif0000644000175000017500000000020311362643140020271 0ustar yvesyvesGIF89aUUU!,0PIR)`HdiRA0tM!xS@pH$fɜD;./src/eric/GUI/icons/themes/common/.DS_Store0000644000175000017500000003600411344140747017471 0ustar yvesyvesBud1   6search  @ @ @ @6helpsearch1.gifIlocblobE&helpsearch2.pngIlocblob&helpsearch3.gifIlocblobM&helpsearchback.pngIlocblob&JTreefoldclosed.gifIlocblobU&JTreefoldopened.gifIlocblobEJTreeleaf_0.gifIlocblobJTreeleaf_1.gifIlocblobMJTreeleaf_2.gifIlocblobJTreeleaf_3.gifIlocblobU left_help.pngIlocblobEleft_history.pngIlocblobleft_macros.pngIlocblobMleftcanvas.pngIlocblobleftpanel_off_btn.gifIlocblobUleftpanel_on_btn.gifIlocblobEleftpanelbackground.gifIlocblobM Mcomments.pngIlocblobw Mcomments.pngptbLustr^Users/erichake/Documents/Programmes/NetBeans_Projects/CaRMetal/src/eric/GUI/icons/themes/gray/ Mcomments.pngptbNustr Mcomments.pngMCreateDlogBackground.gifIlocblob Mnext.pngIlocblob navleft.pngIlocblobUnavleftpushed.pngIlocblobE navmenu1.pngIlocblobnavmenu1pushed.pngIlocblobM navmenu2.pngIlocblobnavmenu2pushed.pngIlocblobU navright.pngIlocblobEnavrightpushed.pngIlocblobnull.gifIlocblobMpalbackground.gifIlocblobpalbackground2.gifIlocblobUpalbackground3.gifIlocblobEprogressback.pngIlocblob rightback.pngIlocblobMrightcanvas.pngIlocblobsep.pngIlocblobEtab_bottom.gifIlocblobtab_btn_off.gifIlocblobMtab_btn_off_left_border.gifIlocblobMtab_btn_off_over.gifIlocblobE tab_btn_off_over_left_border.gifIlocblob!tab_btn_off_over_right_border.gifIlocblobUtab_btn_off_right_border.gifIlocblobtab_btn_on.gifIlocblobEtab_btn_on_left_border.gifIlocblobtab_btn_on_right_border.gifIlocblobU tab_close.pngIlocblobMtab_close_over.pngIlocblobtab_file_icon.pngIlocblob tab_left.gifIlocblobU tab_right.gifIlocblobE tab_top.gifIlocblob E DSDB `(0@ @ @rammes/NetBeans_Projects/CaRMetal/src/eric/GUI/icons/themes/gray/ Mcomments.pngptbNustr Mcomments.pngMCreateDlogBackground.gifIlocblob Mnext.pngIlocblob navleft.pngIlocblobUnavleftpushed.pngIlocblobE navmenu1.pngIlocblobnavmenu1pushed.pngIlocblobM navmenu2.pngIlocblobnavmenu2pushed.pngIlocblobU navright.pngIlocblobEnavrigh./src/eric/GUI/icons/themes/common/navmenu1.png0000644000175000017500000000106111321611512020225 0ustar yvesyvesPNG  IHDR4%tEXtSoftwareAdobe ImageReadyqe<IDATxڜn0l'Xa1B:b* TU(fV`fk$0|Lz/KN[\d&-ӢZ"bC.c"\I!xhgh1oo{޺RP){mR*Ԁ.0d(}<LKH.ykm428 t>jĄ@Ml#RĔ<~pG J0 [P#lnBo2T:oֽ>/O¢+UrZ~2V%ZA0jqK\ht:j r_$#*. H1z?Xst1yx_&mr7e²,Zdbj'J oME+}0ޫWIENDB`./src/eric/GUI/icons/themes/common/left_macros.png0000644000175000017500000000132011323373004020772 0ustar yvesyvesPNG  IHDR;mGtEXtSoftwareAdobe ImageReadyqe<rIDATxڬT]HSa~ɜ?V8 ]3REAPEWX@$bTBRjwtэY$TPA?E"1Q3@MvO!@Wc<ցTS|?偬㈫%3l6 ^~ƶ-TR8bg~&YqcaQE!XyXt#Et.DŽ pmHҒYA PU.[{=?3O!';cu׌,84QwWq&#NDJrq H+5D-Lۖ>+,; Hvixԇog/#)Rr8rmm+\=*zEc?1:\}#ns?Ov4!nW`J=E6: eZ YDڞG1Wv xf*ŏO`np8Sxi ӎ$癩a̿\a;6ͦ,tPG ϽuU<1Ƴftol2.іlJ{a7GKcӅмv~4t S_ va(L`O%D!Dp]Z> F! Ba HP}zkbݺj{fˢ&;IENDB`./src/eric/GUI/icons/themes/common/helpsearchback.png0000644000175000017500000000110211303422626021434 0ustar yvesyvesPNG  IHDRiCCPICC Profilexka?ME7HurmMFdݙ]]t;8.YZ ?p "h<אAB^|~Șa,F~$84˥j:#K[ۻٱ׏&}]q &2tm9 Zȷ|n% >fx!hc6h%sb;h߀FP#wж^3{0kT@ӡw8ěNq؏4=lQ|]|M{+KpVV%*Lxk3kp TZ X!^Qb[#[^ȹ$0I 1'Ӱ3<.~Kyvb,Ijh_.s9K#׊'IDATʡ00q$fn{jpC/|IENDB`./src/eric/GUI/icons/themes/common/null.gif0000644000175000017500000000005311303422626017434 0ustar yvesyvesGIF89a!,D;./src/eric/GUI/icons/themes/common/helpsearch2.png0000644000175000017500000000100111303422626020673 0ustar yvesyvesPNG  IHDR r|tEXtSoftwareAdobe ImageReadyqe<IDATxڔR+DQskIG Rl,(V[ K[S`!XH(Qb<=ܙ|uww~-HIp!nTt 0魵!Z 'ԷxQ (X=- 6%[10$[JL1ţ Ve {\FBDSlDG|%9}pz-67h(_&4x4u8c¢U@r8[]=+Z-o:b<u]XpX,H$J"HnT*+ϣP(qB!hE,ˠ]$A.ǑtQXAuWx@ h4ʰy18P6oDy@Z шE1ZJ R{ {.BZ ˬZ.a&t]Bz^FJ%f3k+&o7s(z mӆaYP[N͡.`ON>O/+' $IiL&$#afA[|m~4uE; )Rj:5߂ XjxnUx Uo"=׽ 0|m6oFR-qt|pqEyn1M%ڟM(;lR3y]".vL֟q"7>-뇐ط=1%lc Ð$l8}U!m:̔WUȓI c.?DiqU3IENDB`./src/eric/GUI/icons/themes/brushed/backcontrols.gif0000644000175000017500000000124611303422604021313 0ustar yvesyvesGIF89a!,I8ͻ`(diXl/,tmq.|@,Hrl:hrJZvfBL.znaNq ?2~E>;UWX^]Q7s9z0|w{CHC]p HWb˷ٿk05wr^6kN&Vhj+1]qAgjifS'Cҡ3)ɮ7JNfN|7^VnLfuuKǿU<T/zWo!^K;yX[sa6YWSlݍ&46G}=}U([ v&T b=~mmZv"G}T#q[`i-D\;./src/eric/GUI/icons/themes/brushed/addmacrofoldersel.png0000644000175000017500000000070111303422604022313 0ustar yvesyvesPNG  IHDRO#+QtEXtSoftwareAdobe ImageReadyqe<cIDATxbljlb 蓯ׯpλwjBhR/\w/ j်dw:55D j~k0Db@-@6П@b<@-@LxM"4oL$ Zr4ux͉JX .Ԓx 9U@ \9~8-lb[a Aͫq΄ݛ$m+gs23fYY˗/j_?iH]@@ iop9N<݇@-@ ?j<;:[# ܹѧIZJZ%Y HJL 4őNEIENDB`./src/eric/GUI/icons/themes/brushed/.cvsignore0000644000175000017500000000001211333271375020140 0ustar yvesyves.DS_Store ./src/eric/GUI/icons/themes/brushed/createmacroover.png0000644000175000017500000000147611303422604022034 0ustar yvesyvesPNG  IHDR&GtEXtSoftwareAdobe ImageReadyqe<IDATxV=LZQ>< V a]1a {&āA8hRWfwF"$AY @bxW#x<'y{{~M%B/T''u"쬥T*Su&gA R^~? NZTן=~Jgԗer$8u|lLd49N9Xb,n^ז܊"1R0rEAN!|^pl`&f^鄛ٚ d×L&iccC#e2e/'GGntLX|3^5@D@`P-<3wl<77pKLNM\UUj)R&fדw_6!PEj&j;ܯFΨ5 aooIАO 0A^N'q8\HCb AWWWiqq>.-a A*m;h4*=Y+iunHzblv]m%1Qu[x5pqac߸SspH t&!Gsq~'%8ݼQqsٳ#cO:"IENDB`./src/eric/GUI/icons/themes/brushed/createmacrosel.png0000644000175000017500000000143211303422604021634 0ustar yvesyvesPNG  IHDR&GtEXtSoftwareAdobe ImageReadyqe<IDATxV1hQˉB!]\42إJ\$С ةSBsp -dmBv(` R2tv%\=v)ww{tk)c'fs"D|>---)+''U)07GLF)$Z>*]\\u.6?;;jJȩPHs / ?危v8dar?:QSP*VcƠpo\.S6$d2iz*|xxhA`D[O7=w[Ybxb?~_/ )G rt$ RҒ6b7~pjNKyUj_unob1?]YAa ĦG$ iԸ um3b C4R8bV= a'z)TI֘㑗ZT3,,p uT*&a#(t;l7XPWXpcckkk&Ea7Ǎwjc'rƱ#n7u]na{ĻF#uhp,ybD[/-Y@r:7Vݯnigkc KbzVx<>QbSJ0jV̕jZTT=><#ebAGWu<IENDB`./src/eric/GUI/icons/themes/brushed/zreducebuttonover.png0000644000175000017500000000076311303422604022442 0ustar yvesyvesPNG  IHDR;pytEXtSoftwareAdobe ImageReadyqe<IDATxb\n++߿ 'o>u7_>e X5_q< Zb Df ؽw'DI&f6fV!ԁCxD9EX9xؙXXXf e=n~Q.^N6vvϟ?~jрśҲ@y:Hʲʚbj앾$ FPd%c3m.An`cgfaA߿,Db8?jZ~ (̌_^Q - M`S9TYXс=YX/0<~JA J?873p؋Ƿp?(́N :sÛgH_~)+)?{c?b`bff@*Vyf4;߾~͛_|! CxIϐIENDB`./src/eric/GUI/icons/themes/brushed/zgrowbutton.png0000644000175000017500000000045211303422604021250 0ustar yvesyvesPNG  IHDR6nr>tEXtSoftwareAdobe ImageReadyqe<IDATxb c +_ʄLd!O'estH0 p`t #*Jg_6`Jׯ_>߿{n8{011q𲲱=fh9Dh3P Nf0]}$P;'a;31aZ4gCDv6E^w:K0IENDB`./src/eric/GUI/icons/themes/brushed/zreducebutton.png0000644000175000017500000000076311303422604021546 0ustar yvesyvesPNG  IHDR;pytEXtSoftwareAdobe ImageReadyqe<IDATxڜKQƯsul|ȔED-\Ev=Zt"ZD6:>PBj쥂(vud8mf1DQ(RڇԨ74Q83iY#@ ^am/it^?VXމY4B.>WxQ4.d!$0@vMz&Ft UwCMf_n?ð׷}/Dl~ 45vjik5lأN r(Ƙ&W¡Ҋ])yBAykM!2Ɂ#_(襷zf"uqgӕ5T{ v(#T >hS6~OCe$'6~j5"TcݑE1襏`8VhaBb%iUUgfNdZQJ)q"ikrզ%f":f@h4(Hi)(fZP)h*sV^j*r*骬F 0꭭ª뤔z*J 갡^,*ky_V;&b ڷnz')z;e-25zf>/ܶ+pr K߱ܰ+qjߋRw/ /& z2ˉz*kF)s#3DkqmA?*2W.PG:C'zش&Mc^f=pkqLm@|vkF]6~O56}x\7 WnE}ޚ :Bmz=7xީܹy8h;ꛯꗿT ;8'3Ww}*<}uyB>>XS/u?>{= HL:'H Z̠7z  ;./src/eric/GUI/icons/themes/brushed/palbackground.gif0000644000175000017500000000023011303422604021433 0ustar yvesyvesGIF89a"!,"` b PL2@F"5x;./src/eric/GUI/icons/themes/brushed/renamemacrosel.png0000644000175000017500000000111011303422604021631 0ustar yvesyvesPNG  IHDRRtEXtSoftwareAdobe ImageReadyqe<IDATxbodjSׯ_,?~=A@#ZX :$y ŋgM@52.].q ɨ''NД^ b; @4ʮ?d @0,Q '/P P# pcu@5kĦ/yꙀGXAGS d7EVDd ΆF~)1NBf9Ќ]H HwR~U6%p7 {ݽS )GCH pA*V[<]l/oox ")(/_GD˩5f (bpԫ@RNNxM v(: !$bCH`̚|`_. &rr`&dPSSa)k9UN4Gėp͈8zp!<)02zYIENDB`./src/eric/GUI/icons/themes/brushed/delmacro.png0000644000175000017500000000103611303422604020431 0ustar yvesyvesPNG  IHDRݠtEXtSoftwareAdobe ImageReadyqe<IDATxڬT;n@+" %sYB58gŕ9V$>gM6k o)㙷qv1@1aC㕌Uv i٤&RIP(j* mvש\47/^9+Szjv\.oo9x Hc"g` Q#\n#`0l@M"\LpSerDA@7{7l&sp8N I0M&p7de*O&IENDB`./src/eric/GUI/icons/themes/brushed/rightcanvas.png0000644000175000017500000000346611303422604021165 0ustar yvesyvesPNG  IHDRj*tEXtSoftwareAdobe ImageReadyqe<IDATxڌr6D#o7lIVVjI9{ׯ_|?ׯ_yY}tO&j`FѫW$aq{{-K7n%w5Q ~||Fv777n\,*H4PSuukYZ1>R`YMhR:XQk}r1ʃY(7s{-cH{=J3.RpY]23ϗz{R<Zۨo߾%h䲒⥗nZ/ MB:劕\#Dg`yG{_[zxS.mCO@G}_m <g&JA6JD}&)LOM1YN 8]V!=hojͬyF_B$FSͣqμ)YF!G.TEv6^)wTCK$K3J1̿AQ4?@J(Dv%W ZI8eʬHt7~IǴ&Ǚ?}}寙\\ /! mW}@1 8Z7|m[>@H g-[0 9 9%4ށ s6[prn,lbTV[kKƜ)qO% GUT=9B1gˉLkvb Qw Ͽx Fuݚw'5ED\jNS {4R3!#}*{ds,9؎ tY}4,X݊is|"2 7iOJ>_J? ZxtbJ9ܗ,2טw#KP6-%圐CK~Ynjtمdscs=zZo)9>،&N襌J[)[ ]!ǏH7e=`IN}Ijڣp]s$#,rc; _ 52xuL@RF GG wdL $fWHk>͡,ۙn>׿eD䪦#E%IENDB`./src/eric/GUI/icons/themes/brushed/leftcanvas.png0000644000175000017500000000340311303422604020771 0ustar yvesyvesPNG  IHDRj*tEXtSoftwareAdobe ImageReadyqe<IDATxڜ R1 D9b'mT\gcZ[O~0mcQcNP(g"b5nc;1uD0 Lx〡rDښ,Pũ<:`ZIexb1rոa`\ZkŝؾMQG/+f&xwIZU!rk'ɷQ LUEqN!ed "]ޣ5o.DrL%e-meiӻbܛ߿p V9_ImUx.]d1k9مCM1]LJ%,A/_ƞM?q֭"`ťȓȕZ$OC ȪW.7UmxO{~uRN_z2(LWw]~ 6X]ٹW{eax@7qއt[)hYYs#јbiPAcPh!!'zNf"c7؜~ ޒ_U_B~ce˝h~lVcKcj=~)JO,CޏKHI"[1٥B ֗!IjbQ)jݧ]mBiBQ(zy~ ^;yW g|*S2(RVu饑Ng by| I &؎*|+ ;jn $Vm/\{Im=b0ri)/"+e2/u& {-3iػ4"C#)p6Ԉ"W- 1vfq<;%2&q\&\uՎrm5[-0RPjs:vRqn)l}tlsZq8ێ 2ۄV_X,{ͨ9_mS<:Lv;J3nF׻M0ږO^yq9)QZ-%5:? ^4ln>ͼ';"/̝"|w/6O^|ßꪈ1ҏRO=hpw9`xE%i,fzjG){U =ՌG0]K7v(c:h_(fAmIqTd1l2 wگ) {8q(Mpܻx;4i|HAƹQ2[#6a, E Az" B/6tSvl m;ұ$x;./src/eric/GUI/icons/themes/brushed/createmacro.png0000644000175000017500000000147611303422604021140 0ustar yvesyvesPNG  IHDR&GtEXtSoftwareAdobe ImageReadyqe<IDATxV=LZQ>< V a]1a {&āA8hRWfwF"$AY @bxW#x<'y{{~M%B/T''u"쬥T*Su&gA R^~? NZTן=~Jgԗer$8u|lLd49N9Xb,n^ז܊"1R0rEAN!|^pl`&f^鄛ٚ d×L&iccC#e2e/'GGntLX|3^5@D@`P-<3wl<77pKLNM\UUj)R&fדw_6!PEj&j;ܯFΨ5 aooIАO 0A^N'q8\HCb AWWWiqq>.-a A*m;h4*=Y+iunHzblv]m%1Qu[x5pqac߸SspH t&!Gsq~'%8ݼQqsٳ#cO:"IENDB`./src/eric/GUI/icons/themes/brushed/.DS_Store0000644000175000017500000001400411333272403017622 0ustar yvesyvesBud1%  @ @ @ @ E%DSDB` @ @ @./src/eric/GUI/icons/themes/brushed/menubar.gif0000644000175000017500000000163411303422604020261 0ustar yvesyvesGIF89aʵѺsssܱե!,0Ik8ͻ``hlp,smx#|pH,Ȥrl:ШtҮجUex ;贚nbN~O d^]$ȃʂ|rk}ȗ귫e[c '%ik۵#JH1B3j8 CIy*\IeHsf› s6ȳO@u ю1zѥӖ%߁9I՞ *V5>O].UJL6h3pʝ[GϚ˷oSU uV]+˴ǐ#Ev-˘sol9^' b…~mĆ&ߓQN8e@VnZ]w=ڵow;yR]o]=uC7=v؛"[x&xG!߅E|!~'s8,Bhނ0ֆ`b_HW絘I$I*dii"RTIuҢ|USp Yai&PhJڕ"iiM'utFgi}J(j j(ݴil隑服z㨤l~lI-*N[i:+z)5+k覫+k,l0;./src/eric/GUI/icons/themes/brushed/verticalseparator.png0000644000175000017500000000421711303422604022401 0ustar yvesyvesPNG  IHDR jGtEXtSoftwareAdobe ImageReadyqe<1IDATxڜZR: \B8;F8kOkZvSq۲vKt===WWW;<_y׾^_1^'l||nnn͘ :=??ς|wG9~c-9|x9c>\\|p{qq/pS]ƺe LkPg_JB. Pu0Y6D'1cZz E]Cgt#!K\O dx,V,"WszY'/cK)2!s% RAHk8k۫i$KïK7gRt=Fx{{"#1lL y N6֎Q/_;&+vz_GEs-C8HҩGOY1k8f?#z;3 ww[Y̗68\bd'xP $ ƌy bh%"X/ cb[eA")l}kjƘgKKXG]HsEMRz%IHg>ӷCף)F{IylD?6B4~t/Gufd[l^/x |4PUcL: ~і/UIlm]<9i>6c9R>&~Cۊ4T *aZuM+c]T7a5ށ6ב9?C#(UC5gF۲B{2FWӞQ >?xo֧mfI) 0]a~ٜqKؾV_ş6\WDxe|&"_~'''-9klfA֨\}HB ݷd_c; $Ql!OA^sJ{L}~O!O~:Wd5|AeqgR.S:e+1/Oq':7BD N. Y&֮,& m"f/Y6oqQ/ϜϟADM>~36׋Q ' Ojjz]4Il-^jmdOTŮf?A"=l C%ƨL6ի<>{ٶ 7X( v%L d:6:qFDߊpgQՔΫ4wc=RsMns` p~u*6gL=Z~xܰ{cAf!ulXkk|~EXu|0sV*6#6A1;̅ /A~6AW~q%RnlBƳ%(k`Pd5/fͩ"\42zvFCjm5">o򗚓(`SsTbS^Dv.O;|Z{U1p(v]WYrow'9HG:Q_3%k~BGMr_oxF1Rqs.5eF>%thJZñҾ՚vx~ }7 ]"-N/obY)wgt>f,D I덩s ktEXtSoftwareAdobe ImageReadyqe<IDATxb c +_ʄLd!O'd sOο1@_t$V=/0/߿:Him++7/+QaK >chCDyV111@;'a;31aZ4gCd|~7˷o@F///0Tԕ%z@ֲ@ uIENDB`./src/eric/GUI/icons/themes/brushed/renamemacro.png0000644000175000017500000000114011303422604021130 0ustar yvesyvesPNG  IHDRRtEXtSoftwareAdobe ImageReadyqe<IDATxڤTMAaHX)d4Y( ;#س`5B0+LJB sK.s-v Bh4BP# ߫Or, ? *J: urT btNjҀ zvPL&DTEYF=REZ- d2m[zKRۅO, t:a)v,ߏ0vlFgpx@׋Fd5!>HG IRDG!GY|^#8 BP.UgfpI.ԐP^bw>u 9n.TV)`!E&}IENDB`./src/eric/GUI/icons/themes/brushed/PaletteTitleBarN.png0000644000175000017500000000475711303422604022023 0ustar yvesyvesPNG  IHDR8gAMAOX2tEXtSoftwareAdobe ImageReadyqe< IDATx[=r;Vkg)0U /@c{qxEWF#-4_Aौ3- 'OV}>`|ό  >?Ơ"r!Y K?8ßxqyLv1EwnF|f~xϟ?߿ٳ:7M_Hm`Z` Xu~Ad4_= Ҝy~ځ.KHUfR?e2Hsy0A4 ?&)؟w?&wA)pX@Kϲ<T Ɂո$YN|X;kyÿ?=ܜ81ƹARD'^) ¨X@'7f%Ar ؒshpmu?TR;݀f~xCyQ=4H! 2`L۸_tP1~fpEP=tPsN$k%Hh,q= Hõg`I>\2m[flR_^AzuyPAjص3)bi%pF-}yH$ A.S"JZ H8!9R %+M % c*3dPd,m fA* &0 @&e M\@*1PΤ ׼=?x1?|9q[;kH=I3TL%gb0s!o75MkOŤh)fBIpI͘T /؊ici"% % \)(rWu)f Ҟ%6%,2 Ig%rdRԤ y6c9tV`\CLjPIkD!e_>z__$wo8*<@Gʤ%H5kTŠ}ߟ8+0{,H]ٿ剣qo8;1~6TKѶ`B_泻|\LJmk15V]5{N\-[0Z*UajҤ][0j[0܊it.&MrTI 0R^n\]08@JLJ2t'dxH=@ewCY'J)[TlG\b 3NMpTun0+bfdM.I .1Τ%H쮉, \fv^DMG<$0C8r)r!&?ݙIim'wΤ+T0_.gS j\BPvIL H&ILJݿI)q8CDIv3ayK\&w+ϖؠ`HAfR0F} i:"\Nac;3$h1i&|dN:Xy,]bܛ͕9;;3߿7#~XׯWի?O/G[1VboIcҞWj%h4t7{^?U*nJ(؍ަrVϨzHaO:S>U寬9YU5OU c/mY2iyn_y [" 3p IENDB`./src/eric/GUI/icons/themes/brushed/delmacrosel.png0000644000175000017500000000104411303422604021134 0ustar yvesyvesPNG  IHDRݠtEXtSoftwareAdobe ImageReadyqe<IDATxڬTJ@!6B77S/^zl/7U1_:qnJsfwgvi62T0rcHcxh A!RJ%dRlaY|&\cuRl{o"xNWec]ݾptp5 XRl=/"t52/o0-?Fxߑ2-Ѝ7jU[;ឲ-oX& V+ vcy\uSj;ͳtM/A FBLB 3%͛IH! Ю@QFq".tdFHCoA"48y?Z]gUT&5 Njr,0]ӐL~$"V~tdێ i? IENDB`./src/eric/GUI/icons/themes/brushed/PaletteTitleBarH.png0000644000175000017500000000474611303422604022013 0ustar yvesyvesPNG  IHDR8gAMAOX2tEXtSoftwareAdobe ImageReadyqe< xIDATx[Kr7EeW\Ny +|] '1rAsUى]bSDI$:`t40CITLd3C >u"o>l6;c/ |0~0w '*v1e#E^h?nj';g:z>Y^,?ŋ«W?{;Y.V :<33V+Q'˧+.8dk,o*3;*mn8b+iҤa=iB"ixc73.-24rֽ=N3/L.lfÇӧ7f_.?l676ټuH4LH E ʲ kXi+@*Z[kMՇt-EHS_ڃt-o= mys a B?/Hj[k R9d.[!i3y[ u9H8~~ R#iֿXc2`Z: m~O~}bo߽{w8Y&gf nä9x8ӳO,3̘s'#HuP;@I=X qp RN7dHjȤ)r:MAJNAj %QR\amR84&bk$H=LZ4ՕY|^UZggg{kjtwfrt!g` ]f %#%&C wi げI9hwpWО9:'G3;ǴX䐘tp7礂IA4/C1r+WQ03aʍ6w[F$9YɠpegRdkӃrors3Ae 8J zPP)my/KB :8%H1Z pG|GA*] ~bp\|L=}9FsND0)aG7@2ip8@:HAɻ &ܸM|68>y 旔9ig&&eO]nh<' ?kY] L ` n^$ʤXOөKЯ;2BR /1"aBIiƘ ;_#IIKYn` Bib&HIl8 #9;<$ŚsM@h(;p7Ќpw"ۋ.HP =bYd%B.MC&CTi+aU9)#UƦ"48K'dT呬OIGܙ8&U'i^dM03Q!SwIMrnP Glۊ+4T2HQeRSaӻ G G)%_K8Iao .QEmtL8ʎ)IQz*ΎkTF $5`‹ u1牅IӽcJ@%9c wopDrVћC}pH FTz^K,fҜ瞭 CQ0&Zr:1'u)I\uRz:H][cҢL:&H69)p&iLVw`4 P)kn4P0PIoI].}LaTA:[345v|1pz#Q %%p:J8oJky{Ew 3 $R%JR̀I-eRW¤# VfR;Ia2rԉnͤsR>ʣO&ɤ&u?̦ryoo꼹e%m)@ʷm&{=2'v4͜V _-+VR`(5wy-ʤɤU?vIy7jNّʜVr*3ʓ#R@‘cz\G\ztME}T/IwG_?)QydIENDB`./src/eric/GUI/icons/themes/gray/0000755000175000017500000000000011340323454015447 5ustar yvesyves./src/eric/GUI/icons/themes/gray/zclosebutton.png0000644000175000017500000000135111303422645020711 0ustar yvesyvesPNG  IHDR[tEXtSoftwareAdobe ImageReadyqe<IDATxĔMOQLaRE Rj➝a%?{֍ H!"-3i$M&s9ϼc.\?r9fuŐJdNKgggϟ!Ջa0r99-F$➅h6cZ*\\\D\H+4속j!,--5yq % !Bij,.qX)a!5w39NJUU5hJ@'7 mT ޿yۺ)rP !DtP|hìXE O@G  -_VDЩ*yobZo$Qj*T$]Oa:ղzfQZ:,"z@u;֮RM5,f>abfk[g/a/QO)kICHs?yvvF<>7=*v;܎K_++fG&M)~udן EIENDB`./src/eric/GUI/icons/themes/gray/addmacrofolder.png0000644000175000017500000000036111303422644021123 0ustar yvesyvesPNG  IHDRĴl;tEXtSoftwareAdobe ImageReadyqe<IDATxb?- fT JFA"C{{{1] ԎD?tii)m\LhoϟQ$f͚70`p 0ľ}F42l`[b &@ł j0hB/uIENDB`./src/eric/GUI/icons/themes/gray/backcontrols.gif0000644000175000017500000000005311303422644020620 0ustar yvesyvesGIF89a!,D;./src/eric/GUI/icons/themes/gray/addmacrofoldersel.png0000644000175000017500000000040711303422644021630 0ustar yvesyvesPNG  IHDRĴl;tEXtSoftwareAdobe ImageReadyqe<IDATxb?- fT JFA"C{{{1] ԎD?BBB5kbFFF}ERPeϟQ$lfff0[p!qaH6xŊpvDDطo3FBѯ `A@2 ,U CP$IENDB`./src/eric/GUI/icons/themes/gray/.cvsignore0000644000175000017500000000001211333271375017446 0ustar yvesyves.DS_Store ./src/eric/GUI/icons/themes/gray/createmacroover.png0000644000175000017500000000112111303422644021331 0ustar yvesyvesPNG  IHDR&GtEXtSoftwareAdobe ImageReadyqe<IDATxV;AȭGG FDЫ(5*V?H"4DW͙d΍uŽƗΞ͞3<ZAbrndYU*J_#_~D^. @NSy5*"&=+:!t: k4Nd20LZr)hX,HӲⴢ0>V8V+. KB>s^(a4xT)Qs?Ut:InT*%Z=#9v;{|>#C.>9'}&p81`6Qיv$zn, ɤl2 P})FMLDB(L^g[qTY^/6 Aԧ)F0::f3v"Klԋԛ~^)E"aTX,& کT*yZa JIENDB`./src/eric/GUI/icons/themes/gray/createmacrosel.png0000644000175000017500000000117211303422644021147 0ustar yvesyvesPNG  IHDR&GtEXtSoftwareAdobe ImageReadyqe<IDATx얽k"AC9+6 )),bemDR  &B$B$b X?:}v3Ã,Gwy} f-jf'ij=n_ R&KHZ;[4&ywϧ08<>޽bR Pj]=%Zz=~?'WTvYL&a6/[&㣜c|y A^\&f`h6 lNvQiф k&I~wR<$#ϽU1A^f3h4"H}Z X ~^c>##VEy?noU<~t nb\.vʞt曟h4RLdZ7Vj'']]z;&F 0 l}>+OUVHggX>=a%6^%[`tvzD:NUb^"s<@+EPFD"iS[OSxySY,5{_~ 0;jtYIENDB`./src/eric/GUI/icons/themes/gray/zreducebuttonover.png0000644000175000017500000000135711303422645021755 0ustar yvesyvesPNG  IHDR[tEXtSoftwareAdobe ImageReadyqe<IDATxĔ]O`Ϻ[I`2pPogp% Mt:o0e@@E l[֧Y$I49C 4πLHXZZƆu ǑL&H$ș"$IB$A0( R~O-,E$oݦ ˲;*04B31ԌP6>y _G!iHRF>m.ktpyyrÃ0{(`6YVZ:af.ãZ٧gpraeuȯ}lr{GF~0oIENDB`./src/eric/GUI/icons/themes/gray/zgrowbutton.png0000644000175000017500000000135611303422645020567 0ustar yvesyvesPNG  IHDR[tEXtSoftwareAdobe ImageReadyqe<IDATxڬKPǿIM󣚶jDpnk݆ew߆C|~>>:aB=h7taj6N(yͽ|={Y۶q5kP(|bZ"@6E.$sQzaZ$5A*KCAR! BǣvZEPU$BOEu@$"@<>~䛡OL *"666ܽd2l6\. 677MӐNH$=ET*LMMazzh<#\G=^CLݳ2ȿz dž; gvx -29:␦Mk=wϢ^8¥%u qlQ4 XE4Yq;Q֮PNU(2$i݄}ZMoٱ[gV,fFb 0RԦjk%b<;=~m+эTj=n(OX;>]qXY]e0M8p7ԕAd2i>_:~ 0<3IENDB`./src/eric/GUI/icons/themes/gray/zcborder.gif0000644000175000017500000000005311303422645017747 0ustar yvesyvesGIF89a!,D;./src/eric/GUI/icons/themes/gray/titlebar.gif0000644000175000017500000000014211303422645017742 0ustar yvesyvesGIF89a֣!,PM8a:!Gd;./src/eric/GUI/icons/themes/gray/renamemacrosel.png0000644000175000017500000000067411303422645021162 0ustar yvesyvesPNG  IHDRĴl;tEXtSoftwareAdobe ImageReadyqe<^IDATxU1@}  , =aGF @)iwЊX3#6X:#K&3K1~MlF%_L&8"5M: Pfɲ'1PI$y83o6,K\.n7mLS4MwҘVp~ K$It%8`-g qOm<Qqa\4f|߇(t:XnlW/jRi\8gV+N'ą1,nCףu▷ |T#K0 X,"JYl R)>Y[E5uSIENDB`./src/eric/GUI/icons/themes/gray/delmacro.png0000644000175000017500000000032411303422644017742 0ustar yvesyvesPNG  IHDR}\tEXtSoftwareAdobe ImageReadyqe<vIDATxb?-𲠽*UVV2,ۋǰAF 7}@s >Ÿ5k^31RPPPW۷oY@BA4jh5}-0\9IENDB`./src/eric/GUI/icons/themes/gray/rightcanvas.png0000644000175000017500000000015511303422645020470 0ustar yvesyvesPNG  IHDRwStEXtSoftwareAdobe ImageReadyqe<IDATxbXv-@/IENDB`./src/eric/GUI/icons/themes/gray/leftcanvas.png0000644000175000017500000000015511303422644020304 0ustar yvesyvesPNG  IHDRwStEXtSoftwareAdobe ImageReadyqe<IDATxbXv-@/IENDB`./src/eric/GUI/icons/themes/gray/macrospanelback.gif0000644000175000017500000000015411303422645021264 0ustar yvesyvesGIF89a!,CT‰,cyhY ۺ5PED1140_#D@A |!AP4ݙe0\@MuzNWUC[^̈7OV3U=ժ]T*S3F_@ B0v;t:iz=1FQwF#LSl6$I'q-b.KvnBASܛ,Ld"qrznh6"kZbT*%t1S(c|Vv|^1 LF~_7q^Q.|>-19ya2. BrA`0x|H$~/, gH~ҖJ%[V>Ol6lZfLPFqFg?FT,OE^./3yIENDB`./src/eric/GUI/icons/themes/gray/tabbar.gif0000644000175000017500000000015011321616450017365 0ustar yvesyvesGIF89a ң!, Rr1V6BM,(@@;./src/eric/GUI/icons/themes/gray/.DS_Store0000644000175000017500000001400411333272417017135 0ustar yvesyvesBud1%  @ @ @ @ E%DSDB` @ @ @./src/eric/GUI/icons/themes/gray/menubar.gif0000644000175000017500000000014011303422645017563 0ustar yvesyvesGIF89aȾttt!, !F*(eL8"D;./src/eric/GUI/icons/themes/gray/verticalseparator.png0000644000175000017500000000015511303422645021711 0ustar yvesyvesPNG  IHDRwStEXtSoftwareAdobe ImageReadyqe<IDATxbXv-@/IENDB`./src/eric/GUI/icons/themes/gray/zoombox.png0000644000175000017500000000032711303422645017655 0ustar yvesyvesPNG  IHDR"tEXtSoftwareAdobe ImageReadyqe<yIDATxI P=q{_.:] FP @p%`+R Fֺn X]!(sƳ-cι 1Z(/c-߻Yhc>!SXoc/YU۾eIENDB`./src/eric/GUI/icons/themes/gray/zgrowbuttonover.png0000644000175000017500000000137311303422645021462 0ustar yvesyvesPNG  IHDR[tEXtSoftwareAdobe ImageReadyqe<IDATxTKOQn_c0m)R-[MC5q)B\71uM" @Hة3}v ,Xx&;ߜss/QUgiTJM&Fqq丒:99  L&I0::qrb-<~ @{0ԣe{/CzФij{Hׂ׫bZV.< *:3{-`!*]@~kMbJ 鴾33<0,(W*2eR N}P ޏ/h`6 Rd/ފ`}s+ !pSea05>Uf(xXWy?;callL#6LMj%1Td%(6Lct o[c9 .ZFiFSm"˨sU_;A4u(+cpj l88' ZCF#O5jvyXLx42|PkoŒ\+FȉGF~]`}Z)۴+kӎOS-,.7hn>á_}O.׊_IENDB`./src/eric/GUI/icons/themes/gray/zclosebuttonover.png0000644000175000017500000000140711303422645021607 0ustar yvesyvesPNG  IHDR[tEXtSoftwareAdobe ImageReadyqe<IDATxTKOQ=#eԶ)ТI51&,Hc" 5YCXJ"aa4&X#)jL,"<v̒‚_ru9߽$ GipV^*Ťh4I$ x  buL1ʃR$`nW+++&0͆,BWR6Xf%Nу+9d|6 ^4"h+i/X=ȹrMISSSHoQ7Y@">z ~;LF#Vss,a0xYʖij _D&A]2Ey 4ЈY޾fR[ = hmk'@(}]਱vOJEk4l((X}%:Nrm1Rw+}AVԡ?AȉDNY~c4Ӂ,*(G5%`i5 F>PqD 26<ܤ|jZK#G6:ҒEOu4աl,8OjV82<2*V3DFՔ)w"vJ-V#􆟌H*N&85 eOb9Մ̡޲l3W "6BTD皛y9W_Cy1 EQ@eP%dbMy^eTc@(c~>01d,d$~rS~_=IENDB`./src/eric/GUI/icons/themes/gray/PaletteTitleBarN.png0000644000175000017500000000037711303422644021327 0ustar yvesyvesPNG  IHDR)tEXtSoftwareAdobe ImageReadyqe<IDATxK E3ڎp±q N2!^@W$.)k0.c "1ι#F!\h#(wڨ FXj #F)%DK >FJ˽Z毿W6iK%Cه~9}xgyexz`ø.IENDB`./src/eric/GUI/icons/themes/gray/delmacrosel.png0000644000175000017500000000034011303422644020444 0ustar yvesyvesPNG  IHDR}\tEXtSoftwareAdobe ImageReadyqe<IDATxb?-𲠽*UVV2,ۋǰAF 7}@s >߿b .$t3Xo( h '=f;IENDB`./src/eric/GUI/icons/themes/gray/PaletteTitleBarH.png0000644000175000017500000000040711303422644021313 0ustar yvesyvesPNG  IHDR)tEXtSoftwareAdobe ImageReadyqe<IDATx Eeb+DCD%TAlL$ UindexUwidthYascendingd BCDEF UindexUwidthYascendings JKLMN UindexUwidthYascendingK RSTUVW UindexUwidthYascendingWvisible, [\]^_ UindexUwidthYascending##@(#\dateModified &8LTfo  )/5?GILMNW]cmoqrs|&(*+,5;AKSUXYZcioy{}~ggraybwspblobbplist00  \WindowBounds[ShowSidebar]ShowStatusBar[ShowPathbar[ShowToolbar\SidebarWidth_{{456, 45}, {1224, 859}./src/eric/GUI/.DS_Store0000644000175000017500000003600411362637252013603 0ustar yvesyvesBud1 sbwspblobiconsbwspblobbplist00  \WindowBounds[ShowSidebar]ShowStatusBar[ShowPathbar[ShowToolbar\SidebarWidth_{{554, 283}, {916, 591}}  ".K @A C WvisibleUwidth ,  G I #@x#@(# #@02DX`r{ "*0:@ADEGPQSTV_`bcenoqrt}~O  @ @ @ @ E DSDB ` @ @ @ng#@]#@(#Tname#@00BV^py !'-7?ADEFOU[egijktz "#$-39CKMPQR[agqsuvwg E DSDB `(0@ @ @usBar[ShowPathbar[ShowToolbar\SidebarWidth_{{470, 219}, {984, 779}}  ". UindexUwidthYascendingd BCDEF UindexUwidthYascendings JKLMN UindexUwidthYascendingK RSTUVW UindexUwidthYascendingWvisible, [\]^_ UindexUwidthYascendi./src/eric/JGlobalPreferencesDlog.form0000644000175000017500000002435111310111150016636 0ustar yvesyves

./src/eric/JColors.java0000644000175000017500000000156111302722200013670 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric; import java.awt.Color; /** * * @author erichake */ public class JColors { public Color C; public String S; public JColors(final Color c, final String s) { C = c; S = s; } } ./src/eric/JCharacterPalette.java0000644000175000017500000002670211360560753015667 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric; import eric.GUI.palette.PaletteManager; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Graphics2D; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JPanel; import javax.swing.JSeparator; import javax.swing.SwingConstants; import rene.gui.Global; /** * * @author erichake */ class JCharacterPalette extends JDialog implements MouseListener { /** * */ static int GENERICCODE=10; JPanel Content, TabZone, ButtonZone; JButton LBL; JZirkelCanvas JZF; int Linemax=10; int Btnsize=18; int Tabbtnsize=30; public JCharacterPalette(final JZirkelCanvas jzf, final JButton lbl) { // super(jzf.JPM.MainPalette,true); super(); JZF=jzf; LBL=lbl; JTabBtn.Btns.clear(); setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE); setTitle("Caracter Palette"); this.setUndecorated(true); Content=new JContent(Tabbtnsize); // Content.setLayout(new BoxLayout(Content,BoxLayout.X_AXIS)); // Content.setBackground(new Color(50,50,50)); // Content.setBorder(BorderFactory.createLineBorder(new // Color(0,0,0),1)); this.setContentPane(Content); this.setAlwaysOnTop(true); this.toFront(); ButtonZone=getnewcol(); TabZone=getnewcol(); TabZone.setOpaque(false); initJTab(); initJButtons(); Content.add(TabZone); Content.add(ButtonZone); this.addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mousePressed(final java.awt.event.MouseEvent evt) { JZF.getPointLabel().setEnabledJLabel(true); setVisible(false); dispose(); } }); this.addWindowListener(new java.awt.event.WindowAdapter() { @Override public void windowDeactivated(final java.awt.event.WindowEvent evt) { JZF.getPointLabel().setEnabledJLabel(true); setVisible(false); dispose(); } }); this.pack(); // JPointLabel.fixsize(Content,Content.getSize().width+1,Content.getSize().height+1); // JPointLabel.fixsize(titles,this.getSize().width,20); // this.pack(); final int x=LBL.getLocationOnScreen().x+LBL.getSize().width-this.getSize().width; final int y=LBL.getLocationOnScreen().y+LBL.getSize().height; this.setLocation(x, y); JZF.getPointLabel().setEnabledJLabel(false); this.setVisible(true); } private JPanel initJTab() { JPanel col=null; JButton mybtn=null; col=new JPanel(); col.setLayout(new BoxLayout(col, BoxLayout.Y_AXIS)); col.setAlignmentY(0f); mybtn=new JTabBtn(this, 0, "D"); JPointName.fixsize(mybtn, Tabbtnsize, Tabbtnsize); col.add(mybtn); mybtn=new JTabBtn(this, 1, "d"); JPointName.fixsize(mybtn, Tabbtnsize, Tabbtnsize); col.add(mybtn); mybtn=new JTabBtn(this, 2, "\u0394"); JPointName.fixsize(mybtn, Tabbtnsize, Tabbtnsize); col.add(mybtn); mybtn=new JTabBtn(this, 3, "\u03B4"); JPointName.fixsize(mybtn, Tabbtnsize, Tabbtnsize); col.add(mybtn); mybtn=new JTabBtn(this, GENERICCODE, "P1"); JPointName.fixsize(mybtn, Tabbtnsize, Tabbtnsize); col.add(mybtn); col.setOpaque(false); JTabBtn.setSelectedJTitle(JZF.getPointLabel().getCurrentLetterSetCode()); TabZone.add(col); // JPointLabel.fixsize(TabZone,Tabwidth,50); return col; } private JButton getJButton(final String s) { final JButton mybtn=new JButton(s); mybtn.setBorder(BorderFactory.createEmptyBorder()); mybtn.setBorderPainted(false); mybtn.setFocusPainted(false); mybtn.setFocusable(false); mybtn.setBackground(new Color(228, 222, 255)); mybtn.setOpaque(false); mybtn.setContentAreaFilled(false); if (JZF.getPointLabel().isLetterAccepted(mybtn.getText())) { mybtn.addMouseListener(this); } else { mybtn.setEnabled(false); mybtn.addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mousePressed(final java.awt.event.MouseEvent evt) { JZF.getPointLabel().setEnabledJLabel(true); setVisible(false); dispose(); } }); } mybtn.setFont(new java.awt.Font(Global.GlobalFont, 1, 11)); mybtn.setForeground(new Color(20, 20, 20)); JPointName.fixsize(mybtn, 18, 18); return mybtn; } private static JPanel getnewline() { final JPanel line=new JPanel(); line.setLayout(new BoxLayout(line, BoxLayout.X_AXIS)); line.setAlignmentX(0f); line.setOpaque(false); return line; } private static JPanel getnewcol() { final JPanel col=new JPanel(); col.setLayout(new BoxLayout(col, BoxLayout.Y_AXIS)); col.setAlignmentY(0f); col.setOpaque(true); col.setBackground(new Color(250, 250, 250)); return col; } void initJButtons() { JPanel line=null; final String letters=JZF.getPointLabel().getCurrentLetterSet(); ButtonZone.removeAll(); for (int i=0; i(); int SetCode=0; JCharacterPalette JCP; public JTabBtn(final JCharacterPalette jcp, final int code, final String s) { SetCode=code; JCP=jcp; setBorder(BorderFactory.createEmptyBorder()); setBorderPainted(false); setFocusPainted(false); setFocusable(false); // setBackground(new Color(240,240,240)); setOpaque(false); setContentAreaFilled(false); setHorizontalAlignment(SwingConstants.CENTER); setFont(new java.awt.Font(Global.GlobalFont, 1, 13)); addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mouseReleased(final java.awt.event.MouseEvent evt) { if (SetCode==JCharacterPalette.GENERICCODE) { Global.setParameter("options.point.shownames", false); JCP.JZF.getPointLabel().getBetterName(null, true); JCP.dispose(); return; } JCP.JZF.getPointLabel().setLetterSet(SetCode); JCP.initJButtons(); disableAllJTitles(); setEnabled(true); JCP.pack(); JCP.repaint(); } }); setText(s); Btns.add(this); } static void disableAllJTitles() { for (int i=0; i. */ package eric.controls; import java.awt.Color; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JTextField; import rene.util.xml.XmlWriter; import rene.zirkel.ZirkelCanvas; import rene.zirkel.objects.ExpressionObject; import rene.gui.Global; /** * * @author erichake */ public class JCanvasTxtfield extends JCanvasPanel { /** * */ private static final long serialVersionUID = 1L; MyJTextField JCB; Color errColor = new Color(201, 68, 27); Color goodColor = new Color(50, 50, 50); public JCanvasTxtfield(final ZirkelCanvas zc, final ExpressionObject o) { super(zc, o); JSL = new MyJTextField(); JCB = (MyJTextField) JSL; JCB.addKeyListener(new KeyAdapter() { @Override public void keyPressed(final KeyEvent e) { } @Override public void keyReleased(final KeyEvent e) { setVal(Global.Comma_To_Point(JCB.getText(), O .getConstruction(), true)); if (O.getExp().isValid()) { JCB.setForeground(goodColor); } else { JCB.setForeground(errColor); } } }); JCB.addFocusListener(new FocusAdapter() { @Override public void focusGained(final FocusEvent e) { JCB.selectAll(); } @Override public void focusLost(final FocusEvent e) { } }); JCB.addMouseListener(this); JCB.addMouseMotionListener(this); JCB.addMouseListener(new MouseAdapter() { @Override public void mousePressed(final MouseEvent e) { if (isEditMode()) { JCB.setFocusable(false); JCB.setEnabled(false); } } @Override public void mouseReleased(final MouseEvent e) { if (!JCB.isEnabled()) { JCB.setEnabled(true); JCB.setFocusable(true); } } }); showval = false; showunit = false; showcom = true; setComment(O.getName() + " = "); setVal(1); JCB.setText("1"); JCB.setForeground(goodColor); this.add(JCPlabel); this.add(JCB); this.add(JCPresize); zc.add(this); } @Override public double getVal() { return (Double.valueOf(JCB.getText())); } class MyJTextField extends JTextField { /** * */ private static final long serialVersionUID = 1L; JTextField jtf; MyJTextField() { super(); } } @Override public void PrintXmlTags(final XmlWriter xml) { xml.startTagStart("CTRLtxtfield"); super.PrintXmlTags(xml); xml.printArg("txt", "" + JCB.getText()); xml.finishTagNewLine(); } } ./src/eric/controls/JCanvasButton.java0000644000175000017500000000515311303263516016715 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric.controls; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import rene.util.xml.XmlWriter; import rene.zirkel.ZirkelCanvas; import rene.zirkel.objects.ExpressionObject; /** * * @author erichake */ public class JCanvasButton extends JCanvasPanel { /** * */ private static final long serialVersionUID = 1L; MyJButton JCB; public JCanvasButton(final ZirkelCanvas zc, final ExpressionObject o) { super(zc, o); JSL = new MyJButton(); JCB = (MyJButton) JSL; JCB.addMouseListener(this); JCB.addMouseMotionListener(this); JCB.addMouseListener(new MouseAdapter() { @Override public void mousePressed(final MouseEvent e) { if (isEditMode()) { JCB.setEnabled(false); } } @Override public void mouseReleased(final MouseEvent e) { JCB.setEnabled(true); if (getVal() == 0) setVal(1); else setVal(0); } }); showval = false; showunit = false; showcom = false; setComment("ok"); setVal(0); this.add(JCPlabel); this.add(JCB); this.add(JCPresize); zc.add(this); } @Override public void setComment(final String s) { lbl_com = s; JCPlabel.setText(goodLabel()); if (showcom) { JCB.setText(""); } else { JCB.setText(s); } setDims(); } @Override public void setShowComment(final boolean b) { showcom = b; JCPlabel.setText(goodLabel()); if (showcom) { JCB.setText(""); } else { JCB.setText(lbl_com); } setDims(); } @Override public double getVal() { double s; try { s = O.getValue(); } catch (final Exception ex) { s = 0; } return s; } class MyJButton extends JButton { /** * */ private static final long serialVersionUID = 1L; MyJButton() { super(); setFocusable(false); setOpaque(false); } } @Override public void PrintXmlTags(final XmlWriter xml) { xml.startTagStart("CTRLbutton"); super.PrintXmlTags(xml); xml.finishTagNewLine(); } } ./src/eric/controls/JControlsManager.java0000644000175000017500000004032111364766503017413 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric.controls; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.awt.image.FilteredImageSource; import java.awt.image.ImageFilter; import java.util.ArrayList; import javax.swing.GrayFilter; import javax.swing.ImageIcon; import rene.util.xml.XmlTag; import rene.util.xml.XmlWriter; import rene.zirkel.ZirkelCanvas; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.TextObject; import eric.GUI.palette.PaletteManager; import eric.JZirkelCanvas; import eric.bar.JPropertiesBar; import rene.gui.Global; import rene.zirkel.objects.ConstructionObject; /** * * @author erichake */ public class JControlsManager { static Color bordercolor1=new Color(80, 80, 80); static Color bordercolor2=new Color(180, 180, 250); static int MAGNET=10; ZirkelCanvas ZC; ArrayList CPs=new ArrayList(); Rectangle r=new Rectangle(); Rectangle r2=new Rectangle(); ArrayList XmlTags=new ArrayList(); public JControlsManager(final ZirkelCanvas zc) { ZC=zc; } public void addControl(final JCanvasPanel jcp, final boolean editme, final int x, final int y, final int w, final int h) { jcp.setDims(x, y, w, h); CPs.add(jcp); ZC.add(jcp); showHandles(jcp); ZC.revalidate(); if (editme) { JPropertiesBar.EditObject(jcp); } } public JCanvasCheckBox addChkBox(final ExpressionObject o, final int x, final int y, final int w, final int h) { final JCanvasCheckBox jcb=new JCanvasCheckBox(ZC, o); addControl(jcb, o==null, x, y, w, h); return jcb; } public JCanvasButton addButton(final ExpressionObject o, final int x, final int y, final int w, final int h) { final JCanvasButton jcb=new JCanvasButton(ZC, o); addControl(jcb, o==null, x, y, w, h); return jcb; } public JCanvasTxtfield addTxtField(final ExpressionObject o, final int x, final int y, final int w, final int h) { final JCanvasTxtfield jcb=new JCanvasTxtfield(ZC, o); addControl(jcb, o==null, x, y, w, h); return jcb; } public JCanvasSlider addSlider(final ExpressionObject o, final int x, final int y, final int w, final int h) { final JCanvasSlider jcs=new JCanvasSlider(ZC, o, -5, 5, -2); addControl(jcs, o==null, x, y, w, h); return jcs; } public JCanvasPopup addPopup(final ExpressionObject o, final int x, final int y, final int w, final int h) { final JCanvasPopup jcp=new JCanvasPopup(ZC, o); addControl(jcp, o==null, x, y, w, h); return jcp; } public void analyseResize(final JCanvasPanel jp) { r=jp.getBounds(r); for (int i=0; i1) { JCanvasPanel jp=(JCanvasPanel) CPs.get(0); jp.setComment(Global.Loc("canvas.3D.floor")); jp=(JCanvasPanel) CPs.get(1); jp.setComment(Global.Loc("canvas.3D.system")); final TextObject t=(TextObject) ZC.getConstruction().find("Text2"); if (t!=null) { t.setLines(Global.Loc("canvas.3D.rightclic")); } } } public void collectXmlTag(final XmlTag tag) { XmlTags.add(tag); } public void readXmlTags() { for (int i=0; i0) { XmlTags.clear(); hideHandles(null); } } } ./src/eric/controls/SliderSnap.java0000644000175000017500000002156311302562341016240 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric.controls; import java.awt.EventQueue; import java.awt.event.HierarchyEvent; import java.awt.event.HierarchyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import javax.swing.JComponent; import javax.swing.JSlider; import javax.swing.UIDefaults; import javax.swing.UIManager; import javax.swing.event.MouseInputAdapter; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicSliderUI; public class SliderSnap extends BasicSliderUI { /** * The UI class implements the current slider Look and Feel. */ private static Class sliderClass; private static Method xForVal, yForVal; private static ReinitListener reinitListener = new ReinitListener(); public SliderSnap() { super(null); } /** * Returns the UI as normal, but intercepts the call, so a listener can be * attached. */ public static ComponentUI createUI(final JComponent c) { if (c == null || sliderClass == null) return null; final UIDefaults defaults = UIManager.getLookAndFeelDefaults(); try { Method m = (Method) defaults.get(sliderClass); if (m == null) { m = sliderClass.getMethod("createUI", new Class[] { JComponent.class }); defaults.put(sliderClass, m); } final ComponentUI uiObject = (ComponentUI) m.invoke(null, new Object[] { c }); if (uiObject instanceof BasicSliderUI) c.addHierarchyListener(new MouseAttacher()); return uiObject; } catch (final Exception e) { throw new RuntimeException(e); } } public static void init() { // check we don't initialise twice if (sliderClass != null) return; final Init init = new Init(); if (EventQueue.isDispatchThread()) { init.run(); } else { // This code must run on the EDT for data visibility try { EventQueue.invokeAndWait(init); } catch (final Exception e) { throw new RuntimeException(e); } } } /** * Listeners for when the JSlider becomes visible then attaches the mouse * listeners, then removes itself. */ private static class MouseAttacher implements HierarchyListener { public void hierarchyChanged(final HierarchyEvent evt) { final long flags = evt.getChangeFlags(); if ((flags & HierarchyEvent.DISPLAYABILITY_CHANGED) > 0 && evt.getComponent() instanceof JSlider) { final JSlider c = (JSlider) evt.getComponent(); c.removeHierarchyListener(this); attachTo(c); } } } /** * Listens for Look and Feel changes and re-initialises the class. */ private static class ReinitListener implements PropertyChangeListener { public void propertyChange(final PropertyChangeEvent evt) { if ("lookAndFeel".equals(evt.getPropertyName())) { // The look and feel was changed so we need to re-insert // Our hook into the new UIDefaults map sliderClass = null; xForVal = yForVal = null; UIManager.removePropertyChangeListener(reinitListener); init(); } } } /** * Initialises the reflective methods and adjusts the current Look and Feel. */ private static class Init implements Runnable { public void run() { try { final UIDefaults defaults = UIManager.getLookAndFeelDefaults(); sliderClass = defaults.getUIClass("SliderUI"); // Set up two reflective method calls xForVal = BasicSliderUI.class.getDeclaredMethod( "xPositionForValue", new Class[] { int.class }); yForVal = BasicSliderUI.class.getDeclaredMethod( "yPositionForValue", new Class[] { int.class }); // Allow us access to the methods xForVal.setAccessible(true); yForVal.setAccessible(true); // Replace UI class with ourselves defaults.put("SliderUI", SliderSnap.class.getName()); UIManager.addPropertyChangeListener(reinitListener); } catch (final Exception e) { sliderClass = null; xForVal = yForVal = null; } } } /** * Called to attach mouse listeners to the JSlider. */ private static void attachTo(final JSlider c) { final MouseMotionListener[] listeners = c.getMouseMotionListeners(); for (final MouseMotionListener m : listeners) { if (m instanceof TrackListener) { c.removeMouseMotionListener(m); // remove original final SnapListener listen = new SnapListener(m, (BasicSliderUI) c.getUI(), c); c.addMouseMotionListener(listen); c.addMouseListener(listen); c.addPropertyChangeListener("UI", listen); } } } private static class SnapListener extends MouseInputAdapter implements PropertyChangeListener { private final MouseMotionListener delegate; /** * Original Look and Feel implementation */ private final BasicSliderUI ui; /** * Our slider */ private final JSlider slider; /** * Offset of mouse click from centre of slider thumb */ private int offset; public SnapListener(final MouseMotionListener delegate, final BasicSliderUI ui, final JSlider slider) { this.delegate = delegate; this.ui = ui; this.slider = slider; } /** * UI can change at any point, so we need to listen for these events. */ public void propertyChange(final PropertyChangeEvent evt) { if ("UI".equals(evt.getPropertyName())) { // Remove old listeners and create new ones slider.removeMouseMotionListener(this); slider.removeMouseListener(this); slider.removePropertyChangeListener("UI", this); attachTo(slider); } } /** * Implements the actual "snap while dragging" behaviour. If snap to * ticks is enabled on this slider, then the location for the nearest * tick/label is calculated and the click location is translated before * being passed to the delegate. */ @Override public void mouseDragged(final MouseEvent evt) { if (slider.getSnapToTicks()) { // if we are set to snap final int pos = getLocationForValue(getSnappedValue(evt)); // if above call fails and returns -1, take no action if (pos > -1) { if (slider.getOrientation() == JSlider.HORIZONTAL) evt.translatePoint(pos - evt.getX() + offset, 0); else evt.translatePoint(0, pos - evt.getY() + offset); } } delegate.mouseDragged(evt); } /** * When the slider is clicked we need to record the offset from thumb * center. */ @Override public void mousePressed(final MouseEvent evt) { final int pos = (slider.getOrientation() == JSlider.HORIZONTAL) ? evt .getX() : evt.getY(); final int loc = getLocationForValue(getSnappedValue(evt)); this.offset = (loc < 0) ? 0 : pos - loc; } /* Pass straight to delegate. */ @Override public void mouseMoved(final MouseEvent evt) { delegate.mouseMoved(evt); } /** * Calculates the nearest snapable value given a MouseEvent. Code * adapted from BasicSliderUI. */ public int getSnappedValue(final MouseEvent evt) { final int value = slider.getOrientation() == JSlider.HORIZONTAL ? ui .valueForXPosition(evt.getX()) : ui.valueForYPosition(evt.getY()); // Now calculate if we should adjust the value int snappedValue = value; int tickSpacing = 0; final int majorTickSpacing = slider.getMajorTickSpacing(); final int minorTickSpacing = slider.getMinorTickSpacing(); if (minorTickSpacing > 0) tickSpacing = minorTickSpacing; else if (majorTickSpacing > 0) tickSpacing = majorTickSpacing; // If it's not on a tick, change the value if (tickSpacing != 0) { if ((value - slider.getMinimum()) % tickSpacing != 0) { final float temp = (float) (value - slider.getMinimum()) / (float) tickSpacing; snappedValue = slider.getMinimum() + (Math.round(temp) * tickSpacing); } } return snappedValue; } /** * Provides the x or y co-ordinate for a slider value, depending on * orientation. */ public int getLocationForValue(final int value) { try { // Reflectively call slider ui code final Method m = slider.getOrientation() == JSlider.HORIZONTAL ? xForVal : yForVal; final Integer result = (Integer) m.invoke(ui, new Object[] { new Integer(value) }); return result.intValue(); } catch (final InvocationTargetException e) { return -1; } catch (final IllegalAccessException e) { return -1; } } } }./src/eric/controls/JCanvasCheckBox.java0000644000175000017500000000511311303263517017125 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric.controls; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JCheckBox; import rene.gui.Global; import rene.util.xml.XmlWriter; import rene.zirkel.ZirkelCanvas; import rene.zirkel.objects.ExpressionObject; /** * * @author erichake */ public class JCanvasCheckBox extends JCanvasPanel implements ItemListener { /** * */ private static final long serialVersionUID = 1L; MyJCheckBox JCB; public JCanvasCheckBox(final ZirkelCanvas zc, final ExpressionObject o) { super(zc, o); JSL = new MyJCheckBox(); JCB = (MyJCheckBox) JSL; // JCanvasPanel.fixsize(JCB, 50, 22); JCB.addMouseListener(this); JCB.addMouseMotionListener(this); JCB.addItemListener(this); JCB.addMouseListener(new MouseAdapter() { @Override public void mousePressed(final MouseEvent e) { if (isEditMode()) { JCB.setEnabled(false); } } @Override public void mouseReleased(final MouseEvent e) { JCB.setEnabled(true); } }); this.add(JCB); showval = false; showunit = false; showcom = true; String s = Global.Loc("props.expl"); s = s.trim(); s = s.replace(":", ""); s = s.trim(); setComment(s); setVal(0); this.add(JCPlabel); this.add(JCPresize); zc.add(this); } @Override public double getVal() { final double s = JCB.isSelected() ? 1 : 0; return s; } class MyJCheckBox extends JCheckBox { /** * */ private static final long serialVersionUID = 1L; MyJCheckBox() { super(); setFocusable(false); setOpaque(false); } } public void itemStateChanged(final ItemEvent arg0) { try { final int s = JCB.isSelected() ? 1 : 0; setVal(s); } catch (final Exception ex) { } } @Override public void PrintXmlTags(final XmlWriter xml) { xml.startTagStart("CTRLcheckbox"); super.PrintXmlTags(xml); xml.finishTagNewLine(); } } ./src/eric/controls/JCanvasPopup.java0000644000175000017500000000744611303263516016554 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric.controls; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.DefaultComboBoxModel; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.plaf.ComboBoxUI; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.metal.MetalComboBoxUI; import rene.gui.Global; import rene.util.xml.XmlWriter; import rene.zirkel.ZirkelCanvas; import rene.zirkel.objects.ExpressionObject; /** * * @author erichake */ public class JCanvasPopup extends JCanvasPanel implements ActionListener { /** * */ private static final long serialVersionUID = 1L; MyJComboBox JCB; public JCanvasPopup(final ZirkelCanvas zc, final ExpressionObject o) { super(zc, o); JSL = new MyJComboBox(); JCB = (MyJComboBox) JSL; JCB.setUI((ComboBoxUI) MyComboBoxUI.createUI(JCB)); // JCanvasPanel.fixsize(JCB, 100, 18); // addMouseEvents(); JCB.addMouseListener(this); JCB.addMouseMotionListener(this); JCB.addMouseListener(new MouseAdapter() { @Override public void mousePressed(final MouseEvent e) { if (isEditMode()) { JCB.hidePopup(); } } }); addMouseEvents(); JCB.addActionListener(this); showval = false; showunit = false; showcom = true; setComment(Global.Loc("props.expl") + " "); setVal(1); this.add(JCPlabel); this.add(JCB); this.add(JCPresize); zc.add(this); } static class MyComboBoxUI extends MetalComboBoxUI { public static ComponentUI createUI(final JComponent c) { return new MyComboBoxUI(); } } public void addMouseEvents() { for (int i = 0; i < JCB.getComponentCount(); i++) { JCB.getComponent(i).addMouseListener(new MouseAdapter() { @Override public void mousePressed(final MouseEvent e) { if (isEditMode()) { JCB.hidePopup(); } } }); JCB.getComponent(i).addMouseListener(this); JCB.getComponent(i).addMouseMotionListener(this); } } public String getItems() { String s = ""; for (int i = 0; i < JCB.getItemCount() - 1; i++) { s += JCB.getItemAt(i) + "\n"; } s += JCB.getItemAt(JCB.getItemCount() - 1); return s; } public void setItems(final String s) { JCB.removeAllItems(); final String[] itms = s.split("\n"); for (final String itm : itms) { JCB.addItem(itm); } setDims(); } @Override public double getVal() { return (JCB.getSelectedIndex() + 1); } class MyJComboBox extends JComboBox { /** * */ private static final long serialVersionUID = 1L; MyJComboBox() { super(); setFocusable(false); setModel(new DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3" })); } } public void actionPerformed(final ActionEvent e) { if (e.getSource() == JCB) { final int selectedIndex = JCB.getSelectedIndex() + 1; try { setVal(selectedIndex); } catch (final Exception ex) { } } } @Override public void PrintXmlTags(final XmlWriter xml) { xml.startTagStart("CTRLpopup"); super.PrintXmlTags(xml); final String s = getItems().replace("\n", "@@@"); xml.printArg("Items", "" + s); xml.finishTagNewLine(); } } ./src/eric/controls/JCanvasPanel.java0000644000175000017500000003552711345253317016515 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric.controls; import eric.GUI.palette.PaletteManager; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Toolkit; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionAdapter; import java.awt.event.MouseMotionListener; import java.awt.geom.Rectangle2D; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import rene.gui.Global; import rene.util.xml.XmlWriter; import rene.zirkel.ZirkelCanvas; import rene.zirkel.objects.ExpressionObject; import eric.JPointName; import eric.JZirkelCanvas; import eric.bar.JPropertiesBar; import java.awt.Image; import java.awt.image.BufferedImage; import java.awt.image.FilteredImageSource; import java.awt.image.ImageFilter; import javax.swing.GrayFilter; /** * * @author erichake */ public class JCanvasPanel extends JPanel implements MouseListener, MouseMotionListener, ChangeListener { /** * */ private static final long serialVersionUID=1L; ImageIcon ctrlresizeicon=new ImageIcon(getClass().getResource( "/eric/GUI/icons/palette/ctrl_resize.png")); static int COMFONTSIZE=14; static int COMSIZE=50; static Color COMCOLOR=new Color(80, 80, 80); JComponent JSL; String lbl_com="", lbl_val="", lbl_unit="°"; boolean showcom=true, showval=true, showunit=false; JLabel JCPlabel=new JLabel(); JButton JCPresize=new JButton(); // int W, H; ZirkelCanvas ZC; public ExpressionObject O; boolean hidden=false; private boolean showborder1=false; private boolean showborder2=false; private boolean showhandle=false; private MouseEvent pressed; private Point location; private final DecimalFormat decFormat; public void paint(Graphics g) { Graphics2D g2D=null; BufferedImage sprite=null; if ((!isHidden())||(ZC.getShowHidden())) { sprite=new BufferedImage(getSize().width, getSize().height, BufferedImage.TYPE_INT_ARGB); g2D=sprite.createGraphics(); // super.paintChildren(g2D); super.paint(g2D); } if ((isHidden())&&(ZC.getShowHidden())) { final ImageFilter filter=new GrayFilter(true, 60); final Image disImage=this.createImage(new FilteredImageSource( sprite.getSource(), filter)); final ImageIcon myicn=new ImageIcon(disImage); g2D.drawImage(myicn.getImage(), 0, 0, getSize().width, getSize().height, this); } if (sprite!=null) { ZC.I.getGraphics().drawImage(sprite, getLocation().x, getLocation().y, this); } // when mouseentered : final Dimension d=getSize(); if (showhandle) { final Graphics2D g2d=(Graphics2D) g; final Rectangle2D rectangle=new Rectangle2D.Double(0, 0, d.width-8, d.height-1); g2d.setColor(new Color(119, 136, 153)); g2d.setStroke(new BasicStroke(1f, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_BEVEL, 1f, new float[]{2f}, 0f)); g2d.draw(rectangle); g.drawImage(ctrlresizeicon.getImage(), d.width-12, d.height/2-4, this); } else { if (showborder1) { g.setColor(JControlsManager.bordercolor1); g.drawRect(0, 0, d.width-8, d.height-1); } else if (showborder2) { g.setColor(JControlsManager.bordercolor2); g.drawRect(0, 0, d.width-8, d.height-1); } } } @Override public void paintComponent(final Graphics g) { } // withoutExpr unused, just to make another constructor : public JCanvasPanel(final ZirkelCanvas zc, final ExpressionObject o) { super(); ZC=zc; O=(o==null)?createExpression():o; this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); this.setOpaque(false); this.addMouseListener(this); this.addMouseMotionListener(this); JCPlabel.setHorizontalAlignment(SwingConstants.LEFT); JCPlabel.setFont(new Font(Global.GlobalFont, 0, COMFONTSIZE)); JCPlabel.setForeground(COMCOLOR); // JCPresize.setIcon(ctrlresizeicon); JCPresize.setOpaque(false); JCPresize.setContentAreaFilled(false); JCPresize.setBorder(BorderFactory.createEmptyBorder()); JCPresize.setCursor(new Cursor(Cursor.E_RESIZE_CURSOR)); JCPresize.addMouseListener(new MouseAdapter() { @Override public void mousePressed(final MouseEvent me) { pressed=me; } @Override public void mouseReleased(final MouseEvent me) { ZC.JCM.hideBorders((JCanvasPanel) ((JComponent) me.getSource()).getParent()); } }); JCPresize.addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseDragged(final MouseEvent me) { final int w=JSL.getSize().width+me.getX(); setDims(w-pressed.getX(), getSize().height); ZC.JCM.analyseResize((JCanvasPanel) ((JComponent) me.getSource()).getParent()); } }); decFormat=new DecimalFormat(); final DecimalFormatSymbols dfs=new DecimalFormatSymbols(); dfs.setDecimalSeparator('.'); decFormat.setDecimalFormatSymbols(dfs); } private ExpressionObject createExpression() { final ExpressionObject o=new ExpressionObject(ZC.getConstruction(), 0, 0); o.setDefaults(); o.setSuperHidden(true); o.setOwnedByControl(true); ZC.getConstruction().add(o); if (JZirkelCanvas.getCurrentJZF()!=null) { final int i=JZirkelCanvas.getCurrentJZF().getPointLabel().getCurrentLetterSetCode(); final boolean b=Global.getParameter("options.point.shownames", false); Global.setParameter("options.point.shownames", true); final String s=JZirkelCanvas.getCurrentJZF().getPointLabel().setLetterSet(JPointName.minLettersSetCode); Global.setParameter("options.point.shownames", b); JZirkelCanvas.getCurrentJZF().getPointLabel().setLetterSet(i); o.setName(s); } return o; } public int StringwWidth(final String s) { // FontMetrics fm = getFontMetrics(getFont()); final FontMetrics fm=getFontMetrics(new Font(Global.GlobalFont, 0, COMFONTSIZE)); return fm.stringWidth(s); } // MUST BE OVERRIDE : public double getVal() { return 0.0; } public void setOnlyValue(final double x) { decFormat.setMaximumFractionDigits(Global.getParameter("digits.edit", 5)); lbl_val=String.valueOf(decFormat.format(x)); } public void setVal(final double x) { setOnlyValue(x); setVal(String.valueOf(x)); } public void setVal(final String s) { JCPlabel.setText(goodLabel()); try { O.setExpression(s, ZC.getConstruction()); ZC.recompute(); setDims(); // ZC.validate(); // ZC.repaint(); } catch (final Exception ex) { } } public void setDims(final int x, final int y, final int w, final int h) { final int W=w+StringwWidth(JCPlabel.getText())+15; fixsize(JCPlabel, StringwWidth(JCPlabel.getText()), h); fixsize(JCPresize, 15, h); fixsize(JSL, w, h); revalidate(); setBounds(x, y, W, h); ZC.validate(); ZC.repaint(); } public void setDims(final int w, final int h) { final int x=getLocation().x; final int y=getLocation().y; setDims(x, y, w, h); } public void setDims() { setDims(JSL.getSize().width, JSL.getSize().height); } public void grow(final int w, final int h) { setDims(JSL.getSize().width+w, JSL.getSize().height+h); } public String getComment() { return lbl_com; } public void setComment(final String s) { lbl_com=s; JCPlabel.setText(goodLabel()); setDims(); } public String getUnit() { return lbl_unit; } public void setUnit(final String s) { lbl_unit=s; JCPlabel.setText(goodLabel()); setDims(); } public void setShowComment(final boolean b) { showcom=b; JCPlabel.setText(goodLabel()); setDims(); } public void setShowVal(final boolean b) { showval=b; JCPlabel.setText(goodLabel()); setDims(); } public void setShowUnit(final boolean b) { showunit=b; JCPlabel.setText(goodLabel()); setDims(); } public boolean getShowComment() { return showcom; } public boolean getShowVal() { return showval; } public boolean getShowUnit() { return showunit; } public String goodLabel() { String lbl=""; if (showcom) { lbl+=lbl_com; } if (showval) { lbl+=lbl_val; } if (showunit) { lbl+=lbl_unit; } return lbl; } static public void fixsize(final JComponent cp, final int w, final int h) { final Dimension d=new Dimension(w, h); cp.setMaximumSize(d); cp.setMinimumSize(d); cp.setPreferredSize(d); cp.setSize(d); } public boolean isEditMode() { if (JZirkelCanvas.getCurrentJZF()==null) { return false; } boolean bool=(PaletteManager.isSelected("edit")) ||(PaletteManager.isSelected("ctrl_edit")); bool=(bool||(PaletteManager.isSelected("ctrl_slider"))); bool=(bool||(PaletteManager.isSelected("ctrl_popup"))); bool=(bool||(PaletteManager.isSelected("ctrl_chkbox"))); bool=(bool||(PaletteManager.isSelected("ctrl_txtfield"))); bool=(bool||(PaletteManager.isSelected("ctrl_button"))); bool=(bool||(PaletteManager.isSelected("delete"))); bool=(bool||(PaletteManager.isSelected("hide"))); return bool; } public boolean isDeleteMode() { if (JZirkelCanvas.getCurrentJZF()==null) { return false; } return (PaletteManager.isSelected("delete")); } public boolean isHideToolSelected() { if (JZirkelCanvas.getCurrentJZF()==null) { return false; } return (PaletteManager.isSelected("hide")); } public boolean isHidden() { return (hidden||O.testConditional("hidden")); } public void setHidden(final boolean b) { hidden=b; } public void showBorder() { showborder2=true; repaint(); } public void hideBorder() { showborder2=false; repaint(); } public void showHandle() { showhandle=true; setDims(); } public void hideHandle() { showhandle=false; setDims(); } public void mouseClicked(final MouseEvent arg0) { } public void mousePressed(final MouseEvent e) { pressed=e; if (e.isPopupTrigger()) { return; } ZC.JCM.hideHandles(null); } public void mouseReleased(final MouseEvent e) { if (e.isPopupTrigger()) { return; } if ((!ZC.getShowHidden())&&(isHidden())) { return; } if (isHideToolSelected()) { setHidden(!isHidden()); setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); showborder1=false; repaint(); } if (isDeleteMode()) { ZC.JCM.removeControl(this); } ZC.JCM.hideBorders(this); if ((isEditMode())&&(!isHidden())) { showHandle(); JPropertiesBar.EditObject(this); } } public void mouseEntered(final MouseEvent arg0) { if (isHidden()) { setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); showborder1=false; // repaint(); return; } if (isEditMode()) { setCursor(new Cursor(Cursor.HAND_CURSOR)); showborder1=true; repaint(); } } public void mouseExited(final MouseEvent arg0) { setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); showborder1=false; repaint(); } public void mouseDragged(final MouseEvent me) { if (!isEditMode()) { return; } location=getLocation(location); int x=location.x-pressed.getX()+me.getX(); int y=location.y-pressed.getY()+me.getY(); if (x<0) { x=0; } else if (x+getSize().width>ZC.getSize().width) { x=ZC.getSize().width-getSize().width; } if (y<0) { y=0; } else if (y+getSize().height>ZC.getSize().height) { y=ZC.getSize().height-getSize().height; } setLocation(x, y); Toolkit.getDefaultToolkit().sync(); ZC.JCM.analyseXY(this); } public void mouseMoved(final MouseEvent arg0) { } // Change event from JSlider : public void stateChanged(final ChangeEvent arg0) { } public void PrintXmlTags(final XmlWriter xml) { xml.printArg("Ename", ""+O.getName()); xml.printArg("x", ""+getLocation().x); xml.printArg("y", ""+getLocation().y); xml.printArg("w", ""+JSL.getSize().width); xml.printArg("h", ""+JSL.getSize().height); xml.printArg("showC", ""+showcom); xml.printArg("showU", ""+showunit); xml.printArg("showV", ""+showval); xml.printArg("hidden", ""+hidden); xml.printArg("C", ""+lbl_com); xml.printArg("U", ""+lbl_unit); xml.printArg("V", ""+lbl_val); } } ./src/eric/controls/JCanvasSlider.java0000644000175000017500000001327611347426177016705 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric.controls; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import rene.util.xml.XmlWriter; import rene.zirkel.ZirkelCanvas; import rene.zirkel.objects.ExpressionObject; /** * * @author erichake */ public class JCanvasSlider extends JCanvasPanel { /** * */ private static final long serialVersionUID = 1L; static int PREFEREDVMAX = 10000; int VMAX = PREFEREDVMAX; int TICKS = 1000; double xMIN, xMAX, xTICKS; MyJSlider JCS; public JCanvasSlider(final ZirkelCanvas zc, final ExpressionObject o, final double min, final double max, final double val) { super(zc, o); xMIN = min; xMAX = max; xTICKS = getCurrentTicks(); setVal(val); JSL = new MyJSlider(0, VMAX, TICKS, (int) Math.round((val - xMIN) * VMAX / (xMAX - xMIN))); JSL.putClientProperty("JComponent.sizeVariant", "regular"); JCS = (MyJSlider) JSL; JCS.addMouseListener(this); JCS.addMouseMotionListener(this); setComment(O.getName() + "="); this.add(JCS); this.add(JCPlabel); this.add(JCPresize); zc.add(this); } public void setGoodKnobPos(final double x) { final int i = (int) Math.round((x - xMIN) * (VMAX / (xMAX - xMIN))); JCS.setValue(i); } public double getCurrentTicks() { return TICKS * (xMAX - xMIN) / (VMAX); } public void setTicks(final String s) { setTicks(Double.parseDouble(s)); } public void setTicks(final double x) { xTICKS = x; adjustVirtualMax(); TICKS = (int) Math.round(x * VMAX / (xMAX - xMIN)); JCS.setMinorTickSpacing(TICKS); this.revalidate(); this.repaint(); } public String getTicks() { return String.valueOf(xTICKS); } public void adjustVirtualMax() { if ((xMAX - xMIN) < 1) { return; } final int mySQRT = (int) Math.round(Math.sqrt(PREFEREDVMAX)); // VMAX/(xMAX-xMIN) must be an integer : VMAX = (int) Math.round(Math.ceil(mySQRT / (xMAX - xMIN)) * (xMAX - xMIN)); // VMAX/xTICKS must also be an integer : VMAX *= (int) Math.round(Math.ceil(mySQRT / xTICKS) * xTICKS); JCS.setMaximum(VMAX); } public void setMax(final String s) { setMax(Double.parseDouble(s)); } public void setMax(final double x) { xMAX = x; if (xMIN > xMAX) { xMIN = xMAX - 10; } adjustVirtualMax(); double newval = (getVal() > xMAX) ? xMAX : getVal(); newval = (getVal() < xMIN) ? xMIN : getVal(); setVal(newval); JCS.setValue((int) Math.round((newval - xMIN) * VMAX / (xMAX - xMIN))); setTicks(xTICKS); this.revalidate(); this.repaint(); } public String getMax() { return String.valueOf(xMAX); } public void setMin(final String s) { setMin(Double.parseDouble(s)); } public void setMin(final double x) { xMIN = x; if (xMIN > xMAX) { xMAX = xMIN + 10; } adjustVirtualMax(); double newval = (getVal() > xMAX) ? xMAX : getVal(); newval = (getVal() < xMIN) ? xMIN : getVal(); setVal(newval); JCS.setValue((int) Math.round((newval - xMIN) * VMAX / (xMAX - xMIN))); setTicks(xTICKS); this.revalidate(); this.repaint(); } public String getMin() { return String.valueOf(xMIN); } public void setSnap(final boolean b) { JCS.setSnapToTicks(b); this.revalidate(); this.repaint(); } public boolean getSnap() { return JCS.getSnapToTicks(); } public void setShowTicks(final boolean b) { JCS.setPaintTicks(b); this.revalidate(); this.repaint(); } public boolean getShowTicks() { return JCS.getPaintTicks(); } @Override public double getVal() { return xMIN + JCS.getValue() * (xMAX - xMIN) / VMAX; } class MyJSlider extends JSlider implements ChangeListener { /** * */ private static final long serialVersionUID = 1L; int oldvalue; MyJSlider(final int min, final int max, final int ticks, final int val) { super(min, max, val); oldvalue = val; this.setOpaque(false); this.setFocusable(false); // this.setMajorTickSpacing((max-min)/5); this.setMinorTickSpacing(ticks); this.setPaintTicks(true); this.setSnapToTicks(true); this.setOpaque(false); this.addChangeListener(this); } @Override public int getValue() { if (isEditMode()) { return oldvalue; } oldvalue = super.getValue(); return oldvalue; } public void stateChanged(final ChangeEvent e) { try { double val = getValue(); val = xMIN + ((xMAX - xMIN) / VMAX) * val; if (getSnapToTicks()) { // snap to good value : final int i = (int) Math.round((val - xMIN) / xTICKS); val = xMIN + xTICKS * i; // eliminate side effects : final double ex = Math.pow(10, 5 - Math.round(Math .log10(val))); val = Math.round(val * ex) / ex; if (Double.isNaN(val)) { val = 0; } } setVal(val); } catch (final Exception ex) { } } } @Override public void PrintXmlTags(final XmlWriter xml) { xml.startTagStart("CTRLslider"); super.PrintXmlTags(xml); xml.printArg("min", "" + xMIN); xml.printArg("max", "" + xMAX); xml.printArg("T", "" + xTICKS); xml.printArg("fixT", "" + JCS.getSnapToTicks()); xml.printArg("showT", "" + JCS.getPaintTicks()); xml.finishTagNewLine(); } } ./src/eric/JLicence.java0000644000175000017500000001324011355645065014013 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric; import eric.GUI.themes; import java.awt.Cursor; import javax.swing.JComponent; import rene.gui.Global; /** * * @author erichake */ public class JLicence extends javax.swing.JFrame { /** * */ private static final long serialVersionUID = 1L; @Override public void paint(final java.awt.Graphics g) { super.paint(g); final java.awt.Dimension d = this.getSize(); g.drawImage(themes.getImage("backcontrols.gif"), 0, 0, d.width, d.height, this); // super.paint(g); mytxt.repaint(); mylink.repaint(); } /** Creates new form JLicence */ public JLicence(JComponent jp) { initComponents(); mytxt.setText(Global.Loc("licence.txt")); mytxt.setOpaque(false); mylink .setText("http://www.gnu.org/licenses/gpl.txt"); mylink.setOpaque(false); mylink.setCursor(new Cursor(Cursor.HAND_CURSOR)); this.setLocationRelativeTo(jp); this.setVisible(true); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ // private void initComponents() { jPanel2 = new javax.swing.JPanel(); jPanel1 = new javax.swing.JPanel(); mytxt = new javax.swing.JLabel(); mylink = new javax.swing.JLabel(); jPanel3 = new javax.swing.JPanel(); getContentPane().setLayout( new javax.swing.BoxLayout(getContentPane(), javax.swing.BoxLayout.Y_AXIS)); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("Licence"); setResizable(false); setUndecorated(true); addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mousePressed(final java.awt.event.MouseEvent evt) { formMousePressed(evt); } }); addWindowListener(new java.awt.event.WindowAdapter() { @Override public void windowDeactivated(final java.awt.event.WindowEvent evt) { formWindowDeactivated(evt); } }); jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.X_AXIS)); jPanel2.setMaximumSize(new java.awt.Dimension(320, 10)); jPanel2.setMinimumSize(new java.awt.Dimension(320, 10)); jPanel2.setPreferredSize(new java.awt.Dimension(320, 10)); getContentPane().add(jPanel2); jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.Y_AXIS)); jPanel1.setOpaque(false); mytxt.setBackground(new java.awt.Color(255, 255, 255)); mytxt.setFont(new java.awt.Font("Dialog", 0, 12)); mytxt.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); mytxt.setText("txt"); mytxt.setAlignmentX(0.5F); mytxt.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); mytxt.setMaximumSize(new java.awt.Dimension(300, 95)); mytxt.setMinimumSize(new java.awt.Dimension(300, 95)); mytxt.setPreferredSize(new java.awt.Dimension(300, 95)); mytxt.addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mousePressed(final java.awt.event.MouseEvent evt) { mytxtMousePressed(evt); } }); jPanel1.add(mytxt); mylink.setBackground(new java.awt.Color(255, 255, 255)); mylink.setFont(new java.awt.Font("Dialog", 0, 12)); mylink.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); mylink.setText("coucou"); mylink.setAlignmentX(0.5F); mylink.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); mylink.setMaximumSize(new java.awt.Dimension(300, 40)); mylink.setMinimumSize(new java.awt.Dimension(300, 40)); mylink.setOpaque(true); mylink.setPreferredSize(new java.awt.Dimension(300, 40)); mylink.addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mousePressed(final java.awt.event.MouseEvent evt) { mylinkMousePressed(evt); } }); jPanel1.add(mylink); getContentPane().add(jPanel1); jPanel3.setLayout(new javax.swing.BoxLayout(jPanel3, javax.swing.BoxLayout.X_AXIS)); jPanel3.setMaximumSize(new java.awt.Dimension(320, 10)); jPanel3.setMinimumSize(new java.awt.Dimension(320, 10)); jPanel3.setPreferredSize(new java.awt.Dimension(320, 10)); getContentPane().add(jPanel3); pack(); }// private void mylinkMousePressed(final java.awt.event.MouseEvent evt) { JBrowserLauncher.openURL("http://www.gnu.org/licenses/gpl.txt"); this.dispose();// TODO add your handling code here: } private void formWindowDeactivated(final java.awt.event.WindowEvent evt) { this.dispose();// TODO add your handling code here: } private void formMousePressed(final java.awt.event.MouseEvent evt) { this.dispose();// TODO add your handling code here: } private void mytxtMousePressed(final java.awt.event.MouseEvent evt) { this.dispose();// TODO add your handling code here: } // Variables declaration - do not modify private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JLabel mylink; private javax.swing.JLabel mytxt; // End of variables declaration } ./src/eric/JPointName.java0000644000175000017500000001554611311136510014334 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.SwingConstants; import rene.gui.Global; import rene.zirkel.construction.Construction; import rene.zirkel.objects.ConstructionObject; /** * * @author erichake */ public class JPointName { // private String StartLetter="\u03b6"; private static String GenericLetter = "P"; private static String majLettersSet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; private static String minLettersSet = "abcdefghijklmnopqrstuvwxyz"; private static String greekmajLettersSet = "\u0391\u0392\u0393\u0394\u0395\u0396" + "\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3" + "\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9"; private static String greekminLettersSet = "\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9" + "\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C4\u03C5\u03C6" + "\u03C7\u03C8\u03C9"; private static ArrayList LettersSet = new ArrayList(); private String LetterSuffix = ""; // Ct should be the ZF.ZC.getConstruction() object : private Construction ZCcn = null; private JButton PaletteBtn = null; private JZirkelCanvas JZF = null; public static int minLettersSetCode = 1; // private String Letters=majLettersSet; // 0:majLettersSet , 1:minLettersSet , 2:greekmajLettersSet , // 3:greekminLettersSet private int LetterSetCode = 0; private int StartLetter = 0; /** * Creates a new instance of JPointLabel * * @param jzf */ public JPointName(final JZirkelCanvas jzf) { JZF = jzf; ZCcn = JZF.getZF().ZC.getConstruction(); PaletteBtn = new JPaletteButton(JZF); } public JPointName() { LettersSet.add(majLettersSet); LettersSet.add(minLettersSet); LettersSet.add(greekmajLettersSet); LettersSet.add(greekminLettersSet); } public String getCurrentLetterSet() { return (String) LettersSet.get(LetterSetCode); } public int getCurrentLetterSetCode() { return LetterSetCode; } static void fixsize(final Component cp, final int w, final int h) { final Dimension d = new Dimension(w, h); cp.setMaximumSize(d); cp.setMinimumSize(d); cp.setPreferredSize(d); cp.setSize(d); } public JButton getPaletteButton(){ return PaletteBtn; } public void addPaletteJLabel(final JPanel jp) { fixsize(PaletteBtn, 28, jp.getSize().height); jp.add(PaletteBtn); } public void setEnabledJLabel(final boolean bool) { PaletteBtn.setEnabled(bool); } public void addSuffixChar() { if (LetterSuffix.equals("''")) LetterSuffix = ""; else LetterSuffix += "'"; } void setSuffixChar(final String suff) { LetterSuffix = suff; } public static String getGenericName(final Construction myC) { int i = 1; ConstructionObject o = myC.find(GenericLetter + i); while (o != null) { i++; o = myC.find(GenericLetter + i); } return (GenericLetter + i); } public String getBetterName(final Construction myC, final boolean setPaletteTxt) { final String Letters = getCurrentLetterSet(); String s = Letters.substring(StartLetter, StartLetter + 1); if (ZCcn == null) { s = getGenericName(myC); } else if (Global.getParameter("options.point.shownames", false)) { int i = Letters.indexOf(s); final int k = i; s += LetterSuffix; ConstructionObject o = ZCcn.find(s); while ((i < (Letters.length() - 1)) && (o != null)) { i++; s = Letters.substring(i, i + 1) + LetterSuffix; o = ZCcn.find(s); } i = -1; while ((i < k) && (o != null)) { i++; s = Letters.substring(i, i + 1) + LetterSuffix; o = ZCcn.find(s); } if (o != null) { s = getGenericName(ZCcn); } } else s = getGenericName(ZCcn); if ((PaletteBtn != null) && (setPaletteTxt)) PaletteBtn.setText(s); return s; } public static int findSet(final String s) { for (int i = 0; i < LettersSet.size(); i++) { final String mySet = (String) LettersSet.get(i); if (mySet.indexOf(s) != -1) return i; } return -1; } public boolean isLetterAllowed(final String s) { return (getCurrentLetterSet().indexOf(s) != -1); } public boolean isLetterAccepted(final String s) { if (ZCcn != null) return (ZCcn.find(s) == null); else return false; } public String setStartLetter(final String s) { if (isLetterAllowed(s)) { StartLetter = getCurrentLetterSet().indexOf(s); } return getBetterName(null, true); } public String setLetterSet(final int i) { LetterSetCode = i; StartLetter = 0; return getBetterName(null, true); } } class JPaletteButton extends JButton implements MouseListener { /** * */ private static final long serialVersionUID = 1L; private final JZirkelCanvas JZF; int[] x = { 0, 10, 0 }; int[] y = { 0, 10, 10 }; @Override public void paintComponent(final java.awt.Graphics g) { final Dimension d = this.getSize(); final int sze = 6; x[0] = d.width - sze; y[0] = d.height; x[1] = d.width; y[1] = d.height - sze; x[2] = d.width; y[2] = d.height; final Graphics2D g2 = (Graphics2D) g; g2.setComposite(AlphaComposite.SrcOver); g2.setColor(new Color(50, 50, 50)); g2.fillPolygon(x, y, 3); g2 .setComposite(AlphaComposite.getInstance( AlphaComposite.SRC_OVER, 1f)); super.paintComponent(g); } public JPaletteButton(final JZirkelCanvas jzf) { JZF = jzf; setOpaque(false); setContentAreaFilled(false); setBorder(BorderFactory.createEmptyBorder()); setFont(new java.awt.Font(Global.GlobalFont, 1, 14)); setForeground(new Color(50, 50, 50)); setHorizontalAlignment(SwingConstants.CENTER); setVerticalAlignment(SwingConstants.CENTER); addMouseListener(this); } public void mouseClicked(final MouseEvent e) { } public void mousePressed(final MouseEvent e) { System.out.println("mousePressed"); if (isEnabled()) { JZF.getZF().setinfo("nom_points", false); new JCharacterPalette(JZF, this); } } public void mouseReleased(final MouseEvent e) { } public void mouseEntered(final MouseEvent e) { } public void mouseExited(final MouseEvent e) { } } ./src/eric/JSelectPopup.java0000644000175000017500000001266311303263516014712 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric; import java.awt.Color; import java.awt.Font; import java.awt.MouseInfo; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.Vector; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.event.PopupMenuEvent; import javax.swing.event.PopupMenuListener; import rene.gui.Global; import rene.util.MyVector; import rene.zirkel.ZirkelCanvas; import rene.zirkel.objects.ConstructionObject; /** * * @author erichake */ // This class is only instanciated by JSelectPopup // It is a "modal" popup for complex tools. Popup menu appear // in a 1 pixel w/h modal JDialog : it seems it's in ZirkelCanvas, but it's // not... public class JSelectPopup extends JPopupMenu implements MouseListener, PopupMenuListener { /** * */ private static final long serialVersionUID = 1L; ZirkelCanvas ZC; JSelectPopupDialog D; Vector V = new Vector(); String CallerObject = "RightClick"; int sx = 0; int sy = 0; int sw = 0; int sh = 0; public JSelectPopup(final ZirkelCanvas zc, final JSelectPopupDialog d, final MyVector v) { init(zc, v); D = d; this.addPopupMenuListener(this); show(D.Content, 0, 0); sx = this.getLocationOnScreen().x; sy = this.getLocationOnScreen().y; sw = this.getSize().width; sh = this.getSize().height; } public void init(final ZirkelCanvas zc, final MyVector v) { ZC = zc; // A bit of a hack : need to know where was the calling method... // getStackTrace stores the whole history of caller methods final StackTraceElement[] trace = new Throwable().getStackTrace(); for (final StackTraceElement element : trace) { if (element.getClassName().startsWith("rene.zirkel.tools")) { final String s = element.getClassName(); CallerObject = s.split("\\.")[3]; break; } } String aa = ""; try { aa = Global.Loc("selectpopup." + CallerObject); } catch (final Exception e) { } JMenuItem m = new JMenuItem(aa + Global.Loc("selectpopup.whatobject")); m.setBackground(Color.WHITE); m.setForeground(Color.DARK_GRAY); m.setFont(new Font("Dialog", 3, 12)); m.setActionCommand("-1,false"); m.setEnabled(false); m.addMouseListener(new MouseAdapter() { @Override public void mousePressed(final MouseEvent e) { if (!(D == null)) D.setVisible(false); } }); m.addMouseListener(this); this.add(m); for (int i = 0; i < v.size(); i++) { final ConstructionObject o = (ConstructionObject) v.elementAt(i); V.add(o); final String tp = o.getName() + " : " + o.getText().split(" ")[0]; m = new JMenuItem(tp); m.setForeground(o.getColor()); m.setBackground(new Color(240, 240, 240)); m.setFont(new Font("Dialog", 1, 12)); m.setActionCommand(String.valueOf(i) + "," + o.selected()); m.setRolloverEnabled(true); m.addMouseListener(this); m.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent event) { final JMenuItem jm = (JMenuItem) event.getSource(); doaction(jm.getActionCommand(), event.getModifiers()); } }); this.add(m); } } public int row(final String str) { return Integer.parseInt(str.split(",")[0]); } public boolean sel(final String str) { final String bl = str.split(",")[1].toLowerCase(); return (bl.equals("true")); } public void doaction(final String str, final int modifier) { final ConstructionObject o = (ConstructionObject) V.elementAt(row(str)); o.setSelected(sel(str)); D.setConstructionObject(o); D.setVisible(false); } public void mouseClicked(final MouseEvent e) { } public void mousePressed(final MouseEvent e) { } public void mouseReleased(final MouseEvent e) { } public void mouseEntered(final MouseEvent e) { final JMenuItem jm = (JMenuItem) e.getSource(); final int i = row(jm.getActionCommand()); if ((i > -1) && (!sel(jm.getActionCommand()))) { final ConstructionObject o = (ConstructionObject) V.elementAt(i); o.setSelected(true); ZC.repaint(); } } public void mouseExited(final MouseEvent e) { final JMenuItem jm = (JMenuItem) e.getSource(); final int i = row(jm.getActionCommand()); if ((i > -1) && (!sel(jm.getActionCommand()))) { final ConstructionObject o = (ConstructionObject) V.elementAt(i); o.setSelected(false); ZC.repaint(); } final int x = MouseInfo.getPointerInfo().getLocation().x; final int y = MouseInfo.getPointerInfo().getLocation().y; if ((x < sx) || (x > sx + sw) || (y < sy) || (y > sy + sh)) { D.setVisible(false); } } // public void popupMenuWillBecomeVisible(final PopupMenuEvent e) { } public void popupMenuWillBecomeInvisible(final PopupMenuEvent e) { } public void popupMenuCanceled(final PopupMenuEvent e) { D.setVisible(false); } } ./src/eric/JGeneralMenuBar.java0000644000175000017500000010617411364076220015300 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric; import eric.GUI.ZDialog.ZMessageDialog; import eric.GUI.palette.PaletteManager; import eric.GUI.pipe_tools; import eric.GUI.themes; import eric.GUI.window.LeftPanel; import eric.GUI.window.Open_left_panel_btn; import eric.GUI.window.Open_middle_panel_btn; import eric.GUI.window.Open_right_panel_btn; import eric.GUI.window.RightPanel; import eric.GUI.window.comments; import eric.GUI.windowComponent; import eric.JSprogram.JSRun; import eric.bar.JPropertiesBar; import eric.jobs.JobMessage; import eric.macros.CreateMacroDialog; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.io.File; import java.net.URL; import javax.swing.AbstractAction; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.KeyStroke; import rene.dialogs.Question; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.ZirkelFrame; import rene.zirkel.tools.DefineJobTool; public class JGeneralMenuBar extends JPanel { /** * */ private static final int MenuTextSize=12; private static JGeneralMenuBar me; myJMenuBar menubar=new myJMenuBar(); private myJMenu MacrosMenu, ObjectsMenu, JSMenu; JButton historybutton; myJMenuItem hiddenitem, griditem, restrictpaletteitem, editpaletteitem, macrositem, historyitem, helpitem, propertiesitem, smallitem, mediumitem, largeitem, definejobitem, commentitem, leftpanelitem, paletteitem; @Override public void paintComponent(final java.awt.Graphics g) { // super.paintComponent(g); final java.awt.Dimension d=this.getSize(); g.drawImage(themes.getImage("menubar.gif"), 0, 0, d.width, d.height, this); } public JGeneralMenuBar() { me=this; this.setLayout(new javax.swing.BoxLayout(this, javax.swing.BoxLayout.X_AXIS)); MacrosMenu=new myJMenu(Loc("macros")); ObjectsMenu=new myJMenu(Global.Loc("palette.construction")); JSMenu=new myJMenu(Loc("js")); init(); InitObjectsMenu(); } public void paintImmediately() { paintImmediately(0, 0, getWidth(), getHeight()); } class myJMenuBar extends JMenuBar { /** * */ @Override public void paintComponents(final Graphics g) { } myJMenuBar() { super(); setUI(null); } void addMenu(final JMenu mymen) { if (mymen.getItemCount()>0) { this.add(mymen); } } } class myJMenu extends JMenu { /** * */ @Override public void paintComponents(final Graphics g) { } myJMenu(final String menuname) { this.setText(menuname); this.setFont(new java.awt.Font(Global.GlobalFont, 0, 12)); this.setForeground(new Color(40, 40, 40)); this.setOpaque(false); } myJMenu(final String menuname, final boolean isSubmenu) { this(menuname); if (isSubmenu) { setOpaque(true); setIcon(new myImageIcon(getClass().getResource( "/eric/GUI/icons/palette/null.png"), null)); } } // Constructor for the Objects submenus : myJMenu(final String menuname, final int icnw) { this(menuname); setOpaque(true); final myImageIcon myicn=new myImageIcon(getClass().getResource( "/eric/GUI/icons/palette/null.png"), null); myicn.setIcnMargin(0); myicn.setIconWidth(icnw); setIcon(myicn); } void addSep() { // if (this.getItemCount()>0) this.addSeparator(); this.add(new mySeparator()); } void addI(final String mnu, final String icn, final int a1, final int a2, final myJMenuItem item) { item.setNames(Loc(mnu), icn); if (a1!=0) { item.setAccelerator(KeyStroke.getKeyStroke(a1, a2)); pipe_tools.getWindow().getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(a1, a2), mnu); pipe_tools.getWindow().getRootPane().getActionMap().put(mnu, new AbstractAction() { public void actionPerformed(final ActionEvent arg0) { item.action(); } }); } this.add(item); } void addI(final String mnu, final String icn, final int a1, final int a2, final boolean sel, final myJMenuItem item) { item.setNames(Loc(mnu), icn); item.setSelected(sel); if (a1!=0) { item.setAccelerator(KeyStroke.getKeyStroke(a1, a2)); pipe_tools.getWindow().getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(a1, a2), mnu); pipe_tools.getWindow().getRootPane().getActionMap().put(mnu, new AbstractAction() { public void actionPerformed(final ActionEvent arg0) { item.action(); } }); } this.add(item); } // only for objects submenus : void addI(final String icn, final myJMenuItem item) { final String mnuName=PaletteManager.ToolTip(icn); item.setNames(mnuName, icn); item.setText(""+item.getText().replaceAll("\\+", "
")+""); if (!(item.myimage==null)) { item.myimage.setIconWidth(28); item.myimage.setIconHeight(28); } this.add(item); } // only for language submenu : void addI(final String lang, final String country, final myJMenuItem item) { final String suffix=(country.equals(""))?lang:lang+"_"+country; final String icn="lg_"+suffix; final boolean good=Global.isLanguage(lang, country); if ((good)&&(!(icn.equals("")))) { this.setIcon(new ImageIcon(getClass().getResource( "/eric/GUI/icons/palette/"+icn+".png"))); } addI("language."+suffix, icn, 0, 0, item); item.setEnabled(!good); } class mySeparator extends JPanel { /** * */ @Override public void paintComponent(final java.awt.Graphics g) { super.paintComponent(g); final java.awt.Dimension d=this.getSize(); g.drawImage(themes.getImage("sep.png"), 2, 0, d.width-4, 12, this); } mySeparator() { this.setOpaque(false); } } } class mySimpleJMenuItem extends JMenuItem { /** * */ int ID=0; mySimpleJMenuItem(final String name, final int i) { super(name); ID=i; this.setOpaque(true); this.setFont(new java.awt.Font(Global.GlobalFont, 0, MenuTextSize)); this.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent event) { action(); } }); } void action() { } } public class myJMenuItem extends JMenuItem { /** * */ String ICname; boolean selected=false; myImageIcon myimage=null; myJMenuItem() { this.setOpaque(true); this.setFont(new java.awt.Font(Global.GlobalFont, 0, MenuTextSize)); this.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent event) { action(); } }); this.setIcon(themes.getIcon("null.png")); // this.setIconTextGap(0); } myJMenuItem(final String itemname, final String iconname) { this(); setNames(itemname, iconname); } @Override public void setSelected(final boolean sel) { selected=sel; final int fontstyle=(selected)?1:0; this.setFont(new java.awt.Font(Global.GlobalFont, fontstyle, MenuTextSize)); } @Override public boolean isSelected() { return selected; } void setNames(final String itemname, final String iconname) { ICname=iconname; setText(itemname); setIcn(iconname); // setPreferredSize(new Dimension(getPreferredSize().width+50,22)); } void setIcn(String iconname) { if (iconname.equals("")) { iconname="null"; } URL myurl=getClass().getResource( "/eric/GUI/icons/palette/"+iconname+".png"); if (myurl==null) { myurl=getClass().getResource( "/eric/GUI/icons/palette/"+iconname+".gif"); } myimage=new myImageIcon(myurl, this); setIcon(myimage); } void action() { PaletteManager.ClicOn(ICname); } } class myImageIcon extends ImageIcon { /** * */ int IcnHeight=22; int IcnWidth=24; int IcnMargin=12; myJMenuItem JM; @Override public void paintIcon(final Component c, final Graphics g, final int x, final int y) { final Graphics2D g2=(Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); if ((!(JM==null))&&(JM.isSelected())) { final ImageIcon mysel=new ImageIcon(getClass().getResource( "/eric/GUI/icons/palette/selmark.png")); g2.drawImage(mysel.getImage(), 3, 0, 8, IcnWidth, null); } g2.drawImage(getImage(), IcnMargin, 0, IcnWidth, IcnWidth, null); } public void setIcnMargin(final int i) { IcnMargin=i; } public void setIconHeight(final int i) { IcnHeight=i; } public void setIconWidth(final int i) { IcnWidth=i; } @Override public int getIconHeight() { return IcnHeight; } @Override public int getIconWidth() { return IcnWidth; } myImageIcon(final URL myurl, final myJMenuItem jm) { super(myurl); JM=jm; } } private String Loc(final String s) { String loc=Global.Loc("menu."+s); if (loc==null) { loc=Global.Loc(s); } if (loc==null) { loc=s; } return loc; } public void InitMacrosMenu() { if (MacrosMenu!=null) { MacrosMenu.removeAll(); MacrosMenu.addI("palette.info.newmacro", "newmacro", 0, 0, new myJMenuItem() { @Override public void action() { new CreateMacroDialog(JZirkelCanvas.getNewMacroPanel()); JZirkelCanvas.ActualiseMacroPanel(); } }); MacrosMenu.addSep(); } } public static void s_InitMacrosMenu() { if (me!=null) { me.InitMacrosMenu(); } } public static void addMacrosMenu(JMenuItem item) { if ((me!=null)&&(me.MacrosMenu!=null)) { me.MacrosMenu.add(item); } } public static void s_InitJSMenu() { if (me!=null) { me.InitJSMenu(); } } public void InitJSMenu() { JSMenu.removeAll(); JSMenu.addI("js.newscriptinconstruction", "", 0, 0, new myJMenuItem() { @Override void action() { JSRun.newScriptInConstruction(); } }); JSMenu.addSep(); JSMenu.addI("js.command", "", 0, 0, new myJMenuItem() { @Override void action() { JSRun.openEditor(); } }); JSMenu.addI("js.script", "", 0, 0, new myJMenuItem() { @Override void action() { JSRun.openScriptFile("", true); } }); JSMenu.addSep(); JSMenu.addI("js.define", "", 0, 0, new myJMenuItem() { @Override void action() { JSRun.getScriptsFolder(); InitJSMenu(); } }); String path=Global.getParameter("scriptfolder", ""); if (!path.equals("")) { JSMenu.addI("js.dumb", "", 0, 0, Global.getParameter( "jsdumb", true), new myJMenuItem() { @Override void action() { setSelected(!isSelected()); Global.setParameter("jsdumb", isSelected()); } }); JSMenu.addSep(); try { File myfile=new File(path); String[] children=myfile.list(); for (int i=0; i. */ package eric; import java.awt.Color; import rene.gui.Global; import rene.util.parser.StringParser; /** * * @author erichake */ public class JGlobalPreferences { static int minfontsize, minpointsize, minlinesize, arrowsize, digits_lengths, digits_edit, digits_angles, colorbackgroundx, colorbackgroundy, colorbackgroundPal; static String colorbackground; static boolean undockpalette; /** Creates a new instance of JProperties */ static public void initPreferences() { minfontsize = Global.getParameter("prefs.minfontsize", 18); minpointsize = Global.getParameter("prefs.minpointsize", 3); minlinesize = Global.getParameter("prefs.minlinesize", 1); arrowsize = Global.getParameter("prefs.arrowsize", 15); digits_lengths = Global.getParameter("prefs.digits.lengths", 5); digits_edit = Global.getParameter("prefs.digits.edit", 5); digits_angles = Global.getParameter("prefs.digits.angles", 0); colorbackground = Global.getParameter("prefs.colorbackground", "245,245,245"); colorbackgroundx = Global.getParameter("prefs.colorbackgroundx", 154); colorbackgroundy = Global.getParameter("prefs.colorbackgroundy", 5); colorbackgroundPal = Global.getParameter("prefs.colorbackgroundPal", 4); undockpalette = Global.getParameter("prefs.undockpalette", false); } static public void savePreferences() { Global.setParameter("prefs.minfontsize", minfontsize); Global.setParameter("prefs.minpointsize", minpointsize); Global.setParameter("prefs.minlinesize", minlinesize); Global.setParameter("prefs.arrowsize", arrowsize); Global.setParameter("prefs.digits.lengths", digits_lengths); Global.setParameter("prefs.digits.edit", digits_edit); Global.setParameter("prefs.digits.angles", digits_angles); Global.setParameter("prefs.colorbackground", getColor(colorbackground)); Global.setParameter("prefs.colorbackgroundx", colorbackgroundx); Global.setParameter("prefs.colorbackgroundy", colorbackgroundy); Global.setParameter("prefs.colorbackgroundPal", colorbackgroundPal); Global.setParameter("prefs.undockpalette", undockpalette); } static public void setLocalPreferences() { Global.setParameter("minfontsize", minfontsize); Global.setParameter("minpointsize", minpointsize); Global.setParameter("minlinesize", minlinesize); Global.setParameter("arrowsize", arrowsize); Global.setParameter("digits.lengths", digits_lengths); Global.setParameter("digits.edit", digits_edit); Global.setParameter("digits.angles", digits_angles); Global.setParameter("colorbackground", getColor(colorbackground)); Global.setParameter("colorbackgroundx", colorbackgroundx); Global.setParameter("colorbackgroundy", colorbackgroundy); Global.setParameter("colorbackgroundPal", colorbackgroundPal); } static public void ShowPreferencesDialog() { new JGlobalPreferencesDlog(); } // get a Color object from a string like "231,145,122" static private Color getColor(final String s) { final StringParser p = new StringParser(s); p.replace(',', ' '); int red, green, blue; red = p.parseint(); green = p.parseint(); blue = p.parseint(); return new Color(red, green, blue); } } ./src/eric/.DS_Store0000644000175000017500000003000411362623717013152 0ustar yvesyvesBud1%bardsclboolclbool  @ @ @ @ E%DSDB` @ @ @ E DSDB ` @ @ @ "#$-39CKMPQR[agqsuvwgiconsdsclbool JSprogrambwspblobbplist00  \WindowBounds[ShowSidebar]ShowStatusBar[ShowPathbar[ShowToolbar\SidebarWidth_{{154, 361}, {770, 437}}  ".d) { h=(int) d; } Thread.sleep((int) (d-h)); time=System.currentTimeMillis(); } catch (final Exception ex) { } if (P.getBound() instanceof SegmentObject) { final SegmentObject s=(SegmentObject) P.getBound(); synchronized (canvas) { if (back) { O.move(s.getP1().getX()+(s.getLength()-x) *s.getDX(), s.getP1().getY() +(s.getLength()-x)*s.getDY()); } else { O.move(s.getP1().getX()+x*s.getDX(), s.getP1().getY() +x*s.getDY()); } ZC.dovalidate(); ZC.repaint(); x+=ZC.dx(2); if (x>s.getLength()) { back=!back; x=0; } } } else if (P.getBound() instanceof PrimitiveCircleObject) { final PrimitiveCircleObject c=(PrimitiveCircleObject) P.getBound(); synchronized (canvas) { O.move(c.getP1().getX()+Math.cos(x) *c.getR(), c.getP1().getY() +Math.sin(x)*c.getR()); ZC.dovalidate(); ZC.repaint(); if (Negative) { x-=ZC.dx(2)/c.getR(); } else { x+=ZC.dx(2)/c.getR(); } } } } TH=null; } }; TH.setPriority(Thread.MIN_PRIORITY); TH.start(); } public void initSlidersParameters(ExpressionObject E) { min=E.getMinValue(); max=E.getMaxValue(); positiveincrement=(max-min)/parts; } public void runExpression() { TH=new Thread() { public void run() { final ZirkelCanvas canvas=ZC; ExpressionObject E=(ExpressionObject) O; double x; try { x = E.getValue(); } catch (Exception ex) { x=0; } double increment=1; long time=System.currentTimeMillis(); while ((!PANEL.isStopped())&&(thread_alive)) { try { final long t=System.currentTimeMillis(); double d=PANEL.getDelay(); int h=(int) (t-time); if (h<0) { h=0; } if (h>d) { h=(int) d; } Thread.sleep((int) (d-h)); time=System.currentTimeMillis(); } catch (final Exception ex) { } try { synchronized (canvas) { if (E.isSlider()) { initSlidersParameters(E); if (Negative) { if (x>max) { x=min; } else { x+=positiveincrement; } } else { if (x>max) { x=max; increment=-positiveincrement; } else if (x V=new Vector(); private static Image icon=themes.getImage("animation.png"); private int W=32, H=32, X=10, Y=47; private int minspeed=0; private int maxspeed=100; private int speed=40; private boolean stopped=false; private double a, b, A1, A2, B2; public void paintComponent(Graphics g) { g.drawImage(icon, 0, 0, W, H, this); } public int getMaxSpeed() { return maxspeed; } public AnimationPanel(ZirkelCanvas zc) { ZC=zc; setBounds(X, Y, W, H); addMouseListener(this); a=maxspeed/10; b=maxspeed-10; A1=b/a; A2=(maxspeed-b)/(maxspeed-a); B2=maxspeed*(b-a)/(maxspeed-a); } public double getDelay() { int cur=speed; double v; if (cur>a) { v=A2*cur+B2; } else { v=A1*cur; } double d=(maxspeed-v)*6; return d; } public void setDelay(double delay) { double cur=maxspeed-delay/6; if (cur>b) { speed=(int) ((cur-B2)/A2); } else { speed=(int) (cur/A1); } } public void showPopup() { JPopupMenu popup=new JPopupMenu(); // add Cancel Item : myJMenuItem item=new myJMenuItem(Global.Loc("animation.run")) { @Override public void action() { startAnimation(); } }; popup.add(item); item=new myJMenuItem(Global.Loc("animation.stop")) { @Override public void action() { stopAnimation(); } }; popup.add(item); item=new myJMenuItem(Global.Loc("animation.reverse")) { @Override public void action() { reverseAnimation(); } }; popup.add(item); popup.add(new JSeparator()); item=new myJMenuItem(Global.Loc("animation.removeall")) { @Override public void action() { removeAllAnimations(); } }; popup.add(item); popup.add(new JSeparator()); popup.add(new SpeedSliderMenuItem()); popup.show(this, W-10, H); } public Vector getAnimations() { return V; } public void reverseAnimation() { for (int i=0; i0) { switch (stepnum) { case 1: steps.mycomment.setText("2/3 - "+Global.Loc("macros.finals")); steps.myparams.setText(""); zf.settool(ZirkelFrame.NTargets); break; case 2: steps.mycomment.setText("3/3 - "+Global.Loc("macros.name")); steps.myparams.setEditable(true); steps.myparams.setFocusable(true); steps.myparams.setHorizontalAlignment(SwingConstants.CENTER); steps.myparams.setText(Global.Loc("macros.untitledmacro")); steps.myparams.selectAll(); steps.myparams.requestFocus(); pipe_tools.removeMacroPanelKeyInputs(); break; case 3: valid(); break; } stepnum++; } else { zf.settool(ZirkelFrame.NParameters); setParametersComments(); } } static public void setParametersComments() { if (CMD!=null) { ZirkelCanvas zc=JZirkelCanvas.getCurrentZC(); if (zc!=null) { String p=""; Vector v=zc.getConstruction().getParameters(); for (int i=0; i0), true, s, false); } catch (final ConstructionException e) { } m.hideDuplicates(false); zc.storeMacro(m, false); final JDefaultMutableTreeNode node=new JDefaultMutableTreeNode(JZirkelCanvas.getCurrentZF(), m); final TreePath[] paths=ML.getMacrosTree().getSelectionPaths(); if (((paths)!=null)&&(paths.length>0)) { root=(JDefaultMutableTreeNode) paths[0].getLastPathComponent(); if (root.isLeaf()) { // if the first selected node is a leaf : final DefaultMutableTreeNode father=(DefaultMutableTreeNode) root.getParent(); final int i=father.getIndex(root)+1; ((DefaultTreeModel) ML.getMacrosTree().getModel()).insertNodeInto( node, father, i); } else { // if the first selected node is a folder : ((DefaultTreeModel) ML.getMacrosTree().getModel()).insertNodeInto( node, root, root.getChildCount()); } } else { // There is no selected node : ((DefaultTreeModel) ML.getMacrosTree().getModel()).insertNodeInto(node, ML.getTopNode(), ML.getTopNode().getChildCount()); } final TreePath tp=new TreePath(node.getPath()); node.ActualisePath(); return tp; } private class stepcomments extends JPanel { /** * */ private JLabel mycomment=new JLabel(); private JTextField myparams=new JTextField(); @Override public void paintComponent(final java.awt.Graphics g) { super.paintComponent(g); final java.awt.Dimension d=this.getSize(); g.drawImage(themes.getImage("Mcomments.png"), 0, 0, d.width, d.height, this); } public JLabel getComment() { return mycomment; } private stepcomments() { this.setLayout(new javax.swing.BoxLayout(this, javax.swing.BoxLayout.Y_AXIS)); this.setAlignmentY(0.5F); final ImageIcon backIcon=themes.getIcon("Mcomments.png"); PaletteManager.fixsize(this, backIcon.getIconWidth(), backIcon.getIconHeight()); this.setOpaque(false); mycomment.setText("1/3 - "+Global.Loc("macros.initials")); mycomment.setFont(new Font("Verdana", 0, 10)); PaletteManager.fixsize(mycomment, backIcon.getIconWidth(), backIcon.getIconHeight()/2); mycomment.setHorizontalAlignment(SwingConstants.CENTER); mycomment.setVerticalAlignment(SwingConstants.CENTER); mycomment.setAlignmentX(0.5f); mycomment.setAlignmentY(0.5f); this.add(mycomment); myparams.setText(Global.Loc("macros.pleaseselect")); myparams.setFont(new Font("Verdana", 0, 10)); myparams.setForeground(Color.blue); myparams.setOpaque(false); myparams.setBorder(null); myparams.setFocusable(false); PaletteManager.fixsize(myparams, backIcon.getIconWidth()-10, backIcon.getIconHeight()/2); myparams.setHorizontalAlignment(SwingConstants.CENTER); // myparams.setVerticalAlignment(SwingConstants.CENTER); myparams.setAlignmentX(0.5f); myparams.setAlignmentY(0.5f); myparams.addKeyListener(new KeyAdapter() { @Override public void keyPressed(final KeyEvent e) { if (e.getKeyCode()==KeyEvent.VK_ENTER) { valid(); } } }); this.add(myparams); } } } ./src/eric/macros/CreateMacroDialog.java0000644000175000017500000000767711355205363017142 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.macros; import eric.GUI.palette.PaletteManager; import eric.GUI.pipe_tools; import eric.GUI.themes; import eric.JZirkelCanvas; import java.awt.Point; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.BoxLayout; import javax.swing.JDialog; import javax.swing.JMenuItem; import javax.swing.JPanel; import rene.zirkel.ZirkelCanvas; /** * * @author erichake */ public class CreateMacroDialog extends JDialog implements MouseListener, MouseMotionListener, TopDialog { private static CreateMacroDialog MD; private static int content_height=50, content_width=205; private static int locmargin=50; private CreateMacroPanel CMP; private MacrosList MI; private MouseEvent pressed; private Point location; public CreateMacroDialog(MacrosList mi) { MD=this; MI=mi; CreateMacroDialogContentPane c=new CreateMacroDialogContentPane(); setContentPane(c); c.addMouseListener(this); c.addMouseMotionListener(this); DialogTitleBar title=new DialogTitleBar(this, content_width); c.add(title); CMP=new CreateMacroPanel(this, MI, content_width, content_height); c.add(CMP); setUndecorated(true); setSize(content_width, content_height+DialogTitleBar.getTitleHeight()); if (!pipe_tools.isApplet()) { setAlwaysOnTop(true); } else { addWindowListener(new WindowAdapter() { public void windowDeactivated(WindowEvent e) { toFront(); } }); } setResizable(false); ZirkelCanvas zc=JZirkelCanvas.getCurrentZC(); if (zc!=null) { this.setLocation(zc.getLocationOnScreen().x+locmargin, zc.getLocationOnScreen().y+locmargin); } pipe_tools.setMacroPanelKeyInputs(); setVisible(true); } public static int getContentWidth() { return content_width; } public static void quit() { if (MD!=null) { MD.exit(); } } public void exit() { setVisible(false); pipe_tools.removeMacroPanelKeyInputs(); dispose(); MD=null; } public class CreateMacroDialogContentPane extends JPanel { @Override public void paintComponent(final java.awt.Graphics g) { super.paintComponent(g); final java.awt.Dimension d=this.getSize(); g.drawImage(themes.getImage("MCreateDlogBackground.gif"), 0, 0, d.width, d.height, this); } public CreateMacroDialogContentPane() { super(); setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); } } public class myJMenuItem extends JMenuItem implements ActionListener { public void action() { } public myJMenuItem(String s) { super(s); addActionListener(this); setFont(themes.TabMenusFont); } public void actionPerformed(ActionEvent e) { action(); } } public void mouseClicked(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent me) { pressed=me; } public void mouseDragged(MouseEvent me) { location=getLocation(location); int x=location.x-pressed.getX()+me.getX(); int y=location.y-pressed.getY()+me.getY(); setLocation(x, y); Toolkit.getDefaultToolkit().sync(); } public void mouseMoved(MouseEvent e) { } } ./src/eric/macros/DragDropList.java0000644000175000017500000000674411333252213016155 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.macros; /** * * @author erichake */ import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.dnd.DnDConstants; import java.awt.dnd.DragGestureEvent; import java.awt.dnd.DragGestureListener; import java.awt.dnd.DragGestureRecognizer; import java.awt.dnd.DragSource; import java.awt.dnd.DragSourceDragEvent; import java.awt.dnd.DragSourceDropEvent; import java.awt.dnd.DragSourceEvent; import java.awt.dnd.DragSourceListener; import javax.swing.DefaultListModel; import javax.swing.DropMode; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JScrollPane; import javax.swing.TransferHandler; public class DragDropList extends JList { DefaultListModel model; public DragDropList() { super(new DefaultListModel()); model = (DefaultListModel) getModel(); setDragEnabled(true); setDropMode(DropMode.INSERT); setTransferHandler(new MyListDropHandler(this)); new MyDragListener(this); model.addElement("a"); model.addElement("b"); model.addElement("c"); model.addElement(new JLabel("coucou")); } public static void main(String[] a){ JFrame f = new JFrame(); f.add(new JScrollPane(new DragDropList())); f.setSize(300,300); f.setVisible(true); } } class MyDragListener implements DragSourceListener, DragGestureListener { DragDropList list; DragSource ds = new DragSource(); public MyDragListener(DragDropList list) { this.list = list; DragGestureRecognizer dgr = ds.createDefaultDragGestureRecognizer(list, DnDConstants.ACTION_MOVE, this); } public void dragGestureRecognized(DragGestureEvent dge) { StringSelection transferable = new StringSelection(Integer.toString(list.getSelectedIndex())); ds.startDrag(dge, DragSource.DefaultCopyDrop, transferable, this); } public void dragEnter(DragSourceDragEvent dsde) { } public void dragExit(DragSourceEvent dse) { } public void dragOver(DragSourceDragEvent dsde) { } public void dragDropEnd(DragSourceDropEvent dsde) { if (dsde.getDropSuccess()) { System.out.println("Succeeded"); } else { System.out.println("Failed"); } } public void dropActionChanged(DragSourceDragEvent dsde) { } } class MyListDropHandler extends TransferHandler { DragDropList list; public MyListDropHandler(DragDropList list) { this.list = list; } public boolean canImport(TransferHandler.TransferSupport support) { if (!support.isDataFlavorSupported(DataFlavor.stringFlavor)) { return false; } JList.DropLocation dl = (JList.DropLocation) support.getDropLocation(); if (dl.getIndex() == -1) { return false; } else { return true; } } public boolean importData(TransferHandler.TransferSupport support) { if (!canImport(support)) { return false; } Transferable transferable = support.getTransferable(); String indexString; try { indexString = (String) transferable.getTransferData(DataFlavor.stringFlavor); } catch (Exception e) { return false; } int index = Integer.parseInt(indexString); JList.DropLocation dl = (JList.DropLocation) support.getDropLocation(); int dropTargetIndex = dl.getIndex(); System.out.println(dropTargetIndex + " : "); System.out.println("inserted"); return true; } } ./src/eric/macros/DialogTitleBar.java0000644000175000017500000000716211355205440016444 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.macros; import eric.GUI.palette.PaletteManager; import eric.GUI.themes; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.BoxLayout; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; import rene.gui.Global; /** * * @author erichake */ /** * Title bar class */ public class DialogTitleBar extends JPanel { private static int title_height=17; private static int close_width=themes.getIcon("tab_close.png").getIconWidth(); private static int close_height=themes.getIcon("tab_close.png").getIconHeight(); private static int close_marginRight=3; private int title_width; private Image img=themes.getImage("PaletteTitleBarN.png"); private JLabel title=new JLabel(); private TopDialog DLOG; public void paintComponent(Graphics g) { if (DLOG instanceof CreateMacroDialog) { return; } Dimension d=getSize(); g.drawImage(img, 0, 0, d.width, d.height, this); } public DialogTitleBar(TopDialog d, int w) { DLOG=d; title_width=w; setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); setAlignmentX(0.0f); setOpaque(false); setFocusable(false); PaletteManager.fixsize(this, title_width, title_height); title.setText(Global.Loc("macro.creationdlog.title")); title.setFont(new java.awt.Font(Global.GlobalFont, 0, 11)); title.setForeground(new Color(100, 100, 100)); title.setHorizontalAlignment(SwingConstants.LEFT); PaletteManager.fixsize(title, title_width-close_width-close_marginRight, title_height); title.setHorizontalAlignment(JLabel.CENTER); title.setVerticalAlignment(JLabel.CENTER); title.setAlignmentY(0.5f); add(title); add(new CreateMacroDialogCloseBtn()); addMouseListener((MouseListener) DLOG); addMouseMotionListener((MouseMotionListener) DLOG); } public static int getTitleHeight() { return title_height; } class CreateMacroDialogCloseBtn extends JPanel implements MouseListener { private boolean over=false; @Override public void paintComponent(Graphics g) { Dimension d=getSize(); if (over) { g.drawImage(themes.getImage("tab_close_over.png"), 0, 0, d.width, d.height, this); } else { g.drawImage(themes.getImage("tab_close.png"), 0, 0, d.width, d.height, this); } } public CreateMacroDialogCloseBtn() { setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); setAlignmentY(0.5f); setOpaque(false); PaletteManager.fixsize(this, close_width, close_height); addMouseListener(this); } @Override public void mousePressed(MouseEvent e) { over=false; if (DLOG!=null) { DLOG.exit(); } } public void mouseEntered(MouseEvent e) { over=true; repaint(); } public void mouseExited(MouseEvent e) { over=false; repaint(); } public void mouseClicked(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } } } ./src/eric/macros/JMacrosInspector.java0000644000175000017500000005072011355205371017044 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric.macros; import eric.GUI.pipe_tools; import eric.GUI.themes; import eric.JZirkelCanvas; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Point; import java.awt.Toolkit; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.Vector; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.ScrollPaneConstants; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.ZirkelFrame; import rene.zirkel.macro.Macro; import rene.zirkel.objects.ConstructionObject; /* This class represent the macro properties inspector */ public class JMacrosInspector extends JDialog implements MouseListener, MouseMotionListener, TopDialog { private static Macro M=null; private int PW=310; // Palette width private int PH=395; private static JDefaultMutableTreeNode node; private IContent content; private MouseEvent pressed; private Point location; private static JMacrosInspector me; public JMacrosInspector(JDefaultMutableTreeNode mymacro) { setFocusableWindowState(true); setFocusable(false); this.setSize(PW, PH); setUndecorated(true); if (!pipe_tools.isApplet()) { setAlwaysOnTop(true); } else { addWindowListener(new WindowAdapter() { public void windowDeactivated(WindowEvent e) { toFront(); } }); } // content is a JPanel which represents the content of the palette content=new IContent(this); setContentPane(content); DialogTitleBar title=new DialogTitleBar(this, PW); content.add(title, 0); ZirkelCanvas zc=JZirkelCanvas.getCurrentZC(); if (zc!=null) { Point p=zc.getLocationOnScreen(); setLocation(p.x+10, p.y+(zc.getSize().height-PH)/2); } setVisible(true); } public static boolean isDialogVisible() { return (me!=null); } public static void openInspector(JDefaultMutableTreeNode mymacro) { if (me==null) { me=new JMacrosInspector(mymacro); } changemacro(mymacro); } public static void changemacro(JDefaultMutableTreeNode mymacro) { if (me!=null) { me.setMacro(mymacro); } } // set location of the palette (near the right border of the macro panel) : public void setStandardLocation() { } public void clearPalette() { if (M!=null) { content.changemacro(); } node=null; M=null; content.clearfields(); } // method called each time the user ask properties or select another macro // in the tree public void setMacro(final JDefaultMutableTreeNode mynode) { node=mynode; M=node.m; content.fillfields(); } public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent me) { pressed=me; } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mouseDragged(MouseEvent me) { location=getLocation(location); int x=location.x-pressed.getX()+me.getX(); int y=location.y-pressed.getY()+me.getY(); setLocation(x, y); Toolkit.getDefaultToolkit().sync(); } public void mouseMoved(MouseEvent e) { } public static void quit() { if (me!=null) { me.exit(); } } public void exit() { content.changemacro(); node=null; me=null; dispose(); } public void fixObject(int i, boolean b) { content.fixObject(i, b); } public void askObject(int i, boolean b) { content.askObject(i, b); } // this embedded class represents the content of the palette : public class IContent extends JPanel { /** * */ JMacrosInspector JMI; JLabel name; JTextArea comment; JMacrosProperties props; JCheckBox hideDuplicates; private JPanel margin(final int w) { final JPanel mypan=new JPanel(); fixsize(mypan, w, 1); mypan.setOpaque(false); return mypan; } public IContent(final JMacrosInspector jmi) { JMI=jmi; setLayout(new javax.swing.BoxLayout(this, javax.swing.BoxLayout.Y_AXIS)); this.setFocusable(false); name=new JLabel(); comment=new JTextArea(); props=new JMacrosProperties(JMI); hideDuplicates=new JCheckBox(Global.Loc("mi.hideduplicates")); newnameline(); this.add(new mySep(1)); newcommentline(); this.add(new mySep(1)); newproperties(); this.add(new mySep(1)); newhideproperties(); this.add(new mySep(1)); newcontrolline(); fixsize(this, PW, PH); } // set sizes of a palette's JComponent : private void fixsize(final JComponent cp, final int w, final int h) { final Dimension d=new Dimension(w, h); cp.setMaximumSize(d); cp.setMinimumSize(d); cp.setPreferredSize(d); cp.setSize(d); } // add the "name" topic of the palette : public void newnameline() { final JPanel rub=new myRub(); final JPanel myline1=new ContentLine(25); fixsize(name, PW-10, 18); myline1.add(margin(5)); myline1.add(name); rub.add(myline1); this.add(rub); } // add the "comment" topic of the palette : public void newcommentline() { final JPanel rub=new myRub(); final JScrollPane jScroll=new JScrollPane(); final JPanel myline1=new ContentLine(22); final JLabel namelabel=new JLabel(Global.Loc("mi.comment")); fixsize(namelabel, PW-10, 14); myline1.add(margin(5)); myline1.add(namelabel); final JPanel myline2=new ContentLine(100); comment.setLineWrap(true); jScroll.setViewportView(comment); jScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); fixsize(jScroll, PW-10, 80); myline2.add(margin(5)); myline2.add(jScroll); rub.add(myline1); rub.add(myline2); this.add(rub); } // add the "target properties" topic of the palette : public void newhideproperties() { final JPanel rub=new myRub(); rub.setLayout(new javax.swing.BoxLayout(rub, javax.swing.BoxLayout.Y_AXIS)); final JPanel myline1=new ContentLine(22); final JLabel namelabel=new JLabel(Global.Loc("mi.hideproperties")); fixsize(namelabel, PW-10, 14); myline1.add(margin(5)); myline1.add(namelabel); final JPanel mylineC3=new ContentLine(27); hideDuplicates.setOpaque(false); mylineC3.add(margin(20)); mylineC3.add(hideDuplicates); rub.add(myline1); rub.add(mylineC3); this.add(rub); } // add the apply button to the bottom of the palette : public void newcontrolline() { final JPanel rub=new myRub(); final JPanel myline=new ContentLine(25); final JButton applybtn=new JButton("Apply"); applybtn.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(final MouseEvent e) { changemacro(); // It's important to refresh the inspector because // parameters position may have change : fillfields(); } }); // applybtn.setBorder(BorderFactory.createRaisedBevelBorder()); // applybtn.setBorder(BorderFactory.createEmptyBorder()); fixsize(applybtn, 90, 18); applybtn.setFont(new Font("System", Font.BOLD, 11)); final JPanel sep=new JPanel(); sep.setOpaque(false); myline.add(sep); // JButton jb=new JButton("Aaaa"); // fixsize(jb,90,18); myline.add(applybtn); myline.add(margin(5)); rub.add(myline); this.add(rub); } // add the parameters properties to the palette : public void newproperties() { final JPanel rub=new myRub(); final JPanel myline1=new ContentLine(22); final JLabel namelabel=new JLabel(Global.Loc("mi.properties")); myline1.add(margin(5)); myline1.add(namelabel); fixsize(namelabel, PW-10, 14); final JPanel myline2=new ContentLine(130); fixsize(props, PW-10, 100); myline2.add(margin(5)); myline2.add(props); rub.add(myline1); rub.add(myline2); this.add(rub); } /************************************************* * this is the tricky method : it reads the inspector changes and then * store the new values in the macro m. A macro contains two types of * parameters : 1) normal parameters (the one you shows at the first * step of macro's creation ). They are inside the m.Params array for * ConstructionObjects and m.Prompts array for prompts 2) numerical * input parameters (it's possible to make macros with numerical inputs * ). Name of Objects are in the PromptFor array and prompts in the * PromptName array *************************************************/ public void changemacro() { ConstructionObject[] params; final Vector newparams=new Vector(); final Vector newprompts=new Vector(); final Vector newpromptFor=new Vector(); final Vector newpromptName=new Vector(); props.stopCellEditing(); if (M==null) { return; } if (isError()) { return; } M.setComment(comment.getText()); params=M.getParams(); // read "normal" parameters and store them in : // newparams and newprompts if "ask" is not checked (stays "normal") // newPromptFor and newPromptName if "ask" is not checked (becomes // "numerical input") for (int i=0; i. */ package eric.macros; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics2D; import java.awt.Insets; import java.awt.Point; import java.awt.Rectangle; import java.awt.SystemColor; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.dnd.Autoscroll; import java.awt.dnd.DnDConstants; import java.awt.dnd.DragGestureEvent; import java.awt.dnd.DragGestureListener; import java.awt.dnd.DragSource; import java.awt.dnd.DragSourceDragEvent; import java.awt.dnd.DragSourceDropEvent; import java.awt.dnd.DragSourceEvent; import java.awt.dnd.DragSourceListener; import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; import java.awt.dnd.DropTargetEvent; import java.awt.dnd.DropTargetListener; import java.awt.dnd.InvalidDnDOperationException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.IOException; import javax.swing.Icon; import javax.swing.JLabel; import javax.swing.JTree; import javax.swing.Timer; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.MutableTreeNode; import javax.swing.tree.TreePath; public class CTree extends JTree implements DragSourceListener, DragGestureListener, Autoscroll, TreeSelectionListener, MouseListener { // Constants... /** * */ private static final long serialVersionUID = 1L; // Fields... private TreePath _pathSource; // The path being dragged private BufferedImage _imgGhost; // The 'drag image' private final Point _ptOffset = new Point(); // Where, in the drag image, // the mouse was clicked private boolean dropped = false; public MacrosList JML; public NodePopupMenu nodepopup; // Constructors... public CTree(final MacrosList jml) // Use the default JTree constructor so // that we get a sample TreeModel built // for us { JML = jml; putClientProperty("JTree.lineStyle", "none"); // this.addTreeSelectionListener(this); // this.getModel().addTreeModelListener(this); this.addMouseListener(this); // Make this JTree a drag source final DragSource dragSource = DragSource.getDefaultDragSource(); dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY_OR_MOVE, this); // Also, make this JTree a drag target final DropTarget dropTarget = new DropTarget(this, new CDropTargetListener()); dropTarget.setDefaultActions(DnDConstants.ACTION_COPY_OR_MOVE); nodepopup = new NodePopupMenu(this); } private DefaultMutableTreeNode cloneAll(final DefaultMutableTreeNode Ndfrom) { final DefaultMutableTreeNode Ndto = (DefaultMutableTreeNode) Ndfrom .clone(); if (!(Ndfrom.isLeaf())) { for (int i = 0; i < Ndfrom.getChildCount(); i++) { final DefaultMutableTreeNode mynode = cloneAll((DefaultMutableTreeNode) Ndfrom .getChildAt(i)); Ndto.add(mynode); } } return Ndto; } // Interface: DragGestureListener public void dragGestureRecognized(final DragGestureEvent e) { final Point ptDragOrigin = e.getDragOrigin(); final TreePath path = getPathForLocation(ptDragOrigin.x, ptDragOrigin.y); if (path == null) return; if (isRootPath(path)) return; // Ignore user trying to drag the root node // Work out the offset of the drag point from the TreePath bounding // rectangle origin final Rectangle raPath = getPathBounds(path); _ptOffset.setLocation(ptDragOrigin.x - raPath.x, ptDragOrigin.y - raPath.y); // Get the cell renderer (which is a JLabel) for the path being dragged final JLabel lbl = (JLabel) getCellRenderer() .getTreeCellRendererComponent(this, // tree path.getLastPathComponent(), // value false, // isSelected (dont want a colored background) isExpanded(path), // isExpanded getModel().isLeaf(path.getLastPathComponent()), // isLeaf 0, // row (not important for rendering) false // hasFocus (dont want a focus rectangle) ); lbl.setSize((int) raPath.getWidth(), (int) raPath.getHeight()); // <-- // The // layout // manager // would // normally // do // this // Get a buffered image of the selection for dragging a ghost image _imgGhost = new BufferedImage((int) raPath.getWidth(), (int) raPath .getHeight(), BufferedImage.TYPE_INT_ARGB_PRE); final Graphics2D g2 = _imgGhost.createGraphics(); // Ask the cell renderer to paint itself into the BufferedImage g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC, 0.5f)); // Make // the // image // ghostlike lbl.paint(g2); // Now paint a gradient UNDER the ghosted JLabel text (but not under the // icon if any) // Note: this will need tweaking if your icon is not positioned to the // left of the text final Icon icon = lbl.getIcon(); final int nStartOfText = (icon == null) ? 0 : icon.getIconWidth() + lbl.getIconTextGap(); g2.setComposite(AlphaComposite.getInstance(AlphaComposite.DST_OVER, 0.5f)); // Make the gradient ghostlike g2.setPaint(new GradientPaint(nStartOfText, 0, SystemColor.controlShadow, getWidth(), 0, new Color(255, 255, 255, 0))); g2.fillRect(nStartOfText, 0, getWidth(), _imgGhost.getHeight()); g2.dispose(); setSelectionPath(path); // Select this path in the tree // System.out.println("DRAGGING: "+path.getLastPathComponent()); // DefaultMutableTreeNode // mynode=(DefaultMutableTreeNode)path.getLastPathComponent(); // Transferable transferable = (Transferable) mynode.getUserObject(); // Wrap the path being transferred into a Transferable object final Transferable transferable = new CTransferableTreePath(path); // Remember the path being dragged (because if it is being moved, we // will have to delete it later) _pathSource = path; // We pass our drag image just in case it IS supported by the platform try { this.setEditable(false); // e.startDrag(new Cursor(Cursor.HAND_CURSOR),transferable,this); e.startDrag(null, _imgGhost, new Point(5, 5), transferable, this); } catch (final InvalidDnDOperationException dnde) { // JOptionPane.showMessageDialog(null, "coucou2"); } // e.startDrag(null, _imgGhost, new Point(5,5), transferable, this); } // Interface: DragSourceListener public void dragEnter(final DragSourceDragEvent e) { } public void dragOver(final DragSourceDragEvent e) { } public void dragExit(final DragSourceEvent e) { } public void dropActionChanged(final DragSourceDragEvent e) { } public void dragDropEnd(final DragSourceDropEvent e) { if (e.getDropSuccess()) { final int nAction = e.getDropAction(); if (nAction == DnDConstants.ACTION_MOVE) { // The dragged item // (_pathSource) has // been inserted at the // target selected by // the user. // Now it is time to delete it from its original location. // System.out.println("REMOVING: " + // _pathSource.getLastPathComponent()); if (dropped) { final DefaultTreeModel model = (DefaultTreeModel) getModel(); final MutableTreeNode node = (MutableTreeNode) _pathSource .getLastPathComponent(); MutableTreeNode parent = (MutableTreeNode) node.getParent(); model.removeNodeFromParent(node); while (parent.isLeaf()) { final MutableTreeNode grandparent = (MutableTreeNode) parent .getParent(); model.removeNodeFromParent(parent); parent = grandparent; } dropped = false; } _pathSource = null; } } } // DropTargetListener interface object... class CDropTargetListener implements DropTargetListener { // Fields... private TreePath _pathLast = null; private final Rectangle2D _raCueLine = new Rectangle2D.Float(); private Rectangle2D _raGhost = new Rectangle2D.Float(); private final Color _colorCueLine; private Point _ptLast = new Point(); private final Timer _timerHover; private int _nLeftRight = 0; // Cumulative left/right mouse movement // Constructor... public CDropTargetListener() { _colorCueLine = new Color(SystemColor.controlShadow.getRed(), SystemColor.controlShadow.getGreen(), SystemColor.controlShadow.getBlue(), 64); // Set up a hover timer, so that a node will be automatically // expanded or collapsed // if the user lingers on it for more than a short time _timerHover = new Timer(1000, new ActionListener() { public void actionPerformed(final ActionEvent e) { _nLeftRight = 0; // Reset left/right movement trend if (isRootPath(_pathLast)) return; // Do nothing if we are hovering over the root // node if (isExpanded(_pathLast)) collapsePath(_pathLast); else expandPath(_pathLast); } }); _timerHover.setRepeats(false); // Set timer to one-shot mode } // DropTargetListener interface public void dragEnter(final DropTargetDragEvent e) { if (!isDragAcceptable(e)) e.rejectDrag(); else e.acceptDrag(e.getDropAction()); } public void dragExit(final DropTargetEvent e) { if (!DragSource.isDragImageSupported()) { repaint(_raGhost.getBounds()); } } /** * This is where the ghost image is drawn */ public void dragOver(final DropTargetDragEvent e) { // Even if the mouse is not moving, this method is still invoked 10 // times per second final Point pt = e.getLocation(); if (pt.equals(_ptLast)) return; // Try to determine whether the user is flicking the cursor right or // left final int nDeltaLeftRight = pt.x - _ptLast.x; if ((_nLeftRight > 0 && nDeltaLeftRight < 0) || (_nLeftRight < 0 && nDeltaLeftRight > 0)) _nLeftRight = 0; _nLeftRight += nDeltaLeftRight; _ptLast = pt; final Graphics2D g2 = (Graphics2D) getGraphics(); // If a drag image is not supported by the platform, then draw my // own drag image if (!DragSource.isDragImageSupported()) { paintImmediately(_raGhost.getBounds()); // Rub out the last // ghost image and cue // line // And remember where we are about to draw the new ghost image _raGhost.setRect(pt.x - _ptOffset.x, pt.y - _ptOffset.y, _imgGhost.getWidth(), _imgGhost.getHeight()); g2.drawImage(_imgGhost, AffineTransform.getTranslateInstance( _raGhost.getX(), _raGhost.getY()), null); } else // Just rub out the last cue line paintImmediately(_raCueLine.getBounds()); final TreePath path = getClosestPathForLocation(pt.x, pt.y); if (!(path == _pathLast)) { _nLeftRight = 0; // We've moved up or down, so reset left/right // movement trend _pathLast = path; _timerHover.restart(); } // In any case draw (over the ghost image if necessary) a cue line // indicating where a drop will occur final Rectangle raPath = getPathBounds(path); _raCueLine.setRect(0, raPath.y + (int) raPath.getHeight(), getWidth(), 2); g2.setColor(_colorCueLine); g2.fill(_raCueLine); // Now superimpose the left/right movement indicator if necessary if (_nLeftRight > 20) { } else if (_nLeftRight < -20) { } else { } // And include the cue line in the area to be rubbed out next time _raGhost = _raGhost.createUnion(_raCueLine); /* * // Do this if you want to prohibit dropping onto the drag source * if (path.equals(_pathSource)) e.rejectDrag(); else * e.acceptDrag(e.getDropAction()); */ } public void dropActionChanged(final DropTargetDragEvent e) { if (!isDragAcceptable(e)) e.rejectDrag(); else e.acceptDrag(e.getDropAction()); } public void drop(final DropTargetDropEvent e) { _timerHover.stop(); // Prevent hover timer from doing an unwanted // expandPath or collapsePath if (!isDropAcceptable(e)) { e.rejectDrop(); return; } e.acceptDrop(e.getDropAction()); final Transferable transferable = e.getTransferable(); final DataFlavor[] flavors = transferable.getTransferDataFlavors(); for (final DataFlavor flavor : flavors) { if (flavor .isMimeTypeEqual(DataFlavor.javaJVMLocalObjectMimeType)) { try { final Point pt = e.getLocation(); final TreePath pathTarget = getClosestPathForLocation( pt.x, pt.y); final TreePath pathSource = (TreePath) transferable .getTransferData(flavor); // System.out.println("DROPPING: "+pathSource.getLastPathComponent()); // TreeModel model = getModel(); final DefaultTreeModel model = (DefaultTreeModel) getModel(); final TreePath pathNewChild = null; final DefaultMutableTreeNode nodeorg = (DefaultMutableTreeNode) pathSource .getLastPathComponent(); DefaultMutableTreeNode nodeto = (DefaultMutableTreeNode) pathTarget .getLastPathComponent(); // avoid a folder to be drag inside its own hierarchy dropped = true; if (!(nodeorg.isLeaf())) { DefaultMutableTreeNode parent = nodeto; while (parent != null) { if (parent.equals(nodeorg)) { dropped = false; JML.repaint(); return; } parent = (DefaultMutableTreeNode) parent .getParent(); } } if (dropped) { DefaultMutableTreeNode nodeparentto = (nodeto .isLeaf()) ? (DefaultMutableTreeNode) pathTarget .getParentPath().getLastPathComponent() : nodeto; final TreePath tp = new TreePath(nodeparentto .getPath()); if (!(isExpanded(tp))) { nodeto = nodeparentto; nodeparentto = (DefaultMutableTreeNode) nodeto .getParent(); } int h = 0; for (h = 0; h < nodeparentto.getChildCount(); h++) { if (nodeparentto.getChildAt(h).equals(nodeto)) break; } if (h == nodeparentto.getChildCount()) h = -1; model.insertNodeInto(cloneAll(nodeorg), nodeparentto, h + 1); } // model.insertNodeInto() // . // .. Add your code here to ask your TreeModel to copy // the node and act on the mouse gestures... // . // For example: // If pathTarget is an expanded BRANCH, // then insert source UNDER it (before the first child // if any) // If pathTarget is a collapsed BRANCH (or a LEAF), // then insert source AFTER it // Note: a leaf node is always marked as collapsed // You ask the model to do the copying... // ...and you supply the copyNode method in the model as // well of course. // if (_nShift == 0) // pathNewChild = model.copyNode(pathSource, pathTarget, // isExpanded(pathTarget)); // else if (_nShift > 0) // The mouse is being flicked // to the right (so move the node right) // pathNewChild = model.copyNodeRight(pathSource, // pathTarget); // else // The mouse is being flicked to the left (so // move the node left) // pathNewChild = model.copyNodeLeft(pathSource); if (pathNewChild != null) setSelectionPath(pathNewChild); // Mark this as the // selected path in // the tree break; // No need to check remaining flavors } catch (final UnsupportedFlavorException ufe) { // System.out.println(ufe); e.dropComplete(false); return; } catch (final IOException ioe) { // System.out.println(ioe); e.dropComplete(false); return; } } } e.dropComplete(true); } // Helpers... public boolean isDragAcceptable(final DropTargetDragEvent e) { // Only accept COPY or MOVE gestures (ie LINK is not supported) if ((e.getDropAction() & DnDConstants.ACTION_COPY_OR_MOVE) == 0) return false; // Only accept this particular flavor if (!e.isDataFlavorSupported(CTransferableTreePath.TREEPATH_FLAVOR)) return false; /* * // Do this if you want to prohibit dropping onto the drag * source... Point pt = e.getLocation(); TreePath path = * getClosestPathForLocation(pt.x, pt.y); if * (path.equals(_pathSource)) return false; */ /* * // Do this if you want to select the best flavor on offer... * DataFlavor[] flavors = e.getCurrentDataFlavors(); for (int i = 0; * i < flavors.length; i++ ) { DataFlavor flavor = flavors[i]; if * (flavor.isMimeTypeEqual(DataFlavor.javaJVMLocalObjectMimeType)) * return true; } */ return true; } public boolean isDropAcceptable(final DropTargetDropEvent e) { // Only accept COPY or MOVE gestures (ie LINK is not supported) if ((e.getDropAction() & DnDConstants.ACTION_COPY_OR_MOVE) == 0) return false; // Only accept this particular flavor if (!e.isDataFlavorSupported(CTransferableTreePath.TREEPATH_FLAVOR)) return false; /* * // Do this if you want to prohibit dropping onto the drag * source... Point pt = e.getLocation(); TreePath path = * getClosestPathForLocation(pt.x, pt.y); if * (path.equals(_pathSource)) return false; */ /* * // Do this if you want to select the best flavor on offer... * DataFlavor[] flavors = e.getCurrentDataFlavors(); for (int i = 0; * i < flavors.length; i++ ) { DataFlavor flavor = flavors[i]; if * (flavor.isMimeTypeEqual(DataFlavor.javaJVMLocalObjectMimeType)) * return true; } */ return true; } } // Autoscroll Interface... // The following code was borrowed from the book: // Java Swing // By Robert Eckstein, Marc Loy & Dave Wood // Paperback - 1221 pages 1 Ed edition (September 1998) // O'Reilly & Associates; ISBN: 156592455X // // The relevant chapter of which can be found at: // http://www.oreilly.com/catalog/jswing/chapter/dnd.beta.pdf private static final int AUTOSCROLL_MARGIN = 12; // Ok, weíve been told to scroll because the mouse cursor is in our // scroll zone. public void autoscroll(final Point pt) { // Figure out which row weíre on. int nRow = getRowForLocation(pt.x, pt.y); // If we are not on a row then ignore this autoscroll request if (nRow < 0) return; final Rectangle raOuter = getBounds(); // Now decide if the row is at the top of the screen or at the // bottom. We do this to make the previous row (or the next // row) visible as appropriate. If weíre at the absolute top or // bottom, just return the first or last row respectively. nRow = (pt.y + raOuter.y <= AUTOSCROLL_MARGIN) // Is row at top of // screen? ? (nRow <= 0 ? 0 : nRow - 1) // Yes, scroll up one row : (nRow < getRowCount() - 1 ? nRow + 1 : nRow); // No, scroll // down one row scrollRowToVisible(nRow); } // Calculate the insets for the *JTREE*, not the viewport // the tree is in. This makes it a bit messy. public Insets getAutoscrollInsets() { final Rectangle raOuter = getBounds(); final Rectangle raInner = getParent().getBounds(); return new Insets(raInner.y - raOuter.y + AUTOSCROLL_MARGIN, raInner.x - raOuter.x + AUTOSCROLL_MARGIN, raOuter.height - raInner.height - raInner.y + raOuter.y + AUTOSCROLL_MARGIN, raOuter.width - raInner.width - raInner.x + raOuter.x + AUTOSCROLL_MARGIN); } /* * // Use this method if you want to see the boundaries of the // autoscroll * active region. Toss it out, otherwise. public void * paintComponent(Graphics g) { super.paintComponent(g); Rectangle raOuter = * getBounds(); Rectangle raInner = getParent().getBounds(); * g.setColor(Color.red); g.drawRect(-raOuter.x + 12, -raOuter.y + 12, * raInner.width - 24, raInner.height - 24); } */ private boolean isRootPath(final TreePath path) { return isRootVisible() && getRowForPath(path) == 0; } // Ready to go : execute macro on click public void valueChanged(final TreeSelectionEvent e) { // JDefaultMutableTreeNode node = // (JDefaultMutableTreeNode)this.getLastSelectedPathComponent(); // if (node.isLeaf()) { // node.runZmacro(); // }; } // MouseListener interface public void mouseClicked(final MouseEvent e) { nodepopup.handleMouseClick(e); } public void mousePressed(final MouseEvent e) { nodepopup.actualiseproperties(); nodepopup.handlePopup(e); } public void mouseReleased(final MouseEvent e) { nodepopup.handlePopup(e); } public void mouseEntered(final MouseEvent e) { // ShowToolTip(e); } public void mouseExited(final MouseEvent e) { // HideToolTip(); } } ./src/eric/macros/TopDialog.java0000644000175000017500000000031511355205353015474 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.macros; /** * * @author erichake */ public interface TopDialog { public void exit(); } ./src/eric/macros/MacrosList.java0000644000175000017500000005061611355611503015701 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric.macros; import eric.GUI.palette.PaletteManager; import eric.GUI.themes; import eric.GUI.window.LeftPanel_content; import eric.JGeneralMenuBar; import eric.JZirkelCanvas; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.MenuItem; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.Vector; import javax.swing.BorderFactory; import javax.swing.DefaultCellEditor; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.JTree; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import javax.swing.event.TreeModelEvent; import javax.swing.event.TreeModelListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeCellRenderer; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; import rene.gui.ActionTranslator; import rene.gui.Global; import rene.gui.MyMenu; import rene.zirkel.ZirkelFrame; import rene.zirkel.construction.ConstructionException; import rene.zirkel.macro.Macro; import rene.zirkel.macro.MacroItem; import rene.zirkel.objects.ConstructionObject; // Toute ce qui touche à l'arbre de macros et à sa gestion : public class MacrosList extends JPanel { /** * */ private final int CONTROLHEIGHT=25; private final ImageIcon JTreefoldclosed; private final ImageIcon JTreefoldopened; private final ImageIcon[] JTreeleaf; private CTree MacrosTree; private JDefaultMutableTreeNode MacroTreeTopNode=new JDefaultMutableTreeNode("Macros"); private ZirkelFrame ZF; private JScrollPane jscrolls; private JControls controls; // private Jcreatemacro createmacropanel; public MacrosList(ZirkelFrame zf) { ZF=zf; JTreefoldclosed=themes.getIcon("JTreefoldclosed.gif"); JTreefoldopened=themes.getIcon("JTreefoldopened.gif"); JTreeleaf=new ImageIcon[4]; JTreeleaf[0]=themes.getIcon("JTreeleaf_0.gif"); JTreeleaf[1]=themes.getIcon("JTreeleaf_1.gif"); JTreeleaf[2]=themes.getIcon("JTreeleaf_2.gif"); JTreeleaf[3]=themes.getIcon("JTreeleaf_3.gif"); this.setLayout(new javax.swing.BoxLayout(this, javax.swing.BoxLayout.Y_AXIS)); // uncomment this line to obtain gray conection lines between leaves : // UIManager.put("Tree.hash",new ColorUIResource(Color.lightGray)); MacroTreeTopNode=new JDefaultMutableTreeNode("Macros"); MacrosTree=new CTree(this) { /** * */ @Override public void paint(final Graphics g) { final ImageIcon backimage=themes.getIcon("macrospanelback.gif"); g.drawImage(backimage.getImage(), 0, 0, this.getSize().width, backimage.getIconHeight(), this); super.paint(g); } }; MacrosTree.setFocusable(false); MacrosTree.setModel(new MyTreeModel(MacroTreeTopNode)); MacrosTree.getSelectionModel().setSelectionMode( TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION); final MyCellRenderer renderer=new MyCellRenderer(); MacrosTree.setCellRenderer(renderer); MacrosTree.setCellEditor(new MyDefaultCellEditor()); MacrosTree.setOpaque(false); MacrosTree.setFont(new Font(Global.GlobalFont, 0, 12)); MacrosTree.setForeground(new Color(70, 70, 70)); MacrosTree.setDragEnabled(false); MacrosTree.setEditable(false); jscrolls=new JScrollPane(MacrosTree); jscrolls.setAlignmentX(0F); jscrolls.setBorder(BorderFactory.createEmptyBorder()); this.add(jscrolls); controls=new JControls(this); this.add(controls); // createmacropanel=new Jcreatemacro(this); // this.add(createmacropanel); } public JDefaultMutableTreeNode getTopNode() { return MacroTreeTopNode; } public CTree getMacrosTree() { return MacrosTree; } // Utilise le Vector de macros pour initialiser l'arbre : public void initTreeFromZCMacros() { Vector mc; // JMacrosTools.setDefaultMacros(); MacroTreeTopNode.removeAllChildren(); // removeAll(); // MacroTreeTopNode=new JDefaultMutableTreeNode("Macros"); mc=ZF.ZC.getMacros(); for (int i=0; i0) { JPopupMenu.setDefaultLightWeightPopupEnabled(false); ParseMacroTree(pm, jm, MacroTreeTopNode, "root"); ZF.ZC.PM.removeAll(); JGeneralMenuBar.s_InitMacrosMenu(); final JMenu jmroot=(JMenu) jm.getItem(0); final MyMenu pmroot=(MyMenu) pm.getItem(0); while (pmroot.getItemCount()>0) { ZF.ZC.PM.add(pmroot.getItem(0)); JGeneralMenuBar.addMacrosMenu(jmroot.getItem(0)); // if (ZF.ZC.isLibraryMacrosVisible()) { // ZF.ZC.PM.add(pmroot.getItem(0)); // JGeneralMenuBar.addMacrosMenu(jmroot.getItem(0)); // } else { // pmroot.remove(0); // jmroot.remove(0); // // } } } else { ZF.ZC.PM.removeAll(); JGeneralMenuBar.s_InitMacrosMenu(); } MacroTools.updateLibraryMacros(); } // Procédure recursive appelée uniquement par ActualiseMacroPopupMenu. // Parcours de l'arbre de macros : private void ParseMacroTree(final MyMenu PMmenu, final JMenu JMmenu, final JDefaultMutableTreeNode node, final String path) { final String mypath=path; if (!(node.isLeaf())) { final MyMenu mymenu=new MyMenu((String) node.getUserObject()); final JMenu myjmenu=new JMenu((String) node.getUserObject()); myjmenu.setFont(new java.awt.Font("System", 0, 13)); for (int i=0; i1) { ((DefaultTreeModel) MacrosTree.getModel()).removeNodeFromParent(node); } } } } // Les noeuds de l'arbre sont considérés comme des JLabels // Cette classe se charge de leurs look : class MyCellRenderer extends JLabel implements TreeCellRenderer { /** * */ public MyCellRenderer() { setOpaque(false); setBackground(null); } public Component getTreeCellRendererComponent(final JTree tree, final Object value, final boolean sel, final boolean expanded, final boolean leaf, final int row, final boolean hasFocus) { final String stringValue=tree.convertValueToText(value, sel, expanded, leaf, row, hasFocus); setText(stringValue); setEnabled(tree.isEnabled()); setFont(tree.getFont()); setForeground(Color.black); setOpaque(sel); // Couleur de sélection : setBackground(Color.lightGray); final JDefaultMutableTreeNode mynode=(JDefaultMutableTreeNode) value; if (leaf) { setIcon((stringValue.startsWith(("-- ")))?null :JTreeleaf[mynode.macrotype]); if (mynode.macrotype==0) { setForeground(new Color(68, 84, 131)); } } else { setIcon((expanded)?JTreefoldopened:JTreefoldclosed); } return this; } } // Le modèle sur lequel est basé l'arbre // Se charge de l'édition des noeuds et contient les TreeModelListeners : class MyTreeModel extends DefaultTreeModel implements TreeModelListener { /** * */ public MyTreeModel(final TreeNode node) { super(node); this.addTreeModelListener(this); } @Override public void valueForPathChanged(final TreePath path, final Object newValue) { final JDefaultMutableTreeNode tn=(JDefaultMutableTreeNode) path.getLastPathComponent(); super.valueForPathChanged(path, newValue); tn.ActualisePath(); } public void treeNodesChanged(final TreeModelEvent e) { SwingUtilities.invokeLater(new Runnable() { public void run() { ActualiseMacroPopupMenu(); } }); } public void treeNodesInserted(final TreeModelEvent e) { // System.out.println("treeNodesInserted"); SwingUtilities.invokeLater(new Runnable() { public void run() { ActualiseMacroPopupMenu(); } }); } public void treeNodesRemoved(final TreeModelEvent e) { SwingUtilities.invokeLater(new Runnable() { public void run() { ActualiseMacroPopupMenu(); } }); } public void treeStructureChanged(final TreeModelEvent e) { // System.out.println("treeStructureChanged"); SwingUtilities.invokeLater(new Runnable() { public void run() { ActualiseMacroPopupMenu(); } }); } } /************************************************************************************** *** N'oublions pas que JMacrosList est un JPanel qui contient d'autres * JPanels La class Jcontrols contient les boutons d'édition de l'arbre et * leurs listeners ***************************************************************************************/ class JControls extends JPanel { /** * */ private JButton addbtn; private JButton delbtn; private JButton renbtn; private JButton createbtn; private String message=""; private MacrosList MI; @Override public void paintComponent(final java.awt.Graphics g) { super.paintComponent(g); final java.awt.Dimension d=this.getSize(); g.drawImage(themes.getImage("tab_bottom.gif"), 0, 0, d.width, d.height, this); } public void setButtonsIcons() { addbtn.setIcon(themes.getIcon("addmacrofolder.png")); addbtn.setRolloverIcon(themes.getIcon("addmacrofoldersel.png")); delbtn.setIcon(themes.getIcon("delmacro.png")); delbtn.setToolTipText(Global.Loc("macros.deleteselected")); renbtn.setIcon(themes.getIcon("renamemacro.png")); renbtn.setRolloverIcon(themes.getIcon("renamemacrosel.png")); createbtn.setIcon(themes.getIcon("createmacro.png")); createbtn.setRolloverIcon(themes.getIcon("createmacroover.png")); } public JControls(MacrosList mi) { MI=mi; this.setLayout(new javax.swing.BoxLayout(this, javax.swing.BoxLayout.X_AXIS)); this.setAlignmentX(0F); addbtn=new JButton(); addbtn.setToolTipText(Global.Loc("macros.addfolder")); addbtn.setOpaque(false); addbtn.setContentAreaFilled(false); addbtn.setBorder(BorderFactory.createEmptyBorder()); addbtn.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(final MouseEvent e) { MacrosTree.nodepopup.addfolder(); } }); delbtn=new JButton(); delbtn.setOpaque(false); delbtn.setContentAreaFilled(false); delbtn.setBorder(BorderFactory.createEmptyBorder()); delbtn.setRolloverIcon(themes.getIcon("delmacrosel.png")); delbtn.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(final MouseEvent e) { // MacrosTree.nodepopup.deletenodes(); System.out.println("size="+JZirkelCanvas.getCurrentZC().getMacros().size()); } }); renbtn=new JButton(); renbtn.setToolTipText(Global.Loc("macros.renamemacro")); renbtn.setOpaque(false); renbtn.setContentAreaFilled(false); renbtn.setBorder(BorderFactory.createEmptyBorder()); renbtn.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(final MouseEvent e) { MacrosTree.nodepopup.renamenode(); } }); createbtn=new JButton(); createbtn.setToolTipText(Global.Loc("macros.recordmacro")); createbtn.setSelectedIcon(themes.getIcon("createmacrosel.png")); createbtn.setBorder(BorderFactory.createEmptyBorder()); createbtn.setOpaque(false); createbtn.setContentAreaFilled(false); createbtn.setSelected(false); setButtonsIcons(); createbtn.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(final MouseEvent e) { // if (createbtn.isSelected()) { // message=createmacropanel.getComment().getText(); // createmacropanel.getComment().setText(Global.Loc("macros.cancel")); // } } @Override public void mouseExited(final MouseEvent e) { // if (createbtn.isSelected()) { // if (message!="") { // createmacropanel.getComment().setText(message); // } // } } @Override public void mousePressed(final MouseEvent e) { if (createbtn.isSelected()) { createbtn.setSelected(false); // createmacropanel.disappeargently(); // PaletteManager.setSelected("point", true); } else { createbtn.setSelected(true); new CreateMacroDialog(MI); // createmacropanel.appeargently(); // PaletteManager.deselectgeomgroup(); } } }); final JPanel spacer=new JPanel(); spacer.setOpaque(false); this.add(addbtn); this.add(delbtn); this.add(renbtn); this.add(spacer); this.add(createbtn); } } } ./src/eric/macros/JDefaultMutableTreeNode.java0000644000175000017500000000553211351372274020261 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric.macros; import eric.GUI.palette.PaletteManager; import eric.GUI.pipe_tools; import javax.swing.JMenuItem; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreeNode; import rene.gui.MyMenuItem; import rene.zirkel.ZirkelFrame; import rene.zirkel.macro.Macro; public class JDefaultMutableTreeNode extends DefaultMutableTreeNode { /** * */ MyMenuItem PMmenuitem; JMenuItem MainMenuItem; ZirkelFrame ZF; String name = ""; Macro m; int macrotype;// 0: library macro 2 : file macro public JDefaultMutableTreeNode(final String s) { super(s); macrotype = MacroTools.FILE_MACRO; } public JDefaultMutableTreeNode(final ZirkelFrame zf, final Macro mcr) { super(); ZF = zf; macrotype = (mcr.isProtected()) ? MacroTools.LIBRARY_MACRO : MacroTools.FILE_MACRO; name = mcr.getName(); m = mcr; final String[] mytab = mcr.getName().split(("/")); MainMenuItem = new JMenuItem(mytab[mytab.length - 1]); MainMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(final java.awt.event.ActionEvent evt) { menuaction(); } }); MainMenuItem.setFont(new java.awt.Font("System", 0, 13)); PMmenuitem = new MyMenuItem(mytab[mytab.length - 1]); PMmenuitem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(final java.awt.event.ActionEvent evt) { menuaction(); } }); this.setUserObject(mytab[mytab.length - 1]); } public void menuaction() { PaletteManager.deselectgeomgroup(); pipe_tools.setMacroHelp(m); ZF.runMacro(m); } public void runZmacro() { ZF.runMacro(m); } public void setType(final int newtype) { macrotype=newtype; m.setProtected(macrotype==MacroTools.LIBRARY_MACRO); } public void ActualisePath() { if (this.isLeaf()) { final TreeNode[] mypath = this.getPath(); name = ""; for (int i = 1; i < mypath.length - 1; i++) { name += mypath[i].toString() + "/"; } name += mypath[mypath.length - 1].toString(); ZF.ZC.renameMacro(m, name); PMmenuitem.setLabel(mypath[mypath.length - 1].toString()); MainMenuItem.setText(mypath[mypath.length - 1].toString()); } } } ./src/eric/macros/JMacrosProperties.java0000644000175000017500000001440411335460620017227 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric.macros; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.KeyEvent; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.KeyStroke; import javax.swing.ListSelectionModel; import javax.swing.ScrollPaneConstants; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import rene.gui.Global; public class JMacrosProperties extends JPanel { /** * */ private final JTable table; private final DefaultTableModel model; private final JMacrosInspector JMI; public JMacrosProperties(final JMacrosInspector jmi) { super(new GridLayout(1, 0)); JMI = jmi; this.setFocusable(false); model = new DefaultTableModel() { /** * */ private static final long serialVersionUID = 1L; @Override public Class getColumnClass(final int columnIndex) { if ((columnIndex == 3) || (columnIndex == 4)) { return Boolean.class; } else { return super.getColumnClass(columnIndex); } } }; table = new JTable(model) { /** * */ private static final long serialVersionUID = 1L; @Override public boolean isCellEditable(final int row, final int col) { if (col == 0) return false; if ((col == 2) && (String.valueOf(getValueAt(row, 3)).equals("true"))) return false; return (getValueAt(row, col) != null); } @Override public boolean isCellSelected(final int row, final int col) { return false; } @Override public void setValueAt(final Object o, final int row, final int col) { getModel().setValueAt(o, row, col); if (col == 3) JMI.fixObject(row, String.valueOf( getModel().getValueAt(row, col)).equals("true")); if (col == 4) JMI.askObject(row, String.valueOf( getModel().getValueAt(row, col)).equals("true")); } @Override public TableCellRenderer getCellRenderer(final int row, final int column) { final Object value = getValueAt(row, column); if (value != null) { return getDefaultRenderer(value.getClass()); } return getDefaultRenderer(String.class); } }; table.setCellSelectionEnabled(true); table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); table.setShowGrid(true); table.setGridColor(Color.lightGray); table.setRowHeight(20); table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put( KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0, false), "none"); table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put( KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false), "none"); model.addColumn(Global.Loc("mi.tab.type")); model.addColumn(Global.Loc("mi.tab.name")); model.addColumn(Global.Loc("mi.tab.prompt")); model.addColumn(Global.Loc("mi.tab.fix")); model.addColumn(Global.Loc("mi.tab.ask")); // model.addRow(new Object[]{new String(""),new String(""),new // String(""),new Boolean(false), new Boolean(false)}); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); table.getColumnModel().getColumn(0).setPreferredWidth(45); table.getColumnModel().getColumn(1).setPreferredWidth(45); table.getColumnModel().getColumn(2).setPreferredWidth(125); table.getColumnModel().getColumn(3).setPreferredWidth(33); table.getColumnModel().getColumn(4).setPreferredWidth(33); final JScrollPane scrollPane = new JScrollPane(table); scrollPane .setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); add(scrollPane); } public int getRowCount() { return model.getRowCount(); } public Object getValueAt(final int i, final int j) { return model.getValueAt(i, j); } public void stopCellEditing() { final TableCellEditor editor = table.getCellEditor(); if (editor != null) { editor.stopCellEditing(); } } public String getOType(final int row) { return (String) model.getValueAt(row, 0); } public String getOName(final int row) { return (String) model.getValueAt(row, 1); } public String getOPrompt(final int row) { return (String) model.getValueAt(row, 2); } public boolean getOFix(final int row) { return String.valueOf(model.getValueAt(row, 3)).equals("true"); } public boolean getOAsk(final int row) { if (model.getValueAt(row, 4) == null) return false; return String.valueOf(table.getModel().getValueAt(row, 4)).equals( "true"); } public void setOType(final String what, final int row) { model.setValueAt(new String(what), row, 0); } public void setOName(final String what, final int row) { model.setValueAt(new String(what), row, 1); } public void setOPrompt(final String what, final int row) { model.setValueAt(new String(what), row, 2); } public void setOAsk(final boolean what, final int row) { if (model.getValueAt(row, 4) != null) model.setValueAt(new Boolean(what), row, 4); } public void setOFix(final boolean what, final int row) { model.setValueAt(new Boolean(what), row, 3); } public void addRow(final String type, final String name, final String prompt, final boolean fix) { final String newprompt = (fix) ? "" : prompt; model.addRow(new Object[] { new String(type), new String(name), new String(newprompt), new Boolean(fix), null }); } public void addRow(final String type, final String name, final String prompt, final boolean fix, final boolean ask) { final String newprompt = (fix) ? "" : prompt; model.addRow(new Object[] { new String(type), new String(name), new String(newprompt), new Boolean(fix), new Boolean(ask) }); } public void removeAllRows() { while (model.getRowCount() > 0) model.removeRow(0); } } ./src/eric/macros/NodePopupMenu.java0000644000175000017500000003563311351374172016365 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.macros; import eric.FileTools; import eric.GUI.palette.PaletteManager; import eric.JZirkelCanvas; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.Vector; import javax.swing.JComponent; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPopupMenu; import javax.swing.JSeparator; import javax.swing.plaf.SeparatorUI; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.macro.Macro; import rene.zirkel.macro.MacroItem; /** * * @author erichake */ public class NodePopupMenu extends JPopupMenu { private final CTree macrostree; private JDefaultMutableTreeNode SelectedNode; private TreePath[] SelectedPath; private JMenuItem runitem, renitem, delitem, tolibitem, tofileitem, saveitem, updtitem, propitem, dupitem; public NodePopupMenu(CTree mytree) { macrostree=mytree; dupitem=new JMenuItem(Global.Loc("macros.popup.duplicate")); dupitem.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent event) { duplicatenodes(); } }); propitem=new JMenuItem(Global.Loc("macros.popup.properties")); propitem.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent event) { showproperties(); } }); runitem=new JMenuItem(Global.Loc("macros.popup.run")); runitem.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent event) { // runmacro(); } }); renitem=new JMenuItem(Global.Loc("macros.popup.rename")); renitem.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent event) { renamenode(); } }); delitem=new JMenuItem(Global.Loc("macros.popup.delete")); delitem.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent event) { deletenodes(); } }); tolibitem=new JMenuItem(Global.Loc("macros.popup.addtolibrary")); tolibitem.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent event) { changeMacroType(0); } }); tofileitem=new JMenuItem(Global.Loc("macros.popup.removefromlibrary")); tofileitem.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent event) { changeMacroType(2); } }); saveitem=new JMenuItem(Global.Loc("macros.popup.saveas")); saveitem.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent event) { saveMacros(); } }); } public void handleMouseClick(final MouseEvent e) { final TreePath path=macrostree.getPathForLocation(e.getX(), e.getY()); if (path!=null) { SelectedNode=(JDefaultMutableTreeNode) path.getLastPathComponent(); SelectedPath=macrostree.getSelectionPaths(); if ((SelectedPath.length==1)&&(SelectedNode.isLeaf())) { if (JMacrosInspector.isDialogVisible()) { JMacrosInspector.changemacro(SelectedNode); } else { PaletteManager.deselectgeomgroup(); SelectedNode.runZmacro(); } } } } void actualiseproperties() { // throw new UnsupportedOperationException("Not yet implemented"); } private void showproperties() { JMacrosInspector.openInspector(SelectedNode); // new JMacrosInspector(SelectedNode); } public void handlePopup(final MouseEvent e) { if (e.isPopupTrigger()) { final TreePath path=macrostree.getPathForLocation(e.getX(), e.getY()); if (path!=null) { macrostree.addSelectionPath(path); SelectedNode=(JDefaultMutableTreeNode) path.getLastPathComponent(); SelectedPath=macrostree.getSelectionPaths(); // initSelectedPath(); this.removeAll(); if (SelectedPath.length>1) { this.add(delitem); if (!JZirkelCanvas.isRestrictedSession()) { this.add(createSeparator()); this.add(tolibitem); this.add(tofileitem); this.add(createSeparator()); this.add(saveitem); } } else { if (SelectedNode.isLeaf()) { this.add(renitem); if (!JZirkelCanvas.isRestrictedSession()) { this.add(delitem); this.add(dupitem); } this.add(createSeparator()); if (!JZirkelCanvas.isRestrictedSession()) { this.add(tolibitem); this.add(tofileitem); this.add(createSeparator()); this.add(saveitem); this.add(createSeparator()); } this.add(runitem); this.add(createSeparator()); this.add(propitem); } else { this.add(renitem); this.add(delitem); this.add(createSeparator()); if (!JZirkelCanvas.isRestrictedSession()) { this.add(tolibitem); this.add(tofileitem); this.add(createSeparator()); this.add(saveitem); } } } this.show(e.getComponent(), e.getX(), e.getY()); } } } public void addfolder() { JDefaultMutableTreeNode root; final JDefaultMutableTreeNode node=new JDefaultMutableTreeNode(Global.Loc("macros.untitledfolder")); node.add(new JDefaultMutableTreeNode(Global.Loc("macros.emptynode"))); final TreePath[] paths=macrostree.getSelectionPaths(); if ((paths)!=null) { root=(JDefaultMutableTreeNode) paths[0].getLastPathComponent(); if (root.isLeaf()) { // if the first selected node is a leaf : final DefaultMutableTreeNode father=(DefaultMutableTreeNode) root.getParent(); final int i=father.getIndex(root)+1; ((DefaultTreeModel) macrostree.getModel()).insertNodeInto(node, father, i); } else { // if the first selected node is a folder : ((DefaultTreeModel) macrostree.getModel()).insertNodeInto(node, root, root.getChildCount()); } } else { // There is no selected node : ((DefaultTreeModel) macrostree.getModel()).insertNodeInto(node, macrostree.JML.getTopNode(), macrostree.JML.getTopNode().getChildCount()); } // Transformation d'un noeud en TreePath : final TreePath tp=new TreePath(node.getPath()); macrostree.setEditable(true); macrostree.startEditingAtPath(tp); } private void updateMacrosVector(JDefaultMutableTreeNode node) { if (node.m==null) { return; } String name=node.m.Name; if (node.m.isProtected()) { int ZCsSize=JZirkelCanvas.getZCsSize(); // delete the macro from all the ZirkelCanvas (in different tabs) : for (int size=0; size. */ package eric.macros; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import javax.swing.tree.TreePath; /** * This represents a TreePath (a node in a JTree) that can be transferred * between a drag source and a drop target. */ class CTransferableTreePath implements Transferable { // The type of DnD object being dragged... public static final DataFlavor TREEPATH_FLAVOR = new DataFlavor( DataFlavor.javaJVMLocalObjectMimeType, "TreePath"); private final TreePath _path; private final DataFlavor[] _flavors = { TREEPATH_FLAVOR }; /** * Constructs a transferrable tree path object for the specified path. */ public CTransferableTreePath(final TreePath path) { _path = path; } // Transferable interface methods... public DataFlavor[] getTransferDataFlavors() { return _flavors; } public boolean isDataFlavorSupported(final DataFlavor flavor) { return java.util.Arrays.asList(_flavors).contains(flavor); } public synchronized Object getTransferData(final DataFlavor flavor) throws UnsupportedFlavorException { if (flavor.isMimeTypeEqual(TREEPATH_FLAVOR.getMimeType())) // DataFlavor.javaJVMLocalObjectMimeType)) return _path; else throw new UnsupportedFlavorException(flavor); } } ./src/eric/macros/MacroTools.java0000644000175000017500000003635711355570767015731 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eric.macros; import eric.GUI.pipe_tools; import eric.GUI.themes; import eric.GUI.windowComponent; import eric.JZirkelCanvas; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import java.util.Vector; import rene.gui.Global; import rene.util.xml.XmlReader; import rene.util.xml.XmlTag; import rene.util.xml.XmlTagPI; import rene.util.xml.XmlTree; import rene.zirkel.ZirkelCanvas; import rene.zirkel.ZirkelFrame; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.macro.Macro; import rene.zirkel.macro.MacroItem; import rene.zirkel.macro.MacroRunner; import rene.zirkel.objects.TextObject; /** * * @author erichake */ public class MacroTools { static public final int LIBRARY_MACRO=0; static public final int FILE_MACRO=2; static private Vector librarymacros=new Vector(); static public Vector builtinmacros=new Vector(); static public String MacrosLibraryFileName=""; static public String MacrosBackupLibraryFileName=""; public static void createLocalDirectory() { // Setting (if necessary) home directory name and home library macros // file name : final String mypath=Global.AppPath(); // Place the help files in the local directory : if ((Global.isNewVersion())||(!(new File(Global.getHomeDirectory()+"docs").exists()))) { try { Global.copyFiles(new File(mypath+"docs"), new File( Global.getHomeDirectory()+"docs")); } catch (final IOException ex) { System.out.println("bug : createLocalDirectory()"); } } String Filename="library.mcr"; if (new File(mypath+Global.name("language", "")+"library.mcr").exists()) { Filename=Global.name("language", "")+"library.mcr"; } else if (new File(Global.getHomeDirectory()+Global.name("language", "")+"library.mcr").exists()) { Filename=Global.name("language", "")+"library.mcr"; } MacrosLibraryFileName=Global.getHomeDirectory()+Filename; // is there a library in home folder ? if (new File(MacrosLibraryFileName).exists()) { // Is it a new version at this startup ? if (Global.isNewVersion()) { MacrosBackupLibraryFileName=Global.getHomeDirectory()+"library_backup.mcr"; Global.copyFile(MacrosLibraryFileName, MacrosBackupLibraryFileName); Global.copyFile(mypath+Filename, MacrosLibraryFileName); } } else { new File(Global.getHomeDirectory()).mkdirs(); Global.copyFile(mypath+Filename, MacrosLibraryFileName); } Global.makeWindowConfigFolderInvisible(); } public static Vector getBuiltinMacros() { return builtinmacros; } public static Vector getLibraryMacros() { return librarymacros; } public static void clearLibraryMacros() { librarymacros.removeAllElements(); } public static void addToLibraryMacros(MacroItem mi) { librarymacros.add(mi); } public static void updateLibraryMacros() { ZirkelCanvas zc=JZirkelCanvas.getCurrentZC(); if ((!(zc==null))) { librarymacros.clear(); final Vector V=zc.getMacros(); for (int i=0; i mc; Macro m; TextObject t; ZirkelFrame ZF=JZirkelCanvas.getCurrentZF(); if (ZF==null) { return; } mc=builtinmacros; for (int i=0; i=Macros.size()) { m.setProtected(true); final MacroItem mi=new MacroItem(m, null); Macros.addElement(mi); } } catch (final ConstructionException ex) { Count.setAllAlternate(false); throw ex; } Count.setAllAlternate(false); } else { throw new ConstructionException("Construction not found"); } } } catch (final Exception e) { throw e; } } public static void LoadDefaultMacrosAtStartup() { // Loading builtin macros (for some icons in palette, like symetry) try { final InputStream o=MacroTools.class.getResourceAsStream("/builtin.mcr"); LoadMacros(o, builtinmacros); o.close(); } catch (final Exception e) { System.out.println("builtinmacros bug"); } if ((!themes.isApplet())&&(new File(MacrosLibraryFileName).exists())) { try { final InputStream o=new FileInputStream(MacrosLibraryFileName); LoadMacros(o, librarymacros); o.close(); if (!MacrosBackupLibraryFileName.equals("")) { final InputStream o2=new FileInputStream( MacrosBackupLibraryFileName); LoadMacros(o2, librarymacros); o2.close(); final File f=new File(MacrosBackupLibraryFileName); f.delete(); } return; } catch (final Exception e) { System.out.println("librarymacros bug"); } } try { final InputStream o=MacroTools.class.getResourceAsStream("/default.mcr"); LoadMacros(o, librarymacros); o.close(); return; } catch (final Exception e) { System.out.println("default macros bug"); } } public static void saveLibraryToDisk() { if (JZirkelCanvas.getCurrentZF()!=null) { ZirkelFrame ZF=new ZirkelFrame(pipe_tools.isApplet()); ZF.dosave(MacrosLibraryFileName, false, true, true, false, librarymacros); } } /* If user changes macro type in the tree (e.g. "add to library") from one figure, * library macros vector is changed, so we must transmit all changes to * others figures : */ public static void populateMacrosTypeChanges() { int max=JZirkelCanvas.getZCsSize(); for (int i=0; i StartupFiles=new ArrayList(); static private boolean isStartup=true; public static void addStartupFile(String filename) { StartupFiles.add(filename); } public static boolean isStartup() { return isStartup; } public static String getCurrentFileSource() throws Exception { ZirkelCanvas zc=JZirkelCanvas.getCurrentZC(); final ByteArrayOutputStream out=new ByteArrayOutputStream(); zc.save(out, true, true, false, true, zc.getMacros(), ""); return out.toString("utf-8"); } public static void setCurrentFileSource(String s) throws Exception { final ZirkelCanvas zc=JZirkelCanvas.getCurrentZC(); final ByteArrayOutputStream bout=new ByteArrayOutputStream(); final PrintWriter out=new PrintWriter(new OutputStreamWriter( bout, "utf-8")); out.print(s); out.close(); final byte b[]=bout.toByteArray(); final InputStream in=new ByteArrayInputStream(b); zc.clear(); zc.removeAllScripts(); Count.resetAll(); zc.clearDrawings(); zc.load(in, true, true); zc.validate(); zc.repaint(); SwingUtilities.invokeLater(new Runnable() { public void run() { zc.JCM.readXmlTags(); } }); } /********************************************* * Simple file part : open and save zir files *********************************************/ public static void HTMLWorkBookExport() { String str; String content=""; if (!JZirkelCanvas.isWorkBook()) { saveWorkBookAs(); } ; if (JZirkelCanvas.isWorkBook()) { saveWorkBook(JZirkelCanvas.getWorkBookFileName()); String targetpath=FileName.path(JZirkelCanvas.getWorkBookFileName()); String sep=System.getProperty("file.separator"); BufferedReader in; try { InputStream input=FileTools.class.getResourceAsStream("/eric/docs/applet.html"); in=new BufferedReader(new InputStreamReader(input)); while ((str=in.readLine())!=null) { content+=str+"\n"; } in.close(); } catch (final Exception e) { return; } content=content.replace("@width@", ""+(pipe_tools.getWindowSize().width-2*themes.getVerticalBorderWidth())); content=content.replace("@height@", ""+(pipe_tools.getWindowSize().height-themes.getMenuBarHeight()-themes.getTitleBarHeight())); content=content.replace("@file@", FileName.filename(JZirkelCanvas.getWorkBookFileName())); content=content.replace("@workbook@", FileName.filename(JZirkelCanvas.getWorkBookFileName())); try { File aFile=new File(targetpath+sep+"index.html"); Writer output=new BufferedWriter(new FileWriter(aFile)); output.write(content); output.close(); } catch (Exception e) { } } } public static void SaveJarAndLaunchBrowser() { JZirkelCanvas jzc=JZirkelCanvas.getCurrentJZF(); if (jzc==null) { return; } if (JZirkelCanvas.getFileName()==null) { return; } String targetpath=FileName.path(JZirkelCanvas.getFileName()); String targetfile="index.html"; final String sep=System.getProperty("file.separator"); final String mypath=Global.AppPath(); if (new File(mypath+"CaRMetal.jar").exists()) { try { final InputStream in=new FileInputStream(mypath+"CaRMetal.jar"); final OutputStream out=new FileOutputStream(targetpath+sep+"CaRMetal.jar"); final byte[] buf=new byte[1024]; int len; while ((len=in.read(buf))>0) { out.write(buf, 0, len); out.flush(); } out.close(); in.close(); JBrowserLauncher.openURL(targetpath+sep+targetfile); } catch (final Exception ex) { } } } public static String getSwingOpenFile() { String name=null; final JFileChooser jfc=new JFileChooser(Global.getOpenSaveDirectory()); jfc.setDialogType(javax.swing.JFileChooser.OPEN_DIALOG); jfc.setAcceptAllFileFilterUsed(false); JFileFilter filter=new JFileFilter(Global.Loc("filedialog.allfiles"), ".zirs,.zir,.zirz,.mcr,.job,.js"); jfc.addChoosableFileFilter(filter); jfc.setFileFilter(filter); filter=new JFileFilter(Global.Loc("filedialog.filefilter"), ".zir"); jfc.addChoosableFileFilter(filter); filter=new JFileFilter(Global.Loc("filedialog.workbook"), ".zirs"); jfc.addChoosableFileFilter(filter); filter=new JFileFilter(Global.Loc("filedialog.compressedfilefilter"), ".zirz"); jfc.addChoosableFileFilter(filter); filter=new JFileFilter(Global.Loc("filedialog.macrofilefilter"), ".mcr"); jfc.addChoosableFileFilter(filter); filter=new JFileFilter(Global.Loc("filedialog.job"), ".job"); jfc.addChoosableFileFilter(filter); filter=new JFileFilter(Global.Loc("filedialog.js"), ".js"); jfc.addChoosableFileFilter(filter); final int rep=jfc.showOpenDialog(pipe_tools.getFrame()); if (rep==JFileChooser.APPROVE_OPTION) { name=jfc.getSelectedFile().getAbsolutePath(); Global.setOpenSaveDirectory(FileName.path(name)); } return name; } public static String getAWTOpenFile() { String name=""; FileDialog fd=new FileDialog(pipe_tools.getFrame(), Global.Loc("filedialog.open"), FileDialog.LOAD); fd.setFilenameFilter(new FilenameFilter() { public boolean accept(File dir, String name) { return (name.endsWith(".js")||name.endsWith(".mcr")||name.endsWith(".zir")||name.endsWith(".zirs")||name.endsWith(".zirz")||name.endsWith(".job")||name.endsWith(".jobz")); } }); fd.setDirectory(Global.getOpenSaveDirectory()); fd.setSize(dlogW, dlogH); fd.pack(); fd.setVisible(true); if (fd.getFile()!=null) { Global.setOpenSaveDirectory(fd.getDirectory()); } return canonicFileName(fd); } public static String getOpenFile() { if (OS.isUnix()) { return getSwingOpenFile(); } else { return getAWTOpenFile(); } } public static String getSwingSaveFile() { String name=null; final JFileChooser jfc=new JFileChooser(Global.getOpenSaveDirectory()); jfc.setDialogType(javax.swing.JFileChooser.SAVE_DIALOG); jfc.setAcceptAllFileFilterUsed(false); JFileFilter filter=new JFileFilter(Global.Loc("filedialog.allfiles"), ".zirs,.zir,.zirz,.mcr,.job"); jfc.addChoosableFileFilter(filter); jfc.setFileFilter(filter); final int rep=jfc.showSaveDialog(pipe_tools.getFrame()); if (rep==JFileChooser.APPROVE_OPTION) { name=jfc.getSelectedFile().getAbsolutePath(); Global.setOpenSaveDirectory(FileName.path(name)); } return name; } public static String getAWTSaveFile() { String name=""; FileDialog fd=new FileDialog(pipe_tools.getFrame(), Global.Loc("filedialog.save"), FileDialog.SAVE); fd.setFilenameFilter(new FilenameFilter() { public boolean accept(File dir, String name) { return (name.endsWith(".js")||name.endsWith(".mcr")||name.endsWith(".zir")||name.endsWith(".zirs")||name.endsWith(".zirz")||name.endsWith(".job")||name.endsWith(".jobz")); } }); fd.setDirectory(Global.getOpenSaveDirectory()); fd.setSize(dlogW, dlogH); fd.pack(); fd.setVisible(true); if (fd.getFile()!=null) { Global.setOpenSaveDirectory(fd.getDirectory()); } return canonicFileName(fd); } public static String getSaveFile() { if (OS.isUnix()) { return getSwingSaveFile(); } else { return getAWTSaveFile(); } } public static String canonicFileName(FileDialog fd) { if (fd.getFile()==null) { return null; } String path=(fd.getDirectory().endsWith(System.getProperty("file.separator")))?fd.getDirectory():fd.getDirectory()+System.getProperty("file.separator"); path+=fd.getFile(); return path; } public static boolean validPreferencesFileName(String name) { return name.endsWith("preferences.txt"); } public static boolean validZirkelFileName(String name) { String nme=name.toLowerCase(); return (nme.endsWith(".zir")||nme.endsWith(".zirz")||nme.endsWith(".job")||nme.endsWith(".jobz")); } public static boolean validImageFileName(String name) { String nme=name.toLowerCase(); return (nme.endsWith(".tif")||nme.endsWith(".tiff")||nme.endsWith(".gif")||nme.endsWith(".png")||nme.endsWith(".jpg")||nme.endsWith(".jpeg")); } public static void openFile() { final String filename=getOpenFile(); if (filename!=null) { if (filename.endsWith(".zirs")) { openWorkBook(filename); } else if (filename.endsWith(".mcr")) { openMacro(filename); } else { openFile(filename, null, false); } } } public static void doLoad(final String filename, final InputStream in, final boolean with3D) { JZirkelCanvas JZF=JZirkelCanvas.getCurrentJZF(); ZirkelFrame ZF=JZirkelCanvas.getCurrentZF(); final ZirkelCanvas ZC=JZirkelCanvas.getCurrentZC(); if (ZC!=null) { ZC.set3D(with3D); ZF.setinfo("save"); ZC.getConstruction().BackgroundFile=null; ZF.Background=""; ZC.grab(false); rene.zirkel.construction.Count.resetAll(); ZF.doload(filename, in); PaletteManager.fix3Dpalette(); ZC.getLocalPreferences(); rene.zirkel.construction.Count.resetAll(); pipe_tools.setWindowComponents(); SwingUtilities.invokeLater(new Runnable() { public void run() { ZC.JCM.readXmlTags(); PaletteManager.refresh(); PaletteManager.setSelected_with_clic("move", true); } }); } } public static void openMacro(final String filename) { try { FileInputStream o=new FileInputStream(filename); JZirkelCanvas.getCurrentZC().load(o, false, true); o.close(); } catch (Exception ex) { } JZirkelCanvas.ActualiseMacroPanel(); } public static void openFile(final String filename, final InputStream in, final boolean with3D) { if (JZirkelCanvas.getCurrentZC()==null) { return; } if (filename==null) { return; } if ((filename.endsWith(".zir"))||(filename.endsWith(".zirz"))) { if (JZirkelCanvas.getCurrentZC().isEmpty()) { tab_main_panel.setCurrentTabName(FileName.filename(filename), filename); } else { tab_main_panel.createTabAndCanvas(FileName.filename(filename), filename); } } doLoad(filename, in, with3D); JZirkelCanvas.getCurrentJZF().setComments(); JZirkelCanvas.ActualiseMacroPanel(); } public static void New3DWindow() { final InputStream o=FileTools.class.getResourceAsStream("/base3D.zir"); final String Filename="base3D.zir"; if (!JZirkelCanvas.getCurrentZC().isEmpty()) { tab_main_panel.newTabBtn(); } doLoad(Filename, o, true); ZirkelFrame zf=JZirkelCanvas.getCurrentZF(); if (zf!=null) { zf.Filename=""; } SwingUtilities.invokeLater(new Runnable() { public void run() { ZirkelCanvas zc=JZirkelCanvas.getCurrentZC(); if (zc!=null) { zc.JCM.fix3Dcomments(); } } }); } public static void saveFileAs() { if (Media.getMedias().size()>0) { JOptionPane.showMessageDialog(JZirkelCanvas.getCurrentZC(), Global.Loc("media.saveas")); saveWorkBookAs(); } else { String filename=getSaveFile(); if (filename!=null) { saveFile(filename, false, ".zir", false); } } } public static void saveFile() { if (JZirkelCanvas.isWorkBook()) { saveWorkBook(JZirkelCanvas.getWorkBookFileName()); } else if (Media.getMedias().size()>0) { JOptionPane.showMessageDialog(JZirkelCanvas.getCurrentZC(), Global.Loc("media.saveas")); saveWorkBookAs(); } else { if (JZirkelCanvas.getCurrentZC()==null) { return; } ZirkelFrame ZF=JZirkelCanvas.getCurrentZF(); ZirkelCanvas ZC=JZirkelCanvas.getCurrentZC(); String filename=(ZF.haveFile())?ZF.Filename:getSaveFile(); if (filename!=null) { saveFile(filename, false, ".zir", !ZF.haveFile()); } } } private static boolean ICanSave(final String Fname, final boolean ask) { if (!ask) { return true; } if (!new File(Fname).exists()) { return true; } return (JOptionPane.showConfirmDialog(null, Global.Loc("filedialog.savemessage1")+Fname+Global.Loc("filedialog.savemessage2"), "", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION); } private static void doSave(ZirkelCanvas zc, String Filename, OutputStream o) { try { if (o==null) { o=new FileOutputStream(Filename); if (ZirkelFrame.isCompressed(Filename)) { o=new GZIPOutputStream(o, 10000); } } zc.save(o, true, true, false, true, zc.getMacros(), ""); o.close(); } catch (Exception e) { } } private static void saveFile(String Filename, final boolean restrict, final String ext, final boolean ask) { if (JZirkelCanvas.getCurrentZC()==null) { return; } if (Filename==null) { return; } ZirkelFrame ZF=JZirkelCanvas.getCurrentZF(); ZirkelCanvas ZC=JZirkelCanvas.getCurrentZC(); if ((!Filename.endsWith(".zirz"))&&(!Filename.endsWith(".zir"))) { Filename+=ext; } if (ICanSave(Filename, ask)) { // SetMacrosProtectionForSaveProcess(macrostree.JML.MacroTreeTopNode); OutputStream o; try { ZF.ZC.getConstruction().BackgroundFile=ZF.Background; ZF.ZC.getConstruction().ResizeBackground=Global.getParameter( "background.usesize", false); doSave(ZF.ZC, Filename, null); ZF.Filename=Filename; tab_main_panel.setCurrentTabName(FileName.filename(Filename), Filename); } catch (final Exception e) { final Warning w=new Warning(pipe_tools.getFrame(), Global.Loc("warning.save"), FileName.chop(32, e.toString(), 64), Global.Loc("warning"), true); w.center(null); w.setVisible(true); } // ResetMacrosProtection(macrostree.JML.MacroTreeTopNode); } pipe_tools.TabHaveChanged(false); } /********************************************* * Workbooks part : open and save zirs files *********************************************/ public static String getConstruction(ZirkelCanvas zc) { try { final ByteArrayOutputStream out=new ByteArrayOutputStream(); doSave(zc, null, out); return out.toString("utf-8"); } catch (Exception ex) { return "Error"; } } public static String convertStreamToString(InputStream is) { if (is!=null) { StringBuilder sb=new StringBuilder(); String line; try { BufferedReader reader=new BufferedReader(new InputStreamReader(is, "UTF-8")); while ((line=reader.readLine())!=null) { sb.append(line).append("\n"); } is.close(); } catch (Exception e) { return null; } return sb.toString(); } else { return null; } } public static void saveWorkBookAs() { final String filename=getSaveFile(); if (filename!=null) { saveWorkBook(filename); } } public static void saveWorkBook(String filename) { if (filename==null) { return; } if (!filename.endsWith(".zirs")) { filename+=".zirs"; } try { // Create the ZIP file ZipOutputStream out=new ZipOutputStream(new FileOutputStream(filename)); // Save the workbook : Progress_Bar.create(Global.Loc("progressbar.workbooksavemessage"), 0, tab_main_panel.getBTNSsize()-1); for (int i=0; i1)+"\n"; file+="showstatus="+(tab_main_panel.getBTNSsize()>1)+"\n"; file+="currenttab="+(tab_main_panel.getActiveBtnPos()+1); file+="\n\n\n"; file+="** APPLICATION SPECIFIC PART :\n"; file+="\n"; file+="window_width="+pipe_tools.getWindowSize().width+"\n"; file+="window_height="+pipe_tools.getWindowSize().height+"\n"; file+="\n"; return file.getBytes(); } public static void openWorkBook() { final String filename=getOpenFile(); if (filename!=null) { openWorkBook(filename); } } // OpenWork book from Application : public static void openWorkBook(String filename) { try { ZipFile zpf=new ZipFile(filename); String prefsFileContent=null; Progress_Bar.create(Global.Loc("progressbar.workbookloadmessage"), 0, Collections.list(zpf.entries()).size()); Enumeration entries=zpf.entries(); // remember last tab button : tab_btn lastbtn=tab_main_panel.getLastBtn(); // remember last tab position before adding new ones : int last_tab_pos=tab_main_panel.getBTNSsize()-1; while (entries.hasMoreElements()) { ZipEntry entry=(ZipEntry) entries.nextElement(); if (validZirkelFileName(entry.getName())) { tab_btn curbtn=tab_main_panel.addBtn(entry.getName()); curbtn.getPanel().setInputFile(zpf.getInputStream(entry)); } else if (validImageFileName(entry.getName())) { Media.createMedia(entry.getName(), copyToByteArray(zpf.getInputStream(entry))); } else if (validPreferencesFileName(entry.getName())) { prefsFileContent=convertStreamToString(zpf.getInputStream(entry)); } Progress_Bar.nextValue(); } // set workbook mode : JZirkelCanvas.setWorkBookFileName(filename, false); Progress_Bar.close(); // if (firstbtn!=null) { // tab_main_panel.setActiveBtn(firstbtn); // tab_main_panel.showActiveBtn(); // } if (prefsFileContent!=null) { applyWorkBookPreferences(prefsFileContent, last_tab_pos); } else { tab_main_panel.setActiveBtn(1); tab_main_panel.showActiveBtn(); } // if last tab canvas is empty, then remove it : if ((lastbtn.getPanel().getZC().isEmpty())&&(lastbtn.getPanel().getByteArrayInputFile()==null)) { tab_main_panel.removeBtn(lastbtn); } // I know, this is weird, but it work's (for palette display) : pipe_tools.setWindowComponents(); pipe_tools.setWindowComponents(); Open_left_panel_btn.setmode(); Open_middle_panel_btn.setmode(); Open_right_panel_btn.setmode(); JGeneralMenuBar.initToggleItems(); tab_main_panel.initToggleItems(); } catch (Exception e) { return; } } /** * inside the workbook zirs archive, "preferences.txt" contains properties with * following structure : = * @param prefs : content of the "preferences.txt" file * @param property : the property we want to read * @return the value of the property */ public static String getPref(String prefs, String property) { Matcher m=Pattern.compile("\\Q"+property+"=\\E(\\w+)\\W", Pattern.MULTILINE).matcher(prefs); if (m.find()) { return m.group(1); } return null; } /** * Read and apply workbook preferences : "preferences.txt" inside the "zirs" archive * @param prefs : content of the "preferences.txt" file * @param last_tab_pos : last tab position before adding the zirs */ public static void applyWorkBookPreferences(final String prefs, int last_tab_pos) { int tabnum=last_tab_pos; try { tabnum+=Integer.parseInt(getPref(prefs, "currenttab")); } catch (Exception e) { tabnum=last_tab_pos; } tab_main_panel.setActiveBtn(tabnum); tab_main_panel.showActiveBtn(); Global.setParameter("comment", "true".equals(getPref(prefs, "showcomments"))); RightPanel.showPanel("true".equals(getPref(prefs, "showpalette"))); LeftPanel.showPanel("true".equals(getPref(prefs, "showleftpanel"))); if (pipe_tools.isApplet()) { themes.setShowTabs("true".equals(getPref(prefs, "showtabs"))); themes.setShowStatus("true".equals(getPref(prefs, "showstatus"))); } else { themes.setShowTabs(true); themes.setShowStatus(true); } try { int w=Integer.parseInt(getPref(prefs, "window_width")); int h=Integer.parseInt(getPref(prefs, "window_height")); pipe_tools.setAndCheckWindowSize(w, h); } catch (Exception e) { } } // Open WorkBook from applet : public static void openWorkBook(URL url) { try { ZipInputStream zpf=new ZipInputStream(url.openStream()); int length=0; for (ZipEntry entry=zpf.getNextEntry(); entry!=null; entry=zpf.getNextEntry()) { length++; } Progress_Bar.create(Global.Loc("progressbar.workbookloadmessage"), 0, length); zpf=new ZipInputStream(url.openStream()); String prefsFileContent=null; // remember last tab button : final tab_btn lastbtn=tab_main_panel.getLastBtn(); for (ZipEntry entry=zpf.getNextEntry(); entry!=null; entry=zpf.getNextEntry()) { if (validZirkelFileName(entry.getName())) { tab_btn curbtn=tab_main_panel.addBtn(entry.getName()); ByteArrayOutputStream outBuffer=new ByteArrayOutputStream(); int read; while ((read=zpf.read())!=-1) { outBuffer.write(read); } curbtn.getPanel().setInputFile(outBuffer.toByteArray()); } else if (validImageFileName(entry.getName())) { ByteArrayOutputStream outBuffer=new ByteArrayOutputStream(); int read; while ((read=zpf.read())!=-1) { outBuffer.write(read); } Media.createMedia(entry.getName(), outBuffer.toByteArray()); } else if (validPreferencesFileName(entry.getName())) { ByteArrayOutputStream outBuffer=new ByteArrayOutputStream(); int read; while ((read=zpf.read())!=-1) { outBuffer.write(read); } prefsFileContent=new String(outBuffer.toByteArray()); } } Progress_Bar.close(); JZirkelCanvas.setWorkBookFileName(url.getFile(), false); if (prefsFileContent!=null) { applyWorkBookPreferences(prefsFileContent, 0); } else { tab_main_panel.setActiveBtn(0); tab_main_panel.showActiveBtn(); } // if last tab canvas is empty, then remove it : if ((lastbtn.getPanel().getZC().isEmpty())&&(lastbtn.getPanel().getByteArrayInputFile()==null)) { tab_main_panel.removeBtn(lastbtn); } // I know, this is weird, but it work's (for palette display) : pipe_tools.setWindowComponents(); pipe_tools.setWindowComponents(); Open_left_panel_btn.setmode(); Open_middle_panel_btn.setmode(); Open_right_panel_btn.setmode(); JGeneralMenuBar.initToggleItems(); tab_main_panel.initToggleItems(); } catch (Exception e) { System.out.println("Workbook reading error"); return; } } public static byte[] copyToByteArray(InputStream in) { int BUFFER_SIZE=4096; ByteArrayOutputStream out=new ByteArrayOutputStream(BUFFER_SIZE); try { int byteCount=0; byte[] buffer=new byte[BUFFER_SIZE]; int bytesRead=-1; while ((bytesRead=in.read(buffer))!=-1) { out.write(buffer, 0, bytesRead); byteCount+=bytesRead; } out.flush(); in.close(); out.close(); } catch (IOException e) { } return out.toByteArray(); } public static void open(String filename) { if ((filename.endsWith(".mcr"))) { openMacro(filename); } else if ((filename.endsWith(".zirs"))) { openWorkBook(filename); } else { openFile(filename, null, false); } } public static void OpenStartupFiles() { for (int i=0; i. */ package eric; import java.awt.Color; import java.awt.Font; import java.awt.Frame; import java.awt.Point; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.swing.JFrame; import rene.gui.Global; /** * * @author erichake */ public class JAboutDialog extends javax.swing.JDialog { /** * */ private static final long serialVersionUID=1L; private final ImageIcon backimage=new ImageIcon(getClass().getResource( "/rene/zirkel/logowindow.jpg")); /** * * @param g */ @Override public void paint(final java.awt.Graphics g) { super.paint(g); final java.awt.Dimension d=this.getSize(); g.drawImage(backimage.getImage(), 0, 0, d.width, d.height, this); g.setFont(new Font("Dialog", Font.PLAIN, 11)); String s=Global.Loc("version")+" " +Global.Loc("program.version"); g.setColor(Color.darkGray); g.drawString(s, 115, 75); g.setFont(new Font("Dialog", Font.PLAIN, 11)); g.setColor(Color.GRAY); s="java : "+System.getProperty("java.version"); g.drawString(s, 125, 95); } public JAboutDialog(JComponent parent) { setSize(300, 150); setLocationRelativeTo(parent); this.setUndecorated(true); this.addMouseListener(new MouseAdapter() { @Override public void mousePressed(final MouseEvent e) { dispose(); } }); this.addWindowListener(new WindowAdapter() { @Override public void windowDeactivated(WindowEvent e) { dispose(); } }); setVisible(true); } } ./src/eric/JUniqueInstance.java0000644000175000017500000001002311316352145015367 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric; import java.io.IOException; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; import java.util.logging.Logger; import javax.swing.SwingUtilities; public class JUniqueInstance { private final int port; private final String message; public JUniqueInstance(final int port, final String message) { assert port>0&&port<1<<16 : "Le port doit être entre 1 et 65535"; this.port=port; this.message=message; } public JUniqueInstance(final int port) { this(port, null); } public boolean launch() { boolean unique; try { final ServerSocket server=new ServerSocket(port); unique=true; final Thread portListenerThread=new Thread() { @Override public void run() { while (true) { try { final Socket socket=server.accept(); new Thread() { @Override public void run() { receive(socket); } }.start(); } catch (final IOException e) { Logger.getLogger("UniqueProgInstance").warning( "Attente de connexion échouée."); } } } }; portListenerThread.setDaemon(true); portListenerThread.start(); } catch (final IOException e) { unique=false; // javax.swing.JOptionPane.showMessageDialog(null, // "launch()->send()"); send(); } return unique; } public void send() { PrintWriter pw=null; try { final Socket socket=new Socket("localhost", port); pw=new PrintWriter(socket.getOutputStream()); pw.write(message); } catch (final IOException e) { Logger.getLogger("UniqueProgInstance").warning( "Écriture de sortie échoué."); } finally { if (pw!=null) { pw.close(); } } } public synchronized void launchFiles(final String f) { if (!f.equals("")) { final String[] files=f.split(System.getProperty("path.separator")); for (final String filename : files) { if (FileTools.isStartup()) { FileTools.addStartupFile(filename); } else { SwingUtilities.invokeLater(new Runnable() { public void run() { FileTools.open(filename); } }); } } } } private synchronized void receive(final Socket socket) { Scanner sc=null; try { socket.setSoTimeout(5000); sc=new Scanner(socket.getInputStream()); final String filename=sc.nextLine(); launchFiles(filename); } catch (final Exception e) { // javax.swing.JOptionPane.showMessageDialog(null, // "receive()->error"); } finally { if (sc!=null) { sc.close(); } } } } ./src/eric/textfieldpopup/0000755000175000017500000000000011302613036014531 5ustar yvesyves./src/eric/textfieldpopup/JMenuPanel.java0000644000175000017500000000742711302675502017412 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric.textfieldpopup; import java.awt.Color; import java.awt.Dimension; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.text.JTextComponent; import rene.gui.Global; /** * * @author erichake */ public class JMenuPanel extends JPanel implements MouseListener { /** * */ private static final long serialVersionUID = 1L; JPopupMenu MEN = null; int iconwidth = 20; int iconheight = 20; JComponent JTF; public JMenuPanel(final JPopupMenu men) { MEN = men; setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); setAlignmentY(0f); setOpaque(true); setFocusable(false); setBackground(new Color(250, 250, 250)); } static void fixsize(final JComponent cp, final int w, final int h) { final Dimension d = new Dimension(w, h); cp.setMaximumSize(d); cp.setMinimumSize(d); cp.setPreferredSize(d); cp.setSize(d); } public JButton getJButton(final String s) { final JButton mybtn = new JButton(s); mybtn.setBorder(BorderFactory.createEmptyBorder()); mybtn.setBorderPainted(false); mybtn.setFocusPainted(false); mybtn.setFocusable(false); mybtn.setBackground(new Color(228, 222, 255)); mybtn.setOpaque(false); mybtn.setContentAreaFilled(false); mybtn.addMouseListener(this); mybtn.setFont(new java.awt.Font(Global.GlobalFont, 1, 11)); mybtn.setForeground(new Color(20, 20, 20)); fixsize(mybtn, iconwidth, iconheight); return mybtn; } JPanel getnewline() { final JPanel line = new JPanel(); line.setLayout(new BoxLayout(line, BoxLayout.X_AXIS)); line.setAlignmentX(0f); line.setOpaque(false); return line; } JPanel getnewcol() { final JPanel col = new JPanel(); col.setLayout(new BoxLayout(col, BoxLayout.Y_AXIS)); col.setAlignmentY(0f); col.setOpaque(true); col.setBackground(new Color(250, 250, 250)); return col; } public void doAction(final JButton mybtn) { final String s = mybtn.getText(); mybtn.setOpaque(false); mybtn.setContentAreaFilled(false); if (JTF != null) { final JTextComponent jt = (JTextComponent) JTF; String mytxt = jt.getText().substring(0, jt.getSelectionStart()); mytxt += s; final int car = mytxt.length(); mytxt += jt.getText().substring(jt.getSelectionEnd()); jt.setText(mytxt); jt.setCaretPosition(car); MEN.setVisible(false); } } public void mouseClicked(final MouseEvent e) { final JButton mybtn = (JButton) e.getComponent(); doAction(mybtn); } public void mousePressed(final MouseEvent e) { } public void mouseReleased(final MouseEvent e) { } public void mouseEntered(final MouseEvent e) { if (e.getSource() != null) { final JButton btn = (JButton) e.getSource(); btn.setBackground(new Color(171, 191, 231)); btn.setOpaque(true); btn.setContentAreaFilled(true); } } public void mouseExited(final MouseEvent e) { if (e.getSource() != null) { final JButton btn = (JButton) e.getSource(); btn.setOpaque(false); btn.setContentAreaFilled(false); } } } ./src/eric/textfieldpopup/JSpecialCarsPanel.java0000644000175000017500000000363011302613036020661 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric.textfieldpopup; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JSeparator; /** * * @author erichake */ public class JSpecialCarsPanel extends JMenuPanel { /** * */ private static final long serialVersionUID = 1L; int Linemax = 10; private final String greekmajLettersSet = "\u0391\u0392\u0393\u0394\u0395\u0396" + "\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3" + "\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9"; private final String greekminLettersSet = "\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9" + "\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C4\u03C5\u03C6" + "\u03C7\u03C8\u03C9"; public JSpecialCarsPanel(final JPopupMenu men, final JComponent jtf) { super(men); JTF = jtf; JPanel line = null; for (int i = 0; i < greekminLettersSet.length(); i++) { if ((i % Linemax) == 0) { add(line = getnewline()); } line.add(getJButton(greekminLettersSet.substring(i, i + 1))); } add(new JSeparator()); for (int i = 0; i < greekmajLettersSet.length(); i++) { if ((i % Linemax) == 0) { add(line = getnewline()); } line.add(getJButton(greekmajLettersSet.substring(i, i + 1))); } } } ./src/eric/textfieldpopup/JTextFieldPopup.java0000644000175000017500000000434111302613715020430 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric.textfieldpopup; import java.awt.event.MouseEvent; import javax.swing.JComponent; import javax.swing.JMenu; import javax.swing.JPopupMenu; import rene.gui.Global; /** * * @author erichake */ public class JTextFieldPopup extends JPopupMenu { /** * */ private static final long serialVersionUID = 1L; JComponent JTF; // Numéro du menu : static public int SPECIALCARMENU = 0, FUNCTIONMENU = 1, LATEXMENU = 2; myJMenuItem m1, m2, m3; public JTextFieldPopup(final JComponent jtf) { JTF = jtf; this.setFocusable(false); m1 = new myJMenuItem(Global.Loc("props.popup.special"), new JSpecialCarsPanel(this, JTF)); m2 = new myJMenuItem(Global.Loc("props.popup.functions"), new JFunctionsPanel(this, JTF)); m3 = new myJMenuItem(Global.Loc("props.popup.latex"), new JTexPanel( this, JTF)); this.add(m1); this.add(m2); this.add(m3); } public void setDisabled(final String dis) { if (dis.contains("," + SPECIALCARMENU + ",")) this.getComponent(SPECIALCARMENU).setEnabled(false); if (dis.contains("," + FUNCTIONMENU + ",")) this.getComponent(FUNCTIONMENU).setEnabled(false); if (dis.contains("," + LATEXMENU + ",")) this.getComponent(LATEXMENU).setEnabled(false); } public void openMenu(final MouseEvent e) { this.show(e.getComponent(), e.getX(), e.getY()); } class myJMenuItem extends JMenu { /** * */ private static final long serialVersionUID = 1L; JPopupMenu jp; public myJMenuItem(final String name, final JMenuPanel jmp) { super(name); this.setFocusable(false); this.add(jmp); } } } ./src/eric/textfieldpopup/JTexPanel.java0000644000175000017500000000742711302613653017245 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric.textfieldpopup; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.text.JTextComponent; import atp.sHotEqn; import rene.gui.Global; /** * * @author erichake */ public class JTexPanel extends JMenuPanel { /** * */ private static final long serialVersionUID = 1L; int Linemax = 4; String funcs = "\\frac{a}{b} \\sqrt{a} \\sqrt[n]{a} \\vec{u} \\widehat{ABC} \\hat{a} a_1 a^2 " + "\\sum_{i=0}^{n} \\prod_{i=0}^{n} \\int_{a}^{b} \\oint_{a}^{b} \\bar{z} \\fbox{box}"; // +"\\left|\\begin{array}{cc}a_{11}&a_{12}\\\\\\\\a_{21}&a_{22}\\end{array}\\right| " // + // "\\left(\\begin{array}{cc}a_{11}&a_{12}\\\\\\\\a_{21}&a_{22}\\end{array}\\right) "; public JTexPanel(final JPopupMenu men, final JComponent jtf) { super(men); JTF = jtf; iconwidth = 50; iconheight = 50; final String[] f = funcs.split(" "); JPanel line = null; for (int i = 0; i < f.length; i++) { if ((i % Linemax) == 0) { add(line = getnewline()); } line.add(getJButton(f[i])); } } @Override public void doAction(final JButton mybtn) { String s = ((myJButton) mybtn).EQ; final JTextComponent jt = (JTextComponent) JTF; mybtn.setOpaque(false); mybtn.setContentAreaFilled(false); String mytxt = jt.getText().substring(0, jt.getSelectionStart()); final int nbDollars = mytxt.split("\\$").length - 1; if (nbDollars % 2 == 0) { s = "$" + s + "$"; } if (jt.getSelectedText() != null) { final Pattern p = Pattern.compile("\\{([^\\}]*)\\}", Pattern.CASE_INSENSITIVE); final Matcher m = p.matcher(s); if (m.find()) { s = m.replaceFirst("{" + jt.getSelectedText() + "}"); } } mytxt += s; final int car = mytxt.length(); mytxt += jt.getText().substring(jt.getSelectionEnd()); jt.setText(mytxt); jt.setCaretPosition(car); MEN.setVisible(false); } @Override public JButton getJButton(final String s) { final myJButton mybtn = new myJButton(s); mybtn.setBorder(BorderFactory.createEmptyBorder()); mybtn.setBorderPainted(false); mybtn.setFocusPainted(false); mybtn.setFocusable(false); mybtn.setBackground(new Color(228, 222, 255)); mybtn.setOpaque(false); mybtn.setContentAreaFilled(false); mybtn.addMouseListener(this); mybtn.setFont(new java.awt.Font(Global.GlobalFont, 1, 14)); mybtn.setForeground(new Color(20, 20, 20)); fixsize(mybtn, iconwidth, iconheight); return mybtn; } class myJButton extends JButton { /** * */ private static final long serialVersionUID = 1L; String EQ = null; sHotEqn HE = null; @Override public void paintComponent(final Graphics g) { super.paintComponent(g); final Dimension d = this.getSize(); final Dimension eq = HE.getSizeof(EQ, g); HE.paint((d.width - eq.width) / 2, (d.height - eq.height) / 2, g); } public myJButton(final String s) { super(); EQ = s; HE = new sHotEqn(this); HE.setHAlign("center"); HE.setEquation(s); } } } ./src/eric/textfieldpopup/JFunctionsPanel.java0000644000175000017500000000554011356701002020442 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric.textfieldpopup; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JSeparator; import javax.swing.text.JTextComponent; /** * * @author erichake */ public class JFunctionsPanel extends JMenuPanel { /** * */ private static final long serialVersionUID = 1L; int Linemax = 3; String funcs = "&& || ! < > <= >= == ~= $ " + "x() y() d(,) if(,,) a(,,) inside(,) $ " + "sqrt() exp() log() round() ceil() floor() abs() sign() random() min(,) max(,) $ " + "sin() cos() tan() rsin() rcos() rtan() " + "arcsin() arccos() arctan() rarcsin() rarccos() rarctan() " + "deg() rad() sinhyp() coshyp() angle180() angle360() $ " + "integrate(,,) zero(,,) diff(,) min(,,) max(,,) length() $ " + "windoww windowh windowcx windowcy pixel"; public JFunctionsPanel(final JPopupMenu men, final JComponent jtf) { super(men); JTF = jtf; iconwidth = 75; iconheight = 20; final String[] f = funcs.split(" "); JPanel line = null; int j = 0; for (final String element : f) { if ((j % Linemax) == 0) { add(line = getnewline()); } if (element.equals("$")) { add(new JSeparator()); j = 0; } else { line.add(getJButton(element)); j++; } } } @Override public void doAction(final JButton mybtn) { final String s = mybtn.getText(); mybtn.setOpaque(false); mybtn.setContentAreaFilled(false); if (JTF != null) { final JTextComponent jt = (JTextComponent) JTF; if ((s.endsWith(")")) && (jt.getSelectedText() != null)) { String mytxt = jt.getText() .substring(0, jt.getSelectionStart()); mytxt += s.substring(0, s.length() - 1); mytxt += jt.getSelectedText() + ")"; final int car = mytxt.length(); mytxt += jt.getText().substring(jt.getSelectionEnd()); jt.setText(mytxt); jt.setCaretPosition(car); } else { String mytxt = jt.getText() .substring(0, jt.getSelectionStart()); mytxt += (s.endsWith(")")) ? s.substring(0, s.length() - 1) : s; final int car = mytxt.length(); mytxt += jt.getText().substring(jt.getSelectionEnd()); jt.setText(mytxt); jt.setCaretPosition(car); } MEN.setVisible(false); } } } ./src/eric/Progress_Bar.java0000644000175000017500000000535711343171423014726 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ /* * JProgressBar.java * * Created on 27 déc. 2009, 23:53:56 */ package eric; import eric.GUI.pipe_tools; import eric.GUI.themes; import eric.GUI.windowComponent; import java.awt.Dimension; import java.awt.Graphics; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; import rene.gui.Global; /** * * @author erichake */ public class Progress_Bar extends javax.swing.JFrame { private static JProgressBar progressbar=null; private static Progress_Bar me=null; private static int value=0; // public void paint(Graphics g) { // // // super.paint(g); // } public static void setValue(int i) { if (progressbar!=null) { progressbar.setValue(i); me.paint(me.getGraphics()); } } public static void nextValue() { setValue(value++); } public static void create(String message, int min, int max) { close(); me=new Progress_Bar(message, min, max); me.setLocationRelativeTo(pipe_tools.getCanvasPanel()); me.setVisible(true); me.paint(me.getGraphics()); } public static void close() { progressbar=null; if (me!=null) { me.setVisible(false); me.dispose(); me=null; } } /** Creates new form JProgressBar */ public Progress_Bar(String message, int min, int max) { value=min; // setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); if (!pipe_tools.isApplet()) setAlwaysOnTop(true); setBackground(new java.awt.Color(255, 255, 255)); setBounds(new java.awt.Rectangle(0, 0, 400, 64)); setFocusCycleRoot(false); setFocusTraversalPolicyProvider(true); setFocusable(false); setFocusableWindowState(false); setMinimumSize(new java.awt.Dimension(400, 64)); setUndecorated(true); JPanel content=new JPanel() { public void paintComponent(Graphics g) { super.paintComponent(g); Dimension d=getSize(); g.drawImage(themes.getImage("progressback.png"), 0, 0, d.width, d.height, this); } }; content.setLayout(null); content.setOpaque(false); progressbar=new JProgressBar(min, max); progressbar.setPreferredSize(new java.awt.Dimension(150, 20)); content.add(progressbar); progressbar.setBounds(10, 40, 380, 10); JLabel jLabel1=new javax.swing.JLabel(); jLabel1.setText(message); content.add(jLabel1); jLabel1.setBounds(10, 10, 380, 16); setContentPane(content); pack(); } } ./src/eric/JMacroPrompt.java0000644000175000017500000001470711303423057014711 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package eric; import java.awt.Color; import java.awt.Dimension; import java.awt.Frame; import java.awt.Point; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.SwingConstants; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.expression.Expression; import rene.zirkel.objects.ConstructionObject; import eric.bar.JProperties; import rene.gui.Global; /** * * @author erichake */ public class JMacroPrompt extends JDialog { /** * */ private static final long serialVersionUID = 1L; // boolean Valid=false; JTextField T = new JTextField(); // String S=""; String InitValue = ""; ConstructionObject OC; ZirkelCanvas ZC; int WindowEventCount = 0; Color TitleColor = new Color(200, 200, 200); Color TxtColor = new Color(250, 250, 250); Color DlogColor = new Color(90, 90, 90); private void fixsize(final JComponent cp, final int w, final int h) { final Dimension d = new Dimension(w, h); cp.setMaximumSize(d); cp.setMinimumSize(d); cp.setPreferredSize(d); cp.setSize(d); } private JPanel margin(final int w) { final JPanel mypan = new JPanel(); fixsize(mypan, w, 1); mypan.setOpaque(false); mypan.setFocusable(false); return mypan; } private boolean isValidExpression(final String myexp) { boolean bool = true; try { final Expression exp = new Expression(myexp, OC.getConstruction(), OC); if (!(exp.isValid())) bool = false; } catch (final Exception ex) { bool = false; } return bool; } public JMacroPrompt(final Frame f, final ZirkelCanvas zc, final String oName, final ConstructionObject oc) { super(f, true); OC = oc; ZC = zc; try { InitValue = String.valueOf(OC.getValue()); } catch (final Exception ex) { } final JPanel content = (JPanel) this.getContentPane(); this.setUndecorated(true); content.setLayout(new javax.swing.BoxLayout(content, javax.swing.BoxLayout.Y_AXIS)); content.setBackground(DlogColor); // this.setBackground(new Color(0.2f, 0.2f, 0.2f, 0.5f)); // content.setOpaque(false); final JLabel p1 = new JLabel(Global.name("macro.prompt.prompt") + " :"); p1.setHorizontalAlignment(SwingConstants.CENTER); fixsize(p1, 300, 15); p1.setAlignmentX(0.5f); p1.setOpaque(false); p1.setFont(new java.awt.Font(Global.GlobalFont, 1, 12)); p1.setForeground(TitleColor); final JPanel p2 = new JPanel(); p2 .setLayout(new javax.swing.BoxLayout(p2, javax.swing.BoxLayout.X_AXIS)); final JLabel p21 = new JLabel(oName); final JButton okbtn = new JButton(); okbtn.setIcon(new ImageIcon(getClass().getResource( "/eric/GUI/icons/palette/Mvalid.png"))); okbtn.setBorder(BorderFactory.createEmptyBorder()); okbtn.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(final MouseEvent e) { doclose(); } }); okbtn.setContentAreaFilled(false); final JButton cancelbtn = new JButton(); cancelbtn.setIcon(new ImageIcon(getClass().getResource( "/eric/GUI/icons/palette/Mcancel.png"))); cancelbtn.setBorder(BorderFactory.createEmptyBorder()); cancelbtn.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(final MouseEvent e) { T.setText(InitValue); try { OC.setExpression(T.getText(), OC.getConstruction()); OC.setSlider(false); } catch (final Exception ex) { } ZC.recompute(); ZC.validate(); ZC.repaint(); T.requestFocus(); T.selectAll(); } }); cancelbtn.setContentAreaFilled(false); fixsize(p21, 120, 18); fixsize(T, 118, 18); p2.add(margin(5)); p2.add(p21); p2.add(margin(10)); p2.add(T); p2.add(margin(5)); p2.add(cancelbtn); p2.add(margin(5)); p2.add(okbtn); p2.add(margin(5)); fixsize(p2, 300, 30); p2.setAlignmentX(0.5f); p2.setOpaque(false); p21.setOpaque(false); p21.setFont(new java.awt.Font(Global.GlobalFont, 1, 12)); T.setFont(new java.awt.Font(Global.GlobalFont, 1, 12)); p21.setForeground(TxtColor); T.setText(JProperties.Point_To_Comma(InitValue, OC.getConstruction(), true)); content.add(p1); content.add(p2); T.addKeyListener(new KeyAdapter() { @Override public void keyPressed(final KeyEvent e) { if ((e.getKeyCode() == KeyEvent.VK_ENTER) || (e.getKeyCode() == KeyEvent.VK_ESCAPE)) { doclose(); } } @Override public void keyReleased(final KeyEvent e) { final String e1 = JProperties.Comma_To_Point(T.getText(), OC .getConstruction(), true); final String myexp = (isValidExpression(e1)) ? e1 : "invalid"; try { OC.setExpression(myexp, OC.getConstruction()); OC.setSlider(false); } catch (final Exception ex) { } ZC.recompute(); ZC.validate(); ZC.repaint(); } }); this.addWindowListener(new WindowAdapter() { @Override public void windowOpened(final WindowEvent e) { T.requestFocus(); T.selectAll(); } }); pack(); final Point pt = zc.getLocationOnScreen(); pt.x += zc.getSize().width / 2 - this.getSize().width / 2; pt.y += zc.getSize().height - this.getSize().height; this.setLocation(pt); this.setVisible(true); } public void doclose() { final String e1 = JProperties.Comma_To_Point(T.getText(), OC .getConstruction(), true); final String myexp = (isValidExpression(e1)) ? e1 : InitValue; try { OC.setExpression(myexp, OC.getConstruction()); OC.setSlider(false); } catch (final Exception ex) { } ZC.recompute(); ZC.validate(); ZC.repaint(); setVisible(false); dispose(); } } ./src/net/0000755000175000017500000000000011302722126011322 5ustar yvesyves./src/net/java/0000755000175000017500000000000011302722126012243 5ustar yvesyves./src/net/java/dev/0000755000175000017500000000000011302722126013021 5ustar yvesyves./src/net/java/dev/colorchooser/0000755000175000017500000000000011302722136015523 5ustar yvesyves./src/net/java/dev/colorchooser/ColorChooserBeanInfo.java0000644000175000017500000003507111302722130022371 0ustar yvesyves/*DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2006-2008. Tim Boudreau. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common * Development and Distribution License("CDDL") (collectively, the * "License"). You may not use this file except in compliance with the * License. You can obtain a copy of the License at * http://www.netbeans.org/cddl-gplv2.html. See the License for the * specific language governing permissions and limitations under the * License. When distributing the software, include this License Header * Notice in each file and include the License file at * nbbuild/licenses/CDDL-GPL-2-CP. This particular file is designated * as subject to the "Classpath" exception as provided * in the GPL Version 2 section of the License file that * accompanied this code. */ package net.java.dev.colorchooser; import java.beans.BeanDescriptor; import java.beans.EventSetDescriptor; import java.beans.IntrospectionException; import java.beans.MethodDescriptor; import java.beans.PropertyDescriptor; import java.beans.SimpleBeanInfo; public class ColorChooserBeanInfo extends SimpleBeanInfo { // Bean descriptor//GEN-FIRST:BeanDescriptor /* lazy BeanDescriptor */ private static BeanDescriptor getBdescriptor() { final BeanDescriptor beanDescriptor = new BeanDescriptor( net.java.dev.colorchooser.ColorChooser.class, null); // NOI18N//GEN-HEADEREND:BeanDescriptor // Here you can add code for customizing the BeanDescriptor. return beanDescriptor; }// GEN-LAST:BeanDescriptor // Property identifiers//GEN-FIRST:Properties private static final int PROPERTY_color = 0; private static final int PROPERTY_continuousPalettePreferred = 1; private static final int PROPERTY_cursor = 2; private static final int PROPERTY_enabled = 3; private static final int PROPERTY_height = 4; private static final int PROPERTY_maximumSize = 5; private static final int PROPERTY_minimumSize = 6; private static final int PROPERTY_name = 7; private static final int PROPERTY_preferredSize = 8; private static final int PROPERTY_toolTipText = 9; private static final int PROPERTY_transientColor = 10; private static final int PROPERTY_visible = 11; private static final int PROPERTY_width = 12; private static final int PROPERTY_x = 13; private static final int PROPERTY_y = 14; // Property array /* lazy PropertyDescriptor */ private static PropertyDescriptor[] getPdescriptor() { final PropertyDescriptor[] properties = new PropertyDescriptor[15]; try { properties[PROPERTY_color] = new PropertyDescriptor("color", net.java.dev.colorchooser.ColorChooser.class, "getColor", "setColor"); // NOI18N properties[PROPERTY_color].setPreferred(true); properties[PROPERTY_continuousPalettePreferred] = new PropertyDescriptor( "continuousPalettePreferred", net.java.dev.colorchooser.ColorChooser.class, "isContinuousPalettePreferred", "setContinuousPalettePreferred"); // NOI18N properties[PROPERTY_continuousPalettePreferred].setPreferred(true); properties[PROPERTY_cursor] = new PropertyDescriptor("cursor", net.java.dev.colorchooser.ColorChooser.class, "getCursor", "setCursor"); // NOI18N properties[PROPERTY_enabled] = new PropertyDescriptor("enabled", net.java.dev.colorchooser.ColorChooser.class, "isEnabled", "setEnabled"); // NOI18N properties[PROPERTY_height] = new PropertyDescriptor("height", net.java.dev.colorchooser.ColorChooser.class, "getHeight", null); // NOI18N properties[PROPERTY_maximumSize] = new PropertyDescriptor( "maximumSize", net.java.dev.colorchooser.ColorChooser.class, "getMaximumSize", "setMaximumSize"); // NOI18N properties[PROPERTY_minimumSize] = new PropertyDescriptor( "minimumSize", net.java.dev.colorchooser.ColorChooser.class, "getMinimumSize", "setMinimumSize"); // NOI18N properties[PROPERTY_name] = new PropertyDescriptor("name", net.java.dev.colorchooser.ColorChooser.class, "getName", "setName"); // NOI18N properties[PROPERTY_preferredSize] = new PropertyDescriptor( "preferredSize", net.java.dev.colorchooser.ColorChooser.class, "getPreferredSize", "setPreferredSize"); // NOI18N properties[PROPERTY_toolTipText] = new PropertyDescriptor( "toolTipText", net.java.dev.colorchooser.ColorChooser.class, "getToolTipText", "setToolTipText"); // NOI18N properties[PROPERTY_transientColor] = new PropertyDescriptor( "transientColor", net.java.dev.colorchooser.ColorChooser.class, "getTransientColor", null); // NOI18N properties[PROPERTY_transientColor].setExpert(true); properties[PROPERTY_visible] = new PropertyDescriptor("visible", net.java.dev.colorchooser.ColorChooser.class, "isVisible", "setVisible"); // NOI18N properties[PROPERTY_width] = new PropertyDescriptor("width", net.java.dev.colorchooser.ColorChooser.class, "getWidth", null); // NOI18N properties[PROPERTY_x] = new PropertyDescriptor("x", net.java.dev.colorchooser.ColorChooser.class, "getX", null); // NOI18N properties[PROPERTY_y] = new PropertyDescriptor("y", net.java.dev.colorchooser.ColorChooser.class, "getY", null); // NOI18N } catch (final IntrospectionException e) { e.printStackTrace(); }// GEN-HEADEREND:Properties // Here you can add code for customizing the properties array. return properties; }// GEN-LAST:Properties // EventSet identifiers//GEN-FIRST:Events private static final int EVENT_actionListener = 0; private static final int EVENT_componentListener = 1; private static final int EVENT_focusListener = 2; private static final int EVENT_hierarchyBoundsListener = 3; private static final int EVENT_inputMethodListener = 4; private static final int EVENT_keyListener = 5; private static final int EVENT_mouseListener = 6; private static final int EVENT_mouseMotionListener = 7; private static final int EVENT_propertyChangeListener = 8; // EventSet array /* lazy EventSetDescriptor */ private static EventSetDescriptor[] getEdescriptor() { final EventSetDescriptor[] eventSets = new EventSetDescriptor[9]; try { eventSets[EVENT_actionListener] = new EventSetDescriptor( net.java.dev.colorchooser.ColorChooser.class, "actionListener", java.awt.event.ActionListener.class, new String[] { "actionPerformed" }, "addActionListener", "removeActionListener"); // NOI18N eventSets[EVENT_actionListener].setPreferred(true); eventSets[EVENT_componentListener] = new EventSetDescriptor( net.java.dev.colorchooser.ColorChooser.class, "componentListener", java.awt.event.ComponentListener.class, new String[] { "componentHidden", "componentMoved", "componentResized", "componentShown" }, "addComponentListener", "removeComponentListener"); // NOI18N eventSets[EVENT_focusListener] = new EventSetDescriptor( net.java.dev.colorchooser.ColorChooser.class, "focusListener", java.awt.event.FocusListener.class, new String[] { "focusGained", "focusLost" }, "addFocusListener", "removeFocusListener"); // NOI18N eventSets[EVENT_hierarchyBoundsListener] = new EventSetDescriptor( net.java.dev.colorchooser.ColorChooser.class, "hierarchyBoundsListener", java.awt.event.HierarchyBoundsListener.class, new String[] { "ancestorMoved", "ancestorResized" }, "addHierarchyBoundsListener", "removeHierarchyBoundsListener"); // NOI18N eventSets[EVENT_inputMethodListener] = new EventSetDescriptor( net.java.dev.colorchooser.ColorChooser.class, "inputMethodListener", java.awt.event.InputMethodListener.class, new String[] { "caretPositionChanged", "inputMethodTextChanged" }, "addInputMethodListener", "removeInputMethodListener"); // NOI18N eventSets[EVENT_keyListener] = new EventSetDescriptor( net.java.dev.colorchooser.ColorChooser.class, "keyListener", java.awt.event.KeyListener.class, new String[] { "keyPressed", "keyReleased", "keyTyped" }, "addKeyListener", "removeKeyListener"); // NOI18N eventSets[EVENT_mouseListener] = new EventSetDescriptor( net.java.dev.colorchooser.ColorChooser.class, "mouseListener", java.awt.event.MouseListener.class, new String[] { "mouseClicked", "mouseEntered", "mouseExited", "mousePressed", "mouseReleased" }, "addMouseListener", "removeMouseListener"); // NOI18N eventSets[EVENT_mouseMotionListener] = new EventSetDescriptor( net.java.dev.colorchooser.ColorChooser.class, "mouseMotionListener", java.awt.event.MouseMotionListener.class, new String[] { "mouseDragged", "mouseMoved" }, "addMouseMotionListener", "removeMouseMotionListener"); // NOI18N eventSets[EVENT_propertyChangeListener] = new EventSetDescriptor( net.java.dev.colorchooser.ColorChooser.class, "propertyChangeListener", java.beans.PropertyChangeListener.class, new String[] { "propertyChange" }, "addPropertyChangeListener", "removePropertyChangeListener"); // NOI18N } catch (final IntrospectionException e) { e.printStackTrace(); }// GEN-HEADEREND:Events // Here you can add code for customizing the event sets array. return eventSets; }// GEN-LAST:Events // Method identifiers//GEN-FIRST:Methods // Method array /* lazy MethodDescriptor */ private static MethodDescriptor[] getMdescriptor() { final MethodDescriptor[] methods = new MethodDescriptor[0];// GEN-HEADEREND:Methods // Here you can add code for customizing the methods array. return methods; }// GEN-LAST:Methods private static java.awt.Image iconColor16 = null;// GEN-BEGIN:IconsDef private static java.awt.Image iconColor32 = null; private static java.awt.Image iconMono16 = null; private static java.awt.Image iconMono32 = null;// GEN-END:IconsDef private static String iconNameC16 = "/org/netbeans/swing/colorchooser/chooserIcon.gif";// GEN-BEGIN:Icons private static String iconNameC32 = "/org/netbeans/swing/colorchooser/chooserIcon32.gif"; private static String iconNameM16 = null; private static String iconNameM32 = null;// GEN-END:Icons private static final int defaultPropertyIndex = -1;// GEN-BEGIN:Idx private static final int defaultEventIndex = -1;// GEN-END:Idx // GEN-FIRST:Superclass // Here you can add code for customizing the Superclass BeanInfo. // GEN-LAST:Superclass /** * Gets the bean's BeanDescriptors. * * @return BeanDescriptor describing the editable properties of this bean. * May return null if the information should be obtained by * automatic analysis. */ @Override public BeanDescriptor getBeanDescriptor() { return getBdescriptor(); } /** * Gets the bean's PropertyDescriptors. * * @return An array of PropertyDescriptors describing the editable * properties supported by this bean. May return null if the * information should be obtained by automatic analysis. *

* If a property is indexed, then its entry in the result array will * belong to the IndexedPropertyDescriptor subclass of * PropertyDescriptor. A client of getPropertyDescriptors can use * "instanceof" to check if a given PropertyDescriptor is an * IndexedPropertyDescriptor. */ @Override public PropertyDescriptor[] getPropertyDescriptors() { return getPdescriptor(); } /** * Gets the bean's EventSetDescriptors. * * @return An array of EventSetDescriptors describing the kinds of events * fired by this bean. May return null if the information should be * obtained by automatic analysis. */ @Override public EventSetDescriptor[] getEventSetDescriptors() { return getEdescriptor(); } /** * Gets the bean's MethodDescriptors. * * @return An array of MethodDescriptors describing the methods implemented * by this bean. May return null if the information should be * obtained by automatic analysis. */ @Override public MethodDescriptor[] getMethodDescriptors() { return getMdescriptor(); } /** * A bean may have a "default" property that is the property that will * mostly commonly be initially chosen for update by human's who are * customizing the bean. * * @return Index of default property in the PropertyDescriptor array * returned by getPropertyDescriptors. *

* Returns -1 if there is no default property. */ @Override public int getDefaultPropertyIndex() { return defaultPropertyIndex; } /** * A bean may have a "default" event that is the event that will mostly * commonly be used by human's when using the bean. * * @return Index of default event in the EventSetDescriptor array returned * by getEventSetDescriptors. *

* Returns -1 if there is no default event. */ @Override public int getDefaultEventIndex() { return defaultEventIndex; } /** * This method returns an image object that can be used to represent the * bean in toolboxes, toolbars, etc. Icon images will typically be GIFs, but * may in future include other formats. *

* Beans aren't required to provide icons and may return null from this * method. *

* There are four possible flavors of icons (16x16 color, 32x32 color, 16x16 * mono, 32x32 mono). If a bean choses to only support a single icon we * recommend supporting 16x16 color. *

* We recommend that icons have a "transparent" background so they can be * rendered onto an existing background. * * @param iconKind * The kind of icon requested. This should be one of the constant * values ICON_COLOR_16x16, ICON_COLOR_32x32, ICON_MONO_16x16, or * ICON_MONO_32x32. * @return An image object representing the requested icon. May return null * if no suitable icon is available. */ @Override public java.awt.Image getIcon(final int iconKind) { switch (iconKind) { case ICON_COLOR_16x16: if (iconNameC16 == null) return null; else { if (iconColor16 == null) iconColor16 = loadImage(iconNameC16); return iconColor16; } case ICON_COLOR_32x32: if (iconNameC32 == null) return null; else { if (iconColor32 == null) iconColor32 = loadImage(iconNameC32); return iconColor32; } case ICON_MONO_16x16: if (iconNameM16 == null) return null; else { if (iconMono16 == null) iconMono16 = loadImage(iconNameM16); return iconMono16; } case ICON_MONO_32x32: if (iconNameM32 == null) return null; else { if (iconMono32 == null) iconMono32 = loadImage(iconNameM32); return iconMono32; } default: return null; } } } ./src/net/java/dev/colorchooser/PalettePopup.java0000644000175000017500000002446211302722135021017 0ustar yvesyves/*DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2006-2008. Tim Boudreau. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common * Development and Distribution License("CDDL") (collectively, the * "License"). You may not use this file except in compliance with the * License. You can obtain a copy of the License at * http://www.netbeans.org/cddl-gplv2.html. See the License for the * specific language governing permissions and limitations under the * License. When distributing the software, include this License Header * Notice in each file and include the License file at * nbbuild/licenses/CDDL-GPL-2-CP. This particular file is designated * as subject to the "Classpath" exception as provided * in the GPL Version 2 section of the License file that * accompanied this code. */ package net.java.dev.colorchooser; import java.awt.Dimension; import java.awt.Font; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GraphicsEnvironment; import java.awt.KeyboardFocusManager; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.MouseAdapter; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.lang.ref.Reference; import java.lang.ref.SoftReference; import javax.swing.JComponent; import javax.swing.Popup; import javax.swing.PopupFactory; import javax.swing.SwingUtilities; import javax.swing.UIManager; /** * Encapsulates the logic of a popup palette which can callback a color chooser * to set its transient color or its final color if the mouse is released over * the palette. * * @author Tim Boudreau */ class PalettePopup extends MouseAdapter implements MouseMotionListener, PropertyChangeListener { private Popup pop = null; private PalettePanel panel = null; private Palette pal = null; private static Reference defaultInstance = null; /** Creates a new instance of PalettePopup */ private PalettePopup() { } public static PalettePopup getDefault() { PalettePopup result = null; if (defaultInstance != null) { result = (PalettePopup) defaultInstance.get(); } if (result == null) { result = new PalettePopup(); defaultInstance = new SoftReference(result); } return result; } private PalettePanel getPalettePanel() { if (panel == null) { panel = new PalettePanel(); } return panel; } public void setPalette(final Palette pal) { if (pal != this.pal) { if (isPopupVisible()) { final Dimension newSize = pal.getSize(); final Dimension oldSize = this.pal.getSize(); if (newSize.equals(oldSize)) { panel.setPalette(pal); panel.repaint(); } else { synchronized (lastOwner.getTreeLock()) { pop.hide(); panel.setPalette(pal); pop = PopupFactory.getSharedInstance().getPopup( lastOwner, getPalettePanel(), lastCoords.x, lastCoords.y); pop.show(); } } } this.pal = pal; } } private Palette getPalette() { return pal; } private ColorChooser lastOwner; private Point lastCoords; public void showPopup(final ColorChooser owner, final Point coords) { if (pal == null) { throw new IllegalStateException("No palette specified"); } setPopupOwner(owner); lastCoords = coords; if (pop != null) { pop.hide(); pop = null; } final PalettePanel pp = getPalettePanel(); pp.setPalette(getPalette()); final Dimension sz = pp.getPreferredSize(); final Rectangle r = owner.getGraphicsConfiguration().getDevice() .getDefaultConfiguration().getBounds(); final Rectangle test = new Rectangle(coords, sz); if (!r.contains(test)) { final int offy = Math.max(0, (test.y + test.height) - (r.y + r.height)); final int offx = Math.max(0, (test.x + test.width) - (r.x + r.width)); coords.x -= offx; coords.y -= offy; } pop = PopupFactory.getSharedInstance().getPopup(owner, pp, coords.x, coords.y); pop.show(); owner.firePickerVisible(true); KeyboardFocusManager.getCurrentKeyboardFocusManager() .addPropertyChangeListener(this); } private void setPopupOwner(final ColorChooser owner) { if (lastOwner == owner) { return; } if (lastOwner != null) { detachFromOwner(); lastOwner.firePickerVisible(false); } attachToOwner(owner); } private void detachFromOwner() { if (lastOwner != null) { lastOwner.removeMouseMotionListener(this); lastOwner.removeMouseListener(this); } lastOwner = null; } private void attachToOwner(final ColorChooser owner) { lastOwner = owner; owner.addMouseListener(this); owner.addMouseMotionListener(this); } public void hidePopup(final ColorChooser owner) { if (owner != lastOwner) { return; } hidePopup(); } private void hidePopup() { if (pop != null) { pop.hide(); pop = null; detachFromOwner(); KeyboardFocusManager.getCurrentKeyboardFocusManager() .removePropertyChangeListener(this); } } private boolean isPopupVisible() { return pop != null; } public boolean isPopupVisible(final ColorChooser chooser) { return lastOwner == chooser && isPopupVisible(); } public void mouseDragged(final java.awt.event.MouseEvent e) { final Point p = e.getPoint(); SwingUtilities.convertPointToScreen(p, lastOwner); convertPointToPalette(p); final Dimension d = panel.getOffset(); if (d != null) { p.x -= d.width; p.y -= d.height; } if (p.x >= 0 && p.y >= 0 && p.x <= pal.getSize().width && p.y < pal.getSize().height) { lastOwner.setTransientColor(pal.getColorAt(p.x, p.y)); panel.setDisplayTitle(pal.getNameAt(p.x, p.y)); } else { lastOwner.setTransientColor(null); panel.setDisplayTitle(null); } } public void mouseMoved(final java.awt.event.MouseEvent e) { } private void convertPointToPalette(final Point p) { p.x -= lastCoords.x; p.y -= lastCoords.y; } public void propertyChange(final PropertyChangeEvent evt) { if ("focusOwner".equals(evt.getPropertyName())) { final Object o = evt.getNewValue(); if (o != panel && o != lastOwner) { hidePopup(); } } } private class PalettePanel extends JComponent { /** * */ private static final long serialVersionUID = 1L; private Palette pal = null; private PalettePanel() { } private String title = null; public void setPalette(final Palette pal) { Dimension oldSize = null; if (pal != null && isShowing()) { oldSize = pal.getSize(); } this.pal = pal; if (oldSize != null && pal != null && !pal.getSize().equals(oldSize)) { firePropertyChange("preferredSize", oldSize, pal.getSize()); // NOI18N } } public Dimension getOffset() { if (pal == null || pal.getDisplayName() == null) { return null; } return new Dimension(0, ((getPreferredSize().height - pal.getSize().height) / 2)); } @Override public void paintComponent(final Graphics g) { final Dimension d = pal.getSize(); final int y = getHeight() - d.height; if (pal.getDisplayName() != null) { final GradientPaint gp = new GradientPaint(0, 0, UIManager .getColor("controlHighlight"), 0, y / 2, UIManager .getColor("controlShadow")); ((Graphics2D) g).setPaint(gp); g.fillRect(0, 0, getWidth(), y / 2); final String s = pal.getDisplayName(); g.setFont(getFont().deriveFont(Font.BOLD, getFont().getSize() - 2)); final int ht = g.getFontMetrics(g.getFont()).getHeight(); final int wid = g.getFontMetrics(g.getFont()).stringWidth(s); final int xpos = (getWidth() / 2) - (wid / 2); g.setColor(UIManager.getColor("controlShadow")); g.drawLine(0, 0, getWidth() - 1, 0); g.drawLine(0, 0, 0, (y / 2) - 1); g.drawLine(getWidth() - 1, 0, getWidth() - 1, (y / 2) - 1); g.setColor(UIManager.getColor("textText")); g.drawString(s, xpos, ht - 3); g.translate(0, y / 2); } pal.paintTo(g); final int top = pal.getDisplayName() == null ? y : y / 2; final int bottom = pal.getDisplayName() == null ? getHeight() : getHeight() - top; final GradientPaint gp = new GradientPaint(0, getHeight() - y, UIManager.getColor("controlHighlight"), 0, bottom, UIManager.getColor("controlShadow")); // NOI18N ((Graphics2D) g).setPaint(gp); g.fillRect(0, getHeight() - y, getWidth(), top); if (title != null) { g.setColor(UIManager.getColor("textText")); // NOI18N g.setFont(getFont().deriveFont(Font.PLAIN, getFont().getSize() - 2)); final int xp = (getWidth() - g.getFontMetrics(g.getFont()) .stringWidth(title)) - 3; g.drawString(title, xp, getHeight() - (pal.getDisplayName() == null ? 4 : (y / 2) + 4)); } g.setColor(UIManager.getColor("controlShadow")); // NOI18N g.drawLine(0, getHeight() - y, 0, getHeight()); g.drawLine(0, getHeight() - (top + 1), getWidth() - 1, getHeight() - (top + 1)); g.drawLine(getWidth() - 1, getHeight() - (top + 1), getWidth() - 1, getHeight() - y); } public void setDisplayTitle(final String s) { if (s != title && ((s != null) != (title != null) || ((s != null && !s .equals(title))))) { title = s; repaint(); } if (s == null && title != null) { title = null; repaint(); } } @Override public Dimension getPreferredSize() { if (pal != null) { final Dimension result = new Dimension(pal.getSize()); int spacing = 14; if (lastOwner != null) { Graphics g = lastOwner.getGraphics(); if (g == null) { try { g = GraphicsEnvironment .getLocalGraphicsEnvironment() .getDefaultScreenDevice() .getDefaultConfiguration() .createCompatibleImage(1, 1) .createGraphics(); } catch (final SecurityException e) { g = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB) .createGraphics(); } } if (g != null) { Font f = getFont() == null ? UIManager .getFont("controlFont") : getFont(); if (f == null) { f = new Font("Serif", Font.PLAIN, 12); } spacing = g.getFontMetrics( f.deriveFont(Font.PLAIN, f.getSize() - 2)) .getHeight(); } g.dispose(); } if (pal.getDisplayName() != null) { spacing *= 2; } result.height += spacing; return result; } else { return new Dimension(10, 10); } } } } ./src/net/java/dev/colorchooser/CCBorder.java0000644000175000017500000000705711302722126020021 0ustar yvesyves/*DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2006-2008. Tim Boudreau. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common * Development and Distribution License("CDDL") (collectively, the * "License"). You may not use this file except in compliance with the * License. You can obtain a copy of the License at * http://www.netbeans.org/cddl-gplv2.html. See the License for the * specific language governing permissions and limitations under the * License. When distributing the software, include this License Header * Notice in each file and include the License file at * nbbuild/licenses/CDDL-GPL-2-CP. This particular file is designated * as subject to the "Classpath" exception as provided * in the GPL Version 2 section of the License file that * accompanied this code. */ package net.java.dev.colorchooser; import java.awt.Color; import java.awt.Component; import java.awt.Graphics; import java.awt.Insets; import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.plaf.metal.MetalLookAndFeel; /** * Default border for the color chooser, which uses bevels that lighten/darken * the selected color, and includes slightly different painting logic for Metal * LAF. * * @author Tim Boudreau */ class CCBorder implements Border { public Insets getBorderInsets(final Component c) { Insets result; if (UIManager.getLookAndFeel() instanceof MetalLookAndFeel) { result = new Insets(2, 2, 1, 1); } else { result = new Insets(1, 1, 1, 1); } return result; } public boolean isBorderOpaque() { return true; } public void paintBorder(final Component c, final Graphics g, final int x, final int y, final int w, final int h) { final ColorChooser cc = (ColorChooser) c; if (!cc.isEnabled()) { g.setColor(cc.getColor()); g.fillRect(x, y, w, h); return; } Color col = cc.transientColor() == null ? cc.getColor() : cc .transientColor(); if (cc == null) { col = c.getBackground(); if (col == null) { col = Color.BLACK; } } if (UIManager.getLookAndFeel() instanceof MetalLookAndFeel) { g.setColor(darken(col)); g.drawLine(x, y, x + w - 1, y); g.drawLine(x, y, x, y + h - 1); g.drawLine(x + w - 1, y + h - 1, x, y + h - 1); g.drawLine(x + w - 1, y + h - 1, x + w - 1, y); g.setColor(brighten(col)); g.drawLine(x + w - 2, y + h - 2, x + 1, y + h - 2); g.drawLine(x + w - 2, y + h - 2, x + w - 2, y + 1); } else { g.setColor(darken(col)); g.drawLine(x + w - 1, y + h - 1, x, y + h - 1); g.drawLine(x + w - 1, y + h - 1, x + w - 1, y); g.setColor(brighten(col)); g.drawLine(x, y, x + w - 1, y); g.drawLine(x, y, x, y + h - 1); } } /** Slightly more subtle than Color.darker() */ private static final Color darken(final Color c) { final int amount = 30; final int r = normalizeToByte(c.getRed() - amount); final int g = normalizeToByte(c.getGreen() - amount); final int b = normalizeToByte(c.getGreen() - amount); return new Color(r, g, b); } /** Slightly more subtle than Color.brighter() */ private static final Color brighten(final Color c) { final int amount = 30; final int r = normalizeToByte(c.getRed() + amount); final int g = normalizeToByte(c.getGreen() + amount); final int b = normalizeToByte(c.getGreen() + amount); return new Color(r, g, b); } /** Ensure an int is within the possible range for a byte */ private static final int normalizeToByte(final int i) { return Math.min(255, Math.max(0, i)); } }./src/net/java/dev/colorchooser/Bundle_fr.properties0000644000175000017500000000273211302722126021544 0ustar yvesyves# Sun Public License Notice # # The contents of this file are subject to the Sun Public License # Version 1.0 (the "License"). You may not use this file except in # compliance with the License. A copy of the License is available at # http://www.sun.com/ # # The Original Code is NetBeans. The Initial Developer of the Original # Code is Sun Microsystems, Inc. Portions Copyright 1997-2003 Sun # Microsystems, Inc. All Rights Reserved. #Palette names basic=Primary colors svg=Constantes SVG/X11 swing=Constantes system=System colors recent=Recent colors tip=Click and hold combinations of Ctrl/Shift/Alt to switch palettes tip.mac=Click and hold combinations of Command/Shift/Alt to switch palettes # Continuous palette names satSmall=Couleurs satur\u00E9es #SMALL_SPEC_WIDTH, SMALL_SPEC_HEIGHT, 1f, false), unsatSmall=Couleurs d\u00E9satur\u00E9es #SMALL_SPEC_WIDTH, SMALL_SPEC_HEIGHT, 0.4f, false), satSmallHoriz=Couleurs satur\u00E9es #SMALL_SPEC_WIDTH, SMALL_SPEC_HEIGHT, 1f, true), unsatSmallHoriz=Couleurs d\u00E9satur\u00E9es #SMALL_SPEC_WIDTH, SMALL_SPEC_HEIGHT, 0.4f, true), satLarge=Couleurs satur\u00E9es #LARGE_SPEC_WIDTH, LARGE_SPEC_HEIGHT, 1f, false), unsatLarge=Couleurs d\u00E9satur\u00E9es #LARGE_SPEC_WIDTH, LARGE_SPEC_HEIGHT, 0.4f, false), satLargeHoriz=Couleurs satur\u00E9es #LARGE_SPEC_WIDTH, LARGE_SPEC_HEIGHT, 1f, true), unsatLargeHoriz=Couleurs d\u00E9satur\u00E9es #LARGE_SPEC_WIDTH, LARGE_SPEC_HEIGHT, 0.4f, true) chooseColor="Choisir une couleur" ./src/net/java/dev/colorchooser/PredefinedPalette.java0000644000175000017500000005552411302722135021764 0ustar yvesyves/*DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2006-2008. Tim Boudreau. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common * Development and Distribution License("CDDL") (collectively, the * "License"). You may not use this file except in compliance with the * License. You can obtain a copy of the License at * http://www.netbeans.org/cddl-gplv2.html. See the License for the * specific language governing permissions and limitations under the * License. When distributing the software, include this License Header * Notice in each file and include the License file at * nbbuild/licenses/CDDL-GPL-2-CP. This particular file is designated * as subject to the "Classpath" exception as provided * in the GPL Version 2 section of the License file that * accompanied this code. */ package net.java.dev.colorchooser; import java.awt.Color; import java.awt.Dimension; import java.awt.Rectangle; import java.awt.SystemColor; import java.util.Arrays; import javax.swing.UIManager; /** * A palette of swatches with predefined colors * * @author Tim Boudreau */ class PredefinedPalette extends Palette { NamedColor[] colors; private int swatchSize = 11; private final int gap = 1; private static final Rectangle scratch = new Rectangle(); private final String name; /** Creates a new instance of PredefinedPalette */ public PredefinedPalette(final String name, final NamedColor[] colors) { this.colors = colors; this.name = name; Arrays.sort(colors); if (colors.length < 14) { swatchSize = 24; } else if (colors.length < 40) { swatchSize = 16; } } @Override public java.awt.Color getColorAt(final int x, final int y) { Color result = null; final int idx = indexForPoint(x, y); if (idx != -1 && idx < colors.length) { result = colors[idx]; } return result; } @Override public void paintTo(final java.awt.Graphics g) { g.setColor(Color.BLACK); final Dimension size = getSize(); g.fillRect(0, 0, size.width, size.height); for (int i = 0; i < colors.length; i++) { final Color c = colors[i]; rectForIndex(i, scratch); g.setColor(c); g.fillRect(scratch.x, scratch.y, scratch.width, scratch.height); if (Color.BLACK.equals(c)) { g.setColor(Color.GRAY); } else { g.setColor(c.brighter()); } g.drawLine(scratch.x, scratch.y, scratch.x + scratch.width - 1, scratch.y); g.drawLine(scratch.x, scratch.y, scratch.x, scratch.y + scratch.height - 1); if (Color.BLACK.equals(c)) { g.setColor(Color.GRAY.darker()); } else { g.setColor(c.darker()); } g.drawLine(scratch.x + scratch.width - 1, scratch.y + scratch.height - 1, scratch.width + scratch.x - 1, scratch.y + 1); g.drawLine(scratch.x + scratch.width - 1, scratch.y + scratch.height - 1, scratch.x, scratch.y + scratch.height - 1); } } @Override public String getNameAt(final int x, final int y) { final NamedColor nc = (NamedColor) getColorAt(x, y); if (nc != null) { return nc.getDisplayName(); } else { return null; } } protected int getCount() { return colors.length; } Dimension calcSize() { final int count = colors.length; final int perRow = (int) Math.round(Math.sqrt(count)); final int perCol = (perRow * perRow >= count) ? perRow : perRow + 1; final int width = perCol * (swatchSize + gap) + gap; final int height = perRow * (swatchSize + gap) + gap; final Dimension result = new Dimension(width, height); return result; } private Dimension size = null; @Override public Dimension getSize() { if (size == null) { size = calcSize(); } return size; } @Override public void setSize(final int w, final int h) { size = new Dimension(w, h); } private int indexForPoint(final int x, final int y) { final Dimension d = getSize(); if (y > d.height || x > d.width || y < 0 || x < 0) { return -1; } final int perRow = d.width / (swatchSize + gap); final int col = x / (swatchSize + gap); final int row = y / (swatchSize + gap); return (row * perRow) + col; } private void rectForIndex(final int idx, final Rectangle r) { final Dimension d = getSize(); final int rectsPerRow = d.width / (swatchSize + gap); r.x = gap + ((swatchSize + gap) * (idx % rectsPerRow)); r.y = gap + ((swatchSize + gap) * (idx / rectsPerRow)); r.width = swatchSize; r.height = swatchSize; } private static Palette[] predefined = null; public static Palette[] createDefaultPalettes() { if (predefined == null) { predefined = makePal(); } return predefined; } private static final Palette[] makePal() { final Palette[] result = new Palette[] { new PredefinedPalette("svg", SVGColors), new PredefinedPalette("system", getSystemColors()), RecentColors.getDefault(), new PredefinedPalette("swing", getSwingColors()) }; return result; } static class BasicNamedColor extends NamedColor implements Comparable { /** * */ private static final long serialVersionUID = 1L; private final String name; public BasicNamedColor(final String name, final int r, final int g, final int b) { super(name, r, g, b); this.name = name; } @Override public String getName() { return name; } @Override public String getDisplayName() { return ColorChooser.getString(getName()); } @Override public String toString() { return "new java.awt.Color(" + getRed() + "," + getGreen() + "," + getBlue() + ")"; } public int compareTo(final Object o) { final Color c = (Color) o; // maybe average rgb & compare? final int result = avgColor(c) - avgColor(this); return result; } @Override public String getInstantiationCode() { return toString(); } } private static int avgColor(final Color c) { return (c.getRed() + c.getGreen() + c.getBlue()) / 3; } @Override public String getDisplayName() { return ColorChooser.getString(name); } static String getColorName(final Color c) { for (final SwingColor swingColor : swingColors) { if (equals(swingColor, c)) { return swingColor.getDisplayName(); } } for (final NamedColor color : SVGColors) { if (equals(color, c)) { return color.getDisplayName(); } } return null; } static boolean equals(final Color a, final Color b) { return a.getRGB() == b.getRGB(); } private static final NamedColor[] SVGColors = new BasicNamedColor[] { new BasicNamedColor("aliceblue", 240, 248, 255), new BasicNamedColor("antiquewhite", 250, 235, 215), new BasicNamedColor("aqua", 0, 255, 255), new BasicNamedColor("aquamarine", 127, 255, 212), new BasicNamedColor("azure", 240, 255, 255), new BasicNamedColor("beige", 245, 245, 220), new BasicNamedColor("bisque", 255, 228, 196), new BasicNamedColor("black", 0, 0, 0), new BasicNamedColor("blanchedalmond", 255, 235, 205), new BasicNamedColor("blue", 0, 0, 255), new BasicNamedColor("blueviolet", 138, 43, 226), new BasicNamedColor("brown", 165, 42, 42), new BasicNamedColor("burlywood", 222, 184, 135), new BasicNamedColor("cadetblue", 95, 158, 160), new BasicNamedColor("chartreuse", 127, 255, 0), new BasicNamedColor("chocolate", 210, 105, 30), new BasicNamedColor("coral", 255, 127, 80), new BasicNamedColor("cornflowerblue", 100, 149, 237), new BasicNamedColor("cornsilk", 255, 248, 220), new BasicNamedColor("crimson", 220, 20, 60), new BasicNamedColor("cyan", 0, 255, 255), new BasicNamedColor("darkblue", 0, 0, 139), new BasicNamedColor("darkcyan", 0, 139, 139), new BasicNamedColor("darkgoldenrod", 184, 134, 11), new BasicNamedColor("darkgray", 169, 169, 169), new BasicNamedColor("darkgreen", 0, 100, 0), new BasicNamedColor("darkgrey", 169, 169, 169), new BasicNamedColor("darkkhaki", 189, 183, 107), new BasicNamedColor("darkmagenta", 139, 0, 139), new BasicNamedColor("darkolivegreen", 85, 107, 47), new BasicNamedColor("darkorange", 255, 140, 0), new BasicNamedColor("darkorchid", 153, 50, 204), new BasicNamedColor("darkred", 139, 0, 0), new BasicNamedColor("darksalmon", 233, 150, 122), new BasicNamedColor("darkseagreen", 143, 188, 143), new BasicNamedColor("darkslateblue", 72, 61, 139), new BasicNamedColor("darkslategray", 47, 79, 79), new BasicNamedColor("darkslategrey", 47, 79, 79), new BasicNamedColor("darkturquoise", 0, 206, 209), new BasicNamedColor("darkviolet", 148, 0, 211), new BasicNamedColor("deeppink", 255, 20, 147), new BasicNamedColor("deepskyblue", 0, 191, 255), new BasicNamedColor("dimgray", 105, 105, 105), new BasicNamedColor("dimgrey", 105, 105, 105), new BasicNamedColor("dodgerblue", 30, 144, 255), new BasicNamedColor("firebrick", 178, 34, 34), new BasicNamedColor("floralwhite", 255, 250, 240), new BasicNamedColor("forestgreen", 34, 139, 34), new BasicNamedColor("fuchsia", 255, 0, 255), new BasicNamedColor("gainsboro", 220, 220, 220), new BasicNamedColor("ghostwhite", 248, 248, 255), new BasicNamedColor("gold", 255, 215, 0), new BasicNamedColor("goldenrod", 218, 165, 32), new BasicNamedColor("gray", 128, 128, 128), new BasicNamedColor("grey", 128, 128, 128), new BasicNamedColor("green", 0, 128, 0), new BasicNamedColor("greenyellow", 173, 255, 47), new BasicNamedColor("honeydew", 240, 255, 240), new BasicNamedColor("hotpink", 255, 105, 180), new BasicNamedColor("indianred", 205, 92, 92), new BasicNamedColor("indigo", 75, 0, 130), new BasicNamedColor("ivory", 255, 255, 240), new BasicNamedColor("khaki", 240, 230, 140), new BasicNamedColor("lavender", 230, 230, 250), new BasicNamedColor("lavenderblush", 255, 240, 245), new BasicNamedColor("lawngreen", 124, 252, 0), new BasicNamedColor("lemonchiffon", 255, 250, 205), new BasicNamedColor("lightblue", 173, 216, 230), new BasicNamedColor("lightcoral", 240, 128, 128), new BasicNamedColor("lightcyan", 224, 255, 255), new BasicNamedColor("lightgoldenrodyellow", 250, 250, 210), new BasicNamedColor("lightgray", 211, 211, 211), new BasicNamedColor("lightgreen", 144, 238, 144), new BasicNamedColor("lightgrey", 211, 211, 211), new BasicNamedColor("lightpink", 255, 182, 193), new BasicNamedColor("lightsalmon", 255, 160, 122), new BasicNamedColor("lightseagreen", 32, 178, 170), new BasicNamedColor("lightskyblue", 135, 206, 250), new BasicNamedColor("lightslategray", 119, 136, 153), new BasicNamedColor("lightslategrey", 119, 136, 153), new BasicNamedColor("lightsteelblue", 176, 196, 222), new BasicNamedColor("lightyellow", 255, 255, 224), new BasicNamedColor("lime", 0, 255, 0), new BasicNamedColor("limegreen", 50, 205, 50), new BasicNamedColor("linen", 250, 240, 230), new BasicNamedColor("magenta", 255, 0, 255), new BasicNamedColor("maroon", 128, 0, 0), new BasicNamedColor("mediumaquamarine", 102, 205, 170), new BasicNamedColor("mediumblue", 0, 0, 205), new BasicNamedColor("mediumorchid", 186, 85, 211), new BasicNamedColor("mediumpurple", 147, 112, 219), new BasicNamedColor("mediumseagreen", 60, 179, 113), new BasicNamedColor("mediumslateblue", 123, 104, 238), new BasicNamedColor("mediumspringgreen", 0, 250, 154), new BasicNamedColor("mediumturquoise", 72, 209, 204), new BasicNamedColor("mediumvioletred", 199, 21, 133), new BasicNamedColor("midnightblue", 25, 25, 112), new BasicNamedColor("mintcream", 245, 255, 250), new BasicNamedColor("mistyrose", 255, 228, 225), new BasicNamedColor("moccasin", 255, 228, 181), new BasicNamedColor("navajowhite", 255, 222, 173), new BasicNamedColor("navy", 0, 0, 128), new BasicNamedColor("oldlace", 253, 245, 230), new BasicNamedColor("olive", 128, 128, 0), new BasicNamedColor("olivedrab", 107, 142, 35), new BasicNamedColor("orange", 255, 165, 0), new BasicNamedColor("orangered", 255, 69, 0), new BasicNamedColor("orchid", 218, 112, 214), new BasicNamedColor("palegoldenrod", 238, 232, 170), new BasicNamedColor("palegreen", 152, 251, 152), new BasicNamedColor("paleturquoise", 175, 238, 238), new BasicNamedColor("palevioletred", 219, 112, 147), new BasicNamedColor("papayawhip", 255, 239, 213), new BasicNamedColor("peachpuff", 255, 218, 185), new BasicNamedColor("peru", 205, 133, 63), new BasicNamedColor("pink", 255, 192, 203), new BasicNamedColor("plum", 221, 160, 221), new BasicNamedColor("powderblue", 176, 224, 230), new BasicNamedColor("purple", 128, 0, 128), new BasicNamedColor("red", 255, 0, 0), new BasicNamedColor("rosybrown", 188, 143, 143), new BasicNamedColor("royalblue", 65, 105, 225), new BasicNamedColor("saddlebrown", 139, 69, 19), new BasicNamedColor("salmon", 250, 128, 114), new BasicNamedColor("sandybrown", 244, 164, 96), new BasicNamedColor("seagreen", 46, 139, 87), new BasicNamedColor("seashell", 255, 245, 238), new BasicNamedColor("sienna", 160, 82, 45), new BasicNamedColor("silver", 192, 192, 192), new BasicNamedColor("skyblue", 135, 206, 235), new BasicNamedColor("slateblue", 106, 90, 205), new BasicNamedColor("slategray", 112, 128, 144), new BasicNamedColor("slategrey", 112, 128, 144), new BasicNamedColor("snow", 255, 250, 250), new BasicNamedColor("springgreen", 0, 255, 127), new BasicNamedColor("steelblue", 70, 130, 180), new BasicNamedColor("tan", 210, 180, 140), new BasicNamedColor("teal", 0, 128, 128), new BasicNamedColor("thistle", 216, 191, 216), new BasicNamedColor("tomato", 255, 99, 71), new BasicNamedColor("turquoise", 64, 224, 208), new BasicNamedColor("violet", 238, 130, 238), new BasicNamedColor("wheat", 245, 222, 179), new BasicNamedColor("white", 255, 255, 255), new BasicNamedColor("whitesmoke", 245, 245, 245), new BasicNamedColor("yellow", 255, 255, 0), new BasicNamedColor("yellowgreen", 154, 205, 50) }; // NOI18N static class SwingColor extends BasicNamedColor { /** * */ private static final long serialVersionUID = 1L; public SwingColor(final String name, final int r, final int g, final int b) { super(name, r, g, b); } @Override public String toString() { return "UIManager.getColor(" + getName() + ")"; } @Override public String getDisplayName() { return getName(); } @Override public String getInstantiationCode() { return toString(); } } private static SwingColor[] swingColors = null; private static SwingColor[] getSwingColors() { if (swingColors != null) { return swingColors; } final java.util.List l = new java.util.ArrayList(); Color c; c = UIManager.getColor("windowText"); if (c != null) { l.add(new SwingColor("windowText", c.getRed(), c.getGreen(), c .getBlue())); } c = UIManager.getColor("activeCaptionBorder"); if (c != null) { l.add(new SwingColor("activeCaptionBorder", c.getRed(), c .getGreen(), c.getBlue())); } c = UIManager.getColor("inactiveCaptionText"); if (c != null) { l.add(new SwingColor("inactiveCaptionText", c.getRed(), c .getGreen(), c.getBlue())); } c = UIManager.getColor("controlLtHighlight"); if (c != null) { l.add(new SwingColor("controlLtHighlight", c.getRed(), c.getGreen(), c.getBlue())); } c = UIManager.getColor("inactiveCaptionBorder"); if (c != null) { l.add(new SwingColor("inactiveCaptionBorder", c.getRed(), c .getGreen(), c.getBlue())); } c = UIManager.getColor("textInactiveText"); if (c != null) { l.add(new SwingColor("textInactiveText", c.getRed(), c.getGreen(), c.getBlue())); } c = UIManager.getColor("control"); if (c != null) { l.add(new SwingColor("control", c.getRed(), c.getGreen(), c .getBlue())); } c = UIManager.getColor("textText"); if (c != null) { l.add(new SwingColor("textText", c.getRed(), c.getGreen(), c .getBlue())); } c = UIManager.getColor("menu"); if (c != null) { l .add(new SwingColor("menu", c.getRed(), c.getGreen(), c .getBlue())); } c = UIManager.getColor("windowBorder"); if (c != null) { l.add(new SwingColor("windowBorder", c.getRed(), c.getGreen(), c .getBlue())); } c = UIManager.getColor("infoText"); if (c != null) { l.add(new SwingColor("infoText", c.getRed(), c.getGreen(), c .getBlue())); } c = UIManager.getColor("menuText"); if (c != null) { l.add(new SwingColor("menuText", c.getRed(), c.getGreen(), c .getBlue())); } c = UIManager.getColor("textHighlightText"); if (c != null) { l.add(new SwingColor("textHighlightText", c.getRed(), c.getGreen(), c.getBlue())); } c = UIManager.getColor("activeCaptionText"); if (c != null) { l.add(new SwingColor("activeCaptionText", c.getRed(), c.getGreen(), c.getBlue())); } c = UIManager.getColor("textHighlight"); if (c != null) { l.add(new SwingColor("textHighlight", c.getRed(), c.getGreen(), c .getBlue())); } c = UIManager.getColor("controlShadow"); if (c != null) { l.add(new SwingColor("controlShadow", c.getRed(), c.getGreen(), c .getBlue())); } c = UIManager.getColor("controlText"); if (c != null) { l.add(new SwingColor("controlText", c.getRed(), c.getGreen(), c .getBlue())); } c = UIManager.getColor("menuPressedItemF"); if (c != null) { l.add(new SwingColor("menuPressedItemF", c.getRed(), c.getGreen(), c.getBlue())); } c = UIManager.getColor("menuPressedItemB"); if (c != null) { l.add(new SwingColor("menuPressedItemB", c.getRed(), c.getGreen(), c.getBlue())); } c = UIManager.getColor("info"); if (c != null) { l .add(new SwingColor("info", c.getRed(), c.getGreen(), c .getBlue())); } c = UIManager.getColor("controlHighlight"); if (c != null) { l.add(new SwingColor("controlHighlight", c.getRed(), c.getGreen(), c.getBlue())); } c = UIManager.getColor("scrollbar"); if (c != null) { l.add(new SwingColor("scrollbar", c.getRed(), c.getGreen(), c .getBlue())); } c = UIManager.getColor("window"); if (c != null) { l.add(new SwingColor("window", c.getRed(), c.getGreen(), c .getBlue())); } c = UIManager.getColor("inactiveCaption"); if (c != null) { l.add(new SwingColor("inactiveCaption", c.getRed(), c.getGreen(), c .getBlue())); } c = UIManager.getColor("controlDkShadow"); if (c != null) { l.add(new SwingColor("controlDkShadow", c.getRed(), c.getGreen(), c .getBlue())); } c = UIManager.getColor("activeCaption"); if (c != null) { l.add(new SwingColor("activeCaption", c.getRed(), c.getGreen(), c .getBlue())); } c = UIManager.getColor("text"); if (c != null) { l .add(new SwingColor("text", c.getRed(), c.getGreen(), c .getBlue())); } c = UIManager.getColor("desktop"); if (c != null) { l.add(new SwingColor("desktop", c.getRed(), c.getGreen(), c .getBlue())); } swingColors = (SwingColor[]) l.toArray(new SwingColor[0]); return swingColors; } /** * Names of system colors. Note: not localizable, those names * corresponds to programatical names. */ private static final String systemGenerate[] = { "activeCaption", "activeCaptionBorder", // NOI18N "activeCaptionText", "control", "controlDkShadow", // NOI18N "controlHighlight", "controlLtHighlight", // NOI18N "controlShadow", "controlText", "desktop", // NOI18N "inactiveCaption", "inactiveCaptionBorder", // NOI18N "inactiveCaptionText", "info", "infoText", "menu", // NOI18N "menuText", "scrollbar", "text", "textHighlight", // NOI18N "textHighlightText", "textInactiveText", "textText", // NOI18N "window", "windowBorder", "windowText" }; // NOI18N /** System colors used in System Palette. */ private static final Color sColors[] = { SystemColor.activeCaption, SystemColor.activeCaptionBorder, SystemColor.activeCaptionText, SystemColor.control, SystemColor.controlDkShadow, SystemColor.controlHighlight, SystemColor.controlLtHighlight, SystemColor.controlShadow, SystemColor.controlText, SystemColor.desktop, SystemColor.inactiveCaption, SystemColor.inactiveCaptionBorder, SystemColor.inactiveCaptionText, SystemColor.info, SystemColor.infoText, SystemColor.menu, SystemColor.menuText, SystemColor.scrollbar, SystemColor.text, SystemColor.textHighlight, SystemColor.textHighlightText, SystemColor.textInactiveText, SystemColor.textText, SystemColor.window, SystemColor.windowBorder, SystemColor.windowText }; private static class SysColor extends BasicNamedColor { /** * */ private static final long serialVersionUID = 1L; public SysColor(final String name, final Color scolor) { super(name, scolor.getRed(), scolor.getGreen(), scolor.getBlue()); } @Override public String toString() { return "SystemColor." + getName(); } @Override public String getDisplayName() { return getName(); } } private static NamedColor[] systemColors = null; private static NamedColor[] getSystemColors() { if (systemColors == null) { systemColors = new BasicNamedColor[sColors.length]; for (int i = 0; i < sColors.length; i++) { systemColors[i] = new SysColor(systemGenerate[i], sColors[i]); } } return systemColors; } /* * //A cheap and cheesy way to quickly make an English-localized bundle for * //an array of NamedColor. public static void main(String args[]) { for * (int i=0; i < SVGColors.length; i++) { System.out.println("# " + * SVGColors[i].getRed() + "," + SVGColors[i].getGreen() + "," + * SVGColors[i].getBlue()); String name = SVGColors[i].getName(); * StringBuffer sb = new StringBuffer(name); sb.replace (0, 1, new * String(new char[]{Character.toUpperCase(name.charAt(0))})); String * dispName = sb.toString(); * * for (int k=0; k < tros.length; k++) { String lookFor = tros[k]; * StringBuffer sb2 = new StringBuffer(lookFor); sb.replace (0, 1, new * String(new char[]{Character.toUpperCase(lookFor.charAt(0))})); String * replaceWith = " " + sb2.toString(); dispName = * org.openide.util.Utilities.replaceString( dispName, tros[k], * replaceWith); } * * System.out.println(SVGColors[i].getName() + "=" + dispName); } } * * private static String[] tros = new String[] { "brown", "blue", "red", * "violet", "orchid", "green", "yellow", "orange", "black", "gray", "grey", * "white", "maroon", "goldenrod", "cream", "spring", "purple", "sea", * "magenta", "steel", "slate","pink", "cyan", "chiffon", "coral", "wheat", * "blush", "brick","olive","khaki", "silk","crimson","wood","almond", * "smoke", "puff", "whip", "peach", "lace", * "rose","turquoise","aquamarine","salmon", "sky" }; */ /** * //some boilerplate to make a list of swing colors public static void main * (String[] args) { javax.swing.LookAndFeel lf = new * javax.swing.plaf.metal.MetalLookAndFeel(); javax.swing.UIDefaults def = * javax.swing.UIManager.getLookAndFeel().getDefaults(); java.util.Iterator * i = new java.util.ArrayList(def.keySet()).iterator(); while (i.hasNext()) * { Object o = i.next(); // System.err.println(o); Object result = * def.get(o); if (result instanceof Color) { String s = o.toString(); if * (s.indexOf(".") == -1) { System.err.println("c = UIManager.getColor(\"" + * s +"\");\nif (c != null) {\n l.add(new SwingColor(\"" + s + * "\", c.getRed(), c.getGreen(), c.getBlue()));\n}"); } } } * System.err.println("Done"); } */ } ./src/net/java/dev/colorchooser/Bundle.properties0000644000175000017500000001437111302722126021057 0ustar yvesyves# Sun Public License Notice # # The contents of this file are subject to the Sun Public License # Version 1.0 (the "License"). You may not use this file except in # compliance with the License. A copy of the License is available at # http://www.sun.com/ # # The Original Code is NetBeans. The Initial Developer of the Original # Code is Sun Microsystems, Inc. Portions Copyright 1997-2003 Sun # Microsystems, Inc. All Rights Reserved. #Palette names basic=Primary colors svg=SVG/X11 color constants swing=Swing constants system=System colors recent=Recent colors tip=Click and hold combinations of Ctrl/Shift/Alt to switch palettes tip.mac=Click and hold combinations of Command/Shift/Alt to switch palettes #SVG/X11 Color constants # 240,248,255 aliceblue=Alice blue # 250,235,215 antiquewhite=Antique white # 0,255,255 aqua=Aqua # 127,255,212 aquamarine=Aquamarine # 240,255,255 azure=Azure # 245,245,220 beige=Beige # 255,228,196 bisque=Bisque # 0,0,0 black=Black # 255,235,205 blanchedalmond=Blanched almond # 0,0,255 blue=Blue # 138,43,226 blueviolet=Blue violet # 165,42,42 brown=Brown # 222,184,135 burlywood=Burly wood # 95,158,160 cadetblue=Cadet blue # 127,255,0 chartreuse=Chartreuse # 210,105,30 chocolate=Chocolate # 255,127,80 coral=Coral # 100,149,237 cornflowerblue=Cornflower blue # 255,248,220 cornsilk=Corn silk # 220,20,60 crimson=Crimson # 0,255,255 cyan=Cyan # 0,0,139 darkblue=Dark blue # 0,139,139 darkcyan=Dark cyan # 184,134,11 darkgoldenrod=Dark goldenrod # 169,169,169 darkgray=Dark gray # 0,100,0 darkgreen=Dark green # 169,169,169 darkgrey=Dark grey # 189,183,107 darkkhaki=Dark khaki # 139,0,139 darkmagenta=Dark magenta # 85,107,47 darkolivegreen=Dark olive green # 255,140,0 darkorange=Dark orange # 153,50,204 darkorchid=Dark orchid # 139,0,0 darkred=Dark red # 233,150,122 darksalmon=Dark salmon # 143,188,143 darkseagreen=Dark sea green # 72,61,139 darkslateblue=Dark slate blue # 47,79,79 darkslategray=Dark slate gray # 47,79,79 darkslategrey=Dark slate grey # 0,206,209 darkturquoise=Dark turquoise # 148,0,211 darkviolet=Dark violet # 255,20,147 deeppink=Deep pink # 0,191,255 deepskyblue=Deep sky blue # 105,105,105 dimgray=Dim gray # 105,105,105 dimgrey=Dim grey # 30,144,255 dodgerblue=Dodger blue # 178,34,34 firebrick=Fire brick # 255,250,240 floralwhite=Floral white # 34,139,34 forestgreen=Forest green # 255,0,255 fuchsia=Fuchsia # 220,220,220 gainsboro=Gainsboro # 248,248,255 ghostwhite=Ghost white # 255,215,0 gold=Gold # 218,165,32 goldenrod=Goldenrod # 128,128,128 gray=Gray # 128,128,128 grey=Grey # 0,128,0 green=Green # 173,255,47 greenyellow=Green yellow # 240,255,240 honeydew=Honeydew # 255,105,180 hotpink=Hot pink # 205,92,92 indianred=Indian red # 75,0,130 indigo=Indigo # 255,255,240 ivory=Ivory # 240,230,140 khaki=Khaki # 230,230,250 lavender=Lavender # 255,240,245 lavenderblush=Lavender blush # 124,252,0 lawngreen=Lawn green # 255,250,205 lemonchiffon=Lemon chiffon # 173,216,230 lightblue=Light blue # 240,128,128 lightcoral=Light coral # 224,255,255 lightcyan=Light cyan # 250,250,210 lightgoldenrodyellow=Light goldenrod yellow # 211,211,211 lightgray=Light gray # 144,238,144 lightgreen=Light green # 211,211,211 lightgrey=Light grey # 255,182,193 lightpink=Light pink # 255,160,122 lightsalmon=Light salmon # 32,178,170 lightseagreen=Light sea green # 135,206,250 lightskyblue=Light sky blue # 119,136,153 lightslategray=Light slate gray # 119,136,153 lightslategrey=Light slate grey # 176,196,222 lightsteelblue=Light steel blue # 255,255,224 lightyellow=Light yellow # 0,255,0 lime=Lime # 50,205,50 limegreen=Lime green # 250,240,230 linen=Linen # 255,0,255 magenta=Magenta # 128,0,0 maroon=Maroon # 102,205,170 mediumaquamarine=Medium aquamarine # 0,0,205 mediumblue=Medium blue # 186,85,211 mediumorchid=Medium orchid # 147,112,219 mediumpurple=Medium purple # 60,179,113 mediumseagreen=Medium sea green # 123,104,238 mediumslateblue=Medium slate blue # 0,250,154 mediumspringgreen=Medium spring green # 72,209,204 mediumturquoise=Medium turquoise # 199,21,133 mediumvioletred=Medium violet red # 25,25,112 midnightblue=Midnight blue # 245,255,250 mintcream=Mint cream # 255,228,225 mistyrose=Misty rose # 255,228,181 moccasin=Moccasin # 255,222,173 navajowhite=Navajo white # 0,0,128 navy=Navy # 253,245,230 oldlace=Old lace # 128,128,0 olive=Olive # 107,142,35 olivedrab=Olivedrab # 255,165,0 orange=Orange # 255,69,0 orangered=Orange red # 218,112,214 orchid=Orchid # 238,232,170 palegoldenrod=Pale goldenrod # 152,251,152 palegreen=Pale green # 175,238,238 paleturquoise=Pale turquoise # 219,112,147 palevioletred=Pale violet red # 255,239,213 papayawhip=Papaya whip # 255,218,185 peachpuff=Peach puff # 205,133,63 peru=Peru # 255,192,203 pink=Pink # 221,160,221 plum=Plum # 176,224,230 powderblue=Powder blue # 128,0,128 purple=Purple # 255,0,0 red=Red # 188,143,143 rosybrown=Rosy brown # 65,105,225 royalblue=Royal blue # 139,69,19 saddlebrown=Saddle brown # 250,128,114 salmon=Salmon # 244,164,96 sandybrown=Sandy brown # 46,139,87 seagreen=Sea green # 255,245,238 seashell=Seashell # 160,82,45 sienna=Sienna # 192,192,192 silver=Silver # 135,206,235 skyblue=Sky blue # 106,90,205 slateblue=Slate blue # 112,128,144 slategray=Slate gray # 112,128,144 slategrey=Slate grey # 255,250,250 snow=Snow # 0,255,127 springgreen=Spring green # 70,130,180 steelblue=Steel blue # 210,180,140 tan=Tan # 0,128,128 teal=Teal # 216,191,216 thistle=Thistle # 255,99,71 tomato=Tomato # 64,224,208 turquoise=Turquoise # 238,130,238 violet=Violet # 245,222,179 wheat=Wheat # 255,255,255 white=White # 245,245,245 whitesmoke=White smoke # 255,255,0 yellow=Yellow # 154,205,50 yellowgreen=Yellow green # Continuous palette names satSmall=Saturated colors #SMALL_SPEC_WIDTH, SMALL_SPEC_HEIGHT, 1f, false), unsatSmall=Desaturated colors #SMALL_SPEC_WIDTH, SMALL_SPEC_HEIGHT, 0.4f, false), satSmallHoriz=Saturated colors #SMALL_SPEC_WIDTH, SMALL_SPEC_HEIGHT, 1f, true), unsatSmallHoriz=Desaturated colors #SMALL_SPEC_WIDTH, SMALL_SPEC_HEIGHT, 0.4f, true), satLarge=Saturated colors #LARGE_SPEC_WIDTH, LARGE_SPEC_HEIGHT, 1f, false), unsatLarge=Desaturated colors #LARGE_SPEC_WIDTH, LARGE_SPEC_HEIGHT, 0.4f, false), satLargeHoriz=Saturated colors #LARGE_SPEC_WIDTH, LARGE_SPEC_HEIGHT, 1f, true), unsatLargeHoriz=Desaturated colors #LARGE_SPEC_WIDTH, LARGE_SPEC_HEIGHT, 0.4f, true) chooseColor="Choose a Color" ./src/net/java/dev/colorchooser/DefaultColorChooserUI.java0000644000175000017500000000637511302722131022540 0ustar yvesyves/* * The contents of this file are subject to the terms of the Common Development * and Distribution License (the License). You may not use this file except in * compliance with the License. * * You can obtain a copy of the License at http://www.netbeans.org/cddl.html * or http://www.netbeans.org/cddl.txt. * * When distributing Covered Code, include this CDDL Header Notice in each file * and include the License file at http://www.netbeans.org/cddl.txt. * If applicable, add the following below the CDDL Header, with the fields * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" */ package net.java.dev.colorchooser; import java.awt.Color; import java.awt.Graphics; import javax.swing.JComponent; import javax.swing.plaf.ComponentUI; /** * Default UI delegate for color choosers. CCBorder handles minor per-look and * feel differences so we can use one delegate. Note this delegate is stateless * - there is one instance system-wide. State is kept by the listener - see * inner class L. * * @author Tim Boudreau */ final class DefaultColorChooserUI extends ColorChooserUI { DefaultColorChooserUI() { } private static DefaultColorChooserUI INSTANCE = null; public static ComponentUI createUI(final JComponent jc) { // assert jc instanceof ColorChooser; return getDefault(); } static DefaultColorChooserUI getDefault() { if (INSTANCE == null) { INSTANCE = new DefaultColorChooserUI(); } return INSTANCE; } @Override protected void init(final ColorChooser c) { c.setToolTipText(getDefaultTooltip()); c.setBorder(new CCBorder()); } @Override protected void uninit(final ColorChooser c) { if (c.getBorder() instanceof CCBorder) { c.setBorder(null); } if (getDefaultTooltip().equals(c.getToolTipText())) { c.setToolTipText(null); } } private static String getDefaultTooltip() { return MAC ? ColorChooser.getString("tip.mac") : // NOI18N ColorChooser.getString("tip"); // NOI18N } @Override public void paint(final Graphics g, final JComponent c) { final ColorChooser chooser = (ColorChooser) c; final Color col = chooser.transientColor() != null ? chooser .transientColor() : chooser.getColor(); g.setColor(col); g.fillRect(0, 0, chooser.getWidth() - 1, chooser.getHeight() - 1); if (chooser.hasFocus()) { g.setColor(invertColor(col)); g.drawRect(4, 4, chooser.getWidth() - 8, chooser.getHeight() - 8); } } // *****************Some utility methods for manipulating colors*********** /** Finds a color that will visually contrast with the selected color */ private static final Color invertColor(final Color c) { final int r = checkRange(255 - c.getRed()); final int g = checkRange(255 - c.getGreen()); final int b = checkRange(255 - c.getBlue()); return new Color(r, g, b); } /** * Checks to make sure the color component passed is not too close to * middle-of-the-road, and if so, returns its difference with 128. Used by * invertColor to make sure that it doesn't, for example, return 129,129,129 * as a color to contrast with 127,127,127. */ private static final int checkRange(final int i) { int result = i; if (Math.abs(128 - i) < 24) { result = Math.abs(128 - i); } return result; } } ./src/net/java/dev/colorchooser/Bundle_en_US.properties0000644000175000017500000001415211302722126022145 0ustar yvesyves# Sun Public License Notice # # The contents of this file are subject to the Sun Public License # Version 1.0 (the "License"). You may not use this file except in # compliance with the License. A copy of the License is available at # http://www.sun.com/ # # The Original Code is NetBeans. The Initial Developer of the Original # Code is Sun Microsystems, Inc. Portions Copyright 1997-2003 Sun # Microsystems, Inc. All Rights Reserved. #Palette names basic=Primary colors svg=SVG/X11 color constants swing=Swing constants system=System colors recent=Recent colors #SVG/X11 Color constants # 240,248,255 aliceblue=Alice blue # 250,235,215 antiquewhite=Antique white # 0,255,255 aqua=Aqua # 127,255,212 aquamarine=Aquamarine # 240,255,255 azure=Azure # 245,245,220 beige=Beige # 255,228,196 bisque=Bisque # 0,0,0 black=Black # 255,235,205 blanchedalmond=Blanched almond # 0,0,255 blue=Blue # 138,43,226 blueviolet=Blue violet # 165,42,42 brown=Brown # 222,184,135 burlywood=Burly wood # 95,158,160 cadetblue=Cadet blue # 127,255,0 chartreuse=Chartreuse # 210,105,30 chocolate=Chocolate # 255,127,80 coral=Coral # 100,149,237 cornflowerblue=Cornflower blue # 255,248,220 cornsilk=Corn silk # 220,20,60 crimson=Crimson # 0,255,255 cyan=Cyan # 0,0,139 darkblue=Dark blue # 0,139,139 darkcyan=Dark cyan # 184,134,11 darkgoldenrod=Dark goldenrod # 169,169,169 darkgray=Dark gray # 0,100,0 darkgreen=Dark green # 169,169,169 darkgrey=Dark grey # 189,183,107 darkkhaki=Dark khaki # 139,0,139 darkmagenta=Dark magenta # 85,107,47 darkolivegreen=Dark olive green # 255,140,0 darkorange=Dark orange # 153,50,204 darkorchid=Dark orchid # 139,0,0 darkred=Dark red # 233,150,122 darksalmon=Dark salmon # 143,188,143 darkseagreen=Dark sea green # 72,61,139 darkslateblue=Dark slate blue # 47,79,79 darkslategray=Dark slate gray # 47,79,79 darkslategrey=Dark slate grey # 0,206,209 darkturquoise=Dark turquoise # 148,0,211 darkviolet=Dark violet # 255,20,147 deeppink=Deep pink # 0,191,255 deepskyblue=Deep sky blue # 105,105,105 dimgray=Dim gray # 105,105,105 dimgrey=Dim grey # 30,144,255 dodgerblue=Dodger blue # 178,34,34 firebrick=Fire brick # 255,250,240 floralwhite=Floral white # 34,139,34 forestgreen=Forest green # 255,0,255 fuchsia=Fuchsia # 220,220,220 gainsboro=Gainsboro # 248,248,255 ghostwhite=Ghost white # 255,215,0 gold=Gold # 218,165,32 goldenrod=Goldenrod # 128,128,128 gray=Gray # 128,128,128 grey=Grey # 0,128,0 green=Green # 173,255,47 greenyellow=Green yellow # 240,255,240 honeydew=Honeydew # 255,105,180 hotpink=Hot pink # 205,92,92 indianred=Indian red # 75,0,130 indigo=Indigo # 255,255,240 ivory=Ivory # 240,230,140 khaki=Khaki # 230,230,250 lavender=Lavender # 255,240,245 lavenderblush=Lavender blush # 124,252,0 lawngreen=Lawn green # 255,250,205 lemonchiffon=Lemon chiffon # 173,216,230 lightblue=Light blue # 240,128,128 lightcoral=Light coral # 224,255,255 lightcyan=Light cyan # 250,250,210 lightgoldenrodyellow=Light goldenrod yellow # 211,211,211 lightgray=Light gray # 144,238,144 lightgreen=Light green # 211,211,211 lightgrey=Light grey # 255,182,193 lightpink=Light pink # 255,160,122 lightsalmon=Light salmon # 32,178,170 lightseagreen=Light sea green # 135,206,250 lightskyblue=Light sky blue # 119,136,153 lightslategray=Light slate gray # 119,136,153 lightslategrey=Light slate grey # 176,196,222 lightsteelblue=Light steel blue # 255,255,224 lightyellow=Light yellow # 0,255,0 lime=Lime # 50,205,50 limegreen=Lime green # 250,240,230 linen=Linen # 255,0,255 magenta=Magenta # 128,0,0 maroon=Maroon # 102,205,170 mediumaquamarine=Medium aquamarine # 0,0,205 mediumblue=Medium blue # 186,85,211 mediumorchid=Medium orchid # 147,112,219 mediumpurple=Medium purple # 60,179,113 mediumseagreen=Medium sea green # 123,104,238 mediumslateblue=Medium slate blue # 0,250,154 mediumspringgreen=Medium spring green # 72,209,204 mediumturquoise=Medium turquoise # 199,21,133 mediumvioletred=Medium violet red # 25,25,112 midnightblue=Midnight blue # 245,255,250 mintcream=Mint cream # 255,228,225 mistyrose=Misty rose # 255,228,181 moccasin=Moccasin # 255,222,173 navajowhite=Navajo white # 0,0,128 navy=Navy # 253,245,230 oldlace=Old lace # 128,128,0 olive=Olive # 107,142,35 olivedrab=Olivedrab # 255,165,0 orange=Orange # 255,69,0 orangered=Orange red # 218,112,214 orchid=Orchid # 238,232,170 palegoldenrod=Pale goldenrod # 152,251,152 palegreen=Pale green # 175,238,238 paleturquoise=Pale turquoise # 219,112,147 palevioletred=Pale violet red # 255,239,213 papayawhip=Papaya whip # 255,218,185 peachpuff=Peach puff # 205,133,63 peru=Peru # 255,192,203 pink=Pink # 221,160,221 plum=Plum # 176,224,230 powderblue=Powder blue # 128,0,128 purple=Purple # 255,0,0 red=Red # 188,143,143 rosybrown=Rosy brown # 65,105,225 royalblue=Royal blue # 139,69,19 saddlebrown=Saddle brown # 250,128,114 salmon=Salmon # 244,164,96 sandybrown=Sandy brown # 46,139,87 seagreen=Sea green # 255,245,238 seashell=Seashell # 160,82,45 sienna=Sienna # 192,192,192 silver=Silver # 135,206,235 skyblue=Sky blue # 106,90,205 slateblue=Slate blue # 112,128,144 slategray=Slate gray # 112,128,144 slategrey=Slate grey # 255,250,250 snow=Snow # 0,255,127 springgreen=Spring green # 70,130,180 steelblue=Steel blue # 210,180,140 tan=Tan # 0,128,128 teal=Teal # 216,191,216 thistle=Thistle # 255,99,71 tomato=Tomato # 64,224,208 turquoise=Turquoise # 238,130,238 violet=Violet # 245,222,179 wheat=Wheat # 255,255,255 white=White # 245,245,245 whitesmoke=White smoke # 255,255,0 yellow=Yellow # 154,205,50 yellowgreen=Yellow green # Continuous palette names satSmall=Saturated colors #SMALL_SPEC_WIDTH, SMALL_SPEC_HEIGHT, 1f, false), unsatSmall=Desaturated colors #SMALL_SPEC_WIDTH, SMALL_SPEC_HEIGHT, 0.4f, false), satSmallHoriz=Saturated colors #SMALL_SPEC_WIDTH, SMALL_SPEC_HEIGHT, 1f, true), unsatSmallHoriz=Desaturated colors #SMALL_SPEC_WIDTH, SMALL_SPEC_HEIGHT, 0.4f, true), satLarge=Saturated colors - large #LARGE_SPEC_WIDTH, LARGE_SPEC_HEIGHT, 1f, false), unsatLarge=Desaturated colors - large #LARGE_SPEC_WIDTH, LARGE_SPEC_HEIGHT, 0.4f, false), satLargeHoriz=Saturated colors - large #LARGE_SPEC_WIDTH, LARGE_SPEC_HEIGHT, 1f, true), unsatLargeHoriz=Desaturated colors - large #LARGE_SPEC_WIDTH, LARGE_SPEC_HEIGHT, 0.4f, true) ./src/net/java/dev/colorchooser/chooserIcon.gif0000644000175000017500000000035111337523371020474 0ustar yvesyvesGIF89aIRZes-?D->>’[qT@L3pQ^5ufU  R+- 1?ݓf,E!,@f'd)ju@Ti\of1X.6.)=ШJZ !FpRC.kz%\6MO5(T"p`45UsBG`{ ZFx&%!;./src/net/java/dev/colorchooser/ColorChooserUI.java0000644000175000017500000002520211302722131021221 0ustar yvesyves/*DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2006-2008. Tim Boudreau. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common * Development and Distribution License("CDDL") (collectively, the * "License"). You may not use this file except in compliance with the * License. You can obtain a copy of the License at * http://www.netbeans.org/cddl-gplv2.html. See the License for the * specific language governing permissions and limitations under the * License. When distributing the software, include this License Header * Notice in each file and include the License file at * nbbuild/licenses/CDDL-GPL-2-CP. This particular file is designated * as subject to the "Classpath" exception as provided * in the GPL Version 2 section of the License file that * accompanied this code. */ package net.java.dev.colorchooser; import java.awt.Color; import java.awt.Dimension; import java.awt.Event; import java.awt.Point; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JColorChooser; import javax.swing.JComponent; import javax.swing.plaf.ComponentUI; /** * Parent class of UI delegates for color choosers. This class handles popping * up palettes and selection/setting transient color and firing events. * Generally, subclasses will simply want to override the painting logic. *

* To completely override all behavior, override installListeners() * and uninstallListeners() and do not have them call super. * * @author Tim Boudreau */ public abstract class ColorChooserUI extends ComponentUI { /** Creates a new instance of ColorChooserUI */ protected ColorChooserUI() { } @Override public final void installUI(final JComponent jc) { installListeners((ColorChooser) jc); init((ColorChooser) jc); } @Override public final void uninstallUI(final JComponent jc) { uninstallListeners((ColorChooser) jc); uninit((ColorChooser) jc); } /** Optional initialization method called from installUI() */ protected void init(final ColorChooser c) { } /** Optional initialization method called from uninstallUI() */ protected void uninit(final ColorChooser c) { } /** Begin listening for mouse events on the passed component */ protected void installListeners(final ColorChooser c) { final L l = new L(); c.addMouseListener(l); c.addFocusListener(l); c.addKeyListener(l); c.putClientProperty("uiListener", l); // NOI18N } /** Stop listening for mouse events on the passed component */ protected void uninstallListeners(final ColorChooser c) { final Object o = c.getClientProperty("uiListener"); // NOI18N if (o instanceof L) { final L l = (L) o; c.removeMouseListener(l); c.removeFocusListener(l); c.removeKeyListener(l); } } /** Running on macintosh? */ static final boolean MAC = System.getProperty("mrj.version") // NOI18N != null; /** * * Map a key event to an integer used to index into the array of available * palettes, used to change which palette is displayed on the fly. Note this * method reads the key code, not the modifiers, of the key event. *

* If you override this method, also override * paletteIndexFromModifiers. *

* The palette actually used is as follows: *

    *
  • No keys held: 0
  • *
  • Shift: 1
  • *
  • Ctrl (Command on macintosh): 2
  • *
  • Shift-Ctrl(Command): 3
  • *
  • Alt: 4
  • *
  • Alt-Shift: 5
  • *
  • Alt-Ctrl(Command): 6
  • *
  • Alt-Ctrl(Command)-Shift: 7
  • *
*/ protected int paletteIndexFromKeyCode(final KeyEvent ke) { final int keyCode = ke.getKeyCode(); int result = (keyCode == KeyEvent.VK_SHIFT) ? 1 : 0; if (MAC) { result += (keyCode == KeyEvent.VK_META) ? 2 : 0; } else { result += (keyCode == KeyEvent.VK_CONTROL) ? 2 : 0; } result += (keyCode == KeyEvent.VK_ALT) ? 4 : 0; return result; } /** * * Map the modifiers on an input event to an integer used to index into the * array of available palettes, used to change which palette is displayed on * the fly. Note this method uses the value of from the event's * getModifiersEx() method. *

* If you override this method, also override * paletteIndexFromKeyCode. *

* The palette actually used is as follows: *

    *
  • No keys held: 0
  • *
  • Shift: 1
  • *
  • Ctrl (Command on macintosh): 2
  • *
  • Shift-Ctrl(Command): 3
  • *
  • Alt: 4
  • *
  • Alt-Shift: 5
  • *
  • Alt-Ctrl(Command): 6
  • *
  • Alt-Ctrl(Command)-Shift: 7
  • *
*/ protected int paletteIndexFromModifiers(final InputEvent me) { final int mods = me.getModifiersEx(); int result = ((mods & InputEvent.SHIFT_DOWN_MASK) != 0) ? 1 : 0; result += ((mods & InputEvent.CTRL_DOWN_MASK) != 0) ? 2 : 0; result += ((mods & InputEvent.ALT_DOWN_MASK) != 0) ? 4 : 0; return result; } private JColorChooser jchooser = null; /** * Called when the color chooser is invoked from the keyboard (user pressed * space or enter). */ protected void keyboardInvoke(final ColorChooser colorChooser) { if (!colorChooser.isEnabled()) { Toolkit.getDefaultToolkit().beep(); return; } if (jchooser == null) { jchooser = new JColorChooser(); } else { return; } jchooser.setColor(colorChooser.getColor()); final Color nue = JColorChooser.showDialog(colorChooser, ColorChooser .getString("chooseColor"), // NOI18N colorChooser.getColor()); if (nue != null) { colorChooser.setColor(nue); fireColorChanged(colorChooser); } jchooser = null; } /** * Cause the passed color chooser to fire an action event to its listeners * notifying them that the color has changed. */ protected void fireColorChanged(final ColorChooser chooser) { chooser.fireActionPerformed(new ActionEvent(chooser, ActionEvent.ACTION_PERFORMED, "color")); // NOI18N } @Override public Dimension getMaximumSize(final JComponent c) { if (!c.isMaximumSizeSet()) { return getPreferredSize(c); } else { return super.getMaximumSize(c); } } @Override public Dimension getMinimumSize(final JComponent c) { if (!c.isMinimumSizeSet()) { return getPreferredSize(c); } else { return super.getMinimumSize(c); } } @Override public Dimension getPreferredSize(final JComponent c) { if (!c.isPreferredSizeSet()) { return new Dimension(24, 24); } else { return super.getPreferredSize(c); } } private class L extends MouseAdapter implements FocusListener, KeyListener { private int paletteIndex = 0; private transient Point nextFocusPopupLocation = null; int getPaletteIndex() { return paletteIndex; } void initPaletteIndex(final ColorChooser c, final MouseEvent me) { paletteIndex = paletteIndexFromModifiers(me); checkRange(c); } private void checkRange(final ColorChooser chooser) { final Palette[] p = chooser.getPalettes(); if (paletteIndex >= p.length) { paletteIndex = p.length - 1; } } private void updatePaletteIndex(final ColorChooser chooser, final int value, final boolean pressed) { final int oldIndex = paletteIndex; int result = paletteIndex; if (pressed) { result |= value; } else { result ^= value; } if (oldIndex != result && PalettePopup.getDefault().isPopupVisible(chooser)) { paletteIndex = result; checkRange(chooser); PalettePopup.getDefault().setPalette( chooser.getPalettes()[paletteIndex]); } } @Override public void mousePressed(final MouseEvent me) { // boolean rightclic=me.isPopupTrigger(); final boolean rightclic = (me.getModifiers() == Event.META_MASK); final ColorChooser chooser = (ColorChooser) me.getSource(); if (!chooser.isEnabled()) { Toolkit.getDefaultToolkit().beep(); return; } // Point p = me.getPoint(); final Point p = chooser.getLocationOnScreen(); p.translate(chooser.getWidth(), chooser.getHeight()); // SwingUtilities.convertPointToScreen(p, chooser); initPaletteIndex(chooser, me); if (rightclic) { PalettePopup.getDefault().setPalette(chooser.getPalettes()[7]); } else { PalettePopup.getDefault().setPalette( chooser.getPalettes()[getPaletteIndex()]); } if (chooser.hasFocus()) { PalettePopup.getDefault().showPopup(chooser, p); } else { nextFocusPopupLocation = p; chooser.requestFocus(); return; } me.consume(); nextFocusPopupLocation = null; } @Override public void mouseReleased(final MouseEvent me) { // if (me.isPopupTrigger()) return; final ColorChooser chooser = (ColorChooser) me.getSource(); if (!chooser.isEnabled()) { Toolkit.getDefaultToolkit().beep(); return; } nextFocusPopupLocation = null; if (PalettePopup.getDefault().isPopupVisible(chooser)) { PalettePopup.getDefault().hidePopup(chooser); final Color transientColor = chooser.transientColor(); if (transientColor != null) { RecentColors.getDefault().add(transientColor); final Color old = new Color(transientColor.getRed(), transientColor.getGreen(), transientColor.getBlue()); chooser.setTransientColor(null); chooser.setColor(old); fireColorChanged(chooser); me.consume(); } } } public void focusGained(final FocusEvent e) { final ColorChooser chooser = (ColorChooser) e.getSource(); if (nextFocusPopupLocation != null && chooser.isEnabled()) { PalettePopup.getDefault().showPopup(chooser, nextFocusPopupLocation); } nextFocusPopupLocation = null; chooser.repaint(); } public void focusLost(final FocusEvent e) { final ColorChooser chooser = (ColorChooser) e.getSource(); chooser.repaint(); } public void keyTyped(final KeyEvent e) { } public void keyPressed(final KeyEvent e) { processKeyEvent(e, true); } public void keyReleased(final KeyEvent e) { processKeyEvent(e, false); } protected void processKeyEvent(final KeyEvent ke, final boolean pressed) { final ColorChooser chooser = (ColorChooser) ke.getSource(); updatePaletteIndex(chooser, paletteIndexFromKeyCode(ke), pressed); if (ke.getKeyCode() == KeyEvent.VK_ALT || ke.getKeyCode() == KeyEvent.VK_CONTROL || ke.getKeyCode() == KeyEvent.VK_SHIFT) { ke.consume(); } else if ((ke.getKeyCode() == KeyEvent.VK_SPACE || ke.getKeyCode() == KeyEvent.VK_ENTER) && ke.getID() == KeyEvent.KEY_RELEASED) { keyboardInvoke(chooser); } } } } ./src/net/java/dev/colorchooser/Palette.java0000644000175000017500000001103311302722131017755 0ustar yvesyves/*DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2006-2008. Tim Boudreau. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common * Development and Distribution License("CDDL") (collectively, the * "License"). You may not use this file except in compliance with the * License. You can obtain a copy of the License at * http://www.netbeans.org/cddl-gplv2.html. See the License for the * specific language governing permissions and limitations under the * License. When distributing the software, include this License Header * Notice in each file and include the License file at * nbbuild/licenses/CDDL-GPL-2-CP. This particular file is designated * as subject to the "Classpath" exception as provided * in the GPL Version 2 section of the License file that * accompanied this code. */ package net.java.dev.colorchooser; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; /** * Model for a palette that can be painted, and from which colors may be * selected. An array of palettes to use may be supplied to a ColorChooser via * the setPalettes method. * * @author Tim Boudreau */ public abstract class Palette { /** * Returns the color at the specified point, or null if the point is beyond * the bounds of the palette or in an area that does not indicate a color * * @param x * - an horizontal coordinate in the coordinate space of the * palette * @param y * - a vertical coordinate in the coordinate space of the palette * @return - a color or null */ public abstract Color getColorAt(int x, int y); /** * Returns a string description of the color at the point. May be a name or * a set of RGB values, but should not be longer than 30 characters. Returns * null if the position is outside the bounds of the palette or has no * description associated with it. Generally getNameAt() should return null * from the same coordinates that getColorAt() would. * * @param x * an horizontal coordinate in the coordinate space of the * palette * @param y * a vertical coordinate in the coordinate space of the palette * @return a string describing the color at this coordinate or null * @see #getColorAt */ public abstract String getNameAt(int x, int y); /** * Paint this palette to a graphics context. * * @param g * - a graphics context to paint into */ public abstract void paintTo(Graphics g); /** * Get the on-screen size of this palette * * @return the size of this palette - corresponding to the screen space * required to display it and defining the coordinate space of this * palette. */ public abstract Dimension getSize(); /** * Get a localized name for this palette or null if a display name is not * warranted * * @return the display name */ public abstract void setSize(int w, int h); public abstract String getDisplayName(); /** * Get the default set of 8 palettes used by the color chooser. If * continuousFirst is true, the first four will be continuous palettes and * the second four swatches with named colors, system colors, etc. */ public static final Palette[] getDefaultPalettes( final boolean continuousFirst) { Palette[] result = new Palette[8]; final Palette[] first = continuousFirst ? ContinuousPalette .createDefaultPalettes() : PredefinedPalette .createDefaultPalettes(); final Palette[] second = !continuousFirst ? ContinuousPalette .createDefaultPalettes() : PredefinedPalette .createDefaultPalettes(); result = new Palette[second.length + first.length]; System.arraycopy(first, 0, result, 0, 4); System.arraycopy(second, 0, result, 4, 4); return result; } public static final Palette createContinuousPalette(final String name, final Dimension size, final float saturation) { if (size.width <= 0) throw new IllegalArgumentException("width less than or equal 0"); if (size.height <= 0) throw new IllegalArgumentException("height less than or equal 0"); return new ContinuousPalette(name, size.width, size.height, saturation); } public static final Palette createPredefinedPalette(final String name, final Color[] colors, final String[] names) { final NamedColor[] cc = new NamedColor[colors.length]; for (int i = 0; i < colors.length; i++) { cc[i] = NamedColor.create(colors[i], names[i]); } return new PredefinedPalette(name, cc); } } ./src/net/java/dev/colorchooser/ColorChooser.java0000644000175000017500000003310111344207345020773 0ustar yvesyves/*DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2006-2008. Tim Boudreau. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common * Development and Distribution License("CDDL") (collectively, the * "License"). You may not use this file except in compliance with the * License. You can obtain a copy of the License at * http://www.netbeans.org/cddl-gplv2.html. See the License for the * specific language governing permissions and limitations under the * License. When distributing the software, include this License Header * Notice in each file and include the License file at * nbbuild/licenses/CDDL-GPL-2-CP. This particular file is designated * as subject to the "Classpath" exception as provided * in the GPL Version 2 section of the License file that * accompanied this code. */ package net.java.dev.colorchooser; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import java.util.MissingResourceException; import java.util.ResourceBundle; import javax.swing.JComponent; import javax.swing.UIManager; /** * A color chooser which can pop up a pluggable set of palettes. The palette * displayed is controlled by combinations of the alt and shift and ctrl * (command on macintosh) keys. Will fire an action event when a color is * selected. For accessibility, it will show a standard Swing color chooser if * focused and either space or enter are pressed. *

* By default, supports two sets of palettes - a set of 4 continuous palettes * and a set of 4 tiled, fixed palettes (the SVG/X palette, Swing/AWT palettes * and a history of recently selected colors). Whether the tiled or continuous * palettes are given precedence depends on the property * continuousPalettePreferred. *

* Palettes are pluggable, so it is possible to provide your own * implementation(s) of Palette to be displayed when the component is clicked. *

* Typical usage: Attach an ActionListener; it will be notified when the user * selects a color. *

* To catch colors as the user selects, listen for PROP_TRANSIENT_COLOR. The * component will fire changes in PROP_COLOR along with actin events, when the * user selects a color. PROP_COLOR changes are fired both in response to use * actions and programmatic changes to the color property. *

* * @author Tim Boudreau */ public class ColorChooser extends JComponent { /** * */ private static final long serialVersionUID=1L; /** * UI Class ID under which the UI delegate class is stored in UIManager (see * UIManager.getUI()). The string value is * "nbColorChooserUI" */ public static final String UI_CLASS_ID="nbColorChooserUI"; // NOI18N private transient Palette[] palettes=null; private Color color=Color.BLUE; private transient Color transientColor=null; private transient ArrayList actionListenerList; /** * Property name for property fired when the color property changes. */ public static final String PROP_COLOR="color"; // NOI18N /** * Property name for property fired when the transient color property (the * color while the user is selecting) changes. */ public static final String PROP_TRANSIENT_COLOR="transientColor"; // NOI18N /** * Fired when the value of the continuous palette changes. */ public static final String PROP_CONTINUOUS_PALETTE="continuousPalette"; // NOI18N /** * Property indicating the visibility of the popup palette. Code that tracks * PROP_TRANSIENT_COLOR can listen for this property with a value of false * to do a final update using the value from getColor() to ensure the set * color is in sync with the actual value of the color picker - in the case * that the mouse was released off the palette, the color may be restored to * its previous value. */ public static final String PROP_PICKER_VISIBLE="pickerVisible"; private boolean continuousPalette=true; /** Create a color chooser */ public ColorChooser() { this((Color) null); } /** * Create a color chooser initialized to the passed color, defaulted to show * a continuous palette on initial click. * * @param initialColor */ public ColorChooser(final Color initialColor) { this(null, initialColor); } /** * Create a color chooser with the passed array of 8 palettes and * initialized with the passed color. * * @param palettes * @param initialColor */ public ColorChooser(final Palette[] palettes, final Color initialColor) { setPalettes(palettes); if (initialColor!=null) { color=initialColor; } updateUI(); } /** * Create a color chooser with the passed array of 8 or fewer palettes. * * @param palettes */ public ColorChooser(final Palette[] palettes) { this(palettes, null); } /** * Overridden to return UI_CLASS_ID * * @return */ public String getUIClassId() { return UI_CLASS_ID; } /** * */ @Override public void updateUI() { if (UIManager.get(UI_CLASS_ID)!=null) { setUI((ColorChooserUI) UIManager.getUI(this)); } else { setUI(DefaultColorChooserUI.createUI(this)); } } /** * Get the color currently represented by this component. If the user is in * the process of selecting (the palette or color chooser is open), this * will be the last known value, until such time as the user selects a color * and an action event is fired. * * @return */ public Color getColor() { return color; } /** * Set the color this color chooser currently represents. Note this will * fire a change in PROP_COLOR but will not trigger an action * event to be fired. * * @param c */ public void setColor(Color c) { if (c.getClass()!=Color.class) { c=new Color(c.getRed(), c.getGreen(), c.getBlue()); } if ((color!=null&&!color.equals(c))||(color==null&&c!=null)) { final Color old=color; color=c; repaint(); firePropertyChange(PROP_COLOR, old, c); // NOI18N } } void setTransientColor(final Color c) { final Color old=transientColor; transientColor=c; if ((c!=null&&!color.equals(old))||(old==null&&c!=null)) { firePropertyChange(PROP_TRANSIENT_COLOR, old, getTransientColor()); repaint(); } else if (c==null) { firePropertyChange(PROP_TRANSIENT_COLOR, old, getColor()); repaint(); } } /** * Returns the currently displayed color which may not be the same as the * value of getColor() but is the color currently displayed as * the user moves the mouse to select the color. * * @see #PROP_TRANSIENT_COLOR * @see #setTransientColor * @return the color currently being displayed (not necessarily the one * returned by getColor()). */ public Color getTransientColor() { return transientColor==null?null:new Color(transientColor.getRed(), transientColor.getGreen(), transientColor.getBlue()); } /** * Get a string representation of a color, if possible returning a named, * localized constant if the passed color matches one of the SVG constants; * else returning a String representing RGB values. * * @param c * @return */ public static String colorToString(final Color c) { RecentColors.getDefault(); final NamedColor named=RecentColors.findNamedColor(c); if (named==null) { final StringBuffer sb=new StringBuffer(); sb.append(c.getRed()); sb.append(','); sb.append(c.getGreen()); sb.append(','); sb.append(c.getBlue()); return sb.toString(); } else { return named.getDisplayName(); } } Color transientColor() { return transientColor; } /** * Returns the SVG or Swing constant name for the passed color, if the color * exactly matches a color in the Swing UIManager constants or the * SVG/X-Windows constants. * * @param color * @return */ public static String getColorName(final Color color) { return PredefinedPalette.getColorName(color); } /** * Set whether the initial palette shown when clicked with no keys pressed * is one showing a continuous (rainbow) palette or a set of tiles with * different colors. * * @param val * The value, true to show a continuous palette by default */ public void setContinuousPalettePreferred(final boolean val) { if (val!=continuousPalette) { continuousPalette=val; setPalettes(null); firePropertyChange(PROP_CONTINUOUS_PALETTE, !val, val); } } /** * Determine whether the initial palette shown when clicked with no keys * pressed is one showing a continuous (rainbow) palette or a set of tiles * with different colors. The default is TRUE. * * @return whether or not to default to a continuous palette */ public boolean isContinuousPalettePreferred() { return continuousPalette; } /** * Set the Palette objects this color chooser will display. Can be null to * reset to defaults. The passed array length must less than or equal to 8. *

* Which palette is shown to the user depends on what if any control keys * are being held when the user initially clicks or presses while dragging * the mouse to select. The mapping between key combinations and palette * entries is: *

    *
  • No keys held: 0
  • *
  • Shift: 1
  • *
  • Ctrl (Command on macintosh): 2
  • *
  • Shift-Ctrl(Command): 3
  • *
  • Alt: 4
  • *
  • Alt-Shift: 5
  • *
  • Alt-Ctrl(Command): 6
  • *
  • Alt-Ctrl(Command)-Shift: 7
  • *
* * @param palettes */ public void setPalettes(Palette[] palettes) { if (palettes!=null&&palettes.length>8) { throw new IllegalArgumentException("Must be <= 8 palettes"); // NOI18N } final Palette[] old=this.palettes; if (palettes==null) { palettes=Palette.getDefaultPalettes(continuousPalette); } this.palettes=palettes; firePropertyChange("palettes", old, palettes.clone()); // NOI18N } /** * Get the array of palettes that will be displayed when the user clicks * this color chooser component and holds down various keys. * * @return */ public Palette[] getPalettes() { final Palette[] result=new Palette[palettes.length]; System.arraycopy(palettes, 0, result, 0, palettes.length); return result; } static String getString(final String key) { if (key==null) { return null; } final String BUNDLE="net.java.dev.colorchooser.Bundle"; // NOI18N try { return ResourceBundle.getBundle(BUNDLE).getString(key); } catch (final MissingResourceException mre) { // mre.printStackTrace(); return key; } } // ****************** Action listener support ************************** /** * Registers ActionListener to receive events. Action events are fired when * the user selects a color, either by click-drag-releasing the mouse over * the popup palette, or by pressing space or enter and selecting a color * from the popup JColorChooser. * * @param listener * The listener to register. */ public synchronized void addActionListener( final java.awt.event.ActionListener listener) { if (actionListenerList==null) { actionListenerList=new ArrayList(); } actionListenerList.add(listener); } /** * Removes ActionListener from the list of listeners. Action events are * fired when the user selects a color, either by click-drag-releasing the * mouse over the popup palette, or by pressing space or enter and selecting * a color from the popup JColorChooser (note they are * not fired if you call setColor()). * * @param listener * The listener to remove. */ public synchronized void removeActionListener( final java.awt.event.ActionListener listener) { if (actionListenerList!=null) { actionListenerList.remove(listener); } } /** * Notifies all registered listeners about the event. * * @param event * The event to be fired */ void fireActionPerformed(final ActionEvent event) { List list; synchronized (this) { if (actionListenerList==null) { return; } list=(List) ((ArrayList) actionListenerList).clone(); } for (int i=0; iUIManager.getColor("control"). * Useful when implementing a property editor. * * @return a string that could be pasted into Java code to instantiate a * color with these rgb values */ public String getInstantiationCode() { return toString(); } static NamedColor create(final Color c, final String name) { return new DefaultNamedColor(c, name); } private static final class DefaultNamedColor extends NamedColor { /** * */ private static final long serialVersionUID = 1L; private final String name; public DefaultNamedColor(final Color c, final String name) { super(name, c.getRed(), c.getGreen(), c.getBlue()); this.name = name; } @Override public String getDisplayName() { return name; } @Override public String getName() { return name; } public int compareTo(final Object o) { if (o instanceof NamedColor) { final NamedColor nc = (NamedColor) o; final String nm = nc.getDisplayName(); if (nm == null && getDisplayName() == null) { return 0; } else { return nm != null && getDisplayName() != null ? getDisplayName() .compareTo(nm) : -1; } } else { return -1; } } } } ./src/net/java/dev/colorchooser/RecentColors.java0000644000175000017500000002465011343141074021000 0ustar yvesyves/*DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2006-2008. Tim Boudreau. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common * Development and Distribution License("CDDL") (collectively, the * "License"). You may not use this file except in compliance with the * License. You can obtain a copy of the License at * http://www.netbeans.org/cddl-gplv2.html. See the License for the * specific language governing permissions and limitations under the * License. When distributing the software, include this License Header * Notice in each file and include the License file at * nbbuild/licenses/CDDL-GPL-2-CP. This particular file is designated * as subject to the "Classpath" exception as provided * in the GPL Version 2 section of the License file that * accompanied this code. */ package net.java.dev.colorchooser; import java.awt.Color; import java.awt.Dimension; import java.security.AccessControlException; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.MissingResourceException; import java.util.ResourceBundle; import java.util.Stack; import java.util.StringTokenizer; import java.util.prefs.Preferences; /** * Palette implementation that can have recent colors added to it. * * @author Tim Boudreau */ class RecentColors extends Palette { private Palette palette; private boolean changed=true; /** Creates a new instance of RecentColors */ private RecentColors() { } private Palette getWrapped() { if (changed||palette==null) { palette=createPalette(); changed=false; } return palette; } @Override public java.awt.Color getColorAt(final int x, final int y) { return getWrapped().getColorAt(x, y); } @Override public String getDisplayName() { try { return ResourceBundle.getBundle( "org.netbeans.swing.colorchooser.Bundle").getString( "recent"); // NOI18N } catch (final MissingResourceException mre) { // mre.printStackTrace(); return "Recent colors"; } } @Override public Dimension getSize() { final Dimension result=((PredefinedPalette) getWrapped()).calcSize(); return result; } @Override public void paintTo(final java.awt.Graphics g) { getWrapped().paintTo(g); } @Override public String getNameAt(final int x, final int y) { return getWrapped().getNameAt(x, y); } Stack stack=new Stack(); void add(final Color c) { if (c instanceof RecentColor) { return; } if (stack.indexOf(c)==-1) { final String name=c instanceof PredefinedPalette.BasicNamedColor?((PredefinedPalette.BasicNamedColor) c).getDisplayName() :null; final String toString=c instanceof PredefinedPalette.BasicNamedColor?((PredefinedPalette.BasicNamedColor) c).toString() :null; final Color col=new RecentColor(name, c.getRed(), c.getGreen(), c.getBlue(), toString); stack.push(col); changed=true; palette=null; if (c instanceof NamedColor) { addToNameCache((NamedColor) c); } saveToPrefs(); } } public static final String INNER_DELIMITER="^$"; public static final String OUTER_DELIMITER="!*"; public void saveToPrefs() { final Preferences prefs=getPreferences(); if (prefs==null) { return; } int count=0; final StringBuffer sb=new StringBuffer(); final Stack stack=new Stack(); stack.addAll(this.stack); while (!stack.isEmpty()&&count<64) { count++; final Color c=(Color) stack.pop(); if (c instanceof DummyColor) { break; } String name="null"; if (c instanceof PredefinedPalette.BasicNamedColor) { final PredefinedPalette.BasicNamedColor nc=(PredefinedPalette.BasicNamedColor) c; name=nc.getDisplayName(); } if (name=="null") { // NOI18N name=null; } sb.append(name); sb.append(INNER_DELIMITER); sb.append(c.getRed()); sb.append(INNER_DELIMITER); sb.append(c.getGreen()); sb.append(INNER_DELIMITER); sb.append(c.getBlue()); sb.append(INNER_DELIMITER); if (c instanceof PredefinedPalette.BasicNamedColor) { sb.append(c.toString()); } else { sb.append('x'); } sb.append(OUTER_DELIMITER); // NOI18N } prefs.put("recentColors", sb.toString()); // NOI18N } static Map namedMap=null; static NamedColor findNamedColor(final Color color) { if (namedMap==null) { return null; } final NamedColor result=(NamedColor) namedMap.get(new Integer(color.getRGB())); return result; } static void addToNameCache(final NamedColor color) { if (namedMap==null) { namedMap=new HashMap(40); } namedMap.put(new Integer(color.getRGB()), color); } private Preferences getPreferences() { try { final Preferences base=Preferences.userNodeForPackage(getClass()); return base.node("1.5"); // NOI18N } catch (final Exception ace) { return null; } } public void loadFromPrefs() { final Preferences prefs=getPreferences(); if (prefs==null) { return; } final String s=prefs.get("recentColors", null); // NOI18N stack=new Stack(); final Color[] col=new Color[64]; Arrays.fill(col, new DummyColor()); int count=63; try { if (s!=null) { // a weird but highly unlikely delimiter final StringTokenizer tok=new StringTokenizer(s, OUTER_DELIMITER); // NOI18N while (tok.hasMoreTokens()&&count>=0) { final String curr=tok.nextToken(); // another weird but highly unlikely delimiter final StringTokenizer tk2=new StringTokenizer(curr, INNER_DELIMITER); // NOI18N while (tk2.hasMoreTokens()) { String name=tk2.nextToken(); if ("null".equals(name)) { name=null; } final int r=Integer.parseInt(tk2.nextToken()); final int g=Integer.parseInt(tk2.nextToken()); final int b=Integer.parseInt(tk2.nextToken()); final String toString=tk2.nextToken(); if ("x".equals(toString)) { // NOI18N col[count]=new RecentColor(name, r, g, b); } else { col[count]=new RecentColor(name, r, g, b, toString); } addToNameCache((NamedColor) col[count]); } count--; } } stack.addAll(Arrays.asList(col)); } catch (final Exception e) { System.err.println("Error loading color preferences"); // NOI18N e.printStackTrace(); } } private Palette createPalette() { final PredefinedPalette.BasicNamedColor[] nc=(PredefinedPalette.BasicNamedColor[]) stack.toArray(new PredefinedPalette.BasicNamedColor[0]); return new PredefinedPalette("", nc); // NOI18N } private class RecentColor extends PredefinedPalette.BasicNamedColor { /** * */ private static final long serialVersionUID=1L; String displayName; String toString=null; public RecentColor(final String name, final int r, final int g, final int b) { super(name, r, g, b); displayName=name; } public RecentColor(final String name, final int r, final int g, final int b, final String toString) { this(name, r, g, b); displayName=name; this.toString=toString; } @Override public int compareTo(final Object o) { return stack.indexOf(o)-stack.indexOf(this); } @Override public String getDisplayName() { return displayName; } @Override public boolean equals(final Object o) { if (o instanceof Color) { final Color c=(Color) o; return c.getRGB()==getRGB(); } return false; } @Override public int hashCode() { return getRGB(); } @Override public String toString() { if (toString!=null) { return toString; } else { return "new java.awt.Color("+getRed()+","+getGreen() +","+getBlue()+")"; // NOI18N } } } private static RecentColors defaultInstance=null; public static final RecentColors getDefault() { if (defaultInstance==null) { defaultInstance=new RecentColors(); ((RecentColors) defaultInstance).loadFromPrefs(); } return defaultInstance; } /** * A stand in for colors to fill up the array of recent colors until we * really have something to put there. */ private class DummyColor extends RecentColor { /** * */ private static final long serialVersionUID=1L; public DummyColor() { super(null, 0, 0, 0); } @Override public String getDisplayName() { return null; } // Ensure that no color will match this, so black swing colors can // be put into the recent colors array @Override public boolean equals(final Object o) { return o==this; } @Override public int hashCode() { return System.identityHashCode(this); } } @Override public void setSize(final int w, final int h) { } } ./src/net/java/dev/colorchooser/chooserIcon32.gif0000644000175000017500000000106011302722136020627 0ustar yvesyvesGIF89a dls,)63%zòeЀ[V@ ȈumNpC=)uJoŽϾʺĵ۠Hӊ3>т* "&'*,~ַ!/, pH,Ȥr d2YI,hz0WcT&G (1 - grayStripSize); if (verticalHue) { hue = ((float) y) / img.getHeight(); // Hue value from 0-1 based on // y position brightness = ((float) x) / img.getWidth(); // base brightness value // 0-1 based on x // location } else { if (inGrayStrip) return grayValueFromX(x); hue = 1 - (((float) x) / img.getWidth()); // subtract from 1 so // lightest color are at // top brightness = 1 - ((float) y) / img.getHeight(); } brightness = brightness * 2; // brightness increases to the halfway // point along the brightening axis. if (brightness > 1) { // beyond that point, saturation goes down so // color moves toward white workingSaturation = saturation - ((brightness - 1) * saturation); // if // we're // past // the // halfway // point, brightness = 1; // we're decrementing saturation } else { workingSaturation = saturation; } final java.awt.Color newColor = java.awt.Color.getHSBColor(hue, workingSaturation, brightness); return newColor; } public java.awt.Color colorFromPoint(final Point p) { final int x = new Double(p.getX()).intValue(); final int y = new Double(p.getY()).intValue(); return getColorAt(x, y); } /** * Called by InitImage() to draw the grayscale strip at the bottom of * horizontal-hue spectrum images. Returns a grayscale value based on the * width of the image, when called with a horizontal coordinate. * * @param x * The x coordinate for which a grayscale value is desired * @return The grayscale value (expressed as an RGB integer value) */ protected java.awt.Color grayValueFromX(final int x) { final java.awt.Color newColor = java.awt.Color.getHSBColor(0, 0, ((float) x) / img.getWidth()); return newColor; } /** * Getter for property saturation. Saturation defines the base saturation * for all colors in the image. Setting it to less that 1 causes the colors * to be more desaturated in the resulting bufferedImage. * * @return Returns the maximum saturation value for any colors to be * generated in the bufferedImage. */ public float getSaturation() { return saturation; } /** * Sets the maximum saturation for any colors in the image. Constrained from * 0-1. Changing this property will cause the image to be regenerated the * next time it is needed, or the next time initializeImage() is called. * * @param saturation * New value of property saturation. */ public void setSaturation(final float saturation) { if (this.saturation != saturation) { this.saturation = saturation; doChange(); } } /** * Getter for property verticalHue. * * @return Value of property verticalHue. */ public boolean isVerticalHue() { return verticalHue; } /** * Setter for property verticalHue. * * @param verticalHue * New value of property verticalHue. */ public void setVerticalHue(final boolean verticalHue) { if (this.verticalHue != verticalHue) { this.verticalHue = verticalHue; doChange(); } } /** * Called when a parameter is changed that requires that the spectrum image * be rebuilt, so that the next time the image is asked for, it will be. */ protected void doChange() { initialized = false; } /** * Setter for the grayStripSize property, which determines the percentage * (expressed as a float between 0 and 1) of the image height taken up by * the grayscale strip. */ public void setGrayStripSize(final float grayStripSize) { float workingGrayStripSize = grayStripSize; if (workingGrayStripSize > 1) workingGrayStripSize = 1; // handle screwy > 1 values just in case if (workingGrayStripSize != grayStripSize) { this.grayStripSize = grayStripSize; doChange(); } } /** * Getter for the GrayStripSize property, which returns the percentage * (expressed as a float between 0 and 1) of the height of the image taken * up by the gray scale strip for selecting non-colored pixels. */ public float getGrayStripSize() { return this.grayStripSize; } /** * Returns the size of the image as a java.awt.Dimension object. */ @Override public Dimension getSize() { return new Dimension(img.getWidth(), img.getHeight()); } @Override public String getNameAt(final int x, final int y) { final Color c = getColorAt(x, y); final StringBuffer sb = new StringBuffer(); sb.append(c.getRed()); sb.append(','); // NOI18N sb.append(c.getGreen()); sb.append(','); // NOI18N sb.append(c.getBlue()); return sb.toString(); } private static Palette[] defaultPalettes = null; /** Create a default set of continuous palettes to use */ public static Palette[] createDefaultPalettes() { if (defaultPalettes == null) { defaultPalettes = new Palette[] { new ContinuousPalette("satLarge", LARGE_SPEC_WIDTH, LARGE_SPEC_HEIGHT, 1f, false), // NOI18N new ContinuousPalette("unsatLarge", LARGE_SPEC_WIDTH, LARGE_SPEC_HEIGHT, 0.4f, false), // NOI18N new ContinuousPalette("satLargeHoriz", LARGE_SPEC_WIDTH, LARGE_SPEC_HEIGHT, 1f, true), // NOI18N new ContinuousPalette("unsatLargeHoriz", LARGE_SPEC_WIDTH, LARGE_SPEC_HEIGHT, 0.4f, true) // NOI18N }; } return defaultPalettes; } @Override public String getDisplayName() { return ColorChooser.getString(name); } @Override public void setSize(final int w, final int h) { } } ./src/zirkel.jardesc0000770000175000017500000001035510427606010013375 0ustar yvesyves ./src/com/0000755000175000017500000000000011132365005011312 5ustar yvesyves./src/com/CVS/0000755000175000017500000000000011132365005011745 5ustar yvesyves./src/com/CVS/Repository0000644000175000017500000000001511132365005014043 0ustar yvesyvescarmetal/com ./src/com/CVS/Entries0000644000175000017500000000001411132365005013274 0ustar yvesyvesD/apple//// ./src/com/CVS/Root0000644000175000017500000000007511132365005012615 0ustar yvesyves:ext:erichake@carmetal.cvs.sourceforge.net:/cvsroot/carmetal ./src/com/apple/0000755000175000017500000000000011132365005012413 5ustar yvesyves./src/com/apple/eawt/0000755000175000017500000000000011132365006013354 5ustar yvesyves./src/com/apple/eawt/ApplicationAdapter.java0000644000175000017500000000267111240237775020004 0ustar yvesyves/* * ApplicationAdapter.java * allusionsApp * * Created by Matthieu Cormier on Fri Jun 20 2003. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package com.apple.eawt; // This is a stub interface for non Mac OS X java 1.4 environments public class ApplicationAdapter implements ApplicationListener { public ApplicationAdapter() { } public void handleAbout(final ApplicationEvent event) { } public void handleOpenApplication(final ApplicationEvent event) { } public void handleOpenFile(final ApplicationEvent event) { } public void handlePreferences(final ApplicationEvent event) { } public void handlePrintFile(final ApplicationEvent event) { } public void handleQuit(final ApplicationEvent event) { } public void handleReOpenApplication(ApplicationEvent event) { } } ./src/com/apple/eawt/CocoaComponent.java0000644000175000017500000000263411132723017017133 0ustar yvesyves/* * CocoaComponent.java * allusionsApp * * Created by Matthieu Cormier on Fri Jun 20 2003. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package com.apple.eawt; // This is a stub interface for non Mac OS X java 1.4 environments public abstract class CocoaComponent extends java.awt.Canvas { /** * */ private static final long serialVersionUID = 1L; public CocoaComponent() { } public abstract int createNSView(); @Override public abstract java.awt.Dimension getMaximumSize(); /** * * @return */ @Override public abstract java.awt.Dimension getMinimumSize(); /** * * @return */ @Override public abstract java.awt.Dimension getPreferredSize(); public void sendMessage(final int messageID, final java.lang.Object message) { } } ./src/com/apple/eawt/ApplicationBeanInfo.java0000644000175000017500000000216411132706173020073 0ustar yvesyves/* * ApplicationBeanInfo.java * allusionsApp * * Created by Matthieu Cormier on Fri Jun 20 2003. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package com.apple.eawt; // This is a stub interface for non Mac OS X java 1.4 environments public class ApplicationBeanInfo extends java.beans.SimpleBeanInfo { public ApplicationBeanInfo() { } /** * * @param iconKind * @return */ @Override public java.awt.Image getIcon(final int iconKind) { return null; } } ./src/com/apple/eawt/CVS/0000755000175000017500000000000011240240273014005 5ustar yvesyves./src/com/apple/eawt/CVS/Repository0000644000175000017500000000003011132365006016102 0ustar yvesyvescarmetal/com/apple/eawt ./src/com/apple/eawt/CVS/Entries0000644000175000017500000000050711240240273015343 0ustar yvesyvesD /Application.java/1.2/Mon Jan 12 18:31:23 2009// /ApplicationAdapter.java/1.3/Tue Aug 11 09:55:09 2009// /ApplicationBeanInfo.java/1.3/Mon Jan 12 18:31:23 2009// /ApplicationEvent.java/1.2/Mon Jan 12 18:31:23 2009// /ApplicationListener.java/1.2/Mon Jan 12 18:31:23 2009// /CocoaComponent.java/1.4/Mon Jan 12 20:20:31 2009// ./src/com/apple/eawt/CVS/RevisionCache/0000755000175000017500000000000011240240275016531 5ustar yvesyves./src/com/apple/eawt/CVS/RevisionCache/ApplicationAdapter.java#1.10000644000175000017500000000247311132435723023435 0ustar yvesyves/* * ApplicationAdapter.java * allusionsApp * * Created by Matthieu Cormier on Fri Jun 20 2003. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package com.apple.eawt; // This is a stub interface for non Mac OS X java 1.4 environments public class ApplicationAdapter implements ApplicationListener { public ApplicationAdapter() {} public void handleAbout(ApplicationEvent event){} public void handleOpenApplication(ApplicationEvent event){} public void handleOpenFile(ApplicationEvent event){} public void handlePreferences(ApplicationEvent event){} public void handlePrintFile(ApplicationEvent event){} public void handleQuit(ApplicationEvent event){} } ./src/com/apple/eawt/CVS/RevisionCache/CocoaComponent.java#1.10000644000175000017500000000241611132436000022562 0ustar yvesyves/* * CocoaComponent.java * allusionsApp * * Created by Matthieu Cormier on Fri Jun 20 2003. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package com.apple.eawt; // This is a stub interface for non Mac OS X java 1.4 environments public abstract class CocoaComponent extends java.awt.Canvas { public CocoaComponent(){} public abstract int createNSView(); public abstract java.awt.Dimension getMaximumSize(); public abstract java.awt.Dimension getMinimumSize(); public abstract java.awt.Dimension getPreferredSize(); public void sendMessage(int messageID, java.lang.Object message) {} } ./src/com/apple/eawt/CVS/RevisionCache/Application.java#1.10000644000175000017500000000257611132435721022136 0ustar yvesyves/* * Application.java * allusionsApp * * Created by Matthieu Cormier on Fri Jun 20 2003. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package com.apple.eawt; // This is a stub interface for non Mac OS X java 1.4 environments public class Application { public Application() {} public void addApplicationListener(ApplicationListener listenToMe) { //I don't feel like listening today!! } public boolean getEnabledPreferencesMenu() { return false;} public void removeApplicationListener(ApplicationListener dontListenToMe) { //don't worry I haven't been } public void setEneablePreferencesMenu(boolean enable) { //yeah, like, what-ever! } public static java.awt.Point getMouseLocationOnScreen() { return null; } } ./src/com/apple/eawt/CVS/RevisionCache/ApplicationAdapter.java#1.30000644000175000017500000000267111240240275023433 0ustar yvesyves/* * ApplicationAdapter.java * allusionsApp * * Created by Matthieu Cormier on Fri Jun 20 2003. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package com.apple.eawt; // This is a stub interface for non Mac OS X java 1.4 environments public class ApplicationAdapter implements ApplicationListener { public ApplicationAdapter() { } public void handleAbout(final ApplicationEvent event) { } public void handleOpenApplication(final ApplicationEvent event) { } public void handleOpenFile(final ApplicationEvent event) { } public void handlePreferences(final ApplicationEvent event) { } public void handlePrintFile(final ApplicationEvent event) { } public void handleQuit(final ApplicationEvent event) { } public void handleReOpenApplication(ApplicationEvent event) { } } ./src/com/apple/eawt/CVS/RevisionCache/ApplicationBeanInfo.java#1.10000644000175000017500000000206711132435725023537 0ustar yvesyves/* * ApplicationBeanInfo.java * allusionsApp * * Created by Matthieu Cormier on Fri Jun 20 2003. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package com.apple.eawt; // This is a stub interface for non Mac OS X java 1.4 environments public class ApplicationBeanInfo extends java.beans.SimpleBeanInfo { public ApplicationBeanInfo() {} public java.awt.Image getIcon(int iconKind) { return null; } } ./src/com/apple/eawt/CVS/RevisionCache/ApplicationAdapter.java#1.20000644000175000017500000000256011240237703023431 0ustar yvesyves/* * ApplicationAdapter.java * allusionsApp * * Created by Matthieu Cormier on Fri Jun 20 2003. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package com.apple.eawt; // This is a stub interface for non Mac OS X java 1.4 environments public class ApplicationAdapter implements ApplicationListener { public ApplicationAdapter() { } public void handleAbout(final ApplicationEvent event) { } public void handleOpenApplication(final ApplicationEvent event) { } public void handleOpenFile(final ApplicationEvent event) { } public void handlePreferences(final ApplicationEvent event) { } public void handlePrintFile(final ApplicationEvent event) { } public void handleQuit(final ApplicationEvent event) { } } ./src/com/apple/eawt/CVS/RevisionCache/ApplicationEvent.java#1.10000644000175000017500000000207111132435766023137 0ustar yvesyves/* * ApplicationEvent.java * allusionsApp * * Created by Matthieu Cormier on Fri Jun 20 2003. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package com.apple.eawt; // This is a stub interface for non Mac OS X java 1.4 environments public class ApplicationEvent { public java.lang.String getFilename() { return null; } public boolean isHandled() { return false; } public void setHandled(boolean state) {} } ./src/com/apple/eawt/CVS/RevisionCache/ApplicationListener.java#1.10000644000175000017500000000242411132435774023644 0ustar yvesyves/* * ApplicationListener.java * allusionsApp * * Created by Matthieu Cormier on Fri Jun 20 2003. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package com.apple.eawt; // This is a stub interface for non Mac OS X java 1.4 environments public interface ApplicationListener extends java.util.EventListener { public void handleAbout(ApplicationEvent event); public void handleOpenApplication(ApplicationEvent event); public void handleOpenFile(ApplicationEvent event); public void handlePreferences(ApplicationEvent event); public void handlePrintFile(ApplicationEvent event); public void handleQuit(ApplicationEvent event); } ./src/com/apple/eawt/CVS/Root0000644000175000017500000000007511132365006014657 0ustar yvesyves:ext:erichake@carmetal.cvs.sourceforge.net:/cvsroot/carmetal ./src/com/apple/eawt/ApplicationEvent.java0000644000175000017500000000210711132706173017470 0ustar yvesyves/* * ApplicationEvent.java * allusionsApp * * Created by Matthieu Cormier on Fri Jun 20 2003. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package com.apple.eawt; // This is a stub interface for non Mac OS X java 1.4 environments public class ApplicationEvent { public java.lang.String getFilename() { return null; } public boolean isHandled() { return false; } public void setHandled(final boolean state) { } } ./src/com/apple/eawt/Application.java0000644000175000017500000000263311132706173016472 0ustar yvesyves/* * Application.java * allusionsApp * * Created by Matthieu Cormier on Fri Jun 20 2003. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package com.apple.eawt; // This is a stub interface for non Mac OS X java 1.4 environments public class Application { public Application() { } public void addApplicationListener(final ApplicationListener listenToMe) { // I don't feel like listening today!! } public boolean getEnabledPreferencesMenu() { return false; } public void removeApplicationListener( final ApplicationListener dontListenToMe) { // don't worry I haven't been } public void setEneablePreferencesMenu(final boolean enable) { // yeah, like, what-ever! } public static java.awt.Point getMouseLocationOnScreen() { return null; } } ./src/com/apple/eawt/ApplicationListener.java0000644000175000017500000000243011132706173020173 0ustar yvesyves/* * ApplicationListener.java * allusionsApp * * Created by Matthieu Cormier on Fri Jun 20 2003. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package com.apple.eawt; // This is a stub interface for non Mac OS X java 1.4 environments public interface ApplicationListener extends java.util.EventListener { public void handleAbout(ApplicationEvent event); public void handleOpenApplication(ApplicationEvent event); public void handleOpenFile(ApplicationEvent event); public void handlePreferences(ApplicationEvent event); public void handlePrintFile(ApplicationEvent event); public void handleQuit(ApplicationEvent event); } ./src/com/apple/CVS/0000755000175000017500000000000011132365006013047 5ustar yvesyves./src/com/apple/CVS/Repository0000644000175000017500000000002311132365005015143 0ustar yvesyvescarmetal/com/apple ./src/com/apple/CVS/Entries0000644000175000017500000000001311132365006014375 0ustar yvesyvesD/eawt//// ./src/com/apple/CVS/Root0000644000175000017500000000007511132365005013716 0ustar yvesyves:ext:erichake@carmetal.cvs.sourceforge.net:/cvsroot/carmetal ./src/CVS/0000755000175000017500000000000011240240207011163 5ustar yvesyves./src/CVS/Repository0000644000175000017500000000001011132353422013260 0ustar yvesyvescarmetal./src/CVS/Entries0000644000175000017500000000072611240240207012524 0ustar yvesyvesD/atp//// D/eric//// D/net//// D/rene//// /Zirkel.java/1.12/Mon Jan 12 20:53:37 2009/-ko/ /base3D.zir/1.1/Sat Mar 22 16:12:56 2008/-ko/ /builtin.mcr/1.1/Wed Sep 03 13:31:01 2008/-ko/ /default.mcr/1.1/Sat Jun 23 07:30:12 2007/-ko/ /java.policy.applet/1.1/Mon May 08 09:14:48 2006/-ko/ /makejar-source.jardesc/1.1/Mon May 08 09:14:34 2006/-ko/ /zirkel.jardesc/1.1/Mon May 08 09:14:48 2006/-ko/ D/carmetal//// /.cvsignore/1.1/Sun Jan 11 11:34:47 2009// D/com//// D/org//// ./src/CVS/RevisionCache/0000755000175000017500000000000011134572637013726 5ustar yvesyves./src/CVS/RevisionCache/Zirkel.java#1.110000644000175000017500000000362311132723337016372 0ustar yvesyves /* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ public class Zirkel { static public void main(final String[] args) { final int PORT = 32145; int i = 0; String filename = ""; final String v = System.getProperty("java.version"); if ((v.startsWith("1.1")) || (v.startsWith("1.2")) || (v.startsWith("1.3")) || (v.startsWith("1.4"))) { new eric.JOldJavaVersionDialog(); } else { while (i < args.length) { if (args[i].startsWith("-l") && i < args.length - 1) { i += 2; } else if (args[i].startsWith("-h") && i < args.length - 1) { i += 2; } else if (args[i].startsWith("-s")) { i++; } else if (args[i].startsWith("-r")) { i++; } else if (args[i].startsWith("-d")) { i++; } else { filename += args[i] + System.getProperty("path.separator"); i++; } } ; final String FILES = filename; final eric.JUniqueInstance uniqueInstance = new eric.JUniqueInstance( PORT, FILES); if (uniqueInstance.launch()) { if (System.getProperty("mrj.version") != null) { new eric.JMacOShandler(); } ; rene.zirkel.Zirkel.main(args); } } } } ./src/CVS/RevisionCache/Zirkel.java#1.40000644000175000017500000000432411132355071016307 0ustar yvesyves import eric.JOldJavaVersionDialog; /* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ public class Zirkel { static public void main(String[] args) { final int PORT = 32145; int i=0; String filename=""; String v=System.getProperty("java.version"); if ((v.startsWith("1.1"))||(v.startsWith("1.2"))|| (v.startsWith("1.3"))||(v.startsWith("1.4"))) { new eric.JOldJavaVersionDialog(); }else{ while (i. */ public class Zirkel { static public void main(String[] args) { final int PORT = 32145; int i=0; String filename=""; String v=System.getProperty("java.version"); if ((v.startsWith("1.1"))||(v.startsWith("1.2"))|| (v.startsWith("1.3"))||(v.startsWith("1.4"))) { new eric.JOldJavaVersionDialog(); }else{ while (i. */ public class Zirkel { // coucou de éric2s ! static public void main(String[] args) { final int PORT = 32145; int i=0; String filename=""; String v=System.getProperty("java.version"); if ((v.startsWith("1.1"))||(v.startsWith("1.2"))|| (v.startsWith("1.3"))||(v.startsWith("1.4"))) { new eric.JOldJavaVersionDialog(); }else{ while (i. */ public class Zirkel { static public void main(String[] args) { final int PORT = 32145; int i=0; String filename=""; String v=System.getProperty("java.version"); if ((v.startsWith("1.1"))||(v.startsWith("1.2"))|| (v.startsWith("1.3"))||(v.startsWith("1.4"))) { new eric.JOldJavaVersionDialog(); }else{ while (i. */ public class Zirkel { static public void main(String[] args) { final int PORT = 32145; int i=0; String filename=""; String v=System.getProperty("java.version"); if ((v.startsWith("1.1"))||(v.startsWith("1.2"))|| (v.startsWith("1.3"))||(v.startsWith("1.4"))) { new eric.JOldJavaVersionDialog(); }else{ while (i. */ public class Zirkel { static public void main(final String[] args) { final int PORT = 32145; int i = 0; String filename = ""; final String v = System.getProperty("java.version"); if ((v.startsWith("1.1")) || (v.startsWith("1.2")) || (v.startsWith("1.3")) || (v.startsWith("1.4"))) { new eric.JOldJavaVersionDialog(); } else { while (i < args.length) { if (args[i].startsWith("-l") && i < args.length - 1) { i += 2; } else if (args[i].startsWith("-h") && i < args.length - 1) { i += 2; } else if (args[i].startsWith("-s")) { i++; } else if (args[i].startsWith("-r")) { i++; } else if (args[i].startsWith("-d")) { i++; } else { filename += args[i] + System.getProperty("path.separator"); i++; } } final String FILES = filename; final eric.JUniqueInstance uniqueInstance = new eric.JUniqueInstance( PORT, FILES); if (uniqueInstance.launch()) { if (System.getProperty("mrj.version") != null) { new eric.JMacOShandler(); } rene.zirkel.Zirkel.main(args); } } } } ./src/CVS/RevisionCache/Zirkel.java#1.10000644000175000017500000000431211132354546016307 0ustar yvesyves import eric.JOldJavaVersionDialog; /* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ public class Zirkel { static public void main(String[] args) { final int PORT = 32145; int i=0; String filename=""; String v=System.getProperty("java.version"); if ((v.startsWith("1.1"))||(v.startsWith("1.2"))|| (v.startsWith("1.3"))||(v.startsWith("1.4"))) { new eric.JOldJavaVersionDialog(); }else{ while (i. */ public class Zirkel { static public void main(String[] args) { final int PORT = 32145; int i=0; String filename=""; // Coucou String v=System.getProperty("java.version"); if ((v.startsWith("1.1"))||(v.startsWith("1.2"))|| (v.startsWith("1.3"))||(v.startsWith("1.4"))) { new eric.JOldJavaVersionDialog(); }else{ while (i. */ public class Zirkel { static public void main(String[] args) { final int PORT = 32145; int i=0; String filename=""; String ff="re"; String v=System.getProperty("java.version"); if ((v.startsWith("1.1"))||(v.startsWith("1.2"))|| (v.startsWith("1.3"))||(v.startsWith("1.4"))) { new eric.JOldJavaVersionDialog(); }else{ while (i ./src/base3D.zir0000640000175000017500000003745711342154034012400 0ustar yvesyves ./src/icons/0000755000175000017500000000000011132345564011657 5ustar yvesyves./src/.DS_Store0000644000175000017500000003000411362637365012234 0ustar yvesyvesBud1bwspblobericbwspblobbplist00  \WindowBounds[ShowSidebar]ShowStatusBar[ShowPathbar[ShowToolbar\SidebarWidth_{{554, 283}, {916, 591}}  ".. */ package rene.zirkel.expression; public class Quartic { static public int solve(final double c[], final double sol[]) { double sum = 0; for (final double element : c) sum += Math.abs(element); if (sum < 1e-15) { sol[0] = 0; return 1; } for (int k = 0; k < c.length; k++) c[k] /= sum; int n = 4; while (Math.abs(c[n]) < 1e-15) n--; if (n == 4) { final double soli[] = new double[4]; return quartic(c, sol, soli); } else if (n == 3) { return cubic(c, sol); } else if (n == 2) { final double a = -c[1] / (2 * c[2]); final double r = a * a - c[0] / c[2]; if (r < -1e-10) return 0; else if (Math.abs(r) < 1e-10) { sol[0] = a; return 1; } else { sol[0] = a + Math.sqrt(r); sol[1] = a - Math.sqrt(r); return 2; } } else if (n == 1) { sol[0] = -c[0] / c[1]; return 1; } else { if (Math.abs(c[0]) < 1e-10) { sol[0] = 0; return 1; } } return 0; } /*-------------------- Global Function Description Block ---------------------- * * ***QUARTIC************************************************25.03.98 * Solution of a quartic equation * ref.: J. E. Hacke, Amer. Math. Monthly, Vol. 48, 327-328, (1941) * NO WARRANTY, ALWAYS TEST THIS SUBROUTINE AFTER DOWNLOADING * ****************************************************************** * dd(0:4) (i) vector containing the polynomial coefficients * sol(1:4) (o) results, real part * soli(1:4) (o) results, imaginary part * Nsol (o) number of real solutions * ================================================================== * 17-Oct-2004 / Raoul Rausch * Conversion from Fortran to C * * *----------------------------------------------------------------------------- */ static int quartic(final double dd[], final double sol[], final double soli[]) { final double AA[] = new double[4], z[] = new double[3]; double a, b, c, d, f, p, q, r, zsol, xK2, xL, xK, sqp, sqm; int ncube, i; int Nsol = 0; if (dd[4] == 0.0) { return 0; } a = dd[4]; b = dd[3]; c = dd[2]; d = dd[1]; f = dd[0]; p = (-3.0 * Math.pow(b, 2) + 8.0 * a * c) / (8.0 * Math.pow(a, 2)); q = (Math.pow(b, 3) - 4.0 * a * b * c + 8.0 * d * Math.pow(a, 2)) / (8.0 * Math.pow(a, 3)); r = (-3.0 * Math.pow(b, 4) + 16.0 * a * Math.pow(b, 2) * c - 64.0 * Math.pow(a, 2) * b * d + 256.0 * Math.pow(a, 3) * f) / (256.0 * Math.pow(a, 4)); // Solve cubic resolvent AA[3] = 8.0; AA[2] = -4.0 * p; AA[1] = -8.0 * r; AA[0] = 4.0 * p * r - Math.pow(q, 2); ncube = cubic(AA, z); zsol = -1.e99; for (i = 0; i < ncube; i++) zsol = Math.max(zsol, z[i]); // Not sure C has max fct z[0] = zsol; xK2 = 2.0 * z[0] - p; xK = Math.sqrt(xK2); xL = q / (2.0 * xK); sqp = xK2 - 4.0 * (z[0] + xL); sqm = xK2 - 4.0 * (z[0] - xL); for (i = 0; i < 4; i++) soli[i] = 0.0; if ((sqp >= 0.0) && (sqm >= 0.0)) { sol[0] = 0.5 * (xK + Math.sqrt(sqp)); sol[1] = 0.5 * (xK - Math.sqrt(sqp)); sol[2] = 0.5 * (-xK + Math.sqrt(sqm)); sol[3] = 0.5 * (-xK - Math.sqrt(sqm)); Nsol = 4; } else if ((sqp >= 0.0) && (sqm < 0.0)) { sol[0] = 0.5 * (xK + Math.sqrt(sqp)); sol[1] = 0.5 * (xK - Math.sqrt(sqp)); sol[2] = -0.5 * xK; sol[3] = -0.5 * xK; soli[2] = Math.sqrt(-.25 * sqm); soli[3] = -Math.sqrt(-.25 * sqm); Nsol = 2; } else if ((sqp < 0.0) && (sqm >= 0.0)) { sol[0] = 0.5 * (-xK + Math.sqrt(sqm)); sol[1] = 0.5 * (-xK - Math.sqrt(sqm)); sol[2] = 0.5 * xK; sol[3] = 0.5 * xK; soli[2] = Math.sqrt(-0.25 * sqp); soli[3] = -Math.sqrt(-0.25 * sqp); Nsol = 2; } else if ((sqp < 0.0) && (sqm < 0.0)) { sol[0] = -0.5 * xK; sol[1] = -0.5 * xK; soli[0] = Math.sqrt(-0.25 * sqm); soli[1] = -Math.sqrt(-0.25 * sqm); sol[2] = 0.5 * xK; sol[3] = 0.5 * xK; soli[2] = Math.sqrt(-0.25 * sqp); soli[3] = -Math.sqrt(-0.25 * sqp); Nsol = 0; } for (i = 0; i < 4; i++) sol[i] -= b / (4.0 * a); return Nsol; } /*-------------------- Global Function Description Block ---------------------- * * ***CUBIC************************************************08.11.1986 * Solution of a cubic equation * Equations of lesser degree are solved by the appropriate formulas. * The solutions are arranged in ascending order. * NO WARRANTY, ALWAYS TEST THIS SUBROUTINE AFTER DOWNLOADING * ****************************************************************** * A(0:3) (i) vector containing the polynomial coefficients * X(1:L) (o) results * L (o) number of valid solutions (beginning with X(1)) * ================================================================== * 17-Oct-2004 / Raoul Rausch * Conversion from Fortran to C * * *----------------------------------------------------------------------------- */ static public int cubic(final double A[], final double X[]) { final double PI = 3.1415926535897932; final double THIRD = 1. / 3.; final double U[] = new double[3]; double W, P, Q, DIS, PHI; int i; int L; if (A[3] != 0.0) { // cubic problem W = A[2] / A[3] * THIRD; P = Math.pow((A[1] / A[3] * THIRD - Math.pow(W, 2)), 3); Q = -.5 * (2.0 * Math.pow(W, 3) - (A[1] * W - A[0]) / A[3]); DIS = Math.pow(Q, 2) + P; if (DIS < 0.0) { // three real solutions! // Confine the argument of ACOS to the interval [-1;1]! PHI = Math.acos(Math .min(1.0, Math.max(-1.0, Q / Math.sqrt(-P)))); P = 2.0 * Math.pow((-P), (5.e-1 * THIRD)); for (i = 0; i < 3; i++) U[i] = P * Math.cos((PHI + 2 * ((double) i) * PI) * THIRD) - W; X[0] = Math.min(U[0], Math.min(U[1], U[2])); X[1] = Math.max(Math.min(U[0], U[1]), Math.max(Math.min(U[0], U[2]), Math.min(U[1], U[2]))); X[2] = Math.max(U[0], Math.max(U[1], U[2])); L = 3; } else { // only one real solution! DIS = Math.sqrt(DIS); X[0] = CBRT(Q + DIS) + CBRT(Q - DIS) - W; L = 1; } } else if (A[2] != 0.0) { // quadratic problem P = 0.5 * A[1] / A[2]; DIS = Math.pow(P, 2) - A[0] / A[2]; if (DIS > 0.0) { // 2 real solutions X[0] = -P - Math.sqrt(DIS); X[1] = -P + Math.sqrt(DIS); L = 2; } else { // no real solution L = 0; } } else if (A[1] != 0.0) { // linear equation X[0] = A[0] / A[1]; L = 1; } else { // no equation L = 0; } /* * ==== perform one step of a newton iteration in order to minimize * round-off errors ==== */ for (i = 0; i < L; i++) { X[i] = X[i] - (A[0] + X[i] * (A[1] + X[i] * (A[2] + X[i] * A[3]))) / (A[1] + X[i] * (2.0 * A[2] + X[i] * 3.0 * A[3])); } return L; } static double CBRT(final double Z) { final double THIRD = 1. / 3.; if (Z > 0) return Math.pow(Z, THIRD); else if (Z < 0) return -Math.pow(Math.abs(Z), THIRD); else return 0; } /** * @param args */ public static void main(final String[] args) { final double a[] = { 0, 3, -3, -6, 5 }, x[] = new double[5], y[] = new double[5]; final int n = quartic(a, x, y); System.out.println(n + " solutions!"); for (int i = 0; i < n; i++) System.out.println(x[i]); } } ./src/rene/zirkel/expression/Translator.java0000640000175000017500000000157711133127263020171 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.expression; import rene.zirkel.construction.Construction; /** * @author Rene * */ public interface Translator { public void laterTranslate(Construction from); } ./src/rene/zirkel/expression/ExpressionString.java0000640000175000017500000001371711133127257021370 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.expression; import java.util.Enumeration; import rene.util.MyVector; import rene.zirkel.objects.ConstructionObject; class EquationExpressionString { public Expression E; public EquationExpressionString(final Expression o) { E = o; } @Override public String toString() { return E.toString(); } public String getEquation() { final ConstructionObject o = E.getObject(); if (o == null) return "???"; else return o.getEquation(); } public void translate() { E.translate(); } public void addDep(final ConstructionObject o) { E.addDep(o); } } class NameExpressionString { public Expression E; public NameExpressionString(final Expression o) { E = o; } @Override public String toString() { return E.toString(); } public String getName() { final ConstructionObject o = E.getObject(); if (o == null) return "???"; else return o.getName(); } public void translate() { E.translate(); } public void addDep(final ConstructionObject o) { E.addDep(o); } } /** * Class containing a chain of strings and expressions for alias and text lines. */ public class ExpressionString { MyVector v = new MyVector(3); // Strings or Expressions ConstructionObject O; public ExpressionString(final String s, final ConstructionObject o) { O = o; v.removeAllElements(); int h1 = 0; int n; while ((n = s.indexOf("%", h1)) >= 0) { final int h2 = s.indexOf("%", n + 1); if (h2 == n + 1) // found %% { v.addElement(s.substring(h1, n)); v.addElement("%"); h1 = n + 2; } else if (h2 >= 0) // found %...% { v.addElement(s.substring(h1, n)); if (s.charAt(n + 1) == '~') // found %~...% { s.substring(n + 2, h2); v.addElement(new EquationExpressionString(new Expression(s .substring(n + 2, h2), O.getConstruction(), O))); h1 = h2 + 1; } else if (s.charAt(n + 1) == '=') // found %=...% { s.substring(n + 2, h2); v.addElement(new NameExpressionString(new Expression(s .substring(n + 2, h2), O.getConstruction(), O))); h1 = h2 + 1; } else { final Expression ex = new Expression( s.substring(n + 1, h2), O.getConstruction(), O); v.addElement(ex); h1 = h2 + 1; } } else // only one % { v.addElement(s.substring(h1, n)); v.addElement("%"); h1 = n + 1; } } if (!s.equals("")) v.addElement(s.substring(h1)); // System.out.println(evaluate()); } /** * Get the original string back (but all objects with correct current * names). */ @Override public String toString() { final StringBuffer sb = new StringBuffer(); final Enumeration e = v.elements(); while (e.hasMoreElements()) { final Object o = e.nextElement(); if (o instanceof String) { if (((String) o).equals("%")) sb.append("%%"); else sb.append((String) o); } else if (o instanceof Expression) { sb.append("%"); if (((Expression) o).isForcePlus()) sb.append("+"); sb.append(o.toString()); sb.append("%"); } else if (o instanceof EquationExpressionString) { sb.append("%~"); sb.append(((EquationExpressionString) o).toString()); sb.append("%"); } else if (o instanceof NameExpressionString) { sb.append("%="); sb.append(((NameExpressionString) o).toString()); sb.append("%"); } } return sb.toString(); } /** * Get the string with all expressions evaluated. * * @return */ public String evaluate() { final StringBuffer sb = new StringBuffer(); final Enumeration e = v.elements(); while (e.hasMoreElements()) { final Object o = e.nextElement(); if (o instanceof String) { if (((String) o).equals("%")) sb.append("%"); else sb.append((String) o); } else if (o instanceof Expression) { try { double value = ((Expression) o).getValue(); value = O.round(value); if (((Expression) o).isForcePlus() && value >= 0) sb.append("+"); if (value == Math.floor(value + 0.5)) sb.append((int) (value)); else sb.append(O.round(value)); } catch (final Exception exc) { sb.append("???"); } } else if (o instanceof EquationExpressionString) { sb.append(((EquationExpressionString) o).getEquation()); } else if (o instanceof NameExpressionString) { sb.append(((NameExpressionString) o).getName()); } } return sb.toString(); } /** * Translate the string for macros. */ public void translate() { final Enumeration e = v.elements(); while (e.hasMoreElements()) { final Object o = e.nextElement(); if (o instanceof Expression) { ((Expression) o).translate(); } else if (o instanceof EquationExpressionString) { ((EquationExpressionString) o).translate(); } else if (o instanceof NameExpressionString) { ((NameExpressionString) o).translate(); } } } /** * Add all objcts this string depends on to the DL of O. * * @param O */ public void addDep(final ConstructionObject oc) { final Enumeration e = v.elements(); while (e.hasMoreElements()) { final Object o = e.nextElement(); if (o instanceof Expression) { ((Expression) o).addDep(oc); } else if (o instanceof EquationExpressionString) { ((EquationExpressionString) o).addDep(oc); } else if (o instanceof NameExpressionString) { ((NameExpressionString) o).addDep(oc); } } } } ./src/rene/zirkel/expression/CVS/0000755000175000017500000000000011170644115015623 5ustar yvesyves./src/rene/zirkel/expression/CVS/Repository0000644000175000017500000000003711132354034017721 0ustar yvesyvescarmetal/rene/zirkel/expression./src/rene/zirkel/expression/CVS/Entries0000644000175000017500000000072211133127743017162 0ustar yvesyves/ConvexMin.java/1.4/Tue Jan 13 15:09:34 2009/-ko/ /Expression.java/1.4/Tue Jan 13 15:09:35 2009/-ko/ /ExpressionString.java/1.3/Tue Jan 13 15:09:35 2009/-ko/ /InvalidException.java/1.4/Tue Jan 13 15:09:35 2009/-ko/ /NoValueException.java/1.4/Tue Jan 13 15:09:37 2009/-ko/ /Quartic.java/1.3/Tue Jan 13 15:09:37 2009/-ko/ /Romberg.java/1.4/Tue Jan 13 15:09:38 2009/-ko/ /Secant.java/1.4/Tue Jan 13 15:09:38 2009/-ko/ /Translator.java/1.3/Tue Jan 13 15:09:39 2009/-ko/ ./src/rene/zirkel/expression/CVS/RevisionCache/0000755000175000017500000000000011170644115020345 5ustar yvesyves./src/rene/zirkel/expression/CVS/RevisionCache/Expression.java#1.40000644000175000017500000015442711170644115023652 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.expression; import java.util.Enumeration; import rene.util.MyVector; import rene.zirkel.Zirkel; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.DepList; import rene.zirkel.objects.AngleObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.EquationXYObject; import rene.zirkel.objects.Evaluator; import rene.zirkel.objects.FunctionObject; import rene.zirkel.objects.InsideObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.SimulationObject; import rene.zirkel.objects.TrackObject; import rene.zirkel.objects.UserFunctionObject; /* This file contains classes for computing arithmetic expression. Those classes might be useful elsewhere. However, variables evaluate to sizes of construction objects or values of expressions here. */ /** * This class holds information abut the current position in the scanned text. */ class ExpressionText { char A[]; int N; Construction C; ConstructionObject O; DepList DL; String Var[]; boolean NoCircles; public ExpressionText(final String S, final Construction c, final ConstructionObject o, final DepList dl, final boolean nocircles) { A = S.toCharArray(); N = 0; C = c; O = o; DL = dl; NoCircles = nocircles; } public void setVar(final String t[]) { Var = t; } public boolean isVar(final String var) { if (Var == null) { return false; } for (final String element : Var) { if (element.equals(var)) { return true; } } return false; } public char next(final boolean quotes) { if (!quotes) { skipblanks(); } if (N < A.length) { return A[N]; } else { return (char) 0; } } public char next() { return next(false); } public char nextnext() { skipblanks(); if (N + 1 < A.length) { return A[N + 1]; } else { return (char) 0; } } public void advance(final boolean quotes) { if (!quotes) { skipblanks(); } N++; } public void advance() { advance(false); } public Construction getConstruction() { return C; } public ConstructionObject getObject() { return O; } public DepList getDepList() { return DL; } public void skipblanks() { while (N < A.length && A[N] == ' ') { N++; } } public boolean nocircles() { return NoCircles; } } /** * basic = (sum) basic = elementary */ class BasicExpression { BasicExpression E; static final int MINUS = -1, PLUS = 1; public static BasicExpression scan(final ExpressionText t) throws ConstructionException { if (t.next() == '-') { t.advance(); return scan(t, MINUS); } if (t.next() == '+') { t.advance(); return scan(t, PLUS); } if (t.next() == '(') { return new BracketExpression(scanBracket(t)); } return ElementaryExpression.scan(t); } public static BasicExpression scan(final ExpressionText t, final int sign) throws ConstructionException { if (sign == MINUS) { if (t.next() == '(') { return new MinusExpression(scanBracket(t)); } return new MinusExpression(ElementaryExpression.scan(t)); } if (t.next() == '(') { return scanBracket(t); } return ElementaryExpression.scan(t); } public static BasicExpression scanBracket(final ExpressionText t) throws ConstructionException { t.advance(); final BasicExpression E = TopExpression.scan(t); if (t.next() == ')') { t.advance(); } else { throw new ConstructionException(Zirkel.name("exception.bracket")); } return E; } public double getValue() throws ConstructionException { throw new ConstructionException(""); } public void translate() { } public boolean isNumber() { return false; } public void reset() { } public boolean isLogical() { return false; } } /** * double = 34.45879 double = +34.45879 double = -34.45879 */ class DoubleExpression extends BasicExpression { double X; public DoubleExpression(final double x) { X = x; } public static BasicExpression scan(final ExpressionText t) throws ConstructionException { boolean Punkt = false, Digit = false, Expo = false; String num = ""; char c = t.next(); if ((c == '+') || (c == '-')) { num += c; t.advance(); } while (true) { c = t.next(); if (c >= '0' && c <= '9') { num += c; t.advance(); Digit = true; } else if (c == '.') { if (Punkt) { throw new ConstructionException(Zirkel .name("exception.dot")); } Punkt = true; num += c; t.advance(); } else if ((Digit) && (c == 'E')) { if (Expo) { throw new ConstructionException( "Exponential notation error"); } Expo = true; num += c; t.advance(); c = t.next(); if ((c == '+') || (c == '-')) { num += c; t.advance(); } } else { break; } } if (!Digit) { throw new ConstructionException(Zirkel.name("exception.nodigit")); } return new DoubleExpression(Double.valueOf(num).doubleValue()); } @Override public double getValue() throws ConstructionException { return X; } @Override public String toString() { String s = "" + X; if (s.endsWith(".0")) { s = s.substring(0, s.length() - 2); } return s; } @Override public void translate() { } @Override public boolean isNumber() { return true; } } /** * object = @name object = @"name" */ class FindObjectExpression extends ObjectExpression implements Translator { String Name; String Var = null; Construction C; ConstructionObject O = null; // found object public FindObjectExpression(final String name, final Construction c) { super(null); Name = name; C = c; } @Override public ConstructionObject getObject() { if (C == null) { return null; } if (O != null && O.getConstruction() == C && O.isInConstruction() && O.getName().equals(Name)) { return O; } return O = C.find(Name); } @Override public double getValue() throws ConstructionException { if (C == null) { throw new InvalidException(""); } if (O != null && O.getConstruction() == C && O.isInConstruction() && O.getName().equals(Name)) { return O.getValue(); } O = C.find(Name); if (O == null) { throw new InvalidException(""); } return O.getValue(); } public static BasicExpression scan(final ExpressionText t, final boolean quotes) throws ConstructionException { if (!quotes && t.next() == '\"') { t.advance(); final BasicExpression E = scan(t, true); if (t.next() != '\"') { throw new ConstructionException(Zirkel.name("exception.quotes")); } t.advance(); return E; } final StringBuffer b = new StringBuffer(); while (true) { final char c = t.next(quotes); if (!(Character.isLetterOrDigit(c) || c == '\\' || c == '\'' || (quotes && c != '\"' && c != 0) || (quotes && c == ' '))) { break; } b.append(c); t.advance(quotes); } if (!quotes && t.next() == '(') { return FunctionExpression.scan(t, b.toString()); } final String s = b.toString(); return new FindObjectExpression(s, t.getConstruction()); } public static BasicExpression scan(final ExpressionText t) throws ConstructionException { return scan(t, false); } @Override public void translate() { C = C.getTranslation(); C.addTranslator(this); } @Override public String toString() { if (Var != null) { return Var; } return "@" + ObjectExpression.quote(Name); } /** * Used to translate expressions with @P in macros */ public void laterTranslate(final Construction from) { if (C == null) { return; } final ConstructionObject o = from.find(Name); if (o == null || o.getTranslation() == null) { from.addError(ConstructionObject.text1(Zirkel .name("warning.macrodefinition"), Name)); return; } Name = o.getTranslation().getName(); O = null; } } /** * object = name object = "name" */ class ObjectExpression extends BasicExpression { ConstructionObject O; String Var = null; public ObjectExpression(final ConstructionObject o) { O = o; } @Override public double getValue() throws ConstructionException { if (!O.valid()) { throw new InvalidException(""); } if (Var != null && (O instanceof FunctionObject)) { return ((FunctionObject) O).getValue(Var); } if (Var != null && (O instanceof UserFunctionObject)) { return ((UserFunctionObject) O).getValue(Var); } if (Var != null && (O instanceof EquationXYObject)) { return ((EquationXYObject) O).getValue(Var); } return O.getValue(); } public ConstructionObject getObject() { return O; } public static BasicExpression scan(final ExpressionText t, final boolean quotes) throws ConstructionException { if (!quotes && t.next() == '\"') { t.advance(); final BasicExpression E = scan(t, true); if (t.next() != '\"') { throw new ConstructionException(Zirkel.name("exception.quotes")); } t.advance(); return E; } final StringBuffer b = new StringBuffer(); while (true) { final char c = t.next(quotes); if (!(Character.isLetterOrDigit(c) || c == '\\' || c == '\'' || (quotes && c != '\"' && c != 0) || (quotes && c == ' '))) { break; } b.append(c); t.advance(quotes); } if (!quotes && t.next() == '(') { return FunctionExpression.scan(t, b.toString()); } final String s = b.toString(); if (s.equals("pi")) { return new ConstantExpression("pi", Math.PI); } if (s.equals("valid")) { return new ValidExpression(true); } if (s.equals("invalid")) { return new ValidExpression(false); } if (s.equals("this")) { t.getDepList().add(t.getObject()); return new ObjectExpression(t.getObject()); } if (s.equals("windoww")) { return new ConstructionExpression(t.getConstruction(), ConstructionExpression.WIDTH); } if (s.equals("windowh")) { return new ConstructionExpression(t.getConstruction(), ConstructionExpression.HEIGHT); } if (s.equals("windowcx")) { return new ConstructionExpression(t.getConstruction(), ConstructionExpression.CENTERX); } if (s.equals("windowcy")) { return new ConstructionExpression(t.getConstruction(), ConstructionExpression.CENTERY); } if (s.equals("pixel")) { return new ConstructionExpression(t.getConstruction(), ConstructionExpression.PIXEL); } if (t.isVar(s)) { final ObjectExpression oe = new ObjectExpression(t.getObject()); oe.Var = s; return oe; } ConstructionObject o = t.getConstruction().findInclusive(s, t.getObject()); if (o == null) { o = t.getConstruction().find(s); if (o == null) { if (t.getConstruction().loading()) { return new FindObjectExpression(s, t.getConstruction()); } else { throw new ConstructionException(Zirkel .name("exception.notfound") + " (" + s + ")"); } } // System.out.println("---"); // System.out.println(o.getName()+" "+t.getObject().getName()); // System.out.println(t.getConstruction().dependsOn(o,t.getObject())); if (t.getConstruction().dependsOn(o, t.getObject())) { if (t.nocircles()) { throw new ConstructionException(ConstructionObject.text1( Zirkel.name("exception.depends"), s)); } return new FindObjectExpression(s, t.getConstruction()); } t.getConstruction().needsOrdering(); } t.getDepList().add(o); return new ObjectExpression(o); } public static BasicExpression scan(final ExpressionText t) throws ConstructionException { if (t.next() == '@') { t.advance(); return FindObjectExpression.scan(t); } return scan(t, false); } @Override public void translate() { O = O.getTranslation(); } @Override public String toString() { if (Var != null) { return Var; } return quote(O.getName()); } static public String quote(final String name) { boolean quotes = false; for (int i = 0; i < name.length(); i++) { if (!Character.isLetterOrDigit(name.charAt(i))) { quotes = true; break; } } if (quotes) { return "\"" + name + "\""; } else { return name; } } } /** * @author Rene * * Evaluates a user funktion (a FunctionObject). The Y-expression of * this function is used. * */ class UserFunctionExpression extends BasicExpression { ConstructionObject F; BasicExpression E[]; double X[]; public UserFunctionExpression(final ConstructionObject f, final BasicExpression e[]) { F = f; E = e; X = new double[E.length]; } @Override public double getValue() throws ConstructionException { for (int i = 0; i < E.length; i++) { X[i] = E[i].getValue(); } if (F instanceof FunctionObject) { return ((FunctionObject) F).evaluateF(X); } return ((UserFunctionObject) F).evaluateF(X); } @Override public void translate() { for (final BasicExpression element : E) { element.translate(); } if (F instanceof FunctionObject) { F = (FunctionObject) F.getTranslation(); } else { F = (UserFunctionObject) F.getTranslation(); } } @Override public void reset() { for (final BasicExpression element : E) { element.reset(); } } @Override public String toString() { String ex = E[0].toString(); for (int i = 1; i < E.length; i++) { ex = ex + "," + E[i].toString(); } return F.getName() + "(" + ex + ")"; } } class SimulationExpression extends BasicExpression { ConstructionObject SO; ConstructionObject Container, F; BasicExpression E; Construction C; public SimulationExpression(final ConstructionObject so, final ConstructionObject c, final BasicExpression e, final ConstructionObject f) { SO = so; Container = c; E = e; F = f; C = c.getConstruction(); } @Override public double getValue() throws ConstructionException { if (C.BlockSimulation) { throw new ConstructionException(Zirkel .name("exception.simmulation.block")); } try { final double aa = E.getValue(); C.BlockSimulation = true; ((SimulationObject) SO).setSimulationValue(aa); F.getConstruction().validate(F, SO); final double res = F.getValue(); ((SimulationObject) SO).resetSimulationValue(); F.getConstruction().validate(F, SO); C.BlockSimulation = false; return res; } catch (final Exception e) { C.BlockSimulation = false; throw new ConstructionException(""); } } @Override public void translate() { E.translate(); SO = SO.getTranslation(); Container = Container.getTranslation(); F = F.getTranslation(); } @Override public void reset() { E.reset(); } @Override public String toString() { return "simulate(" + SO.getName() + "," + E.toString() + "," + F.getName() + ")"; } } /** * function = sin(parameter) etc. function = x(point) function = y(point) */ class FunctionExpression extends BasicExpression { int F; BasicExpression E[]; int NParams; public FunctionExpression(final int f, final BasicExpression e) { F = f; E = new BasicExpression[1]; E[0] = e; NParams = 1; } public FunctionExpression(final int f, final BasicExpression e, final BasicExpression ee) { F = f; E = new BasicExpression[2]; E[0] = e; E[1] = ee; NParams = 2; } public FunctionExpression(final int f, final BasicExpression e, final BasicExpression ee, final BasicExpression eee) { F = f; E = new BasicExpression[3]; E[0] = e; E[1] = ee; E[2] = eee; NParams = 3; } final static String Functions[] = { "sin", "cos", "tan", "arcsin", "arccos", "arctan", "sqrt", "exp", "log", "round", "x", "y", "floor", "ceil", "d", "a", "angle180", "angle360", "abs", "scale", "sign", "d", "sum", "if", "deg", "rad", "integrate", "zero", "diff", "min", "max", "length", "rsin", "rcos", "rtan", "rarcsin", "rarccos", "rarctan", "sinhyp", "coshyp", "z", "simulate", "inside", "random", "old" }; final static int NX = 10, NY = 11, ND = 14, NA = 15, NS = 19, NSUM = 22, NIF = 23, NINT = 26, NZERO = 27, NDIFF = 28, NMIN = 29, NMAX = 30, NLENGTH = 31, NZ = 40, NSIM = 41, NINSIDE = 42, NRANDOM = 43, NOLD = 44; public static BasicExpression scan(final ExpressionText t, final String name) throws ConstructionException { int f = -1; for (int i = 0; i < Functions.length; i++) { if (name.equals(Functions[i])) { f = i; break; } } if (f < 0) { boolean forward = false; ConstructionObject o = t.getConstruction() .find(name, t.getObject()); if (o == null) { o = t.getConstruction().find(name); forward = true; } if (o != null && (o instanceof FunctionObject || o instanceof UserFunctionObject) && !(o == t.getObject()) && !t.getConstruction().dependsOn(o, t.getObject())) { if (t.next() != '(') { throw new ConstructionException(Zirkel .name("exception.parameter")); } t.advance(); final MyVector ex = new MyVector(); while (true) { final BasicExpression e = TopExpression.scan(t); ex.addElement(e); if (t.next() == ')') { break; } if (t.next() != ',') { throw new ConstructionException(Zirkel .name("exception.parameter")); } t.advance(); } t.advance(); t.getDepList().add(o); if (forward) { t.getConstruction().needsOrdering(); } final BasicExpression exp[] = new BasicExpression[ex.size()]; ex.copyInto(exp); return new UserFunctionExpression(o, exp); } throw new ConstructionException(Zirkel.name("exception.function") + " (" + name + ")"); } if (t.next() != '(') { throw new ConstructionException(Zirkel.name("exception.parameter")); } t.advance(); BasicExpression e = TopExpression.scan(t); if (f == NX || f == NY || f == NZ) { if (e instanceof FindObjectExpression) { e = new FunctionExpression(f, e); } else if (e instanceof ObjectExpression && ((ObjectExpression) e).getObject() instanceof PointObject) { e = new FunctionExpression(f, e); } else if (e instanceof ObjectExpression && ((ObjectExpression) e).getObject() instanceof PrimitiveLineObject) { e = new FunctionExpression(f, e); } else { throw new ConstructionException(Zirkel .name("exception.parameter") + " (" + Functions[f] + ")"); } } else if (f == ND) { if (t.next() != ',') { e = new DExpression(e); } else { t.advance(); final BasicExpression ee = TopExpression.scan(t); if (((e instanceof ObjectExpression && ((ObjectExpression) e) .getObject() instanceof PointObject) || e instanceof FindObjectExpression) && ((ee instanceof ObjectExpression && ((ObjectExpression) ee) .getObject() instanceof PointObject) || ee instanceof FindObjectExpression)) { e = new FunctionExpression(f, e, ee); } else { throw new ConstructionException(Zirkel .name("exception.parameter") + " (" + Functions[f] + ")"); } } } else if (f == NOLD) { if (t.next() != ',') { e = new OldExpression(e); } else { t.advance(); final BasicExpression ee = TopExpression.scan(t); e = new OldExpression(e, ee); } } else if (f == NA) { if (t.next() != ',') { throw new ConstructionException(Zirkel .name("exception.parameter")); } t.advance(); final BasicExpression ee = TopExpression.scan(t); if (t.next() != ',') { throw new ConstructionException(Zirkel .name("exception.parameter")); } t.advance(); final BasicExpression eee = TopExpression.scan(t); if (((e instanceof ObjectExpression && ((ObjectExpression) e) .getObject() instanceof PointObject) || e instanceof FindObjectExpression) && ((ee instanceof ObjectExpression && ((ObjectExpression) ee) .getObject() instanceof PointObject) || ee instanceof FindObjectExpression) && ((eee instanceof ObjectExpression && ((ObjectExpression) eee) .getObject() instanceof PointObject) || eee instanceof FindObjectExpression)) { e = new FunctionExpression(f, e, ee, eee); } else { throw new ConstructionException(Zirkel .name("exception.parameter") + " (" + Functions[f] + ")"); } } else if (f == NS) { if (t.next() != ',') { throw new ConstructionException(Zirkel .name("exception.parameter")); } t.advance(); final BasicExpression ee = TopExpression.scan(t); if (t.next() != ',') { throw new ConstructionException(Zirkel .name("exception.parameter")); } t.advance(); final BasicExpression eee = TopExpression.scan(t); e = new FunctionExpression(f, e, ee, eee); } else if (f == NSUM) { if (t.next() != ',') { e = new CumSumExpression(e); } else { t.advance(); final BasicExpression ee = TopExpression.scan(t); e = new CumSumExpression(e, ee); } } else if (f == NRANDOM) { if (t.next() != ',') { e = new RandomExpression(e); } else { t.advance(); final BasicExpression ee = TopExpression.scan(t); e = new RandomExpression(e, ee); } } else if (f == NIF) { if (t.next() != ',') { throw new ConstructionException(Zirkel .name("exception.parameter")); } t.advance(); final BasicExpression ee = TopExpression.scan(t); if (t.next() != ',') { throw new ConstructionException(Zirkel .name("exception.parameter")); } t.advance(); final BasicExpression eee = TopExpression.scan(t); e = new IfExpression(e, ee, eee); } else if (f == NINT || f == NZERO || f == NMIN || f == NMAX || f == NLENGTH) { if (!(e instanceof ObjectExpression)) { if (f == NMAX || f == NMIN) { if (t.next() != ',') { throw new ConstructionException(Zirkel .name("exception.parameter")); } t.advance(); final BasicExpression ee = TopExpression.scan(t); e = new FunctionExpression(f, e, ee); } else { throw new ConstructionException(Zirkel .name("exception.parameter") + " (" + Functions[f] + ")"); } } else { final boolean function = ((ObjectExpression) e).getObject() instanceof Evaluator || ((ObjectExpression) e).getObject() instanceof TrackObject; if ((f == NINT || f == NLENGTH) && t.next() == ')') { if (!function) { throw new ConstructionException(Zirkel .name("exception.parameter") + " (" + Functions[f] + ")"); } e = new FunctionExpression(f, e); } else if (f == NLENGTH) { throw new ConstructionException(Zirkel .name("exception.parameter")); } else { if (t.next() != ',') { throw new ConstructionException(Zirkel .name("exception.parameter")); } t.advance(); final BasicExpression ee = TopExpression.scan(t); if (function) { if (t.next() != ',') { throw new ConstructionException(Zirkel .name("exception.parameter")); } t.advance(); final BasicExpression eee = TopExpression.scan(t); e = new FunctionExpression(f, e, ee, eee); } else if (f == NMIN || f == NMAX) { e = new FunctionExpression(f, e, ee); } else { throw new ConstructionException(Zirkel .name("exception.parameter") + " (" + Functions[f] + ")"); } } } } else if (f == NDIFF) { if (!(e instanceof ObjectExpression) || !(((ObjectExpression) e).getObject() instanceof Evaluator)) { throw new ConstructionException(Zirkel .name("exception.parameter") + " (" + Functions[f] + ")"); } if (t.next() != ',') { throw new ConstructionException(Zirkel .name("exception.parameter")); } t.advance(); final BasicExpression ee = TopExpression.scan(t); e = new FunctionExpression(f, e, ee); } else if (f == NSIM) { if (t.next() != ',') { throw new ConstructionException(Zirkel .name("exception.parameter")); } t.advance(); final BasicExpression ee = TopExpression.scan(t); if (t.next() != ',') { throw new ConstructionException(Zirkel .name("exception.parameter")); } t.advance(); final BasicExpression eee = TopExpression.scan(t); if ((e instanceof ObjectExpression && ((ObjectExpression) e) .getObject() instanceof SimulationObject) || !(eee instanceof ObjectExpression)) { final ConstructionObject SO = ((ObjectExpression) e) .getObject(); if (t.getConstruction().dependsOn(SO, t.getObject())) { throw new ConstructionException(Zirkel .name("exception.parameter") + " (" + Functions[f] + ")"); } e = new SimulationExpression( ((ObjectExpression) e).getObject(), t.getObject(), ee, ((ObjectExpression) eee).getObject()); } else { throw new ConstructionException(Zirkel .name("exception.parameter") + " (" + Functions[f] + ")"); } } else if (f == NINSIDE) { if (t.next() != ',') { throw new ConstructionException(Zirkel .name("exception.parameter")); } t.advance(); final BasicExpression ee = TopExpression.scan(t); if (((e instanceof ObjectExpression && ((ObjectExpression) e) .getObject() instanceof PointObject) || e instanceof FindObjectExpression) && ((ee instanceof ObjectExpression && ((ObjectExpression) ee) .getObject() instanceof InsideObject) || ee instanceof FindObjectExpression)) { e = new FunctionExpression(f, e, ee); } else { throw new ConstructionException(Zirkel .name("exception.parameter") + " (" + Functions[f] + ")"); } } else { e = new FunctionExpression(f, e); } if (t.next() != ')') { throw new ConstructionException(Zirkel.name("exception.parameter")); } t.advance(); return e; } @Override public double getValue() throws ConstructionException { PointObject P, PP, PPP; double cc; switch (F) { case NX: cc = getPointLineX(0); return cc; case NY: cc = getPointLineY(0); return cc; case NZ: P = getPoint(0); if (!P.valid()) { throw new InvalidException(Zirkel.name("exception.invalid")); } return P.getZ(); case ND: P = getPoint(0); PP = getPoint(1); if (!P.valid() || !PP.valid()) { throw new InvalidException(Zirkel.name("exception.invalid")); } double dx = P.getX() - PP.getX(); double dy = P.getY() - PP.getY(); return Math.sqrt(dx * dx + dy * dy); case NA: P = getPoint(0); PP = getPoint(1); PPP = getPoint(2); if (!P.valid() || !PP.valid() || !PPP.valid()) { throw new InvalidException(Zirkel.name("exception.invalid")); } dx = P.getX() - PP.getX(); dy = P.getY() - PP.getY(); final double dx1 = PPP.getX() - PP.getX(); final double dy1 = PPP.getY() - PP.getY(); double a = Math.atan2(dx, dy) - Math.atan2(dx1, dy1); a = a / Math.PI * 180; if (a < 0) { a += 360; } if (a > 360) { a -= 360; } return a; case NS: final double x = E[0].getValue(), xa = E[1].getValue(), xb = E[2].getValue(); if (x < xa || x >= xb || xb <= xa) { throw new InvalidException(Zirkel.name("exception.invalid")); } return (x - xa) / (xb - xa); case NINT: if (((ObjectExpression) E[0]).getObject() instanceof Evaluator) { final Evaluator F = (Evaluator) (((ObjectExpression) E[0]) .getObject()); if (E.length > 1) { final double aa = E[1].getValue(), bb = E[2].getValue(); return Romberg.compute(F, aa, bb, 10, 1e-10, 10); } else if (F instanceof FunctionObject) { return ((FunctionObject) F).getIntegral(); } } else { final TrackObject TO = (TrackObject) (((ObjectExpression) E[0]) .getObject()); if (E.length > 1) { final double aa = E[1].getValue(), bb = E[2].getValue(); return TO.getSum(aa, bb); } else { return TO.getSum(); } } case NLENGTH: if (((ObjectExpression) E[0]).getObject() instanceof FunctionObject) { final FunctionObject F = (FunctionObject) (((ObjectExpression) E[0]) .getObject()); return F.getLength(); } else { final TrackObject TO = (TrackObject) (((ObjectExpression) E[0]) .getObject()); return TO.getLength(); } case NZERO: Evaluator F = (Evaluator) (((ObjectExpression) E[0]).getObject()); double aa = E[1].getValue(), bb = E[2].getValue(); return Secant.compute(F, aa, bb, 1e-10); case NDIFF: F = (Evaluator) (((ObjectExpression) E[0]).getObject()); aa = E[1].getValue(); return (F.evaluateF(aa + 1e-7) - F.evaluateF(aa - 1e-7)) / 2e-7; case NMIN: if (NParams == 2) { return Math.min(E[0].getValue(), E[1].getValue()); } else { F = (Evaluator) (((ObjectExpression) E[0]).getObject()); aa = E[1].getValue(); bb = E[2].getValue(); return ConvexMin.computeMin(F, aa, bb, 1e-10); } case NMAX: if (NParams == 2) { return Math.max(E[0].getValue(), E[1].getValue()); } else { F = (Evaluator) (((ObjectExpression) E[0]).getObject()); aa = E[1].getValue(); bb = E[2].getValue(); return ConvexMin.computeMax(F, aa, bb, 1e-10); } case NINSIDE: P = getPoint(0); final InsideObject IO = (InsideObject) (((ObjectExpression) E[1]) .getObject()); return IO.containsInside(P); } double x = E[0].getValue(); switch (F) { case 0: return Math.sin(x / 180 * Math.PI); case 1: return Math.cos(x / 180 * Math.PI); case 2: return Math.tan(x / 180 * Math.PI); case 3: return Math.asin(x) / Math.PI * 180; case 4: return Math.acos(x) / Math.PI * 180; case 5: return Math.atan(x) / Math.PI * 180; case 6: return Math.sqrt(x); case 7: return Math.exp(x); case 8: return Math.log(x); case 9: return Math.round(x); case 12: return Math.floor(x); case 13: return Math.ceil(x); case 16: x = x / 360; x -= Math.floor(x); x = x * 360; if (x < 180) { return x; } else { return (x - 360); } case 17: x /= 360; x -= Math.floor(x); return x * 360; case 18: return Math.abs(x); case 20: if (x > 0) { return 1; } else if (x == 0) { return 0; } else { return -1; } case 24: return (x / Math.PI * 180); case 25: return (x / 180 * Math.PI); case 32: return Math.sin(x); case 33: return Math.cos(x); case 34: return Math.tan(x); case 35: return Math.asin(x); case 36: return Math.acos(x); case 37: return Math.atan(x); case 38: return (Math.exp(x) - Math.exp(-x)) / 2; case 39: return (Math.exp(x) + Math.exp(-x)) / 2; } throw new ConstructionException(""); } public double getPointLineX(final int n) throws ConstructionException { PointObject p; PrimitiveLineObject l; try { p = (PointObject) ((ObjectExpression) E[n]).getObject(); if (!p.valid()) { throw new ConstructionException("exception.invalid"); } return p.getX(); } catch (final Exception e) { try { l = (PrimitiveLineObject) ((ObjectExpression) E[n]).getObject(); if (!l.valid()) { throw new ConstructionException("exception.invalid"); } return l.getDX(); } catch (final Exception ee) { throw new ConstructionException("exception.notfound"); } } } public double getPointLineY(final int n) throws ConstructionException { PointObject p; PrimitiveLineObject l; try { p = (PointObject) ((ObjectExpression) E[n]).getObject(); if (!p.valid()) { throw new ConstructionException("exception.invalid"); } return p.getY(); } catch (final Exception e) { try { l = (PrimitiveLineObject) ((ObjectExpression) E[n]).getObject(); if (!l.valid()) { throw new ConstructionException("exception.invalid"); } return l.getDY(); } catch (final Exception ee) { throw new ConstructionException("exception.notfound"); } } } public PointObject getPoint(final int n) throws ConstructionException { PointObject p; try { p = (PointObject) ((ObjectExpression) E[n]).getObject(); } catch (final Exception e) { throw new ConstructionException("exception.notfound"); } if (!p.valid()) { throw new ConstructionException("exception.invalid"); } return p; } @Override public void translate() { for (int i = 0; i < NParams; i++) { E[i].translate(); } } @Override public void reset() { for (int i = 0; i < NParams; i++) { E[i].reset(); } } @Override public String toString() { String s = Functions[F] + "("; for (int i = 0; i < NParams; i++) { if (i > 0) { s = s + ","; } s = s + E[i]; } return s + ")"; } } class OldExpression extends FunctionExpression { double oldvalue1 = Double.NaN, oldvalue2 = Double.NaN; public OldExpression(final BasicExpression e) { super(NOLD, e); } public OldExpression(final BasicExpression e, final BasicExpression ee) { super(NOLD, e, ee); } @Override public double getValue() throws ConstructionException { final double x = E[0].getValue(); final double p = (NParams > 1) ? E[1].getValue() : 0; if (Double.isNaN(oldvalue1)) { oldvalue1 = x; } if (Double.isNaN(oldvalue2)) { oldvalue2 = x; } if (p == 1) { oldvalue1 = oldvalue2; oldvalue2 = x; } else { if (x != oldvalue2) { oldvalue1 = oldvalue2; oldvalue2 = x; } } return oldvalue1; } @Override public void reset() { super.reset(); } } class DExpression extends FunctionExpression { double Old = 0; double Old1 = 0; boolean start = false; public DExpression(final BasicExpression e) { super(21, e); } @Override public double getValue() throws ConstructionException { if (E[0] instanceof ObjectExpression) { final ConstructionObject o = ((ObjectExpression) E[0]).getObject(); if (o instanceof PointObject) { final PointObject p = (PointObject) o; if (p.dontUpdate()) { return 0; } final double x = p.getX(), y = p.getY(); if (start) { final double res = (x - Old) * (x - Old) + (y - Old1) * (y - Old1); Old = x; Old1 = y; return Math.sqrt(res); } Old = x; Old1 = y; start = true; return 0; } else if (o instanceof AngleObject) { final AngleObject a = (AngleObject) o; final double x = a.getValue(); if (start) { double res = x - Old; if (res < -180) { res += 180; } if (res > 180) { res -= 180; } Old = x; return res; } Old = x; start = true; return 0; } } final double x = E[0].getValue(); double res; if (start) { res = x - Old; } else { res = 0; start = true; } Old = x; return res; } @Override public void reset() { start = false; super.reset(); } } class CumSumExpression extends FunctionExpression { double sum = 0; public CumSumExpression(final BasicExpression e, final BasicExpression ee) { super(22, e, ee); } public CumSumExpression(final BasicExpression e) { super(22, e); } @Override public double getValue() throws ConstructionException { if (NParams > 1) { try { final double x = E[1].getValue(); if (x < 0) { reset(); return sum; } } catch (final Exception e) { sum = 0; return sum; } } sum += E[0].getValue(); return sum; } @Override public void reset() { sum = 0; super.reset(); } } class RandomExpression extends FunctionExpression { double rand = Double.NaN; public RandomExpression(final BasicExpression e, final BasicExpression ee) { super(NRANDOM, e, ee); } public RandomExpression(final BasicExpression e) { super(NRANDOM, e); } @Override public double getValue() throws ConstructionException { if (NParams > 1) { try { final double r = E[0].getValue(); final double p = E[1].getValue(); if ((p == 1) || (Double.isNaN(rand))) { rand = r * Math.random(); } } catch (final Exception e) { rand = 0; return rand; } } else { final double r = E[0].getValue(); rand = r * Math.random(); } return rand; } @Override public void reset() { rand = 0; super.reset(); } } class IfExpression extends FunctionExpression { public IfExpression(final BasicExpression e, final BasicExpression ee, final BasicExpression eee) { super(23, e, ee, eee); } @Override public double getValue() throws ConstructionException { double v = 0; try { v = E[0].getValue(); } catch (final NoValueException e) { if (e.isValid()) { return E[1].getValue(); } else { return E[2].getValue(); } } catch (final ConstructionException e) { return E[2].getValue(); } if (E[0].isLogical()) { if (v == 0) { return E[2].getValue(); } else { return E[1].getValue(); } } return E[1].getValue(); } } /** * constant = pi */ class ConstantExpression extends BasicExpression { double X; String S; public ConstantExpression(final String s, final double x) { X = x; S = s; } @Override public double getValue() throws ConstructionException { return X; } @Override public void translate() { } @Override public String toString() { return S; } } /** * constant depending on construction */ class ConstructionExpression extends BasicExpression { int Type; Construction C; final static int CENTERX = 0, CENTERY = 1, WIDTH = 2, HEIGHT = 3, PIXEL = 4; public ConstructionExpression(final Construction c, final int type) { Type = type; C = c; } @Override public double getValue() throws ConstructionException { if (C == null) { return 0; } switch (Type) { case WIDTH: return C.getW(); case CENTERX: return C.getX(); case CENTERY: return C.getY(); case HEIGHT: return C.getH(); case PIXEL: return C.getPixel(); } return 0; } @Override public void translate() { C = C.getTranslation(); } @Override public String toString() { switch (Type) { case WIDTH: return "windoww"; case CENTERX: return "windowcx"; case CENTERY: return "windowcy"; case HEIGHT: return "windowh"; case PIXEL: return "pixel"; } return ""; } } /** * constant = valid,invalid */ class ValidExpression extends BasicExpression { boolean V; public ValidExpression(final boolean valid) { V = valid; } @Override public double getValue() throws ConstructionException { if (V) { return 0; } else { throw new ConstructionException(""); } } @Override public void translate() { } @Override public String toString() { if (V) { return "valid"; } else { return "invalid"; } } } /** * Bracket = (Basic) */ class BracketExpression extends ElementaryExpression { BasicExpression E; public BracketExpression(final BasicExpression e) { E = e; } @Override public double getValue() throws ConstructionException { return E.getValue(); } @Override public void translate() { E.translate(); } @Override public String toString() { return "(" + E.toString() + ")"; } @Override public boolean isNumber() { return E.isNumber(); } @Override public void reset() { E.reset(); } } /** * element = double element = object (with value) */ abstract class ElementaryExpression extends BasicExpression { public static BasicExpression scan(final ExpressionText t) throws ConstructionException { try { final BasicExpression E = DoubleExpression.scan(t); return E; } catch (final Exception e) { } try { final BasicExpression E = ObjectExpression.scan(t); return E; } catch (final ConstructionException e) { throw e; } catch (final Exception e) { } throw new ConstructionException(Zirkel.name("exception.elementary")); } @Override abstract public boolean isNumber(); @Override abstract public double getValue() throws ConstructionException; } /** * E^E */ class PotenzExpression extends BasicExpression { BasicExpression E1, E2; public PotenzExpression(final BasicExpression e1, final BasicExpression e2) { E1 = e1; E2 = e2; } public static BasicExpression scan(final ExpressionText t) throws ConstructionException { final BasicExpression E1 = BasicExpression.scan(t); if (t.next() == '^' || (t.next() == '*' && t.nextnext() == '*')) { if (t.next() == '*') { t.advance(); } t.advance(); return scan(t, E1); } return E1; } public static BasicExpression scan(final ExpressionText t, final BasicExpression E) throws ConstructionException { final BasicExpression E1 = BasicExpression.scan(t); if (t.next() == '^' || (t.next() == '*' && t.nextnext() == '*')) { if (t.next() == '*') { t.advance(); } t.advance(); return scan(t, new PotenzExpression(E, E1)); } return new PotenzExpression(E, E1); } @Override public double getValue() throws ConstructionException { return Math.pow(E1.getValue(), E2.getValue()); } @Override public void translate() { E1.translate(); E2.translate(); } @Override public String toString() { return E1 + "^" + E2; } @Override public void reset() { E1.reset(); E2.reset(); } } /** * -E */ class MinusExpression extends ElementaryExpression { BasicExpression E; public MinusExpression(final BasicExpression e) { E = e; } @Override public double getValue() throws ConstructionException { return -E.getValue(); } public static BasicExpression scan(final ExpressionText t) throws ConstructionException { if (t.next() != '-') { return PotenzExpression.scan(t); } t.advance(); final BasicExpression E1 = PotenzExpression.scan(t); return new MinusExpression(E1); } @Override public void translate() { E.translate(); } @Override public String toString() { return "-" + E.toString(); } @Override public boolean isNumber() { return E.isNumber(); } @Override public void reset() { E.reset(); } } /** * E/E */ class QuotientExpression extends BasicExpression { BasicExpression E1, E2; public QuotientExpression(final BasicExpression e1, final BasicExpression e2) { E1 = e1; E2 = e2; } public static BasicExpression scan(final ExpressionText t, final BasicExpression E) throws ConstructionException { final BasicExpression E1 = MinusExpression.scan(t); if (t.next() == '/') { t.advance(); return scan(t, new QuotientExpression(E, E1)); } else if (t.next() == '*' && t.nextnext() != '*') { t.advance(); return ProductExpression.scan(t, new QuotientExpression(E, E1)); } return new QuotientExpression(E, E1); } @Override public double getValue() throws ConstructionException { return E1.getValue() / E2.getValue(); } @Override public void translate() { E1.translate(); E2.translate(); } @Override public String toString() { return E1 + "/" + E2; } @Override public void reset() { E1.reset(); E2.reset(); } } /** * E*E */ class ProductExpression extends BasicExpression { BasicExpression E1, E2; public ProductExpression(final BasicExpression e1, final BasicExpression e2) { E1 = e1; E2 = e2; } public static BasicExpression scan(final ExpressionText t) throws ConstructionException { final BasicExpression E1 = MinusExpression.scan(t); if (t.next() == '*') { t.advance(); return scan(t, E1); } else if (t.next() == '/') { t.advance(); return QuotientExpression.scan(t, E1); } return E1; } public static BasicExpression scan(final ExpressionText t, final BasicExpression E) throws ConstructionException { final BasicExpression E1 = MinusExpression.scan(t); if (t.next() == '*' && t.nextnext() != '*') { t.advance(); return scan(t, new ProductExpression(E, E1)); } else if (t.next() == '/') { t.advance(); return QuotientExpression.scan(t, new ProductExpression(E, E1)); } return new ProductExpression(E, E1); } @Override public double getValue() throws ConstructionException { return E1.getValue() * E2.getValue(); } @Override public void translate() { E1.translate(); E2.translate(); } @Override public String toString() { return E1 + "*" + E2; } @Override public void reset() { E1.reset(); E2.reset(); } } /** * E-E */ class DifferenceExpression extends BasicExpression { BasicExpression E1, E2; public DifferenceExpression(final BasicExpression e1, final BasicExpression e2) { E1 = e1; E2 = e2; } public static BasicExpression scan(final ExpressionText t, final BasicExpression E) throws ConstructionException { final BasicExpression E1 = ProductExpression.scan(t); if (t.next() == '+') { t.advance(); return SumExpression.scan(t, new DifferenceExpression(E, E1)); } else if (t.next() == '-') { t.advance(); return scan(t, new DifferenceExpression(E, E1)); } return new DifferenceExpression(E, E1); } @Override public double getValue() throws ConstructionException { return E1.getValue() - E2.getValue(); } @Override public void translate() { E1.translate(); E2.translate(); } @Override public String toString() { return E1 + "-" + E2; } @Override public void reset() { E1.reset(); E2.reset(); } } /** * E+E */ class SumExpression extends BasicExpression { BasicExpression E1, E2; public SumExpression(final BasicExpression e1, final BasicExpression e2) { E1 = e1; E2 = e2; } public static BasicExpression scan(final ExpressionText t) throws ConstructionException { final BasicExpression E1 = ProductExpression.scan(t); if (t.next() == '+') { t.advance(); return scan(t, E1); } else if (t.next() == '-') { t.advance(); return DifferenceExpression.scan(t, E1); } return E1; } public static BasicExpression scan(final ExpressionText t, final BasicExpression E) throws ConstructionException { final BasicExpression E1 = ProductExpression.scan(t); if (t.next() == '+') { t.advance(); return scan(t, new SumExpression(E, E1)); } else if (t.next() == '-') { t.advance(); return DifferenceExpression.scan(t, new SumExpression(E, E1)); } return new SumExpression(E, E1); } @Override public double getValue() throws ConstructionException { return E1.getValue() + E2.getValue(); } @Override public void translate() { E1.translate(); E2.translate(); } @Override public String toString() { return E1 + "+" + E2; } @Override public void reset() { E1.reset(); E2.reset(); } } /** * Diverse Vegleiche. */ class CompareExpression extends BasicExpression { BasicExpression E1, E2; int Operator; final static int LESS = 1, LESSEQUAL = 2, GREATER = 3, GREATEREQUAL = 4, EQUAL = 5, ABOUTEQUAL = 6; public CompareExpression(final BasicExpression e1, final BasicExpression e2, final int op) { E1 = e1; E2 = e2; Operator = op; } public static BasicExpression scan(final ExpressionText t) throws ConstructionException { final BasicExpression E1 = SumExpression.scan(t); final char c = t.next(); int op = 0; if (c == '<') { t.advance(); if (t.next(true) == '=') { op = LESSEQUAL; t.advance(); } else { op = LESS; } } else if (c == '>') { t.advance(); if (t.next(true) == '=') { op = GREATEREQUAL; t.advance(); } else { op = GREATER; } } else if (c == '=') { t.advance(); if (t.next(true) == '=') { t.advance(); } op = EQUAL; } else if (c == '~') { t.advance(); if (t.next(true) == '=') { t.advance(); } op = ABOUTEQUAL; } else { return E1; } final BasicExpression E2 = SumExpression.scan(t); return new CompareExpression(E1, E2, op); } @Override public double getValue() throws ConstructionException { switch (Operator) { case LESS: return logical(E1.getValue() < E2.getValue()); case LESSEQUAL: return logical(E1.getValue() <= E2.getValue()); case GREATER: return logical(E1.getValue() > E2.getValue()); case GREATEREQUAL: return logical(E1.getValue() >= E2.getValue()); case EQUAL: // return logical(E1.getValue()==E2.getValue()); return logical(Math.abs(E1.getValue() - E2.getValue()) < 1e-14); case ABOUTEQUAL: return logical(Math.abs(E1.getValue() - E2.getValue()) < 1e-10); } return 0.0; } public double logical(final boolean flag) { if (flag) { return 1.0; } else { return 0.0; } } @Override public void translate() { E1.translate(); E2.translate(); } @Override public String toString() { switch (Operator) { case LESS: return E1 + "<" + E2; case LESSEQUAL: return E1 + "<=" + E2; case GREATER: return E1 + ">" + E2; case GREATEREQUAL: return E1 + ">=" + E2; case EQUAL: return E1 + "==" + E2; case ABOUTEQUAL: return E1 + "~=" + E2; } return ""; } @Override public void reset() { E1.reset(); E2.reset(); } @Override public boolean isLogical() { return true; } } /** * ! CE */ class NotExpression extends BasicExpression { BasicExpression E1; public NotExpression(final BasicExpression e1) { E1 = e1; } public static BasicExpression scan(final ExpressionText t) throws ConstructionException { if (t.next() != '!') { return CompareExpression.scan(t); } t.advance(); final BasicExpression E1 = CompareExpression.scan(t); return new NotExpression(E1); } @Override public double getValue() throws ConstructionException { if (E1.getValue() == 0.0) { return 1.0; } else { return 0.0; } } @Override public void translate() { E1.translate(); } @Override public String toString() { return "!" + E1; } @Override public void reset() { E1.reset(); } @Override public boolean isLogical() { return true; } } /** * /* E & E */ class AndExpression extends BasicExpression { BasicExpression E1, E2; public AndExpression(final BasicExpression e1, final BasicExpression e2) { E1 = e1; E2 = e2; } public static BasicExpression scan(final ExpressionText t) throws ConstructionException { final BasicExpression E1 = NotExpression.scan(t); if (t.next() == '&') { t.advance(); if (t.next(true) == '&') { t.advance(); } return scan(t, E1); } return E1; } public static BasicExpression scan(final ExpressionText t, final BasicExpression E) throws ConstructionException { final BasicExpression E1 = NotExpression.scan(t); if (t.next() == '&') { t.advance(); return scan(t, new AndExpression(E, E1)); } return new AndExpression(E, E1); } @Override public double getValue() throws ConstructionException { if (E1.getValue() != 0.0 && E2.getValue() != 0.0) { return 1.0; } else { return 0.0; } } @Override public void translate() { E1.translate(); E2.translate(); } @Override public String toString() { return E1 + "&&" + E2; } @Override public void reset() { E1.reset(); E2.reset(); } @Override public boolean isLogical() { return true; } } /** * E | E */ class OrExpression extends BasicExpression { BasicExpression E1, E2; public OrExpression(final BasicExpression e1, final BasicExpression e2) { E1 = e1; E2 = e2; } public static BasicExpression scan(final ExpressionText t) throws ConstructionException { final BasicExpression E1 = AndExpression.scan(t); if (t.next() == '|') { t.advance(); if (t.next(true) == '|') { t.advance(); } return scan(t, E1); } return E1; } public static BasicExpression scan(final ExpressionText t, final BasicExpression E) throws ConstructionException { final BasicExpression E1 = AndExpression.scan(t); if (t.next() == '|') { t.advance(); if (t.next(true) == '|') { t.advance(); } return scan(t, new OrExpression(E, E1)); } return new OrExpression(E, E1); } @Override public double getValue() throws ConstructionException { if (E1.getValue() != 0.0 || E2.getValue() != 0.0) { return 1.0; } else { return 0.0; } } @Override public void translate() { E1.translate(); E2.translate(); } @Override public String toString() { return E1 + "||" + E2; } @Override public void reset() { E1.reset(); E2.reset(); } @Override public boolean isLogical() { return true; } } class TopExpression extends BasicExpression { public static BasicExpression scan(final ExpressionText t) throws ConstructionException { return OrExpression.scan(t); } } public class Expression { String S; BasicExpression E; boolean Valid; String ErrorText; DepList DL; double Value; boolean HasDoubleValue = false; boolean ForcePlus = false; /** * Create a new expression * * @param s * expression string * @param c * construction to search for objects * @param o * "this" object * @param var * variable names used in the referring object * @param nocircles * prevent circular exressions */ public Expression(String s, final Construction c, final ConstructionObject o, final String var[], final boolean nocircles) { if (s.startsWith("+")) { ForcePlus = true; s = s.substring(1); } S = s; DL = new DepList(); try { final ExpressionText t = new ExpressionText(s, c, o, DL, nocircles); t.setVar(var); E = TopExpression.scan(t); if (t.next() != 0) { throw new ConstructionException(Zirkel .name("exception.superfluous")); } Valid = true; } catch (final Exception e) { Valid = false; ErrorText = (e.toString()); // e.printStackTrace(); } } public Expression(final String s, final Construction c, final ConstructionObject o, final String var[]) { this(s, c, o, var, false); } public Expression(final String s, final Construction c, final ConstructionObject o) { this(s, c, o, null, false); } public boolean isValid() { return Valid; } public String getErrorText() { return ErrorText; } public double getValue() throws ConstructionException { if (HasDoubleValue) { return Value; } if (!Valid) { throw new ConstructionException(Zirkel.name("exception.expression")); } final double x = E.getValue(); if (Double.isNaN(x) || Double.isInfinite(x)) { throw new ConstructionException(Zirkel.name("exception.value")); } return x; } public void setValue(final double x) { HasDoubleValue = true; ForcePlus = false; DL = new DepList(); Value = x; } @Override public String toString() { if (HasDoubleValue) { return "" + Value; } if (Valid) { return E.toString(); } else { return S; } } public DepList getDepList() { return DL; } public void translate() { E.translate(); DL.translate(); } public boolean isNumber() { return HasDoubleValue || E.isNumber(); } public void reset() { if (E != null && Valid) { E.reset(); } } public boolean isForcePlus() { return ForcePlus; } public void setForcePlus(final boolean flag) { ForcePlus = flag; } public ConstructionObject getObject() { if (E instanceof ObjectExpression) { return ((ObjectExpression) E).getObject(); } else { return null; } } /** * Add the objects this expression depends on to the static dependency list * of the current object. */ public void addDep(final ConstructionObject o) { final Enumeration e = getDepList().elements(); while (e.hasMoreElements()) { ConstructionObject.DL.add((ConstructionObject) e.nextElement()); } } } ./src/rene/zirkel/expression/CVS/Root0000644000175000017500000000007411132354034016466 0ustar yvesyves:ext:erichake@carmetal.cvs.sourceforge.net:/cvsroot/carmetal./src/rene/zirkel/expression/Secant.java0000640000175000017500000000320311133127262017240 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.expression; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.Evaluator; public class Secant { public static double compute(final Evaluator F, double a, double b, final double eps) throws ConstructionException { double ay = F.evaluateF(a), by = F.evaluateF(b); double c = (a + b) / 2; if (ay * by > eps) throw new ConstructionException(""); while (Math.abs(b - a) > eps) { final double cy = F.evaluateF(c); if (Math.abs(cy) < eps) return c; if (cy * ay > 0) { if (Math.abs(ay - cy) < eps) { a = c; ay = cy; c = (a + b) / 2; } else { final double d = a - ay * (a - c) / (ay - cy); if (d > b || d < a) { a = c; ay = cy; c = (a + b) / 2; } else { a = c; ay = cy; c = d; } } } else { final double d = a - ay * (a - c) / (ay - cy); b = c; by = cy; c = d; } } return c; } } ./src/rene/zirkel/expression/ConvexMin.java0000640000175000017500000000406611133127256017744 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.expression; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.Evaluator; public class ConvexMin { public static double computeMin(final Evaluator F, double a, double b, final double eps) throws ConstructionException { final double lambda = (Math.sqrt(5) - 1) / 2; double x2 = lambda * a + (1 - lambda) * b; double y2 = F.evaluateF(x2); double x3 = (1 - lambda) * a + lambda * b; double y3 = F.evaluateF(x3); while (b - a > eps) { if (y2 < y3) { b = x3; x3 = x2; y3 = y2; x2 = lambda * a + (1 - lambda) * b; y2 = F.evaluateF(x2); } else { a = x2; x2 = x3; y2 = y3; x3 = (1 - lambda) * a + lambda * b; y3 = F.evaluateF(x3); } } return (a + b) / 2; } public static double computeMax(final Evaluator F, double a, double b, final double eps) throws ConstructionException { final double lambda = (Math.sqrt(5) - 1) / 2; double x2 = lambda * a + (1 - lambda) * b; double y2 = F.evaluateF(x2); double x3 = (1 - lambda) * a + lambda * b; double y3 = F.evaluateF(x3); while (b - a > eps) { if (y2 > y3) { b = x3; x3 = x2; y3 = y2; x2 = lambda * a + (1 - lambda) * b; y2 = F.evaluateF(x2); } else { a = x2; x2 = x3; y2 = y3; x3 = (1 - lambda) * a + lambda * b; y3 = F.evaluateF(x3); } } return (a + b) / 2; } } ./src/rene/zirkel/expression/Expression.java0000640000175000017500000015405111303264165020175 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.expression; import java.util.Enumeration; import rene.util.MyVector; import rene.gui.Global; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.DepList; import rene.zirkel.objects.AngleObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.EquationXYObject; import rene.zirkel.objects.Evaluator; import rene.zirkel.objects.FunctionObject; import rene.zirkel.objects.InsideObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.SimulationObject; import rene.zirkel.objects.TrackObject; import rene.zirkel.objects.UserFunctionObject; /* This file contains classes for computing arithmetic expression. Those classes might be useful elsewhere. However, variables evaluate to sizes of construction objects or values of expressions here. */ /** * This class holds information abut the current position in the scanned text. */ class ExpressionText { char A[]; int N; Construction C; ConstructionObject O; DepList DL; String Var[]; boolean NoCircles; public ExpressionText(final String S, final Construction c, final ConstructionObject o, final DepList dl, final boolean nocircles) { A = S.toCharArray(); N = 0; C = c; O = o; DL = dl; NoCircles = nocircles; } public void setVar(final String t[]) { Var = t; } public boolean isVar(final String var) { if (Var == null) { return false; } for (final String element : Var) { if (element.equals(var)) { return true; } } return false; } public char next(final boolean quotes) { if (!quotes) { skipblanks(); } if (N < A.length) { return A[N]; } else { return (char) 0; } } public char next() { return next(false); } public char nextnext() { skipblanks(); if (N + 1 < A.length) { return A[N + 1]; } else { return (char) 0; } } public void advance(final boolean quotes) { if (!quotes) { skipblanks(); } N++; } public void advance() { advance(false); } public Construction getConstruction() { return C; } public ConstructionObject getObject() { return O; } public DepList getDepList() { return DL; } public void skipblanks() { while (N < A.length && A[N] == ' ') { N++; } } public boolean nocircles() { return NoCircles; } } /** * basic = (sum) basic = elementary */ class BasicExpression { BasicExpression E; static final int MINUS = -1, PLUS = 1; public static BasicExpression scan(final ExpressionText t) throws ConstructionException { if (t.next() == '-') { t.advance(); return scan(t, MINUS); } if (t.next() == '+') { t.advance(); return scan(t, PLUS); } if (t.next() == '(') { return new BracketExpression(scanBracket(t)); } return ElementaryExpression.scan(t); } public static BasicExpression scan(final ExpressionText t, final int sign) throws ConstructionException { if (sign == MINUS) { if (t.next() == '(') { return new MinusExpression(scanBracket(t)); } return new MinusExpression(ElementaryExpression.scan(t)); } if (t.next() == '(') { return scanBracket(t); } return ElementaryExpression.scan(t); } public static BasicExpression scanBracket(final ExpressionText t) throws ConstructionException { t.advance(); final BasicExpression E = TopExpression.scan(t); if (t.next() == ')') { t.advance(); } else { throw new ConstructionException(Global.name("exception.bracket")); } return E; } public double getValue() throws ConstructionException { throw new ConstructionException(""); } public void translate() { } public boolean isNumber() { return false; } public void reset() { } public boolean isLogical() { return false; } } /** * double = 34.45879 double = +34.45879 double = -34.45879 */ class DoubleExpression extends BasicExpression { double X; public DoubleExpression(final double x) { X = x; } public static BasicExpression scan(final ExpressionText t) throws ConstructionException { boolean Punkt = false, Digit = false, Expo = false; String num = ""; char c = t.next(); if ((c == '+') || (c == '-')) { num += c; t.advance(); } while (true) { c = t.next(); if (c >= '0' && c <= '9') { num += c; t.advance(); Digit = true; } else if (c == '.') { if (Punkt) { throw new ConstructionException(Global.name("exception.dot")); } Punkt = true; num += c; t.advance(); } else if ((Digit) && (c == 'E')) { if (Expo) { throw new ConstructionException( "Exponential notation error"); } Expo = true; num += c; t.advance(); c = t.next(); if ((c == '+') || (c == '-')) { num += c; t.advance(); } } else { break; } } if (!Digit) { throw new ConstructionException(Global.name("exception.nodigit")); } return new DoubleExpression(Double.valueOf(num).doubleValue()); } @Override public double getValue() throws ConstructionException { return X; } @Override public String toString() { String s = "" + X; if (s.endsWith(".0")) { s = s.substring(0, s.length() - 2); } return s; } @Override public void translate() { } @Override public boolean isNumber() { return true; } } /** * object = @name object = @"name" */ class FindObjectExpression extends ObjectExpression implements Translator { String Name; String Var = null; Construction C; ConstructionObject O = null; // found object public FindObjectExpression(final String name, final Construction c) { super(null); Name = name; C = c; } @Override public ConstructionObject getObject() { if (C == null) { return null; } if (O != null && O.getConstruction() == C && O.isInConstruction() && O.getName().equals(Name)) { return O; } return O = C.find(Name); } @Override public double getValue() throws ConstructionException { if (C == null) { throw new InvalidException(""); } if (O != null && O.getConstruction() == C && O.isInConstruction() && O.getName().equals(Name)) { return O.getValue(); } O = C.find(Name); if (O == null) { throw new InvalidException(""); } return O.getValue(); } public static BasicExpression scan(final ExpressionText t, final boolean quotes) throws ConstructionException { if (!quotes && t.next() == '\"') { t.advance(); final BasicExpression E = scan(t, true); if (t.next() != '\"') { throw new ConstructionException(Global.name("exception.quotes")); } t.advance(); return E; } final StringBuffer b = new StringBuffer(); while (true) { final char c = t.next(quotes); if (!(Character.isLetterOrDigit(c) || c == '\\' || c == '\'' || (quotes && c != '\"' && c != 0) || (quotes && c == ' '))) { break; } b.append(c); t.advance(quotes); } if (!quotes && t.next() == '(') { return FunctionExpression.scan(t, b.toString()); } final String s = b.toString(); return new FindObjectExpression(s, t.getConstruction()); } public static BasicExpression scan(final ExpressionText t) throws ConstructionException { return scan(t, false); } @Override public void translate() { C = C.getTranslation(); C.addTranslator(this); } @Override public String toString() { if (Var != null) { return Var; } return "@" + ObjectExpression.quote(Name); } /** * Used to translate expressions with @P in macros */ public void laterTranslate(final Construction from) { if (C == null) { return; } final ConstructionObject o = from.find(Name); if (o == null || o.getTranslation() == null) { from.addError(ConstructionObject.text1(Global.name("warning.macrodefinition"), Name)); return; } Name = o.getTranslation().getName(); O = null; } } /** * object = name object = "name" */ class ObjectExpression extends BasicExpression { ConstructionObject O; String Var = null; public ObjectExpression(final ConstructionObject o) { O = o; } @Override public double getValue() throws ConstructionException { if (!O.valid()) { throw new InvalidException(""); } if (Var != null && (O instanceof FunctionObject)) { return ((FunctionObject) O).getValue(Var); } if (Var != null && (O instanceof UserFunctionObject)) { return ((UserFunctionObject) O).getValue(Var); } if (Var != null && (O instanceof EquationXYObject)) { return ((EquationXYObject) O).getValue(Var); } return O.getValue(); } public ConstructionObject getObject() { return O; } public static BasicExpression scan(final ExpressionText t, final boolean quotes) throws ConstructionException { if (!quotes && t.next() == '\"') { t.advance(); final BasicExpression E = scan(t, true); if (t.next() != '\"') { throw new ConstructionException(Global.name("exception.quotes")); } t.advance(); return E; } final StringBuffer b = new StringBuffer(); while (true) { final char c = t.next(quotes); if (!(Character.isLetterOrDigit(c) || c == '\\' || c == '\'' || (quotes && c != '\"' && c != 0) || (quotes && c == ' '))) { break; } b.append(c); t.advance(quotes); } if (!quotes && t.next() == '(') { return FunctionExpression.scan(t, b.toString()); } final String s = b.toString(); if (s.equals("pi")) { return new ConstantExpression("pi", Math.PI); } if (s.equals("valid")) { return new ValidExpression(true); } if (s.equals("invalid")) { return new ValidExpression(false); } if (s.equals("this")) { t.getDepList().add(t.getObject()); return new ObjectExpression(t.getObject()); } if (s.equals("windoww")) { return new ConstructionExpression(t.getConstruction(), ConstructionExpression.WIDTH); } if (s.equals("windowh")) { return new ConstructionExpression(t.getConstruction(), ConstructionExpression.HEIGHT); } if (s.equals("windowcx")) { return new ConstructionExpression(t.getConstruction(), ConstructionExpression.CENTERX); } if (s.equals("windowcy")) { return new ConstructionExpression(t.getConstruction(), ConstructionExpression.CENTERY); } if (s.equals("pixel")) { return new ConstructionExpression(t.getConstruction(), ConstructionExpression.PIXEL); } if (t.isVar(s)) { final ObjectExpression oe = new ObjectExpression(t.getObject()); oe.Var = s; return oe; } ConstructionObject o = t.getConstruction().findInclusive(s, t.getObject()); if (o == null) { o = t.getConstruction().find(s); if (o == null) { if (t.getConstruction().loading()) { return new FindObjectExpression(s, t.getConstruction()); } else { throw new ConstructionException(Global.name("exception.notfound") + " (" + s + ")"); } } // System.out.println("---"); // System.out.println(o.getName()+" "+t.getObject().getName()); // System.out.println(t.getConstruction().dependsOn(o,t.getObject())); if (t.getConstruction().dependsOn(o, t.getObject())) { if (t.nocircles()) { throw new ConstructionException(ConstructionObject.text1( Global.name("exception.depends"), s)); } return new FindObjectExpression(s, t.getConstruction()); } t.getConstruction().needsOrdering(); } t.getDepList().add(o); return new ObjectExpression(o); } public static BasicExpression scan(final ExpressionText t) throws ConstructionException { if (t.next() == '@') { t.advance(); return FindObjectExpression.scan(t); } return scan(t, false); } @Override public void translate() { O = O.getTranslation(); } @Override public String toString() { if (Var != null) { return Var; } return quote(O.getName()); } static public String quote(final String name) { boolean quotes = false; for (int i = 0; i < name.length(); i++) { if (!Character.isLetterOrDigit(name.charAt(i))) { quotes = true; break; } } if (quotes) { return "\"" + name + "\""; } else { return name; } } } /** * @author Rene * * Evaluates a user funktion (a FunctionObject). The Y-expression of * this function is used. * */ class UserFunctionExpression extends BasicExpression { ConstructionObject F; BasicExpression E[]; double X[]; public UserFunctionExpression(final ConstructionObject f, final BasicExpression e[]) { F = f; E = e; X = new double[E.length]; } @Override public double getValue() throws ConstructionException { for (int i = 0; i < E.length; i++) { X[i] = E[i].getValue(); } if (F instanceof FunctionObject) { return ((FunctionObject) F).evaluateF(X); } return ((UserFunctionObject) F).evaluateF(X); } @Override public void translate() { for (final BasicExpression element : E) { element.translate(); } if (F instanceof FunctionObject) { F = (FunctionObject) F.getTranslation(); } else { F = (UserFunctionObject) F.getTranslation(); } } @Override public void reset() { for (final BasicExpression element : E) { element.reset(); } } @Override public String toString() { String ex = E[0].toString(); for (int i = 1; i < E.length; i++) { ex = ex + "," + E[i].toString(); } return F.getName() + "(" + ex + ")"; } } class SimulationExpression extends BasicExpression { ConstructionObject SO; ConstructionObject Container, F; BasicExpression E; Construction C; public SimulationExpression(final ConstructionObject so, final ConstructionObject c, final BasicExpression e, final ConstructionObject f) { SO = so; Container = c; E = e; F = f; C = c.getConstruction(); } @Override public double getValue() throws ConstructionException { if (C.BlockSimulation) { throw new ConstructionException(Global.name("exception.simmulation.block")); } try { final double aa = E.getValue(); C.BlockSimulation = true; ((SimulationObject) SO).setSimulationValue(aa); F.getConstruction().validate(F, SO); final double res = F.getValue(); ((SimulationObject) SO).resetSimulationValue(); F.getConstruction().validate(F, SO); C.BlockSimulation = false; return res; } catch (final Exception e) { C.BlockSimulation = false; throw new ConstructionException(""); } } @Override public void translate() { E.translate(); SO = SO.getTranslation(); Container = Container.getTranslation(); F = F.getTranslation(); } @Override public void reset() { E.reset(); } @Override public String toString() { return "simulate(" + SO.getName() + "," + E.toString() + "," + F.getName() + ")"; } } /** * function = sin(parameter) etc. function = x(point) function = y(point) */ class FunctionExpression extends BasicExpression { int F; BasicExpression E[]; int NParams; public FunctionExpression(final int f, final BasicExpression e) { F = f; E = new BasicExpression[1]; E[0] = e; NParams = 1; } public FunctionExpression(final int f, final BasicExpression e, final BasicExpression ee) { F = f; E = new BasicExpression[2]; E[0] = e; E[1] = ee; NParams = 2; } public FunctionExpression(final int f, final BasicExpression e, final BasicExpression ee, final BasicExpression eee) { F = f; E = new BasicExpression[3]; E[0] = e; E[1] = ee; E[2] = eee; NParams = 3; } final static String Functions[] = { "sin", "cos", "tan", "arcsin", "arccos", "arctan", "sqrt", "exp", "log", "round", "x", "y", "floor", "ceil", "d", "a", "angle180", "angle360", "abs", "scale", "sign", "d", "sum", "if", "deg", "rad", "integrate", "zero", "diff", "min", "max", "length", "rsin", "rcos", "rtan", "rarcsin", "rarccos", "rarctan", "sinhyp", "coshyp", "z", "simulate", "inside", "random", "old" }; final static int NX = 10, NY = 11, ND = 14, NA = 15, NS = 19, NSUM = 22, NIF = 23, NINT = 26, NZERO = 27, NDIFF = 28, NMIN = 29, NMAX = 30, NLENGTH = 31, NZ = 40, NSIM = 41, NINSIDE = 42, NRANDOM = 43, NOLD = 44; public static BasicExpression scan(final ExpressionText t, final String name) throws ConstructionException { int f = -1; for (int i = 0; i < Functions.length; i++) { if (name.equals(Functions[i])) { f = i; break; } } if (f < 0) { boolean forward = false; ConstructionObject o = t.getConstruction() .find(name, t.getObject()); if (o == null) { o = t.getConstruction().find(name); forward = true; } if (o != null && (o instanceof FunctionObject || o instanceof UserFunctionObject) && !(o == t.getObject()) && !t.getConstruction().dependsOn(o, t.getObject())) { if (t.next() != '(') { throw new ConstructionException(Global.name("exception.parameter")); } t.advance(); final MyVector ex = new MyVector(); while (true) { final BasicExpression e = TopExpression.scan(t); ex.addElement(e); if (t.next() == ')') { break; } if (t.next() != ',') { throw new ConstructionException(Global.name("exception.parameter")); } t.advance(); } t.advance(); t.getDepList().add(o); if (forward) { t.getConstruction().needsOrdering(); } final BasicExpression exp[] = new BasicExpression[ex.size()]; ex.copyInto(exp); return new UserFunctionExpression(o, exp); } throw new ConstructionException(Global.name("exception.function") + " (" + name + ")"); } if (t.next() != '(') { throw new ConstructionException(Global.name("exception.parameter")); } t.advance(); BasicExpression e = TopExpression.scan(t); if (f == NX || f == NY || f == NZ) { if (e instanceof FindObjectExpression) { e = new FunctionExpression(f, e); } else if (e instanceof ObjectExpression && ((ObjectExpression) e).getObject() instanceof PointObject) { e = new FunctionExpression(f, e); } else if (e instanceof ObjectExpression && ((ObjectExpression) e).getObject() instanceof PrimitiveLineObject) { e = new FunctionExpression(f, e); } else { throw new ConstructionException(Global.name("exception.parameter") + " (" + Functions[f] + ")"); } } else if (f == ND) { if (t.next() != ',') { e = new DExpression(e); } else { t.advance(); final BasicExpression ee = TopExpression.scan(t); if (((e instanceof ObjectExpression && ((ObjectExpression) e) .getObject() instanceof PointObject) || e instanceof FindObjectExpression) && ((ee instanceof ObjectExpression && ((ObjectExpression) ee) .getObject() instanceof PointObject) || ee instanceof FindObjectExpression)) { e = new FunctionExpression(f, e, ee); } else { throw new ConstructionException(Global.name("exception.parameter") + " (" + Functions[f] + ")"); } } } else if (f == NOLD) { if (t.next() != ',') { e = new OldExpression(e); } else { t.advance(); final BasicExpression ee = TopExpression.scan(t); e = new OldExpression(e, ee); } } else if (f == NA) { if (t.next() != ',') { throw new ConstructionException(Global.name("exception.parameter")); } t.advance(); final BasicExpression ee = TopExpression.scan(t); if (t.next() != ',') { throw new ConstructionException(Global.name("exception.parameter")); } t.advance(); final BasicExpression eee = TopExpression.scan(t); if (((e instanceof ObjectExpression && ((ObjectExpression) e) .getObject() instanceof PointObject) || e instanceof FindObjectExpression) && ((ee instanceof ObjectExpression && ((ObjectExpression) ee) .getObject() instanceof PointObject) || ee instanceof FindObjectExpression) && ((eee instanceof ObjectExpression && ((ObjectExpression) eee) .getObject() instanceof PointObject) || eee instanceof FindObjectExpression)) { e = new FunctionExpression(f, e, ee, eee); } else { throw new ConstructionException(Global.name("exception.parameter") + " (" + Functions[f] + ")"); } } else if (f == NS) { if (t.next() != ',') { throw new ConstructionException(Global.name("exception.parameter")); } t.advance(); final BasicExpression ee = TopExpression.scan(t); if (t.next() != ',') { throw new ConstructionException(Global.name("exception.parameter")); } t.advance(); final BasicExpression eee = TopExpression.scan(t); e = new FunctionExpression(f, e, ee, eee); } else if (f == NSUM) { if (t.next() != ',') { e = new CumSumExpression(e); } else { t.advance(); final BasicExpression ee = TopExpression.scan(t); e = new CumSumExpression(e, ee); } } else if (f == NRANDOM) { if (t.next() != ',') { e = new RandomExpression(e); } else { t.advance(); final BasicExpression ee = TopExpression.scan(t); e = new RandomExpression(e, ee); } } else if (f == NIF) { if (t.next() != ',') { throw new ConstructionException(Global.name("exception.parameter")); } t.advance(); final BasicExpression ee = TopExpression.scan(t); if (t.next() != ',') { throw new ConstructionException(Global.name("exception.parameter")); } t.advance(); final BasicExpression eee = TopExpression.scan(t); e = new IfExpression(e, ee, eee); } else if (f == NINT || f == NZERO || f == NMIN || f == NMAX || f == NLENGTH) { if (!(e instanceof ObjectExpression)) { if (f == NMAX || f == NMIN) { if (t.next() != ',') { throw new ConstructionException(Global.name("exception.parameter")); } t.advance(); final BasicExpression ee = TopExpression.scan(t); e = new FunctionExpression(f, e, ee); } else { throw new ConstructionException(Global.name("exception.parameter") + " (" + Functions[f] + ")"); } } else { final boolean function = ((ObjectExpression) e).getObject() instanceof Evaluator || ((ObjectExpression) e).getObject() instanceof TrackObject; if ((f == NINT || f == NLENGTH) && t.next() == ')') { if (!function) { throw new ConstructionException(Global.name("exception.parameter") + " (" + Functions[f] + ")"); } e = new FunctionExpression(f, e); } else if (f == NLENGTH) { throw new ConstructionException(Global.name("exception.parameter")); } else { if (t.next() != ',') { throw new ConstructionException(Global.name("exception.parameter")); } t.advance(); final BasicExpression ee = TopExpression.scan(t); if (function) { if (t.next() != ',') { throw new ConstructionException(Global.name("exception.parameter")); } t.advance(); final BasicExpression eee = TopExpression.scan(t); e = new FunctionExpression(f, e, ee, eee); } else if (f == NMIN || f == NMAX) { e = new FunctionExpression(f, e, ee); } else { throw new ConstructionException(Global.name("exception.parameter") + " (" + Functions[f] + ")"); } } } } else if (f == NDIFF) { if (!(e instanceof ObjectExpression) || !(((ObjectExpression) e).getObject() instanceof Evaluator)) { throw new ConstructionException(Global.name("exception.parameter") + " (" + Functions[f] + ")"); } if (t.next() != ',') { throw new ConstructionException(Global.name("exception.parameter")); } t.advance(); final BasicExpression ee = TopExpression.scan(t); e = new FunctionExpression(f, e, ee); } else if (f == NSIM) { if (t.next() != ',') { throw new ConstructionException(Global.name("exception.parameter")); } t.advance(); final BasicExpression ee = TopExpression.scan(t); if (t.next() != ',') { throw new ConstructionException(Global.name("exception.parameter")); } t.advance(); final BasicExpression eee = TopExpression.scan(t); if ((e instanceof ObjectExpression && ((ObjectExpression) e) .getObject() instanceof SimulationObject) || !(eee instanceof ObjectExpression)) { final ConstructionObject SO = ((ObjectExpression) e) .getObject(); if (t.getConstruction().dependsOn(SO, t.getObject())) { throw new ConstructionException(Global.name("exception.parameter") + " (" + Functions[f] + ")"); } e = new SimulationExpression( ((ObjectExpression) e).getObject(), t.getObject(), ee, ((ObjectExpression) eee).getObject()); } else { throw new ConstructionException(Global.name("exception.parameter") + " (" + Functions[f] + ")"); } } else if (f == NINSIDE) { if (t.next() != ',') { throw new ConstructionException(Global.name("exception.parameter")); } t.advance(); final BasicExpression ee = TopExpression.scan(t); if (((e instanceof ObjectExpression && ((ObjectExpression) e) .getObject() instanceof PointObject) || e instanceof FindObjectExpression) && ((ee instanceof ObjectExpression && ((ObjectExpression) ee) .getObject() instanceof InsideObject) || ee instanceof FindObjectExpression)) { e = new FunctionExpression(f, e, ee); } else { throw new ConstructionException(Global.name("exception.parameter") + " (" + Functions[f] + ")"); } } else { e = new FunctionExpression(f, e); } if (t.next() != ')') { throw new ConstructionException(Global.name("exception.parameter")); } t.advance(); return e; } @Override public double getValue() throws ConstructionException { PointObject P, PP, PPP; double cc; switch (F) { case NX: cc = getPointLineX(0); return cc; case NY: cc = getPointLineY(0); return cc; case NZ: P = getPoint(0); if (!P.valid()) { throw new InvalidException(Global.name("exception.invalid")); } return P.getZ(); case ND: P = getPoint(0); PP = getPoint(1); if (!P.valid() || !PP.valid()) { throw new InvalidException(Global.name("exception.invalid")); } double dx = P.getX() - PP.getX(); double dy = P.getY() - PP.getY(); return Math.sqrt(dx * dx + dy * dy); case NA: P = getPoint(0); PP = getPoint(1); PPP = getPoint(2); if (!P.valid() || !PP.valid() || !PPP.valid()) { throw new InvalidException(Global.name("exception.invalid")); } dx = P.getX() - PP.getX(); dy = P.getY() - PP.getY(); final double dx1 = PPP.getX() - PP.getX(); final double dy1 = PPP.getY() - PP.getY(); double a = Math.atan2(dx, dy) - Math.atan2(dx1, dy1); a = a / Math.PI * 180; if (a < 0) { a += 360; } if (a > 360) { a -= 360; } return a; case NS: final double x = E[0].getValue(), xa = E[1].getValue(), xb = E[2].getValue(); if (x < xa || x >= xb || xb <= xa) { throw new InvalidException(Global.name("exception.invalid")); } return (x - xa) / (xb - xa); case NINT: if (((ObjectExpression) E[0]).getObject() instanceof Evaluator) { final Evaluator F = (Evaluator) (((ObjectExpression) E[0]) .getObject()); if (E.length > 1) { final double aa = E[1].getValue(), bb = E[2].getValue(); return Romberg.compute(F, aa, bb, 10, 1e-10, 10); } else if (F instanceof FunctionObject) { return ((FunctionObject) F).getIntegral(); } } else { final TrackObject TO = (TrackObject) (((ObjectExpression) E[0]) .getObject()); if (E.length > 1) { final double aa = E[1].getValue(), bb = E[2].getValue(); return TO.getSum(aa, bb); } else { return TO.getSum(); } } case NLENGTH: if (((ObjectExpression) E[0]).getObject() instanceof FunctionObject) { final FunctionObject F = (FunctionObject) (((ObjectExpression) E[0]) .getObject()); return F.getLength(); } else { final TrackObject TO = (TrackObject) (((ObjectExpression) E[0]) .getObject()); return TO.getLength(); } case NZERO: Evaluator F = (Evaluator) (((ObjectExpression) E[0]).getObject()); double aa = E[1].getValue(), bb = E[2].getValue(); return Secant.compute(F, aa, bb, 1e-10); case NDIFF: F = (Evaluator) (((ObjectExpression) E[0]).getObject()); aa = E[1].getValue(); return (F.evaluateF(aa + 1e-7) - F.evaluateF(aa - 1e-7)) / 2e-7; case NMIN: if (NParams == 2) { return Math.min(E[0].getValue(), E[1].getValue()); } else { F = (Evaluator) (((ObjectExpression) E[0]).getObject()); aa = E[1].getValue(); bb = E[2].getValue(); return ConvexMin.computeMin(F, aa, bb, 1e-10); } case NMAX: if (NParams == 2) { return Math.max(E[0].getValue(), E[1].getValue()); } else { F = (Evaluator) (((ObjectExpression) E[0]).getObject()); aa = E[1].getValue(); bb = E[2].getValue(); return ConvexMin.computeMax(F, aa, bb, 1e-10); } case NINSIDE: P = getPoint(0); final InsideObject IO = (InsideObject) (((ObjectExpression) E[1]) .getObject()); return IO.containsInside(P); } double x = E[0].getValue(); switch (F) { case 0: return Math.sin(x / 180 * Math.PI); case 1: return Math.cos(x / 180 * Math.PI); case 2: return Math.tan(x / 180 * Math.PI); case 3: return Math.asin(x) / Math.PI * 180; case 4: return Math.acos(x) / Math.PI * 180; case 5: return Math.atan(x) / Math.PI * 180; case 6: return Math.sqrt(x); case 7: return Math.exp(x); case 8: return Math.log(x); case 9: return Math.round(x); case 12: return Math.floor(x); case 13: return Math.ceil(x); case 16: x = x / 360; x -= Math.floor(x); x = x * 360; if (x < 180) { return x; } else { return (x - 360); } case 17: x /= 360; x -= Math.floor(x); return x * 360; case 18: return Math.abs(x); case 20: if (x > 0) { return 1; } else if (x == 0) { return 0; } else { return -1; } case 24: return (x / Math.PI * 180); case 25: return (x / 180 * Math.PI); case 32: return Math.sin(x); case 33: return Math.cos(x); case 34: return Math.tan(x); case 35: return Math.asin(x); case 36: return Math.acos(x); case 37: return Math.atan(x); case 38: return (Math.exp(x) - Math.exp(-x)) / 2; case 39: return (Math.exp(x) + Math.exp(-x)) / 2; } throw new ConstructionException(""); } public double getPointLineX(final int n) throws ConstructionException { PointObject p; PrimitiveLineObject l; try { p = (PointObject) ((ObjectExpression) E[n]).getObject(); if (!p.valid()) { throw new ConstructionException("exception.invalid"); } return p.getX(); } catch (final Exception e) { try { l = (PrimitiveLineObject) ((ObjectExpression) E[n]).getObject(); if (!l.valid()) { throw new ConstructionException("exception.invalid"); } return l.getDX(); } catch (final Exception ee) { throw new ConstructionException("exception.notfound"); } } } public double getPointLineY(final int n) throws ConstructionException { PointObject p; PrimitiveLineObject l; try { p = (PointObject) ((ObjectExpression) E[n]).getObject(); if (!p.valid()) { throw new ConstructionException("exception.invalid"); } return p.getY(); } catch (final Exception e) { try { l = (PrimitiveLineObject) ((ObjectExpression) E[n]).getObject(); if (!l.valid()) { throw new ConstructionException("exception.invalid"); } return l.getDY(); } catch (final Exception ee) { throw new ConstructionException("exception.notfound"); } } } public PointObject getPoint(final int n) throws ConstructionException { PointObject p; try { p = (PointObject) ((ObjectExpression) E[n]).getObject(); } catch (final Exception e) { throw new ConstructionException("exception.notfound"); } if (!p.valid()) { throw new ConstructionException("exception.invalid"); } return p; } @Override public void translate() { for (int i = 0; i < NParams; i++) { E[i].translate(); } } @Override public void reset() { for (int i = 0; i < NParams; i++) { E[i].reset(); } } @Override public String toString() { String s = Functions[F] + "("; for (int i = 0; i < NParams; i++) { if (i > 0) { s = s + ","; } s = s + E[i]; } return s + ")"; } } class OldExpression extends FunctionExpression { double oldvalue1 = Double.NaN, oldvalue2 = Double.NaN; public OldExpression(final BasicExpression e) { super(NOLD, e); } public OldExpression(final BasicExpression e, final BasicExpression ee) { super(NOLD, e, ee); } @Override public double getValue() throws ConstructionException { final double x = E[0].getValue(); final double p = (NParams > 1) ? E[1].getValue() : 0; if (Double.isNaN(oldvalue1)) { oldvalue1 = x; } if (Double.isNaN(oldvalue2)) { oldvalue2 = x; } if (p == 1) { oldvalue1 = oldvalue2; oldvalue2 = x; } else { if (x != oldvalue2) { oldvalue1 = oldvalue2; oldvalue2 = x; } } return oldvalue1; } @Override public void reset() { super.reset(); } } class DExpression extends FunctionExpression { double Old = 0; double Old1 = 0; boolean start = false; public DExpression(final BasicExpression e) { super(21, e); } @Override public double getValue() throws ConstructionException { if (E[0] instanceof ObjectExpression) { final ConstructionObject o = ((ObjectExpression) E[0]).getObject(); if (o instanceof PointObject) { final PointObject p = (PointObject) o; if (p.dontUpdate()) { return 0; } final double x = p.getX(), y = p.getY(); if (start) { final double res = (x - Old) * (x - Old) + (y - Old1) * (y - Old1); Old = x; Old1 = y; return Math.sqrt(res); } Old = x; Old1 = y; start = true; return 0; } else if (o instanceof AngleObject) { final AngleObject a = (AngleObject) o; final double x = a.getValue(); if (start) { double res = x - Old; if (res < -180) { res += 180; } if (res > 180) { res -= 180; } Old = x; return res; } Old = x; start = true; return 0; } } final double x = E[0].getValue(); double res; if (start) { res = x - Old; } else { res = 0; start = true; } Old = x; return res; } @Override public void reset() { start = false; super.reset(); } } class CumSumExpression extends FunctionExpression { double sum = 0; public CumSumExpression(final BasicExpression e, final BasicExpression ee) { super(22, e, ee); } public CumSumExpression(final BasicExpression e) { super(22, e); } @Override public double getValue() throws ConstructionException { if (NParams > 1) { try { final double x = E[1].getValue(); if (x < 0) { reset(); return sum; } } catch (final Exception e) { sum = 0; return sum; } } sum += E[0].getValue(); return sum; } @Override public void reset() { sum = 0; super.reset(); } } class RandomExpression extends FunctionExpression { double rand = Double.NaN; public RandomExpression(final BasicExpression e, final BasicExpression ee) { super(NRANDOM, e, ee); } public RandomExpression(final BasicExpression e) { super(NRANDOM, e); } @Override public double getValue() throws ConstructionException { if (NParams > 1) { try { final double r = E[0].getValue(); final double p = E[1].getValue(); if ((p == 1) || (Double.isNaN(rand))) { rand = r * Math.random(); } } catch (final Exception e) { rand = 0; return rand; } } else { final double r = E[0].getValue(); rand = r * Math.random(); } return rand; } @Override public void reset() { rand = 0; super.reset(); } } class IfExpression extends FunctionExpression { public IfExpression(final BasicExpression e, final BasicExpression ee, final BasicExpression eee) { super(23, e, ee, eee); } @Override public double getValue() throws ConstructionException { double v = 0; try { v = E[0].getValue(); } catch (final NoValueException e) { if (e.isValid()) { return E[1].getValue(); } else { return E[2].getValue(); } } catch (final ConstructionException e) { return E[2].getValue(); } if (E[0].isLogical()) { if (v == 0) { return E[2].getValue(); } else { return E[1].getValue(); } } return E[1].getValue(); } } /** * constant = pi */ class ConstantExpression extends BasicExpression { double X; String S; public ConstantExpression(final String s, final double x) { X = x; S = s; } @Override public double getValue() throws ConstructionException { return X; } @Override public void translate() { } @Override public String toString() { return S; } } /** * constant depending on construction */ class ConstructionExpression extends BasicExpression { int Type; Construction C; final static int CENTERX = 0, CENTERY = 1, WIDTH = 2, HEIGHT = 3, PIXEL = 4; public ConstructionExpression(final Construction c, final int type) { Type = type; C = c; } @Override public double getValue() throws ConstructionException { if (C == null) { return 0; } switch (Type) { case WIDTH: return C.getW(); case CENTERX: return C.getX(); case CENTERY: return C.getY(); case HEIGHT: return C.getH(); case PIXEL: return C.getPixel(); } return 0; } @Override public void translate() { C = C.getTranslation(); } @Override public String toString() { switch (Type) { case WIDTH: return "windoww"; case CENTERX: return "windowcx"; case CENTERY: return "windowcy"; case HEIGHT: return "windowh"; case PIXEL: return "pixel"; } return ""; } } /** * constant = valid,invalid */ class ValidExpression extends BasicExpression { boolean V; public ValidExpression(final boolean valid) { V = valid; } @Override public double getValue() throws ConstructionException { if (V) { return 0; } else { throw new ConstructionException(""); } } @Override public void translate() { } @Override public String toString() { if (V) { return "valid"; } else { return "invalid"; } } } /** * Bracket = (Basic) */ class BracketExpression extends ElementaryExpression { BasicExpression E; public BracketExpression(final BasicExpression e) { E = e; } @Override public double getValue() throws ConstructionException { return E.getValue(); } @Override public void translate() { E.translate(); } @Override public String toString() { return "(" + E.toString() + ")"; } @Override public boolean isNumber() { return E.isNumber(); } @Override public void reset() { E.reset(); } } /** * element = double element = object (with value) */ abstract class ElementaryExpression extends BasicExpression { public static BasicExpression scan(final ExpressionText t) throws ConstructionException { try { final BasicExpression E = DoubleExpression.scan(t); return E; } catch (final Exception e) { } try { final BasicExpression E = ObjectExpression.scan(t); return E; } catch (final ConstructionException e) { throw e; } catch (final Exception e) { } throw new ConstructionException(Global.name("exception.elementary")); } @Override abstract public boolean isNumber(); @Override abstract public double getValue() throws ConstructionException; } /** * E^E */ class PotenzExpression extends BasicExpression { BasicExpression E1, E2; public PotenzExpression(final BasicExpression e1, final BasicExpression e2) { E1 = e1; E2 = e2; } public static BasicExpression scan(final ExpressionText t) throws ConstructionException { final BasicExpression E1 = BasicExpression.scan(t); if (t.next() == '^' || (t.next() == '*' && t.nextnext() == '*')) { if (t.next() == '*') { t.advance(); } t.advance(); return scan(t, E1); } return E1; } public static BasicExpression scan(final ExpressionText t, final BasicExpression E) throws ConstructionException { final BasicExpression E1 = BasicExpression.scan(t); if (t.next() == '^' || (t.next() == '*' && t.nextnext() == '*')) { if (t.next() == '*') { t.advance(); } t.advance(); return scan(t, new PotenzExpression(E, E1)); } return new PotenzExpression(E, E1); } @Override public double getValue() throws ConstructionException { return Math.pow(E1.getValue(), E2.getValue()); } @Override public void translate() { E1.translate(); E2.translate(); } @Override public String toString() { return E1 + "^" + E2; } @Override public void reset() { E1.reset(); E2.reset(); } } /** * -E */ class MinusExpression extends ElementaryExpression { BasicExpression E; public MinusExpression(final BasicExpression e) { E = e; } @Override public double getValue() throws ConstructionException { return -E.getValue(); } public static BasicExpression scan(final ExpressionText t) throws ConstructionException { if (t.next() != '-') { return PotenzExpression.scan(t); } t.advance(); final BasicExpression E1 = PotenzExpression.scan(t); return new MinusExpression(E1); } @Override public void translate() { E.translate(); } @Override public String toString() { return "-" + E.toString(); } @Override public boolean isNumber() { return E.isNumber(); } @Override public void reset() { E.reset(); } } /** * E/E */ class QuotientExpression extends BasicExpression { BasicExpression E1, E2; public QuotientExpression(final BasicExpression e1, final BasicExpression e2) { E1 = e1; E2 = e2; } public static BasicExpression scan(final ExpressionText t, final BasicExpression E) throws ConstructionException { final BasicExpression E1 = MinusExpression.scan(t); if (t.next() == '/') { t.advance(); return scan(t, new QuotientExpression(E, E1)); } else if (t.next() == '*' && t.nextnext() != '*') { t.advance(); return ProductExpression.scan(t, new QuotientExpression(E, E1)); } return new QuotientExpression(E, E1); } @Override public double getValue() throws ConstructionException { return E1.getValue() / E2.getValue(); } @Override public void translate() { E1.translate(); E2.translate(); } @Override public String toString() { return E1 + "/" + E2; } @Override public void reset() { E1.reset(); E2.reset(); } } /** * E*E */ class ProductExpression extends BasicExpression { BasicExpression E1, E2; public ProductExpression(final BasicExpression e1, final BasicExpression e2) { E1 = e1; E2 = e2; } public static BasicExpression scan(final ExpressionText t) throws ConstructionException { final BasicExpression E1 = MinusExpression.scan(t); if (t.next() == '*') { t.advance(); return scan(t, E1); } else if (t.next() == '/') { t.advance(); return QuotientExpression.scan(t, E1); } return E1; } public static BasicExpression scan(final ExpressionText t, final BasicExpression E) throws ConstructionException { final BasicExpression E1 = MinusExpression.scan(t); if (t.next() == '*' && t.nextnext() != '*') { t.advance(); return scan(t, new ProductExpression(E, E1)); } else if (t.next() == '/') { t.advance(); return QuotientExpression.scan(t, new ProductExpression(E, E1)); } return new ProductExpression(E, E1); } @Override public double getValue() throws ConstructionException { return E1.getValue() * E2.getValue(); } @Override public void translate() { E1.translate(); E2.translate(); } @Override public String toString() { return E1 + "*" + E2; } @Override public void reset() { E1.reset(); E2.reset(); } } /** * E-E */ class DifferenceExpression extends BasicExpression { BasicExpression E1, E2; public DifferenceExpression(final BasicExpression e1, final BasicExpression e2) { E1 = e1; E2 = e2; } public static BasicExpression scan(final ExpressionText t, final BasicExpression E) throws ConstructionException { final BasicExpression E1 = ProductExpression.scan(t); if (t.next() == '+') { t.advance(); return SumExpression.scan(t, new DifferenceExpression(E, E1)); } else if (t.next() == '-') { t.advance(); return scan(t, new DifferenceExpression(E, E1)); } return new DifferenceExpression(E, E1); } @Override public double getValue() throws ConstructionException { return E1.getValue() - E2.getValue(); } @Override public void translate() { E1.translate(); E2.translate(); } @Override public String toString() { return E1 + "-" + E2; } @Override public void reset() { E1.reset(); E2.reset(); } } /** * E+E */ class SumExpression extends BasicExpression { BasicExpression E1, E2; public SumExpression(final BasicExpression e1, final BasicExpression e2) { E1 = e1; E2 = e2; } public static BasicExpression scan(final ExpressionText t) throws ConstructionException { final BasicExpression E1 = ProductExpression.scan(t); if (t.next() == '+') { t.advance(); return scan(t, E1); } else if (t.next() == '-') { t.advance(); return DifferenceExpression.scan(t, E1); } return E1; } public static BasicExpression scan(final ExpressionText t, final BasicExpression E) throws ConstructionException { final BasicExpression E1 = ProductExpression.scan(t); if (t.next() == '+') { t.advance(); return scan(t, new SumExpression(E, E1)); } else if (t.next() == '-') { t.advance(); return DifferenceExpression.scan(t, new SumExpression(E, E1)); } return new SumExpression(E, E1); } @Override public double getValue() throws ConstructionException { return E1.getValue() + E2.getValue(); } @Override public void translate() { E1.translate(); E2.translate(); } @Override public String toString() { return E1 + "+" + E2; } @Override public void reset() { E1.reset(); E2.reset(); } } /** * Diverse Vegleiche. */ class CompareExpression extends BasicExpression { BasicExpression E1, E2; int Operator; final static int LESS = 1, LESSEQUAL = 2, GREATER = 3, GREATEREQUAL = 4, EQUAL = 5, ABOUTEQUAL = 6; public CompareExpression(final BasicExpression e1, final BasicExpression e2, final int op) { E1 = e1; E2 = e2; Operator = op; } public static BasicExpression scan(final ExpressionText t) throws ConstructionException { final BasicExpression E1 = SumExpression.scan(t); final char c = t.next(); int op = 0; if (c == '<') { t.advance(); if (t.next(true) == '=') { op = LESSEQUAL; t.advance(); } else { op = LESS; } } else if (c == '>') { t.advance(); if (t.next(true) == '=') { op = GREATEREQUAL; t.advance(); } else { op = GREATER; } } else if (c == '=') { t.advance(); if (t.next(true) == '=') { t.advance(); } op = EQUAL; } else if (c == '~') { t.advance(); if (t.next(true) == '=') { t.advance(); } op = ABOUTEQUAL; } else { return E1; } final BasicExpression E2 = SumExpression.scan(t); return new CompareExpression(E1, E2, op); } @Override public double getValue() throws ConstructionException { switch (Operator) { case LESS: return logical(E1.getValue() < E2.getValue()); case LESSEQUAL: return logical(E1.getValue() <= E2.getValue()); case GREATER: return logical(E1.getValue() > E2.getValue()); case GREATEREQUAL: return logical(E1.getValue() >= E2.getValue()); case EQUAL: // return logical(E1.getValue()==E2.getValue()); return logical(Math.abs(E1.getValue() - E2.getValue()) < 1e-14); case ABOUTEQUAL: return logical(Math.abs(E1.getValue() - E2.getValue()) < 1e-10); } return 0.0; } public double logical(final boolean flag) { if (flag) { return 1.0; } else { return 0.0; } } @Override public void translate() { E1.translate(); E2.translate(); } @Override public String toString() { switch (Operator) { case LESS: return E1 + "<" + E2; case LESSEQUAL: return E1 + "<=" + E2; case GREATER: return E1 + ">" + E2; case GREATEREQUAL: return E1 + ">=" + E2; case EQUAL: return E1 + "==" + E2; case ABOUTEQUAL: return E1 + "~=" + E2; } return ""; } @Override public void reset() { E1.reset(); E2.reset(); } @Override public boolean isLogical() { return true; } } /** * ! CE */ class NotExpression extends BasicExpression { BasicExpression E1; public NotExpression(final BasicExpression e1) { E1 = e1; } public static BasicExpression scan(final ExpressionText t) throws ConstructionException { if (t.next() != '!') { return CompareExpression.scan(t); } t.advance(); final BasicExpression E1 = CompareExpression.scan(t); return new NotExpression(E1); } @Override public double getValue() throws ConstructionException { if (E1.getValue() == 0.0) { return 1.0; } else { return 0.0; } } @Override public void translate() { E1.translate(); } @Override public String toString() { return "!" + E1; } @Override public void reset() { E1.reset(); } @Override public boolean isLogical() { return true; } } /** * /* E & E */ class AndExpression extends BasicExpression { BasicExpression E1, E2; public AndExpression(final BasicExpression e1, final BasicExpression e2) { E1 = e1; E2 = e2; } public static BasicExpression scan(final ExpressionText t) throws ConstructionException { final BasicExpression E1 = NotExpression.scan(t); if (t.next() == '&') { t.advance(); if (t.next(true) == '&') { t.advance(); } return scan(t, E1); } return E1; } public static BasicExpression scan(final ExpressionText t, final BasicExpression E) throws ConstructionException { final BasicExpression E1 = NotExpression.scan(t); if (t.next() == '&') { t.advance(); return scan(t, new AndExpression(E, E1)); } return new AndExpression(E, E1); } @Override public double getValue() throws ConstructionException { if (E1.getValue() != 0.0 && E2.getValue() != 0.0) { return 1.0; } else { return 0.0; } } @Override public void translate() { E1.translate(); E2.translate(); } @Override public String toString() { return E1 + "&&" + E2; } @Override public void reset() { E1.reset(); E2.reset(); } @Override public boolean isLogical() { return true; } } /** * E | E */ class OrExpression extends BasicExpression { BasicExpression E1, E2; public OrExpression(final BasicExpression e1, final BasicExpression e2) { E1 = e1; E2 = e2; } public static BasicExpression scan(final ExpressionText t) throws ConstructionException { final BasicExpression E1 = AndExpression.scan(t); if (t.next() == '|') { t.advance(); if (t.next(true) == '|') { t.advance(); } return scan(t, E1); } return E1; } public static BasicExpression scan(final ExpressionText t, final BasicExpression E) throws ConstructionException { final BasicExpression E1 = AndExpression.scan(t); if (t.next() == '|') { t.advance(); if (t.next(true) == '|') { t.advance(); } return scan(t, new OrExpression(E, E1)); } return new OrExpression(E, E1); } @Override public double getValue() throws ConstructionException { if (E1.getValue() != 0.0 || E2.getValue() != 0.0) { return 1.0; } else { return 0.0; } } @Override public void translate() { E1.translate(); E2.translate(); } @Override public String toString() { return E1 + "||" + E2; } @Override public void reset() { E1.reset(); E2.reset(); } @Override public boolean isLogical() { return true; } } class TopExpression extends BasicExpression { public static BasicExpression scan(final ExpressionText t) throws ConstructionException { return OrExpression.scan(t); } } public class Expression { String S; BasicExpression E; boolean Valid; String ErrorText; DepList DL; double Value; boolean HasDoubleValue = false; boolean ForcePlus = false; /** * Create a new expression * * @param s * expression string * @param c * construction to search for objects * @param o * "this" object * @param var * variable names used in the referring object * @param nocircles * prevent circular exressions */ public Expression(String s, final Construction c, final ConstructionObject o, final String var[], final boolean nocircles) { if (s.startsWith("+")) { ForcePlus = true; s = s.substring(1); } S = s; DL = new DepList(); try { final ExpressionText t = new ExpressionText(s, c, o, DL, nocircles); t.setVar(var); E = TopExpression.scan(t); if (t.next() != 0) { throw new ConstructionException(Global.name("exception.superfluous")); } Valid = true; } catch (final Exception e) { Valid = false; ErrorText = (e.toString()); // e.printStackTrace(); } } public Expression(final String s, final Construction c, final ConstructionObject o, final String var[]) { this(s, c, o, var, false); } public Expression(final String s, final Construction c, final ConstructionObject o) { this(s, c, o, null, false); } public boolean isValid() { return Valid; } public String getErrorText() { return ErrorText; } public double getValue() throws ConstructionException { if (HasDoubleValue) { return Value; } if (!Valid) { throw new ConstructionException(Global.name("exception.expression")); } final double x = E.getValue(); if (Double.isNaN(x) || Double.isInfinite(x)) { throw new ConstructionException(Global.name("exception.value")); } return x; } public void setValue(final double x) { HasDoubleValue = true; ForcePlus = false; DL = new DepList(); Value = x; } @Override public String toString() { if (HasDoubleValue) { return "" + Value; } if (Valid) { return E.toString(); } else { return S; } } public DepList getDepList() { return DL; } public void translate() { E.translate(); DL.translate(); } public boolean isNumber() { return HasDoubleValue || E.isNumber(); } public void reset() { if (E != null && Valid) { E.reset(); } } public boolean isForcePlus() { return ForcePlus; } public void setForcePlus(final boolean flag) { ForcePlus = flag; } public ConstructionObject getObject() { if (E instanceof ObjectExpression) { return ((ObjectExpression) E).getObject(); } else { return null; } } /** * Add the objects this expression depends on to the static dependency list * of the current object. */ public void addDep(final ConstructionObject o) { final Enumeration e = getDepList().elements(); while (e.hasMoreElements()) { ConstructionObject.DL.add((ConstructionObject) e.nextElement()); } } } ./src/rene/zirkel/expression/Romberg.java0000640000175000017500000000525411133127262017430 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.expression; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.Evaluator; public class Romberg { /** * Summiere f(x),f(x+h),...,f(x+n*h) */ private static double sumUp(final Evaluator F, final double x, final double h, final int n) throws ConstructionException { double sum = F.evaluateF(x); for (int i = 1; i <= n; i++) { sum = sum + F.evaluateF(x + i * h); } return sum; } /** * Romberg-Verfahren. * * @param a * ,b = Intervall-Grenzen * @param F * = Funktion, die integriert wird * @param nstart * = Anzahl der ersten Unterteilungen * @param eps * = Relative Genauigkeit zum Abbruch * @param maxiter * = Maximale Iterationen * @return Integral oder RuntimeException */ static public double compute(final Evaluator F, final double a, final double b, final int nstart, final double eps, final int maxiter) throws ConstructionException { // Ergebnisse der Trapezregel mit Schrittweite h/2^i final double t[] = new double[maxiter]; int n = nstart; // Anfangsschrittweite double h = (b - a) / n; // Berechne Trapezregel dazu und d[0] double tlast = t[0] = (F.evaluateF(a) + F.evaluateF(b) + 2 * sumUp(F, a + h, h, n - 2)) * h / 2; // Bisheriges Ergebnis festhalten double old = t[0]; // Halbiere Schrittweite bis Genauigkeit erreicht for (int i = 1; i < maxiter; i++) { // Halbiere Schrittweite: h = h / 2; n = n * 2; // Berechne Trapezregel (unter Verwendung des // letzten Ergebnisses: t[i] = tlast / 2 + sumUp(F, a + h, 2 * h, n / 2 - 1) * h; tlast = t[i]; // Update der t[i]: double q = 4; for (int j = i - 1; j >= 0; j--) { t[j] = t[j + 1] + (t[j + 1] - t[j]) / (q - 1); q = q * 4; } // Abbruch-Kriterium final double res = t[0]; if (Math.abs((res - old) / res) < eps) return res; old = res; } // Bei ?berschreiten der Interationsgrenze: return tlast; } } ./src/rene/zirkel/expression/InvalidException.java0000640000175000017500000000173011133127257021277 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.expression; import rene.zirkel.construction.ConstructionException; public class InvalidException extends ConstructionException { /** * */ private static final long serialVersionUID = 1L; public InvalidException(final String s) { super(s); } } ./src/rene/zirkel/expression/NoValueException.java0000640000175000017500000000207711133127261021262 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.expression; import rene.zirkel.construction.ConstructionException; public class NoValueException extends ConstructionException { /** * */ private static final long serialVersionUID = 1L; boolean Valid; public NoValueException(final boolean valid) { super("NoValueException"); Valid = valid; } public boolean isValid() { return Valid; } } ./src/rene/zirkel/tools/0000755000175000017500000000000011361276265014142 5ustar yvesyves./src/rene/zirkel/tools/ReorderTool.java0000640000175000017500000000702311313642105017226 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Hider.java import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.TextField; import java.awt.event.MouseEvent; import javax.swing.JPanel; import rene.gui.ButtonAction; import rene.gui.CloseDialog; import rene.gui.MyLabel; import rene.gui.MyPanel; import rene.gui.Panel3D; import rene.gui.TextFieldAction; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; class ReorderDialog extends CloseDialog { /** * */ private static final long serialVersionUID = 1L; String Name = ""; boolean Abort = true; TextField Input; public ReorderDialog(final ZirkelCanvas zc, final ConstructionObject o) { super(zc.getFrame(), Global.name("reorder.title"), true); setLayout(new BorderLayout()); final JPanel north = new MyPanel(); north.setLayout(new GridLayout(1, 0)); north.add(new MyLabel(o.getName() + " : " + Global.name("reorder.message"))); final ConstructionObject ol = zc.getConstruction().lastDep(o); String s = ""; if (ol != null) s = ol.getName(); north.add(Input = new TextFieldAction(this, "Reorder", s)); add("North", new Panel3D(north)); final JPanel south = new MyPanel(); south.add(new ButtonAction(this, Global.name("ok"), "OK")); south.add(new ButtonAction(this, Global.name("abort"), "Close")); add("South", south); pack(); center(zc.getFrame()); setVisible(true); } @Override public void doAction(final String o) { if (o.equals("OK")) { Abort = false; Name = Input.getText(); doclose(); } else super.doAction(o); } public String getResult() { return Name; } @Override public boolean isAborted() { return Abort; } } public class ReorderTool extends ObjectConstructor { @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); final ConstructionObject o = zc.selectObject(e.getX(), e.getY()); if (o == null) return; final ReorderDialog d = new ReorderDialog(zc, o); if (!d.isAborted()) { final String name = d.getResult(); if (!name.equals("")) { final ConstructionObject u = zc.getConstruction().find(name); if (u == null) { zc.warning(Global.name("reorder.notfound")); return; } if (!zc.getConstruction().reorder(o, u)) zc.warning(Global.name("reorder.warning")); } else if (!zc.getConstruction().reorder(o, null)) zc.warning(Global.name("reorder.warning")); } zc.repaint(); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateObjects(e.getX(), e.getY()); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Global.name("message.reorder", "Reorder: Select an object!")); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/JSmacroTool.java0000644000175000017500000000723011360624271017174 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Binder.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.SegmentObject; public class JSmacroTool extends ObjectConstructor implements Selector { ObjectConstructor OC; String MSG; String TYPE; public JSmacroTool(final ZirkelCanvas zc, final String msg, String type, final ObjectConstructor oc) { OC=oc; MSG=msg; TYPE=type; zc.repaint(); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { ConstructionObject o=null; if (TYPE.equals("Point")) { o=zc.selectCreatePoint(e.getX(), e.getY(), e.isAltDown()); Global.setJSO(o); } else if (TYPE.equals("Segment")) { o=zc.selectSegment(e.getX(), e.getY()); Global.setJSO(o); } else if (TYPE.equals("Line")) { o=zc.selectLine(e.getX(), e.getY()); Global.setJSO(o); } else if (TYPE.equals("Circle")) { o=zc.selectCircle(e.getX(), e.getY()); Global.setJSO(o); } else if (TYPE.equals("Expression")) { o=zc.selectObject(e.getX(), e.getY()); Global.setJSO(o); } if (Global.getJSO()!=null) { o.setSelected(true); } else { Global.setJSquit(true); } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { if (TYPE.equals("Point")) { zc.indicateCreatePoint(e.getX(), e.getY(), true); } else { zc.indicateWithSelector(e.getX(), e.getY(), this); } } public boolean isAdmissible(final ZirkelCanvas zc, final ConstructionObject o) { if ((o instanceof PointObject)&&(TYPE.equals("Point"))) { return true; } else if ((o instanceof PrimitiveLineObject)&&(TYPE.equals("Line"))) { return true; } else if ((o instanceof PrimitiveCircleObject)&&(TYPE.equals("Circle"))) { return true; } else if ((o instanceof SegmentObject)&&(TYPE.equals("Segment"))) { return true; } else if ((o instanceof ExpressionObject)&&(TYPE.equals("Expression"))) { return true; } else { return false; } } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(MSG); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setTool(OC); zc.validate(); zc.repaint(); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/.#ZoomerTool.java.1.30000644000175000017500000001314411132723326017531 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Hider.java import java.awt.Cursor; import java.awt.event.MouseEvent; import java.util.Enumeration; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.MoveableObject; import rene.zirkel.objects.TextObject; import rene.zirkel.objects.UserFunctionObject; /** * @author Rene Werkzeug zum Zoomen des Fensters und zum Verschieben. * Verschieben funktioniert im Zentrum des Fensters. */ public class ZoomerTool extends ObjectConstructor { boolean Dragging = false, Zoom = false; double X, Y, W, X0, Y0; ObjectConstructor OC; public static void initNonDraggableObjects(final Construction c) { final Enumeration en = c.elements(); while (en.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) en.nextElement(); if ((o instanceof TextObject) || (o instanceof ExpressionObject) || (o instanceof UserFunctionObject)) { final MoveableObject mo = (MoveableObject) o; mo.startDrag(0, 0); } } } public static void shiftNonDraggableObjectsBy(final Construction c, final double dx, final double dy) { final Enumeration en = c.elements(); while (en.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) en.nextElement(); if ((o instanceof TextObject) || (o instanceof ExpressionObject) || (o instanceof UserFunctionObject)) { final MoveableObject mo = (MoveableObject) o; mo.dragTo(dx, dy); } // else if (!o.isKeepClose()) { // // System.out.println("dx="+dx); // o.setcOffset(o.xcOffset()+2*dx, o.ycOffset()+2*dy); // // // C.setXYW(C.getX()+dx*C.getW(), C.getY()+dy*C.getW(), // C.getW()); // // }; } } public static void zoomNonDraggableObjectsBy(final Construction c, final double f) { final Enumeration en = c.elements(); while (en.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) en.nextElement(); if ((o instanceof TextObject) || (o instanceof ExpressionObject) || (o instanceof UserFunctionObject)) { final MoveableObject mo = (MoveableObject) o; mo.move(c.getX() + (mo.getOldX() - c.getX()) * f, c.getY() + (mo.getOldY() - c.getY()) * f); } } } public ZoomerTool() { super(); } public ZoomerTool(final ObjectConstructor oc, final MouseEvent e, final ZirkelCanvas zc) { super(); OC = oc; X0 = zc.x(e.getX()); Y0 = zc.y(e.getY()); final Construction c = zc.getConstruction(); X = c.getX(); Y = c.getY(); W = c.getW(); Zoom = false; zc.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); Dragging = true; initNonDraggableObjects(c); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { X0 = zc.x(e.getX()); Y0 = zc.y(e.getY()); final Construction c = zc.getConstruction(); X = c.getX(); Y = c.getY(); W = c.getW(); Zoom = (Math.abs(X - X0) > W / 4 || Math.abs(Y - Y0) > W / 4); if (!Zoom) { zc.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); } Dragging = true; OC = null; initNonDraggableObjects(c); } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) { return; } final Construction c = zc.getConstruction(); c.setXYW(X, Y, W); zc.recompute(); final double x = zc.x(e.getX()), y = zc.y(e.getY()); if (Zoom) { final double f = Math.sqrt((X0 - X) * (X0 - X) + (Y0 - Y) * (Y0 - Y)) / Math.sqrt((x - X) * (x - X) + (y - Y) * (y - Y)); c.setXYW(X, Y, f * W); zoomNonDraggableObjectsBy(c, f); } else { c.setXYW(X - (x - X0), Y - (y - Y0), W); shiftNonDraggableObjectsBy(c, X0 - x, Y0 - y); } zc.recompute(); zc.validate(); zc.repaint(); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { Dragging = Zoom = false; zc.setCursor(Cursor.getDefaultCursor()); zc.recompute(); zc.validate(); zc.repaint(); if (OC != null) { zc.setTool(OC); } } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Zirkel.name("message.zoom")); } @Override public void reset(final ZirkelCanvas zc) { zc.clearSelected(); zc.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); Zoom = Dragging = false; } @Override public void invalidate(final ZirkelCanvas zc) { zc.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean flag) { X0 = zc.x(e.getX()); Y0 = zc.y(e.getY()); final Construction c = zc.getConstruction(); X = c.getX(); Y = c.getY(); W = c.getW(); Zoom = (Math.abs(X - X0) > W / 4 || Math.abs(Y - Y0) > W / 4); if (!Zoom) { zc.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); } else { zc.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/BinderTool.java0000640000175000017500000000536111303263644017040 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Binder.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.InsideObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PointonObject; public class BinderTool extends ObjectConstructor implements Selector { ObjectConstructor OC; PointObject P; public BinderTool(final ZirkelCanvas zc, final PointObject p, final ObjectConstructor oc) { P = p; OC = oc; P.setSelected(true); zc.repaint(); } boolean Control; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { Control = e.isControlDown(); final ConstructionObject o = zc.selectWithSelector(e.getX(), e.getY(), this); if (o == null) return; if (Control && !(o instanceof InsideObject)) return; if (zc.getConstruction().dependsOn(o, P)) return; P.setBound(o.getName()); if (o instanceof InsideObject) { if (Control || !(o instanceof PointonObject)) P.setInside(true); } else P.setUseAlpha(!e.isShiftDown()); zc.getConstruction().updateCircleDep(); zc.repaint(); reset(zc); eric.bar.JPropertiesBar.EditObject(P, false, false); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { Control = e.isControlDown(); zc.indicateWithSelector(e.getX(), e.getY(), this); } public boolean isAdmissible(final ZirkelCanvas zc, final ConstructionObject o) { if ((o instanceof InsideObject || o instanceof PointonObject) && !zc.getConstruction().dependsOn(o, P)) return true; return false; } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Global.name("message.bindpoint")); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setTool(OC); zc.validate(); zc.repaint(); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/BreakpointAnimator.java0000640000175000017500000000774711303263644020602 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; import java.awt.event.MouseEvent; import java.util.Enumeration; import rene.util.MyVector; import rene.util.xml.XmlWriter; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; public class BreakpointAnimator extends ObjectConstructor implements Runnable { MyVector Breaks; // Vector of breakpoints ZirkelCanvas ZC; boolean Loop = false; public BreakpointAnimator() { Breaks = new MyVector(); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); ZC = zc; if (Running) { if (e.isShiftDown()) Loop = !Loop; else { Stopped = true; zc.paintUntil(null); } } else { reset(zc); } } @Override public synchronized void reset(final ZirkelCanvas zc) { super.reset(zc); ZC = zc; showStatus(zc); if (Running) { Stopped = true; zc.paintUntil(null); } else { Stopped = false; new Thread(this).start(); } } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Global.name("message.animatebreak")); } public void save(final XmlWriter xml) { xml.startTagStart("AnimateBreakpoints"); xml.printArg("time", "" + SleepTime); if (Loop) xml.printArg("loop", "true"); xml.finishTagNewLine(); } boolean Running = false, Stopped = false; long SleepTime = 1024; public void run() { ZC.getConstruction().setOriginalOrder(true); Running = true; Breaks = new MyVector(); final Enumeration e = ZC.getConstruction().elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.isBreak()) Breaks.addElement(o); } final Object H[] = Breaks.getArray(); int N = 0; if (Breaks.size() == 0) { Running = false; ZC.getConstruction().setOriginalOrder(false); return; } ConstructionObject O = (ConstructionObject) H[0]; boolean forward = true; while (!Stopped) { if (!Stopped) ZC.paintUntil(O); try { Thread.sleep(SleepTime); } catch (final Exception ex) { } if (Stopped) break; if (Loop) { if (forward) { if (N < Breaks.size() - 1) { N++; O = (ConstructionObject) H[N]; } else if (N == Breaks.size() - 1) { N++; forward = false; O = null; } } else { if (N > 0) { N--; O = (ConstructionObject) H[N]; } else { N = 1; O = (ConstructionObject) H[N]; forward = true; } } } else { if (N < Breaks.size() - 1) { N++; O = (ConstructionObject) H[N]; } else if (N == Breaks.size() - 1) { N++; O = null; } else { N = 0; O = (ConstructionObject) H[N]; } } } Running = false; ZC.getConstruction().setOriginalOrder(false); } @Override public synchronized void invalidate(final ZirkelCanvas zc) { Stopped = true; ZC.paintUntil(null); } @Override public boolean useSmartBoard() { return false; } public void increaseSpeed() { if (SleepTime >= 32000) return; SleepTime = SleepTime * 2; } public void decreaseSpeed() { if (SleepTime == 1) return; SleepTime = SleepTime / 2; } public void setSpeed(final long delay) { SleepTime = delay; } public void setLoop(final boolean flag) { Loop = flag; } } ./src/rene/zirkel/tools/nullTool.java0000644000175000017500000000337111330254211016600 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Binder.java import java.awt.event.MouseEvent; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; public class nullTool extends ObjectConstructor implements Selector { ObjectConstructor OC; String MSG; String TYPE; public nullTool(final ZirkelCanvas zc, final ObjectConstructor oc) { OC=oc; zc.repaint(); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { } public boolean isAdmissible(final ZirkelCanvas zc, final ConstructionObject o) { return false; } @Override public void showStatus(final ZirkelCanvas zc) { // zc.showStatus(MSG); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setTool(OC); zc.validate(); zc.repaint(); } } ./src/rene/zirkel/tools/JLocusObjectTracker.java0000644000175000017500000000446111303263514020641 0ustar yvesyves/* Copyright 2006 Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; import rene.zirkel.objects.*; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Selector; import rene.zirkel.graphics.TrackPainter; import rene.zirkel.tools.ObjectTracker; /** * * @author erichake */ public class JLocusObjectTracker extends ObjectTracker implements TrackPainter, Runnable, Selector { public JLocusObjectTracker() { // System.out.println("JLocusObjectTracker"); } public JLocusObjectTracker(final ConstructionObject p, final PointObject pm, final ConstructionObject o, final ZirkelCanvas zc, final boolean animate, final boolean paint, final ConstructionObject po[]) { super(p, pm, o, zc, animate, paint, po); } /** * it simply create the locus object, without any animation */ @Override public void run() { animate(ZC); } /** * No animation : it simply create the locus object * * @param zc */ @Override public void animate(final ZirkelCanvas zc) { // The DontPaint switch will be reset off at the end zc.getConstruction().DontPaint = true; TrackObject t =null; if (P instanceof PointObject) { // Il s'agit d'un lieu de point (on utilise le nouvel objet) t = new JLocusTrackObject(zc.getConstruction(), P, PO, PN, O, PM); }else{ // Il s'agit d'une enveloppe de droite (on utilise l'ancien objet) t = new TrackObject(zc.getConstruction(), P, PO, PN, O, PM); } // OldTrackObject t=new OldTrackObject(zc.getConstruction(), // P,PO,PN,O,PM); t.setDefaults(); zc.addObject(t); reset(zc); zc.validate(); zc.getConstruction().DontPaint = false; } } ./src/rene/zirkel/tools/SetAwayTool.java0000640000175000017500000000425311303263644017211 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; import java.awt.event.MouseEvent; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.IntersectionObject; /** * A tool to set the the point an intersection point should stay away from or * should come close to. */ public class SetAwayTool extends ObjectConstructor { ObjectConstructor OC; IntersectionObject P; boolean Away; public SetAwayTool(final ZirkelCanvas zc, final IntersectionObject p, final boolean away, final ObjectConstructor oc) { P = p; OC = oc; P.setSelected(true); Away = away; zc.repaint(); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { final ConstructionObject o = zc.selectPoint(e.getX(), e.getY()); if (o == null) return; if (zc.getConstruction().dependsOn(o, P)) { zc.warning(ConstructionObject.text1(Global.name("error.depends"), P .getText())); return; } P.setAway(o.getName(), Away); P.setUseAlpha(e.isShiftDown()); zc.validate(); reset(zc); } @Override public void showStatus(final ZirkelCanvas zc) { if (Away) zc.showStatus(Global.name("message.setaway.away")); else zc.showStatus(Global.name("message.setaway.close")); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setTool(OC); zc.validate(); zc.repaint(); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/ObjectTracker.java0000640000175000017500000012704311303263644017523 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: ObjectTracker.java import java.awt.Graphics; import java.awt.event.MouseEvent; import java.util.Enumeration; import java.util.Vector; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.util.xml.XmlWriter; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.PolygonDrawer; import rene.zirkel.graphics.TrackPainter; import rene.zirkel.objects.AreaObject; import rene.zirkel.objects.CircleObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.FunctionObject; import rene.zirkel.objects.MoveableObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.QuadricObject; import rene.zirkel.objects.RayObject; import rene.zirkel.objects.SegmentObject; import rene.zirkel.objects.TrackObject; import rene.zirkel.structures.Coordinates; import rene.zirkel.objects.JLocusTrackObject; public class ObjectTracker extends ObjectConstructor implements TrackPainter, Runnable, Selector { public PointObject PM; public ConstructionObject O, P; public int PMax=16, PN; public ConstructionObject PO[]=new ConstructionObject[PMax]; Vector V=new Vector(), VPM=new Vector(); Vector VO[]=new Vector[PMax]; boolean Animate, Paint; public boolean Interactive=true; boolean Other=false; public ZirkelCanvas ZC; public ObjectTracker() { } public ObjectTracker(final ConstructionObject p, final PointObject pm, final ConstructionObject o, final ZirkelCanvas zc, final boolean animate, final boolean paint, final ConstructionObject po[]) { P=p; PM=pm; O=o; if (P!=null&&O!=null&&(PM!=null||(O instanceof ExpressionObject))) { Animate=animate; Paint=paint; if (PM!=null) { PM.project(O); } zc.validate(); zc.repaint(); showStatus(zc); PN=0; for (int i=0; i=PMax||po[i]==null) { break; } PO[PN]=po[i]; VO[i]=new Vector(); PN++; } } } public boolean isAdmissible(final ZirkelCanvas zc, final ConstructionObject o) { if (O==null) { if (o instanceof ExpressionObject&&((ExpressionObject) o).isSlider()) { return true; } if (o instanceof PrimitiveLineObject) { return true; } if (o instanceof PrimitiveCircleObject) { return true; } if (o instanceof PointObject&&((PointObject) o).isPointOn()) { return true; } return false; } else { if (!(o instanceof PointObject)) { return false; } if (!((MoveableObject) o).moveable()) { return false; } if ((O instanceof CircleObject)&&((CircleObject) O).getP2()==o) { return true; } if (zc.depends(O, o)) { return false; } final ConstructionObject bound=((PointObject) o).getBound(); if (bound!=null&&bound!=O) { return false; } return true; } } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); if (P==null) // no point selected yet { P=zc.selectPoint(e.getX(), e.getY()); if (P==null) { P=zc.selectLine(e.getX(), e.getY()); } if (P!=null) { P.setSelected(true); zc.repaint(); } if (e.isShiftDown()) { Other=true; PN=0; } else { Other=false; } showStatus(zc); } else if (Other) // want more points to track { ConstructionObject P=zc.selectPoint(e.getX(), e.getY()); if (P==null) { P=zc.selectLine(e.getX(), e.getY()); } if (P!=null) { P.setSelected(true); zc.repaint(); PO[PN]=P; VO[PN]=new Vector(); PN++; } if (!e.isShiftDown()||PN>=PMax) { Other=false; } showStatus(zc); } else if (O==null) // no object to track on yet { O=zc.selectWithSelector(e.getX(), e.getY(), this); if (O instanceof ExpressionObject) { zc.clearSelected(); zc.clearIndicated(); Animate=!e.isShiftDown(); Paint=true; compute(zc); ZC=zc; if (Animate) { zc.validate(); } zc.repaint(); } else if (O instanceof PointObject&&((PointObject) O).isPointOn()) { PM=(PointObject) O; O=PM.getBound(); zc.clearSelected(); zc.clearIndicated(); Animate=!e.isShiftDown(); Paint=true; compute(zc); ZC=zc; if (Animate) { zc.validate(); } zc.repaint(); } else { if (O!=null) { O.setSelected(true); zc.repaint(); } showStatus(zc); } } else if (PM==null&&!(O instanceof ExpressionObject)) { final ConstructionObject pm=zc.selectWithSelector(e.getX(), e.getY(), this); if (pm==null) { return; } PM=(PointObject) pm; zc.clearSelected(); zc.clearIndicated(); Animate=!e.isShiftDown(); Paint=true; compute(zc); ZC=zc; if (Animate) { zc.validate(); } zc.repaint(); } else if (!e.isControlDown()&&!e.isShiftDown()&&!e.isAltDown()) { if (!Running&&Interactive&&PM!=null&&PM.nearto(e.getX(), e.getY(), zc)) { Dragging=true; zc.getConstruction().shouldSwitch(true); } else if (Animate) { if (Paint) { Paint=false; } else { Animate=false; Paint=true; if (Running) { stop(); } showStatus(zc); } } else { if (Running) { return; } Paint=true; Animate=true; compute(zc); zc.validate(); zc.repaint(); showStatus(zc); } } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { if (PM!=null) { return; } if (P==null||Other) { zc.indicatePointsOrLines(e.getX(), e.getY()); } else if (O==null) { zc.indicateWithSelector(e.getX(), e.getY(), this); } else { zc.indicateWithSelector(e.getX(), e.getY(), this); } } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging||PM==null) { return; } PM.getY(); PM.move(zc.x(e.getX()), zc.y(e.getY())); zc.dovalidate(); if (P.valid()) { zc.repaint(); } } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging||PM==null) { return; } zc.getConstruction().shouldSwitch(false); Dragging=false; zc.validate(); } @Override public void reset(final ZirkelCanvas zc) { zc.clearSelected(); if (Running) { stop(); } PM=null; P=O=null; V=new Vector(); PN=0; for (int i=0; i50) { h=50; } Thread.sleep(50-h); time=System.currentTimeMillis(); } catch (final Exception ex) { } } if (Stopped) { break; } } ZCG.dispose(); zc.getConstruction().shouldSwitch(false); zc.getConstruction().clearSwitches(); } public ConstructionObject getObject() { return O; } double mod(final double x) { if (x>=Math.PI) { return x-2*Math.PI; } if (x<-Math.PI) { return x+2*Math.PI; } return x; } public void run() { if (O instanceof ExpressionObject&&!((ExpressionObject) O).isSlider()) { return; } if (V.size()==0) { return; } if (!Animate) { return; } Running=true; Stopped=false; showStatus(ZC); while (true) { try { Thread.sleep(100); } catch (final Exception ex) { } if (ZC.I!=null) { break; } } while (true) { if (PM!=null) { PM.move(oldx, oldy); } else if (O instanceof ExpressionObject) { ((ExpressionObject) O).setSliderPosition(oldx); } animate(ZC); if (Stopped) { break; } } if (PM!=null&&!(O instanceof ExpressionObject)) { if (PM!=null) { PM.move(oldx, oldy); } else if (O instanceof ExpressionObject) { ((ExpressionObject) O).setSliderPosition(oldx); } ZC.getConstruction().switchBack(); ZC.dovalidate(); ZC.repaint(); } synchronized (this) { notify(); } Running=false; showStatus(ZC); } @Override public void invalidate(final ZirkelCanvas zc) { stop(); } public void stop() { if (!Running) { return; } Stopped=true; try { wait(); } catch (final Exception e) { } ZC.repaint(); showStatus(ZC); } public void save(final XmlWriter xml) { if (P==null||O==null||(PM==null&&!(O instanceof ExpressionObject))) { return; } xml.startTagStart("Track"); xml.printArg("track", P.getName()); for (int i=0; i1) { xml.printArg("omit", ""+(Omit-1)); } xml.finishTagNewLine(); } @Override public void pause(final boolean flag) { if (flag) { if (Running) { stop(); } } } /** * This is the update function, calling docompute. * * @param zc */ public synchronized void compute(final ZirkelCanvas zc) { if (!isComplete()) { return; } double x=0, y=0; if (PM!=null) { x=PM.getX(); y=PM.getY(); } else if (O instanceof ExpressionObject) { x=((ExpressionObject) O).getSliderPosition(); } zc.getConstruction().clearSwitches(); zc.getConstruction().shouldSwitch(true); docompute(zc); zc.getConstruction().shouldSwitch(false); zc.getConstruction().clearSwitches(); if (PM!=null) { PM.move(x, y); } else if (O instanceof ExpressionObject) { ((ExpressionObject) O).setSliderPosition(x); } zc.dovalidate(); } /** * Complicated procedure to recompute the automatic track. In principle, a * moving point moves on some object, the coordinates of the tracked points * or the intersections of the tracked lines are stored, as well as the * positions of the moved point. But if the tracked point gets invalid, the * movement reverses and the interesections change. Moreover, there is a * list of secondary tracked objects. * * @param zc */ public synchronized void docompute(final ZirkelCanvas zc) { V=new Vector(); for (int i=0; i=2*Math.PI) { d-=2*Math.PI; } amin=astart=-d/2; amax=d/2; anull=(a1+a2)/2; } else { amin=astart=-Math.PI*0.9999; amax=Math.PI*0.9999; } double a=astart; PM.move(x+r*Math.cos(anull+a), y+r*Math.sin(anull+a)); PM.project(c); zc.getConstruction().validate(P, PM); zc.resetSum(); double x1=0, y1=0; boolean started=false; if (P.valid()) { zc.getConstruction().shouldSwitch(true); if (P instanceof PointObject) { final PointObject p=(PointObject) P; x1=p.getX(); y1=p.getY(); V.addElement(new Coordinates(x1, y1)); VPM.addElement(new Coordinates(PM.getX(), PM.getY())); started=true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L=(PrimitiveLineObject) P; X=L.getX(); Y=L.getY(); DX=L.getDX(); DY=L.getDY(); started=true; } } final boolean startedO[]=new boolean[PMax]; for (int i=0; izc.dx(1)) { da=zc.dx(1)/10; } double aold=a; double x2=0, y2=0; while (true) { a=a+da; boolean Break=false; if ((!started||range)&&a>=amax) { a=amax; Break=true; } else if ((!started||range)&&a<=amin) { a=amin; Break=true; } else if (started&&da>0) { if ((mod(aold-astart)<0&&mod(a-astart)>=0)&&!zc.getConstruction().haveSwitched()) { Break=true; a=astart; } } aold=a; PM.move(x+r*Math.cos(anull+a), y+r*Math.sin(anull+a)); PM.project(c); zc.getConstruction().validate(P, PM); if (P.valid()) { if (!started) { zc.getConstruction().shouldSwitch(true); astart=a; } boolean valid=false; if (P instanceof PointObject) { final PointObject p=(PointObject) P; x2=p.getX(); y2=p.getY(); valid=true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L=(PrimitiveLineObject) P; if (!started) { X=L.getX(); Y=L.getY(); DX=L.getDX(); DY=L.getDY(); } else { double xx, yy, dx, dy; xx=L.getX(); yy=L.getY(); dx=L.getDX(); dy=L.getDY(); final double det=dx*DY-dy*DX; if (Math.sqrt(Math.abs(det))>1e-9) { final double h=(-(X-xx)*DY+DX*(Y-yy))/(-det); x2=xx+h*dx; y2=yy+h*dy; valid=true; } X=xx; Y=yy; DX=dx; DY=dy; } } final double dist=zc.dCenter(x2, y2); final boolean different=((int) zc.col(x1)!=(int) zc.col(x2)||(int) zc.row(y1)!=(int) zc.row(y2)); if (valid&&different) { V.addElement(new Coordinates(x2, y2)); VPM.addElement(new Coordinates(PM.getX(), PM.getY())); } final double dp=Math.abs(x2-x1)+Math.abs(y2-y1); da=updateDA(da, valid, dist, dp, dmin, dmax, zc); x1=x2; y1=y2; started=true; } else if (started) { V.addElement(new Coordinates(x2, y2)); VPM.addElement(new Coordinates(PM.getX(), PM.getY())); da=-da; } addSecondary(startedO, zc); if (Break||System.currentTimeMillis()-time>5000) { break; } } } // Running on a line: else if (O instanceof PrimitiveLineObject) { zc.getConstruction().shouldSwitch(false); final PrimitiveLineObject l=(PrimitiveLineObject) O; PM.project(l); final double lx=l.getX(), ly=l.getY(), ldx=l.getDX(), ldy=l.getDY(); double amin=0, amax=0, astart=0; double dmax=0.5; boolean range=false; if (l instanceof RayObject) { amin=astart=0; amax=Math.PI*0.9999; range=true; } else if (l instanceof SegmentObject) { amin=astart=0; final double r=((SegmentObject) l).getLength(); System.out.println(r); dmax=r/20; amax=Math.atan(r)*2; range=true; } else { amin=astart=-Math.PI*0.99999; amax=Math.PI*0.9999; } double a=astart; double hd=Math.tan(mod(a)/2); PM.move(lx+hd*ldx, ly+hd*ldy); PM.project(l); zc.getConstruction().validate(P, PM); zc.resetSum(); double x1=0, y1=0; boolean started=false; if (P.valid()) { zc.getConstruction().shouldSwitch(true); if (P instanceof PointObject) { final PointObject p=(PointObject) P; x1=p.getX(); y1=p.getY(); V.addElement(new Coordinates(x1, y1)); VPM.addElement(new Coordinates(PM.getX(), PM.getY())); started=true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L=(PrimitiveLineObject) P; X=L.getX(); Y=L.getY(); DX=L.getDX(); DY=L.getDY(); started=true; } } final boolean startedO[]=new boolean[PMax]; for (int i=0; izc.dx(1)) { da=zc.dx(1)/10; } double aold=a; double x2=0, y2=0; while (true) { a=a+da; boolean Break=false; if ((!started||range)&&a>=amax) { a=amax; Break=true; } else if ((!started||range)&&a<=amin) { a=amin; Break=true; } else if (started&&da>0) { if ((mod(aold-astart)<0&&mod(a-astart)>=0)&&!zc.getConstruction().haveSwitched()) { Break=true; a=astart; } } aold=a; hd=Math.tan(mod(a)/2); PM.move(lx+hd*ldx, ly+hd*ldy); PM.project(l); zc.getConstruction().validate(P, PM); if (P.valid()) { if (!started) { zc.getConstruction().shouldSwitch(true); astart=a; } boolean valid=false; if (P instanceof PointObject) { final PointObject p=(PointObject) P; x2=p.getX(); y2=p.getY(); valid=true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L=(PrimitiveLineObject) P; if (!started) { X=L.getX(); Y=L.getY(); DX=L.getDX(); DY=L.getDY(); } else { double xx, yy, dx, dy; xx=L.getX(); yy=L.getY(); dx=L.getDX(); dy=L.getDY(); final double det=dx*DY-dy*DX; if (Math.sqrt(Math.abs(det))>1e-9) { final double h=(-(X-xx)*DY+DX*(Y-yy))/(-det); x2=xx+h*dx; y2=yy+h*dy; valid=true; } X=xx; Y=yy; DX=dx; DY=dy; } } final double dist=zc.dCenter(x2, y2); final boolean different=((int) zc.col(x1)!=(int) zc.col(x2)||(int) zc.row(y1)!=(int) zc.row(y2)); if (valid&&different) { V.addElement(new Coordinates(x2, y2)); VPM.addElement(new Coordinates(PM.getX(), PM.getY())); } final double dp=Math.abs(x2-x1)+Math.abs(y2-y1); da=updateDA(da, valid, dist, dp, dmin, dmax, zc); x1=x2; y1=y2; started=true; } else if (started) { V.addElement(new Coordinates(x2, y2)); VPM.addElement(new Coordinates(PM.getX(), PM.getY())); da=-da; } addSecondary(startedO, zc); if (Break||System.currentTimeMillis()-time>5000) { break; } } } // Running an expression slider: else if (O instanceof ExpressionObject) { zc.getConstruction().shouldSwitch(false); final ExpressionObject eo=(ExpressionObject) O; if (!eo.isSlider()) { return; } double amin=0, amax=0, astart=0; double dmax=0.5; boolean range=false; amin=astart=0; final double r=1; dmax=r/20; amax=Math.atan(r)*2; range=true; double a=astart; double hd=Math.tan(mod(a)/2); eo.setSliderPosition(0); zc.getConstruction().validate(P, null); zc.resetSum(); double x1=0, y1=0; boolean started=false; if (P.valid()) { zc.getConstruction().shouldSwitch(true); if (P instanceof PointObject) { final PointObject p=(PointObject) P; x1=p.getX(); y1=p.getY(); V.addElement(new Coordinates(x1, y1)); VPM.addElement(new Coordinates(eo.getSliderPosition(), 0)); started=true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L=(PrimitiveLineObject) P; X=L.getX(); Y=L.getY(); DX=L.getDX(); DY=L.getDY(); started=true; } } final boolean startedO[]=new boolean[PMax]; for (int i=0; izc.dx(1)) { da=zc.dx(1)/10; } double aold=a; double x2=0, y2=0; while (true) { a=a+da; boolean Break=false; if ((!started||range)&&a>=amax) { a=amax; Break=true; } else if ((!started||range)&&a<=amin) { a=amin; Break=true; } else if (started&&da>0) { if ((mod(aold-astart)<0&&mod(a-astart)>=0)&&!zc.getConstruction().haveSwitched()) { Break=true; a=astart; } } aold=a; hd=Math.tan(mod(a)/2); eo.setSliderPosition(hd); zc.getConstruction().validate(P, null); if (P.valid()) { if (!started) { zc.getConstruction().shouldSwitch(true); astart=a; } boolean valid=false; if (P instanceof PointObject) { final PointObject p=(PointObject) P; x2=p.getX(); y2=p.getY(); valid=true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L=(PrimitiveLineObject) P; if (!started) { X=L.getX(); Y=L.getY(); DX=L.getDX(); DY=L.getDY(); } else { double xx, yy, dx, dy; xx=L.getX(); yy=L.getY(); dx=L.getDX(); dy=L.getDY(); final double det=dx*DY-dy*DX; if (Math.sqrt(Math.abs(det))>1e-9) { final double h=(-(X-xx)*DY+DX*(Y-yy))/(-det); x2=xx+h*dx; y2=yy+h*dy; valid=true; } X=xx; Y=yy; DX=dx; DY=dy; } } final double dist=zc.dCenter(x2, y2); final boolean different=((int) zc.col(x1)!=(int) zc.col(x2)||(int) zc.row(y1)!=(int) zc.row(y2)); if (valid&&different) { V.addElement(new Coordinates(x2, y2)); VPM.addElement(new Coordinates(eo.getSliderPosition(), 0)); } final double dp=Math.abs(x2-x1)+Math.abs(y2-y1); da=updateDA(da, valid, dist, dp, dmin, dmax, zc); x1=x2; y1=y2; started=true; } else if (started) { V.addElement(new Coordinates(x2, y2)); VPM.addElement(new Coordinates(eo.getSliderPosition(), 0)); da=-da; } addSecondary(startedO, zc); if (Break||System.currentTimeMillis()-time>5000) { break; } } } } public void addSecondary(final boolean startedO[], final ZirkelCanvas zc) { for (int i=0; i1e-9) { final double h=(-(XO[i]-xx)*DYO[i]+DXO[i]*(YO[i]-yy))/(-det); XO[i]=xx; YO[i]=yy; DXO[i]=dx; DYO[i]=dy; VO[i].addElement(new Coordinates(xx+h*dx, yy+h*dy)); } } } } } public double StepSize=5; public double updateDA(double da, final boolean valid, final double dist, final double dp, final double dmin, final double dmax, final ZirkelCanvas zc) { if (V.size()>0&&valid) { if (dist<1.2) { if (dp>zc.dx(StepSize)) { da/=2; } else if (dp0&&da-dmin) { da=-dmin; } if (da>dmax) { da=dmax; } else if (da<-dmax) { da=-dmax; } } else { if (dp>zc.dx(StepSize*10)) { da/=2; } else if (dp0&&da-dmin) { da=-dmin; } if (da>dmax) { da=dmax; } else if (da<-dmax) { da=-dmax; } } } return da; } public void increaseOmit() { Omit++; } public void decreaseOmit() { if (Omit>1) { Omit--; } } public void setOmit(final int f) { Omit=f+1; } public boolean isComplete() { return !(P==null||O==null||(PM==null&&!(O instanceof ExpressionObject&&((ExpressionObject) O).isSlider()))); } public void keep(final ZirkelCanvas zc) { if (!isComplete()) { return; } final TrackObject t=new TrackObject(zc.getConstruction(), P, PO, PN, O, PM); zc.addObject(t); t.setDefaults(); reset(zc); t.compute(zc); zc.validate(); } @Override public String getTag() { return "Track"; } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Track")) { return false; } final XmlTag tag=tree.getTag(); if (!tag.hasParam("on")||!tag.hasParam("track")) { throw new ConstructionException("Track parameters missing!"); } else { try { PointObject pm=null; try { pm=(PointObject) c.find(tag.getValue("point")); } catch (final Exception ex) { } final ConstructionObject o=c.find(tag.getValue("on")); if (pm==null&&!(o instanceof ExpressionObject)) { throw new ConstructionException(""); } final ConstructionObject p=c.find(tag.getValue("track")); final ConstructionObject po[]=new ConstructionObject[PMax]; int pn=0; for (pn=0; pn. */ package rene.zirkel.tools; // file: Hider.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; public class HiderTool extends ObjectConstructor { @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); final ConstructionObject o = zc.selectObject(e.getX(), e.getY()); if (o == null) return; if (e.isShiftDown()) o.setSuperHidden(true); else o.setHidden(!o.isHidden()); zc.repaint(); zc.reloadCD(); // zc.paintToolIcon("hide"); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateObjects(e.getX(), e.getY()); // zc.paintToolIcon("hide"); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Global.name("message.hide", "Hide: Select an object!")); } } ./src/rene/zirkel/tools/RenamerTool.java0000640000175000017500000000337711303263645017234 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Hider.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; public class RenamerTool extends ObjectConstructor { boolean Enforce = false, Started = false; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { final ConstructionObject o = zc.selectObject(e.getX(), e.getY()); if (o == null) return; if (o.isKeep()) return; if (e.isShiftDown()) { zc.renameABC(o, true, !Started); Started = true; } else zc.renameABC(o, false, false); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateObjects(e.getX(), e.getY(), true); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Global.name("message.rename")); } @Override public boolean useSmartBoard() { return false; } @Override public void reset(final ZirkelCanvas zc) { Started = false; } } ./src/rene/zirkel/tools/SetRangeTool.java0000640000175000017500000000413411357113171017340 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: SetRange.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; public class SetRangeTool extends ObjectConstructor { ObjectConstructor OC; PrimitiveCircleObject C; PointObject P1, P2; public SetRangeTool(final ZirkelCanvas zc, final PrimitiveCircleObject c, final ObjectConstructor oc) { C = c; OC = oc; C.setSelected(true); zc.repaint(); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (P1 == null) { P1 = zc.selectPoint(e.getX(), e.getY()); if (P1 != null) { P1.setSelected(true); showStatus(zc); zc.repaint(); } } else { P2 = zc.selectPoint(e.getX(), e.getY()); if (P2 == null) return; C.setRange(P1, P2); reset(zc); } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicatePointObjects(e.getX(), e.getY()); } @Override public void showStatus(final ZirkelCanvas zc) { if (P1 == null) zc.showStatus(Global.name("message.range.first")); else zc.showStatus(Global.name("message.range.second")); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setTool(OC); zc.validate(); zc.repaint(); } } ./src/rene/zirkel/tools/SetFixedCircle.java0000640000175000017500000000601311303263644017627 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: SetFixedCircle.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.CircleObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.FixedCircleObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.SegmentObject; public class SetFixedCircle extends ObjectConstructor implements Selector { ObjectConstructor OC; FixedCircleObject C; PointObject P1, P2; public SetFixedCircle(final ZirkelCanvas zc, final FixedCircleObject c, final ObjectConstructor oc) { C = c; OC = oc; c.setSelected(true); zc.repaint(); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (P1 == null) { final ConstructionObject o = zc.selectWithSelector(e.getX(), e .getY(), this); if (o == null) return; if (o instanceof PointObject) { P1 = (PointObject) o; P1.setSelected(true); showStatus(zc); zc.repaint(); return; } C.setFixed(o.getName()); C.setDragable(false); C.updateText(); reset(zc); } else { P2 = zc.selectPoint(e.getX(), e.getY()); if (P2 == null) return; C.setFixed("d(" + P1.getName() + "," + P2.getName() + ")"); reset(zc); } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateWithSelector(e.getX(), e.getY(), this); } @Override public void showStatus(final ZirkelCanvas zc) { if (P1 == null) zc.showStatus(Global.name("message.setfixedcircle.first")); else zc.showStatus(Global.name("message.setfixedcircle.second")); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setTool(OC); zc.validate(); showStatus(zc); zc.repaint(); zc.check(); } @Override public boolean useSmartBoard() { return P1 != null; } public boolean isAdmissible(final ZirkelCanvas zc, final ConstructionObject o) { if ((o instanceof PointObject || o instanceof SegmentObject || o instanceof FixedCircleObject || o instanceof CircleObject || o instanceof ExpressionObject) && !zc.getConstruction().dependsOn(o, C)) return true; return false; } } ./src/rene/zirkel/tools/SetCurveCenterTool.java0000640000175000017500000000335611303263644020540 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; import java.awt.event.MouseEvent; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.FunctionObject; public class SetCurveCenterTool extends ObjectConstructor { ObjectConstructor OC; FunctionObject P; public SetCurveCenterTool(final ZirkelCanvas zc, final FunctionObject p, final ObjectConstructor oc) { P = p; OC = oc; P.setSelected(true); zc.repaint(); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { final ConstructionObject o = zc.selectPoint(e.getX(), e.getY()); if (o == null) return; P.setCenter(o.getName()); reset(zc); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Global.name("message.setcenter")); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setTool(OC); zc.validate(); zc.repaint(); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/MagnetTool.java0000640000175000017500000000541211346125426017047 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Binder.java import eric.bar.JPropertiesBar; import java.awt.event.MouseEvent; import java.util.Enumeration; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.structures.MagnetObj; public class MagnetTool extends ObjectConstructor implements Selector { ObjectConstructor OC; PointObject P; public MagnetTool(final ZirkelCanvas zc, final PointObject p, final ObjectConstructor oc) { P = p; OC = oc; P.setStrongSelected(true); final Enumeration e = P.getMagnetObjects().elements(); while (e.hasMoreElements()) { final MagnetObj mo = (MagnetObj) e.nextElement(); mo.setSelected(true); } zc.repaint(); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { final ConstructionObject o = zc.selectWithSelector(e.getX(), e.getY(), this); if (o == null) { reset(zc); return; } if (o == P) return; if (o.selected()) { P.removeMagnetObject(o.getName()); o.setSelected(false); JPropertiesBar.RefreshBar(); } else { P.addMagnetObject(o.getName()); P.selectMagnetObjects(true); JPropertiesBar.RefreshBar(); } zc.repaint(); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateWithSelector(e.getX(), e.getY(), this); } public boolean isAdmissible(final ZirkelCanvas zc, final ConstructionObject o) { return true; // if ((o instanceof InsideObject || o instanceof PointonObject) && // !zc.getConstruction().dependsOn(o,P)) return true; // return false; } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Global.Loc("props.magnetmessage")); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setTool(OC); zc.validate(); JPropertiesBar.RefreshBar(); zc.repaint(); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/CVS/0000755000175000017500000000000011246462211014563 5ustar yvesyves./src/rene/zirkel/tools/CVS/Repository0000644000175000017500000000003211132354034016655 0ustar yvesyvescarmetal/rene/zirkel/tools./src/rene/zirkel/tools/CVS/Entries0000644000175000017500000000260011246462211016115 0ustar yvesyves/AnimatorTool.java/1.4/Tue Jan 13 15:09:33 2009/-ko/ /BinderTool.java/1.5/Wed Apr 15 18:22:28 2009/-ko/ /BreakpointAnimator.java/1.4/Tue Jan 13 15:09:33 2009/-ko/ /DeleteTool.java/1.4/Tue Jan 13 15:09:34 2009/-ko/ /DrawerTool.java/1.4/Tue Jan 13 15:09:34 2009/-ko/ /EditTool.java/1.4/Tue Jan 13 15:09:34 2009/-ko/ /HiderTool.java/1.4/Tue Jan 13 15:09:35 2009/-ko/ /LabelMover.java/1.4/Tue Jan 13 15:09:36 2009/-ko/ /MagnetTool.java/1.4/Tue Jan 13 15:09:36 2009/-ko/ /MetaMover.java/1.5/Sat Apr 18 17:01:05 2009/-ko/ /MoverTool.java/1.5/Sat Apr 18 16:59:53 2009/-ko/ /ObjectTracker.java/1.5/Wed Aug 19 12:22:46 2009/-ko/ /RenamerTool.java/1.4/Tue Jan 13 15:09:38 2009/-ko/ /ReorderTool.java/1.5/Tue Jan 13 15:09:38 2009/-ko/ /Ruler.java/1.4/Tue Jan 13 15:09:38 2009/-ko/ /SaveJob.java/1.4/Tue Jan 13 15:09:38 2009/-ko/ /SetAwayTool.java/1.4/Tue Jan 13 15:09:38 2009/-ko/ /SetCurveCenterTool.java/1.4/Tue Jan 13 15:09:38 2009/-ko/ /SetFixedAngle.java/1.4/Tue Jan 13 15:09:38 2009/-ko/ /SetFixedCircle.java/1.4/Tue Jan 13 15:09:38 2009/-ko/ /SetParameterTool.java/1.4/Tue Jan 13 15:09:38 2009/-ko/ /SetRangeTool.java/1.4/Tue Jan 13 15:09:38 2009/-ko/ /SetTargetsTool.java/1.4/Tue Jan 13 15:09:38 2009/-ko/ /Tracker.java/1.5/Wed Aug 19 12:08:59 2009/-ko/ /UniversalTracker.java/1.5/Tue Jan 13 15:09:39 2009/-ko/ /ZoomerTool.java/1.5/Tue Jan 13 15:09:39 2009/-ko/ /JSmacroTool.java/1.1/Sun Apr 19 12:56:52 2009// ./src/rene/zirkel/tools/CVS/RevisionCache/0000755000175000017500000000000011361275665017322 5ustar yvesyves./src/rene/zirkel/tools/CVS/RevisionCache/UniversalTracker.java#1.50000644000175000017500000001261211242764542023735 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Tracker.java import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.util.Enumeration; import rene.zirkel.ZirkelCanvas; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; public class UniversalTracker extends javax.swing.JPanel { /** * */ private static final long serialVersionUID = 1L; public BufferedImage TrackI = null; public MyGraphics TrackIG = null; int IW = 0, IH = 0; double DX = 0, Xmin = 0, Ymin = 0; boolean isActive = false; ZirkelCanvas ZC; public UniversalTracker(final ZirkelCanvas zc) { ZC = zc; } public void setActive(final boolean b) { isActive = b; } public boolean isActive() { return isActive; } public void clearTrackObjects() { final Enumeration e = ZC.getConstruction().V.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); o.setTracked(false); } isActive = false; } public synchronized void draw() { if (TrackI == null) { return; } if (!isActive) { return; } // in case of zoom or coordinates system move : if ((ZC.DX != DX) || (ZC.Xmin != Xmin) || (ZC.Ymin != Ymin)) { IW = ZC.IW; IH = ZC.IH; DX = ZC.DX; Xmin = ZC.Xmin; Ymin = ZC.Ymin; clearTrackImage(); } ZC.I.getGraphics().drawImage(TrackI, 0, 0, this); } public void createTrackImage() { IW = ZC.IW; IH = ZC.IH; DX = ZC.DX; Xmin = ZC.Xmin; Ymin = ZC.Ymin; TrackI = new BufferedImage(IW, IH, BufferedImage.TYPE_INT_ARGB); clearTrackImage(); TrackIG = new MyGraphics13(TrackI.getGraphics(), ZC); } public void clearTrackImage() { final Graphics2D g2D = TrackI.createGraphics(); g2D .setComposite(AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.0f)); final Rectangle2D.Double rect = new Rectangle2D.Double(0, 0, IW, IH); g2D.fill(rect); } public void drawTrackCircle(final PrimitiveCircleObject o, final double d, final double d0, final double r) { isActive = true; TrackIG.setColor(o); TrackIG.drawCircle(d, d0, r, o); } public void drawTrackLine(final ConstructionObject o, final double c1, final double r1, final double c2, final double r2) { isActive = true; TrackIG.setColor(o); TrackIG.drawLine(c1, r1, c2, r2, o); } public void drawTrackPoint(final ConstructionObject o, final double X, final double Y, final int type) { isActive = true; if (TrackIG == null) { return; } double size = ZC.pointSize(); if (size < 1) { size = 1; } final double r = ZC.col(X), c = ZC.row(Y); if (o.visible(ZC)) { final boolean ind = o.indicated(); final boolean sel = o.selected(); o.setIndicated(false); o.setSelected(false); switch (type) { case PointObject.SQUARE: final double sx = r - size - 1, sy = c - size - 1, sw = 2 * size + 2; if (o.getColorType() == ConstructionObject.THICK) { TrackIG.fillRect(sx, sy, sw, sw, true, false, o); } else { TrackIG.fillRect(sx, sy, sw, sw, new Color(250, 250, 250)); } TrackIG.setColor(o); TrackIG.drawRect(sx, sy, sw, sw); break; case PointObject.DIAMOND: final double dx = r - size - 2, dy = c - size - 2, dw = 2 * size + 4; TrackIG.drawDiamond(dx, dy, dw, (o.getColorType() == ConstructionObject.THICK), o); break; case PointObject.CIRCLE: final double cx = r - size - 1, cy = c - size - 1, cw = 2 * size + 2; if (o.getColorType() == ConstructionObject.THICK) { TrackIG.fillOval(cx, cy, cw, cw, true, false, o); } else { TrackIG.fillOval(cx, cy, cw, cw, new Color(250, 250, 250)); TrackIG.setColor(o); TrackIG.drawOval(cx, cy, cw, cw); } break; case PointObject.DOT: if (o.getColorType() == ConstructionObject.THICK) { TrackIG.fillRect(r, c, 1, 1, true, false, o); } else { TrackIG.fillRect(r, c, 1, 1, false, false, o); // TrackIG.drawLine(r, c, r, c); } break; case PointObject.CROSS: if (o.getColorType() == ConstructionObject.THICK) { TrackIG.drawThickLine(r - size, c, r + size, c); TrackIG.drawThickLine(r, c - size, r, c + size); } else { TrackIG.drawLine(r - size, c, r + size, c); TrackIG.drawLine(r, c - size, r, c + size); } break; case PointObject.DCROSS: final double dcx = r - size - 1, dcy = c - size - 1, dcw = 2 * size + 1; TrackIG.drawDcross(dcx, dcy, dcw, (o.getColorType() == ConstructionObject.THICK), o); break; } o.setIndicated(ind); o.setSelected(sel); } } } ./src/rene/zirkel/tools/CVS/RevisionCache/SetFixedCircle.java#1.40000644000175000017500000000601611171713460023300 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: SetFixedCircle.java import java.awt.event.MouseEvent; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.CircleObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.FixedCircleObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.SegmentObject; public class SetFixedCircle extends ObjectConstructor implements Selector { ObjectConstructor OC; FixedCircleObject C; PointObject P1, P2; public SetFixedCircle(final ZirkelCanvas zc, final FixedCircleObject c, final ObjectConstructor oc) { C = c; OC = oc; c.setSelected(true); zc.repaint(); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (P1 == null) { final ConstructionObject o = zc.selectWithSelector(e.getX(), e .getY(), this); if (o == null) return; if (o instanceof PointObject) { P1 = (PointObject) o; P1.setSelected(true); showStatus(zc); zc.repaint(); return; } C.setFixed(o.getName()); C.setDragable(false); C.updateText(); reset(zc); } else { P2 = zc.selectPoint(e.getX(), e.getY()); if (P2 == null) return; C.setFixed("d(" + P1.getName() + "," + P2.getName() + ")"); reset(zc); } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateWithSelector(e.getX(), e.getY(), this); } @Override public void showStatus(final ZirkelCanvas zc) { if (P1 == null) zc.showStatus(Zirkel.name("message.setfixedcircle.first")); else zc.showStatus(Zirkel.name("message.setfixedcircle.second")); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setTool(OC); zc.validate(); showStatus(zc); zc.repaint(); zc.check(); } @Override public boolean useSmartBoard() { return P1 != null; } public boolean isAdmissible(final ZirkelCanvas zc, final ConstructionObject o) { if ((o instanceof PointObject || o instanceof SegmentObject || o instanceof FixedCircleObject || o instanceof CircleObject || o instanceof ExpressionObject) && !zc.getConstruction().dependsOn(o, C)) return true; return false; } } ./src/rene/zirkel/tools/CVS/RevisionCache/DeleteTool.java#1.40000644000175000017500000000277411177016505022514 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Hider.java import java.awt.event.MouseEvent; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; public class DeleteTool extends ObjectConstructor { @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); final ConstructionObject o = zc.selectObject(e.getX(), e.getY()); if (o == null) return; zc.delete(o); zc.repaint(); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateObjects(e.getX(), e.getY()); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Zirkel .name("message.delete", "Delete: Select an object!")); } } ./src/rene/zirkel/tools/CVS/RevisionCache/BinderTool.java#1.50000644000175000017500000000537211302741415022506 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Binder.java import eric.JGlobals; import java.awt.event.MouseEvent; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.InsideObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PointonObject; public class BinderTool extends ObjectConstructor implements Selector { ObjectConstructor OC; PointObject P; public BinderTool(final ZirkelCanvas zc, final PointObject p, final ObjectConstructor oc) { P = p; OC = oc; P.setSelected(true); zc.repaint(); } boolean Control; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { Control = e.isControlDown(); final ConstructionObject o = zc.selectWithSelector(e.getX(), e.getY(), this); if (o == null) return; if (Control && !(o instanceof InsideObject)) return; if (zc.getConstruction().dependsOn(o, P)) return; P.setBound(o.getName()); if (o instanceof InsideObject) { if (Control || !(o instanceof PointonObject)) P.setInside(true); } else P.setUseAlpha(!e.isShiftDown()); zc.getConstruction().updateCircleDep(); zc.repaint(); reset(zc); JGlobals.EditObject(P, false, false); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { Control = e.isControlDown(); zc.indicateWithSelector(e.getX(), e.getY(), this); } public boolean isAdmissible(final ZirkelCanvas zc, final ConstructionObject o) { if ((o instanceof InsideObject || o instanceof PointonObject) && !zc.getConstruction().dependsOn(o, P)) return true; return false; } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Zirkel.name("message.bindpoint")); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setTool(OC); zc.validate(); zc.repaint(); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/CVS/RevisionCache/SetTargetsTool.java#1.40000644000175000017500000000363011333336171023365 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: SetParameter.java import java.awt.event.MouseEvent; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; public class SetTargetsTool extends ObjectConstructor { @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); final ConstructionObject o = zc.selectConstructableObject(e.getX(), e .getY()); if (o == null || !o.isFlag()) return; o.setTarget(true); if (o.isTarget()) { o.setSelected(true); zc.getConstruction().addTarget(o); zc.repaint(); } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateConstructableObjects(e.getX(), e.getY()); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.clearSelected(); zc.getConstruction().clearTargets(); zc.getConstruction().determineConstructables(); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Zirkel.name("message.targets", "Macro Targets: Select the Targets!")); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/CVS/RevisionCache/SaveJob.java#1.40000644000175000017500000000405411361275665022007 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: SetParameter.java import java.awt.event.MouseEvent; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; public class SaveJob extends ObjectConstructor { public ConstructionObject Last; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); final ConstructionObject o = zc.selectObject(e.getX(), e.getY()); if (o == null) return; o.setSelected(true); if (Last == null) { Last = o; zc.setJob(Last); showStatus(zc); } else { if (e.isShiftDown()) zc.addJobTarget(o, true); else zc.addJobTarget(o, false); } zc.repaint(); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateObjects(e.getX(), e.getY()); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.clearSelected(); zc.getConstruction().clearTargets(); zc.clearTargets(); Last = null; showStatus(zc); zc.clearJob(); } @Override public void showStatus(final ZirkelCanvas zc) { if (Last == null) zc.showStatus(Zirkel.name("message.savejob.first")); else zc.showStatus(Zirkel.name("message.savejob.second")); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/CVS/RevisionCache/MetaMover.java#1.50000644000175000017500000000601211302743253022336 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: MetaMover.java import java.awt.Cursor; import java.awt.event.MouseEvent; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.FixedAngleObject; import rene.zirkel.objects.FixedCircleObject; import rene.zirkel.objects.MoveableObject; import eric.JGlobals; public class MetaMover extends MoverTool { ObjectConstructor OC; ConstructionObject PP; public MetaMover(final ObjectConstructor oc, final ZirkelCanvas zc, final ConstructionObject p, final MouseEvent e) { OC=oc; PP=P=p; oc.pause(true); if (P!=null) { P.setSelected(true); ShowsValue=P.showValue(); ShowsName=P.showName(); zc.repaint(); showStatus(zc); zc.setCursor(new Cursor(Cursor.MOVE_CURSOR)); if (P instanceof MoveableObject) { ((MoveableObject) P).startDrag(zc.x(e.getX()), zc.y(e.getY())); } if (ZCG!=null) { ZCG.dispose(); ZCG=null; } ZCG=zc.getGraphics(); } } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (P==null) { return; } if (ZCG!=null) { ZCG.dispose(); ZCG=null; } JGlobals.RefreshBar(); zc.setCursor(Cursor.getDefaultCursor()); P.setSelected(false); P.setShowValue(ShowsValue); P.setShowName(ShowsName); if (zc.showGrid()&&!Global.getParameter("grid.leftsnap", false)) { PP.snap(zc); PP.round(); PP.updateText(); } zc.validate(); if (Grab) { zc.grab(false); Grab=false; } if (ChangedDrawable) { if (P instanceof FixedCircleObject) { ((FixedCircleObject) P).setDragable(WasDrawable); } else if (P instanceof FixedAngleObject) { ((FixedAngleObject) P).setDragable(WasDrawable); } } zc.clearSelected(); zc.repaint(); P=null; V=null; Selected=false; zc.setTool(OC); OC.pause(false); zc.validate(); zc.repaint(); } } ./src/rene/zirkel/tools/CVS/RevisionCache/ObjectTracker.java#1.50000644000175000017500000012702711302743354023175 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: ObjectTracker.java import java.awt.Graphics; import java.awt.event.MouseEvent; import java.util.Enumeration; import java.util.Vector; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.PolygonDrawer; import rene.zirkel.graphics.TrackPainter; import rene.zirkel.objects.AreaObject; import rene.zirkel.objects.CircleObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.FunctionObject; import rene.zirkel.objects.MoveableObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.QuadricObject; import rene.zirkel.objects.RayObject; import rene.zirkel.objects.SegmentObject; import rene.zirkel.objects.TrackObject; import rene.zirkel.structures.Coordinates; import eric.JLocusTrackObject; public class ObjectTracker extends ObjectConstructor implements TrackPainter, Runnable, Selector { public PointObject PM; public ConstructionObject O, P; public int PMax=16, PN; public ConstructionObject PO[]=new ConstructionObject[PMax]; Vector V=new Vector(), VPM=new Vector(); Vector VO[]=new Vector[PMax]; boolean Animate, Paint; public boolean Interactive=true; boolean Other=false; public ZirkelCanvas ZC; public ObjectTracker() { } public ObjectTracker(final ConstructionObject p, final PointObject pm, final ConstructionObject o, final ZirkelCanvas zc, final boolean animate, final boolean paint, final ConstructionObject po[]) { P=p; PM=pm; O=o; if (P!=null&&O!=null&&(PM!=null||(O instanceof ExpressionObject))) { Animate=animate; Paint=paint; if (PM!=null) { PM.project(O); } zc.validate(); zc.repaint(); showStatus(zc); PN=0; for (int i=0; i=PMax||po[i]==null) { break; } PO[PN]=po[i]; VO[i]=new Vector(); PN++; } } } public boolean isAdmissible(final ZirkelCanvas zc, final ConstructionObject o) { if (O==null) { if (o instanceof ExpressionObject&&((ExpressionObject) o).isSlider()) { return true; } if (o instanceof PrimitiveLineObject) { return true; } if (o instanceof PrimitiveCircleObject) { return true; } if (o instanceof PointObject&&((PointObject) o).isPointOn()) { return true; } return false; } else { if (!(o instanceof PointObject)) { return false; } if (!((MoveableObject) o).moveable()) { return false; } if ((O instanceof CircleObject)&&((CircleObject) O).getP2()==o) { return true; } if (zc.depends(O, o)) { return false; } final ConstructionObject bound=((PointObject) o).getBound(); if (bound!=null&&bound!=O) { return false; } return true; } } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); if (P==null) // no point selected yet { P=zc.selectPoint(e.getX(), e.getY()); if (P==null) { P=zc.selectLine(e.getX(), e.getY()); } if (P!=null) { P.setSelected(true); zc.repaint(); } if (e.isShiftDown()) { Other=true; PN=0; } else { Other=false; } showStatus(zc); } else if (Other) // want more points to track { ConstructionObject P=zc.selectPoint(e.getX(), e.getY()); if (P==null) { P=zc.selectLine(e.getX(), e.getY()); } if (P!=null) { P.setSelected(true); zc.repaint(); PO[PN]=P; VO[PN]=new Vector(); PN++; } if (!e.isShiftDown()||PN>=PMax) { Other=false; } showStatus(zc); } else if (O==null) // no object to track on yet { O=zc.selectWithSelector(e.getX(), e.getY(), this); if (O instanceof ExpressionObject) { zc.clearSelected(); zc.clearIndicated(); Animate=!e.isShiftDown(); Paint=true; compute(zc); ZC=zc; if (Animate) { zc.validate(); } zc.repaint(); } else if (O instanceof PointObject&&((PointObject) O).isPointOn()) { PM=(PointObject) O; O=PM.getBound(); zc.clearSelected(); zc.clearIndicated(); Animate=!e.isShiftDown(); Paint=true; compute(zc); ZC=zc; if (Animate) { zc.validate(); } zc.repaint(); } else { if (O!=null) { O.setSelected(true); zc.repaint(); } showStatus(zc); } } else if (PM==null&&!(O instanceof ExpressionObject)) { final ConstructionObject pm=zc.selectWithSelector(e.getX(), e.getY(), this); if (pm==null) { return; } PM=(PointObject) pm; zc.clearSelected(); zc.clearIndicated(); Animate=!e.isShiftDown(); Paint=true; compute(zc); ZC=zc; if (Animate) { zc.validate(); } zc.repaint(); } else if (!e.isControlDown()&&!e.isShiftDown()&&!e.isAltDown()) { if (!Running&&Interactive&&PM!=null&&PM.nearto(e.getX(), e.getY(), zc)) { Dragging=true; zc.getConstruction().shouldSwitch(true); } else if (Animate) { if (Paint) { Paint=false; } else { Animate=false; Paint=true; if (Running) { stop(); } showStatus(zc); } } else { if (Running) { return; } Paint=true; Animate=true; compute(zc); zc.validate(); zc.repaint(); showStatus(zc); } } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { if (PM!=null) { return; } if (P==null||Other) { zc.indicatePointsOrLines(e.getX(), e.getY()); } else if (O==null) { zc.indicateWithSelector(e.getX(), e.getY(), this); } else { zc.indicateWithSelector(e.getX(), e.getY(), this); } } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging||PM==null) { return; } PM.getY(); PM.move(zc.x(e.getX()), zc.y(e.getY())); zc.dovalidate(); if (P.valid()) { zc.repaint(); } } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging||PM==null) { return; } zc.getConstruction().shouldSwitch(false); Dragging=false; zc.validate(); } @Override public void reset(final ZirkelCanvas zc) { zc.clearSelected(); if (Running) { stop(); } PM=null; P=O=null; V=new Vector(); PN=0; for (int i=0; i50) { h=50; } Thread.sleep(50-h); time=System.currentTimeMillis(); } catch (final Exception ex) { } } if (Stopped) { break; } } ZCG.dispose(); zc.getConstruction().shouldSwitch(false); zc.getConstruction().clearSwitches(); } public ConstructionObject getObject() { return O; } double mod(final double x) { if (x>=Math.PI) { return x-2*Math.PI; } if (x<-Math.PI) { return x+2*Math.PI; } return x; } public void run() { if (O instanceof ExpressionObject&&!((ExpressionObject) O).isSlider()) { return; } if (V.size()==0) { return; } if (!Animate) { return; } Running=true; Stopped=false; showStatus(ZC); while (true) { try { Thread.sleep(100); } catch (final Exception ex) { } if (ZC.I!=null) { break; } } while (true) { if (PM!=null) { PM.move(oldx, oldy); } else if (O instanceof ExpressionObject) { ((ExpressionObject) O).setSliderPosition(oldx); } animate(ZC); if (Stopped) { break; } } if (PM!=null&&!(O instanceof ExpressionObject)) { if (PM!=null) { PM.move(oldx, oldy); } else if (O instanceof ExpressionObject) { ((ExpressionObject) O).setSliderPosition(oldx); } ZC.getConstruction().switchBack(); ZC.dovalidate(); ZC.repaint(); } synchronized (this) { notify(); } Running=false; showStatus(ZC); } @Override public void invalidate(final ZirkelCanvas zc) { stop(); } public void stop() { if (!Running) { return; } Stopped=true; try { wait(); } catch (final Exception e) { } ZC.repaint(); showStatus(ZC); } public void save(final XmlWriter xml) { if (P==null||O==null||(PM==null&&!(O instanceof ExpressionObject))) { return; } xml.startTagStart("Track"); xml.printArg("track", P.getName()); for (int i=0; i1) { xml.printArg("omit", ""+(Omit-1)); } xml.finishTagNewLine(); } @Override public void pause(final boolean flag) { if (flag) { if (Running) { stop(); } } } /** * This is the update function, calling docompute. * * @param zc */ public synchronized void compute(final ZirkelCanvas zc) { if (!isComplete()) { return; } double x=0, y=0; if (PM!=null) { x=PM.getX(); y=PM.getY(); } else if (O instanceof ExpressionObject) { x=((ExpressionObject) O).getSliderPosition(); } zc.getConstruction().clearSwitches(); zc.getConstruction().shouldSwitch(true); docompute(zc); zc.getConstruction().shouldSwitch(false); zc.getConstruction().clearSwitches(); if (PM!=null) { PM.move(x, y); } else if (O instanceof ExpressionObject) { ((ExpressionObject) O).setSliderPosition(x); } zc.dovalidate(); } /** * Complicated procedure to recompute the automatic track. In principle, a * moving point moves on some object, the coordinates of the tracked points * or the intersections of the tracked lines are stored, as well as the * positions of the moved point. But if the tracked point gets invalid, the * movement reverses and the interesections change. Moreover, there is a * list of secondary tracked objects. * * @param zc */ public synchronized void docompute(final ZirkelCanvas zc) { V=new Vector(); for (int i=0; i=2*Math.PI) { d-=2*Math.PI; } amin=astart=-d/2; amax=d/2; anull=(a1+a2)/2; } else { amin=astart=-Math.PI*0.9999; amax=Math.PI*0.9999; } double a=astart; PM.move(x+r*Math.cos(anull+a), y+r*Math.sin(anull+a)); PM.project(c); zc.getConstruction().validate(P, PM); zc.resetSum(); double x1=0, y1=0; boolean started=false; if (P.valid()) { zc.getConstruction().shouldSwitch(true); if (P instanceof PointObject) { final PointObject p=(PointObject) P; x1=p.getX(); y1=p.getY(); V.addElement(new Coordinates(x1, y1)); VPM.addElement(new Coordinates(PM.getX(), PM.getY())); started=true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L=(PrimitiveLineObject) P; X=L.getX(); Y=L.getY(); DX=L.getDX(); DY=L.getDY(); started=true; } } final boolean startedO[]=new boolean[PMax]; for (int i=0; izc.dx(1)) { da=zc.dx(1)/10; } double aold=a; double x2=0, y2=0; while (true) { a=a+da; boolean Break=false; if ((!started||range)&&a>=amax) { a=amax; Break=true; } else if ((!started||range)&&a<=amin) { a=amin; Break=true; } else if (started&&da>0) { if ((mod(aold-astart)<0&&mod(a-astart)>=0)&&!zc.getConstruction().haveSwitched()) { Break=true; a=astart; } } aold=a; PM.move(x+r*Math.cos(anull+a), y+r*Math.sin(anull+a)); PM.project(c); zc.getConstruction().validate(P, PM); if (P.valid()) { if (!started) { zc.getConstruction().shouldSwitch(true); astart=a; } boolean valid=false; if (P instanceof PointObject) { final PointObject p=(PointObject) P; x2=p.getX(); y2=p.getY(); valid=true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L=(PrimitiveLineObject) P; if (!started) { X=L.getX(); Y=L.getY(); DX=L.getDX(); DY=L.getDY(); } else { double xx, yy, dx, dy; xx=L.getX(); yy=L.getY(); dx=L.getDX(); dy=L.getDY(); final double det=dx*DY-dy*DX; if (Math.sqrt(Math.abs(det))>1e-9) { final double h=(-(X-xx)*DY+DX*(Y-yy))/(-det); x2=xx+h*dx; y2=yy+h*dy; valid=true; } X=xx; Y=yy; DX=dx; DY=dy; } } final double dist=zc.dCenter(x2, y2); final boolean different=((int) zc.col(x1)!=(int) zc.col(x2)||(int) zc.row(y1)!=(int) zc.row(y2)); if (valid&&different) { V.addElement(new Coordinates(x2, y2)); VPM.addElement(new Coordinates(PM.getX(), PM.getY())); } final double dp=Math.abs(x2-x1)+Math.abs(y2-y1); da=updateDA(da, valid, dist, dp, dmin, dmax, zc); x1=x2; y1=y2; started=true; } else if (started) { V.addElement(new Coordinates(x2, y2)); VPM.addElement(new Coordinates(PM.getX(), PM.getY())); da=-da; } addSecondary(startedO, zc); if (Break||System.currentTimeMillis()-time>5000) { break; } } } // Running on a line: else if (O instanceof PrimitiveLineObject) { zc.getConstruction().shouldSwitch(false); final PrimitiveLineObject l=(PrimitiveLineObject) O; PM.project(l); final double lx=l.getX(), ly=l.getY(), ldx=l.getDX(), ldy=l.getDY(); double amin=0, amax=0, astart=0; double dmax=0.5; boolean range=false; if (l instanceof RayObject) { amin=astart=0; amax=Math.PI*0.9999; range=true; } else if (l instanceof SegmentObject) { amin=astart=0; final double r=((SegmentObject) l).getLength(); System.out.println(r); dmax=r/20; amax=Math.atan(r)*2; range=true; } else { amin=astart=-Math.PI*0.99999; amax=Math.PI*0.9999; } double a=astart; double hd=Math.tan(mod(a)/2); PM.move(lx+hd*ldx, ly+hd*ldy); PM.project(l); zc.getConstruction().validate(P, PM); zc.resetSum(); double x1=0, y1=0; boolean started=false; if (P.valid()) { zc.getConstruction().shouldSwitch(true); if (P instanceof PointObject) { final PointObject p=(PointObject) P; x1=p.getX(); y1=p.getY(); V.addElement(new Coordinates(x1, y1)); VPM.addElement(new Coordinates(PM.getX(), PM.getY())); started=true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L=(PrimitiveLineObject) P; X=L.getX(); Y=L.getY(); DX=L.getDX(); DY=L.getDY(); started=true; } } final boolean startedO[]=new boolean[PMax]; for (int i=0; izc.dx(1)) { da=zc.dx(1)/10; } double aold=a; double x2=0, y2=0; while (true) { a=a+da; boolean Break=false; if ((!started||range)&&a>=amax) { a=amax; Break=true; } else if ((!started||range)&&a<=amin) { a=amin; Break=true; } else if (started&&da>0) { if ((mod(aold-astart)<0&&mod(a-astart)>=0)&&!zc.getConstruction().haveSwitched()) { Break=true; a=astart; } } aold=a; hd=Math.tan(mod(a)/2); PM.move(lx+hd*ldx, ly+hd*ldy); PM.project(l); zc.getConstruction().validate(P, PM); if (P.valid()) { if (!started) { zc.getConstruction().shouldSwitch(true); astart=a; } boolean valid=false; if (P instanceof PointObject) { final PointObject p=(PointObject) P; x2=p.getX(); y2=p.getY(); valid=true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L=(PrimitiveLineObject) P; if (!started) { X=L.getX(); Y=L.getY(); DX=L.getDX(); DY=L.getDY(); } else { double xx, yy, dx, dy; xx=L.getX(); yy=L.getY(); dx=L.getDX(); dy=L.getDY(); final double det=dx*DY-dy*DX; if (Math.sqrt(Math.abs(det))>1e-9) { final double h=(-(X-xx)*DY+DX*(Y-yy))/(-det); x2=xx+h*dx; y2=yy+h*dy; valid=true; } X=xx; Y=yy; DX=dx; DY=dy; } } final double dist=zc.dCenter(x2, y2); final boolean different=((int) zc.col(x1)!=(int) zc.col(x2)||(int) zc.row(y1)!=(int) zc.row(y2)); if (valid&&different) { V.addElement(new Coordinates(x2, y2)); VPM.addElement(new Coordinates(PM.getX(), PM.getY())); } final double dp=Math.abs(x2-x1)+Math.abs(y2-y1); da=updateDA(da, valid, dist, dp, dmin, dmax, zc); x1=x2; y1=y2; started=true; } else if (started) { V.addElement(new Coordinates(x2, y2)); VPM.addElement(new Coordinates(PM.getX(), PM.getY())); da=-da; } addSecondary(startedO, zc); if (Break||System.currentTimeMillis()-time>5000) { break; } } } // Running an expression slider: else if (O instanceof ExpressionObject) { zc.getConstruction().shouldSwitch(false); final ExpressionObject eo=(ExpressionObject) O; if (!eo.isSlider()) { return; } double amin=0, amax=0, astart=0; double dmax=0.5; boolean range=false; amin=astart=0; final double r=1; dmax=r/20; amax=Math.atan(r)*2; range=true; double a=astart; double hd=Math.tan(mod(a)/2); eo.setSliderPosition(0); zc.getConstruction().validate(P, null); zc.resetSum(); double x1=0, y1=0; boolean started=false; if (P.valid()) { zc.getConstruction().shouldSwitch(true); if (P instanceof PointObject) { final PointObject p=(PointObject) P; x1=p.getX(); y1=p.getY(); V.addElement(new Coordinates(x1, y1)); VPM.addElement(new Coordinates(eo.getSliderPosition(), 0)); started=true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L=(PrimitiveLineObject) P; X=L.getX(); Y=L.getY(); DX=L.getDX(); DY=L.getDY(); started=true; } } final boolean startedO[]=new boolean[PMax]; for (int i=0; izc.dx(1)) { da=zc.dx(1)/10; } double aold=a; double x2=0, y2=0; while (true) { a=a+da; boolean Break=false; if ((!started||range)&&a>=amax) { a=amax; Break=true; } else if ((!started||range)&&a<=amin) { a=amin; Break=true; } else if (started&&da>0) { if ((mod(aold-astart)<0&&mod(a-astart)>=0)&&!zc.getConstruction().haveSwitched()) { Break=true; a=astart; } } aold=a; hd=Math.tan(mod(a)/2); eo.setSliderPosition(hd); zc.getConstruction().validate(P, null); if (P.valid()) { if (!started) { zc.getConstruction().shouldSwitch(true); astart=a; } boolean valid=false; if (P instanceof PointObject) { final PointObject p=(PointObject) P; x2=p.getX(); y2=p.getY(); valid=true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L=(PrimitiveLineObject) P; if (!started) { X=L.getX(); Y=L.getY(); DX=L.getDX(); DY=L.getDY(); } else { double xx, yy, dx, dy; xx=L.getX(); yy=L.getY(); dx=L.getDX(); dy=L.getDY(); final double det=dx*DY-dy*DX; if (Math.sqrt(Math.abs(det))>1e-9) { final double h=(-(X-xx)*DY+DX*(Y-yy))/(-det); x2=xx+h*dx; y2=yy+h*dy; valid=true; } X=xx; Y=yy; DX=dx; DY=dy; } } final double dist=zc.dCenter(x2, y2); final boolean different=((int) zc.col(x1)!=(int) zc.col(x2)||(int) zc.row(y1)!=(int) zc.row(y2)); if (valid&&different) { V.addElement(new Coordinates(x2, y2)); VPM.addElement(new Coordinates(eo.getSliderPosition(), 0)); } final double dp=Math.abs(x2-x1)+Math.abs(y2-y1); da=updateDA(da, valid, dist, dp, dmin, dmax, zc); x1=x2; y1=y2; started=true; } else if (started) { V.addElement(new Coordinates(x2, y2)); VPM.addElement(new Coordinates(eo.getSliderPosition(), 0)); da=-da; } addSecondary(startedO, zc); if (Break||System.currentTimeMillis()-time>5000) { break; } } } } public void addSecondary(final boolean startedO[], final ZirkelCanvas zc) { for (int i=0; i1e-9) { final double h=(-(XO[i]-xx)*DYO[i]+DXO[i]*(YO[i]-yy))/(-det); XO[i]=xx; YO[i]=yy; DXO[i]=dx; DYO[i]=dy; VO[i].addElement(new Coordinates(xx+h*dx, yy+h*dy)); } } } } } public double StepSize=5; public double updateDA(double da, final boolean valid, final double dist, final double dp, final double dmin, final double dmax, final ZirkelCanvas zc) { if (V.size()>0&&valid) { if (dist<1.2) { if (dp>zc.dx(StepSize)) { da/=2; } else if (dp0&&da-dmin) { da=-dmin; } if (da>dmax) { da=dmax; } else if (da<-dmax) { da=-dmax; } } else { if (dp>zc.dx(StepSize*10)) { da/=2; } else if (dp0&&da-dmin) { da=-dmin; } if (da>dmax) { da=dmax; } else if (da<-dmax) { da=-dmax; } } } return da; } public void increaseOmit() { Omit++; } public void decreaseOmit() { if (Omit>1) { Omit--; } } public void setOmit(final int f) { Omit=f+1; } public boolean isComplete() { return !(P==null||O==null||(PM==null&&!(O instanceof ExpressionObject&&((ExpressionObject) O).isSlider()))); } public void keep(final ZirkelCanvas zc) { if (!isComplete()) { return; } final TrackObject t=new TrackObject(zc.getConstruction(), P, PO, PN, O, PM); zc.addObject(t); t.setDefaults(); reset(zc); t.compute(zc); zc.validate(); } @Override public String getTag() { return "Track"; } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Track")) { return false; } final XmlTag tag=tree.getTag(); if (!tag.hasParam("on")||!tag.hasParam("track")) { throw new ConstructionException("Track parameters missing!"); } else { try { PointObject pm=null; try { pm=(PointObject) c.find(tag.getValue("point")); } catch (final Exception ex) { } final ConstructionObject o=c.find(tag.getValue("on")); if (pm==null&&!(o instanceof ExpressionObject)) { throw new ConstructionException(""); } final ConstructionObject p=c.find(tag.getValue("track")); final ConstructionObject po[]=new ConstructionObject[PMax]; int pn=0; for (pn=0; pn. */ package rene.zirkel.tools; import java.awt.event.MouseEvent; import java.util.Enumeration; import java.util.Vector; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.CircleObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.SegmentObject; /** * Animator is a class to animate a point along a sequence of segments and/or * circles. The animation may either go back and forth or always in the same * direction. Shift-Click schaltet w‰hrend der Animation um. * * @author Rene * */ public class AnimatorTool extends ObjectConstructor implements Runnable, Selector { PointObject P; Vector V; // Vector of segments or circles ZirkelCanvas ZC; boolean Running = false, Interactive = true, Complete = false; boolean Negative = false; boolean Original = false; double Delay = 50; public AnimatorTool() { V = new Vector(); P = null; } public AnimatorTool(final PointObject p, final Vector v, final ZirkelCanvas zc, final boolean negative, final boolean original, final String delay) { P = p; if (!P.moveable()) return; V = new Vector(); final Enumeration e = v.elements(); while (e.hasMoreElements()) { final ConstructionObject o = zc.getConstruction().find( (String) e.nextElement()); if (!(o instanceof SegmentObject || o instanceof PrimitiveCircleObject || o instanceof PointObject)) return; V.addElement(o); } Stopped = false; ZC = zc; Complete = true; Negative = negative; Original = original; try { Delay = 50; Delay = new Double(delay).doubleValue(); } catch (final Exception ex) { } new Thread(this).start(); } public void setInteractive(final boolean flag) { Interactive = flag; } public boolean isAdmissible(final ZirkelCanvas zc, final ConstructionObject o) { if ((o instanceof CircleObject) && ((CircleObject) o).getP2() == P) return true; if (zc.depends(o, P)) return false; return true; } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); if (P == null) { P = zc.selectPoint(e.getX(), e.getY()); Complete = false; if (P != null && P.moveable()) { P.setSelected(true); zc.repaint(); showStatus(zc); } } else { if (!Complete && Interactive) { final ConstructionObject o = zc.selectWithSelector(e.getX(), e .getY(), this); if (o == null) return; boolean Have = (o == P); if (!Have) { final Enumeration en = V.elements(); while (en.hasMoreElements()) { if (o == en.nextElement()) { Have = true; break; } } } if (!Have) { if (!((o instanceof SegmentObject) || (o instanceof PrimitiveCircleObject) || (o instanceof PointObject))) return; o.setSelected(true); V.addElement(o); zc.repaint(); showStatus(zc); return; } } if (!Running) { Stopped = false; ZC = zc; zc.clearSelected(); Complete = true; zc.clearIndicated(); showStatus(zc); new Thread(this).start(); } else if (e.isShiftDown()) { Negative = !Negative; } else { Stopped = true; } } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { if (Complete || !Interactive) return; if (P == null) zc.indicatePointObjects(e.getX(), e.getY()); else zc.indicateObjects(e.getX(), e.getY()); } @Override public synchronized void reset(final ZirkelCanvas zc) { Stopped = true; Complete = false; super.reset(zc); P = null; Delay = 50; V = new Vector(); showStatus(zc); zc.repaint(); } @Override public void showStatus(final ZirkelCanvas zc) { if (P == null) zc.showStatus(Zirkel.name("message.animator.point")); else if (!Complete) zc.showStatus(Zirkel.name("message.animator.segment")); else zc.showStatus(Zirkel.name("message.animator.running")); } public void save(final XmlWriter xml) { if (P == null) return; xml.startTagStart("Animate"); xml.printArg("animate", P.getName()); int k = 0; final Enumeration e = V.elements(); while (e.hasMoreElements()) { final String s = ((ConstructionObject) e.nextElement()).getName(); xml.printArg("via" + k, s); k++; } if (Negative) xml.printArg("negative", "true"); if (Delay != 50) xml.printArg("delay", "" + Delay); xml.finishTagNewLine(); } boolean Stopped = false; public void run() { // if (JMacrosTools.busy) return; ZC.resetSum(); if (Original) ZC.getConstruction().setOriginalOrder(true); Running = true; showStatus(ZC); Enumeration e = V.elements(); double x = 0.001; boolean full = true; ConstructionObject o = null; long time = System.currentTimeMillis(); long stoptime = time; double end = 2 * Math.PI; boolean back = false; while (true) { if (Stopped) break; try { final long t = System.currentTimeMillis(); int h = (int) (t - time); if (h < 0) h = 0; if (h > Delay) h = (int) Delay; Thread.sleep((int) (Delay - h)); time = System.currentTimeMillis(); } catch (final Exception ex) { } if (Stopped) break; if (ZC.I == null) continue; synchronized (this) { if (full) { if (!e.hasMoreElements()) { e = V.elements(); } o = (ConstructionObject) e.nextElement(); full = false; x = 0.0001; if (o instanceof SegmentObject) x = 0.001 * ((SegmentObject) o).getLength(); else if (o instanceof PrimitiveCircleObject) { final PrimitiveCircleObject c = (PrimitiveCircleObject) o; if (c.hasRange()) { c.computeA1A2(); x = c.getA1(); end = c.getA2(); if (end < x) end = end + 2 * Math.PI; back = false; } else x = 0.0001 * c.getR(); } else if (o instanceof PointObject) { final PointObject p = (PointObject) o; synchronized (ZC) { P.move(p.getX(), p.getY()); ZC.dovalidate(); } ZC.repaint(); stoptime = System.currentTimeMillis(); } } if (o instanceof SegmentObject) { final SegmentObject s = (SegmentObject) o; synchronized (ZC) { if (back) P.move(s.getP1().getX() + (s.getLength() - x) * s.getDX(), s.getP1().getY() + (s.getLength() - x) * s.getDY()); else P.move(s.getP1().getX() + x * s.getDX(), s.getP1() .getY() + x * s.getDY()); ZC.dovalidate(); } ZC.repaint(); x += ZC.dx(2); if (x > 0.99 * s.getLength()) { if (Negative && !back) { x = 0.00001; back = true; } else { back = false; full = true; } } } else if (o instanceof PrimitiveCircleObject) { final PrimitiveCircleObject c = (PrimitiveCircleObject) o; if (c.getR() < 1e-10) { full = true; } else { synchronized (ZC) { if (Negative && !c.hasRange()) P.move(c.getP1().getX() + Math.cos(x) * c.getR(), c.getP1().getY() - Math.sin(x) * c.getR()); else P.move(c.getP1().getX() + Math.cos(x) * c.getR(), c.getP1().getY() + Math.sin(x) * c.getR()); ZC.dovalidate(); } ZC.repaint(); if (back) x -= ZC.dx(2) / c.getR(); else x += ZC.dx(2) / c.getR(); if (x > end && !back) { if (!Negative || back || !c.hasRange()) { full = true; back = false; } else { back = true; end = c.getA1(); } } if (back && x < end) { full = true; back = false; } } } else if (o instanceof PointObject) { if (System.currentTimeMillis() - stoptime > 5000) full = true; } } } Running = false; if (Original) ZC.getConstruction().setOriginalOrder(false); } @Override public synchronized void invalidate(final ZirkelCanvas zc) { Stopped = true; } @Override public boolean useSmartBoard() { return false; } public void increaseSpeed() { if (Delay > 1) Delay = Delay / 1.5; } public void decreaseSpeed() { if (Delay < 500) Delay = Delay * 1.5; } } ./src/rene/zirkel/tools/CVS/RevisionCache/MagnetTool.java#1.40000644000175000017500000000552511171707652022526 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Binder.java import java.awt.event.MouseEvent; import java.util.Enumeration; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.structures.MagnetObj; import eric.JGlobals; public class MagnetTool extends ObjectConstructor implements Selector { ObjectConstructor OC; PointObject P; public MagnetTool(final ZirkelCanvas zc, final PointObject p, final ObjectConstructor oc) { P = p; OC = oc; // P.setSelected(true); P.setStrongSelected(true); final Enumeration e = P.getMagnetObjects().elements(); while (e.hasMoreElements()) { final MagnetObj mo = (MagnetObj) e.nextElement(); mo.setSelected(true); } zc.repaint(); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { final ConstructionObject o = zc.selectWithSelector(e.getX(), e.getY(), this); if (o == null) { reset(zc); return; } if (o == P) return; if (o.selected()) { P.removeMagnetObject(o.getName()); o.setSelected(false); JGlobals.RefreshBar(); } else { P.addMagnetObject(o.getName()); // o.setSelected(true); P.selectMagnetObjects(true); JGlobals.RefreshBar(); } zc.repaint(); // if (!e.isShiftDown()) { // reset(zc); // // } // reset(zc); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateWithSelector(e.getX(), e.getY(), this); } public boolean isAdmissible(final ZirkelCanvas zc, final ConstructionObject o) { return true; // if ((o instanceof InsideObject || o instanceof PointonObject) && // !zc.getConstruction().dependsOn(o,P)) return true; // return false; } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(JGlobals.Loc("props.magnetmessage")); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setTool(OC); zc.validate(); JGlobals.RefreshBar(); zc.repaint(); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/CVS/RevisionCache/ZoomerTool.java#1.30000644000175000017500000001315011132723326022547 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Hider.java import java.awt.Cursor; import java.awt.event.MouseEvent; import java.util.Enumeration; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.MoveableObject; import rene.zirkel.objects.TextObject; import rene.zirkel.objects.UserFunctionObject; /** * @author Rene Werkzeug zum Zoomen des Fensters und zum Verschieben. * Verschieben funktioniert im Zentrum des Fensters. */ public class ZoomerTool extends ObjectConstructor { boolean Dragging = false, Zoom = false; double X, Y, W, X0, Y0; ObjectConstructor OC; public static void initNonDraggableObjects(final Construction c) { final Enumeration en = c.elements(); while (en.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) en.nextElement(); if ((o instanceof TextObject) || (o instanceof ExpressionObject) || (o instanceof UserFunctionObject)) { final MoveableObject mo = (MoveableObject) o; mo.startDrag(0, 0); } } } public static void shiftNonDraggableObjectsBy(final Construction c, final double dx, final double dy) { final Enumeration en = c.elements(); while (en.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) en.nextElement(); if ((o instanceof TextObject) || (o instanceof ExpressionObject) || (o instanceof UserFunctionObject)) { final MoveableObject mo = (MoveableObject) o; mo.dragTo(dx, dy); } ; // else if (!o.isKeepClose()) { // // System.out.println("dx="+dx); // o.setcOffset(o.xcOffset()+2*dx, o.ycOffset()+2*dy); // // // C.setXYW(C.getX()+dx*C.getW(), C.getY()+dy*C.getW(), // C.getW()); // // }; } } public static void zoomNonDraggableObjectsBy(final Construction c, final double f) { final Enumeration en = c.elements(); while (en.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) en.nextElement(); if ((o instanceof TextObject) || (o instanceof ExpressionObject) || (o instanceof UserFunctionObject)) { final MoveableObject mo = (MoveableObject) o; mo.move(c.getX() + (mo.getOldX() - c.getX()) * f, c.getY() + (mo.getOldY() - c.getY()) * f); } } } public ZoomerTool() { super(); } public ZoomerTool(final ObjectConstructor oc, final MouseEvent e, final ZirkelCanvas zc) { super(); OC = oc; X0 = zc.x(e.getX()); Y0 = zc.y(e.getY()); final Construction c = zc.getConstruction(); X = c.getX(); Y = c.getY(); W = c.getW(); Zoom = false; zc.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); Dragging = true; initNonDraggableObjects(c); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { X0 = zc.x(e.getX()); Y0 = zc.y(e.getY()); final Construction c = zc.getConstruction(); X = c.getX(); Y = c.getY(); W = c.getW(); Zoom = (Math.abs(X - X0) > W / 4 || Math.abs(Y - Y0) > W / 4); if (!Zoom) { zc.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); } Dragging = true; OC = null; initNonDraggableObjects(c); } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) { return; } final Construction c = zc.getConstruction(); c.setXYW(X, Y, W); zc.recompute(); final double x = zc.x(e.getX()), y = zc.y(e.getY()); if (Zoom) { final double f = Math.sqrt((X0 - X) * (X0 - X) + (Y0 - Y) * (Y0 - Y)) / Math.sqrt((x - X) * (x - X) + (y - Y) * (y - Y)); c.setXYW(X, Y, f * W); zoomNonDraggableObjectsBy(c, f); } else { c.setXYW(X - (x - X0), Y - (y - Y0), W); shiftNonDraggableObjectsBy(c, X0 - x, Y0 - y); } zc.recompute(); zc.validate(); zc.repaint(); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { Dragging = Zoom = false; zc.setCursor(Cursor.getDefaultCursor()); zc.recompute(); zc.validate(); zc.repaint(); if (OC != null) { zc.setTool(OC); } } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Zirkel.name("message.zoom")); } @Override public void reset(final ZirkelCanvas zc) { zc.clearSelected(); zc.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); Zoom = Dragging = false; } @Override public void invalidate(final ZirkelCanvas zc) { zc.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean flag) { X0 = zc.x(e.getX()); Y0 = zc.y(e.getY()); final Construction c = zc.getConstruction(); X = c.getX(); Y = c.getY(); W = c.getW(); Zoom = (Math.abs(X - X0) > W / 4 || Math.abs(Y - Y0) > W / 4); if (!Zoom) { zc.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); } else { zc.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/CVS/RevisionCache/HiderTool.java#1.40000644000175000017500000000311311317473670022337 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Hider.java import java.awt.event.MouseEvent; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; public class HiderTool extends ObjectConstructor { @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); final ConstructionObject o = zc.selectObject(e.getX(), e.getY()); if (o == null) return; if (e.isShiftDown()) o.setSuperHidden(true); else o.setHidden(!o.isHidden()); zc.repaint(); zc.reloadCD(); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateObjects(e.getX(), e.getY()); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Zirkel.name("message.hide", "Hide: Select an object!")); } } ./src/rene/zirkel/tools/CVS/RevisionCache/ObjectTracker.java#1.40000644000175000017500000007730611242756757023216 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: ObjectTracker.java import java.awt.Graphics; import java.awt.event.MouseEvent; import java.util.Enumeration; import java.util.Vector; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.PolygonDrawer; import rene.zirkel.graphics.TrackPainter; import rene.zirkel.objects.AreaObject; import rene.zirkel.objects.CircleObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.FunctionObject; import rene.zirkel.objects.MoveableObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.QuadricObject; import rene.zirkel.objects.RayObject; import rene.zirkel.objects.SegmentObject; import rene.zirkel.objects.TrackObject; import rene.zirkel.structures.Coordinates; import eric.JLocusTrackObject; public class ObjectTracker extends ObjectConstructor implements TrackPainter, Runnable, Selector { public PointObject PM; public ConstructionObject O, P; public int PMax = 16, PN; public ConstructionObject PO[] = new ConstructionObject[PMax]; Vector V = new Vector(), VPM = new Vector(); Vector VO[] = new Vector[PMax]; boolean Animate, Paint; public boolean Interactive = true; boolean Other = false; public ZirkelCanvas ZC; public ObjectTracker() { } public ObjectTracker(final ConstructionObject p, final PointObject pm, final ConstructionObject o, final ZirkelCanvas zc, final boolean animate, final boolean paint, final ConstructionObject po[]) { P = p; PM = pm; O = o; if (P != null && O != null && (PM != null || (O instanceof ExpressionObject))) { Animate = animate; Paint = paint; if (PM != null) PM.project(O); zc.validate(); zc.repaint(); showStatus(zc); PN = 0; for (int i = 0; i < po.length; i++) { if (i >= PMax || po[i] == null) break; PO[PN] = po[i]; VO[i] = new Vector(); PN++; } } } public boolean isAdmissible(final ZirkelCanvas zc, final ConstructionObject o) { if (O == null) { if (o instanceof ExpressionObject && ((ExpressionObject) o).isSlider()) return true; if (o instanceof PrimitiveLineObject) return true; if (o instanceof PrimitiveCircleObject) return true; if (o instanceof PointObject && ((PointObject) o).isPointOn()) return true; return false; } else { if (!(o instanceof PointObject)) return false; if (!((MoveableObject) o).moveable()) return false; if ((O instanceof CircleObject) && ((CircleObject) O).getP2() == o) return true; if (zc.depends(O, o)) return false; final ConstructionObject bound = ((PointObject) o).getBound(); if (bound != null && bound != O) return false; return true; } } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); if (P == null) // no point selected yet { P = zc.selectPoint(e.getX(), e.getY()); if (P == null) P = zc.selectLine(e.getX(), e.getY()); if (P != null) { P.setSelected(true); zc.repaint(); } if (e.isShiftDown()) { Other = true; PN = 0; } else Other = false; showStatus(zc); } else if (Other) // want more points to track { ConstructionObject P = zc.selectPoint(e.getX(), e.getY()); if (P == null) P = zc.selectLine(e.getX(), e.getY()); if (P != null) { P.setSelected(true); zc.repaint(); PO[PN] = P; VO[PN] = new Vector(); PN++; } if (!e.isShiftDown() || PN >= PMax) Other = false; showStatus(zc); } else if (O == null) // no object to track on yet { O = zc.selectWithSelector(e.getX(), e.getY(), this); if (O instanceof ExpressionObject) { zc.clearSelected(); zc.clearIndicated(); Animate = !e.isShiftDown(); Paint = true; compute(zc); ZC = zc; if (Animate) zc.validate(); zc.repaint(); } else if (O instanceof PointObject && ((PointObject) O).isPointOn()) { PM = (PointObject) O; O = PM.getBound(); zc.clearSelected(); zc.clearIndicated(); Animate = !e.isShiftDown(); Paint = true; compute(zc); ZC = zc; if (Animate) zc.validate(); zc.repaint(); } else { if (O != null) { O.setSelected(true); zc.repaint(); } showStatus(zc); } } else if (PM == null && !(O instanceof ExpressionObject)) { final ConstructionObject pm = zc.selectWithSelector(e.getX(), e .getY(), this); if (pm == null) return; PM = (PointObject) pm; zc.clearSelected(); zc.clearIndicated(); Animate = !e.isShiftDown(); Paint = true; compute(zc); ZC = zc; if (Animate) zc.validate(); zc.repaint(); } else if (!e.isControlDown() && !e.isShiftDown() && !e.isAltDown()) { if (!Running && Interactive && PM != null && PM.nearto(e.getX(), e.getY(), zc)) { Dragging = true; zc.getConstruction().shouldSwitch(true); } else if (Animate) { if (Paint) { Paint = false; } else { Animate = false; Paint = true; if (Running) stop(); showStatus(zc); } } else { if (Running) return; Paint = true; Animate = true; compute(zc); zc.validate(); zc.repaint(); showStatus(zc); } } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { if (PM != null) return; if (P == null || Other) zc.indicatePointsOrLines(e.getX(), e.getY()); else if (O == null) zc.indicateWithSelector(e.getX(), e.getY(), this); else zc.indicateWithSelector(e.getX(), e.getY(), this); } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging || PM == null) return; PM.getY(); PM.move(zc.x(e.getX()), zc.y(e.getY())); zc.dovalidate(); if (P.valid()) zc.repaint(); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging || PM == null) return; zc.getConstruction().shouldSwitch(false); Dragging = false; zc.validate(); } @Override public void reset(final ZirkelCanvas zc) { zc.clearSelected(); if (Running) stop(); PM = null; P = O = null; V = new Vector(); PN = 0; for (int i = 0; i < PMax; i++) VO[i] = null; zc.repaint(); showStatus(zc); Omit = 1; } @Override public void showStatus(final ZirkelCanvas zc) { if (P == null || Other) zc.showStatus(Zirkel.name("message.objecttracker.select")); else if (O == null) zc.showStatus(Zirkel.name("message.objecttracker.object")); else if (PM == null && !(O instanceof ExpressionObject)) zc.showStatus(Zirkel.name("message.objecttracker.selectpoint")); else if (Running) zc.showStatus(Zirkel.name("message.objecttracker.stop")); else zc.showStatus(Zirkel.name("message.objecttracker.start")); } public Enumeration elements() { return V.elements(); } public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!isComplete()) return; if (P == null || !Paint) return; Coordinates C; Enumeration e = V.elements(); double c0, r0, c, r; g.setColor(P); PolygonDrawer pd = new PolygonDrawer(g, P); if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c0 = zc.col(C.X); r0 = zc.row(C.Y); pd.startPolygon(c0, r0); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c = zc.col(C.X); r = zc.row(C.Y); if (Math.abs(c0 - c) < 100 && Math.abs(r0 - r) < 100) pd.drawTo(c, r); else pd.finishPolygon(); c0 = c; r0 = r; } pd.finishPolygon(); } for (int i = 0; i < PN; i++) { e = VO[i].elements(); g.setColor(PO[i]); pd = new PolygonDrawer(g, PO[i]); if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c0 = zc.col(C.X); r0 = zc.row(C.Y); pd.startPolygon(c0, r0); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c = zc.col(C.X); r = zc.row(C.Y); if (Math.abs(c0 - c) < 100 && Math.abs(r0 - r) < 100) pd.drawTo(c, r); else pd.finishPolygon(); c0 = c; r0 = r; } } pd.finishPolygon(); } } boolean Running = false, Stopped = false; public void validate(final ZirkelCanvas zc) { if (!isComplete()) return; if (O instanceof ExpressionObject && !((ExpressionObject) O).isSlider()) return; if (Running) return; if (PM != null) { PM.project(O); oldx = PM.getX(); oldy = PM.getY(); } else if (O instanceof ExpressionObject) { oldx = ((ExpressionObject) O).getSliderPosition(); } compute(zc); if (Animate) { ZC = zc; new Thread(this).start(); } else { if (PM != null) { PM.move(oldx, oldy); } zc.dovalidate(); zc.repaint(); } } double da = 0; double oldx, oldy; double X, Y, DX, DY; double XO[] = new double[PMax], YO[] = new double[PMax], DXO[] = new double[PMax], DYO[] = new double[PMax]; int Omit = 1; public void animate(final ZirkelCanvas zc) { if (!isComplete()) return; zc.getConstruction().clearSwitches(); zc.getConstruction().shouldSwitch(true); final Enumeration e = VPM.elements(); final Enumeration ev = V.elements(); long time = System.currentTimeMillis(); int i = 0; boolean start = false; final Graphics ZCG = ZC.getGraphics(); while (e.hasMoreElements()) { final Coordinates c = (Coordinates) e.nextElement(); final Coordinates cv = (Coordinates) ev.nextElement(); if (PM == null && !(O instanceof ExpressionObject)) break; synchronized (zc) { if (PM != null) PM.move(c.X, c.Y); else if (O instanceof ExpressionObject) ((ExpressionObject) O).setSliderPosition(c.X); if (!start) { zc.resetSum(); start = true; } } zc.dovalidate(); i++; if (i < Omit) continue; i = 0; if (zc.isInside(cv.X, cv.Y)) { if (P != null && P.valid()) ZC.paint(ZCG); try { final long t = System.currentTimeMillis(); int h = (int) (t - time); if (h < 0) h = 0; if (h > 50) h = 50; Thread.sleep(50 - h); time = System.currentTimeMillis(); } catch (final Exception ex) { } } if (Stopped) break; } ZCG.dispose(); zc.getConstruction().shouldSwitch(false); zc.getConstruction().clearSwitches(); } public ConstructionObject getObject() { return O; } double mod(final double x) { if (x >= Math.PI) return x - 2 * Math.PI; if (x < -Math.PI) return x + 2 * Math.PI; return x; } public void run() { if (O instanceof ExpressionObject && !((ExpressionObject) O).isSlider()) return; if (V.size() == 0) return; if (!Animate) return; Running = true; Stopped = false; showStatus(ZC); while (true) { try { Thread.sleep(100); } catch (final Exception ex) { } if (ZC.I != null) break; } while (true) { if (PM != null) PM.move(oldx, oldy); else if (O instanceof ExpressionObject) { ((ExpressionObject) O).setSliderPosition(oldx); } animate(ZC); if (Stopped) break; } if (PM != null && !(O instanceof ExpressionObject)) { if (PM != null) PM.move(oldx, oldy); else if (O instanceof ExpressionObject) { ((ExpressionObject) O).setSliderPosition(oldx); } ZC.getConstruction().switchBack(); ZC.dovalidate(); ZC.repaint(); } synchronized (this) { notify(); } Running = false; showStatus(ZC); } @Override public void invalidate(final ZirkelCanvas zc) { stop(); } public void stop() { if (!Running) return; Stopped = true; try { wait(); } catch (final Exception e) { } ZC.repaint(); showStatus(ZC); } public void save(final XmlWriter xml) { if (P == null || O == null || (PM == null && !(O instanceof ExpressionObject))) return; xml.startTagStart("Track"); xml.printArg("track", P.getName()); for (int i = 0; i < PN; i++) { xml.printArg("track" + i, PO[i].getName()); } xml.printArg("on", O.getName()); if (PM != null) xml.printArg("move", PM.getName()); if (Animate && Paint) xml.printArg("animate", "true"); else if (Animate && !Paint) xml.printArg("animate", "nopaint"); if (Omit > 1) xml.printArg("omit", "" + (Omit - 1)); xml.finishTagNewLine(); } @Override public void pause(final boolean flag) { if (flag) { if (Running) stop(); } } /** * This is the update function, calling docompute. * * @param zc */ public synchronized void compute(final ZirkelCanvas zc) { if (!isComplete()) return; double x = 0, y = 0; if (PM != null) { x = PM.getX(); y = PM.getY(); } else if (O instanceof ExpressionObject) { x = ((ExpressionObject) O).getSliderPosition(); } zc.getConstruction().clearSwitches(); zc.getConstruction().shouldSwitch(true); docompute(zc); zc.getConstruction().shouldSwitch(false); zc.getConstruction().clearSwitches(); if (PM != null) PM.move(x, y); else if (O instanceof ExpressionObject) { ((ExpressionObject) O).setSliderPosition(x); } zc.dovalidate(); } /** * Complicated procedure to recompute the automatic track. In principle, a * moving point moves on some object, the coordinates of the tracked points * or the intersections of the tracked lines are stored, as well as the * positions of the moved point. But if the tracked point gets invalid, the * movement reverses and the interesections change. Moreover, there is a * list of secondary tracked objects. * * @param zc */ public synchronized void docompute(final ZirkelCanvas zc) { V = new Vector(); for (int i = 0; i < PN; i++) VO[i] = new Vector(); VPM = new Vector(); // Running on a circle: if (O instanceof PrimitiveCircleObject) { zc.getConstruction().shouldSwitch(false); final PrimitiveCircleObject c = (PrimitiveCircleObject) O; final double x = c.getX(), y = c.getY(), r = c.getR(); PM.project(c); double amin = 0, amax = 0, astart = 0, anull = 0; final double dmax = 0.5; boolean range = false; if (c.hasRange()) { range = true; final double a1 = c.getA1(); final double a2 = c.getA2(); double d = a2 - a1; while (d < 0) d += 2 * Math.PI; while (d >= 2 * Math.PI) d -= 2 * Math.PI; amin = astart = -d / 2; amax = d / 2; anull = (a1 + a2) / 2; } else { amin = astart = -Math.PI * 0.9999; amax = Math.PI * 0.9999; } double a = astart; PM.move(x + r * Math.cos(anull + a), y + r * Math.sin(anull + a)); PM.project(c); zc.getConstruction().validate(P, PM); zc.resetSum(); double x1 = 0, y1 = 0; boolean started = false; if (P.valid()) { zc.getConstruction().shouldSwitch(true); if (P instanceof PointObject) { final PointObject p = (PointObject) P; x1 = p.getX(); y1 = p.getY(); V.addElement(new Coordinates(x1, y1)); VPM.addElement(new Coordinates(PM.getX(), PM.getY())); started = true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) P; X = L.getX(); Y = L.getY(); DX = L.getDX(); DY = L.getDY(); started = true; } } final boolean startedO[] = new boolean[PMax]; for (int i = 0; i < PN; i++) startedO[i] = false; final long time = System.currentTimeMillis(); addSecondary(startedO, zc); final double dmin = 0.001; if (da < 1e-10 || da > zc.dx(1)) da = zc.dx(1) / 10; double aold = a; double x2 = 0, y2 = 0; while (true) { a = a + da; boolean Break = false; if ((!started || range) && a >= amax) { a = amax; Break = true; } else if ((!started || range) && a <= amin) { a = amin; Break = true; } else if (started && da > 0) { if ((mod(aold - astart) < 0 && mod(a - astart) >= 0) && !zc.getConstruction().haveSwitched()) { Break = true; a = astart; } } aold = a; PM.move(x + r * Math.cos(anull + a), y + r * Math.sin(anull + a)); PM.project(c); zc.getConstruction().validate(P, PM); if (P.valid()) { if (!started) { zc.getConstruction().shouldSwitch(true); astart = a; } boolean valid = false; if (P instanceof PointObject) { final PointObject p = (PointObject) P; x2 = p.getX(); y2 = p.getY(); valid = true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) P; if (!started) { X = L.getX(); Y = L.getY(); DX = L.getDX(); DY = L.getDY(); } else { double xx, yy, dx, dy; xx = L.getX(); yy = L.getY(); dx = L.getDX(); dy = L.getDY(); final double det = dx * DY - dy * DX; if (Math.sqrt(Math.abs(det)) > 1e-9) { final double h = (-(X - xx) * DY + DX * (Y - yy)) / (-det); x2 = xx + h * dx; y2 = yy + h * dy; valid = true; } X = xx; Y = yy; DX = dx; DY = dy; } } final double dist = zc.dCenter(x2, y2); final boolean different = ((int) zc.col(x1) != (int) zc .col(x2) || (int) zc.row(y1) != (int) zc.row(y2)); if (valid && different) { V.addElement(new Coordinates(x2, y2)); VPM.addElement(new Coordinates(PM.getX(), PM.getY())); } final double dp = Math.abs(x2 - x1) + Math.abs(y2 - y1); da = updateDA(da, valid, dist, dp, dmin, dmax, zc); x1 = x2; y1 = y2; started = true; } else if (started) { V.addElement(new Coordinates(x2, y2)); VPM.addElement(new Coordinates(PM.getX(), PM.getY())); da = -da; } addSecondary(startedO, zc); if (Break || System.currentTimeMillis() - time > 5000) break; } } // Running on a line: else if (O instanceof PrimitiveLineObject) { zc.getConstruction().shouldSwitch(false); final PrimitiveLineObject l = (PrimitiveLineObject) O; PM.project(l); final double lx = l.getX(), ly = l.getY(), ldx = l.getDX(), ldy = l .getDY(); double amin = 0, amax = 0, astart = 0; double dmax = 0.5; boolean range = false; if (l instanceof RayObject) { amin = astart = 0; amax = Math.PI * 0.9999; range = true; } else if (l instanceof SegmentObject) { amin = astart = 0; final double r = ((SegmentObject) l).getLength(); System.out.println(r); dmax = r / 20; amax = Math.atan(r) * 2; range = true; } else { amin = astart = -Math.PI * 0.99999; amax = Math.PI * 0.9999; } double a = astart; double hd = Math.tan(mod(a) / 2); PM.move(lx + hd * ldx, ly + hd * ldy); PM.project(l); zc.getConstruction().validate(P, PM); zc.resetSum(); double x1 = 0, y1 = 0; boolean started = false; if (P.valid()) { zc.getConstruction().shouldSwitch(true); if (P instanceof PointObject) { final PointObject p = (PointObject) P; x1 = p.getX(); y1 = p.getY(); V.addElement(new Coordinates(x1, y1)); VPM.addElement(new Coordinates(PM.getX(), PM.getY())); started = true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) P; X = L.getX(); Y = L.getY(); DX = L.getDX(); DY = L.getDY(); started = true; } } final boolean startedO[] = new boolean[PMax]; for (int i = 0; i < PN; i++) startedO[i] = false; final long time = System.currentTimeMillis(); addSecondary(startedO, zc); final double dmin = 0.001; if (da < 1e-10 || da > zc.dx(1)) da = zc.dx(1) / 10; double aold = a; double x2 = 0, y2 = 0; while (true) { a = a + da; boolean Break = false; if ((!started || range) && a >= amax) { a = amax; Break = true; } else if ((!started || range) && a <= amin) { a = amin; Break = true; } else if (started && da > 0) { if ((mod(aold - astart) < 0 && mod(a - astart) >= 0) && !zc.getConstruction().haveSwitched()) { Break = true; a = astart; } } aold = a; hd = Math.tan(mod(a) / 2); PM.move(lx + hd * ldx, ly + hd * ldy); PM.project(l); zc.getConstruction().validate(P, PM); if (P.valid()) { if (!started) { zc.getConstruction().shouldSwitch(true); astart = a; } boolean valid = false; if (P instanceof PointObject) { final PointObject p = (PointObject) P; x2 = p.getX(); y2 = p.getY(); valid = true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) P; if (!started) { X = L.getX(); Y = L.getY(); DX = L.getDX(); DY = L.getDY(); } else { double xx, yy, dx, dy; xx = L.getX(); yy = L.getY(); dx = L.getDX(); dy = L.getDY(); final double det = dx * DY - dy * DX; if (Math.sqrt(Math.abs(det)) > 1e-9) { final double h = (-(X - xx) * DY + DX * (Y - yy)) / (-det); x2 = xx + h * dx; y2 = yy + h * dy; valid = true; } X = xx; Y = yy; DX = dx; DY = dy; } } final double dist = zc.dCenter(x2, y2); final boolean different = ((int) zc.col(x1) != (int) zc .col(x2) || (int) zc.row(y1) != (int) zc.row(y2)); if (valid && different) { V.addElement(new Coordinates(x2, y2)); VPM.addElement(new Coordinates(PM.getX(), PM.getY())); } final double dp = Math.abs(x2 - x1) + Math.abs(y2 - y1); da = updateDA(da, valid, dist, dp, dmin, dmax, zc); x1 = x2; y1 = y2; started = true; } else if (started) { V.addElement(new Coordinates(x2, y2)); VPM.addElement(new Coordinates(PM.getX(), PM.getY())); da = -da; } addSecondary(startedO, zc); if (Break || System.currentTimeMillis() - time > 5000) break; } } // Running an expression slider: else if (O instanceof ExpressionObject) { zc.getConstruction().shouldSwitch(false); final ExpressionObject eo = (ExpressionObject) O; if (!eo.isSlider()) return; double amin = 0, amax = 0, astart = 0; double dmax = 0.5; boolean range = false; amin = astart = 0; final double r = 1; dmax = r / 20; amax = Math.atan(r) * 2; range = true; double a = astart; double hd = Math.tan(mod(a) / 2); eo.setSliderPosition(0); zc.getConstruction().validate(P, null); zc.resetSum(); double x1 = 0, y1 = 0; boolean started = false; if (P.valid()) { zc.getConstruction().shouldSwitch(true); if (P instanceof PointObject) { final PointObject p = (PointObject) P; x1 = p.getX(); y1 = p.getY(); V.addElement(new Coordinates(x1, y1)); VPM.addElement(new Coordinates(eo.getSliderPosition(), 0)); started = true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) P; X = L.getX(); Y = L.getY(); DX = L.getDX(); DY = L.getDY(); started = true; } } final boolean startedO[] = new boolean[PMax]; for (int i = 0; i < PN; i++) startedO[i] = false; final long time = System.currentTimeMillis(); addSecondary(startedO, zc); final double dmin = 0.001; if (da < 1e-10 || da > zc.dx(1)) da = zc.dx(1) / 10; double aold = a; double x2 = 0, y2 = 0; while (true) { a = a + da; boolean Break = false; if ((!started || range) && a >= amax) { a = amax; Break = true; } else if ((!started || range) && a <= amin) { a = amin; Break = true; } else if (started && da > 0) { if ((mod(aold - astart) < 0 && mod(a - astart) >= 0) && !zc.getConstruction().haveSwitched()) { Break = true; a = astart; } } aold = a; hd = Math.tan(mod(a) / 2); eo.setSliderPosition(hd); zc.getConstruction().validate(P, null); if (P.valid()) { if (!started) { zc.getConstruction().shouldSwitch(true); astart = a; } boolean valid = false; if (P instanceof PointObject) { final PointObject p = (PointObject) P; x2 = p.getX(); y2 = p.getY(); valid = true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) P; if (!started) { X = L.getX(); Y = L.getY(); DX = L.getDX(); DY = L.getDY(); } else { double xx, yy, dx, dy; xx = L.getX(); yy = L.getY(); dx = L.getDX(); dy = L.getDY(); final double det = dx * DY - dy * DX; if (Math.sqrt(Math.abs(det)) > 1e-9) { final double h = (-(X - xx) * DY + DX * (Y - yy)) / (-det); x2 = xx + h * dx; y2 = yy + h * dy; valid = true; } X = xx; Y = yy; DX = dx; DY = dy; } } final double dist = zc.dCenter(x2, y2); final boolean different = ((int) zc.col(x1) != (int) zc .col(x2) || (int) zc.row(y1) != (int) zc.row(y2)); if (valid && different) { V.addElement(new Coordinates(x2, y2)); VPM.addElement(new Coordinates(eo.getSliderPosition(), 0)); } final double dp = Math.abs(x2 - x1) + Math.abs(y2 - y1); da = updateDA(da, valid, dist, dp, dmin, dmax, zc); x1 = x2; y1 = y2; started = true; } else if (started) { V.addElement(new Coordinates(x2, y2)); VPM.addElement(new Coordinates(eo.getSliderPosition(), 0)); da = -da; } addSecondary(startedO, zc); if (Break || System.currentTimeMillis() - time > 5000) break; } } } public void addSecondary(final boolean startedO[], final ZirkelCanvas zc) { for (int i = 0; i < PN; i++) { if (PM != null) zc.getConstruction().validate(PO[i], PM); else zc.getConstruction().validate(PO[i], O); if (!PO[i].valid()) continue; if (PO[i] instanceof PointObject) { final PointObject p = (PointObject) PO[i]; VO[i].addElement(new Coordinates(p.getX(), p.getY())); } else if (PO[i] instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) PO[i]; if (!startedO[i]) { XO[i] = L.getX(); YO[i] = L.getY(); DXO[i] = L.getDX(); DYO[i] = L.getDY(); startedO[i] = true; } else { double xx, yy, dx, dy; xx = L.getX(); yy = L.getY(); dx = L.getDX(); dy = L.getDY(); final double det = dx * DYO[i] - dy * DXO[i]; if (Math.sqrt(Math.abs(det)) > 1e-9) { final double h = (-(XO[i] - xx) * DYO[i] + DXO[i] * (YO[i] - yy)) / (-det); XO[i] = xx; YO[i] = yy; DXO[i] = dx; DYO[i] = dy; VO[i].addElement(new Coordinates(xx + h * dx, yy + h * dy)); } } } } } public double StepSize = 5; public double updateDA(double da, final boolean valid, final double dist, final double dp, final double dmin, final double dmax, final ZirkelCanvas zc) { if (V.size() > 0 && valid) { if (dist < 1.2) { if (dp > zc.dx(StepSize)) da /= 2; else if (dp < zc.dx(StepSize / 2)) da *= 2; if (da > 0 && da < dmin) da = dmin; else if (da < 0 && da > -dmin) da = -dmin; if (da > dmax) da = dmax; else if (da < -dmax) da = -dmax; } else { if (dp > zc.dx(StepSize * 10)) da /= 2; else if (dp < zc.dx(StepSize * 5)) da *= 2; if (da > 0 && da < dmin) da = dmin; else if (da < 0 && da > -dmin) da = -dmin; if (da > dmax) da = dmax; else if (da < -dmax) da = -dmax; } } return da; } public void increaseOmit() { Omit++; } public void decreaseOmit() { if (Omit > 1) Omit--; } public void setOmit(final int f) { Omit = f + 1; } public boolean isComplete() { return !(P == null || O == null || (PM == null && !(O instanceof ExpressionObject && ((ExpressionObject) O) .isSlider()))); } public void keep(final ZirkelCanvas zc) { if (!isComplete()) return; final TrackObject t = new TrackObject(zc.getConstruction(), P, PO, PN, O, PM); zc.addObject(t); t.setDefaults(); reset(zc); t.compute(zc); zc.validate(); } @Override public String getTag() { return "Track"; } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Track")) return false; final XmlTag tag = tree.getTag(); if (!tag.hasParam("on") || !tag.hasParam("track")) throw new ConstructionException("Track parameters missing!"); else try { PointObject pm = null; try { pm = (PointObject) c.find(tag.getValue("point")); } catch (final Exception ex) { } final ConstructionObject o = c.find(tag.getValue("on")); if (pm == null && !(o instanceof ExpressionObject)) throw new ConstructionException(""); final ConstructionObject p = c.find(tag.getValue("track")); final ConstructionObject po[] = new ConstructionObject[PMax]; int pn = 0; for (pn = 0; pn < PMax; pn++) { if (!tag.hasParam("track" + pn)) break; po[pn] = c.find(tag.getValue("track" + pn)); if (!(po[pn] instanceof PointObject || po[pn] instanceof PrimitiveLineObject)) throw new ConstructionException( "Track parameters wrong!"); } if (p == null || o == null) throw new ConstructionException("Track parameters wrong!"); if (!(p instanceof PointObject || p instanceof PrimitiveLineObject)) throw new ConstructionException("Track parameters wrong!"); if (!(o instanceof PrimitiveCircleObject || o instanceof PrimitiveLineObject || o instanceof QuadricObject || o instanceof AreaObject || o instanceof JLocusTrackObject || o instanceof ExpressionObject || o instanceof FunctionObject)) throw new ConstructionException("Track parameters wrong!"); final JLocusTrackObject tr = new JLocusTrackObject(c, p, po, pn, o, pm); if (tag.hasParam("filled")) tr.setFilled(true); if (tag.hasParam("fixed")) tr.setFixed(true); if (tag.hasParam("dmin")) { try { final double db = new Double(tag.getValue("dmin")) .doubleValue(); // if (db<0.005) db=0.005; tr.setDMin(db); } catch (final Exception e) { throw new ConstructionException( "Track parameters wrong!"); } } if (tag.hasTrueParam("discrete")) tr.setDiscrete(true); setType(tag, tr); setName(tag, tr); set(tree, tr); c.add(tr); setConditionals(tree, c, tr); return true; } catch (final ConstructionException e) { // e.printStackTrace(); throw e; } catch (final Exception e) { // e.printStackTrace(); throw new ConstructionException("Track Parameters wrong!"); } } public void setType(final XmlTag tag, final TrackObject p) { if (tag.hasParam("shape")) { final String s = tag.getValue("shape"); if (s.equals("square")) p.setType(0); if (s.equals("diamond")) p.setType(1); if (s.equals("circle")) p.setType(2); if (s.equals("dot")) p.setType(3); if (s.equals("cross")) p.setType(4); if (s.equals("dcross")) p.setType(5); } } } ./src/rene/zirkel/tools/CVS/RevisionCache/EditTool.java#1.40000644000175000017500000000540111171707207022165 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Hider.java import java.awt.event.MouseEvent; import java.util.Vector; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.dialogs.EditConditionals; import rene.zirkel.dialogs.ObjectsEditDialog; import rene.zirkel.objects.ConstructionObject; public class EditTool extends ObjectConstructor { boolean Other; Vector V; public void mousePressed(final MouseEvent e, ConstructionObject o, final ZirkelCanvas zc) { zc.y(e.getY()); Other = (e.isShiftDown() && o == null); if (o == null) { o = zc.selectObject(e.getX(), e.getY()); if (o == null) { return; } } if (o.isKeep()) { return; } if (Other) { if (V == null) { V = new Vector(); } V.addElement(o); o.setSelected(true); zc.repaint(); return; } if (V != null) { V.addElement(o); o.setSelected(true); if (e.isControlDown()) { new EditConditionals(zc.getFrame(), V); zc.clearSelected(); zc.repaint(); } else { final ObjectsEditDialog d = new ObjectsEditDialog( zc.getFrame(), V); zc.clearSelected(); d.setVisible(true); } } else if (e.isControlDown()) { new EditConditionals(zc.getFrame(), o); zc.validate(); zc.repaint(); } else { final String oldname = o.getName(); if (rene.zirkel.Zirkel.IsApplet) { o.edit(zc); } else { eric.JGlobals.EditObject(o, true, false); } if (!oldname.equals(o.getName())) { zc.updateTexts(o, oldname); } } V = null; Other = false; zc.validate(); zc.repaint(); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateObjects(e.getX(), e.getY(), true); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { mousePressed(e, null, zc); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Zirkel.name("message.edit")); } @Override public void reset(final ZirkelCanvas zc) { zc.clearSelected(); V = null; Other = false; } } ./src/rene/zirkel/tools/CVS/RevisionCache/MoverTool.java#1.40000644000175000017500000002173011171425462022373 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; import java.awt.Cursor; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.util.Enumeration; import rene.gui.Global; import rene.util.MyVector; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.FixedAngleObject; import rene.zirkel.objects.FixedCircleObject; import rene.zirkel.objects.MoveableObject; import rene.zirkel.objects.PointObject; import eric.JGlobals; import eric.JMacrosTools; /** * @author Rene Tool to move objects around. Can move several objects at once. */ public class MoverTool extends ObjectConstructor { ConstructionObject P; boolean Selected = false; // boolean ShowsValue,ShowsName; boolean Grab; boolean WasDrawable, ChangedDrawable; MyVector V = null; double OldX, OldY; Graphics ZCG; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!Selected && V != null) zc.clearSelected(); if (e.isControlDown() && V == null) // force a fixed angle or fixed circle to become drawable! { P = zc.selectObject(e.getX(), e.getY()); ChangedDrawable = false; if (P instanceof FixedCircleObject && ((FixedCircleObject) P).fixedByNumber()) { WasDrawable = ((FixedCircleObject) P).isDragable(); ChangedDrawable = true; ((FixedCircleObject) P).setDragable(true); } else if (P instanceof FixedAngleObject && ((FixedAngleObject) P).fixedByNumber()) { WasDrawable = ((FixedAngleObject) P).isDragable(); ChangedDrawable = true; ((FixedAngleObject) P).setDragable(true); } else P = null; } if (P == null) // no forced moveable fixed circle or angle { if (V != null) // try to select another point P = zc.selectMoveablePoint(e.getX(), e.getY()); else // try to select any moveable object P = zc.selectMoveableObject(e.getX(), e.getY()); } if (P != null && V != null) // Check, if we have that point already: { final Enumeration en = V.elements(); while (en.hasMoreElements()) { if (P == en.nextElement()) // point found { if (e.isShiftDown()) P = null; // selected a point twice, but want still more points else V.removeElement(P); // remove the point from the list and start dragging break; } } } if (P != null) // point is selected for movement { P.setSelected(true); // ShowsName=P.showName(); // ShowsValue=P.showValue(); zc.setCursor(new Cursor(Cursor.MOVE_CURSOR)); } else // point was chosen from a list of objects { Selected = (zc.findSelectedObject() != null); } // Highlight all selected points: if (V != null) { final Enumeration en = V.elements(); while (en.hasMoreElements()) { ((PointObject) en.nextElement()).setSelected(true); } } if (P != null) { if (P instanceof PointObject) { if (e.isShiftDown()) // want more points! { if (V == null) V = new MyVector(); if (P != null) V.addElement(P); P = null; } else if (e.isControlDown()) // show current construction while moving { zc.grab(true); Grab = true; } else // remember old point position { OldX = ((PointObject) P).getX(); OldY = ((PointObject) P).getY(); } } else if (P instanceof MoveableObject) // call startDrag method of the object { ((MoveableObject) P).startDrag(zc.x(e.getX()), zc.y(e.getY())); // System.out.println("start dragging "+P.getName()); V = null; } if (ZCG != null) { ZCG.dispose(); ZCG = null; } ZCG = zc.getGraphics(); } zc.repaint(); showStatus(zc); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateMoveableObjects(e.getX(), e.getY(), e.isControlDown()); } boolean IntersectionBecameInvalid = false; /** * Drag a point in a new location and recompute the construction. Can show * the name and the value of the object to be dragged. Take care not to move * the point while ZirkelCanvas.paint is active. ZirkelCanvas.paint is * synchronized! * * @see rene.zirkel.ObjectConstructor#mouseDragged(java.awt.event.MouseEvent, * rene.zirkel.ZirkelCanvas) */ @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (P == null) return; // System.out.println("dragging "+P.getName()); zc.getConstruction().haveChanged(); zc.getConstruction().dontAlternate(false); synchronized (zc) { double oldx = 0, oldy = 0; if ((Global.getParameter("restrictedmove", false) || e .isShiftDown()) && P instanceof PointObject) { if (IntersectionBecameInvalid) { zc.getConstruction().dontAlternate(true); IntersectionBecameInvalid = false; } oldx = ((PointObject) P).getX(); oldy = ((PointObject) P).getY(); } ((MoveableObject) P).dragTo(zc.x(e.getX()), zc.y(e.getY())); if ((Global.getParameter("options.movename", false) && !P.isFixed()) || (Global.getParameter("options.movefixname", true) && P .isFixed())) { P.setShowValue(true); P.setShowName(true); } P.updateText(); if (V != null && (P instanceof PointObject)) { final double dx = ((PointObject) P).getX() - OldX, dy = ((PointObject) P) .getY() - OldY; final Enumeration en = V.elements(); while (en.hasMoreElements()) { final PointObject p = (PointObject) en.nextElement(); p.move(p.getX() + dx, p.getY() + dy); p.updateText(); } OldX = ((PointObject) P).getX(); OldY = ((PointObject) P).getY(); } if (P instanceof PointObject) { final PointObject Po = (PointObject) P; if (Po.dependsOnItselfOnly()) { Po.dontUpdate(true); zc.dovalidate(); Po.dontUpdate(false); } Po.magnet(); } zc.validate(); if ((Global.getParameter("restrictedmove", false) || e .isShiftDown()) && P instanceof PointObject && zc.getConstruction().intersectionBecameInvalid()) { ((PointObject) P).dragTo(oldx, oldy); IntersectionBecameInvalid = true; zc.validate(); } } if (ZCG == null) ZCG = zc.getGraphics(); zc.paint(ZCG); } /** * Release the mouse after dragging. * * @param e * @param zc * @param rightmouse * Call comes from a right mouse drag! */ public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc, final boolean rightmouse) { if (P == null) return; if (ZCG != null) { ZCG.dispose(); ZCG = null; } JGlobals.RefreshBar(); zc.setCursor(Cursor.getDefaultCursor()); P.setSelected(false); // P.setShowValue(ShowsValue); // P.setShowName(ShowsName); if (zc.showGrid() && !rightmouse && Global.getParameter("grid.leftsnap", false)) { P.snap(zc); P.round(); P.updateText(); } zc.validate(); if (Grab) { zc.grab(false); Grab = false; } if (ChangedDrawable) { if (P instanceof FixedCircleObject) { ((FixedCircleObject) P).setDragable(WasDrawable); } else if (P instanceof FixedAngleObject) { ((FixedAngleObject) P).setDragable(WasDrawable); } } zc.clearSelected(); zc.repaint(); P = null; V = null; Selected = false; showStatus(zc); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { mouseReleased(e, zc, false); } @Override public void reset(final ZirkelCanvas zc) { V = null; P = null; zc.clearSelected(); zc.repaint(); Selected = false; } @Override public void resetFirstTime(final ZirkelCanvas zc) { if (JMacrosTools.isStartup) return; if (V != null) V.removeAllElements(); zc.clearSelected(); zc.selectAllMoveableVisibleObjects(); final Graphics g = zc.getGraphics(); if (g != null) { zc.paint(g); g.dispose(); try { Thread.sleep(200); } catch (final Exception e) { } zc.clearSelected(); } zc.repaint(); Selected = false; P = null; V = null; } @Override public void showStatus(final ZirkelCanvas zc) { if (P == null && !Selected) zc.showStatus(Zirkel.name("message.move.select", "Move: Select a point")); else if (Selected) zc.showStatus(Zirkel.name("message.move.move", "Move: Move the point")); else zc.showStatus(Zirkel.name("message.move.move", "Move: Move the point") + " (" + P.getName() + ")"); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/CVS/RevisionCache/MoverTool.java#1.50000644000175000017500000002223511242762452022377 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; import java.awt.Cursor; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.util.Enumeration; import rene.gui.Global; import rene.util.MyVector; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.FixedAngleObject; import rene.zirkel.objects.FixedCircleObject; import rene.zirkel.objects.MoveableObject; import rene.zirkel.objects.PointObject; import eric.JGlobals; import eric.JMacrosTools; /** * @author Rene Tool to move objects around. Can move several objects at once. */ public class MoverTool extends ObjectConstructor { ConstructionObject P; boolean Selected = false; boolean ShowsValue,ShowsName; boolean Grab; boolean WasDrawable, ChangedDrawable; MyVector V = null; double OldX, OldY; Graphics ZCG; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { // System.out.println("pressed !!"); if (!Selected && V != null) zc.clearSelected(); if (e.isControlDown() && V == null) // force a fixed angle or fixed circle to become drawable! { P = zc.selectObject(e.getX(), e.getY()); ChangedDrawable = false; if (P instanceof FixedCircleObject && ((FixedCircleObject) P).fixedByNumber()) { WasDrawable = ((FixedCircleObject) P).isDragable(); ChangedDrawable = true; ((FixedCircleObject) P).setDragable(true); } else if (P instanceof FixedAngleObject && ((FixedAngleObject) P).fixedByNumber()) { WasDrawable = ((FixedAngleObject) P).isDragable(); ChangedDrawable = true; ((FixedAngleObject) P).setDragable(true); } else P = null; } if (P == null) // no forced moveable fixed circle or angle { if (V != null) // try to select another point P = zc.selectMoveablePoint(e.getX(), e.getY()); else // try to select any moveable object P = zc.selectMoveableObject(e.getX(), e.getY()); } if (P != null && V != null) // Check, if we have that point already: { final Enumeration en = V.elements(); while (en.hasMoreElements()) { if (P == en.nextElement()) // point found { if (e.isShiftDown()) P = null; // selected a point twice, but want still more points else V.removeElement(P); // remove the point from the list and start dragging break; } } } if (P != null) // point is selected for movement { P.setSelected(true); zc.setCursor(new Cursor(Cursor.MOVE_CURSOR)); } else // point was chosen from a list of objects { Selected = (zc.findSelectedObject() != null); } // Highlight all selected points: if (V != null) { final Enumeration en = V.elements(); while (en.hasMoreElements()) { ((PointObject) en.nextElement()).setSelected(true); } } if (P != null) { if (P instanceof PointObject) { if (e.isShiftDown()) // want more points! { if (V == null) V = new MyVector(); if (P != null) V.addElement(P); P = null; } else if (e.isControlDown()) // show current construction while moving { zc.grab(true); Grab = true; } else // remember old point position { OldX = ((PointObject) P).getX(); OldY = ((PointObject) P).getY(); } } else if (P instanceof MoveableObject) // call startDrag method of the object { ((MoveableObject) P).startDrag(zc.x(e.getX()), zc.y(e.getY())); // System.out.println("start dragging "+P.getName()); V = null; } if (ZCG != null) { ZCG.dispose(); ZCG = null; } ZCG = zc.getGraphics(); } zc.repaint(); showStatus(zc); if (P!=null) { ShowsName=P.showName(); ShowsValue=P.showValue(); } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateMoveableObjects(e.getX(), e.getY(), e.isControlDown()); } boolean IntersectionBecameInvalid = false; /** * Drag a point in a new location and recompute the construction. Can show * the name and the value of the object to be dragged. Take care not to move * the point while ZirkelCanvas.paint is active. ZirkelCanvas.paint is * synchronized! * * @see rene.zirkel.ObjectConstructor#mouseDragged(java.awt.event.MouseEvent, * rene.zirkel.ZirkelCanvas) */ @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (P == null) return; // System.out.println("dragging "+P.getName()); zc.getConstruction().haveChanged(); zc.getConstruction().dontAlternate(false); synchronized (zc) { double oldx = 0, oldy = 0; if ((Global.getParameter("restrictedmove", false) || e .isShiftDown()) && P instanceof PointObject) { if (IntersectionBecameInvalid) { zc.getConstruction().dontAlternate(true); IntersectionBecameInvalid = false; } oldx = ((PointObject) P).getX(); oldy = ((PointObject) P).getY(); } ((MoveableObject) P).dragTo(zc.x(e.getX()), zc.y(e.getY())); if ((Global.getParameter("options.movename", false) && !P.isFixed()) || (Global.getParameter("options.movefixname", true) && P .isFixed())) { P.setShowValue(true); P.setShowName(true); } P.updateText(); if (V != null && (P instanceof PointObject)) { final double dx = ((PointObject) P).getX() - OldX, dy = ((PointObject) P) .getY() - OldY; final Enumeration en = V.elements(); while (en.hasMoreElements()) { final PointObject p = (PointObject) en.nextElement(); p.move(p.getX() + dx, p.getY() + dy); p.updateText(); } OldX = ((PointObject) P).getX(); OldY = ((PointObject) P).getY(); } if (P instanceof PointObject) { final PointObject Po = (PointObject) P; if (Po.dependsOnItselfOnly()) { Po.dontUpdate(true); zc.dovalidate(); Po.dontUpdate(false); } Po.magnet(); } zc.validate(); if ((Global.getParameter("restrictedmove", false) || e .isShiftDown()) && P instanceof PointObject && zc.getConstruction().intersectionBecameInvalid()) { ((PointObject) P).dragTo(oldx, oldy); IntersectionBecameInvalid = true; zc.validate(); } } if (ZCG == null) ZCG = zc.getGraphics(); zc.paint(ZCG); } /** * Release the mouse after dragging. * * @param e * @param zc * @param rightmouse * Call comes from a right mouse drag! */ public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc, final boolean rightmouse) { // System.out.println("released !"); // P.setShowValue(ShowsValue); // P.setShowName(ShowsName); if (P == null) return; if (ZCG != null) { ZCG.dispose(); ZCG = null; } P.setShowValue(ShowsValue); P.setShowName(ShowsName); JGlobals.RefreshBar(); zc.setCursor(Cursor.getDefaultCursor()); P.setSelected(false); if (zc.showGrid() && !rightmouse && Global.getParameter("grid.leftsnap", false)) { P.snap(zc); P.round(); P.updateText(); } zc.validate(); if (Grab) { zc.grab(false); Grab = false; } if (ChangedDrawable) { if (P instanceof FixedCircleObject) { ((FixedCircleObject) P).setDragable(WasDrawable); } else if (P instanceof FixedAngleObject) { ((FixedAngleObject) P).setDragable(WasDrawable); } } zc.clearSelected(); zc.repaint(); P = null; V = null; Selected = false; showStatus(zc); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { mouseReleased(e, zc, false); } @Override public void reset(final ZirkelCanvas zc) { V = null; P = null; zc.clearSelected(); zc.repaint(); Selected = false; } @Override public void resetFirstTime(final ZirkelCanvas zc) { if (JMacrosTools.isStartup) return; if (V != null) V.removeAllElements(); zc.clearSelected(); zc.selectAllMoveableVisibleObjects(); final Graphics g = zc.getGraphics(); if (g != null) { zc.paint(g); g.dispose(); try { Thread.sleep(200); } catch (final Exception e) { } zc.clearSelected(); } zc.repaint(); Selected = false; P = null; V = null; } @Override public void showStatus(final ZirkelCanvas zc) { if (P == null && !Selected) zc.showStatus(Zirkel.name("message.move.select", "Move: Select a point")); else if (Selected) zc.showStatus(Zirkel.name("message.move.move", "Move: Move the point")); else zc.showStatus(Zirkel.name("message.move.move", "Move: Move the point") + " (" + P.getName() + ")"); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/CVS/RevisionCache/SetAwayTool.java#1.40000644000175000017500000000425611171707274022670 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; import java.awt.event.MouseEvent; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.IntersectionObject; /** * A tool to set the the point an intersection point should stay away from or * should come close to. */ public class SetAwayTool extends ObjectConstructor { ObjectConstructor OC; IntersectionObject P; boolean Away; public SetAwayTool(final ZirkelCanvas zc, final IntersectionObject p, final boolean away, final ObjectConstructor oc) { P = p; OC = oc; P.setSelected(true); Away = away; zc.repaint(); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { final ConstructionObject o = zc.selectPoint(e.getX(), e.getY()); if (o == null) return; if (zc.getConstruction().dependsOn(o, P)) { zc.warning(ConstructionObject.text1(Zirkel.name("error.depends"), P .getText())); return; } P.setAway(o.getName(), Away); P.setUseAlpha(e.isShiftDown()); zc.validate(); reset(zc); } @Override public void showStatus(final ZirkelCanvas zc) { if (Away) zc.showStatus(Zirkel.name("message.setaway.away")); else zc.showStatus(Zirkel.name("message.setaway.close")); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setTool(OC); zc.validate(); zc.repaint(); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/CVS/RevisionCache/Tracker.java#1.40000644000175000017500000001725411242764336022053 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Tracker.java import java.awt.event.MouseEvent; import java.util.Enumeration; import java.util.Vector; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.TrackPainter; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.MoveableObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.structures.Coordinates; public class Tracker extends ObjectConstructor implements TrackPainter { ConstructionObject PM; int PMax = 8, PN; ConstructionObject P; ConstructionObject PO[] = new ConstructionObject[PMax]; Vector V = new Vector(); Vector VO[] = new Vector[PMax]; double X, Y, DX, DY; double XO[] = new double[PMax], YO[] = new double[PMax], DXO[] = new double[PMax], DYO[] = new double[PMax]; boolean Started; boolean StartedO[] = new boolean[PMax]; boolean Other; public Tracker(final ConstructionObject p, final ConstructionObject po[]) { super(); P = p; PN = 0; for (int i = 0; i < po.length; i++) { if (i >= PMax || po[i] == null) break; PO[PN] = po[i]; VO[i] = new Vector(); PN++; } } public Tracker() { super(); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { final double x = zc.x(e.getX()), y = zc.y(e.getY()); if (P == null) { P = zc.selectPoint(e.getX(), e.getY()); if (P == null) P = zc.selectLine(e.getX(), e.getY()); if (P == null) return; P.setSelected(true); zc.repaint(); if (e.isShiftDown()) Other = true; else Other = false; showStatus(zc); } else if (Other) { ConstructionObject P = zc.selectPoint(e.getX(), e.getY()); if (P == null) P = zc.selectLine(e.getX(), e.getY()); if (P != null) { P.setSelected(true); zc.repaint(); PO[PN] = P; VO[PN] = new Vector(); PN++; } if (!e.isShiftDown() || PN >= PMax) Other = false; showStatus(zc); } else { final ConstructionObject pm = zc.selectMoveableObject(e.getX(), e .getY()); PM = pm; if (PM != null) { zc.clearSelected(); PM.setSelected(true); ((MoveableObject) PM).startDrag(x, y); zc.repaint(); showStatus(zc); } Started = false; } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { if (P == null || Other) zc.indicatePointsOrLines(e.getX(), e.getY()); else if (PM == null) zc.indicateMoveableObjects(e.getX(), e.getY()); else zc.clearIndicated(); } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (PM == null) return; ((MoveableObject) PM).dragTo(zc.x(e.getX()), zc.y(e.getY())); zc.validate(); track(zc); zc.repaint(); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (PM == null) return; PM.setSelected(false); PM = null; zc.repaint(); showStatus(zc); } @Override public void reset(final ZirkelCanvas zc) { zc.clearSelected(); P = PM = null; PN = 0; V = new Vector(); showStatus(zc); zc.repaint(); } @Override public void showStatus(final ZirkelCanvas zc) { if (P == null || Other) zc.showStatus(Zirkel.name("message.tracker.select")); else if (PM == null) zc.showStatus(Zirkel.name("message.tracker.selectpoint")); else zc.showStatus(Zirkel.name("message.tracker.move")); } public void track(final ZirkelCanvas zc) { if (P == null) return; if (P instanceof PointObject) { final PointObject p = (PointObject) P; if (p.valid()) V.addElement(new Coordinates(p.getX(), p.getY())); } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) P; if (L.valid()) { if (!Started) { X = L.getX(); Y = L.getY(); DX = L.getDX(); DY = L.getDY(); Started = true; } else { double x, y, dx, dy; x = L.getX(); y = L.getY(); dx = L.getDX(); dy = L.getDY(); final double det = dx * DY - dy * DX; if (Math.sqrt(Math.abs(det)) > 1e-9) { final double a = (-(X - x) * DY + DX * (Y - y)) / (-det); V.addElement(new Coordinates(x + a * dx, y + a * dy)); } X = x; Y = y; DX = dx; DY = dy; } } } for (int i = 0; i < PN; i++) { if (PO[i] == null || !PO[i].valid()) continue; if (PO[i] instanceof PointObject) { final PointObject p = (PointObject) PO[i]; VO[i].addElement(new Coordinates(p.getX(), p.getY())); } else if (PO[i] instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) PO[i]; if (!StartedO[i]) { XO[i] = L.getX(); YO[i] = L.getY(); DXO[i] = L.getDX(); DYO[i] = L.getDY(); StartedO[i] = true; } else { double x, y, dx, dy; x = L.getX(); y = L.getY(); dx = L.getDX(); dy = L.getDY(); final double det = dx * DYO[i] - dy * DXO[i]; if (Math.sqrt(Math.abs(det)) > 1e-9) { final double a = (-(XO[i] - x) * DYO[i] + DXO[i] * (YO[i] - y)) / (-det); VO[i] .addElement(new Coordinates(x + a * dx, y + a * dy)); } XO[i] = x; YO[i] = y; DXO[i] = dx; DYO[i] = dy; } } } } public Enumeration elements() { return V.elements(); } public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (P == null) return; Coordinates C; Enumeration e = V.elements(); g.setColor(P); double c0, r0, c, r; final int maxd = zc.width() / 20; if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c0 = zc.col(C.X); r0 = zc.row(C.Y); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c = zc.col(C.X); r = zc.row(C.Y); if (Math.abs(c0 - c) < maxd && Math.abs(r0 - r) < maxd) g.drawLine(c0, r0, c, r, P); else g.drawLine(c0, r0, c0, r0, P); c0 = c; r0 = r; } } for (int i = 0; i < PN; i++) { if (PO[i] == null) continue; g.setColor(PO[i]); e = VO[i].elements(); if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c0 = zc.col(C.X); r0 = zc.row(C.Y); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c = zc.col(C.X); r = zc.row(C.Y); if (Math.abs(c0 - c) < maxd && Math.abs(r0 - r) < maxd) g.drawLine(c0, r0, c, r, PO[i]); else g.drawLine(c0, r0, c0, r0, PO[i]); c0 = c; r0 = r; } } } } public void validate(final ZirkelCanvas zc) { } public void save(final XmlWriter xml) { if (P == null) return; xml.startTagStart("Track"); xml.printArg("track", P.getName()); for (int i = 0; i < PN; i++) { xml.printArg("track" + i, PO[i].getName()); } if (PM != null) xml.printArg("move", PM.getName()); xml.finishTagNewLine(); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/CVS/RevisionCache/SetRangeTool.java#1.40000644000175000017500000000416311357102540023007 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: SetRange.java import java.awt.event.MouseEvent; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; public class SetRangeTool extends ObjectConstructor { ObjectConstructor OC; PrimitiveCircleObject C; PointObject P1, P2; public SetRangeTool(final ZirkelCanvas zc, final PrimitiveCircleObject c, final ObjectConstructor oc) { C = c; OC = oc; C.setSelected(true); zc.repaint(); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (P1 == null) { P1 = zc.selectPoint(e.getX(), e.getY()); if (P1 != null) { P1.setSelected(true); showStatus(zc); zc.repaint(); } } else { P2 = zc.selectPoint(e.getX(), e.getY()); if (P2 == null) return; C.setRange(P1.getName(), P2.getName()); reset(zc); } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicatePointObjects(e.getX(), e.getY()); } @Override public void showStatus(final ZirkelCanvas zc) { if (P1 == null) zc.showStatus(Zirkel.name("message.range.first")); else zc.showStatus(Zirkel.name("message.range.second")); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setTool(OC); zc.validate(); zc.repaint(); } } ./src/rene/zirkel/tools/CVS/RevisionCache/SetParameterTool.java#1.40000644000175000017500000000532711333315164023700 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: SetParameter.java import java.awt.event.MouseEvent; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.AngleObject; import rene.zirkel.objects.AreaObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.FunctionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.UserFunctionObject; /** * Class to choose parameters for macro definition. * * @author Rene */ public class SetParameterTool extends ObjectConstructor implements Selector { @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); final ConstructionObject o = zc.selectWithSelector(e.getX(), e.getY(), this); if (o == null || o.isMainParameter()) return; o.setMainParameter(); if (o.isMainParameter()) { o.setSelected(true); zc.getConstruction().addParameter(o); zc.repaint(); } if (e.isShiftDown()) o.setSpecialParameter(true); } public boolean isAdmissible(final ZirkelCanvas zc, final ConstructionObject o) { return (o instanceof PointObject || o instanceof PrimitiveLineObject || o instanceof PrimitiveCircleObject || o instanceof ExpressionObject || o instanceof AngleObject || o instanceof AreaObject || o instanceof FunctionObject || o instanceof UserFunctionObject); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateWithSelector(e.getX(), e.getY(), this); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.clearSelected(); zc.getConstruction().clearParameters(); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Zirkel.name("message.parameters", "Macro Parameters: Select the Parameters!")); } } ./src/rene/zirkel/tools/CVS/RevisionCache/BinderTool.java#1.40000644000175000017500000000525411171422275022510 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Binder.java import java.awt.event.MouseEvent; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.InsideObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PointonObject; public class BinderTool extends ObjectConstructor implements Selector { ObjectConstructor OC; PointObject P; public BinderTool(final ZirkelCanvas zc, final PointObject p, final ObjectConstructor oc) { P = p; OC = oc; P.setSelected(true); zc.repaint(); } boolean Control; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { Control = e.isControlDown(); final ConstructionObject o = zc.selectWithSelector(e.getX(), e.getY(), this); if (o == null) return; if (Control && !(o instanceof InsideObject)) return; if (zc.getConstruction().dependsOn(o, P)) return; P.setBound(o.getName()); if (o instanceof InsideObject) { if (Control || !(o instanceof PointonObject)) P.setInside(true); } else P.setUseAlpha(!e.isShiftDown()); zc.getConstruction().updateCircleDep(); zc.repaint(); reset(zc); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { Control = e.isControlDown(); zc.indicateWithSelector(e.getX(), e.getY(), this); } public boolean isAdmissible(final ZirkelCanvas zc, final ConstructionObject o) { if ((o instanceof InsideObject || o instanceof PointonObject) && !zc.getConstruction().dependsOn(o, P)) return true; return false; } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Zirkel.name("message.bindpoint")); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setTool(OC); zc.validate(); zc.repaint(); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/CVS/RevisionCache/Ruler.java#1.40000644000175000017500000000454211314625526021542 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; /* * Created on 18.06.2004 * */ import java.awt.event.MouseEvent; import java.util.Vector; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.dialogs.ObjectsEditDialog; import rene.zirkel.objects.ConstructionObject; public class Ruler extends ObjectConstructor { boolean Other; Vector V; public void mousePressed(final MouseEvent e, ConstructionObject o, final ZirkelCanvas zc) { zc.y(e.getY()); Other = (e.isShiftDown() && o == null); if (o == null) { o = zc.selectObject(e.getX(), e.getY()); if (o == null) return; } if (o.isKeep()) return; if (Other) { if (V == null) V = new Vector(); V.addElement(o); o.setSelected(true); zc.repaint(); return; } if (V != null) { V.addElement(o); o.setSelected(true); final ObjectsEditDialog d = new ObjectsEditDialog(zc.getFrame(), V); zc.clearSelected(); d.setVisible(true); } else { final String oldname = o.getName(); o.edit(zc); if (!oldname.equals(o.getName())) zc.updateTexts(o, oldname); } V = null; Other = false; zc.validate(); zc.repaint(); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateObjects(e.getX(), e.getY(), true); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { mousePressed(e, null, zc); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Zirkel.name("message.edit")); } @Override public void reset(final ZirkelCanvas zc) { zc.clearSelected(); V = null; Other = false; } } ./src/rene/zirkel/tools/CVS/RevisionCache/MetaMover.java#1.40000644000175000017500000000520611171427614022345 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: MetaMover.java import java.awt.Cursor; import java.awt.event.MouseEvent; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.FixedAngleObject; import rene.zirkel.objects.FixedCircleObject; import rene.zirkel.objects.MoveableObject; import eric.JGlobals; public class MetaMover extends MoverTool { ObjectConstructor OC; ConstructionObject PP; public MetaMover(final ObjectConstructor oc, final ZirkelCanvas zc, final ConstructionObject p, final MouseEvent e) { OC = oc; PP = P = p; oc.pause(true); if (P != null) { P.setSelected(true); // ShowsValue=P.showValue(); // ShowsName=P.showName(); zc.repaint(); showStatus(zc); zc.setCursor(new Cursor(Cursor.MOVE_CURSOR)); if (P instanceof MoveableObject) { ((MoveableObject) P).startDrag(zc.x(e.getX()), zc.y(e.getY())); } if (ZCG != null) { ZCG.dispose(); ZCG = null; } ZCG = zc.getGraphics(); } } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (P == null) return; if (ZCG != null) { ZCG.dispose(); ZCG = null; } JGlobals.RefreshBar(); zc.setCursor(Cursor.getDefaultCursor()); P.setSelected(false); // P.setShowValue(ShowsValue); // P.setShowName(ShowsName); if (zc.showGrid() && !Global.getParameter("grid.leftsnap", false)) { PP.snap(zc); PP.round(); PP.updateText(); } zc.validate(); if (Grab) { zc.grab(false); Grab = false; } if (ChangedDrawable) { if (P instanceof FixedCircleObject) { ((FixedCircleObject) P).setDragable(WasDrawable); } else if (P instanceof FixedAngleObject) { ((FixedAngleObject) P).setDragable(WasDrawable); } } zc.clearSelected(); zc.repaint(); P = null; V = null; Selected = false; zc.setTool(OC); OC.pause(false); zc.validate(); zc.repaint(); } } ./src/rene/zirkel/tools/CVS/RevisionCache/JSmacroTool.java#1.10000644000175000017500000000722411241722007022631 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Binder.java import java.awt.event.MouseEvent; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import eric.JGlobals; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.SegmentObject; public class JSmacroTool extends ObjectConstructor implements Selector { ObjectConstructor OC; String MSG; String TYPE; public JSmacroTool(final ZirkelCanvas zc, final String msg, String type, final ObjectConstructor oc) { OC=oc; MSG=msg; TYPE=type; zc.repaint(); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { ConstructionObject o=null; if (TYPE.equals("Point")) { o=zc.selectCreatePoint(e.getX(), e.getY()); JGlobals.setJSO(o); } else if (TYPE.equals("Segment")) { o=zc.selectSegment(e.getX(), e.getY()); JGlobals.setJSO(o); } else if (TYPE.equals("Line")) { o=zc.selectLine(e.getX(), e.getY()); JGlobals.setJSO(o); } else if (TYPE.equals("Circle")) { o=zc.selectCircle(e.getX(), e.getY()); JGlobals.setJSO(o); } else if (TYPE.equals("Expression")) { o=zc.selectObject(e.getX(), e.getY()); JGlobals.setJSO(o); } if (JGlobals.getJSO()!=null) { o.setSelected(true); } else { JGlobals.setJSquit(true); } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { if (TYPE.equals("Point")) { zc.indicateCreatePoint(e.getX(), e.getY(), true); } else { zc.indicateWithSelector(e.getX(), e.getY(), this); } } public boolean isAdmissible(final ZirkelCanvas zc, final ConstructionObject o) { if ((o instanceof PointObject)&&(TYPE.equals("Point"))) { return true; } else if ((o instanceof PrimitiveLineObject)&&(TYPE.equals("Line"))) { return true; } else if ((o instanceof PrimitiveCircleObject)&&(TYPE.equals("Circle"))) { return true; } else if ((o instanceof SegmentObject)&&(TYPE.equals("Segment"))) { return true; } else if ((o instanceof ExpressionObject)&&(TYPE.equals("Expression"))) { return true; } else { return false; } } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(MSG); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setTool(OC); zc.validate(); zc.repaint(); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/CVS/Root0000644000175000017500000000007411132354034015427 0ustar yvesyves:ext:erichake@carmetal.cvs.sourceforge.net:/cvsroot/carmetal./src/rene/zirkel/tools/EditTool.java0000640000175000017500000000453511314637475016535 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Hider.java import java.awt.event.MouseEvent; import java.util.Vector; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; public class EditTool extends ObjectConstructor { boolean Other; Vector V; public void mousePressed(final MouseEvent e, ConstructionObject o, final ZirkelCanvas zc) { zc.y(e.getY()); Other = (e.isShiftDown() && o == null); if (o == null) { o = zc.selectObject(e.getX(), e.getY()); if (o == null) { return; } } if (o.isKeep()) { return; } if (Other) { if (V == null) { V = new Vector(); } V.addElement(o); o.setSelected(true); zc.repaint(); return; } if (V != null) { V.addElement(o); o.setSelected(true); zc.clearSelected(); eric.bar.JPropertiesBar.EditObject(o, true, false); } else { final String oldname = o.getName(); eric.bar.JPropertiesBar.EditObject(o, true, false); if (!oldname.equals(o.getName())) { zc.updateTexts(o, oldname); } } V = null; Other = false; zc.validate(); zc.repaint(); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateObjects(e.getX(), e.getY(), true); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { mousePressed(e, null, zc); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Global.name("message.edit")); } @Override public void reset(final ZirkelCanvas zc) { zc.clearSelected(); V = null; Other = false; } } ./src/rene/zirkel/tools/SetTargetsTool.java0000640000175000017500000000437011334551104017714 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: SetParameter.java import eric.macros.CreateMacroPanel; import java.awt.event.MouseEvent; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; public class SetTargetsTool extends ObjectConstructor { @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); final ConstructionObject o=zc.selectConstructableObject(e.getX(), e.getY()); if (o==null||!o.isFlag()) { return; } if (o.isTarget()) { o.setTarget(false); o.setSelected(false); zc.getConstruction().removeTarget(o); }else{ o.setTarget(true); o.setSelected(true); zc.getConstruction().addTarget(o); } zc.repaint(); CreateMacroPanel.setTargetsComments(); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateConstructableObjects(e.getX(), e.getY()); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.clearSelected(); zc.getConstruction().clearTargets(); zc.getConstruction().determineConstructables(); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Global.name("message.targets", "Macro Targets: Select the Targets!")); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/Ruler.java0000640000175000017500000000317211314625563016072 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; /* * Created on 18.06.2004 * */ import java.awt.event.MouseEvent; import java.util.Vector; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; public class Ruler extends ObjectConstructor { boolean Other; Vector V; public void mousePressed(final MouseEvent e, ConstructionObject o, final ZirkelCanvas zc) { } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateObjects(e.getX(), e.getY(), true); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { mousePressed(e, null, zc); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Global.name("message.edit")); } @Override public void reset(final ZirkelCanvas zc) { zc.clearSelected(); V = null; Other = false; } } ./src/rene/zirkel/tools/MetaMover.java0000640000175000017500000000612511360623255016676 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: MetaMover.java import eric.bar.JPropertiesBar; import java.awt.Cursor; import java.awt.event.MouseEvent; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.FixedAngleObject; import rene.zirkel.objects.FixedCircleObject; import rene.zirkel.objects.MoveableObject; public class MetaMover extends MoverTool { ObjectConstructor OC; ConstructionObject PP; public MetaMover(final ObjectConstructor oc, final ZirkelCanvas zc, final ConstructionObject p, final MouseEvent e) { OC=oc; PP=P=p; oc.pause(true); if (P!=null) { P.setSelected(true); ShowsValue=P.showValue(); ShowsName=P.showName(); zc.repaint(); showStatus(zc); zc.setCursor(new Cursor(Cursor.MOVE_CURSOR)); if (P instanceof MoveableObject) { ((MoveableObject) P).startDrag(zc.x(e.getX()), zc.y(e.getY())); } if (ZCG!=null) { ZCG.dispose(); ZCG=null; } ZCG=zc.getGraphics(); } } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (P==null) { return; } if (ZCG!=null) { ZCG.dispose(); ZCG=null; } zc.getConstruction().haveChanged(); JPropertiesBar.RefreshBar(); zc.setCursor(Cursor.getDefaultCursor()); P.setSelected(false); P.setShowValue(ShowsValue); P.setShowName(ShowsName); // if (zc.getAxis_show()&&!Global.getParameter("grid.leftsnap", false)) { // PP.snap(zc); // PP.round(); // PP.updateText(); // } zc.validate(); if (Grab) { zc.grab(false); Grab=false; } if (ChangedDrawable) { if (P instanceof FixedCircleObject) { ((FixedCircleObject) P).setDragable(WasDrawable); } else if (P instanceof FixedAngleObject) { ((FixedAngleObject) P).setDragable(WasDrawable); } } zc.clearSelected(); zc.repaint(); P=null; V=null; Selected=false; zc.setTool(OC); OC.pause(false); zc.validate(); zc.repaint(); } } ./src/rene/zirkel/tools/AnimatorTool.java0000640000175000017500000001065611361302232017401 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; import eric.animations.AnimationPanel; import java.awt.event.MouseEvent; import java.util.Enumeration; import java.util.Vector; import rene.util.xml.XmlWriter; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.CircleObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.SegmentObject; /** * Animator is a class to animate a point along a sequence of segments and/or * circles. The animation may either go back and forth or always in the same * direction. Shift-Click schaltet w‰hrend der Animation um. * * @author Rene * */ public class AnimatorTool extends ObjectConstructor implements Runnable, Selector { PointObject P; ZirkelCanvas ZC; boolean Running=false, Interactive=true, Complete=false; boolean Negative=false; boolean Original=false; double Delay=50; public AnimatorTool() { P=null; } public AnimatorTool(final PointObject p, final Vector v, final ZirkelCanvas zc, final boolean negative, final boolean original, final String delay) { P=p; if (!P.moveable()) { return; } final Enumeration e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=zc.getConstruction().find( (String) e.nextElement()); if (!(o instanceof SegmentObject ||o instanceof PrimitiveCircleObject||o instanceof PointObject)) { return; } } Stopped=false; ZC=zc; Complete=true; Negative=negative; Original=original; try { Delay=50; Delay=new Double(delay).doubleValue(); } catch (final Exception ex) { } new Thread(this).start(); } public void setInteractive(final boolean flag) { Interactive=flag; } public boolean isAdmissible(final ZirkelCanvas zc, final ConstructionObject o) { if ((o instanceof CircleObject)&&((CircleObject) o).getP2()==P) { return true; } if (zc.depends(o, P)) { return false; } return true; } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { ConstructionObject o=zc.selectAnimationObject(e.getX(), e.getY()); if (o!=null) { if (zc.isAnimated(o)) { o.setSelected(false); zc.removeAnimation(o); } else { o.setSelected(true); zc.addAnimation(o); } } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateAnimationObjects(e.getX(), e.getY()); } @Override public synchronized void reset(final ZirkelCanvas zc) { zc.selectAnimationPoints(); } @Override public void showStatus(final ZirkelCanvas zc) { if (P==null) { zc.showStatus(Global.name("message.animator.point")); } else if (!Complete) { zc.showStatus(Global.name("message.animator.segment")); } else { zc.showStatus(Global.name("message.animator.running")); } } public void save(final XmlWriter xml) { ZC.getAnimations().printArgs(xml); } boolean Stopped=false; public void run() { } @Override public synchronized void invalidate(final ZirkelCanvas zc) { Stopped=true; } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/DefineJobTool.java0000644000175000017500000000374011362252043017461 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: SetParameter.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; public class DefineJobTool extends ObjectConstructor { @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); final ConstructionObject o=zc.selectObject(e.getX(), e.getY()); if (o==null) { return; } if (o.selected()) { o.setSelected(false); zc.job_removeTarget(o); } else { o.setSelected(true); zc.job_addTarget(o); } zc.job_setTargetsField(); zc.repaint(); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateObjects(e.getX(), e.getY()); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.clearSelected(); showStatus(zc); zc.clearJob(); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Global.name("message.savejob.second")); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/SaveJob.java0000640000175000017500000000405111303263644016323 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: SetParameter.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; public class SaveJob extends ObjectConstructor { public ConstructionObject Last; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); final ConstructionObject o = zc.selectObject(e.getX(), e.getY()); if (o == null) return; o.setSelected(true); if (Last == null) { Last = o; zc.setJob(Last); showStatus(zc); } else { if (e.isShiftDown()) zc.addJobTarget(o, true); else zc.addJobTarget(o, false); } zc.repaint(); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateObjects(e.getX(), e.getY()); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.clearSelected(); zc.getConstruction().clearTargets(); zc.clearTargets(); Last = null; showStatus(zc); zc.clearJob(); } @Override public void showStatus(final ZirkelCanvas zc) { if (Last == null) zc.showStatus(Global.name("message.savejob.first")); else zc.showStatus(Global.name("message.savejob.second")); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/Tracker.java0000640000175000017500000001726211303263644016375 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Tracker.java import java.awt.event.MouseEvent; import java.util.Enumeration; import java.util.Vector; import rene.util.xml.XmlWriter; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.TrackPainter; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.MoveableObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.structures.Coordinates; public class Tracker extends ObjectConstructor implements TrackPainter { ConstructionObject PM; int PMax = 8, PN; ConstructionObject P; ConstructionObject PO[] = new ConstructionObject[PMax]; Vector V = new Vector(); Vector VO[] = new Vector[PMax]; double X, Y, DX, DY; double XO[] = new double[PMax], YO[] = new double[PMax], DXO[] = new double[PMax], DYO[] = new double[PMax]; boolean Started; boolean StartedO[] = new boolean[PMax]; boolean Other; public Tracker(final ConstructionObject p, final ConstructionObject po[]) { super(); P = p; PN = 0; for (int i = 0; i < po.length; i++) { if (i >= PMax || po[i] == null) break; PO[PN] = po[i]; VO[i] = new Vector(); PN++; } } public Tracker() { super(); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { final double x = zc.x(e.getX()), y = zc.y(e.getY()); if (P == null) { P = zc.selectPoint(e.getX(), e.getY()); if (P == null) P = zc.selectLine(e.getX(), e.getY()); if (P == null) return; P.setSelected(true); zc.repaint(); if (e.isShiftDown()) Other = true; else Other = false; showStatus(zc); } else if (Other) { ConstructionObject P = zc.selectPoint(e.getX(), e.getY()); if (P == null) P = zc.selectLine(e.getX(), e.getY()); if (P != null) { P.setSelected(true); zc.repaint(); PO[PN] = P; VO[PN] = new Vector(); PN++; } if (!e.isShiftDown() || PN >= PMax) Other = false; showStatus(zc); } else { final ConstructionObject pm = zc.selectMoveableObject(e.getX(), e .getY()); PM = pm; if (PM != null) { zc.clearSelected(); PM.setSelected(true); ((MoveableObject) PM).startDrag(x, y); zc.repaint(); showStatus(zc); } Started = false; } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { if (P == null || Other) zc.indicatePointsOrLines(e.getX(), e.getY()); else if (PM == null) zc.indicateMoveableObjects(e.getX(), e.getY()); else zc.clearIndicated(); } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (PM == null) return; ((MoveableObject) PM).dragTo(zc.x(e.getX()), zc.y(e.getY())); zc.validate(); track(zc); zc.repaint(); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (PM == null) return; PM.setSelected(false); PM = null; zc.repaint(); showStatus(zc); } @Override public void reset(final ZirkelCanvas zc) { zc.clearSelected(); P = PM = null; PN = 0; V = new Vector(); showStatus(zc); zc.repaint(); } @Override public void showStatus(final ZirkelCanvas zc) { if (P == null || Other) zc.showStatus(Global.name("message.tracker.select")); else if (PM == null) zc.showStatus(Global.name("message.tracker.selectpoint")); else zc.showStatus(Global.name("message.tracker.move")); } public void track(final ZirkelCanvas zc) { if (P == null) return; if (P instanceof PointObject) { final PointObject p = (PointObject) P; if (p.valid()) V.addElement(new Coordinates(p.getX(), p.getY())); } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) P; if (L.valid()) { if (!Started) { X = L.getX(); Y = L.getY(); DX = L.getDX(); DY = L.getDY(); Started = true; } else { double x, y, dx, dy; x = L.getX(); y = L.getY(); dx = L.getDX(); dy = L.getDY(); final double det = dx * DY - dy * DX; if (Math.sqrt(Math.abs(det)) > 1e-9) { final double a = (-(X - x) * DY + DX * (Y - y)) / (-det); V.addElement(new Coordinates(x + a * dx, y + a * dy)); } X = x; Y = y; DX = dx; DY = dy; } } } for (int i = 0; i < PN; i++) { if (PO[i] == null || !PO[i].valid()) continue; if (PO[i] instanceof PointObject) { final PointObject p = (PointObject) PO[i]; VO[i].addElement(new Coordinates(p.getX(), p.getY())); } else if (PO[i] instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) PO[i]; if (!StartedO[i]) { XO[i] = L.getX(); YO[i] = L.getY(); DXO[i] = L.getDX(); DYO[i] = L.getDY(); StartedO[i] = true; } else { double x, y, dx, dy; x = L.getX(); y = L.getY(); dx = L.getDX(); dy = L.getDY(); final double det = dx * DYO[i] - dy * DXO[i]; if (Math.sqrt(Math.abs(det)) > 1e-9) { final double a = (-(XO[i] - x) * DYO[i] + DXO[i] * (YO[i] - y)) / (-det); VO[i] .addElement(new Coordinates(x + a * dx, y + a * dy)); } XO[i] = x; YO[i] = y; DXO[i] = dx; DYO[i] = dy; } } } } public Enumeration elements() { return V.elements(); } public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (P == null) return; Coordinates C; Enumeration e = V.elements(); g.setColor(P); double c0, r0, c, r; final int maxd = zc.width() / 20; if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c0 = zc.col(C.X); r0 = zc.row(C.Y); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c = zc.col(C.X); r = zc.row(C.Y); if (Math.abs(c0 - c) < maxd && Math.abs(r0 - r) < maxd) g.drawLine(c0, r0, c, r, P); else g.drawLine(c0, r0, c0, r0, P); c0 = c; r0 = r; } } for (int i = 0; i < PN; i++) { if (PO[i] == null) continue; g.setColor(PO[i]); e = VO[i].elements(); if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c0 = zc.col(C.X); r0 = zc.row(C.Y); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c = zc.col(C.X); r = zc.row(C.Y); if (Math.abs(c0 - c) < maxd && Math.abs(r0 - r) < maxd) g.drawLine(c0, r0, c, r, PO[i]); else g.drawLine(c0, r0, c0, r0, PO[i]); c0 = c; r0 = r; } } } } public void validate(final ZirkelCanvas zc) { } public void save(final XmlWriter xml) { if (P == null) return; xml.startTagStart("Track"); xml.printArg("track", P.getName()); for (int i = 0; i < PN; i++) { xml.printArg("track" + i, PO[i].getName()); } if (PM != null) xml.printArg("move", PM.getName()); xml.finishTagNewLine(); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/MoverTool.java0000640000175000017500000002222711360557720016731 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; import java.awt.Cursor; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.util.Enumeration; import rene.gui.Global; import rene.util.MyVector; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.FixedAngleObject; import rene.zirkel.objects.FixedCircleObject; import rene.zirkel.objects.MoveableObject; import rene.zirkel.objects.PointObject; import eric.bar.JPropertiesBar; /** * @author Rene Tool to move objects around. Can move several objects at once. */ public class MoverTool extends ObjectConstructor { ConstructionObject P; boolean Selected = false; boolean ShowsValue,ShowsName; boolean Grab; boolean WasDrawable, ChangedDrawable; MyVector V = null; double OldX, OldY; Graphics ZCG; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { // System.out.println("pressed !!"); if (!Selected && V != null) zc.clearSelected(); if (e.isControlDown() && V == null) // force a fixed angle or fixed circle to become drawable! { P = zc.selectObject(e.getX(), e.getY()); ChangedDrawable = false; if (P instanceof FixedCircleObject && ((FixedCircleObject) P).fixedByNumber()) { WasDrawable = ((FixedCircleObject) P).isDragable(); ChangedDrawable = true; ((FixedCircleObject) P).setDragable(true); } else if (P instanceof FixedAngleObject && ((FixedAngleObject) P).fixedByNumber()) { WasDrawable = ((FixedAngleObject) P).isDragable(); ChangedDrawable = true; ((FixedAngleObject) P).setDragable(true); } else P = null; } if (P == null) // no forced moveable fixed circle or angle { if (V != null) // try to select another point P = zc.selectMoveablePoint(e.getX(), e.getY()); else // try to select any moveable object P = zc.selectMoveableObject(e.getX(), e.getY()); } if (P != null && V != null) // Check, if we have that point already: { final Enumeration en = V.elements(); while (en.hasMoreElements()) { if (P == en.nextElement()) // point found { if (e.isShiftDown()) P = null; // selected a point twice, but want still more points else V.removeElement(P); // remove the point from the list and start dragging break; } } } if (P != null) // point is selected for movement { P.setSelected(true); zc.setCursor(new Cursor(Cursor.MOVE_CURSOR)); } else // point was chosen from a list of objects { Selected = (zc.findSelectedObject() != null); } // Highlight all selected points: if (V != null) { final Enumeration en = V.elements(); while (en.hasMoreElements()) { ((PointObject) en.nextElement()).setSelected(true); } } if (P != null) { if (P instanceof PointObject) { if (e.isShiftDown()) // want more points! { if (V == null) V = new MyVector(); if (P != null) V.addElement(P); P = null; } else if (e.isControlDown()) // show current construction while moving { zc.grab(true); Grab = true; } else // remember old point position { OldX = ((PointObject) P).getX(); OldY = ((PointObject) P).getY(); } } else if (P instanceof MoveableObject) // call startDrag method of the object { ((MoveableObject) P).startDrag(zc.x(e.getX()), zc.y(e.getY())); // System.out.println("start dragging "+P.getName()); V = null; } if (ZCG != null) { ZCG.dispose(); ZCG = null; } ZCG = zc.getGraphics(); } zc.repaint(); showStatus(zc); if (P!=null) { ShowsName=P.showName(); ShowsValue=P.showValue(); } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateMoveableObjects(e.getX(), e.getY(), e.isControlDown()); } boolean IntersectionBecameInvalid = false; /** * Drag a point in a new location and recompute the construction. Can show * the name and the value of the object to be dragged. Take care not to move * the point while ZirkelCanvas.paint is active. ZirkelCanvas.paint is * synchronized! * * @see rene.zirkel.ObjectConstructor#mouseDragged(java.awt.event.MouseEvent, * rene.zirkel.ZirkelCanvas) */ @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (P == null) return; // System.out.println("dragging "+P.getName()); zc.getConstruction().dontAlternate(false); synchronized (zc) { double oldx = 0, oldy = 0; if ((Global.getParameter("restrictedmove", false) || e .isShiftDown()) && P instanceof PointObject) { if (IntersectionBecameInvalid) { zc.getConstruction().dontAlternate(true); IntersectionBecameInvalid = false; } oldx = ((PointObject) P).getX(); oldy = ((PointObject) P).getY(); } ((MoveableObject) P).dragTo(zc.x(e.getX()), zc.y(e.getY())); if ((Global.getParameter("options.movename", false) && !P.isFixed()) || (Global.getParameter("options.movefixname", true) && P .isFixed())) { P.setShowValue(true); P.setShowName(true); } P.updateText(); if (V != null && (P instanceof PointObject)) { final double dx = ((PointObject) P).getX() - OldX, dy = ((PointObject) P) .getY() - OldY; final Enumeration en = V.elements(); while (en.hasMoreElements()) { final PointObject p = (PointObject) en.nextElement(); p.move(p.getX() + dx, p.getY() + dy); p.updateText(); } OldX = ((PointObject) P).getX(); OldY = ((PointObject) P).getY(); } if (P instanceof PointObject) { final PointObject Po = (PointObject) P; if (Po.dependsOnItselfOnly()) { Po.dontUpdate(true); zc.dovalidate(); Po.dontUpdate(false); } Po.magnet(); } zc.validate(); if ((Global.getParameter("restrictedmove", false) || e .isShiftDown()) && P instanceof PointObject && zc.getConstruction().intersectionBecameInvalid()) { ((PointObject) P).dragTo(oldx, oldy); IntersectionBecameInvalid = true; zc.validate(); } } if (ZCG == null) ZCG = zc.getGraphics(); zc.paint(ZCG); } /** * Release the mouse after dragging. * * @param e * @param zc * @param rightmouse * Call comes from a right mouse drag! */ public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc, final boolean rightmouse) { // System.out.println("released !"); // P.setShowValue(ShowsValue); // P.setShowName(ShowsName); if (P == null) return; if (ZCG != null) { ZCG.dispose(); ZCG = null; } zc.getConstruction().haveChanged(); P.setShowValue(ShowsValue); P.setShowName(ShowsName); JPropertiesBar.RefreshBar(); zc.setCursor(Cursor.getDefaultCursor()); P.setSelected(false); if (zc.getAxis_show() && !rightmouse && Global.getParameter("grid.leftsnap", false)) { P.snap(zc); P.round(); P.updateText(); } zc.validate(); if (Grab) { zc.grab(false); Grab = false; } if (ChangedDrawable) { if (P instanceof FixedCircleObject) { ((FixedCircleObject) P).setDragable(WasDrawable); } else if (P instanceof FixedAngleObject) { ((FixedAngleObject) P).setDragable(WasDrawable); } } zc.clearSelected(); zc.repaint(); P = null; V = null; Selected = false; showStatus(zc); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { mouseReleased(e, zc, false); } @Override public void reset(final ZirkelCanvas zc) { V = null; P = null; zc.clearSelected(); zc.repaint(); Selected = false; } @Override public void resetFirstTime(final ZirkelCanvas zc) { if (V != null) V.removeAllElements(); zc.clearSelected(); zc.selectAllMoveableVisibleObjects(); final Graphics g = zc.getGraphics(); if (g != null) { zc.paint(g); g.dispose(); try { Thread.sleep(200); } catch (final Exception e) { } zc.clearSelected(); } zc.repaint(); Selected = false; P = null; V = null; } @Override public void showStatus(final ZirkelCanvas zc) { if (P == null && !Selected) zc.showStatus(Global.name("message.move.select", "Move: Select a point")); else if (Selected) zc.showStatus(Global.name("message.move.move", "Move: Move the point")); else zc.showStatus(Global.name("message.move.move", "Move: Move the point") + " (" + P.getName() + ")"); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/UniversalTracker.java0000640000175000017500000001261211303263515020255 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Tracker.java import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.util.Enumeration; import rene.zirkel.ZirkelCanvas; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; public class UniversalTracker extends javax.swing.JPanel { /** * */ private static final long serialVersionUID = 1L; public BufferedImage TrackI = null; public MyGraphics TrackIG = null; int IW = 0, IH = 0; double DX = 0, Xmin = 0, Ymin = 0; boolean isActive = false; ZirkelCanvas ZC; public UniversalTracker(final ZirkelCanvas zc) { ZC = zc; } public void setActive(final boolean b) { isActive = b; } public boolean isActive() { return isActive; } public void clearTrackObjects() { final Enumeration e = ZC.getConstruction().V.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); o.setTracked(false); } isActive = false; } public synchronized void draw() { if (TrackI == null) { return; } if (!isActive) { return; } // in case of zoom or coordinates system move : if ((ZC.DX != DX) || (ZC.Xmin != Xmin) || (ZC.Ymin != Ymin)) { IW = ZC.IW; IH = ZC.IH; DX = ZC.DX; Xmin = ZC.Xmin; Ymin = ZC.Ymin; clearTrackImage(); } ZC.I.getGraphics().drawImage(TrackI, 0, 0, this); } public void createTrackImage() { IW = ZC.IW; IH = ZC.IH; DX = ZC.DX; Xmin = ZC.Xmin; Ymin = ZC.Ymin; TrackI = new BufferedImage(IW, IH, BufferedImage.TYPE_INT_ARGB); clearTrackImage(); TrackIG = new MyGraphics13(TrackI.getGraphics(), ZC); } public void clearTrackImage() { final Graphics2D g2D = TrackI.createGraphics(); g2D .setComposite(AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.0f)); final Rectangle2D.Double rect = new Rectangle2D.Double(0, 0, IW, IH); g2D.fill(rect); } public void drawTrackCircle(final PrimitiveCircleObject o, final double d, final double d0, final double r) { isActive = true; TrackIG.setColor(o); TrackIG.drawCircle(d, d0, r, o); } public void drawTrackLine(final ConstructionObject o, final double c1, final double r1, final double c2, final double r2) { isActive = true; TrackIG.setColor(o); TrackIG.drawLine(c1, r1, c2, r2, o); } public void drawTrackPoint(final ConstructionObject o, final double X, final double Y, final int type) { isActive = true; if (TrackIG == null) { return; } double size = ZC.pointSize(); if (size < 1) { size = 1; } final double r = ZC.col(X), c = ZC.row(Y); if (o.visible(ZC)) { final boolean ind = o.indicated(); final boolean sel = o.selected(); o.setIndicated(false); o.setSelected(false); switch (type) { case PointObject.SQUARE: final double sx = r - size - 1, sy = c - size - 1, sw = 2 * size + 2; if (o.getColorType() == ConstructionObject.THICK) { TrackIG.fillRect(sx, sy, sw, sw, true, false, o); } else { TrackIG.fillRect(sx, sy, sw, sw, new Color(250, 250, 250)); } TrackIG.setColor(o); TrackIG.drawRect(sx, sy, sw, sw); break; case PointObject.DIAMOND: final double dx = r - size - 2, dy = c - size - 2, dw = 2 * size + 4; TrackIG.drawDiamond(dx, dy, dw, (o.getColorType() == ConstructionObject.THICK), o); break; case PointObject.CIRCLE: final double cx = r - size - 1, cy = c - size - 1, cw = 2 * size + 2; if (o.getColorType() == ConstructionObject.THICK) { TrackIG.fillOval(cx, cy, cw, cw, true, false, o); } else { TrackIG.fillOval(cx, cy, cw, cw, new Color(250, 250, 250)); TrackIG.setColor(o); TrackIG.drawOval(cx, cy, cw, cw); } break; case PointObject.DOT: if (o.getColorType() == ConstructionObject.THICK) { TrackIG.fillRect(r, c, 1, 1, true, false, o); } else { TrackIG.fillRect(r, c, 1, 1, false, false, o); // TrackIG.drawLine(r, c, r, c); } break; case PointObject.CROSS: if (o.getColorType() == ConstructionObject.THICK) { TrackIG.drawThickLine(r - size, c, r + size, c); TrackIG.drawThickLine(r, c - size, r, c + size); } else { TrackIG.drawLine(r - size, c, r + size, c); TrackIG.drawLine(r, c - size, r, c + size); } break; case PointObject.DCROSS: final double dcx = r - size - 1, dcy = c - size - 1, dcw = 2 * size + 1; TrackIG.drawDcross(dcx, dcy, dcw, (o.getColorType() == ConstructionObject.THICK), o); break; } o.setIndicated(ind); o.setSelected(sel); } } } ./src/rene/zirkel/tools/LabelMover.java0000640000175000017500000000522411303263644017025 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: MoveConstructor.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; public class LabelMover extends ObjectConstructor { ConstructionObject P; ObjectConstructor OC; int X, Y; double OX, OY; public LabelMover(final ObjectConstructor oc, final ZirkelCanvas zc, final int x, final int y, final ConstructionObject p, final boolean shift) { OC = oc; P = p; if (shift || !P.canKeepClose()) { X = x; Y = y; P.setKeepClose(false); OX = P.xcOffset(); OY = P.ycOffset(); } else { P.setKeepClose(zc.x(x), zc.y(y)); } if (P != null) { P.setLabelSelected(true); zc.repaint(); showStatus(zc); } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (P == null) return; if (P.isKeepClose()) { P.setKeepClose(zc.x(e.getX()), zc.y(e.getY())); } else { P.setcOffset(OX + zc.dx(e.getX() - X), OY + zc.dy(Y - e.getY())); } zc.validate(); zc.repaint(); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (P == null) return; P.setLabelSelected(false); zc.repaint(); P = null; showStatus(zc); zc.setTool(OC); } @Override public void reset(final ZirkelCanvas zc) { zc.clearSelected(); P.setLabelSelected(false); zc.repaint(); } public void resetPoint() { if (P != null) { P.setKeepClose(false); P.setcOffset(0, 0); } } @Override public void showStatus(final ZirkelCanvas zc) { if (P == null) zc.showStatus(Global.name("message.label.select", "Move Label: Select a label")); else zc.showStatus(Global.name("message.label.move", "Move Label: Move the label")); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/DrawerTool.java0000640000175000017500000000351111303263644017054 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Hider.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.graphics.Drawing; public class DrawerTool extends ObjectConstructor { Drawing D; boolean Dragging = false; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { final double x = zc.x(e.getX()), y = zc.y(e.getY()); D = new Drawing(); D.addXY(x, y); Dragging = true; zc.addDrawing(D); D.setColor(zc.getDefaultColor()); } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) return; final double x = zc.x(e.getX()), y = zc.y(e.getY()); D.addXY(x, y); zc.repaint(); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { Dragging = false; zc.repaint(); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Global.name("message.draw")); } @Override public void reset(final ZirkelCanvas zc) { zc.clearSelected(); } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/ZoomerTool.java0000640000175000017500000001322011303263644017101 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Hider.java import java.awt.Cursor; import java.awt.event.MouseEvent; import java.util.Enumeration; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.MoveableObject; import rene.zirkel.objects.TextObject; import rene.zirkel.objects.UserFunctionObject; /** * @author Rene Werkzeug zum Zoomen des Fensters und zum Verschieben. * Verschieben funktioniert im Zentrum des Fensters. */ public class ZoomerTool extends ObjectConstructor { boolean Dragging = false, Zoom = false; double X, Y, W, X0, Y0; ObjectConstructor OC; public static void initNonDraggableObjects(final Construction c) { final Enumeration en = c.elements(); while (en.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) en.nextElement(); if ((o instanceof TextObject) || (o instanceof ExpressionObject) || (o instanceof UserFunctionObject)) { final MoveableObject mo = (MoveableObject) o; mo.startDrag(0, 0); } } } public static void shiftNonDraggableObjectsBy(final Construction c, final double dx, final double dy) { final Enumeration en = c.elements(); while (en.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) en.nextElement(); if ((o instanceof TextObject) || (o instanceof ExpressionObject) || (o instanceof UserFunctionObject)) { final MoveableObject mo = (MoveableObject) o; mo.dragTo(dx, dy); } // else if (!o.isKeepClose()) { // // System.out.println("dx="+dx); // o.setcOffset(o.xcOffset()+2*dx, o.ycOffset()+2*dy); // // // C.setXYW(C.getX()+dx*C.getW(), C.getY()+dy*C.getW(), // C.getW()); // // }; } } public static void zoomNonDraggableObjectsBy(final Construction c, final double f) { final Enumeration en = c.elements(); while (en.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) en.nextElement(); if ((o instanceof TextObject) || (o instanceof ExpressionObject) || (o instanceof UserFunctionObject)) { final MoveableObject mo = (MoveableObject) o; mo.move(c.getX() + (mo.getOldX() - c.getX()) * f, c.getY() + (mo.getOldY() - c.getY()) * f); } } } public ZoomerTool() { super(); } public ZoomerTool(final ObjectConstructor oc, final MouseEvent e, final ZirkelCanvas zc) { super(); OC = oc; X0 = zc.x(e.getX()); Y0 = zc.y(e.getY()); final Construction c = zc.getConstruction(); X = c.getX(); Y = c.getY(); W = c.getW(); Zoom = false; zc.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); Dragging = true; initNonDraggableObjects(c); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { X0 = zc.x(e.getX()); Y0 = zc.y(e.getY()); final Construction c = zc.getConstruction(); X = c.getX(); Y = c.getY(); W = c.getW(); Zoom = (Math.abs(X - X0) > W / 4 || Math.abs(Y - Y0) > W / 4); if (!Zoom) { zc.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); } Dragging = true; OC = null; initNonDraggableObjects(c); } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) { return; } final Construction c = zc.getConstruction(); c.setXYW(X, Y, W); zc.recompute(); final double x = zc.x(e.getX()), y = zc.y(e.getY()); if (Zoom) { final double f = Math.sqrt((X0 - X) * (X0 - X) + (Y0 - Y) * (Y0 - Y)) / Math.sqrt((x - X) * (x - X) + (y - Y) * (y - Y)); c.setXYW(X, Y, f * W); zoomNonDraggableObjectsBy(c, f); } else { c.setXYW(X - (x - X0), Y - (y - Y0), W); shiftNonDraggableObjectsBy(c, X0 - x, Y0 - y); } zc.recompute(); zc.validate(); zc.repaint(); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { Dragging = Zoom = false; zc.setCursor(Cursor.getDefaultCursor()); zc.recompute(); zc.validate(); zc.repaint(); if (OC != null) { zc.setTool(OC); } } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Global.name("message.zoom")); } @Override public void reset(final ZirkelCanvas zc) { zc.clearSelected(); zc.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); Zoom = Dragging = false; } @Override public void invalidate(final ZirkelCanvas zc) { zc.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean flag) { X0 = zc.x(e.getX()); Y0 = zc.y(e.getY()); final Construction c = zc.getConstruction(); X = c.getX(); Y = c.getY(); W = c.getW(); Zoom = (Math.abs(X - X0) > W / 4 || Math.abs(Y - Y0) > W / 4); if (!Zoom) { zc.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); } else { zc.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } } @Override public boolean useSmartBoard() { return false; } } ./src/rene/zirkel/tools/SetFixedAngle.java0000640000175000017500000000644211303263644017462 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: SetRange.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.AngleObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.FixedAngleObject; import rene.zirkel.objects.PointObject; public class SetFixedAngle extends ObjectConstructor implements Selector { ObjectConstructor OC; FixedAngleObject A; PointObject P1, P2, P3; public SetFixedAngle(final ZirkelCanvas zc, final FixedAngleObject a, final ObjectConstructor oc) { A = a; OC = oc; a.setSelected(true); zc.repaint(); } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (P1 == null) { final ConstructionObject o = zc.selectWithSelector(e.getX(), e .getY(), this); if (o == null) return; if (o instanceof PointObject) { P1 = (PointObject) o; P1.setSelected(true); showStatus(zc); zc.repaint(); } else if (o instanceof AngleObject || o instanceof FixedAngleObject || o instanceof ExpressionObject) { A.setFixed(o.getName()); A.setDragable(false); A.updateText(); reset(zc); } } else if (P2 == null) { P2 = zc.selectPoint(e.getX(), e.getY()); if (P2 != null) { P2.setSelected(true); showStatus(zc); zc.repaint(); } } else { P3 = zc.selectPoint(e.getX(), e.getY()); if (P3 == null) return; A.setFixed("a(" + P1.getName() + "," + P2.getName() + "," + P3.getName() + ")"); reset(zc); } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateWithSelector(e.getX(), e.getY(), this); } @Override public void showStatus(final ZirkelCanvas zc) { if (P1 == null) zc.showStatus(Global.name("message.setfixedangle.first")); else if (P2 == null) zc.showStatus(Global.name("message.setfixedangle.second")); else zc.showStatus(Global.name("message.setfixedangle.third")); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setTool(OC); zc.validate(); zc.repaint(); zc.check(); } @Override public boolean useSmartBoard() { return P2 != null; } public boolean isAdmissible(final ZirkelCanvas zc, final ConstructionObject o) { if ((o instanceof PointObject || o instanceof AngleObject || o instanceof FixedAngleObject || o instanceof ExpressionObject) && !zc.getConstruction().dependsOn(o, A)) return true; return false; } } ./src/rene/zirkel/tools/SetParameterTool.java0000640000175000017500000000624511333327067020236 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: SetParameter.java import eric.macros.CreateMacroPanel; import java.awt.event.MouseEvent; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.AngleObject; import rene.zirkel.objects.AreaObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.FunctionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.UserFunctionObject; /** * Class to choose parameters for macro definition. * * @author Rene */ public class SetParameterTool extends ObjectConstructor implements Selector { @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); final ConstructionObject o=zc.selectWithSelector(e.getX(), e.getY(), this); if (o==null) { return; } if (o.isMainParameter()) { o.setMainParameter(false); o.setSelected(false); zc.getConstruction().removeParameter(o); zc.repaint(); } else { o.setMainParameter(true); o.setSelected(true); zc.getConstruction().addParameter(o); zc.repaint(); if (e.isShiftDown()) { o.setSpecialParameter(true); } } CreateMacroPanel.setParametersComments(); } public boolean isAdmissible(final ZirkelCanvas zc, final ConstructionObject o) { return (o instanceof PointObject||o instanceof PrimitiveLineObject ||o instanceof PrimitiveCircleObject ||o instanceof ExpressionObject||o instanceof AngleObject ||o instanceof AreaObject||o instanceof FunctionObject||o instanceof UserFunctionObject); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateWithSelector(e.getX(), e.getY(), this); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.clearSelected(); zc.getConstruction().clearParameters(); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Global.name("message.parameters", "Macro Parameters: Select the Parameters!")); } } ./src/rene/zirkel/tools/DeleteTool.java0000640000175000017500000000326311330232303017022 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.tools; // file: Hider.java import eric.JZirkelCanvas; import java.awt.Cursor; import java.awt.Point; import java.awt.Toolkit; import java.awt.event.MouseEvent; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.objects.ConstructionObject; public class DeleteTool extends ObjectConstructor { @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); final ConstructionObject o = zc.selectObject(e.getX(), e.getY()); if (o == null) return; zc.delete(o); zc.repaint(); // zc.paintToolIcon("delete"); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateObjects(e.getX(), e.getY()); // zc.paintToolIcon("delete"); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Global.name("message.delete", "Delete: Select an object!")); } } ./src/rene/zirkel/newicons/0000755000175000017500000000000011132345565014623 5ustar yvesyves./src/rene/zirkel/icon.gif0000770000175000017500000000011611337523371014413 0ustar yvesyvesGIF87a,@'pDpIValy@HAQn3ii;./src/rene/zirkel/graphics/0000755000175000017500000000000011132354034014565 5ustar yvesyves./src/rene/zirkel/graphics/PolygonFiller.java0000640000175000017500000000466111133127261020221 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.graphics; import rene.zirkel.objects.ConstructionObject; /** * @author Rene * */ public class PolygonFiller { MyGraphics G; ConstructionObject O; double C, R; double C1, R1; boolean HaveToFinish; public static int step = 5; public boolean Started; boolean Solid; double x[], y[]; int nx; public PolygonFiller(final MyGraphics g, final ConstructionObject o) { G = g; O = o; Started = false; } public void startPolygon(final double c, final double r) { C = c; R = r; HaveToFinish = false; nx = 0; Started = true; drawTo(c, r, false); } public void start() { nx = 0; Started = false; } public void drawTo(final double c, final double r) { drawTo(c, r, true); } public void drawTo(final double c, final double r, final boolean optimized) { if (!Started) { startPolygon(c, r); return; } if (!optimized || (c - C) * (c - C) + (r - R) * (r - R) > step) { if (x == null) { x = new double[1000]; y = new double[1000]; nx = 0; } if (nx >= x.length) { final double xn[] = new double[2 * x.length]; final double yn[] = new double[2 * x.length]; for (int i = 0; i < nx; i++) { xn[i] = x[i]; yn[i] = y[i]; } x = xn; y = yn; } x[nx] = c; y[nx++] = r; C = c; R = r; HaveToFinish = false; } else { C1 = c; R1 = r; HaveToFinish = true; } } public void finishPolygon() { if (HaveToFinish) { drawTo(C1, R1, false); HaveToFinish = false; } G.fillPolygon(x, y, nx, false, true, O); Started = false; } public int length() { return nx; } public double x(final int i) { return x[i]; } public double y(final int i) { return y[i]; } public void setGraphics(final MyGraphics g) { G = g; } } ./src/rene/zirkel/graphics/MyGraphicsPDF.java0000640000175000017500000004252311303264337020040 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.graphics; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Image; import java.awt.image.ImageObserver; import java.io.FileOutputStream; import java.io.PrintWriter; import rene.gui.Global; import rene.zirkel.ZirkelFrame; import rene.zirkel.construction.Construction; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; class PdfFontMetrics extends FontMetrics { /** * */ private static final long serialVersionUID = 1L; int Size; public PdfFontMetrics(final int size) { super(new Font("Courier", Font.PLAIN, size)); // a dummy font. Size = size; } @Override public int stringWidth(final String s) { return s.length() * Size; } @Override public int getHeight() { return Size; } @Override public int getAscent() { return Size * 4 / 5; } } public class MyGraphicsPDF extends MyGraphics { PrintWriter Out; StringBuffer buf, xref, stream; int nxref = 1; String prefix = ""; final int Normal = 0, Thin = 1, Thick = 2; int Stroke = Normal; private PdfFontMetrics FM = new PdfFontMetrics(10); boolean Bold; double W, H; double LineWidth; public MyGraphicsPDF(final PrintWriter out, final double w, final double h, final double linewidth) { Out = out; LineWidth = linewidth; W = w; H = h; buf = new StringBuffer(); xref = new StringBuffer(); appendxref(0, 65535, false); appendln("%PDF-1.4"); newObject(); appendln("<< /Type /Catalog"); appendln(" /Outlines 2 0 R"); appendln(" /Pages 3 0 R"); appendln(">>"); endObject(); newObject(); appendln("<< /Type /Outlines"); appendln(" /Count 0"); appendln(">>"); endObject(); newObject(); appendln("<< /Type /Pages"); appendln(" /Kids [4 0 R]"); appendln(" /Count 1"); appendln(">>"); endObject(); newObject(); appendln("<< /Type /Page"); appendln(" /Parent 3 0 R"); appendln(" /MediaBox [0 0 " + w + " " + h + "]"); appendln(" /Contents 5 0 R"); appendln(" /Resources << /ProcSet 6 0 R"); appendln(" /Font << /F1 7 0 R"); appendln(" /F2 7 0 R " + " /F3 7 0 R >>"); appendln(" >>"); appendln(">>"); endObject(); newObject(); stream = new StringBuffer(); } public void close() { appendln("<< /Length " + stream.length() + " >>"); prefix = ""; appendln("stream"); buf.append(stream.toString()); appendln("endstream"); endObject(); newObject(); appendln("[/PDF]"); endObject(); newObject(); appendln("<< /Type /Font"); appendln(" /Subtype /Type1"); appendln(" /Name /F1"); appendln(" /BaseFont /Helvetica"); appendln(" /Encoding /WinAnsiEncoding"); appendln(">>"); endObject(); newObject(); appendln("<< /Type /Font"); appendln(" /Subtype /Type1"); appendln(" /Name /F2"); appendln(" /BaseFont /Symbol"); appendln(" /Encoding /WinAnsiEncoding"); appendln(">>"); endObject(); newObject(); appendln("<< /Type /Font"); appendln(" /Subtype /Type1"); appendln(" /Name /F3"); appendln(" /BaseFont /Helvetica-Bold"); appendln(" /Encoding /WinAnsiEncoding"); appendln(">>"); endObject(); appendln(""); appendln("xref"); final int xrefstart = buf.length(); appendln(0 + " " + nxref); buf.append(xref.toString()); appendln(""); appendln("trailer"); appendln("<< /Size " + nxref); appendln(" /Root 1 0 R"); appendln(">>"); appendln(""); appendln("startxref"); appendln("" + xrefstart); appendln(""); appendln("%%EOF"); Out.write(buf.toString()); } public void appendln(final String s) { buf.append(prefix + s); buf.append((char) 13); buf.append((char) 10); } public void streamln(final String s) { stream.append(prefix + s); stream.append((char) 13); stream.append((char) 10); } public void appendxref(final int offset, final int number, final boolean present) { xref.append(format(offset, 10) + " " + format(number, 5) + (present ? " n" : " f")); xref.append((char) 13); xref.append((char) 10); } public String format(final int n, final int size) { String s = "" + n; while (s.length() < size) s = "0" + s; return s; } public void newObject() { final int n = buf.length(); appendln(""); appendln(nxref + " " + 0 + " obj"); appendxref(n, 0, true); nxref++; prefix = " "; } public void endObject() { prefix = ""; appendln("endobj"); } public double r(final double x) { return Math.round(x * 100.0) / 100.0; } public double ry(final double y) { return Math.round((H - y) * 100.0) / 100.0; } public void setStroke(final int stroke) { if (Stroke == stroke) return; Stroke = stroke; switch (Stroke) { case Normal: streamln(r(LineWidth) + " w"); streamln("[] 0 d"); break; case Thick: streamln(r(3 * LineWidth) + " w"); streamln("[] 0 d"); break; case Thin: streamln(LineWidth + " w"); streamln("[" + r(3 * LineWidth) + " " + r(3 * LineWidth) + "] 0 d"); break; } } @Override public void clearRect(final int x, final int y, final int w, final int h, final Color c) { } Color OldColor = null; @Override public void setColor(final Color c) { if (OldColor != null && c.getRed() == OldColor.getRed() && c.getGreen() == OldColor.getGreen() && c.getBlue() == OldColor.getBlue()) return; streamln(r(c.getRed() / 255.0) + " " + r(c.getGreen() / 255.0) + " " + r(c.getBlue() / 255.0) + " rg"); OldColor = c; } @Override public void setColor(final ConstructionObject o) { if (o.isJobTarget()) setColor(ZirkelFrame.TargetColor); else if (o.indicated()) setColor(ZirkelFrame.IndicateColor); else if (o.selected()) setColor(ZirkelFrame.SelectColor); else { if (o.getColorType() == ConstructionObject.THIN) { final int i = o.getColorIndex(); if (o.isHidden()) setColor(ZirkelFrame.BrighterLightColors[i]); else setColor(ZirkelFrame.LightColors[i]); } else { final int i = o.getColorIndex(); if (o.isHidden()) setColor(ZirkelFrame.BrighterColors[i]); else setColor(ZirkelFrame.Colors[i]); } } if (o.getColorType() == ConstructionObject.THIN) { setStroke(Thin); } else if (o.getColorType() == ConstructionObject.THICK) { setStroke(Thick); } else { setStroke(Normal); } } Color OldFillColor = null; public void setFillColor(final Color c) { if (OldFillColor != null && c.getRed() == OldFillColor.getRed() && c.getGreen() == OldFillColor.getGreen() && c.getBlue() == OldFillColor.getBlue()) return; streamln(r(c.getRed() / 255.0) + " " + r(c.getGreen() / 255.0) + " " + r(c.getBlue() / 255.0) + " rg"); OldFillColor = c; } @Override public void setFillColor(final ConstructionObject o) { setStroke(Normal); if (o.isJobTarget()) setColor(ZirkelFrame.TargetColor); else if ((o instanceof PointObject) && o.indicated()) setFillColor(ZirkelFrame.IndicateColor); else { if (o.getColorType() != ConstructionObject.THICK) { final int i = o.getColorIndex(); if (o.isHidden()) setFillColor(ZirkelFrame.BrighterLightColors[i]); else setFillColor(ZirkelFrame.LightColors[i]); } else { final int i = o.getColorIndex(); if (o.isHidden()) setFillColor(ZirkelFrame.BrighterColors[i]); else setFillColor(ZirkelFrame.Colors[i]); } } } @Override public void setLabelColor(final ConstructionObject o) { if (o.labelSelected()) setFillColor(ZirkelFrame.SelectColor); else if (o.isFilled()) { final int type = o.getColorType(); o.setColorType(ConstructionObject.NORMAL); final int i = o.getColorIndex(); setFillColor(ZirkelFrame.Colors[i]); o.setColorType(type); } else { final int type = o.getColorType(); o.setColorType(ConstructionObject.NORMAL); final int i = o.getColorIndex(); if (o.isHidden()) setFillColor(ZirkelFrame.BrighterColors[i]); else setFillColor(ZirkelFrame.Colors[i]); o.setColorType(type); } } @Override public void drawRect(final double x, final double y, final double w, final double h) { streamln(r(x) + " " + ry(y + h) + " " + r(w) + " " + r(h) + " " + "re"); streamln("S"); } @Override public void drawLine(final double x, final double y, final double x1, final double y1, final ConstructionObject o) { streamln(r(x) + " " + ry(y) + " m"); streamln(r(x1) + " " + ry(y1) + " l"); streamln("S"); } @Override public void drawLine(final double x, final double y, final double x1, final double y1) { setStroke(Normal); streamln(r(x) + " " + ry(y) + " m"); streamln(r(x1) + " " + ry(y1) + " l"); streamln("S"); } @Override public void drawThickLine(final double x, final double y, final double x1, final double y1) { setStroke(Thick); streamln(r(x) + " " + ry(y) + " m"); streamln(r(x1) + " " + ry(y1) + " l"); streamln("S"); setStroke(Normal); } public void drawArc(final double x, final double y, final double r, final double a, final double b) { final double f = r / Math.cos(b / 3); streamln(r(x + Math.cos(a + b / 3) * f) + " " + ry(y - Math.sin(a + b / 3) * f) + " " + r(x + Math.cos(a + 2 * b / 3) * f) + " " + ry(y - Math.sin(a + 2 * b / 3) * f) + " " + r(x + Math.cos(a + b) * r) + " " + ry(y - Math.sin(a + b) * r) + " c"); } @Override public void drawArc(double x, double y, final double w, final double h, double a, double b) { setStroke(Normal); final double r = w / 2; x += r; y += r; a = a / 180 * Math.PI; b = b / 180 * Math.PI; int n = (int) (r * b / 10); if (n < 4) n = 4; streamln(r(x + Math.cos(a) * r) + " " + ry(y - Math.sin(a) * r) + " m"); for (int i = 0; i < n; i++) { drawArc(x, y, r, a + i * b / n, b / n); } streamln("S"); } @Override public void drawArc(double x, double y, final double w, final double h, double a, double b, final ConstructionObject o) { final double r = w / 2; x += r; y += r; a = a / 180 * Math.PI; b = b / 180 * Math.PI; int n = (int) (r * b / 10); if (n < 4) n = 4; streamln(r(x + Math.cos(a) * r) + " " + ry(y + -Math.sin(a) * r) + " m"); for (int i = 0; i < n; i++) { drawArc(x, y, r, a + i * b / n, b / n); } streamln("S"); } @Override public void setFont(final int size, final boolean bold) { Bold = bold; FM = new PdfFontMetrics(size); streamln("/F1 " + size + " Tf"); } @Override public FontMetrics getFontMetrics() { if (FM == null) FM = new PdfFontMetrics(20); return FM; } @Override public void drawString(final String s, final double x, final double y) { if (s.length() == 1) { final char c = s.charAt(0); for (int i = 0; i < Translation.length / 2; i++) { if (Translation[2 * i + 1] == c) { streamln("BT"); streamln("/F2 " + FM.Size + " Tf"); streamln(r(x) + " " + ry(y) + " Td"); streamln("(" + Translation[2 * i] + ") Tj"); streamln("ET"); return; } } } streamln("BT"); if (Bold) streamln("/F3 " + FM.Size + " Tf"); else streamln("/F1 " + FM.Size + " Tf"); streamln(r(x) + " " + ry(y) + " Td"); streamln("(" + s + ") Tj"); streamln("ET"); } public static char Translation[] = { 'a', '\u03B1', 'A', '\u0391', 'b', '\u03B2', 'B', '\u0392', 'c', '\u03B3', 'C', '\u0393', 'd', '\u03B4', 'D', '\u0394', 'e', '\u03B5', 'E', '\u0395', 'f', '\u03D5', 'F', '\u03A6', 'g', '\u03B3', 'G', '\u0393', 'h', '\u03B7', 'H', '\u0397', 'i', '\u03B9', 'I', '\u0399', 'k', '\u03BA', 'K', '\u039A', 'l', '\u03BB', 'L', '\u039B', 'm', '\u03BC', 'M', '\u039C', 'n', '\u03BD', 'N', '\u039D', 'o', '\u03BF', 'O', '\u03A9', 'p', '\u03C0', 'P', '\u03A0', 'q', '\u03C7', 'Q', '\u03A7', 'r', '\u03C1', 'R', '\u03A1', 's', '\u03C3', 'S', '\u03A3', 't', '\u03C4', 'T', '\u03A4', 'u', '\u03C5', 'U', '\u03A5', 'v', '\u03C8', 'V', '\u03A8', 'w', '\u03C9', 'W', '\u03A9', 'x', '\u03BE', 'X', '\u039E', 'y', '\u03C7', 'Y', '\u03A7', 'z', '\u03B6', 'Z', '\u0396', }; @Override public void drawOval(final double x, final double y, final double w, final double h) { drawArc(x, y, w, h, 0, 360); } @Override public void drawOval(final double x, final double y, final double w, final double h, final ConstructionObject o) { drawArc(x, y, w, h, 0, 360, o); } @Override public void fillRect(final double x, final double y, final double w, final double h, final boolean outline, final boolean transparent, final ConstructionObject o) { setFillColor(o); if (outline) setColor(o); streamln(r(x) + " " + ry(y + h) + " " + r(w) + " " + r(h) + " " + "re"); streamln(outline ? "b" : "f"); } @Override public void fillOval(final double x, final double y, final double w, final double h, final boolean outline, final boolean transparent, final ConstructionObject o) { fillArc(x, y, w, h, 0, 360, outline, transparent, true, o); } @Override public void fillPolygon(final double x[], final double y[], final int n, final boolean outline, final boolean tranparent, final ConstructionObject o) { setFillColor(o); if (outline) setColor(o); streamln(r(x[0]) + " " + ry(y[0]) + " m"); for (int i = 1; i < n; i++) { streamln(r(x[i]) + " " + ry(y[i]) + " l"); } streamln(outline ? "b*" : "f*"); } @Override public void fillArc(double x, double y, final double w, final double h, double a, double b, final boolean outline, final boolean transparent, final boolean arc, final ConstructionObject o) { setFillColor(o); if (outline) setColor(o); final double r = w / 2; x += r; y += r; a = a * Math.PI / 180; b = b * Math.PI / 180; int n = (int) (r * b / 10); if (n < 4) n = 4; streamln(r(x + Math.cos(a) * r) + " " + ry(y - Math.sin(a) * r) + " m"); for (int i = 0; i < n; i++) { drawArc(x, y, r, a + i * b / n, b / n); } if (arc) { streamln(r(x) + " " + ry(y) + " l"); } streamln(outline ? "b" : "f"); } @Override public void drawImage(final Image i, final int x, final int y, final ImageObserver o) { } @Override public void drawImage(final Image i, final int x, final int y, final int w, final int h, final ImageObserver o) { } public static void main(final String args[]) { try { new ConstructionObject(new Construction()); final PrintWriter out = new PrintWriter(new FileOutputStream( "test.pdf")); final MyGraphicsPDF pdf = new MyGraphicsPDF(out, 1000, 1000, 1); pdf.streamln("1 0 0 -1 0 1000 cm"); pdf.drawRect(300, 300, 400, 400); for (int i = 0; i < 180; i++) { final double s = i / 180.0 * Math.PI; pdf.drawLine(500 + Math.cos(s) * 200, 500 + Math.sin(s) * 200, 500 + Math.cos(s) * 200, 500 + Math.sin(s) * 200); } pdf.setColor(Color.red); pdf.drawArc(-300, -300, 1000, 1000, 0, 360); pdf.close(); out.close(); } catch (final Exception e) { System.out.println(e); } } int fsize; boolean flarge, fbold; int ffactor = Global.getParameter("ffactor", 130); @Override public void setDefaultFont(final int h, final boolean large, final boolean bold) { fsize = h; flarge = large; fbold = bold; ffactor = Global.getParameter("ffactor", 130); setFont(large, bold); } @Override public void setFont(final boolean large, final boolean bold) { int size = fsize; if (large) size = size * ffactor / 100; if (flarge) size = size * ffactor / 100; setFont(size, bold || fbold); } @Override public void drawImage(final Image i, final double x, final double y, final double x1, final double y1, final double x2, final double y2, final ImageObserver o) { } @Override public Graphics getGraphics() { return null; } @Override public int stringWidth(final String s) { return getFontMetrics().stringWidth(s); } @Override public int stringHeight(final String s) { return getFontMetrics().getHeight(); } @Override public int drawStringExtended(final String s, final double x, final double y) { drawString(s, x, y + getFontMetrics().getAscent()); return getFontMetrics().getHeight(); } @Override public int stringAscent(final String s) { return getFontMetrics().getAscent(); } @Override public void fillOval(final double x, final double y, final double w, final double h, final Color WithColor) { } @Override public void fillRect(final double x, final double y, final double w, final double h, final Color WithColor) { } @Override public void drawDiamond(final double x, final double y, final double w, final boolean isThick, final ConstructionObject o) { } @Override public void drawDcross(final double x, final double y, final double w, final boolean isThick, final ConstructionObject o) { } @Override public void setAntialiasing(final boolean bool) { } @Override public void drawAxisLine(final double x, final double y, final double x1, final double y1) { } @Override public void fillPolygon(final double[] x, final double[] y, final int n, final ConstructionObject o) { } } ./src/rene/zirkel/graphics/EPSGraphics.java0000640000175000017500000003367511133127256017557 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.graphics; /* Graphics class supporting EPS export from plots. Copyright (c) 1998-2000 The Regents of the University of California. Modified, completed and extended by R. Grothmann */ import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Rectangle; import java.awt.Shape; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; class EpsFontMetrics extends FontMetrics { /** * */ private static final long serialVersionUID = 1L; Font F; public EpsFontMetrics(final Font f) { super(f); // a dummy font. F = f; } @Override public int stringWidth(final String s) { return s.length() * F.getSize() / 2; } @Override public int getHeight() { return F.getSize(); } @Override public int getAscent() { return F.getSize() * 4 / 5; } } class EpsPoint { double x, y; public EpsPoint(final double xx, final double yy) { x = xx; y = yy; } } public class EPSGraphics { // /////////////////////////////////////////////////////////////// // // // private variables // // private Color _currentColor = Color.black; private Font _currentFont; private final double _height; int _orientation; private final OutputStream _out; private final StringBuffer _buffer = new StringBuffer(); private double LineWidth = 1; public static final int PORTRAIT = 0; public static final int LANDSCAPE = 1; private FontMetrics FM; public EPSGraphics(final OutputStream out, final double width, final double height, final int orientation, final boolean clip) { _height = height; _orientation = orientation; _out = out; _buffer.append("%!PS-Adobe-3.0 EPSF-3.0\n"); _buffer.append("%%Creator: QCircuitBuilder\n"); _buffer.append("%%BoundingBox: 50 50 " + (int) (50 + width) + " " + (int) (50 + height) + "\n"); // _buffer.append("%%Orientation: " + (_orientation == PORTRAIT ? // "Portrait" : "Landscape")); // _buffer.append("%%PageOrientation: " + (_orientation == PORTRAIT ? // "Portrait" : "Landscape")); _buffer.append("%%Pages: 1\n"); _buffer.append("%%Page: 1 1\n"); _buffer.append("%%LanguageLevel: 2\n"); if (clip) clipRect(0, 0, width, height); _buffer.append("/Helvetica findfont 10 scalefont setfont\n"); } public void clearRect(final int x, final int y, final int width, final int height) { } // Clip public void clipRect(final double x, final double y, final double width, final double height) { final EpsPoint start = _convert(x, y); // _fillPattern(); _buffer.append("newpath " + round(start.x) + " " + round(start.y) + " moveto\n"); _buffer.append("0 " + round(-height) + " rlineto\n"); _buffer.append("" + round(width) + " 0 rlineto\n"); _buffer.append("0 " + round(height) + " rlineto\n"); _buffer.append("" + round(-width) + " 0 rlineto\n"); _buffer.append("closepath clip\n"); } private double round(final double x) { return Math.round(x * 1000.0) / 1000.0; } /** * Draw a line, using the current color, between the points (x1, y1) and * (x2, y2) in this graphics context's coordinate system. * * @param x1 * the x coordinate of the first point. * @param y1 * the y coordinate of the first point. * @param x2 * the x coordinate of the second point. * @param y2 * the y coordinate of the second point. */ public void drawLine(final double x1, final double y1, final double x2, final double y2) { final EpsPoint start = _convert(x1, y1); final EpsPoint end = _convert(x2, y2); _buffer.append("newpath " + round(start.x) + " " + round(start.y) + " moveto\n"); _buffer.append("" + round(end.x) + " " + round(end.y) + " lineto\n"); _buffer.append("stroke\n"); } /** * Draw a closed polygon defined by arrays of x and y coordinates. Each pair * of (x, y) coordinates defines a vertex. The third argument gives the * number of vertices. If the arrays are not long enough to define this many * vertices, or if the third argument is less than three, then nothing is * drawn. * * @param xPoints * An array of x coordinates. * @param yPoints * An array of y coordinates. * @param nPoints * The total number of vertices. */ public void drawPolygon(final double xPoints[], final double yPoints[], final int nPoints) { if (!_polygon(xPoints, yPoints, nPoints)) { return; } else { _buffer.append("closepath stroke\n"); } } /** * Draw an oval bounded by the specified rectangle with the current color. * * @param x * The x coordinate of the upper left corner * @param y * The y coordinate of the upper left corner * @param width * The width of the oval to be filled. * @param height * The height of the oval to be filled. */ // FIXME: Currently, this ignores the fourth argument and // draws a circle with diameter given by the third argument. public void drawOval(final double x, final double y, final double width, final double height) { final double radius = width / 2.0; _buffer.append("newpath " + _convertX(x + radius) + " " + _convertY(y + radius) + " " + round(radius) + " 0 360 arc closepath stroke\n"); } public void drawRect(final double x, final double y, final double width, final double height) { final EpsPoint start = _convert(x, y); _buffer.append("newpath " + round(start.x) + " " + round(start.y) + " moveto\n"); _buffer.append("0 " + round(-height) + " rlineto\n"); _buffer.append("" + round(width) + " 0 rlineto\n"); _buffer.append("0 " + round(height) + " rlineto\n"); _buffer.append("" + round(-width) + " 0 rlineto\n"); _buffer.append("closepath stroke\n"); } public void drawRoundRect(final double x, final double y, final double width, final double height, final int arcWidth, final int arcHeight) { } public void drawString( final java.text.AttributedCharacterIterator iterator, final int x, final int y) { } public void drawString(final String str, final double x, final double y) { getFontMetrics(); final EpsPoint start = _convert(x, y); _buffer.append("" + start.x + " " + start.y + " moveto\n"); _buffer.append("(" + str + ") show\n"); } public void drawArc(final double x, final double y, final double width, final double height, final double startAngle, final double arcAngle) { final double radius = width / 2.0; _buffer.append("newpath " + _convertX(x + radius) + " " + _convertY(y + radius) + " " + round(radius) + " " + round(startAngle) + " " + " " + round(startAngle + arcAngle) + " arc stroke\n"); } public void fillArc(final double x, final double y, final double width, final double height, final double startAngle, final double arcAngle) { final double radius = width / 2.0; _buffer.append("newpath " + _convertX(x + radius) + " " + _convertY(y + radius) + " " + " moveto " + _convertX(x + radius) + " " + _convertY(y + radius) + " " + radius + " " + round(startAngle) + " " + round(startAngle + arcAngle) + " arc closepath fill\n"); } public void fillChord(final double x, final double y, final double width, final double height, final double startAngle, final double arcAngle) { final double radius = width / 2.0; _buffer.append("newpath " + _convertX(x + radius) + " " + _convertY(y + radius) + " " + round(radius) + " " + round(startAngle) + " " + round(startAngle + arcAngle) + " arc fill\n"); } public void fillPolygon(final double xPoints[], final double yPoints[], final int nPoints) { if (!_polygon(xPoints, yPoints, nPoints)) { return; } else { _buffer.append("closepath fill\n"); } } /** * Fill an oval bounded by the specified rectangle with the current color. * * @param x * The x coordinate of the upper left corner * @param y * The y coordinate of the upper left corner * @param width * The width of the oval to be filled. * @param height * The height of the oval to be filled. */ // FIXME: Currently, this ignores the fourth argument and draws a circle // with diameter given by the third argument. public void fillOval(final double x, final double y, final double width, final double height) { final double radius = width / 2.0; _buffer.append("newpath " + _convertX(x + radius) + " " + _convertY(y + radius) + " " + radius + " 0 360 arc closepath fill\n"); } /** * Fill the specified rectangle and draw a thin outline around it. The left * and right edges of the rectangle are at x and x + width - 1. The top and * bottom edges are at y and y + height - 1. The resulting rectangle covers * an area width pixels wide by height pixels tall. The rectangle is filled * using the brightness of the current color to set the level of gray. * * @param x * The x coordinate of the top left corner. * @param y * The y coordinate of the top left corner. * @param width * The width of the rectangle. * @param height * The height of the rectangle. */ public void fillRect(final double x, final double y, final double width, final double height) { final EpsPoint start = _convert(x, y); // _fillPattern(); _buffer.append("newpath " + start.x + " " + start.y + " moveto\n"); _buffer.append("0 " + round(-height) + " rlineto\n"); _buffer.append("" + round(width) + " 0 rlineto\n"); _buffer.append("0 " + round(height) + " rlineto\n"); _buffer.append("" + round(-width) + " 0 rlineto\n"); _buffer.append("closepath gsave fill grestore\n"); _buffer.append("0.5 setlinewidth 0 setgray [] 0 setdash stroke\n"); // reset the gray scale to black _buffer.append(round(LineWidth) + " setlinewidth\n"); } public void fillRoundRect(final double x, final double y, final double width, final double height, final int arcWidth, final int arcHeight) { } public Shape getClip() { return null; } public Rectangle getClipBounds() { return null; } public Color getColor() { return _currentColor; } public Font getFont() { return _currentFont; } public FontMetrics getFontMetrics(final Font f) { if (FM == null) FM = new EpsFontMetrics(new Font("dialog", Font.PLAIN, 20)); return FM; } public FontMetrics getFontMetrics() { return getFontMetrics(_currentFont); } public void setFont(final Font font) { final int size = font.getSize(); final boolean bold = font.isBold(); if (bold) { _buffer.append("/Helvetica-Bold findfont\n"); } else { _buffer.append("/Helvetica findfont\n"); } _buffer.append("" + size + " scalefont setfont\n"); _currentFont = font; FM = new EpsFontMetrics(font); } public void setClip(final Shape clip) { } public void setClip(final int x, final int y, final int width, final int height) { } /** * Set the current color. * * @param c * The desired current color. */ public void setColor(final Color c) { _buffer.append(c.getRed() / 255.0); _buffer.append(" "); _buffer.append(c.getGreen() / 255.0); _buffer.append(" "); _buffer.append(c.getBlue() / 255.0); _buffer.append(" setrgbcolor\n"); // _buffer.append("[] 0 setdash\n"); // _buffer.append("1 setlinewidth\n"); _currentColor = c; } public void setLineWidth(final double w) { _buffer.append(round(w) + " setlinewidth\n"); LineWidth = w; } public void setDash(final double a, final double b) { _buffer.append("[" + round(a) + " " + round(b) + " ] 0 setdash\n"); } public void clearDash() { _buffer.append("[ ] 0 setdash\n"); } public void setPaintMode() { } public void setXORMode(final Color c1) { } /** * Issue the PostScript showpage command, then write and flush the output. */ public void showpage(final String name) { try { // _buffer.append("showpage\n"); _buffer.append("%%EOF"); final PrintWriter output = new PrintWriter(new java.io.FileWriter( name)); output.println(_buffer.toString()); output.flush(); } catch (final Exception e) { e.printStackTrace(); } } /** * Issue the PostScript showpage command, then write and flush the output. */ public void close() throws IOException { _buffer.append("showpage\n"); _buffer.append("%%EOF"); final PrintWriter output = new PrintWriter(_out); output.println(_buffer.toString()); output.flush(); } // /////////////////////////////////////////////////////////////// // // // private methods // // // Convert the screen coordinate system to that of postscript. private EpsPoint _convert(final double x, final double y) { return new EpsPoint(round(x + 50), round(_height + 50 - y)); } private double _convertX(final double x) { return round(x + 50); } private double _convertY(final double y) { return round(_height + 50 - y); } // Draw a closed polygon defined by arrays of x and y coordinates. // Return false if arguments are misformed. private boolean _polygon(final double xPoints[], final double yPoints[], final int nPoints) { if (nPoints < 3 || xPoints.length < nPoints || yPoints.length < nPoints) return false; final EpsPoint start = _convert(xPoints[0], yPoints[0]); _buffer.append("newpath " + round(start.x) + " " + round(start.y) + " moveto\n"); for (int i = 1; i < nPoints; i++) { final EpsPoint vertex = _convert(xPoints[i], yPoints[i]); _buffer.append("" + round(vertex.x) + " " + round(vertex.y) + " lineto\n"); } return true; } } ./src/rene/zirkel/graphics/CVS/0000755000175000017500000000000011356444313015230 5ustar yvesyves./src/rene/zirkel/graphics/CVS/Repository0000644000175000017500000000003511132354034017320 0ustar yvesyvescarmetal/rene/zirkel/graphics./src/rene/zirkel/graphics/CVS/Entries0000644000175000017500000000135211133127742016562 0ustar yvesyves/Drawing.java/1.4/Tue Jan 13 15:09:34 2009/-ko/ /EPSGraphics.java/1.5/Tue Jan 13 15:09:34 2009/-ko/ /FontStruct.java/1.4/Tue Jan 13 15:09:35 2009/-ko/ /FunctionPolygonFiller.java/1.4/Tue Jan 13 15:09:35 2009/-ko/ /LatexOutput.java/1.4/Tue Jan 13 15:09:36 2009/-ko/ /MyGraphics.java/1.4/Tue Jan 13 15:09:37 2009/-ko/ /MyGraphics13.java/1.4/Tue Jan 13 15:09:37 2009/-ko/ /MyGraphicsEPS.java/1.4/Tue Jan 13 15:09:37 2009/-ko/ /MyGraphicsFig.java/1.5/Tue Jan 13 15:09:37 2009/-ko/ /MyGraphicsPDF.java/1.5/Tue Jan 13 15:09:37 2009/-ko/ /MyGraphicsSvg.java/1.5/Tue Jan 13 15:09:37 2009/-ko/ /PolygonDrawer.java/1.3/Tue Jan 13 15:09:37 2009/-ko/ /PolygonFiller.java/1.3/Tue Jan 13 15:09:37 2009/-ko/ /TrackPainter.java/1.3/Tue Jan 13 15:09:39 2009/-ko/ ./src/rene/zirkel/graphics/CVS/RevisionCache/0000755000175000017500000000000011356444341017753 5ustar yvesyves./src/rene/zirkel/graphics/CVS/RevisionCache/MyGraphics13.java#1.40000644000175000017500000005757611356444341023342 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.graphics; import java.awt.AlphaComposite; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.geom.AffineTransform; import java.awt.geom.Arc2D; import java.awt.geom.Ellipse2D; import java.awt.geom.Line2D; import java.awt.geom.Rectangle2D; import java.awt.image.ImageObserver; import javax.swing.JComponent; import rene.gui.Global; import rene.zirkel.ZirkelFrame; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import atp.sHotEqn; public class MyGraphics13 extends MyGraphics { Graphics2D G; BasicStroke Thin, Normal, Thick, SuperThick, DCross, DCrossNormal; AlphaComposite C, CO; JComponent ZC = null; LatexOutput LOut; public MyGraphics13(final Graphics g, double factor, final JComponent zc, final LatexOutput lout) { LOut = lout; G = (Graphics2D) g; if (Global.getParameter("quality", true)) { G.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); G.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); G.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); G.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); G.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); } final float dash[] = { (float) (factor * 5.0), (float) (factor * 5.0) }; if (factor < Global.getParameter("minlinesize", 1.0)) { factor = Global.getParameter("minlinesize", 1.0); } Thin = new BasicStroke((float) (factor), BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dash, 0.0f); Normal = new BasicStroke((float) (factor)); Thick = new BasicStroke((float) (factor * 2.0), BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER); DCross = new BasicStroke((float) (factor * 3.0), BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER); DCrossNormal = new BasicStroke((float) (factor * 1.5), BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER); SuperThick = new BasicStroke((float) (20), BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); C = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float) 0.5); CO = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float) 1.0); G.setComposite(CO); ZC = zc; } public MyGraphics13(final Graphics g) { this(g, 0.5, null, null); } public MyGraphics13(final Graphics g, final JComponent zc) { this(g, 0.5, zc, null); } public MyGraphics13(final Graphics g, final double factor) { this(g, factor, null, null); } @Override public void setColor(final Color c) { G.setColor(c); } @Override public void setColor(final ConstructionObject o) { G.setStroke(Normal); Color Col, LightCol, BrighterCol, BrighterLightCol; // it's a personnal color : if (o.getSpecialColor() != null) { final int i = o.getConditionalColor(); if (i != -1) { Col = ZirkelFrame.Colors[i]; LightCol = ZirkelFrame.LightColors[i]; BrighterCol = ZirkelFrame.BrighterColors[i]; BrighterLightCol = ZirkelFrame.BrighterLightColors[i]; } else { final double lambda = 0.4; Col = o.getSpecialColor(); final int r = (int) (255 * (1 - lambda) + Col.getRed() * lambda); final int g = (int) (255 * (1 - lambda) + Col.getGreen() * lambda); final int b = (int) (255 * (1 - lambda) + Col.getBlue() * lambda); LightCol = new Color(r, g, b); BrighterCol = Col.brighter(); BrighterLightCol = LightCol.brighter(); } } else { final int i = o.getColorIndex(); Col = ZirkelFrame.Colors[i]; LightCol = ZirkelFrame.LightColors[i]; BrighterCol = ZirkelFrame.BrighterColors[i]; BrighterLightCol = ZirkelFrame.BrighterLightColors[i]; } if (o.isJobTarget()) { setColor(ZirkelFrame.TargetColor); } else if (o.indicated()) { setColor(ZirkelFrame.IndicateColor); } else if (o.selected()) { setColor(ZirkelFrame.SelectColor); } else { if (o.getColorType() == ConstructionObject.THIN) { if (o.isHidden()) { setColor(BrighterLightCol); } else { setColor(LightCol); } } else { if (o.isHidden()) { setColor(BrighterCol); } else { setColor(Col); } } } if (o.getColorType() == ConstructionObject.THIN) { G.setStroke(Thin); } else if (o.getColorType() == ConstructionObject.THICK) { G.setStroke(Thick); } else { G.setStroke(Normal); } } @Override public void clearRect(final int x, final int y, final int w, final int h, final Color c) { G.setColor(c); G.fillRect(x, y, w, h); } @Override public void setFillColor(final ConstructionObject o) { G.setStroke(Normal); if (o.isJobTarget()) { setColor(ZirkelFrame.TargetColor); } else if ((o instanceof PointObject) && o.indicated()) { setColor(ZirkelFrame.IndicateColor); } else { Color Col, LightCol, BrighterCol, BrighterLightCol; // it's a personnal color : if (o.getSpecialColor() != null) { final int i = o.getConditionalColor(); if (i != -1) { Col = ZirkelFrame.Colors[i]; LightCol = ZirkelFrame.LightColors[i]; BrighterCol = ZirkelFrame.BrighterColors[i]; BrighterLightCol = ZirkelFrame.BrighterLightColors[i]; } else { final double lambda = 0.4; Col = o.getSpecialColor(); final int r = (int) (255 * (1 - lambda) + Col.getRed() * lambda); final int g = (int) (255 * (1 - lambda) + Col.getGreen() * lambda); final int b = (int) (255 * (1 - lambda) + Col.getBlue() * lambda); LightCol = new Color(r, g, b); BrighterCol = Col.brighter(); BrighterLightCol = LightCol.brighter(); } } else { final int i = o.getColorIndex(); Col = ZirkelFrame.Colors[i]; LightCol = ZirkelFrame.LightColors[i]; BrighterCol = ZirkelFrame.BrighterColors[i]; BrighterLightCol = ZirkelFrame.BrighterLightColors[i]; } if (o.getColorType() != ConstructionObject.THICK) { if (o.isHidden()) { setColor(BrighterLightCol); } else { setColor(LightCol); } } else { if (o.isHidden()) { setColor(BrighterCol); } else { setColor(Col); } } if (o.getColorType() == ConstructionObject.THIN) { G.setStroke(Thin); } else if (o.getColorType() == ConstructionObject.THICK) { G.setStroke(Thick); } else { G.setStroke(Normal); } } } @Override public void setLabelColor(final ConstructionObject o) { if (o.labelSelected()) { setColor(ZirkelFrame.SelectColor); } else if (o.isFilled()) { final int type = o.getColorType(); o.setColorType(ConstructionObject.NORMAL); setColor(o); o.setColorType(type); } else { setColor(o); } } @Override public void drawRect(final double x, final double y, final double w, final double h) { if (test(x) || test(y) || test(x + w) || test(y + h)) { return; } G.setStroke(Normal); G.draw(new Rectangle2D.Double(x, y, w, h)); } public void drawMarkerRect(final double x, final double y, final double w, final double h) { if (test(x) || test(y) || test(x + w) || test(y + h)) { return; } G.setColor(ZirkelFrame.IndicateColor); G.setStroke(SuperThick); G.draw(new Rectangle2D.Double(x, y, w, h)); G.setStroke(Normal); } @Override public void drawLine(final double x, final double y, final double x1, final double y1) { if (test(x) || test(y) || test(x1) || test(y1)) { return; } G.setStroke(Normal); G.draw(new Line2D.Double(x, y, x1, y1)); } @Override public void drawThickLine(final double x, final double y, final double x1, final double y1) { if (test(x) || test(y) || test(x1) || test(y1)) { return; } G.setStroke(Thick); G.draw(new Line2D.Double(x, y, x1, y1)); G.setStroke(Normal); } public void drawMarkerLine(final double x, final double y, final double x1, final double y1) { if (test(x) || test(y) || test(x1) || test(y1)) { return; } G.setColor(ZirkelFrame.IndicateColor); G.setStroke(SuperThick); G.draw(new Line2D.Double(x, y, x1, y1)); G.setStroke(Normal); } @Override public void drawLine(final double x, final double y, final double x1, final double y1, final ConstructionObject o) { if (test(x) || test(y) || test(x1) || test(y1)) { return; } G.draw(new Line2D.Double(x, y, x1, y1)); } public boolean test(final double x) { return Math.abs(x) > 1e5; } @Override public void drawArc(final double x, final double y, final double w, final double h, final double a, final double b) { if (test(x) || test(y) || test(w) || test(h)) { return; } G.setStroke(Normal); G.draw(new Arc2D.Double(x, y, w, h, a, b, Arc2D.OPEN)); } @Override public void drawArc(final double x, final double y, final double w, final double h, final double a, final double b, final ConstructionObject o) { if (test(x) || test(y) || test(w) || test(h)) { return; } else { G.draw(new Arc2D.Double(x, y, w, h, a, b, Arc2D.OPEN)); } } @Override public FontMetrics getFontMetrics() { return G.getFontMetrics(); } @Override public void drawString(final String s, final double x, final double y) { if (test(x) || test(y)) { return; } G.drawString(s, (float) x, (float) y); } @Override public void drawOval(final double x, final double y, final double w, final double h) { if (test(x) || test(y) || test(w) || test(h)) { return; } G.setStroke(Normal); G.draw(new Ellipse2D.Double(x, y, w, h)); } @Override public void drawOval(final double x, final double y, final double w, final double h, final ConstructionObject o) { if (test(x) || test(y) || test(w) || test(h)) { return; } else { G.draw(new Ellipse2D.Double(x, y, w, h)); } } @Override public void drawCircle(final double x, final double y, final double r, final ConstructionObject o) { if (r > 10 * (W + H)) { drawLargeCircleArc(x, y, r, 0, 360); } else { G.draw(new Ellipse2D.Double(x - r, y - r, 2 * r, 2 * r)); } } public void drawMarkerArc(final double x, final double y, final double r, final double a, final double b) { if (test(x) || test(y) || test(r)) { return; } G.setColor(ZirkelFrame.IndicateColor); G.setStroke(SuperThick); G.draw(new Arc2D.Double(x - r, y - r, 2 * r, 2 * r, a, b, Arc2D.OPEN)); } @Override public void drawCircleArc(final double x, final double y, final double r, final double a, final double b, final ConstructionObject o) { if (r > 10 * (W + H)) { drawLargeCircleArc(x, y, r, a, b); } else { G.draw(new Arc2D.Double(x - r, y - r, 2 * r, 2 * r, a, b, Arc2D.OPEN)); } } void drawLargeCircleArc(final double x, final double y, final double r, final double a, final double b) { final double dw = Math.sqrt((W + H) / r / 10); double w = a; double x0 = x + r * Math.cos(w / 180 * Math.PI); double y0 = y - r * Math.sin(w / 180 * Math.PI); w = w + dw; while (w < a + b + dw) { if (w > a + b) { w = a + b; } final double x1 = x + r * Math.cos(w / 180 * Math.PI); final double y1 = y - r * Math.sin(w / 180 * Math.PI); final double dx = (x0 + x1) / 2, dy = (y0 + y1) / 2; if (Math.sqrt(dx * dx + dy * dy) <= 10 * (W + H)) { G.draw(new Line2D.Double(x0, y0, x1, y1)); } x0 = x1; y0 = y1; w += dw; } } @Override public void fillRect(final double x, final double y, final double w, final double h, final boolean outline, final boolean transparent, final ConstructionObject o) { if (test(x) || test(y) || test(w) || test(h)) { return; } setFillColor(o); if (transparent && !o.isSolid()) { G.setComposite(C); } G.fill(new Rectangle2D.Double(x, y, w, h)); if (transparent && !o.isSolid()) { G.setComposite(CO); } if (outline) { setColor(o); G.draw(new Rectangle2D.Double(x, y, w, h)); } } @Override public void fillOval(final double x, final double y, final double w, final double h, final boolean outline, final boolean transparent, final ConstructionObject o) { if (test(x) || test(y) || test(w) || test(h)) { return; } if (o.getColorType() != ConstructionObject.INVISIBLE) { setFillColor(o); if (transparent && !o.isSolid()) { G.setComposite(C); } try { G.fill(new Ellipse2D.Double(x, y, w, h)); } catch (final Exception e) { } if (transparent && !o.isSolid()) { G.setComposite(CO); } } if (outline) { setColor(o); drawOval(x, y, w, h); } } @Override public void fillArc(final double x, final double y, final double w, final double h, final double a, final double b, final boolean outline, final boolean transparent, final boolean arcb, final ConstructionObject o) { if (test(x) || test(y) || test(w) || test(h)) { return; } setFillColor(o); if (transparent && !o.isSolid()) { G.setComposite(C); } final Arc2D arc = new Arc2D.Double(x, y, w, h, a, b, arcb ? Arc2D.PIE : Arc2D.CHORD); G.fill(arc); if (transparent && !o.isSolid()) { G.setComposite(CO); } if (outline) { setColor(o); arc.setArcType(Arc2D.OPEN); G.setStroke(Normal); G.draw(arc); } } int xx[] = new int[64], yy[] = new int[64]; @Override public void fillPolygon(final double x[], final double y[], final int n, final boolean outline, final boolean transparent, final ConstructionObject o) { if (o.getColorType() != ConstructionObject.INVISIBLE) { setFillColor(o); if (transparent && !o.isSolid()) { G.setComposite(C); } } if (n > xx.length) { xx = new int[n]; yy = new int[n]; } for (int i = 0; i < n; i++) { xx[i] = (int) (x[i]); if (test(x[i])) { return; } yy[i] = (int) (y[i]); if (test(y[i])) { return; } } if (o.getColorType() != ConstructionObject.INVISIBLE) { G.fillPolygon(xx, yy, n); if (transparent && !o.isSolid()) { G.setComposite(CO); } } if (outline) { setColor(o); G.setStroke(Normal); for (int i = 0; i < n - 1; i++) { drawLine(xx[i], yy[i], xx[i + 1], yy[i + 1]); } drawLine(xx[n - 1], yy[n - 1], xx[0], yy[0]); } } @Override public void fillPolygon(final double x[], final double y[], final int n, final ConstructionObject o) { if (n > xx.length) { xx = new int[n]; yy = new int[n]; } for (int i = 0; i < n; i++) { xx[i] = (int) (x[i]); if (test(x[i])) { return; } yy[i] = (int) (y[i]); if (test(y[i])) { return; } } if (o.isFilled()) { setFillColor(o); if ((o.getColorType() != ConstructionObject.THICK) && (!o.isSolid())) { G.setComposite(C); } G.fillPolygon(xx, yy, n); if ((o.getColorType() != ConstructionObject.THICK) && (!o.isSolid())) { G.setComposite(CO); } } if (!o.isFilled() || o.indicated() || o.selected() || o.getColorType() == ConstructionObject.NORMAL) { setColor(o); if (o.indicated() || o.selected()) { G.setStroke(Normal); } else { if (o.getColorType() == ConstructionObject.THIN) { G.setStroke(Thin); } else if (o.getColorType() == ConstructionObject.THICK) { G.setStroke(Thick); } else { G.setStroke(Normal); } } for (int i = 0; i < n - 1; i++) { drawLine(xx[i], yy[i], xx[i + 1], yy[i + 1], o); } drawLine(xx[n - 1], yy[n - 1], xx[0], yy[0], o); } } @Override public void drawImage(final Image i, final int x, final int y, final ImageObserver o) { G.drawImage(i, x, y, o); } @Override public void drawImage(final Image i, final int x, final int y, final int w, final int h, final ImageObserver o) { G.drawImage(i, x, y, w, h, o); } FontStruct FS = new FontStruct(); @Override public void setFont(final int h, final boolean bold) { Font f = FS.getFont(h, bold); if (f != null) { G.setFont(f); } else { f = new Font(Global.getParameter("font.name", "dialog"), bold ? Font.BOLD : Font.PLAIN, h); FS.storeFont(h, bold, f); G.setFont(f); } } int fsize; boolean flarge, fbold; int ffactor = Global.getParameter("ffactor", 130); @Override public void setDefaultFont(final int h, final boolean large, final boolean bold) { ffactor = Global.getParameter("ffactor", 130); fsize = h; flarge = large; fbold = bold; setFont(large, bold); } @Override public void setFont(final boolean large, final boolean bold) { int size = fsize; // int size=eric.JGlobals.FixFontSize(fsize); if (large) { size = size * ffactor / 100; } if (flarge) { size = size * ffactor / 100; } setFont(size, bold || fbold); } @Override public void drawImage(final Image i, final double x, final double y, final double x1, final double y1, final double x2, final double y2, final ImageObserver o) { try { final int w = i.getWidth(o), h = i.getHeight(o); final AffineTransform AT = new AffineTransform((x1 - x) / w, (y1 - y) / w, (x2 - x) / h, (y2 - y) / h, x, y); G.drawImage(i, AT, o); } catch (final Exception e) { } } @Override public Graphics getGraphics() { return G; } int StrH = 0, StrW = 0, StrAsc = 0; boolean StrTex = false; String Str = null; public void computeString(String s) { if (s.equals(Str)) { return; } StrH = StrW = StrAsc = 0; StrTex = false; Str = s; while (s != "") { int n = s.indexOf('$'); while (n > 0 && s.charAt(n - 1) == '\\') { n = s.indexOf('$', n + 1); } if (n < 0) { StrH = Math.max(StrH, getFontMetrics().getHeight()); StrW += getFontMetrics().stringWidth(s); StrAsc = Math.max(StrAsc, getFontMetrics().getAscent()); break; } else { StrTex = true; String ss = s.substring(0, n); s = s.substring(n + 1); StrH = Math.max(StrH, getFontMetrics().getHeight()); StrW += getFontMetrics().stringWidth(ss); StrAsc = Math.max(StrAsc, getFontMetrics().getAscent()); n = s.indexOf('$'); while (n > 0 && s.charAt(n - 1) == '\\') { n = s.indexOf('$', n + 1); } ss = s; if (n >= 0) { ss = s.substring(0, n); s = s.substring(n + 1); } else { s = ""; } if (HE == null || !HE.getEquation().equals(ss)) { setHotEqn(ss); } StrH = Math.max(StrH, heightHotEqn(G)); StrW += widthHotEqn(G); StrAsc = Math.max(StrAsc, ascentHotEqn(G)); } } } public int getW() { return StrW; } @Override public int stringWidth(final String s) { computeString(s); return StrW; } @Override public int stringHeight(final String s) { computeString(s); return StrH; } public boolean isTex(final String s) { computeString(s); return StrTex; } @Override public int drawStringExtended(String s, final double x, final double y) { if (s.startsWith("$$")) { s = s.substring(2); if (s.endsWith("$$")) { s = s.substring(0, s.length() - 2); } if (HE == null || !HE.getEquation().equals(s)) { setHotEqn(s); } if (LOut == null || !LOut.println("$$" + s + "$$", x, y + ascentHotEqn(G))) { return paintHotEqn((int) x, (int) y, G); } else { return heightHotEqn(G); } } computeString(s); if (LOut != null) { if (StrTex && LOut.printDollar()) { LOut.println(s, x, y + StrAsc, true); return StrH; } else if (!StrTex) { if (LOut.println(s, x, y + StrAsc)) { return StrH; } } } int w = 0; while (s != "") { int n = s.indexOf('$'); while (n > 0 && s.charAt(n - 1) == '\\') { n = s.indexOf('$', n + 1); } if (n < 0) { drawString(translateDollar(s), x + w, y + StrAsc); w += getFontMetrics().stringWidth(s); break; } else { String ss = s.substring(0, n); s = s.substring(n + 1); drawString(translateDollar(ss), x + w, y + StrAsc); w += getFontMetrics().stringWidth(ss); n = s.indexOf('$'); while (n > 0 && s.charAt(n - 1) == '\\') { n = s.indexOf('$', n + 1); } ss = s; if (n >= 0) { ss = s.substring(0, n); s = s.substring(n + 1); } else { s = ""; } if (HE == null || !HE.getEquation().equals(ss)) { setHotEqn(ss); } paintHotEqn((int) x + w, (int) y + StrAsc - ascentHotEqn(G), G); w += widthHotEqn(G); } } StrW = w; return StrH; } public String translateDollar(String s) { int n; while ((n = s.indexOf("\\$")) >= 0) { s = s.substring(0, n) + "$" + s.substring(n + 2); } return s; } @Override public int stringAscent(final String s) { return getFontMetrics().getAscent(); } sHotEqn HE = null; public void setHotEqn(final String s) { if (ZC == null) { return; } if (HE == null) { HE = new sHotEqn(ZC); } HE.setEquation(s); } public int paintHotEqn(final int c, final int r, final Graphics g) { if (HE == null) { return 0; } return HE.paint(c, r, g); } public int heightHotEqn(final Graphics g) { if (HE == null) { return 0; } return HE.getSizeof(HE.getEquation(), g).height; } public int ascentHotEqn(final Graphics g) { if (HE == null) { return 0; } return HE.getAscent(HE.getEquation(), g); } public int widthHotEqn(final Graphics g) { if (HE == null) { return 0; } return HE.getSizeof(HE.getEquation(), g).width; } @Override public void fillOval(final double x, final double y, final double w, final double h, final Color WithColor) { try { G.setColor(WithColor); G.fill(new Ellipse2D.Double(x, y, w, h)); } catch (final Exception e) { } } @Override public void fillRect(final double x, final double y, final double w, final double h, final Color WithColor) { try { G.setColor(WithColor); G.fill(new Rectangle2D.Double(x, y, w, h)); } catch (final Exception e) { } } @Override public void drawDiamond(final double x, final double y, final double w, final boolean isThick, final ConstructionObject o) { final double dw = w / 2; final int dx[] = new int[4], dy[] = new int[4]; dx[0] = (int) (x + dw); dy[0] = (int) (y); dx[1] = (int) (x + w); dy[1] = (int) (y + dw); dx[2] = (int) (x + dw); dy[2] = (int) (y + w); dx[3] = (int) (x); dy[3] = (int) (y + dw); if (isThick) { setColor(o); } else { G.setColor(new Color(250, 250, 250)); } G.fillPolygon(dx, dy, 4); if (!isThick) { setColor(o); G.drawPolygon(dx, dy, 4); } } @Override public void drawDcross(final double x, final double y, final double w, final boolean isThick, final ConstructionObject o) { final double x1 = x + w, y1 = y + w; setColor(o); if (isThick) { G.setStroke(DCross); } else { G.setStroke(DCrossNormal); } G.draw(new Line2D.Double(x, y, x1, y1)); G.draw(new Line2D.Double(x, y1, x1, y)); G.setStroke(Normal); } @Override public void setAntialiasing(final boolean bool) { if (bool) { G.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // G.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, // RenderingHints.VALUE_TEXT_ANTIALIAS_ON); } else { G.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); // G.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, // RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); } } @Override public void drawAxisLine(final double x, final double y, final double x1, final double y1) { if (test(x) || test(y) || test(x1) || test(y1)) { return; } G.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE); G.setStroke(new BasicStroke(0.05f)); G.draw(new Line2D.Double(x, y, x1, y1)); G.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); } } ./src/rene/zirkel/graphics/CVS/RevisionCache/MyGraphics.java#1.40000644000175000017500000001055211356444313023154 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.graphics; import java.awt.Color; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Image; import java.awt.image.ImageObserver; import rene.zirkel.objects.ConstructionObject; public abstract class MyGraphics { double W = 1000, H = 1000; public void setSize(final double w, final double h) { W = w; H = h; } public abstract void clearRect(int x, int y, int w, int h, Color c); public abstract void setColor(Color c); public abstract void setColor(ConstructionObject o); public abstract void setFillColor(ConstructionObject o); public abstract void setLabelColor(ConstructionObject o); public abstract void drawRect(double x, double y, double w, double h); public abstract void drawAxisLine(double x, double y, double x1, double y1); public abstract void drawLine(double x, double y, double x1, double y1, ConstructionObject o); public abstract void drawLine(double x, double y, double x1, double y1); public abstract void drawThickLine(double x, double y, double x1, double y1); public abstract void drawArc(double x, double y, double w, double h, double a, double b); public abstract void drawArc(double x, double y, double w, double h, double a, double b, ConstructionObject o); public void drawCircleArc(final double x, final double y, final double r, final double a, final double b, final ConstructionObject o) { drawArc(x - r, y - r, 2 * r, 2 * r, a, b, o); } public abstract void drawString(String s, double x, double y); public abstract void drawOval(double x, double y, double w, double h); public abstract void drawOval(double x, double y, double w, double h, ConstructionObject o); public void drawCircle(final double x, final double y, final double r, final ConstructionObject o) { drawOval(x - r, y - r, 2 * r, 2 * r, o); } public abstract void fillRect(double x, double y, double w, double h, boolean outline, boolean transparent, ConstructionObject o); public abstract void fillRect(double x, double y, double w, double h, Color WithColor); public abstract void fillOval(double x, double y, double w, double h, boolean outline, boolean transparent, ConstructionObject o); public abstract void fillOval(double x, double y, double w, double h, Color WithColor); public abstract void fillPolygon(double x[], double y[], int n, boolean outline, boolean tranparent, ConstructionObject o); public abstract void fillPolygon(double x[], double y[], int n, ConstructionObject o); public abstract void drawDiamond(double x, double y, double w, boolean isThick, ConstructionObject o); public abstract void drawDcross(double x, double y, double w, boolean isThick, ConstructionObject o); public abstract void fillArc(double x, double y, double w, double h, double a, double b, boolean outline, boolean transparent, boolean arc, ConstructionObject o); public abstract void drawImage(Image i, int x, int y, ImageObserver o); public abstract void drawImage(Image i, int x, int y, int w, int h, ImageObserver o); public abstract void drawImage(Image i, double x, double y, double x1, double y1, double x2, double y2, ImageObserver o); public abstract void setDefaultFont(int size, boolean large, boolean bold); public abstract void setFont(boolean large, boolean bold); public abstract void setFont(int size, boolean bold); public abstract FontMetrics getFontMetrics(); public abstract Graphics getGraphics(); public abstract int stringAscent(String s); public abstract int stringWidth(String s); public abstract int stringHeight(String s); public abstract int drawStringExtended(String s, double x, double y); public abstract void setAntialiasing(boolean bool); } ./src/rene/zirkel/graphics/CVS/Root0000644000175000017500000000007411132354034016067 0ustar yvesyves:ext:erichake@carmetal.cvs.sourceforge.net:/cvsroot/carmetal./src/rene/zirkel/graphics/Drawing.java0000640000175000017500000000230111133127256017020 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.graphics; import java.util.Enumeration; import rene.util.MyVector; import rene.zirkel.structures.CoordinatesXY; // file: Drawing.java public class Drawing { MyVector P; int Col; public Drawing() { P = new MyVector(); } public void addXY(final double x, final double y) { P.addElement(new CoordinatesXY(x, y)); } public Enumeration elements() { return P.elements(); } public void setColor(final int col) { Col = col; } public int getColor() { return Col; } } ./src/rene/zirkel/graphics/TrackPainter.java0000640000175000017500000000170211303263516020017 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.graphics; import java.util.Enumeration; import rene.zirkel.ZirkelCanvas; public interface TrackPainter { public Enumeration elements(); public void paint(MyGraphics g, ZirkelCanvas zc); public void validate(ZirkelCanvas zc); } ./src/rene/zirkel/graphics/FunctionPolygonFiller.java0000640000175000017500000000427511133127257021735 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.graphics; import java.util.Enumeration; import java.util.Vector; import rene.zirkel.objects.FunctionObject; import rene.zirkel.structures.Coordinates; /** * @author Rene * */ public class FunctionPolygonFiller { MyGraphics G; FunctionObject O; Vector V; double Ymin, Ymax; boolean cartesian = true; public FunctionPolygonFiller(final MyGraphics g, final FunctionObject o, final double ymin, final double ymax) { G = g; O = o; Ymin = ymin - 100; Ymax = ymax + 100; cartesian = O.isCartesian(); V = new Vector(); } public void add(final double c, final double r) { double r0 = r; if (r > Ymax) { r0 = Ymax; } else if (r < Ymin) { r0 = Ymin; } V.add(new Coordinates(c, r0)); } public void fillPolygon(final double origin) { final int bord = cartesian ? 2 : 0; final int nx = V.size() + bord; if (nx > bord) { final double x[] = new double[nx]; final double y[] = new double[nx]; final Enumeration e = V.elements(); int i = 0; if (e.hasMoreElements()) { final Coordinates c = (Coordinates) e.nextElement(); if (cartesian) { x[i] = c.X; y[i++] = origin; x[i] = c.X; y[i++] = c.Y; } else { x[i] = c.X; y[i++] = c.Y; } } while (e.hasMoreElements()) { final Coordinates c = (Coordinates) e.nextElement(); x[i] = c.X; y[i++] = c.Y; } if (cartesian) { x[i] = x[i - 1]; y[i] = origin; } G.fillPolygon(x, y, nx, false, true, O); V.removeAllElements(); } } } ./src/rene/zirkel/graphics/MyGraphicsEPS.java0000640000175000017500000002544411303264337020061 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.graphics; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Image; import java.awt.image.ImageObserver; import java.io.IOException; import java.io.OutputStream; import rene.gui.Global; import rene.zirkel.ZirkelFrame; import rene.zirkel.objects.ConstructionObject; public class MyGraphicsEPS extends MyGraphics { EPSGraphics G; static public int MaxR = 1000000; double LineWidth = 1; public MyGraphicsEPS(final OutputStream out, final int w, final int h) { G = new EPSGraphics(out, w, h, EPSGraphics.PORTRAIT, true); } public void setLineWidth(final double w) { LineWidth = w; G.setLineWidth(w); } @Override public void clearRect(final int x, final int y, final int w, final int h, final Color c) { G.setColor(c); G.fillRect(x, y, w, h); } @Override public void setColor(final Color c) { G.setColor(c); } @Override public void setColor(final ConstructionObject o) { if (o.isJobTarget()) { setColor(ZirkelFrame.TargetColor); } else if (o.selected()) { setColor(ZirkelFrame.SelectColor); } else if (o.getColorType() == ConstructionObject.THIN) { final int i = o.getColorIndex(); if (o.isHidden()) { setColor(ZirkelFrame.BrighterLightColors[i]); } else { setColor(ZirkelFrame.LightColors[i]); } } else { final int i = o.getColorIndex(); if (o.isHidden()) { setColor(ZirkelFrame.BrighterColors[i]); } else { setColor(ZirkelFrame.Colors[i]); } } } @Override public void setFillColor(final ConstructionObject o) { if (o.isJobTarget()) { setColor(ZirkelFrame.TargetColor); } else if (o.getColorType() != ConstructionObject.THICK) { final int i = o.getColorIndex(); if (o.isHidden()) { setColor(ZirkelFrame.BrighterLightColors[i]); } else { setColor(ZirkelFrame.LightColors[i]); } } else { final int i = o.getColorIndex(); if (o.isHidden()) { setColor(ZirkelFrame.BrighterColors[i]); } else { setColor(ZirkelFrame.Colors[i]); } } } @Override public void setLabelColor(final ConstructionObject o) { if (o.labelSelected()) { setColor(ZirkelFrame.SelectColor); } else if (o.isFilled()) { final int type = o.getColorType(); o.setColorType(ConstructionObject.NORMAL); setColor(o); o.setColorType(type); } else { setColor(o); } } @Override public void drawRect(final double x, final double y, final double w, final double h) { G.drawRect(x, y, w, h); } @Override public void drawLine(final double x, final double y, final double x1, final double y1, final ConstructionObject o) { if (o.getColorType() == ConstructionObject.THICK) { drawThickLine(x, y, x1, y1); } else if (o.getColorType() == ConstructionObject.THIN) { drawThinLine(x, y, x1, y1); } else { drawLine(x, y, x1, y1); } } @Override public void drawLine(final double x, final double y, final double x1, final double y1) { G.drawLine(x, y, x1, y1); } @Override public void drawThickLine(final double c1, final double r1, final double c2, final double r2) { G.setLineWidth(3 * LineWidth); G.drawLine(c1, r1, c2, r2); G.setLineWidth(LineWidth); } public void drawThinLine(final double c1, final double r1, final double c2, final double r2) { G.setDash(4, 4); G.drawLine(c1, r1, c2, r2); G.clearDash(); } @Override public void drawArc(final double x, final double y, final double w, final double h, final double a, final double b) { G.drawArc(x, y, w, h, a, b); } public void drawThickArc(final double x, final double y, final double w, final double h, final double a, final double b) { G.setLineWidth(3 * LineWidth); drawArc(x + 1, y + 1, w - 2, w - 2, a, b); G.setLineWidth(LineWidth); } public void drawThinArc(final double x, final double y, final double w, final double h, final double a, final double b) { G.setDash(4, 4); drawArc(x + 1, y + 1, w - 2, w - 2, a, b); G.clearDash(); } @Override public void drawArc(final double x, final double y, final double w, final double h, final double a, final double b, final ConstructionObject o) { if (o.getColorType() == ConstructionObject.THICK) { drawThickArc(x, y, w, h, a, b); } else if (o.getColorType() == ConstructionObject.THIN) { drawThinArc(x, y, w, h, a, b); } else { drawArc(x, y, w, h, a, b); } } @Override public void drawString(final String s, final double x, final double y) { G.drawString(s, x, y); } @Override public void drawOval(final double x, final double y, final double w, final double h) { if (w < MaxR) { G.drawOval(x, y, w, h); } } public void drawThickOval(final double x, final double y, final double w, final double h) { drawOval(x, y, w, h); drawOval(x - 1, y - 1, w + 2, h + 2); drawOval(x + 1, y + 1, w - 2, h - 2); } @Override public void drawOval(final double x, final double y, final double w, final double h, final ConstructionObject o) { setColor(o); if (o.getColorType() == ConstructionObject.THICK) { drawThickOval(x, y, w, h); } else { drawOval(x, y, w, h); } } @Override public void fillRect(final double x, final double y, final double w, final double h, final boolean outline, final boolean transparent, final ConstructionObject o) { setFillColor(o); G.fillRect(x, y, w, h); if (outline) { setColor(o); G.drawRect(x, y, w, h); } } @Override public void fillArc(final double x, final double y, final double w, final double h, final double a, final double b, final boolean outline, final boolean transparent, final boolean arc, final ConstructionObject o) { setFillColor(o); if (arc) { G.fillArc(x, y, w, h, a, b); } else { G.fillChord(x, y, w, h, a, b); } if (outline) { setColor(o); G.drawArc(x, y, w, h, a, b); } } @Override public void fillOval(final double x, final double y, final double w, final double h, final boolean outline, final boolean transparent, final ConstructionObject o) { if (w >= MaxR) { return; } setFillColor(o); G.fillOval(x, y, w, h); if (outline) { setColor(o); G.drawOval(x, y, w, h); } } @Override public void fillPolygon(final double x[], final double y[], final int n, final boolean outline, final boolean transparent, final ConstructionObject o) { if (o.getColorType() != ConstructionObject.INVISIBLE) { setFillColor(o); G.fillPolygon(x, y, n); } if (outline) { setColor(o); G.drawPolygon(x, y, n); } } @Override public void drawImage(final Image i, final int x, final int y, final ImageObserver o) { } @Override public void drawImage(final Image i, final int x, final int y, final int w, final int h, final ImageObserver o) { } public void close() throws IOException { G.close(); } int fsize; boolean flarge, fbold; int ffactor = Global.getParameter("ffactor", 130); @Override public void setDefaultFont(final int h, final boolean large, final boolean bold) { fsize = h; flarge = large; fbold = bold; setFont(large, bold); } @Override public void setFont(final boolean large, final boolean bold) { int size = fsize; if (large) { size = size * ffactor / 100; } if (flarge) { size = size * ffactor / 100; } setFont(size, bold || fbold); } @Override public void setFont(final int h, final boolean bold) { G.setFont(new Font(Global.getParameter("font.name", "dialog"), bold ? Font.BOLD : Font.PLAIN, h)); } @Override public FontMetrics getFontMetrics() { return G.getFontMetrics(); } @Override public void drawImage(final Image i, final double x, final double y, final double x1, final double y1, final double x2, final double y2, final ImageObserver o) { } @Override public Graphics getGraphics() { return null; } @Override public int stringWidth(final String s) { return getFontMetrics().stringWidth(s); } @Override public int stringHeight(final String s) { return getFontMetrics().getHeight(); } @Override public int drawStringExtended(final String s, final double x, final double y) { drawString(s, x, y + getFontMetrics().getAscent()); return getFontMetrics().getHeight(); } @Override public int stringAscent(final String s) { return getFontMetrics().getAscent(); } @Override public void fillOval(final double x, final double y, final double w, final double h, final Color WithColor) { try { G.setColor(WithColor); G.fillOval(x, y, w, h); } catch (final Exception e) { } } @Override public void fillRect(final double x, final double y, final double w, final double h, final Color WithColor) { try { G.setColor(WithColor); G.fillRect(x, y, w, h); } catch (final Exception e) { } } @Override public void drawDiamond(final double x, final double y, final double w, final boolean isThick, final ConstructionObject o) { final double dw = w / 2; final double dx[] = new double[4], dy[] = new double[4]; dx[0] = x + dw; dy[0] = y; dx[1] = x + w; dy[1] = y + dw; dx[2] = x + dw; dy[2] = y + w; dx[3] = x; dy[3] = y + dw; if (isThick) { G.setColor(o.getColor()); } else { G.setColor(new Color(250, 250, 250)); } G.fillPolygon(dx, dy, 4); if (!isThick) { G.setColor(o.getColor()); G.drawPolygon(dx, dy, 4); } } @Override public void drawDcross(final double x, final double y, final double w, final boolean isThick, final ConstructionObject o) { final double x1 = x + w, y1 = y + w; setColor(o); if (isThick) { G.setLineWidth(2 * LineWidth); } else { G.setLineWidth(LineWidth); } drawLine(x, y, x1, y1); drawLine(x, y1, x1, y); G.setLineWidth(LineWidth); } @Override public void setAntialiasing(final boolean bool) { } @Override public void drawAxisLine(final double x, final double y, final double x1, final double y1) { G.setLineWidth(LineWidth / 2); drawLine(x, y, x1, y1); G.setLineWidth(LineWidth); } @Override public void fillPolygon(final double[] x, final double[] y, final int n, final ConstructionObject o) { if (o.isFilled()) { setFillColor(o); G.fillPolygon(x, y, n); } if (!o.isFilled() || o.indicated() || o.selected() || o.getColorType() == ConstructionObject.NORMAL) { setColor(o); G.drawPolygon(x, y, n); } } } ./src/rene/zirkel/graphics/MyGraphics.java0000640000175000017500000001055211133127261017476 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.graphics; import java.awt.Color; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Image; import java.awt.image.ImageObserver; import rene.zirkel.objects.ConstructionObject; public abstract class MyGraphics { double W = 1000, H = 1000; public void setSize(final double w, final double h) { W = w; H = h; } public abstract void clearRect(int x, int y, int w, int h, Color c); public abstract void setColor(Color c); public abstract void setColor(ConstructionObject o); public abstract void setFillColor(ConstructionObject o); public abstract void setLabelColor(ConstructionObject o); public abstract void drawRect(double x, double y, double w, double h); public abstract void drawAxisLine(double x, double y, double x1, double y1); public abstract void drawLine(double x, double y, double x1, double y1, ConstructionObject o); public abstract void drawLine(double x, double y, double x1, double y1); public abstract void drawThickLine(double x, double y, double x1, double y1); public abstract void drawArc(double x, double y, double w, double h, double a, double b); public abstract void drawArc(double x, double y, double w, double h, double a, double b, ConstructionObject o); public void drawCircleArc(final double x, final double y, final double r, final double a, final double b, final ConstructionObject o) { drawArc(x - r, y - r, 2 * r, 2 * r, a, b, o); } public abstract void drawString(String s, double x, double y); public abstract void drawOval(double x, double y, double w, double h); public abstract void drawOval(double x, double y, double w, double h, ConstructionObject o); public void drawCircle(final double x, final double y, final double r, final ConstructionObject o) { drawOval(x - r, y - r, 2 * r, 2 * r, o); } public abstract void fillRect(double x, double y, double w, double h, boolean outline, boolean transparent, ConstructionObject o); public abstract void fillRect(double x, double y, double w, double h, Color WithColor); public abstract void fillOval(double x, double y, double w, double h, boolean outline, boolean transparent, ConstructionObject o); public abstract void fillOval(double x, double y, double w, double h, Color WithColor); public abstract void fillPolygon(double x[], double y[], int n, boolean outline, boolean tranparent, ConstructionObject o); public abstract void fillPolygon(double x[], double y[], int n, ConstructionObject o); public abstract void drawDiamond(double x, double y, double w, boolean isThick, ConstructionObject o); public abstract void drawDcross(double x, double y, double w, boolean isThick, ConstructionObject o); public abstract void fillArc(double x, double y, double w, double h, double a, double b, boolean outline, boolean transparent, boolean arc, ConstructionObject o); public abstract void drawImage(Image i, int x, int y, ImageObserver o); public abstract void drawImage(Image i, int x, int y, int w, int h, ImageObserver o); public abstract void drawImage(Image i, double x, double y, double x1, double y1, double x2, double y2, ImageObserver o); public abstract void setDefaultFont(int size, boolean large, boolean bold); public abstract void setFont(boolean large, boolean bold); public abstract void setFont(int size, boolean bold); public abstract FontMetrics getFontMetrics(); public abstract Graphics getGraphics(); public abstract int stringAscent(String s); public abstract int stringWidth(String s); public abstract int stringHeight(String s); public abstract int drawStringExtended(String s, double x, double y); public abstract void setAntialiasing(boolean bool); } ./src/rene/zirkel/graphics/MyGraphicsFig.java0000640000175000017500000005040011303264337020125 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.graphics; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Image; import java.awt.image.ImageObserver; import java.io.PrintWriter; import rene.gui.Global; import rene.zirkel.ZirkelFrame; import rene.zirkel.objects.ConstructionObject; /** * You need to provide a font measurement system (in x,y coordinates) */ class MyFontMetrics extends FontMetrics { /** * */ private static final long serialVersionUID = 1L; public MyFontMetrics() { super(new Font("Courier", 10, Font.PLAIN)); // a dummy font. } @Override public int stringWidth(final String s) { return s.length() * 10; } @Override public int getHeight() { return 12; } @Override public int getAscent() { return 2; } } /** * This is the Graphics class, you need to implement. */ public class MyGraphicsFig extends MyGraphics { PrintWriter Out; final static int STROKE_NORMAL = 1, STROKE_THIN = 1, STROKE_THICK = 2; final static int STYLE_NORMAL = 0, STYLE_THIN = 1, STYLE_THICK = 0; int Stroke = STROKE_NORMAL; int Red, Green, Blue; MyFontMetrics MFM; int yoffset = 6000; String[] FigColorsArray; int FigLastcolor = 31; int FigColor = 0; int FigFillcolor = 0; int FigLinestyle = STYLE_NORMAL; int FigLayer = 10000; boolean PushLayer = true; int xfactor = 15; int yfactor = 15; StringBuffer FigFirstpart; StringBuffer FigLastpart; public MyGraphicsFig(final PrintWriter out, final int w, final int h) { FigFirstpart = new StringBuffer(); FigLastpart = new StringBuffer(); // FigFirstpart.append("#primera linea\n"); // FigFirstpart.append("#segona linea\n"); FigFirstpart.append("#FIG 3.2\n"); FigFirstpart.append("Landscape\n"); FigFirstpart.append("Center\n"); FigFirstpart.append("Metric\n"); FigFirstpart.append("A4\n"); FigFirstpart.append("100.00\n"); FigFirstpart.append("Single\n"); FigFirstpart.append("-2\n"); FigFirstpart.append("1200 2\n"); MFM = new MyFontMetrics(); Out = out; FigColorsArray = new String[543]; } public void close() { append("#End\n"); Out.print(FigFirstpart); Out.print(FigLastpart); } String ColorString(final Color c) { String str, stg, stb, coded = "#"; str = Integer.toHexString(c.getRed()); if (str.length() == 1) { str = "0" + str; } stg = Integer.toHexString(c.getGreen()); if (stg.length() == 1) { stg = "0" + stg; } stb = Integer.toHexString(c.getBlue()); if (stb.length() == 1) { stb = "0" + stb; } // coded.concat(str);//.concat(stg).concat(stb); coded += str; coded += stg; coded += stb; // append(coded); return coded; } @Override public void setColor(final Color c) { final String codedcolor = ColorString(c); boolean newcolor = true; for (int i = 32; i <= FigLastcolor; i++) { if (codedcolor.equals(FigColorsArray[i])) { FigColor = i; newcolor = false; break; } } if (newcolor) { FigLastcolor += 1; FigColor = FigLastcolor; FigColorsArray[FigLastcolor] = codedcolor; FigFirstpart.append("0 "); // Out.print("0 "); FigFirstpart.append(FigLastcolor); FigFirstpart.append(" "); // Out.print(FigLastcolor);Out.print(" "); FigFirstpart.append(codedcolor); FigFirstpart.append("\n"); // Out.println(codedcolor); } } public void setFillcolor(final Color c) { final String codedcolor = ColorString(c); boolean newcolor = true; for (int i = 32; i <= FigLastcolor; i++) { if (codedcolor.equals(FigColorsArray[i])) { FigFillcolor = i; newcolor = false; break; } } if (newcolor) { FigLastcolor += 1; FigFillcolor = FigLastcolor; FigColorsArray[FigLastcolor] = codedcolor; FigFirstpart.append("0 "); // Out.print("0 "); FigFirstpart.append(FigLastcolor); FigFirstpart.append(" "); // Out.print(FigLastcolor);Out.print(" "); FigFirstpart.append(codedcolor); FigFirstpart.append("\n"); // Out.println(codedcolor); } } @Override public void setColor(final ConstructionObject o) { if (o.isJobTarget()) { setColor(ZirkelFrame.TargetColor); } else if (o.selected()) { setColor(ZirkelFrame.SelectColor); } else { if (o.getColorType() == ConstructionObject.THIN) { final int i = o.getColorIndex(); if (o.isHidden()) { setColor(ZirkelFrame.BrighterLightColors[i]); } else { setColor(ZirkelFrame.LightColors[i]); } } else { final int i = o.getColorIndex(); if (o.isHidden()) { setColor(ZirkelFrame.BrighterColors[i]); } else { setColor(ZirkelFrame.Colors[i]); } } if (o.getColorType() == ConstructionObject.THIN) { Stroke = STROKE_THIN; FigLinestyle = STYLE_THIN; } else if (o.getColorType() == ConstructionObject.THICK) { Stroke = STROKE_THICK; FigLinestyle = STYLE_THICK; } else { Stroke = STROKE_NORMAL; FigLinestyle = STYLE_NORMAL; } } } @Override public void setFillColor(final ConstructionObject o) { if (o.isJobTarget()) { setFillcolor(ZirkelFrame.TargetColor); } else { if (o.getColorType() != ConstructionObject.THICK) { final int i = o.getColorIndex(); if (o.isHidden()) { setFillcolor(ZirkelFrame.BrighterLightColors[i]); } else { setFillcolor(ZirkelFrame.LightColors[i]); } } else { final int i = o.getColorIndex(); if (o.isHidden()) { setFillcolor(ZirkelFrame.BrighterColors[i]); } else { setFillcolor(ZirkelFrame.Colors[i]); } } } } @Override public void setLabelColor(final ConstructionObject o) { if (o.labelSelected()) { setColor(ZirkelFrame.SelectColor); } else if (o.isFilled()) { final int type = o.getColorType(); o.setColorType(ConstructionObject.NORMAL); setColor(o); o.setColorType(type); } else { setColor(o); } } @Override public void clearRect(final int x, final int y, final int w, final int h, final Color c) { } @Override public void drawRect(final double x, final double y, final double w, final double h) { append("# drawRect"); append("\n"); append("2 2 "); // append(FigLinestyle);append(" "); append(0); append(" "); append(Stroke); append(" "); append(FigColor); append(" "); append(FigFillcolor); append(" "); append(pushLayer()); append(" 0 -1 0.000 0 0 -1 0 0 5"); append("\n"); append(xfactor * x); append(" "); append(yfactor * y); append(" "); append(xfactor * (x + w) - 1); append(" "); append(yfactor * y); append(" "); append(xfactor * (x + w) - 1); append(" "); append((yfactor * (y + h) - 1)); append(" "); append(xfactor * x); append(" "); append((yfactor * (y + h) - 1)); append(" "); append(xfactor * x); append(" "); append(yfactor * y); append("\n"); } @Override public void drawLine(final double x, final double y, final double x1, final double y1) { append("# drawLine"); append("\n"); append("2 1 "); // append(FigLinestyle);append(" "); append(0); append(" "); append(Stroke); append(" "); append(FigColor); append(" "); append(FigFillcolor); append(" "); append(pushLayer()); append(" 0 -1 0.000 0 0 -1 0 0 2"); append("\n"); // append("2 2 0 1 0 1 50 0 20 0.000 0 0 -1 0 0 2"); append(xfactor * x); append(" "); append(yfactor * y); append(" "); append(xfactor * x1); append(" "); append(yfactor * y1); append("\n"); } @Override public void drawThickLine(final double x, final double y, final double x1, final double y1) { append("# drawThickLine"); append("\n"); append("2 1 "); // append(FigLinestyle);append(" "); append(0); append(" "); append(STROKE_THICK); append(" "); append(FigColor); append(" "); append(FigFillcolor); append(" "); append(pushLayer()); append(" 0 -1 0.000 0 0 -1 0 0 2"); append("\n"); // append("2 2 0 1 0 1 50 0 20 0.000 0 0 -1 0 0 2"); append(xfactor * x); append(" "); append(yfactor * y); append(" "); append(xfactor * x1); append(" "); append(yfactor * y1); append("\n"); } @Override public void drawLine(final double x, final double y, final double x1, final double y1, final ConstructionObject o) { append("# drawLine ConstructionObject"); append("\n"); append("2 1 "); append(FigLinestyle); append(" "); append(Stroke); append(" "); append(FigColor); append(" "); append(FigFillcolor); append(" "); append(pushLayer()); append(" 0 -1 0.000 0 0 -1 0 0 2"); append("\n"); // append("2 1 0 1 0 1 50 0 -1 0.000 0 0 -1 0 0 2"); append(xfactor * x); append(" "); append(yfactor * y); append(" "); append(xfactor * x1); append(" "); append(yfactor * y1); append("\n"); } @Override public void drawArc(final double x, final double y, final double w, final double h, final double a, final double b) { append("# drawArc"); append("\n"); int x1, x2, x3, y1, y2, y3; double cx, cy, rx, ry, arad, brad; rx = (double) (w) / 2; ry = (double) (h) / 2; cx = x + rx; cy = y + ry; arad = a * Math.PI / 180.0; brad = b * Math.PI / 180.0; x1 = (int) (cx + rx * Math.cos(arad)); y1 = (int) (cy + ry * Math.sin(arad)); x2 = (int) (cx + rx * Math.cos(arad + brad / 2)); y2 = (int) (cy + ry * Math.sin(arad + brad / 2)); x3 = (int) (cx + rx * Math.cos(arad + brad)); y3 = (int) (cy + ry * Math.sin(arad + brad)); append("5 1 "); append(FigLinestyle); append(" "); append(Stroke); append(" "); append(FigColor); append(" "); append(FigFillcolor); append(" "); append(pushLayer()); append(" 0 -1 0.000 0 1 0 0 "); append(xfactor * cx); append(" "); append(yfactor * cy); append(" "); append(xfactor * x1); append(" "); append(yfactor * y1); append(" "); append(xfactor * x2); append(" "); append(yfactor * y2); append(" "); append(xfactor * x3); append(" "); append(yfactor * y3); append("\n"); } @Override public void drawArc(final double x, final double y, final double w, final double h, final double a, final double b, final ConstructionObject o) { append("# drawArc ConstructionObject"); append("\n"); int x1, x2, x3, y1, y2, y3; double cx, cy, rx, ry, arad, brad; rx = (double) (w) / 2; ry = (double) (h) / 2; cx = x + rx; cy = y + ry; arad = a * Math.PI / 180.0; brad = b * Math.PI / 180.0; x1 = (int) (cx + rx * Math.cos(arad)); y1 = (int) (cy - ry * Math.sin(arad)); x2 = (int) (cx + rx * Math.cos(arad + brad / 2)); y2 = (int) (cy - ry * Math.sin(arad + brad / 2)); x3 = (int) (cx + rx * Math.cos(arad + brad)); y3 = (int) (cy - ry * Math.sin(arad + brad)); append("5 1 "); append(FigLinestyle); append(" "); append(Stroke); append(" "); append(FigColor); append(" "); append(FigColor); append(" "); append(pushLayer()); append(" 0 -1 0.000 0 1 0 0 "); // append("5 1 0 1 0 7 50 0 -1 0.000 0 1 0 0 "); append(xfactor * cx); append(" "); append(yfactor * cy); append(" "); append(xfactor * x1); append(" "); append(yfactor * y1); append(" "); append(xfactor * x2); append(" "); append(yfactor * y2); append(" "); append(xfactor * x3); append(" "); append(yfactor * y3); append("\n"); } @Override public FontMetrics getFontMetrics() { return MFM; } @Override public void drawString(final String s, final double x, final double y) { append("#drawString"); append("\n"); append("4 0 "); append(FigColor); append(" "); append(pushLayer()); append(" 0 4 12 0.000 2 0 0 "); append(xfactor * x); append(" "); append(yfactor * (y + 10)); append(" "); append(s); append("\\001"); append("\n"); } @Override public void drawOval(final double x, final double y, final double w, final double h) { double cx, cy, rx, ry; rx = (double) (w) / 2; ry = (double) (h) / 2; cx = x + rx; cy = y + ry; append("#drawOval"); append("\n"); append("1 1 "); append(0); append(" "); append(Stroke); append(" "); append(FigColor); append(" "); append(FigFillcolor); append(" "); append(pushLayer()); append(" 0 -1 0.000 1 0.000 "); append((int) (xfactor * cx)); append(" "); append((int) (yfactor * cy)); append(" "); append((int) (xfactor * rx)); append(" "); append((int) (yfactor * ry)); append(" "); append("0 0 0 0"); append("\n"); } @Override public void drawOval(final double x, final double y, final double w, final double h, final ConstructionObject o) { double cx, cy, rx, ry; rx = (double) (w) / 2; ry = (double) (h) / 2; cx = x + rx; cy = y + ry; append("#drawOval ConstructionObject"); append("\n"); append("1 1 "); append(FigLinestyle); append(" "); append(Stroke); append(" "); append(FigColor); append(" "); append(FigFillcolor); append(" "); append(pushLayer()); append(" 0 -1 0.000 1 0.000 "); append((int) (xfactor * cx)); append(" "); append((int) (yfactor * cy)); append(" "); append((int) (xfactor * rx)); append(" "); append((int) (yfactor * ry)); append(" "); append("0 0 0 0"); append("\n"); } @Override public void fillRect(final double x, final double y, final double w, final double h, final boolean outline, final boolean transparent, final ConstructionObject o) { setColor(o); setFillColor(o); append("# fillRect"); append("\n"); append("2 2 "); append(outline ? FigLinestyle : STYLE_NORMAL); append(" "); append(Stroke); append(" "); append(FigColor); append(" "); append(FigFillcolor); append(" "); append(pushLayer()); if (transparent) { append(" 0 20 0.000 0 0 -1 0 0 5"); } else { append(" 0 30 0.000 0 0 -1 0 0 5"); } append("\n"); append(xfactor * x); append(" "); append(yfactor * y); append(" "); append(xfactor * (x + w) - 1); append(" "); append(yfactor * y); append(" "); append(xfactor * (x + w) - 1); append(" "); append(yfactor * (y + h) - 1); append(" "); append(xfactor * x); append(" "); append(yfactor * (y + h) - 1); append(" "); append(xfactor * x); append(" "); append(yfactor * y); append("\n"); } @Override public void fillArc(final double x, final double y, final double w, final double h, final double a, final double b, final boolean outline, final boolean transparent, final boolean arc, final ConstructionObject o) { setColor(o); setFillColor(o); append("#fillArc2"); append("\n"); int x1, x2, x3, y1, y2, y3; double cx, cy, rx, ry, arad, brad; rx = (double) (w - 1) / 2; ry = (double) (h - 1) / 2; cx = x + rx; cy = y + ry; arad = a * Math.PI / 180.0; brad = b * Math.PI / 180.0; x1 = (int) (cx + rx * Math.cos(arad)); y1 = (int) (cy - ry * Math.sin(arad)); x2 = (int) (cx + rx * Math.cos(arad + brad / 2)); y2 = (int) (cy - ry * Math.sin(arad + brad / 2)); x3 = (int) (cx + rx * Math.cos(arad + brad)); y3 = (int) (cy - ry * Math.sin(arad + brad)); append("5 2 "); append(outline ? FigLinestyle : STYLE_NORMAL); append(" "); append(Stroke); append(" "); append(FigColor); append(" "); append(FigFillcolor); append(" "); append(pushLayer()); if (transparent) { append(" 0 20 0.000 0 1 0 0 "); } else { append(" 0 30 0.000 0 1 0 0 "); } append(xfactor * cx); append(" "); append(yfactor * cy); append(" "); append(xfactor * x1); append(" "); append(yfactor * y1); append(" "); append(xfactor * x2); append(" "); append(yfactor * y2); append(" "); append(xfactor * x3); append(" "); append(yfactor * y3); append("\n"); } @Override public void fillOval(final double x, final double y, final double w, final double h, final boolean outline, final boolean transparent, final ConstructionObject o) { setColor(o); setFillColor(o); append("#fillOval"); append("\n"); double cx, cy, rx, ry; rx = (double) (w - 1) / 2; ry = (double) (h - 1) / 2; cx = x + rx; cy = y + ry; append("1 1 "); append(outline ? FigLinestyle : STYLE_NORMAL); append(" "); append(Stroke); append(" "); append(FigColor); append(" "); append(FigFillcolor); append(" "); append(pushLayer()); if (transparent) { append(" 0 20 0.000 1 0.000 "); } else { append(" 0 30 0.000 1 0.000 "); } append((int) (xfactor * cx)); append(" "); append((int) (yfactor * cy)); append(" "); append((int) (xfactor * rx)); append(" "); append((int) (yfactor * ry)); append(" "); append("0 0 0 0"); append("\n"); } @Override public void fillPolygon(final double x[], final double y[], final int n, final boolean outline, final boolean transparent, final ConstructionObject o) { setColor(o); setFillColor(o); append("#fillPolygon"); append("\n"); append("2 1 "); append(outline ? FigLinestyle : STYLE_NORMAL); append(" "); append(Stroke); append(" "); append(FigColor); append(" "); append(FigFillcolor); append(" "); append(pushLayer()); if (transparent) { append(" 0 20 0.000 0 0 -1 0 0 "); } else { append(" 0 30 0.000 0 0 -1 0 0 "); } append(n + 1); append("\n"); for (int i = 0; i < n; i++) { append(xfactor * x[i]); append(" "); append(yfactor * y[i]); append(" "); } append(xfactor * x[0]); append(" "); append(yfactor * y[0]); append(" "); append("\n"); } public void setLayer(final int n) { FigLayer = n; } void append(final String s) { FigLastpart.append(s); } void append(final int n) { FigLastpart.append("" + n); } void append(final double x) { FigLastpart.append("" + ((int) x)); } public int pushLayer() { if (PushLayer) { FigLayer--; } return FigLayer; } public void pushLayer(final boolean flag) { PushLayer = flag; } @Override public void drawImage(final Image i, final int x, final int y, final ImageObserver o) { } @Override public void drawImage(final Image i, final int x, final int y, final int w, final int h, final ImageObserver o) { } @Override public void setFont(final int h, final boolean bold) { } int fsize; boolean flarge, fbold; int ffactor = Global.getParameter("ffactor", 130); @Override public void setDefaultFont(final int h, final boolean large, final boolean bold) { fsize = h; flarge = large; fbold = bold; setFont(large, bold); } @Override public void setFont(final boolean large, final boolean bold) { int size = fsize; if (large) { size = size * ffactor / 100; } if (flarge) { size = size * ffactor / 100; } setFont(size, bold || fbold); } @Override public void drawImage(final Image i, final double x, final double y, final double x1, final double y1, final double x2, final double y2, final ImageObserver o) { } @Override public Graphics getGraphics() { return null; } @Override public int stringWidth(final String s) { return getFontMetrics().stringWidth(s); } @Override public int stringHeight(final String s) { return getFontMetrics().getHeight(); } @Override public int drawStringExtended(final String s, final double x, final double y) { drawString(s, x, y + getFontMetrics().getAscent()); return getFontMetrics().getHeight(); } @Override public int stringAscent(final String s) { return getFontMetrics().getAscent(); } @Override public void fillOval(final double x, final double y, final double w, final double h, final Color WithColor) { } @Override public void fillRect(final double x, final double y, final double w, final double h, final Color WithColor) { } @Override public void drawDiamond(final double x, final double y, final double w, final boolean isThick, final ConstructionObject o) { } @Override public void drawDcross(final double x, final double y, final double w, final boolean isThick, final ConstructionObject o) { } @Override public void setAntialiasing(final boolean bool) { } @Override public void drawAxisLine(final double x, final double y, final double x1, final double y1) { } @Override public void fillPolygon(final double[] x, final double[] y, final int n, final ConstructionObject o) { } } ./src/rene/zirkel/graphics/MyGraphicsSvg.java0000640000175000017500000004111711303264337020164 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.graphics; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Image; import java.awt.image.ImageObserver; import java.io.PrintWriter; import rene.gui.Global; import rene.util.xml.SVGWriter; import rene.zirkel.ZirkelFrame; import rene.zirkel.objects.ConstructionObject; class SvgFontMetrics extends FontMetrics { /** * */ private static final long serialVersionUID = 1L; public SvgFontMetrics() { super(new Font("Courier", 10, Font.PLAIN)); // a dummy font. } @Override public int stringWidth(final String s) { return s.length() * 10; } @Override public int getHeight() { return 12; } @Override public int getAscent() { return 2; } } /** * This is the Graphics class, you need to implement. */ public class MyGraphicsSvg extends MyGraphics { int W, H; PrintWriter Out; final static int STROKE_NORMAL = 0, STROKE_THIN = 1, STROKE_THICK = 2; final static int STYLE_NORMAL = 0, STYLE_THIN = 1, STYLE_THICK = 0; int Stroke = STROKE_NORMAL; Color col, fillcol; SvgFontMetrics MFM = new SvgFontMetrics(); int yoffset = 6000; int FontH = 12; SVGWriter svg; public MyGraphicsSvg(final PrintWriter out, final int w, final int h) { svg = new SVGWriter(out); svg.startSVG(w, h); W = w; H = h; } public void close() { svg.endTagNewLine("svg"); } @Override public void setColor(final Color c) { col = c; } public void setFillcolor(final Color c) { fillcol = c; } @Override public void setColor(final ConstructionObject o) { if (o.isJobTarget()) { setColor(ZirkelFrame.TargetColor); } else if (o.selected()) { setColor(ZirkelFrame.SelectColor); } else { if (o.getColorType() == ConstructionObject.THIN) { final int i = o.getColorIndex(); if (o.isHidden()) { setColor(ZirkelFrame.BrighterLightColors[i]); } else { setColor(ZirkelFrame.LightColors[i]); } } else { final int i = o.getColorIndex(); if (o.isHidden()) { setColor(ZirkelFrame.BrighterColors[i]); } else { setColor(ZirkelFrame.Colors[i]); } } if (o.getColorType() == ConstructionObject.THIN) { Stroke = STROKE_THIN; } else if (o.getColorType() == ConstructionObject.THICK) { Stroke = STROKE_THICK; } else { Stroke = STROKE_NORMAL; } } } @Override public void setFillColor(final ConstructionObject o) { if (o.isJobTarget()) { setFillcolor(ZirkelFrame.TargetColor); } else { if (o.getColorType() != ConstructionObject.THICK) { final int i = o.getColorIndex(); if (o.isHidden()) { setFillcolor(ZirkelFrame.BrighterLightColors[i]); } else { setFillcolor(ZirkelFrame.LightColors[i]); } } else { final int i = o.getColorIndex(); if (o.isHidden()) { setFillcolor(ZirkelFrame.BrighterColors[i]); } else { setFillcolor(ZirkelFrame.Colors[i]); } } } } @Override public void setLabelColor(final ConstructionObject o) { if (o.labelSelected()) { setColor(ZirkelFrame.SelectColor); } else if (o.isFilled()) { final int type = o.getColorType(); o.setColorType(ConstructionObject.NORMAL); setColor(o); o.setColorType(type); } else { setColor(o); } } @Override public void clearRect(final int x, final int y, final int w, final int h, final Color c) { } @Override public void drawRect(final double x, final double y, double w, double h) { svg.startTagStart("path"); w--; h--; svg.printArg("d", "M " + x + " " + y + " H " + (x + w) + " V " + (y + h) + " H " + x + " Z"); svg.printArg("style", "fill:none;stroke:" + rgb() + ";stroke-width:1"); svg.finishTagNewLine(); } public String rgb() { return "rgb(" + col.getRed() + "," + col.getGreen() + "," + col.getBlue() + ")"; } public String frgb() { return "rgb(" + fillcol.getRed() + "," + fillcol.getGreen() + "," + fillcol.getBlue() + ")"; } @Override public void drawLine(final double x, final double y, final double x1, final double y1) { svg.startTagStart("line"); svg.printArg("x1", "" + x); svg.printArg("y1", "" + y); svg.printArg("x2", "" + x1); svg.printArg("y2", "" + y1); switch (Stroke) { case STROKE_NORMAL: svg.printArg("style", "stroke:" + rgb() + ";stroke-width:1"); break; case STROKE_THICK: svg.printArg("style", "stroke:" + rgb() + ";stroke-width:3"); break; case STROKE_THIN: svg.printArg("style", "stroke:" + rgb() + ";stroke-width:1;fill:none;stroke-dasharray:5,5"); break; } svg.finishTagNewLine(); } @Override public void drawThickLine(final double x, final double y, final double x1, final double y1) { svg.startTagStart("line"); svg.printArg("x1", "" + x); svg.printArg("y1", "" + y); svg.printArg("x2", "" + x1); svg.printArg("y2", "" + y1); svg.printArg("style", "stroke:" + rgb() + ";stroke-width:3"); svg.finishTagNewLine(); } @Override public void drawLine(final double x, final double y, final double x1, final double y1, final ConstructionObject o) { svg.startTagStart("line"); svg.printArg("x1", "" + x); svg.printArg("y1", "" + y); svg.printArg("x2", "" + x1); svg.printArg("y2", "" + y1); svg.printArg("style", "stroke:" + rgb() + ";stroke-width:1"); svg.finishTagNewLine(); } @Override public void drawArc(final double x, final double y, final double w, final double h, final double a, final double b) { final double x0 = Math.round(x + w / 2.0 + w * Math.cos(a / 180 * Math.PI) / 2); final double y0 = Math.round(y + h / 2.0 - h * Math.sin(a / 180 * Math.PI) / 2); final double x1 = Math.round(x + w / 2.0 + w * Math.cos((a + b) / 180 * Math.PI) / 2); final double y1 = Math.round(y + h / 2.0 - h * Math.sin((a + b) / 180 * Math.PI) / 2); int f = 0; if (b > 180) { f = 1; } svg.startTagStart("path"); svg.printArg("d", "M " + x0 + " " + y0 + " A " + (w / 2) + " " + (h / 2) + " 0 " + f + " 0 " + x1 + " " + y1); svg.printArg("style", "stroke:" + rgb() + ";stroke-width:1;fill:none"); svg.finishTagNewLine(); } @Override public void drawArc(double x, double y, double w, double h, final double a, final double b, final ConstructionObject o) { w = w / 2; h = h / 2; x += w; y += h; final double x0 = Math.round(x + w * Math.cos(a / 180 * Math.PI)); final double y0 = Math.round(y - h * Math.sin(a / 180 * Math.PI)); final double x1 = Math.round(x + w * Math.cos((a + b) / 180 * Math.PI)); final double y1 = Math.round(y - h * Math.sin((a + b) / 180 * Math.PI)); int f = 0; if (b > 180) { f = 1; } svg.startTagStart("path"); svg.printArg("d", "M " + x0 + " " + y0 + " A " + w + " " + h + " 0 " + f + " 0 " + x1 + " " + y1); switch (Stroke) { case STROKE_NORMAL: svg.printArg("style", "stroke:" + rgb() + ";stroke-width:1;fill:none"); break; case STROKE_THICK: svg.printArg("style", "stroke:" + rgb() + ";stroke-width:3;fill:none"); break; case STROKE_THIN: svg.printArg("style", "stroke:" + rgb() + ";stroke-width:1;fill:none;stroke-dasharray:5,5"); break; } svg.finishTagNewLine(); } @Override public FontMetrics getFontMetrics() { return MFM; } @Override public void drawString(final String s, final double x, final double y) { svg.startTagStart("text"); svg.printArg("x", "" + x); svg.printArg("y", "" + (y + 10)); svg .printArg("style", "font-size:" + FontH + ";fill:" + rgb() + ";font-weight:" + (Global.getParameter("font.bold", false) ? "gold" : "normal")); svg.startTagEnd(); svg.print(s); svg.endTag("text"); } @Override public void drawOval(double x, double y, double w, double h) { svg.startTagStart("ellipse"); w = w / 2; h = h / 2; x += w; y += h; svg.printArg("cx", "" + x); svg.printArg("cy", "" + y); svg.printArg("rx", "" + w); svg.printArg("ry", "" + h); svg.printArg("style", "stroke:" + rgb() + ";stroke-width:1;fill:none"); svg.finishTagNewLine(); } @Override public void drawOval(double x, double y, double w, double h, final ConstructionObject o) { svg.startTagStart("ellipse"); w = w / 2; h = h / 2; x += w; y += h; svg.printArg("cx", "" + x); svg.printArg("cy", "" + y); svg.printArg("rx", "" + w); svg.printArg("ry", "" + h); switch (Stroke) { case STROKE_NORMAL: svg.printArg("style", "stroke:" + rgb() + ";fill:none;stroke-width:1"); break; case STROKE_THICK: svg.printArg("style", "stroke:" + rgb() + ";fill:none;stroke-width:3"); break; case STROKE_THIN: svg.printArg("style", "stroke:" + rgb() + ";stroke-width:1;fill:none;stroke-dasharray:5,5"); break; } svg.finishTagNewLine(); } @Override public void fillRect(final double x, final double y, double w, double h, final boolean outline, final boolean transparent, final ConstructionObject o) { svg.startTagStart("path"); w--; h--; svg.printArg("d", "M " + x + " " + y + " H " + (x + w) + " V " + (y + h) + " H " + x + " Z"); svg.printArg("style", "fill:" + rgb() + ";stroke:" + rgb() + ";stroke-width:1"); svg.finishTagNewLine(); } @Override public void fillArc(final double x, final double y, final double w, final double h, final double a, final double b, final boolean outline, final boolean transparent, final boolean arc, final ConstructionObject o) { setFillColor(o); final int x0 = (int) (Math.round(x + w / 2.0 + w * Math.cos(a / 180 * Math.PI) / 2)); final int y0 = (int) (Math.round(y + h / 2.0 - h * Math.sin(a / 180 * Math.PI) / 2)); final int x1 = (int) (Math.round(x + w / 2.0 + w * Math.cos((a + b) / 180 * Math.PI) / 2)); final int y1 = (int) (Math.round(y + h / 2.0 - h * Math.sin((a + b) / 180 * Math.PI) / 2)); int f = 0; if (b > 180) { f = 1; } svg.startTagStart("path"); if (arc) { svg.printArg("d", "M " + (x + w / 2) + " " + (y + h / 2) + " L " + x0 + " " + y0 + " A " + (w / 2) + " " + (h / 2) + " 0 " + f + " 0 " + x1 + " " + y1 + " L " + (x + w / 2) + " " + (y + h / 2)); } else { svg.printArg("d", "M " + x0 + " " + y0 + " A " + (w / 2) + " " + (h / 2) + " 0 " + f + " 0 " + x1 + " " + y1 + " L " + x0 + " " + y0); } switch (Stroke) { case STROKE_NORMAL: svg.printArg("style", "fill:" + frgb() + (transparent && !o.isSolid() ? ";fill-opacity:0.5" : "")); break; case STROKE_THICK: svg.printArg("style", "fill:" + frgb()); break; case STROKE_THIN: svg.printArg("style", "fill:" + frgb() + (transparent && !o.isSolid() ? ";fill-opacity:0.5" : "")); break; } svg.finishTagNewLine(); if (outline) { setColor(o); drawArc(x, y, w, h, a, b); } } @Override public void fillOval(final double x, final double y, final double w, final double h, final boolean outline, final boolean transparent, final ConstructionObject o) { setFillColor(o); svg.startTagStart("ellipse"); svg.printArg("cx", "" + (x + w / 2)); svg.printArg("cy", "" + (y + h / 2)); svg.printArg("rx", "" + (w / 2)); svg.printArg("ry", "" + (h / 2)); switch (Stroke) { case STROKE_NORMAL: svg.printArg("style", "fill:" + frgb() + (transparent && !o.isSolid() ? ";fill-opacity:0.5" : "")); break; case STROKE_THICK: svg.printArg("style", "fill:" + frgb()); break; case STROKE_THIN: svg.printArg("style", "fill:" + frgb() + (transparent && !o.isSolid() ? ";fill-opacity:0.5" : "")); break; } svg.finishTagNewLine(); if (outline) { setColor(o); drawOval(x, y, w, h); } } @Override public void fillPolygon(final double x[], final double y[], final int n, final boolean outline, final boolean transparent, final ConstructionObject o) { setFillColor(o); svg.startTagStart("path"); String s = "M " + x[0] + " " + y[0]; for (int i = 1; i < n; i++) { s = s + " L " + x[i] + " " + y[i]; } s = s + " L " + x[0] + " " + y[0]; svg.printArg("d", s); switch (Stroke) { case STROKE_NORMAL: svg.printArg("style", "fill:" + frgb() + (transparent && !o.isSolid() ? ";fill-opacity:0.5" : "")); break; case STROKE_THICK: svg.printArg("style", "fill:" + frgb()); break; case STROKE_THIN: svg.printArg("style", "fill:" + frgb() + (transparent && !o.isSolid() ? ";fill-opacity:0.5" : "")); break; } svg.finishTagNewLine(); if (outline) { svg.startTagStart("path"); svg.printArg("d", s); setColor(o); svg.printArg("style", "fill:none;stroke:" + rgb() + ";stroke-width:1"); svg.finishTagNewLine(); } } @Override public void drawImage(final Image i, final int x, final int y, final ImageObserver o) { } @Override public void drawImage(final Image i, final int x, final int y, final int w, final int h, final ImageObserver o) { } @Override public void setFont(final int h, final boolean bold) { FontH = h; } int fsize; boolean flarge, fbold; int ffactor = Global.getParameter("ffactor", 130); @Override public void setDefaultFont(final int h, final boolean large, final boolean bold) { fsize = h; flarge = large; fbold = bold; ffactor = Global.getParameter("ffactor", 130); setFont(large, bold); } @Override public void setFont(final boolean large, final boolean bold) { int size = fsize; if (large) { size = size * ffactor / 100; } if (flarge) { size = size * ffactor / 100; } setFont(size, bold || fbold); } @Override public void drawImage(final Image i, final double x, final double y, final double x1, final double y1, final double x2, final double y2, final ImageObserver o) { } @Override public Graphics getGraphics() { return null; } @Override public int stringWidth(final String s) { return getFontMetrics().stringWidth(s); } @Override public int stringHeight(final String s) { return getFontMetrics().getHeight(); } @Override public int drawStringExtended(final String s, final double x, final double y) { drawString(s, x, y + getFontMetrics().getAscent()); return getFontMetrics().getHeight(); } @Override public int stringAscent(final String s) { return getFontMetrics().getAscent(); } @Override public void fillOval(final double x, final double y, final double w, final double h, final Color WithColor) { } @Override public void fillRect(final double x, final double y, final double w, final double h, final Color WithColor) { } @Override public void drawDiamond(final double x, final double y, final double w, final boolean isThick, final ConstructionObject o) { } @Override public void drawDcross(final double x, final double y, final double w, final boolean isThick, final ConstructionObject o) { } @Override public void setAntialiasing(final boolean bool) { } @Override public void drawAxisLine(final double x, final double y, final double x1, final double y1) { } @Override public void fillPolygon(final double[] x, final double[] y, final int n, final ConstructionObject o) { setFillColor(o); String s = "M " + x[0] + " " + y[0]; for (int i = 1; i < n; i++) { s = s + " L " + x[i] + " " + y[i]; } s = s + " L " + x[0] + " " + y[0]; if (o.isFilled()) { svg.startTagStart("path"); svg.printArg("d", s); switch (Stroke) { case STROKE_NORMAL: svg.printArg("style", "fill:" + frgb() + (o.getColorType() != ConstructionObject.THICK && !o.isSolid() ? ";fill-opacity:0.5" : "")); break; case STROKE_THICK: svg.printArg("style", "fill:" + frgb()); break; case STROKE_THIN: svg.printArg("style", "fill:" + frgb() + (o.getColorType() != ConstructionObject.THICK && !o.isSolid() ? ";fill-opacity:0.5" : "")); break; } svg.finishTagNewLine(); } if (!o.isFilled() || o.indicated() || o.selected() || o.getColorType() == ConstructionObject.NORMAL) { svg.startTagStart("path"); svg.printArg("d", s); setColor(o); String strk = ""; switch (Stroke) { case STROKE_NORMAL: strk = "1"; break; case STROKE_THICK: strk = "2"; break; case STROKE_THIN: strk = "0.5"; break; } svg.printArg("style", "fill:none;stroke:" + frgb() + ";stroke-width:" + strk); svg.finishTagNewLine(); } } } ./src/rene/zirkel/graphics/FontStruct.java0000640000175000017500000000266111133127257017552 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.graphics; import java.awt.Font; /** * @author Rene An internal class to hold a font sructure (size, face and font * object) */ public class FontStruct { final int max = 4; int Size[] = new int[max]; boolean Bold[] = new boolean[max]; Font F[] = new Font[4]; int Next = 0; public void storeFont(final int size, final boolean bold, final Font f) { if (Next >= max) Next = 0; Size[Next] = size; Bold[Next] = bold; F[Next] = f; Next++; } public Font getFont(final int size, final boolean bold) { for (int i = 0; i < max; i++) { if (F[i] == null) break; if (Size[i] == size && Bold[i] == bold) return F[i]; } return null; } public static void main(final String[] args) { } } ./src/rene/zirkel/graphics/PolygonDrawer.java0000640000175000017500000000417311133127261020226 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.graphics; import rene.zirkel.objects.ConstructionObject; /** * @author Rene * */ public class PolygonDrawer { MyGraphics G; ConstructionObject O; double C, R; double C1, R1; boolean HaveToFinish; public static int step = 9; public boolean Marker = false; public boolean Started; boolean Solid; public PolygonDrawer(final MyGraphics g, final ConstructionObject o) { G = g; O = o; Started = false; } public void startPolygon(final double c, final double r) { C = c; R = r; HaveToFinish = false; Started = true; } public void drawTo(final double c, final double r, final boolean dodraw) { if (!Started) { startPolygon(c, r); return; } if (dodraw || (c - C) * (c - C) + (r - R) * (r - R) > step) { if (Marker) ((MyGraphics13) G).drawMarkerLine(C, R, c, r); else G.drawLine(C, R, c, r, O); C = c; R = r; HaveToFinish = false; } else { C1 = c; R1 = r; HaveToFinish = true; } } public void drawTo(final double c, final double r) { drawTo(c, r, false); } public void finishPolygon() { if (HaveToFinish) { if (Marker) ((MyGraphics13) G).drawMarkerLine(C, R, C1, R1); else G.drawLine(C, R, C1, R1, O); HaveToFinish = false; } Started = false; } public boolean hasStarted() { return Started; } public double c() { return C; } public double r() { return R; } public void useAsMarker() { Marker = true; step = 18; } } ./src/rene/zirkel/graphics/MyGraphics13.java0000640000175000017500000005766111356446201017663 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.graphics; import java.awt.AlphaComposite; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.geom.AffineTransform; import java.awt.geom.Arc2D; import java.awt.geom.Ellipse2D; import java.awt.geom.Line2D; import java.awt.geom.Rectangle2D; import java.awt.image.ImageObserver; import javax.swing.JComponent; import rene.gui.Global; import rene.zirkel.ZirkelFrame; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import atp.sHotEqn; public class MyGraphics13 extends MyGraphics { Graphics2D G; BasicStroke Thin, Normal, Thick, SuperThick, DCross, DCrossNormal; AlphaComposite C, CO; JComponent ZC = null; LatexOutput LOut; public MyGraphics13(final Graphics g, double factor, final JComponent zc, final LatexOutput lout) { LOut = lout; G = (Graphics2D) g; if (Global.getParameter("quality", true)) { G.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); G.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); G.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); G.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); G.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); } final float dash[] = { (float) (factor * 5.0), (float) (factor * 5.0) }; if (factor < Global.getParameter("minlinesize", 1.0)) { factor = Global.getParameter("minlinesize", 1.0); } Thin = new BasicStroke((float) (factor), BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dash, 0.0f); Normal = new BasicStroke((float) (factor), BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER); Thick = new BasicStroke((float) (factor * 2.0), BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER); DCross = new BasicStroke((float) (factor * 3.0), BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER); DCrossNormal = new BasicStroke((float) (factor * 1.5), BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER); SuperThick = new BasicStroke((float) (20), BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); C = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float) 0.5); CO = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float) 1.0); G.setComposite(CO); ZC = zc; } public MyGraphics13(final Graphics g) { this(g, 0.5, null, null); } public MyGraphics13(final Graphics g, final JComponent zc) { this(g, 0.5, zc, null); } public MyGraphics13(final Graphics g, final double factor) { this(g, factor, null, null); } @Override public void setColor(final Color c) { G.setColor(c); } @Override public void setColor(final ConstructionObject o) { G.setStroke(Normal); Color Col, LightCol, BrighterCol, BrighterLightCol; // it's a personnal color : if (o.getSpecialColor() != null) { final int i = o.getConditionalColor(); if (i != -1) { Col = ZirkelFrame.Colors[i]; LightCol = ZirkelFrame.LightColors[i]; BrighterCol = ZirkelFrame.BrighterColors[i]; BrighterLightCol = ZirkelFrame.BrighterLightColors[i]; } else { final double lambda = 0.4; Col = o.getSpecialColor(); final int r = (int) (255 * (1 - lambda) + Col.getRed() * lambda); final int g = (int) (255 * (1 - lambda) + Col.getGreen() * lambda); final int b = (int) (255 * (1 - lambda) + Col.getBlue() * lambda); LightCol = new Color(r, g, b); BrighterCol = Col.brighter(); BrighterLightCol = LightCol.brighter(); } } else { final int i = o.getColorIndex(); Col = ZirkelFrame.Colors[i]; LightCol = ZirkelFrame.LightColors[i]; BrighterCol = ZirkelFrame.BrighterColors[i]; BrighterLightCol = ZirkelFrame.BrighterLightColors[i]; } if (o.isJobTarget()) { setColor(ZirkelFrame.TargetColor); } else if (o.indicated()) { setColor(ZirkelFrame.IndicateColor); } else if (o.selected()) { setColor(ZirkelFrame.SelectColor); } else { if (o.getColorType() == ConstructionObject.THIN) { if (o.isHidden()) { setColor(BrighterLightCol); } else { setColor(LightCol); } } else { if (o.isHidden()) { setColor(BrighterCol); } else { setColor(Col); } } } if (o.getColorType() == ConstructionObject.THIN) { G.setStroke(Thin); } else if (o.getColorType() == ConstructionObject.THICK) { G.setStroke(Thick); } else { G.setStroke(Normal); } } @Override public void clearRect(final int x, final int y, final int w, final int h, final Color c) { G.setColor(c); G.fillRect(x, y, w, h); } @Override public void setFillColor(final ConstructionObject o) { G.setStroke(Normal); if (o.isJobTarget()) { setColor(ZirkelFrame.TargetColor); } else if ((o instanceof PointObject) && o.indicated()) { setColor(ZirkelFrame.IndicateColor); } else { Color Col, LightCol, BrighterCol, BrighterLightCol; // it's a personnal color : if (o.getSpecialColor() != null) { final int i = o.getConditionalColor(); if (i != -1) { Col = ZirkelFrame.Colors[i]; LightCol = ZirkelFrame.LightColors[i]; BrighterCol = ZirkelFrame.BrighterColors[i]; BrighterLightCol = ZirkelFrame.BrighterLightColors[i]; } else { final double lambda = 0.4; Col = o.getSpecialColor(); final int r = (int) (255 * (1 - lambda) + Col.getRed() * lambda); final int g = (int) (255 * (1 - lambda) + Col.getGreen() * lambda); final int b = (int) (255 * (1 - lambda) + Col.getBlue() * lambda); LightCol = new Color(r, g, b); BrighterCol = Col.brighter(); BrighterLightCol = LightCol.brighter(); } } else { final int i = o.getColorIndex(); Col = ZirkelFrame.Colors[i]; LightCol = ZirkelFrame.LightColors[i]; BrighterCol = ZirkelFrame.BrighterColors[i]; BrighterLightCol = ZirkelFrame.BrighterLightColors[i]; } if (o.getColorType() != ConstructionObject.THICK) { if (o.isHidden()) { setColor(BrighterLightCol); } else { setColor(LightCol); } } else { if (o.isHidden()) { setColor(BrighterCol); } else { setColor(Col); } } if (o.getColorType() == ConstructionObject.THIN) { G.setStroke(Thin); } else if (o.getColorType() == ConstructionObject.THICK) { G.setStroke(Thick); } else { G.setStroke(Normal); } } } @Override public void setLabelColor(final ConstructionObject o) { if (o.labelSelected()) { setColor(ZirkelFrame.SelectColor); } else if (o.isFilled()) { final int type = o.getColorType(); o.setColorType(ConstructionObject.NORMAL); setColor(o); o.setColorType(type); } else { setColor(o); } } @Override public void drawRect(final double x, final double y, final double w, final double h) { if (test(x) || test(y) || test(x + w) || test(y + h)) { return; } G.setStroke(Normal); G.draw(new Rectangle2D.Double(x, y, w, h)); } public void drawMarkerRect(final double x, final double y, final double w, final double h) { if (test(x) || test(y) || test(x + w) || test(y + h)) { return; } G.setColor(ZirkelFrame.IndicateColor); G.setStroke(SuperThick); G.draw(new Rectangle2D.Double(x, y, w, h)); G.setStroke(Normal); } @Override public void drawLine(final double x, final double y, final double x1, final double y1) { if (test(x) || test(y) || test(x1) || test(y1)) { return; } G.setStroke(Normal); G.draw(new Line2D.Double(x, y, x1, y1)); } @Override public void drawThickLine(final double x, final double y, final double x1, final double y1) { if (test(x) || test(y) || test(x1) || test(y1)) { return; } G.setStroke(Thick); G.draw(new Line2D.Double(x, y, x1, y1)); G.setStroke(Normal); } public void drawMarkerLine(final double x, final double y, final double x1, final double y1) { if (test(x) || test(y) || test(x1) || test(y1)) { return; } G.setColor(ZirkelFrame.IndicateColor); G.setStroke(SuperThick); G.draw(new Line2D.Double(x, y, x1, y1)); G.setStroke(Normal); } @Override public void drawLine(final double x, final double y, final double x1, final double y1, final ConstructionObject o) { if (test(x) || test(y) || test(x1) || test(y1)) { return; } G.draw(new Line2D.Double(x, y, x1, y1)); } public boolean test(final double x) { return Math.abs(x) > 1e5; } @Override public void drawArc(final double x, final double y, final double w, final double h, final double a, final double b) { if (test(x) || test(y) || test(w) || test(h)) { return; } G.setStroke(Normal); G.draw(new Arc2D.Double(x, y, w, h, a, b, Arc2D.OPEN)); } @Override public void drawArc(final double x, final double y, final double w, final double h, final double a, final double b, final ConstructionObject o) { if (test(x) || test(y) || test(w) || test(h)) { return; } else { G.draw(new Arc2D.Double(x, y, w, h, a, b, Arc2D.OPEN)); } } @Override public FontMetrics getFontMetrics() { return G.getFontMetrics(); } @Override public void drawString(final String s, final double x, final double y) { if (test(x) || test(y)) { return; } G.drawString(s, (float) x, (float) y); } @Override public void drawOval(final double x, final double y, final double w, final double h) { if (test(x) || test(y) || test(w) || test(h)) { return; } G.setStroke(Normal); G.draw(new Ellipse2D.Double(x, y, w, h)); } @Override public void drawOval(final double x, final double y, final double w, final double h, final ConstructionObject o) { if (test(x) || test(y) || test(w) || test(h)) { return; } else { G.draw(new Ellipse2D.Double(x, y, w, h)); } } @Override public void drawCircle(final double x, final double y, final double r, final ConstructionObject o) { if (r > 10 * (W + H)) { drawLargeCircleArc(x, y, r, 0, 360); } else { G.draw(new Ellipse2D.Double(x - r, y - r, 2 * r, 2 * r)); } } public void drawMarkerArc(final double x, final double y, final double r, final double a, final double b) { if (test(x) || test(y) || test(r)) { return; } G.setColor(ZirkelFrame.IndicateColor); G.setStroke(SuperThick); G.draw(new Arc2D.Double(x - r, y - r, 2 * r, 2 * r, a, b, Arc2D.OPEN)); } @Override public void drawCircleArc(final double x, final double y, final double r, final double a, final double b, final ConstructionObject o) { if (r > 10 * (W + H)) { drawLargeCircleArc(x, y, r, a, b); } else { G.draw(new Arc2D.Double(x - r, y - r, 2 * r, 2 * r, a, b, Arc2D.OPEN)); } } void drawLargeCircleArc(final double x, final double y, final double r, final double a, final double b) { final double dw = Math.sqrt((W + H) / r / 10); double w = a; double x0 = x + r * Math.cos(w / 180 * Math.PI); double y0 = y - r * Math.sin(w / 180 * Math.PI); w = w + dw; while (w < a + b + dw) { if (w > a + b) { w = a + b; } final double x1 = x + r * Math.cos(w / 180 * Math.PI); final double y1 = y - r * Math.sin(w / 180 * Math.PI); final double dx = (x0 + x1) / 2, dy = (y0 + y1) / 2; if (Math.sqrt(dx * dx + dy * dy) <= 10 * (W + H)) { G.draw(new Line2D.Double(x0, y0, x1, y1)); } x0 = x1; y0 = y1; w += dw; } } @Override public void fillRect(final double x, final double y, final double w, final double h, final boolean outline, final boolean transparent, final ConstructionObject o) { if (test(x) || test(y) || test(w) || test(h)) { return; } setFillColor(o); if (transparent && !o.isSolid()) { G.setComposite(C); } G.fill(new Rectangle2D.Double(x, y, w, h)); if (transparent && !o.isSolid()) { G.setComposite(CO); } if (outline) { setColor(o); G.draw(new Rectangle2D.Double(x, y, w, h)); } } @Override public void fillOval(final double x, final double y, final double w, final double h, final boolean outline, final boolean transparent, final ConstructionObject o) { if (test(x) || test(y) || test(w) || test(h)) { return; } if (o.getColorType() != ConstructionObject.INVISIBLE) { setFillColor(o); if (transparent && !o.isSolid()) { G.setComposite(C); } try { G.fill(new Ellipse2D.Double(x, y, w, h)); } catch (final Exception e) { } if (transparent && !o.isSolid()) { G.setComposite(CO); } } if (outline) { setColor(o); drawOval(x, y, w, h); } } @Override public void fillArc(final double x, final double y, final double w, final double h, final double a, final double b, final boolean outline, final boolean transparent, final boolean arcb, final ConstructionObject o) { if (test(x) || test(y) || test(w) || test(h)) { return; } setFillColor(o); if (transparent && !o.isSolid()) { G.setComposite(C); } final Arc2D arc = new Arc2D.Double(x, y, w, h, a, b, arcb ? Arc2D.PIE : Arc2D.CHORD); G.fill(arc); if (transparent && !o.isSolid()) { G.setComposite(CO); } if (outline) { setColor(o); arc.setArcType(Arc2D.OPEN); G.setStroke(Normal); G.draw(arc); } } int xx[] = new int[64], yy[] = new int[64]; @Override public void fillPolygon(final double x[], final double y[], final int n, final boolean outline, final boolean transparent, final ConstructionObject o) { if (o.getColorType() != ConstructionObject.INVISIBLE) { setFillColor(o); if (transparent && !o.isSolid()) { G.setComposite(C); } } if (n > xx.length) { xx = new int[n]; yy = new int[n]; } for (int i = 0; i < n; i++) { xx[i] = (int) (x[i]); if (test(x[i])) { return; } yy[i] = (int) (y[i]); if (test(y[i])) { return; } } if (o.getColorType() != ConstructionObject.INVISIBLE) { G.fillPolygon(xx, yy, n); if (transparent && !o.isSolid()) { G.setComposite(CO); } } if (outline) { setColor(o); G.setStroke(Normal); for (int i = 0; i < n - 1; i++) { drawLine(xx[i], yy[i], xx[i + 1], yy[i + 1]); } drawLine(xx[n - 1], yy[n - 1], xx[0], yy[0]); } } @Override public void fillPolygon(final double x[], final double y[], final int n, final ConstructionObject o) { if (n > xx.length) { xx = new int[n]; yy = new int[n]; } for (int i = 0; i < n; i++) { xx[i] = (int) (x[i]); if (test(x[i])) { return; } yy[i] = (int) (y[i]); if (test(y[i])) { return; } } if (o.isFilled()) { setFillColor(o); if ((o.getColorType() != ConstructionObject.THICK) && (!o.isSolid())) { G.setComposite(C); } G.fillPolygon(xx, yy, n); if ((o.getColorType() != ConstructionObject.THICK) && (!o.isSolid())) { G.setComposite(CO); } } if (!o.isFilled() || o.indicated() || o.selected() || o.getColorType() == ConstructionObject.NORMAL) { setColor(o); if (o.indicated() || o.selected()) { G.setStroke(Normal); } else { if (o.getColorType() == ConstructionObject.THIN) { G.setStroke(Thin); } else if (o.getColorType() == ConstructionObject.THICK) { G.setStroke(Thick); } else { G.setStroke(Normal); } } for (int i = 0; i < n - 1; i++) { drawLine(xx[i], yy[i], xx[i + 1], yy[i + 1], o); } drawLine(xx[n - 1], yy[n - 1], xx[0], yy[0], o); } } @Override public void drawImage(final Image i, final int x, final int y, final ImageObserver o) { G.drawImage(i, x, y, o); } @Override public void drawImage(final Image i, final int x, final int y, final int w, final int h, final ImageObserver o) { G.drawImage(i, x, y, w, h, o); } FontStruct FS = new FontStruct(); @Override public void setFont(final int h, final boolean bold) { Font f = FS.getFont(h, bold); if (f != null) { G.setFont(f); } else { f = new Font(Global.getParameter("font.name", "dialog"), bold ? Font.BOLD : Font.PLAIN, h); FS.storeFont(h, bold, f); G.setFont(f); } } int fsize; boolean flarge, fbold; int ffactor = Global.getParameter("ffactor", 130); @Override public void setDefaultFont(final int h, final boolean large, final boolean bold) { ffactor = Global.getParameter("ffactor", 130); fsize = h; flarge = large; fbold = bold; setFont(large, bold); } @Override public void setFont(final boolean large, final boolean bold) { int size = fsize; // int size=eric.JGlobals.FixFontSize(fsize); if (large) { size = size * ffactor / 100; } if (flarge) { size = size * ffactor / 100; } setFont(size, bold || fbold); } @Override public void drawImage(final Image i, final double x, final double y, final double x1, final double y1, final double x2, final double y2, final ImageObserver o) { try { final int w = i.getWidth(o), h = i.getHeight(o); final AffineTransform AT = new AffineTransform((x1 - x) / w, (y1 - y) / w, (x2 - x) / h, (y2 - y) / h, x, y); G.drawImage(i, AT, o); } catch (final Exception e) { } } @Override public Graphics getGraphics() { return G; } int StrH = 0, StrW = 0, StrAsc = 0; boolean StrTex = false; String Str = null; public void computeString(String s) { if (s.equals(Str)) { return; } StrH = StrW = StrAsc = 0; StrTex = false; Str = s; while (s != "") { int n = s.indexOf('$'); while (n > 0 && s.charAt(n - 1) == '\\') { n = s.indexOf('$', n + 1); } if (n < 0) { StrH = Math.max(StrH, getFontMetrics().getHeight()); StrW += getFontMetrics().stringWidth(s); StrAsc = Math.max(StrAsc, getFontMetrics().getAscent()); break; } else { StrTex = true; String ss = s.substring(0, n); s = s.substring(n + 1); StrH = Math.max(StrH, getFontMetrics().getHeight()); StrW += getFontMetrics().stringWidth(ss); StrAsc = Math.max(StrAsc, getFontMetrics().getAscent()); n = s.indexOf('$'); while (n > 0 && s.charAt(n - 1) == '\\') { n = s.indexOf('$', n + 1); } ss = s; if (n >= 0) { ss = s.substring(0, n); s = s.substring(n + 1); } else { s = ""; } if (HE == null || !HE.getEquation().equals(ss)) { setHotEqn(ss); } StrH = Math.max(StrH, heightHotEqn(G)); StrW += widthHotEqn(G); StrAsc = Math.max(StrAsc, ascentHotEqn(G)); } } } public int getW() { return StrW; } @Override public int stringWidth(final String s) { computeString(s); return StrW; } @Override public int stringHeight(final String s) { computeString(s); return StrH; } public boolean isTex(final String s) { computeString(s); return StrTex; } @Override public int drawStringExtended(String s, final double x, final double y) { if (s.startsWith("$$")) { s = s.substring(2); if (s.endsWith("$$")) { s = s.substring(0, s.length() - 2); } if (HE == null || !HE.getEquation().equals(s)) { setHotEqn(s); } if (LOut == null || !LOut.println("$$" + s + "$$", x, y + ascentHotEqn(G))) { return paintHotEqn((int) x, (int) y, G); } else { return heightHotEqn(G); } } computeString(s); if (LOut != null) { if (StrTex && LOut.printDollar()) { LOut.println(s, x, y + StrAsc, true); return StrH; } else if (!StrTex) { if (LOut.println(s, x, y + StrAsc)) { return StrH; } } } int w = 0; while (s != "") { int n = s.indexOf('$'); while (n > 0 && s.charAt(n - 1) == '\\') { n = s.indexOf('$', n + 1); } if (n < 0) { drawString(translateDollar(s), x + w, y + StrAsc); w += getFontMetrics().stringWidth(s); break; } else { String ss = s.substring(0, n); s = s.substring(n + 1); drawString(translateDollar(ss), x + w, y + StrAsc); w += getFontMetrics().stringWidth(ss); n = s.indexOf('$'); while (n > 0 && s.charAt(n - 1) == '\\') { n = s.indexOf('$', n + 1); } ss = s; if (n >= 0) { ss = s.substring(0, n); s = s.substring(n + 1); } else { s = ""; } if (HE == null || !HE.getEquation().equals(ss)) { setHotEqn(ss); } paintHotEqn((int) x + w, (int) y + StrAsc - ascentHotEqn(G), G); w += widthHotEqn(G); } } StrW = w; return StrH; } public String translateDollar(String s) { int n; while ((n = s.indexOf("\\$")) >= 0) { s = s.substring(0, n) + "$" + s.substring(n + 2); } return s; } @Override public int stringAscent(final String s) { return getFontMetrics().getAscent(); } sHotEqn HE = null; public void setHotEqn(final String s) { if (ZC == null) { return; } if (HE == null) { HE = new sHotEqn(ZC); } HE.setEquation(s); } public int paintHotEqn(final int c, final int r, final Graphics g) { if (HE == null) { return 0; } return HE.paint(c, r, g); } public int heightHotEqn(final Graphics g) { if (HE == null) { return 0; } return HE.getSizeof(HE.getEquation(), g).height; } public int ascentHotEqn(final Graphics g) { if (HE == null) { return 0; } return HE.getAscent(HE.getEquation(), g); } public int widthHotEqn(final Graphics g) { if (HE == null) { return 0; } return HE.getSizeof(HE.getEquation(), g).width; } @Override public void fillOval(final double x, final double y, final double w, final double h, final Color WithColor) { try { G.setColor(WithColor); G.fill(new Ellipse2D.Double(x, y, w, h)); } catch (final Exception e) { } } @Override public void fillRect(final double x, final double y, final double w, final double h, final Color WithColor) { try { G.setColor(WithColor); G.fill(new Rectangle2D.Double(x, y, w, h)); } catch (final Exception e) { } } @Override public void drawDiamond(final double x, final double y, final double w, final boolean isThick, final ConstructionObject o) { final double dw = w / 2; final int dx[] = new int[4], dy[] = new int[4]; dx[0] = (int) (x + dw); dy[0] = (int) (y); dx[1] = (int) (x + w); dy[1] = (int) (y + dw); dx[2] = (int) (x + dw); dy[2] = (int) (y + w); dx[3] = (int) (x); dy[3] = (int) (y + dw); if (isThick) { setColor(o); } else { G.setColor(new Color(250, 250, 250)); } G.fillPolygon(dx, dy, 4); if (!isThick) { setColor(o); G.drawPolygon(dx, dy, 4); } } @Override public void drawDcross(final double x, final double y, final double w, final boolean isThick, final ConstructionObject o) { final double x1 = x + w, y1 = y + w; setColor(o); if (isThick) { G.setStroke(DCross); } else { G.setStroke(DCrossNormal); } G.draw(new Line2D.Double(x, y, x1, y1)); G.draw(new Line2D.Double(x, y1, x1, y)); G.setStroke(Normal); } @Override public void setAntialiasing(final boolean bool) { if (bool) { G.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // G.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, // RenderingHints.VALUE_TEXT_ANTIALIAS_ON); } else { G.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); // G.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, // RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); } } @Override public void drawAxisLine(final double x, final double y, final double x1, final double y1) { if (test(x) || test(y) || test(x1) || test(y1)) { return; } G.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE); G.setStroke(new BasicStroke(0.05f)); G.draw(new Line2D.Double(x, y, x1, y1)); G.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); } } ./src/rene/zirkel/graphics/LatexOutput.java0000640000175000017500000000516711133127260017733 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.graphics; import java.io.PrintWriter; import rene.gui.Global; public class LatexOutput { PrintWriter Out; double W, H; boolean DoubleDollar, Dollar, NoDollar; public LatexOutput(final PrintWriter out) { Out = out; DoubleDollar = Global.getParameter("options.doubledollar", true); Dollar = Global.getParameter("options.dollar", true); NoDollar = Global.getParameter("options.nodollar", false); } public void open(final double w, final double h, final double dpi, final String picfilename) { W = w; H = h; Out.println("\\setlength{\\unitlength}{" + (2.54 / dpi) + "cm}"); Out.println("\\begin{picture}(" + round(w) + "," + round(h) + ")"); final String s = picfilename.replace('\\', '/'); Out.println("\\put(0,0){\\includegraphics[width=" + round(w / dpi * 2.54) + "cm]{" + s + "}}"); Out.println("%\\put(0,0){\\includegraphics[width=" + round(w / dpi * 2.54) + "cm,bb=0 0 " + ((int) w) + " " + ((int) h) + "]{" + s + "}}"); } public void close() { Out.println("\\end{picture}"); Out.close(); } public boolean println(String s, final double x, final double y, final boolean force) { if (s.startsWith("$$")) { if (!DoubleDollar) return false; s = s.substring(1); if (s.endsWith("$$")) s = s.substring(0, s.length() - 1); if (!s.endsWith("$")) s = s + "$"; } else if (!force && s.startsWith("$")) { if (!Dollar) return false; if (!s.endsWith("$")) s = s + "$"; } else if (!force) { if (!NoDollar) return false; } // Out.println("\\put("+round(x)+","+round(H-y)+"){\\makebox(0,0)[lt]{"+s+"}}"); Out.println("\\put(" + round(x) + "," + round(H - y) + "){" + s + "}"); return true; } public boolean println(final String s, final double x, final double y) { return println(s, x, y, false); } public double round(final double x) { return Math.floor(x * 1000 + 0.5) / 1000; } public boolean printDollar() { return Dollar; } } ./src/rene/zirkel/DragThread.java0000640000175000017500000000354011133127256015640 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel; import java.awt.event.MouseEvent; /** * @author Rene A thread for reporting drags to the main program, avoiding to * many drag messages, so that the program seems to hang. */ class DragThread extends Thread { MouseEvent EWaiting = null; ZirkelCanvas ZC; Object Ready = new Object(); boolean Working = false; public DragThread(final ZirkelCanvas zc) { ZC = zc; start(); } @Override public void run() { MouseEvent e; while (true) { if (EWaiting == null) { try { synchronized (this) { wait(); } } catch (final Exception ex) { } } if (EWaiting != null) { synchronized (this) { e = EWaiting; EWaiting = null; } Working = true; ZC.doMouseDragged(e); try { sleep(0); } catch (final Exception ex) { } Working = false; synchronized (Ready) { Ready.notify(); } } } } public synchronized void mouseDragged(final MouseEvent e) { EWaiting = e; notify(); } public void waitReady() { if (!Working) return; synchronized (Ready) { try { Thread.currentThread().wait(1000); } catch (final Exception ex) { } } } } ./src/rene/zirkel/.cvsignore0000644000175000017500000000001211242770056014766 0ustar yvesyves.DS_Store ./src/rene/zirkel/constructors/0000755000175000017500000000000011132723277015546 5ustar yvesyves./src/rene/zirkel/constructors/PointConstructor.java0000640000175000017500000002074211364071150021742 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: PointConstructor.java import eric.bar.JPropertiesBar; import java.awt.event.MouseEvent; import rene.gui.Global; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; public class PointConstructor extends ObjectConstructor { boolean Fix; PointObject P; boolean ShowsValue, ShowsName; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); final PointObject o=zc.selectCreatePoint(e.getX(), e.getY(), false, true, e.isAltDown()); Dragging=false; if (o==null) { return; } else if (o.isPointOn()) // create a point on an object { if (e.isShiftDown()&&zc.isNewPoint()) { o.setUseAlpha(true); } } else if (o.moveable()&&zc.isNewPoint()&&!zc.getAxis_show()) { P=o; Fix=e.isShiftDown(); ShowsValue=P.showValue(); ShowsName=P.showName(); Dragging=true; zc.repaint(); } else if (o.moveable()&&zc.isNewPoint()&&zc.getAxis_show()&&e.isShiftDown()) { P=o; try { P.setFixed(""+P.round(P.getX(), ZirkelCanvas.LengthsFactor), ""+P.round(P.getY(), ZirkelCanvas.LengthsFactor)); P.edit(zc, true, true); P.validate(); } catch (final Exception ex) { } } else if (e.isShiftDown()&&!zc.isNewPoint()) { final PointObject p=new PointObject(zc.getConstruction(), o.getX(), o.getY()); zc.addObject(p); p.setFixed(true); } } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) { return; } if (Global.getParameter("options.movename", false)) { P.setShowValue(true); P.setShowName(true); } P.move(zc.x(e.getX()), zc.y(e.getY())); zc.repaint(); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) { return; } Dragging=false; P.setShowValue(ShowsValue); P.setShowName(ShowsName); P.updateText(); zc.repaint(); if (Fix) { try { P.setFixed(""+P.round(P.getX(), ZirkelCanvas.LengthsFactor), ""+P.round(P.getY(), ZirkelCanvas.LengthsFactor)); JPropertiesBar.EditObject(P); P.validate(); } catch (final Exception ex) { } } } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Global.name("message.point", "Point: Set a point!")); } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Point")) { return false; } final XmlTag tag=tree.getTag(); if (!tag.hasParam("x")||!tag.hasParam("y")) { throw new ConstructionException("Point coordinates missing!"); } double x=0, y=0; try { if (tag.hasParam("actx")) { x=new Double(tag.getValue("actx")).doubleValue(); // System.out.println(x); } if (tag.hasParam("acty")) { y=new Double(tag.getValue("acty")).doubleValue(); } } catch (final Exception e) { } final PointObject p=new PointObject(c, x, y); try { x=new Expression(tag.getValue("x"), c, p).getValue(); y=new Expression(tag.getValue("y"), c, p).getValue(); p.move(x, y); } catch (final Exception e) { } setType(tag, p); setName(tag, p); set(tree, p); c.add(p); setConditionals(tree, c, p); if (tag.hasParam("fixed")) { p.setFixed(tag.getValue("x"), tag.getValue("y")); } if (tag.hasParam("increment")) { try { p.setIncrement(new Double(tag.getValue("increment")).doubleValue()); } catch (final Exception e) { } } if (tag.hasParam("magnetobjs")) { // must manage the magnet list after the whole construction is // loaded (see zc.load) c.magnet.add(p); c.magnet.add(tag.getValue("magnetobjs")); p.setMagnetRayExp(tag.getValue("magnetd")); } return true; } static public void setType(final XmlTag tag, final PointObject p) { if (tag.hasParam("shape")) { final String s=tag.getValue("shape"); if (s.equals("square")) { p.setType(0); } if (s.equals("diamond")) { p.setType(1); } if (s.equals("circle")) { p.setType(2); } if (s.equals("dot")) { p.setType(3); } if (s.equals("cross")) { p.setType(4); } if (s.equals("dcross")) { p.setType(5); } } } @Override public String getTag() { return "Point"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams==0) { final PointObject p=new PointObject(c, c.getX()+(Math.random()-0.5)*c.getW(), c.getY()+(Math.random()-0.5)*c.getW()); if (!name.equals("")) { p.setNameCheck(name); } c.add(p); p.setDefaults(); return; } if (nparams==1) { final ConstructionObject o=c.find(params[0]); if (o==null) { throw new ConstructionException(Global.name("exception.notfound")+" "+params[0]); } if (!(o instanceof PrimitiveLineObject)&&!(o instanceof PrimitiveCircleObject)) { throw new ConstructionException(Global.name("exception.type")+" "+params[0]); } final PointObject p=new PointObject(c, c.getX()+(Math.random()-0.5)*c.getW(), c.getY()+(Math.random()-0.5)*c.getW(), o); if (!name.equals("")) { p.setNameCheck(name); } c.add(p); p.setDefaults(); return; } if (nparams!=2) { throw new ConstructionException(Global.name("exception.nparams")); } final Expression e1=new Expression(params[0], c, null); final Expression e2=new Expression(params[1], c, null); if (!e1.isValid()||!e2.isValid()) { throw new ConstructionException(Global.name("exception.expression")); } final PointObject p=new PointObject(c, 0, 0); try { final double x=new Double(params[0]).doubleValue(); final double y=new Double(params[1]).doubleValue(); p.move(x, y); } catch (final Exception e) { p.setFixed(params[0], params[1]); } c.add(p); p.validate(); p.setDefaults(); if (!name.equals("")) { p.setNameCheck(name); } } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setPrompt(Global.name("prompt.point")); } } ./src/rene/zirkel/constructors/ExpressionConstructor.java0000640000175000017500000001021411320711311022771 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: PointConstructor.java import java.awt.event.MouseEvent; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.objects.ExpressionObject; public class ExpressionConstructor extends ObjectConstructor { ExpressionObject O; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { final double x = zc.x(e.getX()), y = zc.y(e.getY()); final ExpressionObject o = new ExpressionObject(zc.getConstruction(), x, y); zc.addObject(o); o.setShowName(false); o.setDefaults(); zc.repaint(); Dragging = true; O = o; } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) return; O.move(zc.x(e.getX()), zc.y(e.getY())); zc.repaint(); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) return; Dragging = false; O.edit(zc, true, true); } @Override public boolean waitForPoint() { return false; } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Global.name("message.expression", "Expression: Choose a place!")); } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Expression")) return false; final XmlTag tag = tree.getTag(); if (!tag.hasParam("x") || !tag.hasParam("y")) throw new ConstructionException("Expression coordinates missing!"); if (!tag.hasParam("value")) throw new ConstructionException(Global.name("exception.expression")); final ExpressionObject p = new ExpressionObject(c, 0, 0); double x, y; try { x = new Expression(tag.getValue("x"), c, p).getValue(); y = new Expression(tag.getValue("y"), c, p).getValue(); p.move(x, y); } catch (final Exception e) { } p.setDefaults(); if (tag.hasParam("prompt")) p.setPrompt(tag.getValue("prompt")); if (tag.hasParam("fixed")) { p.setFixed(tag.getValue("x"), tag.getValue("y")); } p.setShowValue(tag.hasParam("showvalue")); setName(tag, p); set(tree, p); c.add(p); try { p.setExpression(tag.getValue("value"), c); } catch (final Exception e) { throw new ConstructionException(Global.name("exception.expression")); } setConditionals(tree, c, p); if (tag.hasTrueParam("slider")) { try { p.setSlider(tag.getValue("min"), tag.getValue("max")); } catch (final Exception e) { throw new ConstructionException(Global.name("exception.expression")); } } return true; } @Override public String getTag() { return "Expression"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams == 1) { final ExpressionObject o = new ExpressionObject(c, c.getX() + (Math.random() - 0.5) * c.getW(), c.getY() + (Math.random() - 0.5) * c.getW()); if (!name.equals("")) o.setNameCheck(name); c.add(o); o.setDefaults(); try { o.setExpression(params[0], c); } catch (final Exception e) { throw new ConstructionException(Global.name("exception.expression")); } } else throw new ConstructionException(Global.name("exception.nparams")); } @Override public boolean useSmartBoard() { return false; } }./src/rene/zirkel/constructors/CircleConstructor.java0000640000175000017500000002513411360624633022060 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: PointConstructor.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.macro.Macro; import rene.zirkel.objects.Circle3Object; import rene.zirkel.objects.CircleObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.FixedCircleObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.SegmentObject; public class CircleConstructor extends ObjectConstructor { PointObject P1 = null, P2 = null; boolean Fixed = false; public CircleConstructor(final boolean fixed) { Fixed = fixed; } public CircleConstructor() { this(false); } FixedCircleObject C; ConstructionObject O; boolean ShowsValue, ShowsName; int Moved; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!zc.Visual) return; if (P1 == null) { P1 = select(e.getX(), e.getY(), zc, e.isAltDown()); if (P1 != null) { P1.setSelected(true); zc.repaint(); } showStatus(zc); } else { if (e.isShiftDown() || Fixed) { final FixedCircleObject c = new FixedCircleObject(zc .getConstruction(), P1, zc.x(e.getX()), zc.y(e.getY())); zc.addObject(c); c.setDefaults(); zc.repaint(); O = C = c; ShowsValue = c.showValue(); ShowsName = c.showName(); if (Global.getParameter("options.movefixname", true)) { C.setShowValue(true); C.setShowName(true); } Dragging = true; Moved = 0; P2 = null; } else { P2 = select(e.getX(), e.getY(), zc, e.isAltDown()); if (P2 != null) { if (P2 == P1) { P2 = null; return; } final CircleObject c = new CircleObject(zc .getConstruction(), P1, P2); zc.addObject(c); // c.updateCircleDep(); // zc.getConstruction().updateCircleDep(); c.setDefaults(); c.validate(); zc.repaint(); if (P2.moveable() && !P2.isPointOn() && zc.isNewPoint()) { ShowsValue = c.showValue(); ShowsName = c.showName(); if (Global.getParameter("options.movename", false)) { c.setShowValue(true); c.setShowName(true); } O = c; Dragging = true; Moved = 0; } else { P1.setSelected(false); P1 = P2 = null; showStatus(zc); } } } } } @Override public boolean waitForLastPoint() { return P1 != null && P2 == null; } @Override public void finishConstruction(final MouseEvent e, final ZirkelCanvas zc) { P2 = select(e.getX(), e.getY(), zc, e.isAltDown()); if (P2 != null) { final CircleObject c = new CircleObject(zc.getConstruction(), P1, P2); zc.addObject(c); c.setDefaults(); c.validate(); zc.repaint(); } P2 = null; } @Override public boolean waitForPoint() { return P1 == null || !Fixed; } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) return; Moved++; if (P2 == null) { C.init(zc.getConstruction(), zc.x(e.getX()), zc.y(e.getY())); if (C instanceof FixedCircleObject) ((FixedCircleObject) C).setDragable(Moved > 5); } else { P2.move(zc.x(e.getX()), zc.y(e.getY())); zc.validate(); } zc.repaint(); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) return; Dragging = false; O.setShowValue(ShowsValue); O.setShowName(ShowsName); zc.repaint(); if (P2 == null) { P1.setSelected(false); P1 = null; C.round(); if (Moved <= 5) { C.edit(zc, true, true); if (C instanceof FixedCircleObject && ((FixedCircleObject) C).isEditAborted()) { zc.delete(C); zc.repaint(); reset(zc); } } C.validate(); zc.check(); } else { P1.setSelected(false); P2.updateText(); P1 = P2 = null; } O.updateCircleDep(); zc.repaint(); zc.showStatus(); } public PointObject select(final int x, final int y, final ZirkelCanvas zc, boolean altdown) { return zc.selectCreatePoint(x, y, altdown); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); if (zc.Visual) { P1 = P2 = null; showStatus(zc); } else { zc.setPrompt(Global.name("prompt.circle")); } } @Override public void showStatus(final ZirkelCanvas zc) { if (Fixed) { if (P1 == null) zc.showStatus(Global.name("message.fixedcircle.midpoint")); else zc.showStatus(Global.name("message.fixedcircle.radius")); } else { if (P1 == null) zc.showStatus(Global.name("message.circle.midpoint")); else zc.showStatus(Global.name("message.circle.radius")); } } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Circle")) return false; final XmlTag tag = tree.getTag(); try { if (!tag.hasParam("midpoint")) throw new ConstructionException("Circle parameters missing!"); if (!tag.hasParam("through")) { if (tag.hasParam("fixed")) { final PointObject p1 = (PointObject) c.find(tag .getValue("midpoint")); final FixedCircleObject o = new FixedCircleObject(c, p1, 0, 0); c.add(o); setConditionals(tree, c, o); setName(tag, o); set(tree, o); if (tag.hasParam("partial")) o.setPartial(true); if (tag.hasParam("filled")) o.setFilled(true); if (tag.hasTrueParam("dragable")) o.setDragable(true); if (tag.hasTrueParam("drawable")) o.setDragable(true); // downward compatibility o.setFixed(tag.getValue("fixed")); if (tag.hasParam("start") && tag.hasParam("end")) o.setRange(tag.getValue("start"), tag.getValue("end")); if (tag.hasParam("acute")) o.setObtuse(false); if (tag.hasParam("chord")) o.setArc(false); } else { if (!(c instanceof Macro)) throw new ConstructionException( "Circle parameters missing!"); final PointObject p1 = (PointObject) c.find(tag .getValue("midpoint")); final PrimitiveCircleObject o = new PrimitiveCircleObject( c, p1); setName(tag, o); set(tree, o); c.add(o); setConditionals(tree, c, o); } } else { final PointObject p1 = (PointObject) c.find(tag .getValue("midpoint")); final PointObject p2 = (PointObject) c.find(tag .getValue("through")); final CircleObject o = new CircleObject(c, p1, p2); setName(tag, o); set(tree, o); c.add(o); setConditionals(tree, c, o); if (tag.hasParam("partial")) o.setPartial(true); if (tag.hasParam("filled")) o.setFilled(true); if (tag.hasParam("start") && tag.hasParam("end")) o.setRange(tag.getValue("start"), tag.getValue("end")); if (tag.hasParam("acute")) o.setObtuse(false); if (tag.hasParam("chord")) o.setArc(false); if (tag.hasParam("fixed")) { try { o.setFixed(true, tag.getValue("fixed")); } catch (final Exception e) { throw new ConstructionException("Fixed value illegal!"); } } } } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Circle parameters illegal!"); } return true; } @Override public String getTag() { return "Circle"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams > 3 || nparams == 0) throw new ConstructionException(Global.name("exception.nparams")); final ConstructionObject P1 = c.find(params[0]); if (P1 == null) throw new ConstructionException(Global.name("exception.notfound") + " " + params[0]); if (!(P1 instanceof PointObject)) throw new ConstructionException(Global.name("exception.type") + " " + params[0]); if (nparams == 1) { final PrimitiveCircleObject s = new PrimitiveCircleObject(c, (PointObject) P1); c.add(s); s.setDefaults(); if (!name.equals("")) s.setNameCheck(name); return; } final ConstructionObject P2 = c.find(params[1]); if (P2 == null) { final Expression ex = new Expression(params[1], c, null); if (!ex.isValid()) throw new ConstructionException(Global.name("exception.expression")); final FixedCircleObject s = new FixedCircleObject(c, (PointObject) P1, 0, 0); c.add(s); s.setDefaults(); s.setFixed(params[1]); s.validate(); if (!name.equals("")) s.setNameCheck(name); return; } if (P2 instanceof SegmentObject) { final Circle3Object s = new Circle3Object(c, ((SegmentObject) P2) .getP1(), ((SegmentObject) P2).getP2(), (PointObject) P1); c.add(s); s.setDefaults(); if (!name.equals("")) s.setNameCheck(name); return; } if (!(P2 instanceof PointObject)) throw new ConstructionException(Global.name("exception.type") + " " + params[1]); if (nparams == 3) { final ConstructionObject P3 = c.find(params[2]); if (P3 == null || !(P3 instanceof PointObject)) { final CircleObject s = new CircleObject(c, (PointObject) P1, (PointObject) P2); if (!s.canFix()) throw new ConstructionException(Global.name("exception.canfix")); s.setFixed(true, params[2]); if (!s.isValidFix()) throw new ConstructionException(Global.name("exception.fix") + " " + params[2]); c.add(s); s.validate(); if (!name.equals("")) s.setNameCheck(name); s.setDefaults(); return; } else { final Circle3Object cr = new Circle3Object(c, (PointObject) P2, (PointObject) P3, (PointObject) P1); c.add(cr); cr.setDefaults(); if (!name.equals("")) cr.setNameCheck(name); return; } } final CircleObject s = new CircleObject(c, (PointObject) P1, (PointObject) P2); c.add(s); s.setDefaults(); if (!name.equals("")) s.setName(name); } } ./src/rene/zirkel/constructors/LineConstructor.java0000640000175000017500000002052711360624570021547 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: LineConstructor.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.macro.Macro; import rene.zirkel.objects.AxisObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.LineObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveLineObject; public class LineConstructor extends ObjectConstructor { PointObject P1=null, P2=null; ConstructionObject O; boolean Fix; boolean ShowsValue, ShowsName, Moved; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!zc.Visual) { return; } if (P1==null) { P1=select(e.getX(), e.getY(), zc, e.isAltDown()); if (P1!=null) { P1.setSelected(true); zc.repaint(); } showStatus(zc); } else { P2=select(e.getX(), e.getY(), zc, e.isAltDown()); if (P2!=null) { if (P2==P1) { P2=null; return; } final ConstructionObject o=create(zc.getConstruction(), P1, P2); zc.addObject(o); o.setDefaults(); Fix=e.isShiftDown()||isFixed(); if (P2.moveable()&&!P2.isPointOn()&&zc.isNewPoint()) { Dragging=true; Moved=false; O=o; ShowsValue=o.showValue(); ShowsName=o.showName(); if ((Fix&&Global.getParameter("options.movefixname", true))||(!Fix&&Global.getParameter("options.movename", false))) { o.setShowValue(true); o.setShowName(true); } } else { Dragging=false; if (Fix) { setFixed(zc, o); } P1=P2=null; zc.clearSelected(); showStatus(zc); } } else { Dragging=false; } } } @Override public boolean waitForLastPoint() { return P1!=null&&P2==null; } @Override public void finishConstruction(final MouseEvent e, final ZirkelCanvas zc) { P2=select(e.getX(), e.getY(), zc, e.isAltDown()); if (P2!=null) { final ConstructionObject o=create(zc.getConstruction(), P1, P2); zc.addObject(o); o.setDefaults(); zc.validate(); zc.repaint(); P2=null; } } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) { return; } else { Moved=true; P2.move(zc.x(e.getX()), zc.y(e.getY())); zc.validate(); zc.repaint(); } } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) { return; } Dragging=false; O.setShowValue(ShowsValue); O.setShowName(ShowsName); if (Fix) { O.round(); } zc.repaint(); if (Fix&&!Moved) { setFixed(zc, O); } reset(zc); } public boolean isFixed() { return false; } public void setFixed(final ZirkelCanvas zc, final ConstructionObject o) { } public PointObject select(final int x, final int y, final ZirkelCanvas zc, boolean altdown) { return zc.selectCreatePoint(x, y, altdown); } public ConstructionObject create(final Construction c, final PointObject p1, final PointObject p2) { return new LineObject(c, p1, p2); } @Override public void reset(final ZirkelCanvas zc) { if (!zc.Visual) { zc.setPrompt(getPrompt()); } else { zc.clearSelected(); P1=P2=null; showStatus(zc); } } public String getPrompt() { return Global.name("prompt.line"); } @Override public void showStatus(final ZirkelCanvas zc) { if (P1==null) { zc.showStatus(Global.name("message.line.first", "Line: Set the first point!")); } else { zc.showStatus(Global.name("message.line.second", "Line: Set the second point!")); } } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Line")) { return false; } final XmlTag tag=tree.getTag(); if (tag.hasParam("xaxis")) { final AxisObject o=new AxisObject(c, true); setName(tag, o); set(tree, o); c.add(o); c.xAxis=o; return true; } if (tag.hasParam("yaxis")) { final AxisObject o=new AxisObject(c, false); setName(tag, o); set(tree, o); c.add(o); c.yAxis=o; return true; } if (!tag.hasParam("from")||!tag.hasParam("to")) { if (!(c instanceof Macro)) { throw new ConstructionException("Line points missing!"); } final PrimitiveLineObject o=new PrimitiveLineObject(c); setName(tag, o); set(tree, o); c.add(o); setConditionals(tree, c, o); } else { try { final PointObject p1=(PointObject) c.find(tag.getValue("from")); final PointObject p2=(PointObject) c.find(tag.getValue("to")); final LineObject o=new LineObject(c, p1, p2); if (tag.hasParam("partial")) { o.setPartial(true); } setName(tag, o); set(tree, o); c.add(o); setConditionals(tree, c, o); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Line points illegal!"); } } return true; } @Override public String getTag() { return "Line"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams!=2) { throw new ConstructionException(Global.name("exception.nparams")); } final ConstructionObject P1=c.find(params[0]); if (P1==null) { throw new ConstructionException(Global.name("exception.notfound")+" "+params[0]); } final ConstructionObject P2=c.find(params[1]); if (P2==null) { throw new ConstructionException(Global.name("exception.notfound")+" "+params[1]); } if (!(P1 instanceof PointObject)) { throw new ConstructionException(Global.name("exception.type")+" "+params[0]); } if (!(P2 instanceof PointObject)) { throw new ConstructionException(Global.name("exception.type")+" "+params[1]); } final LineObject s=new LineObject(c, (PointObject) P1, (PointObject) P2); c.add(s); s.setDefaults(); if (!name.equals("")) { s.setNameCheck(name); } } } ./src/rene/zirkel/constructors/BoundedPointConstructor.java0000640000175000017500000001362011313457434023247 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: PointConstructor.java import java.awt.event.MouseEvent; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Selector; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.InsideObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PointonObject; public class BoundedPointConstructor extends ObjectConstructor implements Selector { boolean Control; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!zc.Visual) { return; } Control=e.isControlDown(); final ConstructionObject o=zc.selectWithSelector(e.getX(), e.getY(), this); if (o==null) { return; } final PointObject p=new PointObject(zc.getConstruction(), zc.x(e.getX()), zc.y(e.getY()), o); if (!e.isShiftDown()) { p.setUseAlpha(true); } // if (Control && o instanceof InsideObject) p.setInside(true); if (o instanceof InsideObject) { p.setInside(true); } zc.addObject(p); p.validate(); p.setDefaults(); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { Control=e.isControlDown(); zc.indicateWithSelector(e.getX(), e.getY(), this); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Global.name("message.boundedpoint", "Bounded Point: Choose a circle or line!")); } public boolean isAdmissible(final ZirkelCanvas zc, final ConstructionObject o) { // if (Control && o instanceof InsideObject) return true; // else if (!Control && o instanceof PointonObject) return true; if (o instanceof InsideObject) { return true; } return false; } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "PointOn")) { return false; } final XmlTag tag=tree.getTag(); if (!tag.hasParam("on")) { throw new ConstructionException("Point bound missing!"); } try { final ConstructionObject o=(ConstructionObject) c.find(tag.getValue("on")); if (o!=null&&!(o instanceof PointonObject)&&!(o instanceof InsideObject)) { throw new ConstructionException(""); } double x=0, y=0; try { x=new Double(tag.getValue("x")).doubleValue(); y=new Double(tag.getValue("y")).doubleValue(); } catch (final Exception e) { } PointObject p; if (o!=null) { p=new PointObject(c, x, y, o); } else { p=new PointObject(c, x, y); p.setLaterBind(tag.getValue("on")); } p.setInside(tag.hasTrueParam("inside")); try { final double alpha=new Double(tag.getValue("alpha")).doubleValue(); p.setAlpha(alpha); p.setUseAlpha(true); if (tag.hasParam("on")) { final ConstructionObject on=c.find(tag.getValue("on")); if (on!=null) { p.project(on, alpha); } } } catch (final Exception e) { } if (tag.hasParam("shape")) { final String s=tag.getValue("shape"); if (s.equals("square")) { p.setType(0); } if (s.equals("diamond")) { p.setType(1); } if (s.equals("circle")) { p.setType(2); } if (s.equals("dot")) { p.setType(3); } if (s.equals("cross")) { p.setType(4); } if (s.equals("dcross")) { p.setType(5); } } if (tag.hasParam("boundorder")) { p.setBoundOrder(Double.valueOf(tag.getValue("boundorder")).doubleValue()); } setName(tag, p); set(tree, p); c.add(p); setConditionals(tree, c, p); if (tag.hasParam("fixed")) { p.setFixed(tag.getValue("x"), tag.getValue("y")); } if (tag.hasParam("increment")) { try { p.setIncrement(new Double(tag.getValue("increment")).doubleValue()); } catch (final Exception e) { } } } catch (final Exception e) { e.printStackTrace(); throw new ConstructionException("Illegal point bound!"); } return true; } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setPrompt(Global.name("prompt.pointon")); } } ./src/rene/zirkel/constructors/MidpointConstructor.java0000640000175000017500000000700311303263646022435 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: MidpointConstructor.java import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.MidpointObject; import rene.zirkel.objects.PointObject; public class MidpointConstructor extends LineConstructor { @Override public ConstructionObject create(final Construction c, final PointObject p1, final PointObject p2) { return new MidpointObject(c, p1, p2); } @Override public void showStatus(final ZirkelCanvas zc) { if (P1 == null) zc.showStatus(Global.name("message.midpoint.first", "Midpoint: Set the first point!")); else zc.showStatus(Global.name("message.midpoint.second", "Midpoint: Set the second point!")); } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Midpoint")) return false; final XmlTag tag = tree.getTag(); if (!tag.hasParam("first") || !tag.hasParam("second")) throw new ConstructionException("Line points missing!"); try { final PointObject p1 = (PointObject) c.find(tag.getValue("first")); final PointObject p2 = (PointObject) c.find(tag.getValue("second")); final MidpointObject p = new MidpointObject(c, p1, p2); PointConstructor.setType(tag, p); setName(tag, p); set(tree, p); c.add(p); setConditionals(tree, c, p); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Midpoint points illegal!"); } return true; } @Override public String getPrompt() { return Global.name("prompt.midpoint"); } @Override public String getTag() { return "Midpoint"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams != 2) throw new ConstructionException(Global.name("exception.nparams")); final ConstructionObject P1 = c.find(params[0]); if (P1 == null) throw new ConstructionException(Global.name("exception.notfound") + " " + params[0]); if (!(P1 instanceof PointObject)) throw new ConstructionException(Global.name("exception.type") + " " + params[0]); final ConstructionObject P2 = c.find(params[1]); if (P2 == null) throw new ConstructionException(Global.name("exception.notfound") + " " + params[1]); if (!(P2 instanceof PointObject)) throw new ConstructionException(Global.name("exception.type") + " " + params[1]); final MidpointObject s = new MidpointObject(c, (PointObject) P1, (PointObject) P2); if (!name.equals("")) s.setNameCheck(name); c.add(s); s.setDefaults(); } } ./src/rene/zirkel/constructors/IntersectionConstructor.java0000640000175000017500000003710411313457426023327 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: InersectionConstructor.java import java.awt.event.MouseEvent; import rene.util.MyVector; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.CircleIntersectionObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.IntersectionObject; import rene.zirkel.objects.LineCircleIntersectionObject; import rene.zirkel.objects.LineIntersectionObject; import rene.zirkel.objects.LineQuadricIntersectionObject; import rene.zirkel.objects.PointonObjectIntersectionObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.QuadricObject; public class IntersectionConstructor extends ObjectConstructor { ConstructionObject P1=null, P2=null; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!zc.Visual) { return; } boolean immediate=false; if (P1==null) { final MyVector v=zc.selectPointonObjects(e.getX(), e.getY()); if (v.size()==2) { P1=(ConstructionObject) v.elementAt(0); P2=(ConstructionObject) v.elementAt(1); if (P1.equals(P2)||(P1.isFilled()&&P2.isFilled())) { P1=P2=null; } else { immediate=true; } } } if (P1==null) { P1=select(e.getX(), e.getY(), zc); if (P1!=null) { P1.setSelected(true); zc.repaint(); showStatus(zc); } } else { if (P2==null) { P2=select(e.getX(), e.getY(), zc); } if (P2!=null) { if (P2==P1) { P2=null; return; } final IntersectionObject o[]=construct(P1, P2, zc.getConstruction()); if (o!=null) { IntersectionObject oc=null; if (immediate&&o.length>1) { if (o[1].nearto(e.getX(), e.getY(), zc)) { o[0]=null; oc=o[1]; } else { o[1]=null; oc=o[0]; } } for (final IntersectionObject element : o) { if (element!=null) { element.setDefaults(); zc.addObject(element); element.validate(zc.x(e.getX()), zc.y(e.getY())); } } /** * See, if the other intersection is visible and already a * point of both objects. */ if (oc!=null) { oc.autoAway(); } } P1=P2=null; zc.clearSelected(); showStatus(zc); } } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateIntersectedObjects(e.getX(), e.getY()); } public static IntersectionObject[] construct(final ConstructionObject P1, final ConstructionObject P2, final Construction c) { IntersectionObject o[]=null; if (P1 instanceof PrimitiveLineObject) { if (P2 instanceof PrimitiveLineObject) { o=new IntersectionObject[1]; o[0]=new LineIntersectionObject(c, (PrimitiveLineObject) P1, (PrimitiveLineObject) P2); } else if (P2 instanceof PrimitiveCircleObject) { o=new IntersectionObject[2]; o[0]=new LineCircleIntersectionObject(c, (PrimitiveLineObject) P1, (PrimitiveCircleObject) P2, true); o[1]=new LineCircleIntersectionObject(c, (PrimitiveLineObject) P1, (PrimitiveCircleObject) P2, false); } else if (P2 instanceof QuadricObject) { o=new IntersectionObject[2]; o[0]=new LineQuadricIntersectionObject(c, (PrimitiveLineObject) P1, (QuadricObject) P2, true); o[1]=new LineQuadricIntersectionObject(c, (PrimitiveLineObject) P1, (QuadricObject) P2, false); } else { return construct(P2, P1, c); } } else if (P1 instanceof QuadricObject) { if (P2 instanceof PrimitiveLineObject) { o=new IntersectionObject[2]; o[0]=new LineQuadricIntersectionObject(c, (PrimitiveLineObject) P2, (QuadricObject) P1, true); o[1]=new LineQuadricIntersectionObject(c, (PrimitiveLineObject) P2, (QuadricObject) P1, false); } else { o=new PointonObjectIntersectionObject[1]; o[0]=new PointonObjectIntersectionObject(c, P1, P2); } } else if (P1 instanceof PrimitiveCircleObject) { if (P2 instanceof PrimitiveCircleObject) { o=new IntersectionObject[2]; o[0]=new CircleIntersectionObject(c, (PrimitiveCircleObject) P1, (PrimitiveCircleObject) P2, true); o[1]=new CircleIntersectionObject(c, (PrimitiveCircleObject) P1, (PrimitiveCircleObject) P2, false); } else if (P2 instanceof PrimitiveLineObject) { o=new IntersectionObject[2]; o[0]=new LineCircleIntersectionObject(c, (PrimitiveLineObject) P2, (PrimitiveCircleObject) P1, true); o[1]=new LineCircleIntersectionObject(c, (PrimitiveLineObject) P2, (PrimitiveCircleObject) P1, false); } else { return construct(P2, P1, c); } } else { o=new PointonObjectIntersectionObject[1]; o[0]=new PointonObjectIntersectionObject(c, P1, P2); } return o; } public ConstructionObject select(final int x, final int y, final ZirkelCanvas zc) // select a line or circle at x,y { return zc.selectPointonObject(x, y, false); } @Override public void reset(final ZirkelCanvas zc) // reset the tool { super.reset(zc); if (zc.Visual) { P1=P2=null; showStatus(zc); } else { zc.setPrompt(Global.name("prompt.intersection")); } } @Override public void showStatus(final ZirkelCanvas zc) { if (P1==null) { zc.showStatus(Global.name("message.intersection.first", "Intersection: Select first object!")); } else { zc.showStatus(Global.name("message.intersection.second", "Intersection: Select second object!")); } } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Intersection")) { return constructOther(tree, c); } final XmlTag tag=tree.getTag(); if (!tag.hasParam("first")||!tag.hasParam("second")) { throw new ConstructionException("Intersection parameters missing!"); } try { final ConstructionObject o1=c.find(tag.getValue("first")); final ConstructionObject o2=c.find(tag.getValue("second")); final IntersectionObject o[]=construct(o1, o2, c); if (o==null) { throw new Exception(""); } String name="", nameOther=""; if (tag.hasParam("name")) { name=tag.getValue("name"); } if (tag.hasParam("other")) { nameOther=tag.getValue("other"); } if (o.length>1) { if (tag.hasParam("which")) { IntersectionObject oo; if (tag.getValue("which").equals("second")) { oo=o[1]; } else { oo=o[0]; } if (!name.equals("")) { oo.setName(name); } PointConstructor.setType(tag, oo); setName(tag, oo); set(tree, oo); c.add(oo); setConditionals(tree, c, oo); if (tag.hasParam("awayfrom")) { oo.setAway(tag.getValue("awayfrom"), true); } else if (tag.hasParam("closeto")) { oo.setAway(tag.getValue("closeto"), false); } if (tag.hasParam("valid")) { oo.setRestricted(false); } if (tag.hasParam("alternate")) { oo.setAlternate(true); } } else if (tag.hasParam("other")) { if (!name.equals("")) { o[0].setName(name); } if (!nameOther.equals("")) { o[1].setName(nameOther); } if (tag.hasParam("awayfrom")) { o[0].setAway(tag.getValue("awayfrom"), true); o[1].setAway(tag.getValue("awayfrom"), false); } else if (tag.hasParam("closeto")) { o[1].setAway(tag.getValue("awayfrom"), true); o[0].setAway(tag.getValue("awayfrom"), false); } for (final IntersectionObject element : o) { if (element==null) { continue; } PointConstructor.setType(tag, element); set(tree, element); c.add(element); setConditionals(tree, c, element); } } } else { if (!name.equals("")) { o[0].setName(name); } PointConstructor.setType(tag, o[0]); setName(tag, o[0]); set(tree, o[0]); c.add(o[0]); setConditionals(tree, c, o[0]); if (tag.hasParam("valid")) { o[0].setRestricted(false); } try { final double x=new Double(tag.getValue("x")).doubleValue(); final double y=new Double(tag.getValue("y")).doubleValue(); o[0].setXY(x, y); } catch (final Exception e) { } } } catch (final ConstructionException e) { throw e; } catch (final Exception e) { e.printStackTrace(); throw new ConstructionException("Intersection parameters illegal!"); } return true; } public boolean constructOther(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "OtherIntersection")) { return false; } final XmlTag tag=tree.getTag(); if (tag.hasParam("name")) { final ConstructionObject o=c.find(tag.getValue("name")); if (o==null||!(o instanceof IntersectionObject)) { throw new ConstructionException("OtherIntersection not found!"); } final IntersectionObject oo=(IntersectionObject) o; PointConstructor.setType(tag, oo); o.setDefaults(); set(tree, o); final ConstructionObject ol=c.lastButOne(); if (tag.hasParam("awayfrom")) { oo.setAway(tag.getValue("awayfrom"), true); if (ol!=null&&(ol instanceof IntersectionObject)) { ((IntersectionObject) ol).setAway(tag.getValue("awayfrom"), false); } } else if (tag.hasParam("closeto")) { oo.setAway(tag.getValue("closeto"), false); if (ol!=null&&(ol instanceof IntersectionObject)) { ((IntersectionObject) ol).setAway(tag.getValue("awayfrom"), true); } } if (tag.hasParam("valid")) { oo.setRestricted(false); } } else { throw new ConstructionException( "OtherIntersection must have a name!"); } return true; } @Override public String getTag() { return "Intersection"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams!=2&&nparams!=3) { throw new ConstructionException(Global.name("exception.nparams")); } final ConstructionObject P1=c.find(params[0]); if (P1==null) { throw new ConstructionException(Global.name("exception.notfound")+" "+params[0]); } final ConstructionObject P2=c.find(params[1]); if (P2==null) { throw new ConstructionException(Global.name("exception.notfound")+" "+params[0]); } final IntersectionObject o[]=construct(P1, P2, c); if (o==null) { throw new ConstructionException(Global.name("exception.type")); } if (o.length==1) { c.add(o[0]); o[0].setDefaults(); if (!name.equals("")) { o[0].setName(name); } } else { if (name.equals("")) { for (final IntersectionObject element : o) { c.add(element); element.setDefaults(); } } else { final String names[]=new String[2]; int n; if ((n=name.indexOf(','))>=0) { names[0]=name.substring(n+1).trim(); names[1]=name.substring(0, n).trim(); } else { names[0]=name; names[1]=""; } for (int i=0; i. */ package rene.zirkel.constructors; // file: PointConstructor.java import java.awt.event.MouseEvent; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.objects.TextObject; public class TextConstructor extends ObjectConstructor { @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { final double x = zc.x(e.getX()), y = zc.y(e.getY()); final TextObject p = new TextObject(zc.getConstruction(), x, y); zc.addObject(p); p.edit(zc, true, true); p.setDefaults(); zc.repaint(); } @Override public boolean waitForPoint() { return false; } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Global.name("message.text")); } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Text")) return false; final XmlTag tag = tree.getTag(); if (!tag.hasParam("x") || !tag.hasParam("y")) throw new ConstructionException("Point coordinates missing!"); final TextObject p = new TextObject(c, 0, 0); double x, y; try { x = new Expression(tag.getValue("x"), c, p).getValue(); y = new Expression(tag.getValue("y"), c, p).getValue(); p.move(x, y); } catch (final Exception e) { } setName(tag, p); set(tree, p); c.add(p); setConditionals(tree, c, p); p.setLines(p.getText()); if (tag.hasParam("fixed")) { p.setFixed(tag.getValue("x"), tag.getValue("y")); } return true; } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); showStatus(zc); } } ./src/rene/zirkel/constructors/CVS/0000755000175000017500000000000011134575053016200 5ustar yvesyves./src/rene/zirkel/constructors/CVS/Repository0000644000175000017500000000004111132354034020265 0ustar yvesyvescarmetal/rene/zirkel/constructors./src/rene/zirkel/constructors/CVS/Entries0000644000175000017500000000223011134575053017531 0ustar yvesyves/AngleConstructor.java/1.4/Tue Jan 13 15:09:33 2009/-ko/ /AreaConstructor.java/1.5/Tue Jan 13 15:09:33 2009/-ko/ /BoundedPointConstructor.java/1.4/Tue Jan 13 15:09:33 2009/-ko/ /Circle3Constructor.java/1.4/Tue Jan 13 15:09:33 2009/-ko/ /CircleConstructor.java/1.4/Tue Jan 13 15:09:33 2009/-ko/ /EquationXYConstructor.java/1.3/Tue Jan 13 15:09:34 2009/-ko/ /ExpressionConstructor.java/1.4/Tue Jan 13 15:09:35 2009/-ko/ /FunctionConstructor.java/1.4/Tue Jan 13 15:09:35 2009/-ko/ /ImageConstructor.java/1.4/Tue Jan 13 15:09:35 2009/-ko/ /IntersectionConstructor.java/1.4/Tue Jan 13 15:09:35 2009/-ko/ /LineConstructor.java/1.4/Tue Jan 13 15:09:36 2009/-ko/ /MidpointConstructor.java/1.3/Tue Jan 13 15:09:36 2009/-ko/ /ObjectConstructor.java/1.4/Tue Jan 13 15:09:37 2009/-ko/ /ParallelConstructor.java/1.4/Tue Jan 13 15:09:37 2009/-ko/ /PlumbConstructor.java/1.4/Tue Jan 13 15:09:37 2009/-ko/ /PointConstructor.java/1.7/Thu Jan 15 16:45:02 2009/-ko/ /QuadricConstructor.java/1.5/Tue Jan 13 15:09:37 2009/-ko/ /RayConstructor.java/1.4/Tue Jan 13 15:09:37 2009/-ko/ /SegmentConstructor.java/1.3/Tue Jan 13 15:09:38 2009/-ko/ /TextConstructor.java/1.4/Tue Jan 13 15:09:38 2009/-ko/ ./src/rene/zirkel/constructors/CVS/RevisionCache/0000755000175000017500000000000011360624057020722 5ustar yvesyves./src/rene/zirkel/constructors/CVS/RevisionCache/SegmentConstructor.java#1.30000644000175000017500000001244111171045124025714 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: SegmentConstructor.java import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.SegmentObject; public class SegmentConstructor extends LineConstructor { boolean Fixed = false; public SegmentConstructor() { this(false); } public SegmentConstructor(final boolean fixed) { Fixed = fixed; } @Override public ConstructionObject create(final Construction c, final PointObject p1, final PointObject p2) { return new SegmentObject(c, p1, p2); } @Override public boolean isFixed() { return Fixed; } @Override public void setFixed(final ZirkelCanvas zc, final ConstructionObject o) { if (o instanceof SegmentObject) { final SegmentObject s = (SegmentObject) o; if (s.canFix()) try { s.validate(); s.setFixed(true, "" + s.getLength()); s.edit(zc); s.validate(); zc.repaint(); } catch (final Exception e) { } else { zc.warning(Zirkel.name("error.fixedsegment")); } } } @Override public void showStatus(final ZirkelCanvas zc) { if (!Fixed) { if (P1 == null) zc.showStatus(Zirkel.name("message.segment.first")); else zc.showStatus(Zirkel.name("message.segment.second")); } else { if (P1 == null) zc.showStatus(Zirkel.name("message.fixedsegment.first")); else zc.showStatus(Zirkel.name("message.fixedsegment.second")); } } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Segment")) return false; final XmlTag tag = tree.getTag(); if (!tag.hasParam("from") || !tag.hasParam("to")) throw new ConstructionException("Segment endpoints missing!"); try { final PointObject p1 = (PointObject) c.find(tag.getValue("from")); final PointObject p2 = (PointObject) c.find(tag.getValue("to")); final SegmentObject o = new SegmentObject(c, p1, p2); setName(tag, o); set(tree, o); c.add(o); setConditionals(tree, c, o); o.setArrow(tag.hasParam("arrow")); if (tag.hasParam("fixed")) { try { o.setFixed(true, tag.getValue("fixed")); } catch (final Exception e) { throw new ConstructionException("Fixed value illegal!"); } } if (tag.hasParam("code_symbol")) o.setSegmentCode(Integer.parseInt(tag.getValue("code_symbol"))); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Segment endpoints illegal!"); } return true; } @Override public String getPrompt() { return Zirkel.name("prompt.segment"); } @Override public String getTag() { return "Segment"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams != 2 && nparams != 3) throw new ConstructionException(Zirkel.name("exception.nparams")); final ConstructionObject P1 = c.find(params[0]); if (P1 == null) throw new ConstructionException(Zirkel.name("exception.notfound") + " " + params[0]); if (!(P1 instanceof PointObject)) throw new ConstructionException(Zirkel.name("exception.type") + " " + params[0]); ConstructionObject P2 = c.find(params[1]); if (P2 == null) { final Expression ex = new Expression(params[1], c, null); if (!ex.isValid()) throw new ConstructionException(Zirkel .name("exception.expression")); final double x = ex.getValue(); P2 = new PointObject(c, ((PointObject) P1).getX() + x, ((PointObject) P1).getY()); c.add(P2); P2.setDefaults(); final SegmentObject s = new SegmentObject(c, (PointObject) P1, (PointObject) P2); s.setDefaults(); s.setFixed(true, params[1]); c.add(s); if (!name.equals("")) s.setNameCheck(name); return; } if (!(P2 instanceof PointObject)) throw new ConstructionException(Zirkel.name("exception.type") + " " + params[1]); final SegmentObject s = new SegmentObject(c, (PointObject) P1, (PointObject) P2); if (nparams == 3) { if (!s.canFix()) throw new ConstructionException(Zirkel.name("exception.canfix")); s.setFixed(true, params[2]); if (!s.isValidFix()) throw new ConstructionException(Zirkel.name("exception.fix") + " " + params[2]); s.validate(); } c.add(s); s.setDefaults(); if (!name.equals("")) s.setNameCheck(name); } } ./src/rene/zirkel/constructors/CVS/RevisionCache/PointConstructor.java#1.10000644000175000017500000002110311134575765025416 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: PointConstructor.java import java.awt.event.*; import rene.util.xml.*; import rene.zirkel.*; import rene.zirkel.construction.*; import rene.zirkel.expression.*; import rene.zirkel.objects.*; import rene.gui.Global; public class PointConstructor extends ObjectConstructor { boolean Fix; PointObject P; boolean ShowsValue, ShowsName; public void mousePressed(MouseEvent e, ZirkelCanvas zc) { double x = zc.x(e.getX()), y = zc.y(e.getY()); PointObject o = zc.selectCreatePoint(e.getX(), e.getY(), false, true); Dragging = false; if (o == null) { return; } else if (o.isPointOn()) // cerate a point on an object { if (e.isShiftDown() && zc.isNewPoint()) { o.setUseAlpha(true); } } else if (o.moveable() && zc.isNewPoint() && !zc.showGrid()) // create a new point and let it be dragged { P = o; // P.setDefaults(); Fix = e.isShiftDown(); ShowsValue = P.showValue(); ShowsName = P.showName(); Dragging = true; zc.repaint(); } else if (o.moveable() && zc.isNewPoint() && zc.showGrid() && e.isShiftDown()) { P = o; // P.setDefaults(); try { P.setFixed("" + P.round(P.getX(), ZirkelCanvas.LengthsFactor), "" + P.round(P.getY(), ZirkelCanvas.LengthsFactor)); P.edit(zc); P.validate(); } catch (Exception ex) { } } else if (e.isShiftDown() && !zc.isNewPoint()) // create a fixed point at the position of a selected point { PointObject p = new PointObject(zc.getConstruction(), o.getX(), o.getY()); zc.addObject(p); // p.setDefaults(); p.setFixed(true); } } public void mouseDragged(MouseEvent e, ZirkelCanvas zc) { if (!Dragging) { return; } if (Global.getParameter("options.movename", false)) { P.setShowValue(true); P.setShowName(true); } P.move(zc.x(e.getX()), zc.y(e.getY())); zc.repaint(); } public void mouseReleased(MouseEvent e, ZirkelCanvas zc) { if (!Dragging) { return; } Dragging = false; P.setShowValue(ShowsValue); P.setShowName(ShowsName); P.updateText(); zc.repaint(); if (Fix) { try { P.setFixed("" + P.round(P.getX(), ZirkelCanvas.LengthsFactor), "" + P.round(P.getY(), ZirkelCanvas.LengthsFactor)); if (rene.zirkel.Zirkel.IsApplet) { P.edit(zc); } else { eric.JGlobals.EditObject(P); } P.validate(); } catch (Exception ex) { } } } public void showStatus(ZirkelCanvas zc) { zc.showStatus( Zirkel.name("message.point", "Point: Set a point!")); } public boolean construct(XmlTree tree, Construction c) throws ConstructionException { if (!testTree(tree, "Point")) { return false; } XmlTag tag = tree.getTag(); if (!tag.hasParam("x") || !tag.hasParam("y")) { throw new ConstructionException("Point coordinates missing!"); } double x = 0, y = 0; try { if (tag.hasParam("actx")) { x = new Double(tag.getValue("actx")).doubleValue(); // System.out.println(x); } if (tag.hasParam("acty")) { y = new Double(tag.getValue("acty")).doubleValue(); } } catch (Exception e) { } PointObject p = new PointObject(c, x, y); try { x = new Expression(tag.getValue("x"), c, p).getValue(); y = new Expression(tag.getValue("y"), c, p).getValue(); p.move(x, y); } catch (Exception e) { } setType(tag, p); setName(tag, p); set(tree, p); c.add(p); setConditionals(tree, c, p); if (tag.hasParam("fixed")) { p.setFixed(tag.getValue("x"), tag.getValue("y")); } if (tag.hasParam("increment")) { try { p.setIncrement(new Double(tag.getValue("increment")).doubleValue()); } catch (Exception e) { } } if (tag.hasParam("magnetobjs")) { // must manage the magnet list after the whole construction is loaded (see c.readConstruction) c.magnet.add(p); c.magnet.add(tag.getValue("magnetobjs")); // p.setMagnetRay(Integer.parseInt(tag.getValue("magnetd"))); p.setMagnetRayExp(tag.getValue("magnetd")); } return true; } static public void setType(XmlTag tag, PointObject p) { if (tag.hasParam("shape")) { String s = tag.getValue("shape"); if (s.equals("square")) { p.setType(0); } if (s.equals("diamond")) { p.setType(1); } if (s.equals("circle")) { p.setType(2); } if (s.equals("dot")) { p.setType(3); } if (s.equals("cross")) { p.setType(4); } if (s.equals("dcross")) { p.setType(5); } } } public String getTag() { return "Point"; } public void construct(Construction c, String name, String params[], int nparams) throws ConstructionException { if (nparams == 0) { PointObject p = new PointObject(c, c.getX() + (Math.random() - 0.5) * c.getW(), c.getY() + (Math.random() - 0.5) * c.getW()); if (!name.equals("")) { p.setNameCheck(name); } c.add(p); p.setDefaults(); return; } if (nparams == 1) { ConstructionObject o = c.find(params[0]); if (o == null) { throw new ConstructionException(Zirkel.name("exception.notfound") + " " + params[0]); } if (!(o instanceof PrimitiveLineObject) && !(o instanceof PrimitiveCircleObject)) { throw new ConstructionException(Zirkel.name("exception.type") + " " + params[0]); } PointObject p = new PointObject(c, c.getX() + (Math.random() - 0.5) * c.getW(), c.getY() + (Math.random() - 0.5) * c.getW(), o); if (!name.equals("")) { p.setNameCheck(name); } c.add(p); p.setDefaults(); return; } if (nparams != 2) { throw new ConstructionException(Zirkel.name("exception.nparams")); } Expression e1 = new Expression(params[0], c, null); Expression e2 = new Expression(params[1], c, null); if (!e1.isValid() || !e2.isValid()) { throw new ConstructionException(Zirkel.name("exception.expression")); } PointObject p = new PointObject(c, 0, 0); try { double x = new Double(params[0]).doubleValue(); double y = new Double(params[1]).doubleValue(); p.move(x, y); } catch (Exception e) { p.setFixed(params[0], params[1]); } c.add(p); p.validate(); p.setDefaults(); if (!name.equals("")) { p.setNameCheck(name); } } public void reset(ZirkelCanvas zc) { super.reset(zc); zc.setPrompt(Zirkel.name("prompt.point")); } } ./src/rene/zirkel/constructors/CVS/RevisionCache/CircleConstructor.java#1.40000644000175000017500000002504311171707004025520 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: PointConstructor.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.macro.Macro; import rene.zirkel.objects.Circle3Object; import rene.zirkel.objects.CircleObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.FixedCircleObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.SegmentObject; public class CircleConstructor extends ObjectConstructor { PointObject P1 = null, P2 = null; boolean Fixed = false; public CircleConstructor(final boolean fixed) { Fixed = fixed; } public CircleConstructor() { this(false); } FixedCircleObject C; ConstructionObject O; boolean ShowsValue, ShowsName; int Moved; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!zc.Visual) return; if (P1 == null) { P1 = select(e.getX(), e.getY(), zc); if (P1 != null) { P1.setSelected(true); zc.repaint(); } showStatus(zc); } else { if (e.isShiftDown() || Fixed) { final FixedCircleObject c = new FixedCircleObject(zc .getConstruction(), P1, zc.x(e.getX()), zc.y(e.getY())); zc.addObject(c); c.setDefaults(); zc.repaint(); O = C = c; ShowsValue = c.showValue(); ShowsName = c.showName(); if (Global.getParameter("options.movefixname", true)) { C.setShowValue(true); C.setShowName(true); } Dragging = true; Moved = 0; P2 = null; } else { P2 = select(e.getX(), e.getY(), zc); if (P2 != null) { if (P2 == P1) { P2 = null; return; } final CircleObject c = new CircleObject(zc .getConstruction(), P1, P2); zc.addObject(c); // c.updateCircleDep(); // zc.getConstruction().updateCircleDep(); c.setDefaults(); c.validate(); zc.repaint(); if (P2.moveable() && !P2.isPointOn() && zc.isNewPoint()) { ShowsValue = c.showValue(); ShowsName = c.showName(); if (Global.getParameter("options.movename", false)) { c.setShowValue(true); c.setShowName(true); } O = c; Dragging = true; Moved = 0; } else { P1.setSelected(false); P1 = P2 = null; showStatus(zc); } } } } } @Override public boolean waitForLastPoint() { return P1 != null && P2 == null; } @Override public void finishConstruction(final MouseEvent e, final ZirkelCanvas zc) { P2 = select(e.getX(), e.getY(), zc); if (P2 != null) { final CircleObject c = new CircleObject(zc.getConstruction(), P1, P2); zc.addObject(c); c.setDefaults(); c.validate(); zc.repaint(); } P2 = null; } @Override public boolean waitForPoint() { return P1 == null || !Fixed; } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) return; Moved++; if (P2 == null) { C.init(zc.getConstruction(), zc.x(e.getX()), zc.y(e.getY())); if (C instanceof FixedCircleObject) ((FixedCircleObject) C).setDragable(Moved > 5); } else { P2.move(zc.x(e.getX()), zc.y(e.getY())); zc.validate(); } zc.repaint(); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) return; Dragging = false; O.setShowValue(ShowsValue); O.setShowName(ShowsName); zc.repaint(); if (P2 == null) { P1.setSelected(false); P1 = null; C.round(); if (Moved <= 5) { C.edit(zc); if (C instanceof FixedCircleObject && ((FixedCircleObject) C).isEditAborted()) { zc.delete(C); zc.repaint(); reset(zc); } } C.validate(); zc.check(); } else { P1.setSelected(false); P2.updateText(); P1 = P2 = null; } O.updateCircleDep(); zc.repaint(); zc.showStatus(); } public PointObject select(final int x, final int y, final ZirkelCanvas zc) { return zc.selectCreatePoint(x, y); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); if (zc.Visual) { P1 = P2 = null; showStatus(zc); } else { zc.setPrompt(Zirkel.name("prompt.circle")); } } @Override public void showStatus(final ZirkelCanvas zc) { if (Fixed) { if (P1 == null) zc.showStatus(Zirkel.name("message.fixedcircle.midpoint")); else zc.showStatus(Zirkel.name("message.fixedcircle.radius")); } else { if (P1 == null) zc.showStatus(Zirkel.name("message.circle.midpoint")); else zc.showStatus(Zirkel.name("message.circle.radius")); } } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Circle")) return false; final XmlTag tag = tree.getTag(); try { if (!tag.hasParam("midpoint")) throw new ConstructionException("Circle parameters missing!"); if (!tag.hasParam("through")) { if (tag.hasParam("fixed")) { final PointObject p1 = (PointObject) c.find(tag .getValue("midpoint")); final FixedCircleObject o = new FixedCircleObject(c, p1, 0, 0); c.add(o); setConditionals(tree, c, o); setName(tag, o); set(tree, o); if (tag.hasParam("partial")) o.setPartial(true); if (tag.hasParam("filled")) o.setFilled(true); if (tag.hasTrueParam("dragable")) o.setDragable(true); if (tag.hasTrueParam("drawable")) o.setDragable(true); // downward compatibility o.setFixed(tag.getValue("fixed")); if (tag.hasParam("start") && tag.hasParam("end")) o.setRange(tag.getValue("start"), tag.getValue("end")); if (tag.hasParam("acute")) o.setObtuse(false); if (tag.hasParam("chord")) o.setArc(false); } else { if (!(c instanceof Macro)) throw new ConstructionException( "Circle parameters missing!"); final PointObject p1 = (PointObject) c.find(tag .getValue("midpoint")); final PrimitiveCircleObject o = new PrimitiveCircleObject( c, p1); setName(tag, o); set(tree, o); c.add(o); setConditionals(tree, c, o); } } else { final PointObject p1 = (PointObject) c.find(tag .getValue("midpoint")); final PointObject p2 = (PointObject) c.find(tag .getValue("through")); final CircleObject o = new CircleObject(c, p1, p2); setName(tag, o); set(tree, o); c.add(o); setConditionals(tree, c, o); if (tag.hasParam("partial")) o.setPartial(true); if (tag.hasParam("filled")) o.setFilled(true); if (tag.hasParam("start") && tag.hasParam("end")) o.setRange(tag.getValue("start"), tag.getValue("end")); if (tag.hasParam("acute")) o.setObtuse(false); if (tag.hasParam("chord")) o.setArc(false); if (tag.hasParam("fixed")) { try { o.setFixed(true, tag.getValue("fixed")); } catch (final Exception e) { throw new ConstructionException("Fixed value illegal!"); } } } } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Circle parameters illegal!"); } return true; } @Override public String getTag() { return "Circle"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams > 3 || nparams == 0) throw new ConstructionException(Zirkel.name("exception.nparams")); final ConstructionObject P1 = c.find(params[0]); if (P1 == null) throw new ConstructionException(Zirkel.name("exception.notfound") + " " + params[0]); if (!(P1 instanceof PointObject)) throw new ConstructionException(Zirkel.name("exception.type") + " " + params[0]); if (nparams == 1) { final PrimitiveCircleObject s = new PrimitiveCircleObject(c, (PointObject) P1); c.add(s); s.setDefaults(); if (!name.equals("")) s.setNameCheck(name); return; } final ConstructionObject P2 = c.find(params[1]); if (P2 == null) { final Expression ex = new Expression(params[1], c, null); if (!ex.isValid()) throw new ConstructionException(Zirkel .name("exception.expression")); final FixedCircleObject s = new FixedCircleObject(c, (PointObject) P1, 0, 0); c.add(s); s.setDefaults(); s.setFixed(params[1]); s.validate(); if (!name.equals("")) s.setNameCheck(name); return; } if (P2 instanceof SegmentObject) { final Circle3Object s = new Circle3Object(c, ((SegmentObject) P2) .getP1(), ((SegmentObject) P2).getP2(), (PointObject) P1); c.add(s); s.setDefaults(); if (!name.equals("")) s.setNameCheck(name); return; } if (!(P2 instanceof PointObject)) throw new ConstructionException(Zirkel.name("exception.type") + " " + params[1]); if (nparams == 3) { final ConstructionObject P3 = c.find(params[2]); if (P3 == null || !(P3 instanceof PointObject)) { final CircleObject s = new CircleObject(c, (PointObject) P1, (PointObject) P2); if (!s.canFix()) throw new ConstructionException(Zirkel .name("exception.canfix")); s.setFixed(true, params[2]); if (!s.isValidFix()) throw new ConstructionException(Zirkel .name("exception.fix") + " " + params[2]); c.add(s); s.validate(); if (!name.equals("")) s.setNameCheck(name); s.setDefaults(); return; } else { final Circle3Object cr = new Circle3Object(c, (PointObject) P2, (PointObject) P3, (PointObject) P1); c.add(cr); cr.setDefaults(); if (!name.equals("")) cr.setNameCheck(name); return; } } final CircleObject s = new CircleObject(c, (PointObject) P1, (PointObject) P2); c.add(s); s.setDefaults(); if (!name.equals("")) s.setName(name); } } ./src/rene/zirkel/constructors/CVS/RevisionCache/Circle3Constructor.java#1.40000644000175000017500000001011311357112424025575 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: Cicle3Constructor.java import java.awt.event.MouseEvent; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.Circle3Object; import rene.zirkel.objects.PointObject; public class Circle3Constructor extends ObjectConstructor { PointObject P1 = null, P2 = null, P3 = null; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!zc.Visual) return; if (P1 == null) { P1 = select(e.getX(), e.getY(), zc); if (P1 != null) { P1.setSelected(true); zc.repaint(); } showStatus(zc); } else if (P2 == null) { P2 = select(e.getX(), e.getY(), zc); if (P2 != null && P2 != P1) { P2.setSelected(true); zc.repaint(); } showStatus(zc); } else { P3 = select(e.getX(), e.getY(), zc); if (P3 != null) { final Circle3Object c = new Circle3Object(zc.getConstruction(), P1, P2, P3); zc.addObject(c); c.setDefaults(); c.updateCircleDep(); P1 = P2 = P3 = null; zc.clearSelected(); showStatus(zc); } } } @Override public boolean waitForLastPoint() { return P1 != null && P2 != null; } @Override public void finishConstruction(final MouseEvent e, final ZirkelCanvas zc) { P3 = select(e.getX(), e.getY(), zc); if (P3 != null) { final Circle3Object c = new Circle3Object(zc.getConstruction(), P1, P2, P3); zc.addObject(c); c.setDefaults(); zc.validate(); zc.repaint(); P3 = null; } } public PointObject select(final int x, final int y, final ZirkelCanvas zc) { return zc.selectCreatePoint(x, y); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); if (zc.Visual) { P1 = P2 = P3 = null; showStatus(zc); } else { zc.setPrompt(Zirkel.name("prompt.circle3")); } } @Override public void showStatus(final ZirkelCanvas zc) { if (P1 == null) zc.showStatus(Zirkel.name("message.circle3.first", "Circle: Choose the first radius point!")); else if (P2 == null) zc.showStatus(Zirkel.name("message.circle3.second", "Circle: Choose the second radius point!")); else zc.showStatus(Zirkel.name("message.circle3.midpoint", "Circle: Choose the midpoint!")); } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Circle3")) return false; final XmlTag tag = tree.getTag(); if (!tag.hasParam("midpoint") || !tag.hasParam("from") || !tag.hasParam("to")) throw new ConstructionException("Circle3 parameters missing!"); try { final PointObject p1 = (PointObject) c.find(tag .getValue("midpoint")); final PointObject p2 = (PointObject) c.find(tag.getValue("from")); final PointObject p3 = (PointObject) c.find(tag.getValue("to")); final Circle3Object o = new Circle3Object(c, p2, p3, p1); if (tag.hasParam("partial")) o.setPartial(true); if (tag.hasParam("start") && tag.hasParam("end")) o.setRange(tag.getValue("start"), tag.getValue("end")); setName(tag, o); set(tree, o); c.add(o); setConditionals(tree, c, o); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Circle3 parameters illegal!"); } return true; } } ./src/rene/zirkel/constructors/CVS/RevisionCache/PointConstructor.java#1.40000644000175000017500000001671211134575746025432 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: PointConstructor.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; public class PointConstructor extends ObjectConstructor { boolean Fix; PointObject P; boolean ShowsValue, ShowsName; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); final PointObject o = zc.selectCreatePoint(e.getX(), e.getY(), false, true); Dragging = false; if (o == null) { return; } else if (o.isPointOn()) // cerate a point on an object { if (e.isShiftDown() && zc.isNewPoint()) { o.setUseAlpha(true); } } else if (o.moveable() && zc.isNewPoint() && !zc.showGrid()) // create // a new // point // and // let // it be // dragged { P = o; // P.setDefaults(); Fix = e.isShiftDown(); ShowsValue = P.showValue(); ShowsName = P.showName(); Dragging = true; zc.repaint(); } else if (o.moveable() && zc.isNewPoint() && zc.showGrid() && e.isShiftDown()) { P = o; // P.setDefaults(); try { P.setFixed("" + P.round(P.getX(), ZirkelCanvas.LengthsFactor), "" + P.round(P.getY(), ZirkelCanvas.LengthsFactor)); P.edit(zc); P.validate(); } catch (final Exception ex) { } } else if (e.isShiftDown() && !zc.isNewPoint()) // create a fixed point // at the position of a // selected point { final PointObject p = new PointObject(zc.getConstruction(), o .getX(), o.getY()); zc.addObject(p); // p.setDefaults(); p.setFixed(true); } } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) { return; } if (Global.getParameter("options.movename", false)) { P.setShowValue(true); P.setShowName(true); } P.move(zc.x(e.getX()), zc.y(e.getY())); zc.repaint(); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) { return; } Dragging = false; P.setShowValue(ShowsValue); P.setShowName(ShowsName); P.updateText(); zc.repaint(); if (Fix) { try { P.setFixed("" + P.round(P.getX(), ZirkelCanvas.LengthsFactor), "" + P.round(P.getY(), ZirkelCanvas.LengthsFactor)); if (rene.zirkel.Zirkel.IsApplet) { P.edit(zc); } else { eric.JGlobals.EditObject(P); } P.validate(); } catch (final Exception ex) { } } } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Zirkel.name("message.point", "Point: Set a point!")); } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Point")) { return false; } final XmlTag tag = tree.getTag(); if (!tag.hasParam("x") || !tag.hasParam("y")) { throw new ConstructionException("Point coordinates missing!"); } double x = 0, y = 0; try { if (tag.hasParam("actx")) { x = new Double(tag.getValue("actx")).doubleValue(); // System.out.println(x); } if (tag.hasParam("acty")) { y = new Double(tag.getValue("acty")).doubleValue(); } } catch (final Exception e) { } final PointObject p = new PointObject(c, x, y); try { x = new Expression(tag.getValue("x"), c, p).getValue(); y = new Expression(tag.getValue("y"), c, p).getValue(); p.move(x, y); } catch (final Exception e) { } setType(tag, p); setName(tag, p); set(tree, p); c.add(p); setConditionals(tree, c, p); if (tag.hasParam("fixed")) { p.setFixed(tag.getValue("x"), tag.getValue("y")); } if (tag.hasParam("increment")) { try { p.setIncrement(new Double(tag.getValue("increment")) .doubleValue()); } catch (final Exception e) { } } if (tag.hasParam("magnetobjs")) { // must manage the magnet list after the whole construction is // loaded (see c.readConstruction) Construction.magnet.add(p); Construction.magnet.add(tag.getValue("magnetobjs")); // p.setMagnetRay(Integer.parseInt(tag.getValue("magnetd"))); p.setMagnetRayExp(tag.getValue("magnetd")); } return true; } static public void setType(final XmlTag tag, final PointObject p) { if (tag.hasParam("shape")) { final String s = tag.getValue("shape"); if (s.equals("square")) { p.setType(0); } if (s.equals("diamond")) { p.setType(1); } if (s.equals("circle")) { p.setType(2); } if (s.equals("dot")) { p.setType(3); } if (s.equals("cross")) { p.setType(4); } if (s.equals("dcross")) { p.setType(5); } } } @Override public String getTag() { return "Point"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams == 0) { final PointObject p = new PointObject(c, c.getX() + (Math.random() - 0.5) * c.getW(), c.getY() + (Math.random() - 0.5) * c.getW()); if (!name.equals("")) { p.setNameCheck(name); } c.add(p); p.setDefaults(); return; } if (nparams == 1) { final ConstructionObject o = c.find(params[0]); if (o == null) { throw new ConstructionException(Zirkel .name("exception.notfound") + " " + params[0]); } if (!(o instanceof PrimitiveLineObject) && !(o instanceof PrimitiveCircleObject)) { throw new ConstructionException(Zirkel.name("exception.type") + " " + params[0]); } final PointObject p = new PointObject(c, c.getX() + (Math.random() - 0.5) * c.getW(), c.getY() + (Math.random() - 0.5) * c.getW(), o); if (!name.equals("")) { p.setNameCheck(name); } c.add(p); p.setDefaults(); return; } if (nparams != 2) { throw new ConstructionException(Zirkel.name("exception.nparams")); } final Expression e1 = new Expression(params[0], c, null); final Expression e2 = new Expression(params[1], c, null); if (!e1.isValid() || !e2.isValid()) { throw new ConstructionException(Zirkel.name("exception.expression")); } final PointObject p = new PointObject(c, 0, 0); try { final double x = new Double(params[0]).doubleValue(); final double y = new Double(params[1]).doubleValue(); p.move(x, y); } catch (final Exception e) { p.setFixed(params[0], params[1]); } c.add(p); p.validate(); p.setDefaults(); if (!name.equals("")) { p.setNameCheck(name); } } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setPrompt(Zirkel.name("prompt.point")); } } ./src/rene/zirkel/constructors/CVS/RevisionCache/IntersectionConstructor.java#1.40000644000175000017500000002773011313456634027002 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: InersectionConstructor.java import java.awt.event.MouseEvent; import rene.util.MyVector; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.CircleIntersectionObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.IntersectionObject; import rene.zirkel.objects.LineCircleIntersectionObject; import rene.zirkel.objects.LineIntersectionObject; import rene.zirkel.objects.LineQuadricIntersectionObject; import rene.zirkel.objects.PointonObjectIntersectionObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.QuadricObject; public class IntersectionConstructor extends ObjectConstructor { ConstructionObject P1 = null, P2 = null; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!zc.Visual) { return; } boolean immediate = false; if (P1 == null) { final MyVector v = zc.selectPointonObjects(e.getX(), e.getY()); if (v.size() == 2) { P1 = (ConstructionObject) v.elementAt(0); P2 = (ConstructionObject) v.elementAt(1); if (P1.equals(P2) || (P1.isFilled() && P2.isFilled())) { P1 = P2 = null; } else { immediate = true; } } } if (P1 == null) { P1 = select(e.getX(), e.getY(), zc); if (P1 != null) { P1.setSelected(true); zc.repaint(); showStatus(zc); } } else { if (P2 == null) { P2 = select(e.getX(), e.getY(), zc); } if (P2 != null) { if (P2 == P1) { P2 = null; return; } final IntersectionObject o[] = construct(P1, P2, zc .getConstruction()); if (o != null) { IntersectionObject oc = null; if (immediate && o.length > 1) { if (o[1].nearto(e.getX(), e.getY(), zc)) { o[0] = null; oc = o[1]; } else { o[1] = null; oc = o[0]; } } for (final IntersectionObject element : o) { if (element != null) { element.setDefaults(); zc.addObject(element); element.validate(zc.x(e.getX()), zc.y(e.getY())); } } /** * See, if the other intersection is visible and already a * point of both objects. */ if (oc != null) { oc.autoAway(); } } P1 = P2 = null; zc.clearSelected(); showStatus(zc); } } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { zc.indicateIntersectedObjects(e.getX(), e.getY()); } public static IntersectionObject[] construct(final ConstructionObject P1, final ConstructionObject P2, final Construction c) { IntersectionObject o[] = null; if (P1 instanceof PrimitiveLineObject) { if (P2 instanceof PrimitiveLineObject) { o = new IntersectionObject[1]; o[0] = new LineIntersectionObject(c, (PrimitiveLineObject) P1, (PrimitiveLineObject) P2); } else if (P2 instanceof PrimitiveCircleObject) { o = new IntersectionObject[2]; o[0] = new LineCircleIntersectionObject(c, (PrimitiveLineObject) P1, (PrimitiveCircleObject) P2, true); o[1] = new LineCircleIntersectionObject(c, (PrimitiveLineObject) P1, (PrimitiveCircleObject) P2, false); } else if (P2 instanceof QuadricObject) { o = new IntersectionObject[2]; o[0] = new LineQuadricIntersectionObject(c, (PrimitiveLineObject) P1, (QuadricObject) P2, true); o[1] = new LineQuadricIntersectionObject(c, (PrimitiveLineObject) P1, (QuadricObject) P2, false); } else { return construct(P2, P1, c); } } else if (P1 instanceof QuadricObject) { if (P2 instanceof PrimitiveLineObject) { o = new IntersectionObject[2]; o[0] = new LineQuadricIntersectionObject(c, (PrimitiveLineObject) P2, (QuadricObject) P1, true); o[1] = new LineQuadricIntersectionObject(c, (PrimitiveLineObject) P2, (QuadricObject) P1, false); } else { o = new PointonObjectIntersectionObject[1]; o[0] = new PointonObjectIntersectionObject(c, P1, P2); } } else if (P1 instanceof PrimitiveCircleObject) { if (P2 instanceof PrimitiveCircleObject) { o = new IntersectionObject[2]; o[0] = new CircleIntersectionObject(c, (PrimitiveCircleObject) P1, (PrimitiveCircleObject) P2, true); o[1] = new CircleIntersectionObject(c, (PrimitiveCircleObject) P1, (PrimitiveCircleObject) P2, false); } else if (P2 instanceof PrimitiveLineObject) { o = new IntersectionObject[2]; o[0] = new LineCircleIntersectionObject(c, (PrimitiveLineObject) P2, (PrimitiveCircleObject) P1, true); o[1] = new LineCircleIntersectionObject(c, (PrimitiveLineObject) P2, (PrimitiveCircleObject) P1, false); } else { return construct(P2, P1, c); } } else { o = new PointonObjectIntersectionObject[1]; o[0] = new PointonObjectIntersectionObject(c, P1, P2); } return o; } public ConstructionObject select(final int x, final int y, final ZirkelCanvas zc) // select a line or circle at x,y { return zc.selectPointonObject(x, y, false); } @Override public void reset(final ZirkelCanvas zc) // reset the tool { super.reset(zc); if (zc.Visual) { P1 = P2 = null; showStatus(zc); } else { zc.setPrompt(Zirkel.name("prompt.intersection")); } } @Override public void showStatus(final ZirkelCanvas zc) { if (P1 == null) { zc.showStatus(Zirkel.name("message.intersection.first", "Intersection: Select first object!")); } else { zc.showStatus(Zirkel.name("message.intersection.second", "Intersection: Select second object!")); } } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Intersection")) { return constructOther(tree, c); } final XmlTag tag = tree.getTag(); if (!tag.hasParam("first") || !tag.hasParam("second")) { throw new ConstructionException("Intersection parameters missing!"); } try { final ConstructionObject o1 = c.find(tag.getValue("first")); final ConstructionObject o2 = c.find(tag.getValue("second")); final IntersectionObject o[] = construct(o1, o2, c); if (o == null) { throw new Exception(""); } String name = "", nameOther = ""; if (tag.hasParam("name")) { name = tag.getValue("name"); } if (tag.hasParam("other")) { nameOther = tag.getValue("other"); } if (o.length > 1) { if (tag.hasParam("which")) { IntersectionObject oo; if (tag.getValue("which").equals("second")) { oo = o[1]; } else { oo = o[0]; } if (!name.equals("")) { oo.setName(name); } PointConstructor.setType(tag, oo); setName(tag, oo); set(tree, oo); c.add(oo); setConditionals(tree, c, oo); if (tag.hasParam("awayfrom")) { oo.setAway(tag.getValue("awayfrom"), true); } else if (tag.hasParam("closeto")) { oo.setAway(tag.getValue("closeto"), false); } if (tag.hasParam("valid")) { oo.setRestricted(false); } if (tag.hasParam("alternate")) { oo.setAlternate(true); } } else if (tag.hasParam("other")) { if (!name.equals("")) { o[0].setName(name); } if (!nameOther.equals("")) { o[1].setName(nameOther); } if (tag.hasParam("awayfrom")) { o[0].setAway(tag.getValue("awayfrom"), true); o[1].setAway(tag.getValue("awayfrom"), false); } else if (tag.hasParam("closeto")) { o[1].setAway(tag.getValue("awayfrom"), true); o[0].setAway(tag.getValue("awayfrom"), false); } for (final IntersectionObject element : o) { if (element == null) { continue; } PointConstructor.setType(tag, element); set(tree, element); c.add(element); setConditionals(tree, c, element); } } } else { if (!name.equals("")) { o[0].setName(name); } PointConstructor.setType(tag, o[0]); setName(tag, o[0]); set(tree, o[0]); c.add(o[0]); setConditionals(tree, c, o[0]); if (tag.hasParam("valid")) { o[0].setRestricted(false); } try { final double x = new Double(tag.getValue("x")) .doubleValue(); final double y = new Double(tag.getValue("y")) .doubleValue(); o[0].setXY(x, y); } catch (final Exception e) { } } } catch (final ConstructionException e) { throw e; } catch (final Exception e) { e.printStackTrace(); throw new ConstructionException("Intersection parameters illegal!"); } return true; } public boolean constructOther(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "OtherIntersection")) { return false; } final XmlTag tag = tree.getTag(); if (tag.hasParam("name")) { final ConstructionObject o = c.find(tag.getValue("name")); if (o == null || !(o instanceof IntersectionObject)) { throw new ConstructionException("OtherIntersection not found!"); } final IntersectionObject oo = (IntersectionObject) o; PointConstructor.setType(tag, oo); o.setDefaults(); set(tree, o); final ConstructionObject ol = c.lastButOne(); if (tag.hasParam("awayfrom")) { oo.setAway(tag.getValue("awayfrom"), true); if (ol != null && (ol instanceof IntersectionObject)) { ((IntersectionObject) ol).setAway(tag.getValue("awayfrom"), false); } } else if (tag.hasParam("closeto")) { oo.setAway(tag.getValue("closeto"), false); if (ol != null && (ol instanceof IntersectionObject)) { ((IntersectionObject) ol).setAway(tag.getValue("awayfrom"), true); } } if (tag.hasParam("valid")) { oo.setRestricted(false); } } else { throw new ConstructionException( "OtherIntersection must have a name!"); } return true; } @Override public String getTag() { return "Intersection"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams != 2 && nparams != 3) { throw new ConstructionException(Zirkel.name("exception.nparams")); } final ConstructionObject P1 = c.find(params[0]); if (P1 == null) { throw new ConstructionException(Zirkel.name("exception.notfound") + " " + params[0]); } final ConstructionObject P2 = c.find(params[1]); if (P2 == null) { throw new ConstructionException(Zirkel.name("exception.notfound") + " " + params[0]); } final IntersectionObject o[] = construct(P1, P2, c); if (o == null) { throw new ConstructionException(Zirkel.name("exception.type")); } if (o.length == 1) { c.add(o[0]); o[0].setDefaults(); if (!name.equals("")) { o[0].setName(name); } } else { if (name.equals("")) { for (final IntersectionObject element : o) { c.add(element); element.setDefaults(); } } else { final String names[] = new String[2]; int n; if ((n = name.indexOf(',')) >= 0) { names[0] = name.substring(n + 1).trim(); names[1] = name.substring(0, n).trim(); } else { names[0] = name; names[1] = ""; } for (int i = 0; i < o.length; i++) { if (names[i].equals("")) { continue; } c.add(o[i]); o[i].setDefaults(); o[i].setName(names[i]); } } } } } ./src/rene/zirkel/constructors/CVS/RevisionCache/FunctionConstructor.java#1.40000644000175000017500000001102411171072664026105 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: QuadricConstructor.java import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.objects.FunctionObject; import rene.zirkel.objects.UserFunctionObject; public class FunctionConstructor extends ObjectConstructor { @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Function")) return false; final XmlTag tag = tree.getTag(); if (tag.hasParam("f")) // function { if (!tag.hasParam("var")) throw new ConstructionException("Function invalid!"); try { final String y = tag.getValue("f"); final String var = tag.getValue("var"); final UserFunctionObject f = new UserFunctionObject(c); f.setDefaults(); setName(tag, f); set(tree, f); c.add(f); double xpos, ypos; try { if (tag.hasParam("fixed")) { f.setFixed(tag.getValue("x"), tag.getValue("y")); } else { xpos = new Expression(tag.getValue("x"), c, f) .getValue(); ypos = new Expression(tag.getValue("y"), c, f) .getValue(); f.move(xpos, ypos); } } catch (final Exception e) { } if (tag.hasParam("filled")) f.setFilled(true); f.setExpressions(var, y); setConditionals(tree, c, f); f.updateText(); return true; } catch (final Exception e) { throw new ConstructionException("Function invalid!"); } } else // curve { if (!tag.hasParam("min") && !tag.hasParam("max") && !tag.hasParam("d") && !tag.hasParam("var") && !tag.hasParam("x") && !tag.hasParam("y")) throw new ConstructionException("Function invalid!"); try { final String x = tag.getValue("x"); final String y = tag.getValue("y"); final String var = tag.getValue("var"); final String d = tag.getValue("d"); final String min = tag.getValue("min"); final String max = tag.getValue("max"); final FunctionObject f = new FunctionObject(c); f.setDefaults(); setType(tag, f); setName(tag, f); set(tree, f); c.add(f); if (tag.hasParam("filled")) f.setFilled(true); else f.setFilled(false); f.setExpressions(var, x, y); f.setRange(min, max, d); f.setSpecial(tag.hasTrueParam("special")); setConditionals(tree, c, f); if (tag.hasParam("center")) f.setCenter(tag.getValue("center")); f.updateText(); return true; } catch (final Exception e) { throw new ConstructionException("Function invalid!"); } } } static public void setType(final XmlTag tag, final FunctionObject p) { if (tag.hasParam("shape")) { final String s = tag.getValue("shape"); if (s.equals("square")) p.setType(0); if (s.equals("diamond")) p.setType(1); if (s.equals("circle")) p.setType(2); if (s.equals("dot")) p.setType(3); if (s.equals("cross")) p.setType(4); if (s.equals("dcross")) p.setType(5); } } @Override public String getTag() { return "Function"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams != 6) throw new ConstructionException(Zirkel.name("exception.nparams")); boolean added = false; try { final FunctionObject F = new FunctionObject(c); c.add(F); added = true; if (!name.equals("")) F.setNameCheck(name); F.setRange(params[0], params[1], params[2]); F.setExpressions(params[3], params[4], params[5]); F.setDefaults(); } catch (final ConstructionException e) { if (added) c.back(); throw e; } catch (final Exception e) { if (added) c.back(); throw new ConstructionException("Function Invalid!"); } } } ./src/rene/zirkel/constructors/CVS/RevisionCache/BoundedPointConstructor.java#1.40000644000175000017500000001157711313456562026730 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: PointConstructor.java import java.awt.event.MouseEvent; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Selector; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.InsideObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PointonObject; public class BoundedPointConstructor extends ObjectConstructor implements Selector { boolean Control; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!zc.Visual) { return; } Control = e.isControlDown(); final ConstructionObject o = zc.selectWithSelector(e.getX(), e.getY(), this); if (o == null) { return; } final PointObject p = new PointObject(zc.getConstruction(), zc.x(e .getX()), zc.y(e.getY()), o); if (!e.isShiftDown()) { p.setUseAlpha(true); } // if (Control && o instanceof InsideObject) p.setInside(true); if (o instanceof InsideObject) { p.setInside(true); } zc.addObject(p); p.validate(); p.setDefaults(); } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { Control = e.isControlDown(); zc.indicateWithSelector(e.getX(), e.getY(), this); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Zirkel.name("message.boundedpoint", "Bounded Point: Choose a circle or line!")); } public boolean isAdmissible(final ZirkelCanvas zc, final ConstructionObject o) { // if (Control && o instanceof InsideObject) return true; // else if (!Control && o instanceof PointonObject) return true; if (o instanceof InsideObject) { return true; } return false; } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "PointOn")) { return false; } final XmlTag tag = tree.getTag(); if (!tag.hasParam("on")) { throw new ConstructionException("Point bound missing!"); } try { final ConstructionObject o = (ConstructionObject) c.find(tag .getValue("on")); if (o != null && !(o instanceof PointonObject) && !(o instanceof InsideObject)) { throw new ConstructionException(""); } double x = 0, y = 0; try { x = new Double(tag.getValue("x")).doubleValue(); y = new Double(tag.getValue("y")).doubleValue(); } catch (final Exception e) { } PointObject p; if (o != null) { p = new PointObject(c, x, y, o); } else { p = new PointObject(c, x, y); p.setLaterBind(tag.getValue("on")); } p.setInside(tag.hasTrueParam("inside")); try { final double alpha = new Double(tag.getValue("alpha")) .doubleValue(); p.setAlpha(alpha); p.setUseAlpha(true); if (tag.hasParam("on")) { final ConstructionObject on = c.find(tag.getValue("on")); if (on != null) { p.project(on, alpha); } } } catch (final Exception e) { } if (tag.hasParam("shape")) { final String s = tag.getValue("shape"); if (s.equals("square")) { p.setType(0); } if (s.equals("diamond")) { p.setType(1); } if (s.equals("circle")) { p.setType(2); } if (s.equals("dot")) { p.setType(3); } if (s.equals("cross")) { p.setType(4); } if (s.equals("dcross")) { p.setType(5); } } if (tag.hasParam("boundorder")) { p.setBoundOrder(Double.valueOf(tag.getValue("boundorder")) .doubleValue()); } setName(tag, p); set(tree, p); c.add(p); setConditionals(tree, c, p); if (tag.hasParam("fixed")) { p.setFixed(tag.getValue("x"), tag.getValue("y")); } if (tag.hasParam("increment")) { try { p.setIncrement(new Double(tag.getValue("increment")) .doubleValue()); } catch (final Exception e) { } } } catch (final Exception e) { e.printStackTrace(); throw new ConstructionException("Illegal point bound!"); } return true; } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setPrompt(Zirkel.name("prompt.pointon")); } } ./src/rene/zirkel/constructors/CVS/RevisionCache/EquationXYConstructor.java#1.30000644000175000017500000000301111242742625026362 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.EquationXYObject; /** * * @author erichake */ public class EquationXYConstructor extends ObjectConstructor { @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "EqXY")) { return false; } final XmlTag tag = tree.getTag(); if (tag.hasParam("f")) // function { final EquationXYObject eq = new EquationXYObject(c, tag .getValue("f"), Integer.parseInt(tag.getValue("Dhor"))); eq.setName(tag.getValue("name")); // eq.setDefaults(); set(tree, eq); c.add(eq); eq.updateText(); } return true; } } ./src/rene/zirkel/constructors/CVS/RevisionCache/ParallelConstructor.java#1.40000644000175000017500000001262111242762642026061 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: ParallelConstructor.java import java.awt.event.MouseEvent; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ParallelObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveLineObject; public class ParallelConstructor extends ObjectConstructor { PointObject P = null; PrimitiveLineObject L = null; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!zc.Visual) return; if (L == null) { L = selectline(e.getX(), e.getY(), zc); if (L != null) { L.setSelected(true); zc.repaint(); } showStatus(zc); } else { P = select(e.getX(), e.getY(), zc); if (P != null) { final ConstructionObject o = create(zc.getConstruction(), L, P); zc.addObject(o); o.setDefaults(); P = null; L = null; zc.clearSelected(); showStatus(zc); } } } @Override public boolean waitForLastPoint() { return L != null; } @Override public void finishConstruction(final MouseEvent e, final ZirkelCanvas zc) { P = select(e.getX(), e.getY(), zc); if (P != null) { final ConstructionObject o = create(zc.getConstruction(), L, P); zc.addObject(o); o.setDefaults(); zc.validate(); zc.repaint(); P = null; } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { if (!simple && waitForLastPoint()) { if (zc.isPreview()) { zc.movePreview(e); } else { zc.prepareForPreview(e); finishConstruction(e, zc); } } if (L == null) zc.indicateLineObjects(e.getX(), e.getY()); else if (P == null) zc.indicateCreatePoint(e.getX(), e.getY(), false); } public PointObject select(final int x, final int y, final ZirkelCanvas zc) { return zc.selectCreatePoint(x, y); } public PrimitiveLineObject selectline(final int x, final int y, final ZirkelCanvas zc) { return zc.selectLine(x, y); } public PrimitiveLineObject create(final Construction c, final PrimitiveLineObject l, final PointObject p) { return new ParallelObject(c, l, p); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); if (zc.Visual) { P = null; L = null; showStatus(zc); } else { zc.setPrompt(getPrompt()); } } public String getPrompt() { return Zirkel.name("prompt.parallel"); } @Override public void showStatus(final ZirkelCanvas zc) { if (L == null) zc.showStatus(Zirkel.name("message.parallel.first", "Parallel: Choose a line!")); else zc.showStatus(Zirkel.name("message.parallel.second", "Parallel: Choose a Point!")); } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Parallel")) return false; final XmlTag tag = tree.getTag(); if (!tag.hasParam("point") || !tag.hasParam("line")) throw new ConstructionException("Parallel parameters missing!"); try { final PointObject p1 = (PointObject) c.find(tag.getValue("point")); final PrimitiveLineObject p2 = (PrimitiveLineObject) c.find(tag .getValue("line")); final ParallelObject o = new ParallelObject(c, p2, p1); setName(tag, o); set(tree, o); if (tag.hasParam("partial")) o.setPartial(true); c.add(o); setConditionals(tree, c, o); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Parallel parameters illegal!"); } return true; } @Override public String getTag() { return "Parallel"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams != 2) throw new ConstructionException(Zirkel.name("exception.nparams")); final ConstructionObject P1 = c.find(params[0]); if (P1 == null) throw new ConstructionException(Zirkel.name("exception.notfound") + " " + params[0]); final ConstructionObject P2 = c.find(params[1]); if (P2 == null) throw new ConstructionException(Zirkel.name("exception.notfound") + " " + params[1]); if (!(P1 instanceof PrimitiveLineObject)) throw new ConstructionException(Zirkel.name("exception.type") + " " + params[0]); if (!(P2 instanceof PointObject)) throw new ConstructionException(Zirkel.name("exception.type") + " " + params[1]); final ParallelObject s = new ParallelObject(c, (PrimitiveLineObject) P1, (PointObject) P2); if (!name.equals("")) s.setNameCheck(name); c.add(s); s.setDefaults(); } } ./src/rene/zirkel/constructors/CVS/RevisionCache/MidpointConstructor.java#1.30000644000175000017500000000700611171706544026110 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: MidpointConstructor.java import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.MidpointObject; import rene.zirkel.objects.PointObject; public class MidpointConstructor extends LineConstructor { @Override public ConstructionObject create(final Construction c, final PointObject p1, final PointObject p2) { return new MidpointObject(c, p1, p2); } @Override public void showStatus(final ZirkelCanvas zc) { if (P1 == null) zc.showStatus(Zirkel.name("message.midpoint.first", "Midpoint: Set the first point!")); else zc.showStatus(Zirkel.name("message.midpoint.second", "Midpoint: Set the second point!")); } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Midpoint")) return false; final XmlTag tag = tree.getTag(); if (!tag.hasParam("first") || !tag.hasParam("second")) throw new ConstructionException("Line points missing!"); try { final PointObject p1 = (PointObject) c.find(tag.getValue("first")); final PointObject p2 = (PointObject) c.find(tag.getValue("second")); final MidpointObject p = new MidpointObject(c, p1, p2); PointConstructor.setType(tag, p); setName(tag, p); set(tree, p); c.add(p); setConditionals(tree, c, p); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Midpoint points illegal!"); } return true; } @Override public String getPrompt() { return Zirkel.name("prompt.midpoint"); } @Override public String getTag() { return "Midpoint"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams != 2) throw new ConstructionException(Zirkel.name("exception.nparams")); final ConstructionObject P1 = c.find(params[0]); if (P1 == null) throw new ConstructionException(Zirkel.name("exception.notfound") + " " + params[0]); if (!(P1 instanceof PointObject)) throw new ConstructionException(Zirkel.name("exception.type") + " " + params[0]); final ConstructionObject P2 = c.find(params[1]); if (P2 == null) throw new ConstructionException(Zirkel.name("exception.notfound") + " " + params[1]); if (!(P2 instanceof PointObject)) throw new ConstructionException(Zirkel.name("exception.type") + " " + params[1]); final MidpointObject s = new MidpointObject(c, (PointObject) P1, (PointObject) P2); if (!name.equals("")) s.setNameCheck(name); c.add(s); s.setDefaults(); } } ./src/rene/zirkel/constructors/CVS/RevisionCache/ExpressionConstructor.java#1.40000644000175000017500000001022111171326006026445 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: PointConstructor.java import java.awt.event.MouseEvent; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.objects.ExpressionObject; public class ExpressionConstructor extends ObjectConstructor { ExpressionObject O; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { final double x = zc.x(e.getX()), y = zc.y(e.getY()); final ExpressionObject o = new ExpressionObject(zc.getConstruction(), x, y); zc.addObject(o); o.setShowName(false); o.setDefaults(); zc.repaint(); Dragging = true; O = o; } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) return; O.move(zc.x(e.getX()), zc.y(e.getY())); zc.repaint(); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) return; Dragging = false; O.edit(zc); } @Override public boolean waitForPoint() { return false; } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Zirkel.name("message.expression", "Expression: Choose a place!")); } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Expression")) return false; final XmlTag tag = tree.getTag(); if (!tag.hasParam("x") || !tag.hasParam("y")) throw new ConstructionException("Expression coordinates missing!"); if (!tag.hasParam("value")) throw new ConstructionException(Zirkel.name("exception.expression")); final ExpressionObject p = new ExpressionObject(c, 0, 0); double x, y; try { x = new Expression(tag.getValue("x"), c, p).getValue(); y = new Expression(tag.getValue("y"), c, p).getValue(); p.move(x, y); } catch (final Exception e) { } p.setDefaults(); if (tag.hasParam("prompt")) p.setPrompt(tag.getValue("prompt")); if (tag.hasParam("fixed")) { p.setFixed(tag.getValue("x"), tag.getValue("y")); } p.setShowValue(tag.hasParam("showvalue")); setName(tag, p); set(tree, p); c.add(p); try { p.setExpression(tag.getValue("value"), c); } catch (final Exception e) { throw new ConstructionException(Zirkel.name("exception.expression")); } setConditionals(tree, c, p); if (tag.hasTrueParam("slider")) { try { p.setSlider(tag.getValue("min"), tag.getValue("max")); } catch (final Exception e) { throw new ConstructionException(Zirkel .name("exception.expression")); } } return true; } @Override public String getTag() { return "Expression"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams == 1) { final ExpressionObject o = new ExpressionObject(c, c.getX() + (Math.random() - 0.5) * c.getW(), c.getY() + (Math.random() - 0.5) * c.getW()); if (!name.equals("")) o.setNameCheck(name); c.add(o); o.setDefaults(); try { o.setExpression(params[0], c); } catch (final Exception e) { throw new ConstructionException(Zirkel .name("exception.expression")); } } else throw new ConstructionException(Zirkel.name("exception.nparams")); } @Override public boolean useSmartBoard() { return false; } }./src/rene/zirkel/constructors/CVS/RevisionCache/PointConstructor.java#1.60000644000175000017500000001660511133170060025410 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: PointConstructor.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; public class PointConstructor extends ObjectConstructor { boolean Fix; PointObject P; boolean ShowsValue, ShowsName; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); final PointObject o = zc.selectCreatePoint(e.getX(), e.getY(), false, true); Dragging = false; if (o == null) { return; } else if (o.isPointOn()) // cerate a point on an object { if (e.isShiftDown() && zc.isNewPoint()) { o.setUseAlpha(true); } } else if (o.moveable() && zc.isNewPoint() && !zc.showGrid()) // create // a new // point // and // let // it be // dragged { P = o; // P.setDefaults(); Fix = e.isShiftDown(); ShowsValue = P.showValue(); ShowsName = P.showName(); Dragging = true; zc.repaint(); } else if (o.moveable() && zc.isNewPoint() && zc.showGrid() && e.isShiftDown()) { P = o; // P.setDefaults(); try { P.setFixed("" + P.round(P.getX(), ZirkelCanvas.LengthsFactor), "" + P.round(P.getY(), ZirkelCanvas.LengthsFactor)); P.edit(zc); P.validate(); } catch (final Exception ex) { } } else if (e.isShiftDown() && !zc.isNewPoint()) // create a fixed point // at the position of a // selected point { final PointObject p = new PointObject(zc.getConstruction(), o .getX(), o.getY()); zc.addObject(p); // p.setDefaults(); p.setFixed(true); } } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) { return; } if (Global.getParameter("options.movename", false)) { P.setShowValue(true); P.setShowName(true); } P.move(zc.x(e.getX()), zc.y(e.getY())); zc.repaint(); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) { return; } Dragging = false; P.setShowValue(ShowsValue); P.setShowName(ShowsName); P.updateText(); zc.repaint(); if (Fix) { try { P.setFixed("" + P.round(P.getX(), ZirkelCanvas.LengthsFactor), "" + P.round(P.getY(), ZirkelCanvas.LengthsFactor)); if (rene.zirkel.Zirkel.IsApplet) { P.edit(zc); } else { eric.JGlobals.EditObject(P); } P.validate(); } catch (final Exception ex) { } } } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Zirkel.name("message.point", "Point: Set a point!")); } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Point")) { return false; } final XmlTag tag = tree.getTag(); if (!tag.hasParam("x") || !tag.hasParam("y")) { throw new ConstructionException("Point coordinates missing!"); } double x = 0, y = 0; try { if (tag.hasParam("actx")) { x = new Double(tag.getValue("actx")).doubleValue(); // System.out.println(x); } if (tag.hasParam("acty")) { y = new Double(tag.getValue("acty")).doubleValue(); } } catch (final Exception e) { } final PointObject p = new PointObject(c, x, y); try { x = new Expression(tag.getValue("x"), c, p).getValue(); y = new Expression(tag.getValue("y"), c, p).getValue(); p.move(x, y); } catch (final Exception e) { } setType(tag, p); setName(tag, p); set(tree, p); c.add(p); setConditionals(tree, c, p); if (tag.hasParam("fixed")) { p.setFixed(tag.getValue("x"), tag.getValue("y")); } if (tag.hasParam("increment")) { try { p.setIncrement(new Double(tag.getValue("increment")) .doubleValue()); } catch (final Exception e) { } } if (tag.hasParam("magnetobjs")) { // must manage the magnet list after the whole construction is // loaded (see zc.load) Construction.magnet.add(p); Construction.magnet.add(tag.getValue("magnetobjs")); p.setMagnetRayExp(tag.getValue("magnetd")); } return true; } static public void setType(final XmlTag tag, final PointObject p) { if (tag.hasParam("shape")) { final String s = tag.getValue("shape"); if (s.equals("square")) { p.setType(0); } if (s.equals("diamond")) { p.setType(1); } if (s.equals("circle")) { p.setType(2); } if (s.equals("dot")) { p.setType(3); } if (s.equals("cross")) { p.setType(4); } if (s.equals("dcross")) { p.setType(5); } } } @Override public String getTag() { return "Point"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams == 0) { final PointObject p = new PointObject(c, c.getX() + (Math.random() - 0.5) * c.getW(), c.getY() + (Math.random() - 0.5) * c.getW()); if (!name.equals("")) { p.setNameCheck(name); } c.add(p); p.setDefaults(); return; } if (nparams == 1) { final ConstructionObject o = c.find(params[0]); if (o == null) { throw new ConstructionException(Zirkel .name("exception.notfound") + " " + params[0]); } if (!(o instanceof PrimitiveLineObject) && !(o instanceof PrimitiveCircleObject)) { throw new ConstructionException(Zirkel.name("exception.type") + " " + params[0]); } final PointObject p = new PointObject(c, c.getX() + (Math.random() - 0.5) * c.getW(), c.getY() + (Math.random() - 0.5) * c.getW(), o); if (!name.equals("")) { p.setNameCheck(name); } c.add(p); p.setDefaults(); return; } if (nparams != 2) { throw new ConstructionException(Zirkel.name("exception.nparams")); } final Expression e1 = new Expression(params[0], c, null); final Expression e2 = new Expression(params[1], c, null); if (!e1.isValid() || !e2.isValid()) { throw new ConstructionException(Zirkel.name("exception.expression")); } final PointObject p = new PointObject(c, 0, 0); try { final double x = new Double(params[0]).doubleValue(); final double y = new Double(params[1]).doubleValue(); p.move(x, y); } catch (final Exception e) { p.setFixed(params[0], params[1]); } c.add(p); p.validate(); p.setDefaults(); if (!name.equals("")) { p.setNameCheck(name); } } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setPrompt(Zirkel.name("prompt.point")); } } ./src/rene/zirkel/constructors/CVS/RevisionCache/PointConstructor.java#1.70000644000175000017500000001655711134575717025442 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: PointConstructor.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; public class PointConstructor extends ObjectConstructor { boolean Fix; PointObject P; boolean ShowsValue, ShowsName; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); final PointObject o = zc.selectCreatePoint(e.getX(), e.getY(), false, true); Dragging = false; if (o == null) { return; } else if (o.isPointOn()) // cerate a point on an object { if (e.isShiftDown() && zc.isNewPoint()) { o.setUseAlpha(true); } } else if (o.moveable() && zc.isNewPoint() && !zc.showGrid()) // create // a new // point // and // let // it be // dragged { P = o; // P.setDefaults(); Fix = e.isShiftDown(); ShowsValue = P.showValue(); ShowsName = P.showName(); Dragging = true; zc.repaint(); } else if (o.moveable() && zc.isNewPoint() && zc.showGrid() && e.isShiftDown()) { P = o; // P.setDefaults(); try { P.setFixed("" + P.round(P.getX(), ZirkelCanvas.LengthsFactor), "" + P.round(P.getY(), ZirkelCanvas.LengthsFactor)); P.edit(zc); P.validate(); } catch (final Exception ex) { } } else if (e.isShiftDown() && !zc.isNewPoint()) // create a fixed point // at the position of a // selected point { final PointObject p = new PointObject(zc.getConstruction(), o .getX(), o.getY()); zc.addObject(p); // p.setDefaults(); p.setFixed(true); } } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) { return; } if (Global.getParameter("options.movename", false)) { P.setShowValue(true); P.setShowName(true); } P.move(zc.x(e.getX()), zc.y(e.getY())); zc.repaint(); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) { return; } Dragging = false; P.setShowValue(ShowsValue); P.setShowName(ShowsName); P.updateText(); zc.repaint(); if (Fix) { try { P.setFixed("" + P.round(P.getX(), ZirkelCanvas.LengthsFactor), "" + P.round(P.getY(), ZirkelCanvas.LengthsFactor)); if (rene.zirkel.Zirkel.IsApplet) { P.edit(zc); } else { eric.JGlobals.EditObject(P); } P.validate(); } catch (final Exception ex) { } } } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Zirkel.name("message.point", "Point: Set a point!")); } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Point")) { return false; } final XmlTag tag = tree.getTag(); if (!tag.hasParam("x") || !tag.hasParam("y")) { throw new ConstructionException("Point coordinates missing!"); } double x = 0, y = 0; try { if (tag.hasParam("actx")) { x = new Double(tag.getValue("actx")).doubleValue(); // System.out.println(x); } if (tag.hasParam("acty")) { y = new Double(tag.getValue("acty")).doubleValue(); } } catch (final Exception e) { } final PointObject p = new PointObject(c, x, y); try { x = new Expression(tag.getValue("x"), c, p).getValue(); y = new Expression(tag.getValue("y"), c, p).getValue(); p.move(x, y); } catch (final Exception e) { } setType(tag, p); setName(tag, p); set(tree, p); c.add(p); setConditionals(tree, c, p); if (tag.hasParam("fixed")) { p.setFixed(tag.getValue("x"), tag.getValue("y")); } if (tag.hasParam("increment")) { try { p.setIncrement(new Double(tag.getValue("increment")) .doubleValue()); } catch (final Exception e) { } } if (tag.hasParam("magnetobjs")) { // must manage the magnet list after the whole construction is // loaded (see zc.load) c.magnet.add(p); c.magnet.add(tag.getValue("magnetobjs")); p.setMagnetRayExp(tag.getValue("magnetd")); } return true; } static public void setType(final XmlTag tag, final PointObject p) { if (tag.hasParam("shape")) { final String s = tag.getValue("shape"); if (s.equals("square")) { p.setType(0); } if (s.equals("diamond")) { p.setType(1); } if (s.equals("circle")) { p.setType(2); } if (s.equals("dot")) { p.setType(3); } if (s.equals("cross")) { p.setType(4); } if (s.equals("dcross")) { p.setType(5); } } } @Override public String getTag() { return "Point"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams == 0) { final PointObject p = new PointObject(c, c.getX() + (Math.random() - 0.5) * c.getW(), c.getY() + (Math.random() - 0.5) * c.getW()); if (!name.equals("")) { p.setNameCheck(name); } c.add(p); p.setDefaults(); return; } if (nparams == 1) { final ConstructionObject o = c.find(params[0]); if (o == null) { throw new ConstructionException(Zirkel .name("exception.notfound") + " " + params[0]); } if (!(o instanceof PrimitiveLineObject) && !(o instanceof PrimitiveCircleObject)) { throw new ConstructionException(Zirkel.name("exception.type") + " " + params[0]); } final PointObject p = new PointObject(c, c.getX() + (Math.random() - 0.5) * c.getW(), c.getY() + (Math.random() - 0.5) * c.getW(), o); if (!name.equals("")) { p.setNameCheck(name); } c.add(p); p.setDefaults(); return; } if (nparams != 2) { throw new ConstructionException(Zirkel.name("exception.nparams")); } final Expression e1 = new Expression(params[0], c, null); final Expression e2 = new Expression(params[1], c, null); if (!e1.isValid() || !e2.isValid()) { throw new ConstructionException(Zirkel.name("exception.expression")); } final PointObject p = new PointObject(c, 0, 0); try { final double x = new Double(params[0]).doubleValue(); final double y = new Double(params[1]).doubleValue(); p.move(x, y); } catch (final Exception e) { p.setFixed(params[0], params[1]); } c.add(p); p.validate(); p.setDefaults(); if (!name.equals("")) { p.setNameCheck(name); } } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setPrompt(Zirkel.name("prompt.point")); } } ./src/rene/zirkel/constructors/CVS/RevisionCache/QuadricConstructor.java#1.30000644000175000017500000001142511132723277025714 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: QuadricConstructor.java import java.awt.event.MouseEvent; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.QuadricObject; public class QuadricConstructor extends ObjectConstructor { PointObject P[]; int NPoints; static PointObject previewPoint = null; static QuadricObject previewQuadric = null; public static void deletePreview(final ZirkelCanvas zc) { if (previewQuadric != null) { zc.delete(previewQuadric); previewPoint = null; previewQuadric = null; zc.reset(); } } private void arrangeP() { if (NPoints < 5) { P[4] = previewPoint; for (int i = 3; i >= NPoints; i--) { P[i] = P[0]; } } } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!zc.Visual) return; if (previewPoint == null) previewPoint = new PointObject(zc.getConstruction(), "PrevPoint"); if (previewQuadric != null) previewQuadric.setHidden(true); final PointObject p = zc.selectCreatePoint(e.getX(), e.getY()); if (previewQuadric != null) previewQuadric.setHidden(false); if (p != null) { P[NPoints++] = p; p.setSelected(true); arrangeP(); if (previewQuadric == null) { previewQuadric = new QuadricObject(zc.getConstruction(), P); zc.addObject(previewQuadric); } ; previewQuadric.setDefaults(); zc.repaint(); } showStatus(zc); if (NPoints == 5) { final QuadricObject Q = new QuadricObject(zc.getConstruction(), P); zc.addObject(Q); Q.setDefaults(); zc.clearSelected(); deletePreview(zc); } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { if (previewPoint != null) { previewQuadric.validate(); previewPoint.move(zc.x(e.getX()), zc.y(e.getY())); zc.repaint(); } super.mouseMoved(e, zc, simple); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Zirkel.name("message.quadric") + " " + (NPoints + 1)); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); if (zc.Visual) { P = new PointObject[5]; NPoints = 0; showStatus(zc); } else { zc.setPrompt(Zirkel.name("prompt.quadric")); } } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Quadric")) return false; final XmlTag tag = tree.getTag(); for (int i = 0; i < 5; i++) if (!tag.hasParam("point" + (i + 1))) throw new ConstructionException("Quadric points missing!"); try { final PointObject P[] = new PointObject[5]; for (int i = 0; i < 5; i++) P[i] = (PointObject) c.find(tag.getValue("point" + (i + 1))); final QuadricObject p = new QuadricObject(c, P); setName(tag, p); set(tree, p); c.add(p); setConditionals(tree, c, p); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Quadric points illegal!"); } return true; } public String getPrompt() { return Zirkel.name("prompt.quadric"); } @Override public String getTag() { return "Quadric"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams != 5) throw new ConstructionException(Zirkel.name("exception.nparams")); final ConstructionObject P[] = new PointObject[5]; for (int i = 0; i < 5; i++) { P[i] = c.find(params[i]); if (P[i] == null) throw new ConstructionException(Zirkel .name("exception.notfound") + " " + params[i]); if (!(P[i] instanceof PointObject)) throw new ConstructionException(Zirkel.name("exception.type") + " " + params[i]); } final QuadricObject s = new QuadricObject(c, (PointObject[]) P); if (!name.equals("")) s.setNameCheck(name); c.add(s); s.setDefaults(); } } ./src/rene/zirkel/constructors/CVS/RevisionCache/PointConstructor.java#1.30000644000175000017500000001666411134575755025437 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: PointConstructor.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; public class PointConstructor extends ObjectConstructor { boolean Fix; PointObject P; boolean ShowsValue, ShowsName; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); final PointObject o = zc.selectCreatePoint(e.getX(), e.getY(), false, true); Dragging = false; if (o == null) { return; } else if (o.isPointOn()) // cerate a point on an object { if (e.isShiftDown() && zc.isNewPoint()) { o.setUseAlpha(true); } } else if (o.moveable() && zc.isNewPoint() && !zc.showGrid()) // create // a new // point // and // let // it be // dragged { P = o; // P.setDefaults(); Fix = e.isShiftDown(); ShowsValue = P.showValue(); ShowsName = P.showName(); Dragging = true; zc.repaint(); } else if (o.moveable() && zc.isNewPoint() && zc.showGrid() && e.isShiftDown()) { P = o; // P.setDefaults(); try { P.setFixed("" + P.round(P.getX(), ZirkelCanvas.LengthsFactor), "" + P.round(P.getY(), ZirkelCanvas.LengthsFactor)); P.edit(zc); P.validate(); } catch (final Exception ex) { } } else if (e.isShiftDown() && !zc.isNewPoint()) // create a fixed point // at the position of a // selected point { final PointObject p = new PointObject(zc.getConstruction(), o .getX(), o.getY()); zc.addObject(p); // p.setDefaults(); p.setFixed(true); } } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) { return; } if (Global.getParameter("options.movename", false)) { P.setShowValue(true); P.setShowName(true); } P.move(zc.x(e.getX()), zc.y(e.getY())); zc.repaint(); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) { return; } Dragging = false; P.setShowValue(ShowsValue); P.setShowName(ShowsName); P.updateText(); zc.repaint(); if (Fix) { try { P.setFixed("" + P.round(P.getX(), ZirkelCanvas.LengthsFactor), "" + P.round(P.getY(), ZirkelCanvas.LengthsFactor)); if (rene.zirkel.Zirkel.IsApplet) { P.edit(zc); } else { eric.JGlobals.EditObject(P); } P.validate(); } catch (final Exception ex) { } } } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Zirkel.name("message.point", "Point: Set a point!")); } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Point")) { return false; } final XmlTag tag = tree.getTag(); if (!tag.hasParam("x") || !tag.hasParam("y")) { throw new ConstructionException("Point coordinates missing!"); } double x = 0, y = 0; try { if (tag.hasParam("actx")) { x = new Double(tag.getValue("actx")).doubleValue(); // System.out.println(x); } if (tag.hasParam("acty")) { y = new Double(tag.getValue("acty")).doubleValue(); } } catch (final Exception e) { } final PointObject p = new PointObject(c, x, y); try { x = new Expression(tag.getValue("x"), c, p).getValue(); y = new Expression(tag.getValue("y"), c, p).getValue(); p.move(x, y); } catch (final Exception e) { } setType(tag, p); setName(tag, p); set(tree, p); c.add(p); setConditionals(tree, c, p); if (tag.hasParam("fixed")) { p.setFixed(tag.getValue("x"), tag.getValue("y")); } if (tag.hasParam("increment")) { try { p.setIncrement(new Double(tag.getValue("increment")) .doubleValue()); } catch (final Exception e) { } } if (tag.hasParam("magnetobjs")) { // must manage the magnet list after the whole construction is // loaded (see c.readConstruction) c.magnet.add(p); c.magnet.add(tag.getValue("magnetobjs")); // p.setMagnetRay(Integer.parseInt(tag.getValue("magnetd"))); p.setMagnetRayExp(tag.getValue("magnetd")); } return true; } static public void setType(final XmlTag tag, final PointObject p) { if (tag.hasParam("shape")) { final String s = tag.getValue("shape"); if (s.equals("square")) { p.setType(0); } if (s.equals("diamond")) { p.setType(1); } if (s.equals("circle")) { p.setType(2); } if (s.equals("dot")) { p.setType(3); } if (s.equals("cross")) { p.setType(4); } if (s.equals("dcross")) { p.setType(5); } } } @Override public String getTag() { return "Point"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams == 0) { final PointObject p = new PointObject(c, c.getX() + (Math.random() - 0.5) * c.getW(), c.getY() + (Math.random() - 0.5) * c.getW()); if (!name.equals("")) { p.setNameCheck(name); } c.add(p); p.setDefaults(); return; } if (nparams == 1) { final ConstructionObject o = c.find(params[0]); if (o == null) { throw new ConstructionException(Zirkel .name("exception.notfound") + " " + params[0]); } if (!(o instanceof PrimitiveLineObject) && !(o instanceof PrimitiveCircleObject)) { throw new ConstructionException(Zirkel.name("exception.type") + " " + params[0]); } final PointObject p = new PointObject(c, c.getX() + (Math.random() - 0.5) * c.getW(), c.getY() + (Math.random() - 0.5) * c.getW(), o); if (!name.equals("")) { p.setNameCheck(name); } c.add(p); p.setDefaults(); return; } if (nparams != 2) { throw new ConstructionException(Zirkel.name("exception.nparams")); } final Expression e1 = new Expression(params[0], c, null); final Expression e2 = new Expression(params[1], c, null); if (!e1.isValid() || !e2.isValid()) { throw new ConstructionException(Zirkel.name("exception.expression")); } final PointObject p = new PointObject(c, 0, 0); try { final double x = new Double(params[0]).doubleValue(); final double y = new Double(params[1]).doubleValue(); p.move(x, y); } catch (final Exception e) { p.setFixed(params[0], params[1]); } c.add(p); p.validate(); p.setDefaults(); if (!name.equals("")) { p.setNameCheck(name); } } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setPrompt(Zirkel.name("prompt.point")); } } ./src/rene/zirkel/constructors/CVS/RevisionCache/PointConstructor.java#1.50000644000175000017500000001672111133146022025407 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: PointConstructor.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; public class PointConstructor extends ObjectConstructor { boolean Fix; PointObject P; boolean ShowsValue, ShowsName; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { zc.y(e.getY()); final PointObject o = zc.selectCreatePoint(e.getX(), e.getY(), false, true); Dragging = false; if (o == null) { return; } else if (o.isPointOn()) // cerate a point on an object { if (e.isShiftDown() && zc.isNewPoint()) { o.setUseAlpha(true); } } else if (o.moveable() && zc.isNewPoint() && !zc.showGrid()) // create // a new // point // and // let // it be // dragged { P = o; // P.setDefaults(); Fix = e.isShiftDown(); ShowsValue = P.showValue(); ShowsName = P.showName(); Dragging = true; zc.repaint(); } else if (o.moveable() && zc.isNewPoint() && zc.showGrid() && e.isShiftDown()) { P = o; // P.setDefaults(); try { P.setFixed("" + P.round(P.getX(), ZirkelCanvas.LengthsFactor), "" + P.round(P.getY(), ZirkelCanvas.LengthsFactor)); P.edit(zc); P.validate(); } catch (final Exception ex) { } } else if (e.isShiftDown() && !zc.isNewPoint()) // create a fixed point // at the position of a // selected point { final PointObject p = new PointObject(zc.getConstruction(), o .getX(), o.getY()); zc.addObject(p); // p.setDefaults(); p.setFixed(true); } } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) { return; } if (Global.getParameter("options.movename", false)) { P.setShowValue(true); P.setShowName(true); } P.move(zc.x(e.getX()), zc.y(e.getY())); zc.repaint(); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) { return; } Dragging = false; P.setShowValue(ShowsValue); P.setShowName(ShowsName); P.updateText(); zc.repaint(); if (Fix) { try { P.setFixed("" + P.round(P.getX(), ZirkelCanvas.LengthsFactor), "" + P.round(P.getY(), ZirkelCanvas.LengthsFactor)); if (rene.zirkel.Zirkel.IsApplet) { P.edit(zc); } else { eric.JGlobals.EditObject(P); } P.validate(); } catch (final Exception ex) { } } } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Zirkel.name("message.point", "Point: Set a point!")); } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Point")) { return false; } final XmlTag tag = tree.getTag(); if (!tag.hasParam("x") || !tag.hasParam("y")) { throw new ConstructionException("Point coordinates missing!"); } double x = 0, y = 0; try { if (tag.hasParam("actx")) { x = new Double(tag.getValue("actx")).doubleValue(); // System.out.println(x); } if (tag.hasParam("acty")) { y = new Double(tag.getValue("acty")).doubleValue(); } } catch (final Exception e) { } final PointObject p = new PointObject(c, x, y); try { x = new Expression(tag.getValue("x"), c, p).getValue(); y = new Expression(tag.getValue("y"), c, p).getValue(); p.move(x, y); } catch (final Exception e) { } setType(tag, p); setName(tag, p); set(tree, p); c.add(p); setConditionals(tree, c, p); if (tag.hasParam("fixed")) { p.setFixed(tag.getValue("x"), tag.getValue("y")); } if (tag.hasParam("increment")) { try { p.setIncrement(new Double(tag.getValue("increment")) .doubleValue()); } catch (final Exception e) { } } if (tag.hasParam("magnetobjs")) { // must manage the magnet list after the whole construction is // loaded (see c.readConstruction) Construction.magnet.add(p); Construction.magnet.add(tag.getValue("magnetobjs")); // p.setMagnetRay(Integer.parseInt(tag.getValue("magnetd"))); p.setMagnetRayExp(tag.getValue("magnetd")); } return true; } static public void setType(final XmlTag tag, final PointObject p) { if (tag.hasParam("shape")) { final String s = tag.getValue("shape"); if (s.equals("square")) { p.setType(0); } if (s.equals("diamond")) { p.setType(1); } if (s.equals("circle")) { p.setType(2); } if (s.equals("dot")) { p.setType(3); } if (s.equals("cross")) { p.setType(4); } if (s.equals("dcross")) { p.setType(5); } } } @Override public String getTag() { return "Point"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams == 0) { final PointObject p = new PointObject(c, c.getX() + (Math.random() - 0.5) * c.getW(), c.getY() + (Math.random() - 0.5) * c.getW()); if (!name.equals("")) { p.setNameCheck(name); } c.add(p); p.setDefaults(); return; } if (nparams == 1) { final ConstructionObject o = c.find(params[0]); if (o == null) { throw new ConstructionException(Zirkel .name("exception.notfound") + " " + params[0]); } if (!(o instanceof PrimitiveLineObject) && !(o instanceof PrimitiveCircleObject)) { throw new ConstructionException(Zirkel.name("exception.type") + " " + params[0]); } final PointObject p = new PointObject(c, c.getX() + (Math.random() - 0.5) * c.getW(), c.getY() + (Math.random() - 0.5) * c.getW(), o); if (!name.equals("")) { p.setNameCheck(name); } c.add(p); p.setDefaults(); return; } if (nparams != 2) { throw new ConstructionException(Zirkel.name("exception.nparams")); } final Expression e1 = new Expression(params[0], c, null); final Expression e2 = new Expression(params[1], c, null); if (!e1.isValid() || !e2.isValid()) { throw new ConstructionException(Zirkel.name("exception.expression")); } final PointObject p = new PointObject(c, 0, 0); try { final double x = new Double(params[0]).doubleValue(); final double y = new Double(params[1]).doubleValue(); p.move(x, y); } catch (final Exception e) { p.setFixed(params[0], params[1]); } c.add(p); p.validate(); p.setDefaults(); if (!name.equals("")) { p.setNameCheck(name); } } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); zc.setPrompt(Zirkel.name("prompt.point")); } } ./src/rene/zirkel/constructors/CVS/RevisionCache/ObjectConstructor.java#1.40000644000175000017500000001603511171724674025542 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: ObjectConstructor.java import java.awt.event.MouseEvent; import java.util.Enumeration; import rene.util.xml.XmlTag; import rene.util.xml.XmlTagText; import rene.util.xml.XmlTree; import rene.zirkel.ZirkelCanvas; import rene.zirkel.ZirkelFrame; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.objects.ConstructionObject; public class ObjectConstructor { protected boolean Dragging = false; public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { } public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { } public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { } public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { if (simple && (waitForPoint() || waitForLastPoint())) { zc.indicateCreatePoint(e.getX(), e.getY(), false); return; } if (waitForPoint()) { zc.indicateCreatePoint(e.getX(), e.getY(), false); } if (waitForLastPoint()) { if (zc.isPreview()) { zc.movePreview(e); } else { zc.prepareForPreview(e); finishConstruction(e, zc); return; } } } public void finishConstruction(final MouseEvent e, final ZirkelCanvas zc) { } public boolean waitForLastPoint() { return false; } public boolean waitForPoint() { return true; } public void reset(final ZirkelCanvas zc) { zc.validate(); zc.clearSelected(); } public void resetFirstTime(final ZirkelCanvas zc) { reset(zc); } public void invalidate(final ZirkelCanvas zc) { } public void showStatus(final ZirkelCanvas zc) { } public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { return false; } public boolean testTree(final XmlTree t, final String tag) { return t.getTag().name().equals(tag); } public void setName(final XmlTag tag, final ConstructionObject o) { if (tag.hasParam("name")) { o.setName(tag.getValue("name")); } if (tag.hasParam("alias")) { o.setAlias(tag.getValue("alias")); } } public void set(XmlTree tree, final ConstructionObject o) throws ConstructionException { final XmlTag tag = tree.getTag(); if (tag.hasParam("n")) { try { o.setNCount(new Integer(tag.getValue("n")).intValue()); o.setGotNCount(true); } catch (final Exception ex) { throw new ConstructionException("Illegal count!"); } } if (tag.hasParam("hidden")) { if (tag.getValue("hidden").equals("super")) { o.setSuperHidden(true); } else { o.setHidden(true); } } if (tag.hasTrueParam("tracked")) { o.setTracked(true); } if (tag.hasTrueParam("showvalue")) { o.setShowValue(true); } if (tag.hasTrueParam("showname")) { o.setShowName(true); } if (tag.hasTrueParam("background")) { o.setBack(true); } else { o.setBack(false); } if (tag.hasTrueParam("parameter")) { o.setParameter(); } if (tag.hasTrueParam("mainparameter")) { o.setMainParameter(); } if (tag.hasTrueParam("target")) { o.setTarget(true); } if (tag.hasTrueParam("break")) { o.setBreak(true); } if (tag.hasTrueParam("hidebreak")) { o.setHideBreak(true); } if (tag.hasTrueParam("solid")) { o.setSolid(true); } if (tag.hasTrueParam("bold")) { o.setBold(true); } if (tag.hasTrueParam("large")) { o.setLarge(true); } if (tag.hasParam("xoffset") || tag.hasParam("yoffset")) { int x = 0, y = 0; try { if (tag.hasParam("xoffset")) { x = Integer.parseInt(tag.getValue("xoffset")); } if (tag.hasParam("yoffset")) { y = Integer.parseInt(tag.getValue("yoffset")); } o.setOffset(x, y); } catch (final Exception e) { throw new ConstructionException("Illegal offset value"); } } if (tag.hasTrueParam("keepclose")) { o.setKeepClose(true); } if (tag.hasParam("xcoffset") || tag.hasParam("ycoffset")) { double x = 0, y = 0; try { if (tag.hasParam("xcoffset")) { x = new Double(tag.getValue("xcoffset")).doubleValue(); } if (tag.hasParam("ycoffset")) { y = new Double(tag.getValue("ycoffset")).doubleValue(); } o.setcOffset(x, y); } catch (final Exception e) { throw new ConstructionException("Illegal offset value"); } } if (tag.hasParam("color")) { try { final String s = tag.getValue("color"); int n = -1; for (int i = 0; i < ZirkelFrame.ColorStrings.length; i++) { if (s.equals(ZirkelFrame.ColorStrings[i])) { o.setColor(i); n = i; break; } } if (n < 0) { n = Integer.parseInt(s); if (n < 0 || n >= ZirkelFrame.Colors.length) { throw new Exception(""); } o.setColor(n); } } catch (final Exception ex) { throw new ConstructionException("Illegal color index (1-" + (ZirkelFrame.Colors.length - 1) + ")"); } } if (tag.hasParam("scolor")) { o.setSpecialColor(eric.JGlobals.getColor(tag.getValue("scolor"))); } if (tag.hasParam("type")) { final String type = tag.getValue("type"); if (type.equals("thick")) { o.setColorType(ConstructionObject.THICK); } if (type.equals("thin")) { o.setColorType(ConstructionObject.THIN); } if (type.equals("invisible")) { o.setColorType(ConstructionObject.INVISIBLE); } } if (tag.hasParam("unit")) { o.setUnit(tag.getValue("unit")); } else { o.setUnit(""); } final Enumeration e = tree.getContent(); while (e.hasMoreElements()) { tree = (XmlTree) e.nextElement(); if (tree.getTag() instanceof XmlTagText) { o.setText(((XmlTagText) tree.getTag()).getContent(), true); } } } public void setConditionals(final XmlTree tree, final Construction c, final ConstructionObject o) { o.clearConditionals(); int i = 0; final XmlTag tag = tree.getTag(); while (tag.hasParam("ctag" + i) && tag.hasParam("cexpr" + i)) { final String t = tag.getValue("ctag" + i); final String e = tag.getValue("cexpr" + i); final Expression ex = new Expression(e, c, o); o.addConditional(t, ex); i++; } } public String getTag() { return "???"; } public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { throw new ConstructionException(""); } // for MetaMover : public void pause(final boolean flag) { } public boolean useSmartBoard() { return true; } } ./src/rene/zirkel/constructors/CVS/RevisionCache/RayConstructor.java#1.40000644000175000017500000000672011172100552025047 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: RayConstructor.java import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.RayObject; public class RayConstructor extends LineConstructor { @Override public ConstructionObject create(final Construction c, final PointObject p1, final PointObject p2) { return new RayObject(c, p1, p2); } @Override public void showStatus(final ZirkelCanvas zc) { if (P1 == null) zc.showStatus(Zirkel.name("message.ray.first", "Ray: Set the root point!")); else zc.showStatus(Zirkel.name("message.ray.second", "Ray: Set the second point!")); } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Ray")) return false; final XmlTag tag = tree.getTag(); if (!tag.hasParam("from") || !tag.hasParam("to")) throw new ConstructionException("Ray points missing!"); try { final PointObject p1 = (PointObject) c.find(tag.getValue("from")); final PointObject p2 = (PointObject) c.find(tag.getValue("to")); final RayObject o = new RayObject(c, p1, p2); if (tag.hasParam("partial")) o.setPartial(true); setName(tag, o); set(tree, o); c.add(o); setConditionals(tree, c, o); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { e.printStackTrace(); throw new ConstructionException("Ray points illegal!"); } return true; } @Override public String getPrompt() { return Zirkel.name("prompt.ray"); } @Override public String getTag() { return "Ray"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams != 2) throw new ConstructionException(Zirkel.name("exception.nparams")); final ConstructionObject P1 = c.find(params[0]); if (P1 == null) throw new ConstructionException(Zirkel.name("exception.notfound") + " " + params[0]); final ConstructionObject P2 = c.find(params[1]); if (P2 == null) throw new ConstructionException(Zirkel.name("exception.notfound") + " " + params[1]); if (!(P1 instanceof PointObject)) throw new ConstructionException(Zirkel.name("exception.type") + " " + params[0]); if (!(P2 instanceof PointObject)) throw new ConstructionException(Zirkel.name("exception.type") + " " + params[1]); final RayObject s = new RayObject(c, (PointObject) P1, (PointObject) P2); c.add(s); s.setDefaults(); if (!name.equals("")) s.setNameCheck(name); } } ./src/rene/zirkel/constructors/CVS/RevisionCache/LineConstructor.java#1.40000644000175000017500000001543111171722354025213 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: LineConstructor.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.macro.Macro; import rene.zirkel.objects.AxisObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.LineObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveLineObject; public class LineConstructor extends ObjectConstructor { PointObject P1 = null, P2 = null; ConstructionObject O; boolean Fix; boolean ShowsValue, ShowsName, Moved; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!zc.Visual) { return; } if (P1 == null) { P1 = select(e.getX(), e.getY(), zc); if (P1 != null) { P1.setSelected(true); zc.repaint(); } showStatus(zc); } else { P2 = select(e.getX(), e.getY(), zc); if (P2 != null) { if (P2 == P1) { P2 = null; return; } final ConstructionObject o = create(zc.getConstruction(), P1, P2); zc.addObject(o); o.setDefaults(); Fix = e.isShiftDown() || isFixed(); if (P2.moveable() && !P2.isPointOn() && zc.isNewPoint()) { Dragging = true; Moved = false; O = o; ShowsValue = o.showValue(); ShowsName = o.showName(); if ((Fix && Global .getParameter("options.movefixname", true)) || (!Fix && Global.getParameter("options.movename", false))) { o.setShowValue(true); o.setShowName(true); } } else { Dragging = false; if (Fix) { setFixed(zc, o); } P1 = P2 = null; zc.clearSelected(); showStatus(zc); } } else { Dragging = false; } } } @Override public boolean waitForLastPoint() { return P1 != null && P2 == null; } @Override public void finishConstruction(final MouseEvent e, final ZirkelCanvas zc) { P2 = select(e.getX(), e.getY(), zc); if (P2 != null) { final ConstructionObject o = create(zc.getConstruction(), P1, P2); zc.addObject(o); o.setDefaults(); zc.validate(); zc.repaint(); P2 = null; } } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) { return; } else { Moved = true; P2.move(zc.x(e.getX()), zc.y(e.getY())); zc.validate(); zc.repaint(); } } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) { return; } Dragging = false; O.setShowValue(ShowsValue); O.setShowName(ShowsName); if (Fix) { O.round(); } zc.repaint(); if (Fix && !Moved) { setFixed(zc, O); } reset(zc); } public boolean isFixed() { return false; } public void setFixed(final ZirkelCanvas zc, final ConstructionObject o) { } public PointObject select(final int x, final int y, final ZirkelCanvas zc) { return zc.selectCreatePoint(x, y); } public ConstructionObject create(final Construction c, final PointObject p1, final PointObject p2) { return new LineObject(c, p1, p2); } @Override public void reset(final ZirkelCanvas zc) { if (!zc.Visual) { zc.setPrompt(getPrompt()); } else { zc.clearSelected(); P1 = P2 = null; showStatus(zc); } } public String getPrompt() { return Zirkel.name("prompt.line"); } @Override public void showStatus(final ZirkelCanvas zc) { if (P1 == null) { zc.showStatus(Zirkel.name("message.line.first", "Line: Set the first point!")); } else { zc.showStatus(Zirkel.name("message.line.second", "Line: Set the second point!")); } } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Line")) { return false; } final XmlTag tag = tree.getTag(); if (tag.hasParam("xaxis")) { final AxisObject o = new AxisObject(c, true); setName(tag, o); set(tree, o); c.add(o); c.xAxis = o; return true; } if (tag.hasParam("yaxis")) { final AxisObject o = new AxisObject(c, false); setName(tag, o); set(tree, o); c.add(o); c.yAxis = o; return true; } if (!tag.hasParam("from") || !tag.hasParam("to")) { if (!(c instanceof Macro)) { throw new ConstructionException("Line points missing!"); } final PrimitiveLineObject o = new PrimitiveLineObject(c); setName(tag, o); set(tree, o); c.add(o); setConditionals(tree, c, o); } else { try { final PointObject p1 = (PointObject) c.find(tag .getValue("from")); final PointObject p2 = (PointObject) c.find(tag.getValue("to")); final LineObject o = new LineObject(c, p1, p2); if (tag.hasParam("partial")) { o.setPartial(true); } setName(tag, o); set(tree, o); c.add(o); setConditionals(tree, c, o); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Line points illegal!"); } } return true; } @Override public String getTag() { return "Line"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams != 2) { throw new ConstructionException(Zirkel.name("exception.nparams")); } final ConstructionObject P1 = c.find(params[0]); if (P1 == null) { throw new ConstructionException(Zirkel.name("exception.notfound") + " " + params[0]); } final ConstructionObject P2 = c.find(params[1]); if (P2 == null) { throw new ConstructionException(Zirkel.name("exception.notfound") + " " + params[1]); } if (!(P1 instanceof PointObject)) { throw new ConstructionException(Zirkel.name("exception.type") + " " + params[0]); } if (!(P2 instanceof PointObject)) { throw new ConstructionException(Zirkel.name("exception.type") + " " + params[1]); } final LineObject s = new LineObject(c, (PointObject) P1, (PointObject) P2); c.add(s); s.setDefaults(); if (!name.equals("")) { s.setNameCheck(name); } } } ./src/rene/zirkel/constructors/CVS/RevisionCache/PointConstructor.java#1.20000644000175000017500000002157311134575763025430 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: PointConstructor.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; public class PointConstructor extends ObjectConstructor { boolean Fix; PointObject P; boolean ShowsValue, ShowsName; public void mousePressed(MouseEvent e, ZirkelCanvas zc) { double x = zc.x(e.getX()), y = zc.y(e.getY()); PointObject o = zc.selectCreatePoint(e.getX(), e.getY(), false, true); Dragging = false; if (o == null) { return; } else if (o.isPointOn()) // cerate a point on an object { if (e.isShiftDown() && zc.isNewPoint()) { o.setUseAlpha(true); } } else if (o.moveable() && zc.isNewPoint() && !zc.showGrid()) // create a new point and let it be dragged { P = o; // P.setDefaults(); Fix = e.isShiftDown(); ShowsValue = P.showValue(); ShowsName = P.showName(); Dragging = true; zc.repaint(); } else if (o.moveable() && zc.isNewPoint() && zc.showGrid() && e.isShiftDown()) { P = o; // P.setDefaults(); try { P.setFixed("" + P.round(P.getX(), ZirkelCanvas.LengthsFactor), "" + P.round(P.getY(), ZirkelCanvas.LengthsFactor)); P.edit(zc); P.validate(); } catch (Exception ex) { } } else if (e.isShiftDown() && !zc.isNewPoint()) // create a fixed point at the position of a selected point { PointObject p = new PointObject(zc.getConstruction(), o.getX(), o.getY()); zc.addObject(p); // p.setDefaults(); p.setFixed(true); } } public void mouseDragged(MouseEvent e, ZirkelCanvas zc) { if (!Dragging) { return; } if (Global.getParameter("options.movename", false)) { P.setShowValue(true); P.setShowName(true); } P.move(zc.x(e.getX()), zc.y(e.getY())); zc.repaint(); } public void mouseReleased(MouseEvent e, ZirkelCanvas zc) { if (!Dragging) { return; } Dragging = false; P.setShowValue(ShowsValue); P.setShowName(ShowsName); P.updateText(); zc.repaint(); if (Fix) { try { P.setFixed("" + P.round(P.getX(), ZirkelCanvas.LengthsFactor), "" + P.round(P.getY(), ZirkelCanvas.LengthsFactor)); if (rene.zirkel.Zirkel.IsApplet) { P.edit(zc); } else { eric.JGlobals.EditObject(P); } P.validate(); } catch (Exception ex) { } } } public void showStatus(ZirkelCanvas zc) { zc.showStatus( Zirkel.name("message.point", "Point: Set a point!")); } public boolean construct(XmlTree tree, Construction c) throws ConstructionException { if (!testTree(tree, "Point")) { return false; } XmlTag tag = tree.getTag(); if (!tag.hasParam("x") || !tag.hasParam("y")) { throw new ConstructionException("Point coordinates missing!"); } double x = 0, y = 0; try { if (tag.hasParam("actx")) { x = new Double(tag.getValue("actx")).doubleValue(); // System.out.println(x); } if (tag.hasParam("acty")) { y = new Double(tag.getValue("acty")).doubleValue(); } } catch (Exception e) { } PointObject p = new PointObject(c, x, y); try { x = new Expression(tag.getValue("x"), c, p).getValue(); y = new Expression(tag.getValue("y"), c, p).getValue(); p.move(x, y); } catch (Exception e) { } setType(tag, p); setName(tag, p); set(tree, p); c.add(p); setConditionals(tree, c, p); if (tag.hasParam("fixed")) { p.setFixed(tag.getValue("x"), tag.getValue("y")); } if (tag.hasParam("increment")) { try { p.setIncrement(new Double(tag.getValue("increment")).doubleValue()); } catch (Exception e) { } } if (tag.hasParam("magnetobjs")) { // must manage the magnet list after the whole construction is loaded (see c.readConstruction) c.magnet.add(p); c.magnet.add(tag.getValue("magnetobjs")); // p.setMagnetRay(Integer.parseInt(tag.getValue("magnetd"))); p.setMagnetRayExp(tag.getValue("magnetd")); } return true; } static public void setType(XmlTag tag, PointObject p) { if (tag.hasParam("shape")) { String s = tag.getValue("shape"); if (s.equals("square")) { p.setType(0); } if (s.equals("diamond")) { p.setType(1); } if (s.equals("circle")) { p.setType(2); } if (s.equals("dot")) { p.setType(3); } if (s.equals("cross")) { p.setType(4); } if (s.equals("dcross")) { p.setType(5); } } } public String getTag() { return "Point"; } public void construct(Construction c, String name, String params[], int nparams) throws ConstructionException { if (nparams == 0) { PointObject p = new PointObject(c, c.getX() + (Math.random() - 0.5) * c.getW(), c.getY() + (Math.random() - 0.5) * c.getW()); if (!name.equals("")) { p.setNameCheck(name); } c.add(p); p.setDefaults(); return; } if (nparams == 1) { ConstructionObject o = c.find(params[0]); if (o == null) { throw new ConstructionException(Zirkel.name("exception.notfound") + " " + params[0]); } if (!(o instanceof PrimitiveLineObject) && !(o instanceof PrimitiveCircleObject)) { throw new ConstructionException(Zirkel.name("exception.type") + " " + params[0]); } PointObject p = new PointObject(c, c.getX() + (Math.random() - 0.5) * c.getW(), c.getY() + (Math.random() - 0.5) * c.getW(), o); if (!name.equals("")) { p.setNameCheck(name); } c.add(p); p.setDefaults(); return; } if (nparams != 2) { throw new ConstructionException(Zirkel.name("exception.nparams")); } Expression e1 = new Expression(params[0], c, null); Expression e2 = new Expression(params[1], c, null); if (!e1.isValid() || !e2.isValid()) { throw new ConstructionException(Zirkel.name("exception.expression")); } PointObject p = new PointObject(c, 0, 0); try { double x = new Double(params[0]).doubleValue(); double y = new Double(params[1]).doubleValue(); p.move(x, y); } catch (Exception e) { p.setFixed(params[0], params[1]); } c.add(p); p.validate(); p.setDefaults(); if (!name.equals("")) { p.setNameCheck(name); } } public void reset(ZirkelCanvas zc) { super.reset(zc); zc.setPrompt(Zirkel.name("prompt.point")); } } ./src/rene/zirkel/constructors/CVS/RevisionCache/QuadricConstructor.java#1.50000644000175000017500000001143311360624036025711 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: QuadricConstructor.java import java.awt.event.MouseEvent; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.QuadricObject; public class QuadricConstructor extends ObjectConstructor { PointObject P[]; int NPoints; static PointObject previewPoint = null; static QuadricObject previewQuadric = null; public static void deletePreview(final ZirkelCanvas zc) { if (previewQuadric != null) { zc.delete(previewQuadric); previewPoint = null; previewQuadric = null; zc.reset(); } } private void arrangeP() { if (NPoints < 5) { P[4] = previewPoint; for (int i = 3; i >= NPoints; i--) { P[i] = P[0]; } } } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!zc.Visual) return; if (previewPoint == null) previewPoint = new PointObject(zc.getConstruction(), "PrevPoint"); if (previewQuadric != null) previewQuadric.setHidden(true); final PointObject p = zc.selectCreatePoint(e.getX(), e.getY()); if (previewQuadric != null) previewQuadric.setHidden(false); if (p != null) { P[NPoints++] = p; p.setSelected(true); arrangeP(); if (previewQuadric == null) { previewQuadric = new QuadricObject(zc.getConstruction(), P); zc.addObject(previewQuadric); } previewQuadric.setDefaults(); zc.repaint(); } showStatus(zc); if (NPoints == 5) { final QuadricObject Q = new QuadricObject(zc.getConstruction(), P); zc.addObject(Q); Q.setDefaults(); zc.clearSelected(); deletePreview(zc); } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { if (previewPoint != null) { previewQuadric.validate(); previewPoint.move(zc.x(e.getX()), zc.y(e.getY())); zc.repaint(); } super.mouseMoved(e, zc, simple); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Zirkel.name("message.quadric") + " " + (NPoints + 1)); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); if (zc.Visual) { P = new PointObject[5]; NPoints = 0; showStatus(zc); } else { zc.setPrompt(Zirkel.name("prompt.quadric")); } } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Quadric")) return false; final XmlTag tag = tree.getTag(); for (int i = 0; i < 5; i++) if (!tag.hasParam("point" + (i + 1))) throw new ConstructionException("Quadric points missing!"); try { final PointObject P[] = new PointObject[5]; for (int i = 0; i < 5; i++) P[i] = (PointObject) c.find(tag.getValue("point" + (i + 1))); final QuadricObject p = new QuadricObject(c, P); setName(tag, p); set(tree, p); c.add(p); setConditionals(tree, c, p); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Quadric points illegal!"); } return true; } public String getPrompt() { return Zirkel.name("prompt.quadric"); } @Override public String getTag() { return "Quadric"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams != 5) throw new ConstructionException(Zirkel.name("exception.nparams")); final ConstructionObject P[] = new PointObject[5]; for (int i = 0; i < 5; i++) { P[i] = c.find(params[i]); if (P[i] == null) throw new ConstructionException(Zirkel .name("exception.notfound") + " " + params[i]); if (!(P[i] instanceof PointObject)) throw new ConstructionException(Zirkel.name("exception.type") + " " + params[i]); } final QuadricObject s = new QuadricObject(c, (PointObject[]) P); if (!name.equals("")) s.setNameCheck(name); c.add(s); s.setDefaults(); } } ./src/rene/zirkel/constructors/CVS/RevisionCache/AreaConstructor.java#1.50000644000175000017500000001207711360624057025201 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: PointConstructor.java import java.awt.event.MouseEvent; import java.util.Enumeration; import java.util.Vector; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.AreaObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; public class AreaConstructor extends ObjectConstructor { Vector Points = new Vector(); static PointObject previewPoint = null; static AreaObject previewArea = null; public static void deletePreview(final ZirkelCanvas zc) { if (previewArea != null) { zc.delete(previewArea); previewPoint = null; previewArea = null; zc.reset(); } } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!zc.Visual) { return; } if (previewPoint == null) { previewPoint = new PointObject(zc.getConstruction(), "PrevPoint"); } if (previewArea == null) { previewArea = new AreaObject(zc.getConstruction(), Points); zc.addObject(previewArea); previewArea.setDefaults(); if (!previewArea.isSolid()) { previewArea.setBack(true); } } final double x = zc.x(e.getX()), y = zc.y(e.getY()); Points.remove(previewPoint); final PointObject P = zc.selectCreatePoint(e.getX(), e.getY()); previewPoint.move(x, y); if (P != null) { P.setSelected(true); final Enumeration en = Points.elements(); while (en.hasMoreElements()) { if (en.nextElement() == P) { // if (Points.size()<3) zc.delete(previewArea); // previewPoint=null; // previewArea=null; // reset(zc); if (Points.size() >= 3) { final AreaObject o = new AreaObject(zc .getConstruction(), Points); zc.addObject(o); o.setDefaults(); if (!o.isSolid()) { o.setBack(true); } } deletePreview(zc); // reset(zc); return; } } Points.addElement(P); Points.addElement(previewPoint); previewArea.validate(); previewArea.setDefaults(); zc.repaint(); } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { if (Points.size() >= 1) { previewPoint.move(zc.x(e.getX()), zc.y(e.getY())); previewArea.setDefaults(); zc.repaint(); } super.mouseMoved(e, zc, simple); } @Override public String getTag() { return "Polygon"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams < 3) { throw new ConstructionException(Zirkel.name("exception.nparams")); } final Vector v = new Vector(); for (int i = 0; i < nparams; i++) { final ConstructionObject o = c.find(params[i]); if (o == null) { throw new ConstructionException(Zirkel .name("exception.notfound") + " " + params[i]); } if (!(o instanceof PointObject)) { throw new ConstructionException(Zirkel.name("exception.type") + " " + params[i]); } v.addElement(o); } final AreaObject o = new AreaObject(c, v); if (!name.equals("")) { o.setNameCheck(name); } c.add(o); o.setDefaults(); o.setBack(true); } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Polygon")) { return false; } final XmlTag tag = tree.getTag(); try { int i = 1; final Vector v = new Vector(); while (true) { final PointObject p = (PointObject) c.find(tag.getValue("point" + i)); if (p == null) { break; } v.addElement(p); i++; } final AreaObject o = new AreaObject(c, v); o.setBack(true); setName(tag, o); set(tree, o); c.add(o); setConditionals(tree, c, o); if (tag.hasParam("filled")) o.setFilled(false); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Polygon parameters illegal!"); } return true; } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Zirkel.name("message.area")); zc.setPrompt("=" + Zirkel.name("prompt.area")); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); Points = new Vector(); zc.showStatus(Zirkel.name("message.area")); } } ./src/rene/zirkel/constructors/CVS/RevisionCache/ImageConstructor.java#1.40000644000175000017500000000663111343245014025342 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; import java.awt.event.MouseEvent; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ImageObject; import rene.zirkel.objects.PointObject; public class ImageConstructor extends ObjectConstructor { PointObject P[]; int NPoints; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!zc.Visual) return; final PointObject p = zc.selectCreatePoint(e.getX(), e.getY()); if (p != null) { P[NPoints++] = p; p.setSelected(true); zc.repaint(); } showStatus(zc); if (NPoints == 3) { final String filename = zc.loadImage(); if (filename.equals("")) { reset(zc); return; } final ImageObject o = new ImageObject(zc.getConstruction(), P, filename); zc.addObject(o); zc.clearSelected(); reset(zc); zc.repaint(); } } @Override public void showStatus(final ZirkelCanvas zc) { if (NPoints <= 1) zc.showStatus(ConstructionObject.text1( Zirkel.name("message.image"), "" + (NPoints + 1))); else zc.showStatus(Zirkel.name("message.image.last")); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); if (zc.Visual) { P = new PointObject[3]; NPoints = 0; showStatus(zc); } else { zc.setPrompt(Zirkel.name("prompt.image")); } } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Image")) return false; final XmlTag tag = tree.getTag(); for (int i = 0; i < 3; i++) if (!tag.hasParam("point" + (i + 1))) throw new ConstructionException("Image points missing!"); if (!tag.hasParam("filename")) throw new ConstructionException("Image filename missing!"); try { final PointObject P[] = new PointObject[3]; for (int i = 0; i < 3; i++) P[i] = (PointObject) c.find(tag.getValue("point" + (i + 1))); final String filename = tag.getValue("filename"); final ImageObject p = new ImageObject(c, P, filename); setName(tag, p); set(tree, p); c.add(p); setConditionals(tree, c, p); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Image points illegal!"); } return true; } public String getPrompt() { return Zirkel.name("prompt.image"); } @Override public String getTag() { return "Image"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { } } ./src/rene/zirkel/constructors/CVS/RevisionCache/AngleConstructor.java#1.40000644000175000017500000002635311303035224025345 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: Cicle3Constructor.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.objects.AngleObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.FixedAngleObject; import rene.zirkel.objects.PointObject; public class AngleConstructor extends ObjectConstructor { PointObject P1 = null, P2 = null, P3 = null; boolean Fixed = false; public AngleConstructor(final boolean fixed) { Fixed = fixed; } public AngleConstructor() { this(false); } FixedAngleObject A; ConstructionObject O; boolean ShowsValue; int Moved; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!zc.Visual) return; if (P1 == null) { P1 = select(e.getX(), e.getY(), zc); if (P1 != null) { P1.setSelected(true); zc.repaint(); } showStatus(zc); } else if (P2 == null) { P2 = select(e.getX(), e.getY(), zc); if (P2 != null) { P2.setSelected(true); zc.repaint(); } showStatus(zc); } else { if (!e.isShiftDown() && !Fixed) { P3 = select(e.getX(), e.getY(), zc); if (P3 != null) { if (P3 == P1 || P3 == P2) { P3 = null; return; } final AngleObject a = new AngleObject(zc.getConstruction(), P1, P2, P3); zc.addObject(a); a.setDefaults(); if (P3.moveable() && !P3.isPointOn() && zc.isNewPoint()) { ShowsValue = a.showValue(); if (Global.getParameter("options.movefixname", true)) a.setShowValue(true); O = a; Dragging = true; a.validate(); zc.repaint(); } else { Dragging = false; P1 = P2 = P3 = null; reset(zc); zc.validate(); zc.repaint(); } } } else { final FixedAngleObject a = new FixedAngleObject(zc .getConstruction(), P1, P2, zc.x(e.getX()), zc.y(e .getY())); zc.addObject(a); a.setDefaults(); a.init(zc.getConstruction(), zc.x(e.getX()), zc.y(e.getY())); Moved = 0; Dragging = true; ShowsValue = a.showValue(); if (Global.getParameter("options.movefixname", true)) a.setShowValue(true); O = A = a; P3 = null; zc.repaint(); } } } @Override public boolean waitForLastPoint() { return P1 != null && P2 != null; } @Override public boolean waitForPoint() { return !Fixed || (P1 == null || P2 == null); } @Override public void finishConstruction(final MouseEvent e, final ZirkelCanvas zc) { if (!Fixed) { P3 = select(e.getX(), e.getY(), zc); if (P3 != null) { final AngleObject a = new AngleObject(zc.getConstruction(), P1, P2, P3); zc.addObject(a); a.setDefaults(); } zc.repaint(); P3 = null; } else { final FixedAngleObject a = new FixedAngleObject(zc .getConstruction(), P1, P2, zc.x(e.getX()), zc.y(e.getY())); zc.addObject(a); a.setDefaults(); a.init(zc.getConstruction(), zc.x(e.getX()), zc.y(e.getY())); zc.setPreviewObject(a); zc.repaint(); } } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) return; Moved++; if (P3 == null) { A.init(zc.getConstruction(), zc.x(e.getX()), zc.y(e.getY())); if (A instanceof FixedAngleObject) ((FixedAngleObject) A).setDragable(Moved > 5); } else { P3.move(zc.x(e.getX()), zc.y(e.getY())); zc.validate(); } zc.repaint(); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) return; Dragging = false; O.setShowValue(ShowsValue); zc.repaint(); if (P3 == null) { zc.clearSelected(); A.round(); if (Moved < 5) { A.edit(zc); if (A instanceof FixedAngleObject && ((FixedAngleObject) A).isEditAborted()) { zc.delete(A); reset(zc); return; } } A.validate(); zc.check(); } else P3.updateText(); reset(zc); zc.showStatus(); } public PointObject select(final int x, final int y, final ZirkelCanvas zc) { return zc.selectCreatePoint(x, y); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); if (zc.Visual) { P1 = P2 = P3 = null; showStatus(zc); } else { zc.setPrompt(Zirkel.name("prompt.angle")); } } @Override public void showStatus(final ZirkelCanvas zc) { if (Fixed) { if (P1 == null) zc.showStatus(Zirkel.name("message.fixedangle.first")); else if (P2 == null) zc.showStatus(Zirkel.name("message.fixedangle.root")); else zc.showStatus(Zirkel.name("message.fixedangle.second")); } else { if (P1 == null) zc.showStatus(Zirkel.name("message.angle.first")); else if (P2 == null) zc.showStatus(Zirkel.name("message.angle.root")); else zc.showStatus(Zirkel.name("message.angle.second")); } } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Angle")) return false; final XmlTag tag = tree.getTag(); if (!tag.hasParam("first")) { final AngleObject o = new AngleObject(c); try { if (tag.hasParam("display")) { final String type = tag.getValue("display"); if (type.equals("small")) o.setDisplaySize(AngleObject.SMALL); if (type.equals("large")) o.setDisplaySize(AngleObject.LARGE); if (type.equals("larger")) o.setDisplaySize(AngleObject.LARGER); if (type.equals("rectangle")) o.setDisplaySize(AngleObject.RECT); } setName(tag, o); set(tree, o); c.add(o); setConditionals(tree, c, o); if (tag.hasTrueParam("filled")) o.setFilled(true); if (tag.hasParam("fixed")) o.setFixed(tag.getValue("fixed")); if (tag.hasTrueParam("acute")) o.setObtuse(false); else o.setObtuse(true); } catch (final Exception e) { } } if (!tag.hasParam("first") || !tag.hasParam("root")) throw new ConstructionException("Angle parameters missing!"); if (tag.hasParam("second")) { try { final PointObject p1 = (PointObject) c.find(tag .getValue("first")); final PointObject p2 = (PointObject) c.find(tag .getValue("root")); final PointObject p3 = (PointObject) c.find(tag .getValue("second")); final AngleObject o = new AngleObject(c, p1, p2, p3); if (tag.hasParam("display")) { final String type = tag.getValue("display"); if (type.equals("small")) o.setDisplaySize(AngleObject.SMALL); if (type.equals("large")) o.setDisplaySize(AngleObject.LARGE); if (type.equals("larger")) o.setDisplaySize(AngleObject.LARGER); if (type.equals("rectangle")) o.setDisplaySize(AngleObject.RECT); } setName(tag, o); set(tree, o); c.add(o); setConditionals(tree, c, o); if (tag.hasTrueParam("filled")) o.setFilled(true); if (tag.hasParam("fixed")) o.setFixed(tag.getValue("fixed")); if (tag.hasTrueParam("acute")) o.setObtuse(false); else o.setObtuse(true); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Angle parameters illegal!"); } } else { try { final PointObject p1 = (PointObject) c.find(tag .getValue("first")); final PointObject p2 = (PointObject) c.find(tag .getValue("root")); final FixedAngleObject o = new FixedAngleObject(c, p1, p2, 0, 0); if (tag.hasParam("display")) { final String type = tag.getValue("display"); if (type.equals("small")) o.setDisplaySize(FixedAngleObject.SMALL); if (type.equals("large")) o.setDisplaySize(FixedAngleObject.LARGE); if (type.equals("larger")) o.setDisplaySize(FixedAngleObject.LARGER); if (type.equals("rectangle")) o.setDisplaySize(FixedAngleObject.RECT); } setName(tag, o); set(tree, o); c.add(o); setConditionals(tree, c, o); if (tag.hasTrueParam("filled")) o.setFilled(true); if (tag.hasTrueParam("acute")) o.setObtuse(false); else o.setObtuse(true); if (tag.hasTrueParam("inverse")) o.setInverse(true); else o.setInverse(false); if (tag.hasTrueParam("reduced")) o.setReduced(true); else o.setReduced(false); if (tag.hasTrueParam("dragable")) o.setDragable(true); if (tag.hasTrueParam("drawable")) o.setDragable(true); // downward compatibility if (tag.hasParam("fixed")) o.setFixed(tag.getValue("fixed")); else throw new ConstructionException(""); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Angle parameters illegal!"); } } return true; } @Override public String getTag() { return "Angle"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams != 3) throw new ConstructionException(Zirkel.name("exception.nparams")); final ConstructionObject P1 = c.find(params[0]); if (P1 == null) throw new ConstructionException(Zirkel.name("exception.notfound") + " " + params[0]); final ConstructionObject P2 = c.find(params[1]); if (P2 == null) throw new ConstructionException(Zirkel.name("exception.notfound") + " " + params[1]); final ConstructionObject P3 = c.find(params[2]); if (P3 == null || !(P3 instanceof PointObject)) { final Expression ex = new Expression(params[2], c, null); if (!ex.isValid()) throw new ConstructionException(Zirkel .name("exception.expression")); final FixedAngleObject s = new FixedAngleObject(c, (PointObject) P1, (PointObject) P2, 0, 0); s.setFixed(params[2]); if (!name.equals("")) s.setNameCheck(name); c.add(s); s.setDefaults(); s.setObtuse(true); s.setFixed(params[2]); s.validate(); return; } if (!(P1 instanceof PointObject)) throw new ConstructionException(Zirkel.name("exception.type") + " " + params[0]); if (!(P2 instanceof PointObject)) throw new ConstructionException(Zirkel.name("exception.type") + " " + params[1]); if (!(P3 instanceof PointObject)) throw new ConstructionException(Zirkel.name("exception.type") + " " + params[2]); if (P1 == P2 || P2 == P3) throw new ConstructionException(Zirkel.name("exception.parameter")); final AngleObject s = new AngleObject(c, (PointObject) P1, (PointObject) P2, (PointObject) P3); if (!name.equals("")) s.setNameCheck(name); c.add(s); s.setDefaults(); } } ./src/rene/zirkel/constructors/CVS/RevisionCache/TextConstructor.java#1.40000644000175000017500000000465611320711175025252 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: PointConstructor.java import java.awt.event.MouseEvent; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.objects.TextObject; public class TextConstructor extends ObjectConstructor { @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { final double x = zc.x(e.getX()), y = zc.y(e.getY()); final TextObject p = new TextObject(zc.getConstruction(), x, y); zc.addObject(p); p.edit(zc); p.setDefaults(); zc.repaint(); } @Override public boolean waitForPoint() { return false; } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Zirkel.name("message.text")); } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Text")) return false; final XmlTag tag = tree.getTag(); if (!tag.hasParam("x") || !tag.hasParam("y")) throw new ConstructionException("Point coordinates missing!"); final TextObject p = new TextObject(c, 0, 0); double x, y; try { x = new Expression(tag.getValue("x"), c, p).getValue(); y = new Expression(tag.getValue("y"), c, p).getValue(); p.move(x, y); } catch (final Exception e) { } setName(tag, p); set(tree, p); c.add(p); setConditionals(tree, c, p); p.setLines(p.getText()); if (tag.hasParam("fixed")) { p.setFixed(tag.getValue("x"), tag.getValue("y")); } return true; } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); showStatus(zc); } } ./src/rene/zirkel/constructors/CVS/Root0000644000175000017500000000007411132354034017037 0ustar yvesyves:ext:erichake@carmetal.cvs.sourceforge.net:/cvsroot/carmetal./src/rene/zirkel/constructors/AreaConstructor.java0000640000175000017500000001210411360624271021516 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: PointConstructor.java import java.awt.event.MouseEvent; import java.util.Enumeration; import java.util.Vector; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.AreaObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; public class AreaConstructor extends ObjectConstructor { Vector Points = new Vector(); static PointObject previewPoint = null; static AreaObject previewArea = null; public static void deletePreview(final ZirkelCanvas zc) { if (previewArea != null) { zc.delete(previewArea); previewPoint = null; previewArea = null; zc.reset(); } } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!zc.Visual) { return; } if (previewPoint == null) { previewPoint = new PointObject(zc.getConstruction(), "PrevPoint"); } if (previewArea == null) { previewArea = new AreaObject(zc.getConstruction(), Points); zc.addObject(previewArea); previewArea.setDefaults(); if (!previewArea.isSolid()) { previewArea.setBack(true); } } final double x = zc.x(e.getX()), y = zc.y(e.getY()); Points.remove(previewPoint); final PointObject P = zc.selectCreatePoint(e.getX(), e.getY(), e.isAltDown()); previewPoint.move(x, y); if (P != null) { P.setSelected(true); final Enumeration en = Points.elements(); while (en.hasMoreElements()) { if (en.nextElement() == P) { // if (Points.size()<3) zc.delete(previewArea); // previewPoint=null; // previewArea=null; // reset(zc); if (Points.size() >= 3) { final AreaObject o = new AreaObject(zc .getConstruction(), Points); zc.addObject(o); o.setDefaults(); if (!o.isSolid()) { o.setBack(true); } } deletePreview(zc); // reset(zc); return; } } Points.addElement(P); Points.addElement(previewPoint); previewArea.validate(); previewArea.setDefaults(); zc.repaint(); } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { if (Points.size() >= 1) { previewPoint.move(zc.x(e.getX()), zc.y(e.getY())); previewArea.setDefaults(); zc.repaint(); } super.mouseMoved(e, zc, simple); } @Override public String getTag() { return "Polygon"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams < 3) { throw new ConstructionException(Global.name("exception.nparams")); } final Vector v = new Vector(); for (int i = 0; i < nparams; i++) { final ConstructionObject o = c.find(params[i]); if (o == null) { throw new ConstructionException(Global.name("exception.notfound") + " " + params[i]); } if (!(o instanceof PointObject)) { throw new ConstructionException(Global.name("exception.type") + " " + params[i]); } v.addElement(o); } final AreaObject o = new AreaObject(c, v); if (!name.equals("")) { o.setNameCheck(name); } c.add(o); o.setDefaults(); o.setBack(true); } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Polygon")) { return false; } final XmlTag tag = tree.getTag(); try { int i = 1; final Vector v = new Vector(); while (true) { final PointObject p = (PointObject) c.find(tag.getValue("point" + i)); if (p == null) { break; } v.addElement(p); i++; } final AreaObject o = new AreaObject(c, v); o.setBack(true); setName(tag, o); set(tree, o); c.add(o); setConditionals(tree, c, o); if (tag.hasParam("filled")) o.setFilled(false); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Polygon parameters illegal!"); } return true; } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Global.name("message.area")); zc.setPrompt("=" + Global.name("prompt.area")); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); Points = new Vector(); zc.showStatus(Global.name("message.area")); } } ./src/rene/zirkel/constructors/PlumbConstructor.java0000640000175000017500000000720011303263645021727 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: PlumbConstructor.java import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PlumbObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveLineObject; public class PlumbConstructor extends ParallelConstructor { @Override public PrimitiveLineObject create(final Construction c, final PrimitiveLineObject l, final PointObject p) { return new PlumbObject(c, l, p); } @Override public void showStatus(final ZirkelCanvas zc) { if (L == null) zc.showStatus(Global.name("message.plumb.first", "Plumb Line: Choose a line!")); else zc.showStatus(Global.name("message.plumb.second", "Plumb Line: Choose a Point!")); } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Plumb")) return false; final XmlTag tag = tree.getTag(); if (!tag.hasParam("point") || !tag.hasParam("line")) throw new ConstructionException("Plumb parameters missing!"); try { final PointObject p1 = (PointObject) c.find(tag.getValue("point")); final PrimitiveLineObject p2 = (PrimitiveLineObject) c.find(tag .getValue("line")); final PlumbObject o = new PlumbObject(c, p2, p1); if (tag.hasParam("valid")) o.setRestricted(false); setName(tag, o); set(tree, o); if (tag.hasParam("partial")) o.setPartial(true); c.add(o); setConditionals(tree, c, o); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Plumb parameters illegal!"); } return true; } @Override public String getPrompt() { return Global.name("prompt.plumb"); } @Override public String getTag() { return "Plumb"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams != 2) throw new ConstructionException(Global.name("exception.nparams")); final ConstructionObject P1 = c.find(params[0]); if (P1 == null) throw new ConstructionException(Global.name("exception.notfound") + " " + params[0]); final ConstructionObject P2 = c.find(params[1]); if (P2 == null) throw new ConstructionException(Global.name("exception.notfound") + " " + params[1]); if (!(P1 instanceof PrimitiveLineObject)) throw new ConstructionException(Global.name("exception.type") + " " + params[0]); if (!(P2 instanceof PointObject)) throw new ConstructionException(Global.name("exception.type") + " " + params[1]); final PlumbObject s = new PlumbObject(c, (PrimitiveLineObject) P1, (PointObject) P2); if (!name.equals("")) s.setNameCheck(name); c.add(s); s.setDefaults(); } } ./src/rene/zirkel/constructors/Circle3Constructor.java0000640000175000017500000001023611360624720022135 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: Cicle3Constructor.java import java.awt.event.MouseEvent; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.Circle3Object; import rene.zirkel.objects.PointObject; public class Circle3Constructor extends ObjectConstructor { PointObject P1 = null, P2 = null, P3 = null; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!zc.Visual) return; if (P1 == null) { P1 = select(e.getX(), e.getY(), zc, e.isAltDown()); if (P1 != null) { P1.setSelected(true); zc.repaint(); } showStatus(zc); } else if (P2 == null) { P2 = select(e.getX(), e.getY(), zc, e.isAltDown()); if (P2 != null && P2 != P1) { P2.setSelected(true); zc.repaint(); } showStatus(zc); } else { P3 = select(e.getX(), e.getY(), zc, e.isAltDown()); if (P3 != null) { final Circle3Object c = new Circle3Object(zc.getConstruction(), P1, P2, P3); zc.addObject(c); c.setDefaults(); c.updateCircleDep(); P1 = P2 = P3 = null; zc.clearSelected(); showStatus(zc); } } } @Override public boolean waitForLastPoint() { return P1 != null && P2 != null; } @Override public void finishConstruction(final MouseEvent e, final ZirkelCanvas zc) { P3 = select(e.getX(), e.getY(), zc, e.isAltDown()); if (P3 != null) { final Circle3Object c = new Circle3Object(zc.getConstruction(), P1, P2, P3); zc.addObject(c); c.setDefaults(); zc.validate(); zc.repaint(); P3 = null; } } public PointObject select(final int x, final int y, final ZirkelCanvas zc, boolean altdown) { return zc.selectCreatePoint(x, y, altdown); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); if (zc.Visual) { P1 = P2 = P3 = null; showStatus(zc); } else { zc.setPrompt(Global.name("prompt.circle3")); } } @Override public void showStatus(final ZirkelCanvas zc) { if (P1 == null) zc.showStatus(Global.name("message.circle3.first", "Circle: Choose the first radius point!")); else if (P2 == null) zc.showStatus(Global.name("message.circle3.second", "Circle: Choose the second radius point!")); else zc.showStatus(Global.name("message.circle3.midpoint", "Circle: Choose the midpoint!")); } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Circle3")) return false; final XmlTag tag = tree.getTag(); if (!tag.hasParam("midpoint") || !tag.hasParam("from") || !tag.hasParam("to")) throw new ConstructionException("Circle3 parameters missing!"); try { final PointObject p1 = (PointObject) c.find(tag .getValue("midpoint")); final PointObject p2 = (PointObject) c.find(tag.getValue("from")); final PointObject p3 = (PointObject) c.find(tag.getValue("to")); final Circle3Object o = new Circle3Object(c, p2, p3, p1); if (tag.hasParam("partial")) o.setPartial(true); if (tag.hasParam("start") && tag.hasParam("end")) o.setRange(tag.getValue("start"), tag.getValue("end")); setName(tag, o); set(tree, o); c.add(o); setConditionals(tree, c, o); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Circle3 parameters illegal!"); } return true; } } ./src/rene/zirkel/constructors/SegmentConstructor.java0000640000175000017500000001244311320712062022246 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: SegmentConstructor.java import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.SegmentObject; public class SegmentConstructor extends LineConstructor { boolean Fixed = false; public SegmentConstructor() { this(false); } public SegmentConstructor(final boolean fixed) { Fixed = fixed; } @Override public ConstructionObject create(final Construction c, final PointObject p1, final PointObject p2) { return new SegmentObject(c, p1, p2); } @Override public boolean isFixed() { return Fixed; } @Override public void setFixed(final ZirkelCanvas zc, final ConstructionObject o) { if (o instanceof SegmentObject) { final SegmentObject s = (SegmentObject) o; if (s.canFix()) try { s.validate(); s.setFixed(true, "" + s.getLength()); s.edit(zc, true, true); s.validate(); zc.repaint(); } catch (final Exception e) { } else { zc.warning(Global.name("error.fixedsegment")); } } } @Override public void showStatus(final ZirkelCanvas zc) { if (!Fixed) { if (P1 == null) zc.showStatus(Global.name("message.segment.first")); else zc.showStatus(Global.name("message.segment.second")); } else { if (P1 == null) zc.showStatus(Global.name("message.fixedsegment.first")); else zc.showStatus(Global.name("message.fixedsegment.second")); } } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Segment")) return false; final XmlTag tag = tree.getTag(); if (!tag.hasParam("from") || !tag.hasParam("to")) throw new ConstructionException("Segment endpoints missing!"); try { final PointObject p1 = (PointObject) c.find(tag.getValue("from")); final PointObject p2 = (PointObject) c.find(tag.getValue("to")); final SegmentObject o = new SegmentObject(c, p1, p2); setName(tag, o); set(tree, o); c.add(o); setConditionals(tree, c, o); o.setArrow(tag.hasParam("arrow")); if (tag.hasParam("fixed")) { try { o.setFixed(true, tag.getValue("fixed")); } catch (final Exception e) { throw new ConstructionException("Fixed value illegal!"); } } if (tag.hasParam("code_symbol")) o.setSegmentCode(Integer.parseInt(tag.getValue("code_symbol"))); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Segment endpoints illegal!"); } return true; } @Override public String getPrompt() { return Global.name("prompt.segment"); } @Override public String getTag() { return "Segment"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams != 2 && nparams != 3) throw new ConstructionException(Global.name("exception.nparams")); final ConstructionObject P1 = c.find(params[0]); if (P1 == null) throw new ConstructionException(Global.name("exception.notfound") + " " + params[0]); if (!(P1 instanceof PointObject)) throw new ConstructionException(Global.name("exception.type") + " " + params[0]); ConstructionObject P2 = c.find(params[1]); if (P2 == null) { final Expression ex = new Expression(params[1], c, null); if (!ex.isValid()) throw new ConstructionException(Global.name("exception.expression")); final double x = ex.getValue(); P2 = new PointObject(c, ((PointObject) P1).getX() + x, ((PointObject) P1).getY()); c.add(P2); P2.setDefaults(); final SegmentObject s = new SegmentObject(c, (PointObject) P1, (PointObject) P2); s.setDefaults(); s.setFixed(true, params[1]); c.add(s); if (!name.equals("")) s.setNameCheck(name); return; } if (!(P2 instanceof PointObject)) throw new ConstructionException(Global.name("exception.type") + " " + params[1]); final SegmentObject s = new SegmentObject(c, (PointObject) P1, (PointObject) P2); if (nparams == 3) { if (!s.canFix()) throw new ConstructionException(Global.name("exception.canfix")); s.setFixed(true, params[2]); if (!s.isValidFix()) throw new ConstructionException(Global.name("exception.fix") + " " + params[2]); s.validate(); } c.add(s); s.setDefaults(); if (!name.equals("")) s.setNameCheck(name); } } ./src/rene/zirkel/constructors/ParallelConstructor.java0000640000175000017500000001270611360624523022412 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: ParallelConstructor.java import java.awt.event.MouseEvent; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ParallelObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveLineObject; public class ParallelConstructor extends ObjectConstructor { PointObject P = null; PrimitiveLineObject L = null; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!zc.Visual) return; if (L == null) { L = selectline(e.getX(), e.getY(), zc); if (L != null) { L.setSelected(true); zc.repaint(); } showStatus(zc); } else { P = select(e.getX(), e.getY(), zc, e.isAltDown()); if (P != null) { final ConstructionObject o = create(zc.getConstruction(), L, P); zc.addObject(o); o.setDefaults(); P = null; L = null; zc.clearSelected(); showStatus(zc); } } } @Override public boolean waitForLastPoint() { return L != null; } @Override public void finishConstruction(final MouseEvent e, final ZirkelCanvas zc) { P = select(e.getX(), e.getY(), zc, e.isAltDown()); if (P != null) { final ConstructionObject o = create(zc.getConstruction(), L, P); zc.addObject(o); o.setDefaults(); zc.validate(); zc.repaint(); P = null; } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { if (!simple && waitForLastPoint()) { if (zc.isPreview()) { zc.movePreview(e); } else { zc.prepareForPreview(e); finishConstruction(e, zc); } } if (L == null) zc.indicateLineObjects(e.getX(), e.getY()); else if (P == null) zc.indicateCreatePoint(e.getX(), e.getY(), false); } public PointObject select(final int x, final int y, final ZirkelCanvas zc, boolean altdown) { return zc.selectCreatePoint(x, y, altdown); } public PrimitiveLineObject selectline(final int x, final int y, final ZirkelCanvas zc) { return zc.selectLine(x, y); } public PrimitiveLineObject create(final Construction c, final PrimitiveLineObject l, final PointObject p) { return new ParallelObject(c, l, p); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); if (zc.Visual) { P = null; L = null; showStatus(zc); } else { zc.setPrompt(getPrompt()); } } public String getPrompt() { return Global.name("prompt.parallel"); } @Override public void showStatus(final ZirkelCanvas zc) { if (L == null) zc.showStatus(Global.name("message.parallel.first", "Parallel: Choose a line!")); else zc.showStatus(Global.name("message.parallel.second", "Parallel: Choose a Point!")); } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Parallel")) return false; final XmlTag tag = tree.getTag(); if (!tag.hasParam("point") || !tag.hasParam("line")) throw new ConstructionException("Parallel parameters missing!"); try { final PointObject p1 = (PointObject) c.find(tag.getValue("point")); final PrimitiveLineObject p2 = (PrimitiveLineObject) c.find(tag .getValue("line")); final ParallelObject o = new ParallelObject(c, p2, p1); setName(tag, o); set(tree, o); if (tag.hasParam("partial")) o.setPartial(true); c.add(o); setConditionals(tree, c, o); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Parallel parameters illegal!"); } return true; } @Override public String getTag() { return "Parallel"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams != 2) throw new ConstructionException(Global.name("exception.nparams")); final ConstructionObject P1 = c.find(params[0]); if (P1 == null) throw new ConstructionException(Global.name("exception.notfound") + " " + params[0]); final ConstructionObject P2 = c.find(params[1]); if (P2 == null) throw new ConstructionException(Global.name("exception.notfound") + " " + params[1]); if (!(P1 instanceof PrimitiveLineObject)) throw new ConstructionException(Global.name("exception.type") + " " + params[0]); if (!(P2 instanceof PointObject)) throw new ConstructionException(Global.name("exception.type") + " " + params[1]); final ParallelObject s = new ParallelObject(c, (PrimitiveLineObject) P1, (PointObject) P2); if (!name.equals("")) s.setNameCheck(name); c.add(s); s.setDefaults(); } } ./src/rene/zirkel/constructors/.#QuadricConstructor.java.1.30000644000175000017500000001142111132723277022667 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: QuadricConstructor.java import java.awt.event.MouseEvent; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.QuadricObject; public class QuadricConstructor extends ObjectConstructor { PointObject P[]; int NPoints; static PointObject previewPoint = null; static QuadricObject previewQuadric = null; public static void deletePreview(final ZirkelCanvas zc) { if (previewQuadric != null) { zc.delete(previewQuadric); previewPoint = null; previewQuadric = null; zc.reset(); } } private void arrangeP() { if (NPoints < 5) { P[4] = previewPoint; for (int i = 3; i >= NPoints; i--) { P[i] = P[0]; } } } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!zc.Visual) return; if (previewPoint == null) previewPoint = new PointObject(zc.getConstruction(), "PrevPoint"); if (previewQuadric != null) previewQuadric.setHidden(true); final PointObject p = zc.selectCreatePoint(e.getX(), e.getY()); if (previewQuadric != null) previewQuadric.setHidden(false); if (p != null) { P[NPoints++] = p; p.setSelected(true); arrangeP(); if (previewQuadric == null) { previewQuadric = new QuadricObject(zc.getConstruction(), P); zc.addObject(previewQuadric); } previewQuadric.setDefaults(); zc.repaint(); } showStatus(zc); if (NPoints == 5) { final QuadricObject Q = new QuadricObject(zc.getConstruction(), P); zc.addObject(Q); Q.setDefaults(); zc.clearSelected(); deletePreview(zc); } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { if (previewPoint != null) { previewQuadric.validate(); previewPoint.move(zc.x(e.getX()), zc.y(e.getY())); zc.repaint(); } super.mouseMoved(e, zc, simple); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Zirkel.name("message.quadric") + " " + (NPoints + 1)); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); if (zc.Visual) { P = new PointObject[5]; NPoints = 0; showStatus(zc); } else { zc.setPrompt(Zirkel.name("prompt.quadric")); } } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Quadric")) return false; final XmlTag tag = tree.getTag(); for (int i = 0; i < 5; i++) if (!tag.hasParam("point" + (i + 1))) throw new ConstructionException("Quadric points missing!"); try { final PointObject P[] = new PointObject[5]; for (int i = 0; i < 5; i++) P[i] = (PointObject) c.find(tag.getValue("point" + (i + 1))); final QuadricObject p = new QuadricObject(c, P); setName(tag, p); set(tree, p); c.add(p); setConditionals(tree, c, p); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Quadric points illegal!"); } return true; } public String getPrompt() { return Zirkel.name("prompt.quadric"); } @Override public String getTag() { return "Quadric"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams != 5) throw new ConstructionException(Zirkel.name("exception.nparams")); final ConstructionObject P[] = new PointObject[5]; for (int i = 0; i < 5; i++) { P[i] = c.find(params[i]); if (P[i] == null) throw new ConstructionException(Zirkel .name("exception.notfound") + " " + params[i]); if (!(P[i] instanceof PointObject)) throw new ConstructionException(Zirkel.name("exception.type") + " " + params[i]); } final QuadricObject s = new QuadricObject(c, (PointObject[]) P); if (!name.equals("")) s.setNameCheck(name); c.add(s); s.setDefaults(); } } ./src/rene/zirkel/constructors/RayConstructor.java0000640000175000017500000000767711313457420021422 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: RayConstructor.java import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.RayObject; public class RayConstructor extends LineConstructor { @Override public ConstructionObject create(final Construction c, final PointObject p1, final PointObject p2) { return new RayObject(c, p1, p2); } @Override public void showStatus(final ZirkelCanvas zc) { if (P1==null) { zc.showStatus(Global.name("message.ray.first", "Ray: Set the root point!")); } else { zc.showStatus(Global.name("message.ray.second", "Ray: Set the second point!")); } } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Ray")) { return false; } final XmlTag tag=tree.getTag(); if (!tag.hasParam("from")||!tag.hasParam("to")) { throw new ConstructionException("Ray points missing!"); } try { final PointObject p1=(PointObject) c.find(tag.getValue("from")); final PointObject p2=(PointObject) c.find(tag.getValue("to")); final RayObject o=new RayObject(c, p1, p2); if (tag.hasParam("partial")) { o.setPartial(true); } setName(tag, o); set(tree, o); c.add(o); setConditionals(tree, c, o); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { e.printStackTrace(); throw new ConstructionException("Ray points illegal!"); } return true; } @Override public String getPrompt() { return Global.name("prompt.ray"); } @Override public String getTag() { return "Ray"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams!=2) { throw new ConstructionException(Global.name("exception.nparams")); } final ConstructionObject P1=c.find(params[0]); if (P1==null) { throw new ConstructionException(Global.name("exception.notfound")+" "+params[0]); } final ConstructionObject P2=c.find(params[1]); if (P2==null) { throw new ConstructionException(Global.name("exception.notfound")+" "+params[1]); } if (!(P1 instanceof PointObject)) { throw new ConstructionException(Global.name("exception.type")+" "+params[0]); } if (!(P2 instanceof PointObject)) { throw new ConstructionException(Global.name("exception.type")+" "+params[1]); } final RayObject s=new RayObject(c, (PointObject) P1, (PointObject) P2); c.add(s); s.setDefaults(); if (!name.equals("")) { s.setNameCheck(name); } } } ./src/rene/zirkel/constructors/EquationXYConstructor.java0000640000175000017500000000301111133127256022710 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.EquationXYObject; /** * * @author erichake */ public class EquationXYConstructor extends ObjectConstructor { @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "EqXY")) { return false; } final XmlTag tag = tree.getTag(); if (tag.hasParam("f")) // function { final EquationXYObject eq = new EquationXYObject(c, tag .getValue("f"), Integer.parseInt(tag.getValue("Dhor"))); eq.setName(tag.getValue("name")); // eq.setDefaults(); set(tree, eq); c.add(eq); eq.updateText(); } return true; } } ./src/rene/zirkel/constructors/FunctionConstructor.java0000640000175000017500000001102111303263646022432 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: QuadricConstructor.java import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.gui.Global; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.objects.FunctionObject; import rene.zirkel.objects.UserFunctionObject; public class FunctionConstructor extends ObjectConstructor { @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Function")) return false; final XmlTag tag = tree.getTag(); if (tag.hasParam("f")) // function { if (!tag.hasParam("var")) throw new ConstructionException("Function invalid!"); try { final String y = tag.getValue("f"); final String var = tag.getValue("var"); final UserFunctionObject f = new UserFunctionObject(c); f.setDefaults(); setName(tag, f); set(tree, f); c.add(f); double xpos, ypos; try { if (tag.hasParam("fixed")) { f.setFixed(tag.getValue("x"), tag.getValue("y")); } else { xpos = new Expression(tag.getValue("x"), c, f) .getValue(); ypos = new Expression(tag.getValue("y"), c, f) .getValue(); f.move(xpos, ypos); } } catch (final Exception e) { } if (tag.hasParam("filled")) f.setFilled(true); f.setExpressions(var, y); setConditionals(tree, c, f); f.updateText(); return true; } catch (final Exception e) { throw new ConstructionException("Function invalid!"); } } else // curve { if (!tag.hasParam("min") && !tag.hasParam("max") && !tag.hasParam("d") && !tag.hasParam("var") && !tag.hasParam("x") && !tag.hasParam("y")) throw new ConstructionException("Function invalid!"); try { final String x = tag.getValue("x"); final String y = tag.getValue("y"); final String var = tag.getValue("var"); final String d = tag.getValue("d"); final String min = tag.getValue("min"); final String max = tag.getValue("max"); final FunctionObject f = new FunctionObject(c); f.setDefaults(); setType(tag, f); setName(tag, f); set(tree, f); c.add(f); if (tag.hasParam("filled")) f.setFilled(true); else f.setFilled(false); f.setExpressions(var, x, y); f.setRange(min, max, d); f.setSpecial(tag.hasTrueParam("special")); setConditionals(tree, c, f); if (tag.hasParam("center")) f.setCenter(tag.getValue("center")); f.updateText(); return true; } catch (final Exception e) { throw new ConstructionException("Function invalid!"); } } } static public void setType(final XmlTag tag, final FunctionObject p) { if (tag.hasParam("shape")) { final String s = tag.getValue("shape"); if (s.equals("square")) p.setType(0); if (s.equals("diamond")) p.setType(1); if (s.equals("circle")) p.setType(2); if (s.equals("dot")) p.setType(3); if (s.equals("cross")) p.setType(4); if (s.equals("dcross")) p.setType(5); } } @Override public String getTag() { return "Function"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams != 6) throw new ConstructionException(Global.name("exception.nparams")); boolean added = false; try { final FunctionObject F = new FunctionObject(c); c.add(F); added = true; if (!name.equals("")) F.setNameCheck(name); F.setRange(params[0], params[1], params[2]); F.setExpressions(params[3], params[4], params[5]); F.setDefaults(); } catch (final ConstructionException e) { if (added) c.back(); throw e; } catch (final Exception e) { if (added) c.back(); throw new ConstructionException("Function Invalid!"); } } } ./src/rene/zirkel/constructors/QuadricConstructor.java0000640000175000017500000001144011360624271022240 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: QuadricConstructor.java import java.awt.event.MouseEvent; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.QuadricObject; public class QuadricConstructor extends ObjectConstructor { PointObject P[]; int NPoints; static PointObject previewPoint = null; static QuadricObject previewQuadric = null; public static void deletePreview(final ZirkelCanvas zc) { if (previewQuadric != null) { zc.delete(previewQuadric); previewPoint = null; previewQuadric = null; zc.reset(); } } private void arrangeP() { if (NPoints < 5) { P[4] = previewPoint; for (int i = 3; i >= NPoints; i--) { P[i] = P[0]; } } } @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!zc.Visual) return; if (previewPoint == null) previewPoint = new PointObject(zc.getConstruction(), "PrevPoint"); if (previewQuadric != null) previewQuadric.setHidden(true); final PointObject p = zc.selectCreatePoint(e.getX(), e.getY(), e.isAltDown()); if (previewQuadric != null) previewQuadric.setHidden(false); if (p != null) { P[NPoints++] = p; p.setSelected(true); arrangeP(); if (previewQuadric == null) { previewQuadric = new QuadricObject(zc.getConstruction(), P); zc.addObject(previewQuadric); } previewQuadric.setDefaults(); zc.repaint(); } showStatus(zc); if (NPoints == 5) { final QuadricObject Q = new QuadricObject(zc.getConstruction(), P); zc.addObject(Q); Q.setDefaults(); zc.clearSelected(); deletePreview(zc); } } @Override public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { if (previewPoint != null) { previewQuadric.validate(); previewPoint.move(zc.x(e.getX()), zc.y(e.getY())); zc.repaint(); } super.mouseMoved(e, zc, simple); } @Override public void showStatus(final ZirkelCanvas zc) { zc.showStatus(Global.name("message.quadric") + " " + (NPoints + 1)); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); if (zc.Visual) { P = new PointObject[5]; NPoints = 0; showStatus(zc); } else { zc.setPrompt(Global.name("prompt.quadric")); } } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Quadric")) return false; final XmlTag tag = tree.getTag(); for (int i = 0; i < 5; i++) if (!tag.hasParam("point" + (i + 1))) throw new ConstructionException("Quadric points missing!"); try { final PointObject P[] = new PointObject[5]; for (int i = 0; i < 5; i++) P[i] = (PointObject) c.find(tag.getValue("point" + (i + 1))); final QuadricObject p = new QuadricObject(c, P); setName(tag, p); set(tree, p); c.add(p); setConditionals(tree, c, p); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Quadric points illegal!"); } return true; } public String getPrompt() { return Global.name("prompt.quadric"); } @Override public String getTag() { return "Quadric"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams != 5) throw new ConstructionException(Global.name("exception.nparams")); final ConstructionObject P[] = new PointObject[5]; for (int i = 0; i < 5; i++) { P[i] = c.find(params[i]); if (P[i] == null) throw new ConstructionException(Global.name("exception.notfound") + " " + params[i]); if (!(P[i] instanceof PointObject)) throw new ConstructionException(Global.name("exception.type") + " " + params[i]); } final QuadricObject s = new QuadricObject(c, (PointObject[]) P); if (!name.equals("")) s.setNameCheck(name); c.add(s); s.setDefaults(); } } ./src/rene/zirkel/constructors/ImageConstructor.java0000640000175000017500000000724311360624271021700 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; import eric.JZirkelCanvas; import eric.Media; import java.awt.event.MouseEvent; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ImageObject; import rene.zirkel.objects.PointObject; public class ImageConstructor extends ObjectConstructor { PointObject P[]; int NPoints; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!zc.Visual) return; final PointObject p = zc.selectCreatePoint(e.getX(), e.getY(), e.isAltDown()); if (p != null) { P[NPoints++] = p; p.setSelected(true); zc.repaint(); } showStatus(zc); if (NPoints == 3) { final String filename = zc.loadImage(); if (filename.equals("")) { reset(zc); return; } Media.createMedia(filename); final ImageObject o = new ImageObject(zc.getConstruction(), P, filename); zc.addObject(o); zc.clearSelected(); reset(zc); zc.repaint(); } } @Override public void showStatus(final ZirkelCanvas zc) { if (NPoints <= 1) zc.showStatus(ConstructionObject.text1( Global.name("message.image"), "" + (NPoints + 1))); else zc.showStatus(Global.name("message.image.last")); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); if (zc.Visual) { P = new PointObject[3]; NPoints = 0; showStatus(zc); } else { zc.setPrompt(Global.name("prompt.image")); } } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Image")) return false; final XmlTag tag = tree.getTag(); for (int i = 0; i < 3; i++) if (!tag.hasParam("point" + (i + 1))) throw new ConstructionException("Image points missing!"); if (!tag.hasParam("filename")) throw new ConstructionException("Image filename missing!"); try { final PointObject P[] = new PointObject[3]; for (int i = 0; i < 3; i++) P[i] = (PointObject) c.find(tag.getValue("point" + (i + 1))); final String filename = JZirkelCanvas.getFilePath(c)+tag.getValue("filename"); Media.createMedia(filename); final ImageObject p = new ImageObject(c, P, filename); setName(tag, p); set(tree, p); c.add(p); setConditionals(tree, c, p); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Image points illegal!"); } return true; } public String getPrompt() { return Global.name("prompt.image"); } @Override public String getTag() { return "Image"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { } } ./src/rene/zirkel/constructors/ObjectConstructor.java0000640000175000017500000001606711333326627022074 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: ObjectConstructor.java import java.awt.event.MouseEvent; import java.util.Enumeration; import rene.gui.Global; import rene.util.xml.XmlTag; import rene.util.xml.XmlTagText; import rene.util.xml.XmlTree; import rene.zirkel.ZirkelCanvas; import rene.zirkel.ZirkelFrame; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.objects.ConstructionObject; public class ObjectConstructor { protected boolean Dragging = false; public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { } public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { } public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { } public void mouseMoved(final MouseEvent e, final ZirkelCanvas zc, final boolean simple) { if (simple && (waitForPoint() || waitForLastPoint())) { zc.indicateCreatePoint(e.getX(), e.getY(), false); return; } if (waitForPoint()) { zc.indicateCreatePoint(e.getX(), e.getY(), false); } if (waitForLastPoint()) { if (zc.isPreview()) { zc.movePreview(e); } else { zc.prepareForPreview(e); finishConstruction(e, zc); return; } } } public void finishConstruction(final MouseEvent e, final ZirkelCanvas zc) { } public boolean waitForLastPoint() { return false; } public boolean waitForPoint() { return true; } public void reset(final ZirkelCanvas zc) { zc.validate(); zc.clearSelected(); } public void resetFirstTime(final ZirkelCanvas zc) { reset(zc); } public void invalidate(final ZirkelCanvas zc) { } public void showStatus(final ZirkelCanvas zc) { } public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { return false; } public boolean testTree(final XmlTree t, final String tag) { return t.getTag().name().equals(tag); } public void setName(final XmlTag tag, final ConstructionObject o) { if (tag.hasParam("name")) { o.setName(tag.getValue("name")); } if (tag.hasParam("alias")) { o.setAlias(tag.getValue("alias")); } } public void set(XmlTree tree, final ConstructionObject o) throws ConstructionException { final XmlTag tag = tree.getTag(); if (tag.hasParam("n")) { try { o.setNCount(new Integer(tag.getValue("n")).intValue()); o.setGotNCount(true); } catch (final Exception ex) { throw new ConstructionException("Illegal count!"); } } if (tag.hasParam("hidden")) { if (tag.getValue("hidden").equals("super")) { o.setSuperHidden(true); } else { o.setHidden(true); } } if (tag.hasTrueParam("tracked")) { o.setTracked(true); } if (tag.hasTrueParam("showvalue")) { o.setShowValue(true); } if (tag.hasTrueParam("showname")) { o.setShowName(true); } if (tag.hasTrueParam("background")) { o.setBack(true); } else { o.setBack(false); } if (tag.hasTrueParam("parameter")) { o.setParameter(true); } if (tag.hasTrueParam("mainparameter")) { o.setMainParameter(true); } if (tag.hasTrueParam("target")) { o.setTarget(true); } if (tag.hasTrueParam("break")) { o.setBreak(true); } if (tag.hasTrueParam("hidebreak")) { o.setHideBreak(true); } if (tag.hasTrueParam("solid")) { o.setSolid(true); } if (tag.hasTrueParam("bold")) { o.setBold(true); } if (tag.hasTrueParam("large")) { o.setLarge(true); } if (tag.hasParam("xoffset") || tag.hasParam("yoffset")) { int x = 0, y = 0; try { if (tag.hasParam("xoffset")) { x = Integer.parseInt(tag.getValue("xoffset")); } if (tag.hasParam("yoffset")) { y = Integer.parseInt(tag.getValue("yoffset")); } o.setOffset(x, y); } catch (final Exception e) { throw new ConstructionException("Illegal offset value"); } } if (tag.hasTrueParam("keepclose")) { o.setKeepClose(true); } if (tag.hasParam("xcoffset") || tag.hasParam("ycoffset")) { double x = 0, y = 0; try { if (tag.hasParam("xcoffset")) { x = new Double(tag.getValue("xcoffset")).doubleValue(); } if (tag.hasParam("ycoffset")) { y = new Double(tag.getValue("ycoffset")).doubleValue(); } o.setcOffset(x, y); } catch (final Exception e) { throw new ConstructionException("Illegal offset value"); } } if (tag.hasParam("color")) { try { final String s = tag.getValue("color"); int n = -1; for (int i = 0; i < ZirkelFrame.ColorStrings.length; i++) { if (s.equals(ZirkelFrame.ColorStrings[i])) { o.setColor(i); n = i; break; } } if (n < 0) { n = Integer.parseInt(s); if (n < 0 || n >= ZirkelFrame.Colors.length) { throw new Exception(""); } o.setColor(n); } } catch (final Exception ex) { throw new ConstructionException("Illegal color index (1-" + (ZirkelFrame.Colors.length - 1) + ")"); } } if (tag.hasParam("scolor")) { o.setSpecialColor(Global.getColor(tag.getValue("scolor"))); } if (tag.hasParam("type")) { final String type = tag.getValue("type"); if (type.equals("thick")) { o.setColorType(ConstructionObject.THICK); } if (type.equals("thin")) { o.setColorType(ConstructionObject.THIN); } if (type.equals("invisible")) { o.setColorType(ConstructionObject.INVISIBLE); } } if (tag.hasParam("unit")) { o.setUnit(tag.getValue("unit")); } else { o.setUnit(""); } final Enumeration e = tree.getContent(); while (e.hasMoreElements()) { tree = (XmlTree) e.nextElement(); if (tree.getTag() instanceof XmlTagText) { o.setText(((XmlTagText) tree.getTag()).getContent(), true); } } } public void setConditionals(final XmlTree tree, final Construction c, final ConstructionObject o) { o.clearConditionals(); int i = 0; final XmlTag tag = tree.getTag(); while (tag.hasParam("ctag" + i) && tag.hasParam("cexpr" + i)) { final String t = tag.getValue("ctag" + i); final String e = tag.getValue("cexpr" + i); final Expression ex = new Expression(e, c, o); o.addConditional(t, ex); i++; } } public String getTag() { return "???"; } public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { throw new ConstructionException(""); } // for MetaMover : public void pause(final boolean flag) { } public boolean useSmartBoard() { return true; } } ./src/rene/zirkel/constructors/AngleConstructor.java0000640000175000017500000002650311360624441021703 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.constructors; // file: Cicle3Constructor.java import java.awt.event.MouseEvent; import rene.gui.Global; import rene.util.xml.XmlTag; import rene.util.xml.XmlTree; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.objects.AngleObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.FixedAngleObject; import rene.zirkel.objects.PointObject; public class AngleConstructor extends ObjectConstructor { PointObject P1 = null, P2 = null, P3 = null; boolean Fixed = false; public AngleConstructor(final boolean fixed) { Fixed = fixed; } public AngleConstructor() { this(false); } FixedAngleObject A; ConstructionObject O; boolean ShowsValue; int Moved; @Override public void mousePressed(final MouseEvent e, final ZirkelCanvas zc) { if (!zc.Visual) return; if (P1 == null) { P1 = select(e.getX(), e.getY(), zc, e.isAltDown()); if (P1 != null) { P1.setSelected(true); zc.repaint(); } showStatus(zc); } else if (P2 == null) { P2 = select(e.getX(), e.getY(), zc, e.isAltDown()); if (P2 != null) { P2.setSelected(true); zc.repaint(); } showStatus(zc); } else { if (!e.isShiftDown() && !Fixed) { P3 = select(e.getX(), e.getY(), zc, e.isAltDown()); if (P3 != null) { if (P3 == P1 || P3 == P2) { P3 = null; return; } final AngleObject a = new AngleObject(zc.getConstruction(), P1, P2, P3); zc.addObject(a); a.setDefaults(); if (P3.moveable() && !P3.isPointOn() && zc.isNewPoint()) { ShowsValue = a.showValue(); if (Global.getParameter("options.movefixname", true)) a.setShowValue(true); O = a; Dragging = true; a.validate(); zc.repaint(); } else { Dragging = false; P1 = P2 = P3 = null; reset(zc); zc.validate(); zc.repaint(); } } } else { final FixedAngleObject a = new FixedAngleObject(zc .getConstruction(), P1, P2, zc.x(e.getX()), zc.y(e .getY())); zc.addObject(a); a.setDefaults(); a.init(zc.getConstruction(), zc.x(e.getX()), zc.y(e.getY())); Moved = 0; Dragging = true; ShowsValue = a.showValue(); if (Global.getParameter("options.movefixname", true)) a.setShowValue(true); O = A = a; P3 = null; zc.repaint(); } } } @Override public boolean waitForLastPoint() { return P1 != null && P2 != null; } @Override public boolean waitForPoint() { return !Fixed || (P1 == null || P2 == null); } @Override public void finishConstruction(final MouseEvent e, final ZirkelCanvas zc) { if (!Fixed) { P3 = select(e.getX(), e.getY(), zc, e.isAltDown()); if (P3 != null) { final AngleObject a = new AngleObject(zc.getConstruction(), P1, P2, P3); zc.addObject(a); a.setDefaults(); } zc.repaint(); P3 = null; } else { final FixedAngleObject a = new FixedAngleObject(zc .getConstruction(), P1, P2, zc.x(e.getX()), zc.y(e.getY())); zc.addObject(a); a.setDefaults(); a.init(zc.getConstruction(), zc.x(e.getX()), zc.y(e.getY())); zc.setPreviewObject(a); zc.repaint(); } } @Override public void mouseDragged(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) return; Moved++; if (P3 == null) { A.init(zc.getConstruction(), zc.x(e.getX()), zc.y(e.getY())); if (A instanceof FixedAngleObject) ((FixedAngleObject) A).setDragable(Moved > 5); } else { P3.move(zc.x(e.getX()), zc.y(e.getY())); zc.validate(); } zc.repaint(); } @Override public void mouseReleased(final MouseEvent e, final ZirkelCanvas zc) { if (!Dragging) return; Dragging = false; O.setShowValue(ShowsValue); zc.repaint(); if (P3 == null) { zc.clearSelected(); A.round(); if (Moved < 5) { A.edit(zc, true, true); if (A instanceof FixedAngleObject && ((FixedAngleObject) A).isEditAborted()) { zc.delete(A); reset(zc); return; } } A.validate(); zc.check(); } else P3.updateText(); reset(zc); zc.showStatus(); } public PointObject select(final int x, final int y, final ZirkelCanvas zc, boolean altdown) { return zc.selectCreatePoint(x, y, altdown); } @Override public void reset(final ZirkelCanvas zc) { super.reset(zc); if (zc.Visual) { P1 = P2 = P3 = null; showStatus(zc); } else { zc.setPrompt(Global.name("prompt.angle")); } } @Override public void showStatus(final ZirkelCanvas zc) { if (Fixed) { if (P1 == null) zc.showStatus(Global.name("message.fixedangle.first")); else if (P2 == null) zc.showStatus(Global.name("message.fixedangle.root")); else zc.showStatus(Global.name("message.fixedangle.second")); } else { if (P1 == null) zc.showStatus(Global.name("message.angle.first")); else if (P2 == null) zc.showStatus(Global.name("message.angle.root")); else zc.showStatus(Global.name("message.angle.second")); } } @Override public boolean construct(final XmlTree tree, final Construction c) throws ConstructionException { if (!testTree(tree, "Angle")) return false; final XmlTag tag = tree.getTag(); if (!tag.hasParam("first")) { final AngleObject o = new AngleObject(c); try { if (tag.hasParam("display")) { final String type = tag.getValue("display"); if (type.equals("small")) o.setDisplaySize(AngleObject.SMALL); if (type.equals("large")) o.setDisplaySize(AngleObject.LARGE); if (type.equals("larger")) o.setDisplaySize(AngleObject.LARGER); if (type.equals("rectangle")) o.setDisplaySize(AngleObject.RECT); } setName(tag, o); set(tree, o); c.add(o); setConditionals(tree, c, o); if (tag.hasTrueParam("filled")) o.setFilled(true); if (tag.hasParam("fixed")) o.setFixed(tag.getValue("fixed")); if (tag.hasTrueParam("acute")) o.setObtuse(false); else o.setObtuse(true); } catch (final Exception e) { } } if (!tag.hasParam("first") || !tag.hasParam("root")) throw new ConstructionException("Angle parameters missing!"); if (tag.hasParam("second")) { try { final PointObject p1 = (PointObject) c.find(tag .getValue("first")); final PointObject p2 = (PointObject) c.find(tag .getValue("root")); final PointObject p3 = (PointObject) c.find(tag .getValue("second")); final AngleObject o = new AngleObject(c, p1, p2, p3); if (tag.hasParam("display")) { final String type = tag.getValue("display"); if (type.equals("small")) o.setDisplaySize(AngleObject.SMALL); if (type.equals("large")) o.setDisplaySize(AngleObject.LARGE); if (type.equals("larger")) o.setDisplaySize(AngleObject.LARGER); if (type.equals("rectangle")) o.setDisplaySize(AngleObject.RECT); } setName(tag, o); set(tree, o); c.add(o); setConditionals(tree, c, o); if (tag.hasTrueParam("filled")) o.setFilled(true); if (tag.hasParam("fixed")) o.setFixed(tag.getValue("fixed")); if (tag.hasTrueParam("acute")) o.setObtuse(false); else o.setObtuse(true); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Angle parameters illegal!"); } } else { try { final PointObject p1 = (PointObject) c.find(tag .getValue("first")); final PointObject p2 = (PointObject) c.find(tag .getValue("root")); final FixedAngleObject o = new FixedAngleObject(c, p1, p2, 0, 0); if (tag.hasParam("display")) { final String type = tag.getValue("display"); if (type.equals("small")) o.setDisplaySize(FixedAngleObject.SMALL); if (type.equals("large")) o.setDisplaySize(FixedAngleObject.LARGE); if (type.equals("larger")) o.setDisplaySize(FixedAngleObject.LARGER); if (type.equals("rectangle")) o.setDisplaySize(FixedAngleObject.RECT); } setName(tag, o); set(tree, o); c.add(o); setConditionals(tree, c, o); if (tag.hasTrueParam("filled")) o.setFilled(true); if (tag.hasTrueParam("acute")) o.setObtuse(false); else o.setObtuse(true); if (tag.hasTrueParam("inverse")) o.setInverse(true); else o.setInverse(false); if (tag.hasTrueParam("reduced")) o.setReduced(true); else o.setReduced(false); if (tag.hasTrueParam("dragable")) o.setDragable(true); if (tag.hasTrueParam("drawable")) o.setDragable(true); // downward compatibility if (tag.hasParam("fixed")) o.setFixed(tag.getValue("fixed")); else throw new ConstructionException(""); } catch (final ConstructionException e) { throw e; } catch (final Exception e) { throw new ConstructionException("Angle parameters illegal!"); } } return true; } @Override public String getTag() { return "Angle"; } @Override public void construct(final Construction c, final String name, final String params[], final int nparams) throws ConstructionException { if (nparams != 3) throw new ConstructionException(Global.name("exception.nparams")); final ConstructionObject P1 = c.find(params[0]); if (P1 == null) throw new ConstructionException(Global.name("exception.notfound") + " " + params[0]); final ConstructionObject P2 = c.find(params[1]); if (P2 == null) throw new ConstructionException(Global.name("exception.notfound") + " " + params[1]); final ConstructionObject P3 = c.find(params[2]); if (P3 == null || !(P3 instanceof PointObject)) { final Expression ex = new Expression(params[2], c, null); if (!ex.isValid()) throw new ConstructionException(Global.name("exception.expression")); final FixedAngleObject s = new FixedAngleObject(c, (PointObject) P1, (PointObject) P2, 0, 0); s.setFixed(params[2]); if (!name.equals("")) s.setNameCheck(name); c.add(s); s.setDefaults(); s.setObtuse(true); s.setFixed(params[2]); s.validate(); return; } if (!(P1 instanceof PointObject)) throw new ConstructionException(Global.name("exception.type") + " " + params[0]); if (!(P2 instanceof PointObject)) throw new ConstructionException(Global.name("exception.type") + " " + params[1]); if (!(P3 instanceof PointObject)) throw new ConstructionException(Global.name("exception.type") + " " + params[2]); if (P1 == P2 || P2 == P3) throw new ConstructionException(Global.name("exception.parameter")); final AngleObject s = new AngleObject(c, (PointObject) P1, (PointObject) P2, (PointObject) P3); if (!name.equals("")) s.setNameCheck(name); c.add(s); s.setDefaults(); } } ./src/rene/zirkel/ZirkelCanvas.java0000640000175000017500000052045411364071467016247 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . t */ package rene.zirkel; // file: ZirkelCanvas.java import java.awt.CheckboxMenuItem; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.TextField; import java.awt.datatransfer.Clipboard; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.Enumeration; import java.util.Vector; import java.util.zip.GZIPOutputStream; import rene.dialogs.Warning; import rene.gui.Global; import rene.gui.MyCheckboxMenuItem; import rene.gui.MyMenuItem; import rene.util.FileName; import rene.util.ImageSelection; import rene.util.MyVector; import rene.util.PngEncoder; import rene.util.sort.Sorter; import rene.util.xml.XmlReader; import rene.util.xml.XmlTag; import rene.util.xml.XmlTagPI; import rene.util.xml.XmlTree; import rene.util.xml.XmlWriter; import rene.zirkel.construction.ChangedListener; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.construction.Interpreter; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.IntersectionConstructor; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.Drawing; import rene.zirkel.graphics.LatexOutput; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.graphics.MyGraphicsEPS; import rene.zirkel.graphics.MyGraphicsFig; import rene.zirkel.graphics.MyGraphicsPDF; import rene.zirkel.graphics.MyGraphicsSvg; import rene.zirkel.graphics.PolygonDrawer; import rene.zirkel.graphics.TrackPainter; import rene.zirkel.listener.AddEventListener; import rene.zirkel.listener.DoneListener; import rene.zirkel.listener.StatusListener; import rene.zirkel.macro.Macro; import rene.zirkel.macro.MacroBar; import rene.zirkel.macro.MacroItem; import rene.zirkel.macro.MacroMenu; import rene.zirkel.macro.MacroRunner; import rene.zirkel.objects.AngleObject; import rene.zirkel.objects.AreaObject; import rene.zirkel.objects.AxisObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.EquationXYObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.FixedAngleObject; import rene.zirkel.objects.FixedCircleObject; import rene.zirkel.objects.FunctionObject; import rene.zirkel.objects.IntersectionObject; import rene.zirkel.objects.MoveableObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PointonObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.QuadricObject; import rene.zirkel.objects.RayObject; import rene.zirkel.objects.SegmentObject; import rene.zirkel.objects.TwoPointLineObject; import rene.zirkel.objects.UserFunctionObject; import rene.zirkel.objects.JLocusTrackObject; import rene.zirkel.structures.CoordinatesXY; import rene.zirkel.tools.AnimatorTool; import rene.zirkel.tools.BinderTool; import rene.zirkel.tools.BreakpointAnimator; import rene.zirkel.tools.EditTool; import rene.zirkel.tools.LabelMover; import rene.zirkel.tools.MagnetTool; import rene.zirkel.tools.MetaMover; import rene.zirkel.tools.MoverTool; import rene.zirkel.tools.ObjectTracker; import rene.zirkel.tools.SaveJob; import rene.zirkel.tools.SetAwayTool; import rene.zirkel.tools.SetCurveCenterTool; import rene.zirkel.tools.SetFixedAngle; import rene.zirkel.tools.SetFixedCircle; import rene.zirkel.tools.SetRangeTool; import rene.zirkel.tools.SetTargetsTool; import rene.zirkel.tools.Tracker; import rene.zirkel.tools.UniversalTracker; import rene.zirkel.tools.ZoomerTool; import atp.sHotEqn; //import eric.JUndo; //import eric.applet.dock.dock; import eric.GUI.palette.JIcon; import eric.GUI.palette.JIconMouseAdapter; import eric.GUI.palette.PaletteManager; import eric.GUI.pipe_tools; import eric.GUI.themes; import eric.JSprogram.ScriptItem; import eric.JSprogram.ScriptPanel; import eric.JZirkelCanvas; import eric.animations.AnimationPanel; import eric.bar.JPropertiesBar; import eric.controls.JControlsManager; import eric.jobs.JobManager; import eric.macros.MacroTools; import eric.restrict.RestrictContainer; import eric.restrict.RestrictItems; import java.awt.Point; import java.awt.Toolkit; import java.util.ArrayList; import javax.swing.JPopupMenu; import javax.swing.SwingUtilities; import rene.util.parser.StringParser; import rene.zirkel.construction.ConstructionDisplayPanel; import rene.zirkel.macro.MacroContextualPopupMenu; import rene.zirkel.tools.DefineJobTool; import rene.zirkel.tools.JSmacroTool; import rene.zirkel.tools.nullTool; /** * @author Rene Main class, doing most of the work in the C.a.R. application. * This canvas handles mouse and keyboard input, displays the * construction and has tools to save and load constructions. */ public class ZirkelCanvas extends javax.swing.JPanel implements MouseListener, MouseMotionListener, ItemListener, AddEventListener, ActionListener, ChangedListener, MouseWheelListener // the canvas to do the construction { /** * */ private int minfontsize, minpointsize, minlinesize, arrowsize, digits_lengths, digits_edit, digits_angles, colorbackgroundx, colorbackgroundy, colorbackgroundPal, axis_color, axis_thickness; private boolean axis_show, axis_labels, axis_with_grid; private String colorbackground; private static JIconMouseAdapter JIMA=new JIconMouseAdapter(); ObjectConstructor OC=new MoverTool(); // the current object constructor Construction C=new Construction(), COriginal; // the construction (collection of Constructor-Objects) StatusListener SL=null; // for displaying a status message public Image I=null; MyGraphics IG; public UniversalTracker UniversalTrack=null; Image Background=null; FontMetrics FM; public double PointSize=4.0; // Size of a point double MinPointSize=4.0; // Default minimal point size public double FontSize=12.0; // Size of font double MinFontSize=12.0; // Default minimal font size public int IW=0, IH=0; // Image and its dimensions public double Xmin, DX, Ymin, DY; boolean ShowHidden=false; // show hidden objects // Frame F=new Frame(); boolean ReadOnly; boolean AllowRightMouse=true; public MacroContextualPopupMenu PM; CheckboxMenuItem CheckboxHidden; MenuItem Replay, Empty; boolean Job=false; // this is a job (save as such) String Last=""; // Last displayed job object Vector Targets=new Vector(); // Target names ConstructionObject TargetO[], TargetS[]; // Target objects and solutions int ShowColor=0; // 0=all, 1=green etc. (black displays always) static public double // factors for rounding EditFactor=1000000.0, LengthsFactor=100.0, AnglesFactor=1.0; public boolean Visual=Global.getParameter("options.visual", true); boolean All; boolean Interactive=true; public JControlsManager JCM; private ScriptPanel Scripts; private AnimationPanel Animations; private JobManager Exercise; private RestrictContainer RestrictDialog=null; //GUI for Restricted icons editing private RestrictItems Restrict_items; // Restricted icons and palette zones private boolean is3D=false; private int OwnerWindowWidth, OwnerWindowHeight; private boolean islibrarymacrovisible=true; // public JUndo JU=new JUndo(); // private dock DOCK; private boolean paintCalled=false; /** * Initiate an empty construction. The display may have a popup menu (only * for readonly displays). * * @param readonly * User cannot change the construction. * @param replay * Replay option in popup menu. * @param hidden * Show hidden option in popup menu. */ public ZirkelCanvas(final boolean readonly, final boolean replay, final boolean hidden) { ReadOnly=readonly; AllowRightMouse=!readonly; // setLayout(new BoxLayout(this,BoxLayout.X_AXIS)); setLayout(null); UniversalTrack=new UniversalTracker(this); JCM=new JControlsManager(this); if (Global.getParameter("options.nopopupmenu", false)) { PM=null; } else if (ReadOnly) { PM=new MacroContextualPopupMenu(); CheckboxHidden=new MyCheckboxMenuItem(Global.name("popup.hidden")); CheckboxHidden.addItemListener(this); if (hidden) { PM.add(CheckboxHidden); } Replay=new MyMenuItem(Global.name("popup.replay")); Replay.addActionListener(this); if (replay) { PM.add(Replay); } if (hidden||replay) { add(PM); } else { PM=null; } } else { PM=new MacroContextualPopupMenu(); Empty=new MyMenuItem(Global.name("popup.empty")); add(PM); } C.addChangedListener(this); clear(); updateDigits(); C.addAddEventListener(this); addMouseWheelListener(this); addMouseMotionListener(JIMA); /* Preferences which must be apply to * Every new Canvas : */ Global.setParameter("axis_show", false); Global.setParameter("colorbackground", getColor("245,245,245")); Global.setParameter("colorbackgroundx", 139); Global.setParameter("colorbackgroundy", 9); Global.setParameter("colorbackgroundPal", 4); axis_show=false; colorbackground="245,245,245"; colorbackgroundx=139; colorbackgroundy=9; colorbackgroundPal=4; Scripts=new ScriptPanel(this); Animations=new AnimationPanel(this); Exercise=new JobManager(this); Restrict_items=new RestrictItems(this); // add(Animations); // add(Scripts); // add(RestrictDialog); } public ZirkelCanvas(final boolean readonly) { this(readonly, true, true); } public ZirkelCanvas() { this(false, true, true); } public void getLocalPreferences() { minfontsize=Global.getParameter("minfontsize", 12); minpointsize=Global.getParameter("minpointsize", 3); minlinesize=Global.getParameter("minlinesize", 1); arrowsize=Global.getParameter("arrowsize", 10); digits_lengths=Global.getParameter("digits.lengths", 2); digits_edit=Global.getParameter("digits.edit", 4); digits_angles=Global.getParameter("digits.angles", 2); colorbackground=Global.getParameter("colorbackground", "245,245,245"); colorbackgroundx=Global.getParameter("colorbackgroundx", 139); colorbackgroundy=Global.getParameter("colorbackgroundy", 9); colorbackgroundPal=Global.getParameter("colorbackgroundPal", 4); axis_color=Global.getParameter("axis_color", 0); axis_thickness=Global.getParameter("axis_thickness", 0); axis_show=Global.getParameter("axis_show", false); axis_labels=Global.getParameter("axis_labels", true); axis_with_grid=Global.getParameter("axis_with_grid", true); } public void setLocalPreferences() { Global.setParameter("minfontsize", minfontsize); Global.setParameter("minpointsize", minpointsize); Global.setParameter("minlinesize", minlinesize); Global.setParameter("arrowsize", arrowsize); Global.setParameter("digits.lengths", digits_lengths); Global.setParameter("digits.edit", digits_edit); Global.setParameter("digits.angles", digits_angles); Global.setParameter("colorbackground", getColor(colorbackground)); Global.setParameter("colorbackgroundx", colorbackgroundx); Global.setParameter("colorbackgroundy", colorbackgroundy); Global.setParameter("colorbackgroundPal", colorbackgroundPal); Global.setParameter("axis_color", axis_color); Global.setParameter("axis_thickness", axis_thickness); Global.setParameter("axis_show", axis_show); Global.setParameter("axis_labels", axis_labels); Global.setParameter("axis_with_grid", axis_with_grid); } public void XmlTagWriter(final XmlWriter xml) { xml.startTagStart("Windowdim"); xml.printArg("w", ""+pipe_tools.getWindowSize().width); xml.printArg("h", ""+pipe_tools.getWindowSize().height); xml.finishTagNewLine(); xml.startTagStart("Preferences"); xml.printArg("minfontsize", ""+minfontsize); xml.printArg("minpointsize", ""+minpointsize); xml.printArg("minlinesize", ""+minlinesize); xml.printArg("arrowsize", ""+arrowsize); xml.printArg("digits.lengths", ""+digits_lengths); xml.printArg("digits.edit", ""+digits_edit); xml.printArg("digits.angles", ""+digits_angles); xml.printArg("colorbackground", ""+colorbackground); xml.printArg("colorbackgroundx", ""+colorbackgroundx); xml.printArg("colorbackgroundy", ""+colorbackgroundy); xml.printArg("colorbackgroundPal", ""+colorbackgroundPal); xml.printArg("fig3D", String.valueOf(is3D())); xml.finishTagNewLine(); } public void XmlTagReader(final XmlTag tag) { if ((!(pipe_tools.isApplet()))&&(tag.name().equals("Windowdim"))&&(tag.hasParam("w"))&&(tag.hasParam("h"))) { OwnerWindowWidth=Integer.parseInt(tag.getValue("w")); OwnerWindowHeight=Integer.parseInt(tag.getValue("h")); } else if (tag.name().equals("Preferences")) { if ((tag.hasParam("minfontsize"))) { Global.setParameter("minfontsize", tag.getValue("minfontsize")); } if ((tag.hasParam("minpointsize"))) { Global.setParameter("minpointsize", tag.getValue("minpointsize")); } if ((tag.hasParam("minlinesize"))) { Global.setParameter("minlinesize", tag.getValue("minlinesize")); } if ((tag.hasParam("arrowsize"))) { Global.setParameter("arrowsize", tag.getValue("arrowsize")); } if ((tag.hasParam("digits.lengths"))) { Global.setParameter("digits.lengths", tag.getValue("digits.lengths")); } if ((tag.hasParam("digits.edit"))) { Global.setParameter("digits.edit", tag.getValue("digits.edit")); } if ((tag.hasParam("digits.angles"))) { Global.setParameter("digits.angles", tag.getValue("digits.angles")); } if ((tag.hasParam("colorbackground"))) { Global.setParameter("colorbackground", getColor(tag.getValue("colorbackground"))); } if ((tag.hasParam("colorbackgroundx"))) { Global.setParameter("colorbackgroundx", tag.getValue("colorbackgroundx")); } if ((tag.hasParam("colorbackgroundy"))) { Global.setParameter("colorbackgroundy", tag.getValue("colorbackgroundy")); } if ((tag.hasParam("colorbackgroundPal"))) { Global.setParameter("colorbackgroundPal", tag.getValue("colorbackgroundPal")); } if ((tag.hasParam("fig3D"))) { set3D(Boolean.valueOf(tag.getValue("fig3D")).booleanValue()); } } } // get a Color object from a string like "231,145,122" private Color getColor(final String s) { final StringParser p=new StringParser(s); p.replace(',', ' '); int red, green, blue; red=p.parseint(); green=p.parseint(); blue=p.parseint(); return new Color(red, green, blue); } public void set3D(boolean b) { is3D=b; } public boolean is3D() { return is3D; } public void deleteAxisObjects() { C.deleteAxisObjects(); reloadCD(); repaintCD(); } public void createAxisObjects() { C.createAxisObjects(); } private void setShowHideParameters(final String s, final boolean b) { Global.setParameter("options.point."+s, b); Global.setParameter("options.segment."+s, b); Global.setParameter("options.line."+s, b); Global.setParameter("options.circle."+s, b); Global.setParameter("options.angle."+s, b); Global.setParameter("options.text."+s, b); Global.setParameter("options.locus."+s, b); Global.setParameter("options."+s, b); // setShowNames(true); } public void JSsend(final String s) { if (s.equals("shownames")) { setShowHideParameters("shownames", true); } else if (s.equals("hidenames")) { setShowHideParameters("shownames", false); } else if (s.equals("showvalues")) { setShowHideParameters("showvalues", true); } else if (s.equals("hidevalues")) { setShowHideParameters("showvalues", false); } else { try { C.interpret(this, s); } catch (final Exception ex) { } } } public String JSreceive(final String s) { String r="ERROR..."; try { double rep; final Expression exp=new Expression(s, C, null); rep=exp.getValue(); r=String.valueOf(rep); } catch (final ConstructionException ex) { ex.printStackTrace(); } return r; } public Dimension UseSize=null; @Override public Dimension getMinimumSize() { if (Background==null||!Global.getParameter("background.usesize", false)) { if (UseSize!=null) { return UseSize; } else { return new Dimension(600, 600); } } else { final int iw=Background.getWidth(this); if (iw<10) { return new Dimension(600, 600); } final int ih=Background.getHeight(this); if (Global.getParameter("background.usewidth", false)) { final int w=getSize().width, h=(int) ((double) ih/iw*w+0.5); return new Dimension(w, h); } else { return new Dimension(iw, ih); } } } @Override public Dimension getPreferredSize() { return getMinimumSize(); } public void updateDigits() { EditFactor=Math.pow(10, Global.getParameter("digits.edit", 5)); LengthsFactor=Math.pow(10, Global.getParameter("digits.lengths", 5)); AnglesFactor=Math.pow(10, Global.getParameter("digits.angles", 0)); } public void itemStateChanged(final ItemEvent e) { if (e.getSource()==CheckboxHidden) { ShowHidden=CheckboxHidden.getState(); repaint(); } } ZirkelCanvasInterface ZCI; public void setZirkelCanvasListener(final ZirkelCanvasInterface zci) { ZCI=zci; } public String loadImage() { return ZCI.loadImage(); } public Image doLoadImage(final String filename) { return ZCI.doLoadImage(filename); } public void actionPerformed(final ActionEvent e) { if (!Interactive) { return; } if (e.getSource()==Replay) { if (ZCI!=null) { ZCI.replayChosen(); } } else { final Enumeration en=Macros.elements(); while (en.hasMoreElements()) { final MacroItem m=(MacroItem) en.nextElement(); if (m.I==e.getSource()) { if (ZCI!=null) { ZCI.runMacro(m.M); } break; } } } } // Some transfer functions to compute screen coordinates etc. public double col(final double x) { return (x-Xmin)/DX*IW; } public double row(final double y) { return IH-(y-Ymin)/DY*IH; } public int width() { return IW; } public int height() { return IH; } public double x(final int c) { return Xmin+DX*c/IW; } public double y(final int r) { return Ymin+DY*(IH-r)/IH; } public double dx(final int c) { return DX*c/IW; } public double dy(final int r) { return DY*r/IH; } public double dx(final double c) { return DX*c/IW; } public double dy(final double r) { return DY*r/IH; } public double maxX() { return Xmin+DX; } public double minX() { return Xmin; } public double maxY() { return Ymin+DY; } public double minY() { return Ymin; } public boolean isInside(final double x, final double y) { return x>=Xmin&&x=Ymin&&y0) { C.setPixel(getSize().width/DX); } } DoneListener DL; public void setDoneListener(final DoneListener dl) { DL=dl; } /** * Add an item to the construction and re-paint the construction. */ public void addObject(final ConstructionObject o) // called by the // ObjectConstructor { C.add(o); if (Preview) { o.setIndicated(true); o.setSelectable(false); } C.updateCircleDep(); } /** * A construction added an item. Check, if it solves a problem and notify * the DoneListener, if so. */ public void added(final Construction c, final ConstructionObject o) { if (isPreview()) { return; } if (C.loading()) { return; } if (o instanceof UserFunctionObject) { JPropertiesBar.EditObject(o); } } public boolean check(final Construction c) { final int n=TargetO.length; for (int i=0; i0) { boolean olddone=true; for (int i=0; i0) { final ConstructionObject o=select(v, e.getX(), e.getY()); if (o!=null) { new EditTool().mousePressed(e, o, this); check(); return; } else { repaintCD(); } return; } } if (Moved<=2&&PM!=null&&!Global.getParameter("restricted", false)) { int n=2; if (ReadOnly||!Global.getParameter("options.doubleclick", false)) { n=1; } if (e.getClickCount()>=n&&(ReadOnly||Macros.size()!=0)) { PM.show(e.getComponent(), e.getX(), e.getY()); } } repaintCD(); return; } if (SmartBoardPreview&&Global.getParameter("smartboard", false)) { Control=e.isControlDown(); clearIndicated(); clearPreview(); repaint(); Dragging=false; OC.mousePressed(e, this); SmartBoardPreview=false; mouseReleased(e); return; } if (!Dragging) { OC.mouseReleased(e, this); Dragging=false; repaintCD(); return; } if (Moved<=1) { if (OC instanceof LabelMover) { ((LabelMover) OC).resetPoint(); OC.mouseReleased(e, this); } else if (OC instanceof MetaMover) { OC.mouseReleased(e, this); if (!ReadOnly) { new EditTool().mousePressed(e, this); } } } else { OC.mouseReleased(e, this); } repaintCD(); check(); Dragging=false; } public synchronized void mouseClicked(final MouseEvent e) { } public synchronized void mouseExited(final MouseEvent e) { if (!Interactive) { return; } clearIndicated(); clearPreview(); repaint(); SmartBoardPreview=false; RightClicked=false; repaintCD(); } public void mouseEntered(final MouseEvent e) { } public synchronized void mouseMoved(final MouseEvent e) { if (!Interactive||!Global.getParameter("options.indicate", true)) { return; } if (Global.getParameter("smartboard", false)) { return; } Count.setAllAlternate(true); OC.mouseMoved(e, this, Global.getParameter("options.indicate.simple", false)); Count.setAllAlternate(false); repaintCD(); } DragThread DT=null; public synchronized void mouseDragged(final MouseEvent e) { if (!Interactive) { return; } if (DT==null) { DT=new DragThread(this); } if (SmartBoardPreview&&Global.getParameter("smartboard", false)) { OC.mouseMoved(e, this, Global.getParameter( "options.indicate.simple", false)); } else { DT.mouseDragged(e); Moved++; } repaintCD(); } public synchronized void doMouseDragged(final MouseEvent e) { OC.mouseDragged(e, this); } ConstructionObject LastPaint=null; public void newImage() { I=null; repaint(); } boolean Frozen=false; public void setFrozen(final boolean f) { Frozen=f; } public boolean getFrozen() { return Frozen; } final double PointSizeFactor=240.0; int CC=0; // public void repaint(){ // // System.out.print("a "); // // super.repaint(); // StackTraceElement[] trace = new Throwable().getStackTrace(); // if (!trace[1].equals("javax.swing.JComponent")) super.repaint(); // // // for (int i=0;i0) { final ConstructionObject os[]=new ConstructionObject[n]; e=C.elements(); n=0; while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.HasZ) { os[n++]=o; } } Sorter.sort(os); for (int i=0; i250&&PolygonDrawer.step<50) { PolygonDrawer.step=PolygonDrawer.step*2; } if (time<100&&PolygonDrawer.step>4) { PolygonDrawer.step=PolygonDrawer.step/2; } paintDrawings(IG); // JMacrosTools.CurrentJZF.JCM.paintControls(IG.getGraphics()); } void dopaintFig(final MyGraphicsFig IG) { if (getAxis_show()) { if (Global.getParameter("axis_with_grid", true)) { paintGrid(IG); } else { paintAxes(IG); } } IG.pushLayer(true); int layer=0; while (true) { IG.pushLayer(); int l=0; Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==LastPaint) { break; } if (l==layer&&o.isBack()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l>layer) { break; } } } if (llayer) { break; } } } l=0; e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==LastPaint) { break; } if (l==layer&&!o.isBack()&&o.selected()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l>layer) { break; } } } layer++; } IG.pushLayer(false); if (LastPaint==null) { paintTrack(IG); } } int xg[]=new int[64], yg[]=new int[64]; /** * Paint axes and grid. * * @param IG */ void paintGrid(final MyGraphics IG) { int GridThickness=Global.getParameter("axis_thickness", 0); int GridColor=Global.getParameter("axis_color", 0); boolean GridLabels=Global.getParameter("axis_labels", false); boolean GridBold=Global.getParameter("grid.bold", false); boolean GridLarge=Global.getParameter("grid.large", false); if (GridThickness==ConstructionObject.THIN) { IG.setColor(ZirkelFrame.LightColors[GridColor]); } else { IG.setColor(ZirkelFrame.Colors[GridColor]); } IG.setFont(GridLarge, GridBold); final double gridsize=getGridSize(); int dd=IH/200; if (dd<1) { dd=1; } double x1=Math.floor((C.getX()-C.getW())/gridsize-1)*gridsize; int xi=0; while (x1<(C.getX()+C.getW())&&xi<64) { final int c=(int) col(x1); xg[xi++]=c; x1+=gridsize; } double y1=Math.floor((C.getY()-C.getW())/gridsize-1)*gridsize; int yi=0; while (y1<(C.getY()+C.getW())&&yi<64) { final int r=(int) row(y1); yg[yi++]=r; y1+=gridsize; } for (int i=0; iC.getX()-C.getW()) { final int c=(int) col(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(c, 0, c, IH); } else { IG.drawThickLine(c, 0, c, IH); } } if (0C.getY()-C.getW()) { final int r=(int) row(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(0, r, IW, r); } else { IG.drawThickLine(0, r, IW, r); } } } dd=dd*2; double labelsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; while (C.getW()*2/labelsize>=10) { labelsize*=10; } if (C.getW()*2/labelsize<5) { labelsize/=2; } final FontMetrics fm=IG.getFontMetrics(); final int FH=fm.getHeight(); x1=Math.floor((C.getX()-C.getW())/labelsize-1)*labelsize; int lh=(int) row(0); int bottomshift=FH+2; if (lh<0||lh>IH) { lh=IH; bottomshift=-7; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); final String s=format(x1); if (s.length()>0) { if (GridLabels) { IG.drawString(s, c-fm.stringWidth(s)/2, lh+bottomshift); } IG.drawLine(c, lh-dd, c, lh+dd); } x1+=labelsize; } boolean left=true; int lw=(int) col(0); if (lw<0||lw>IW-20) { lw=0; left=false; } y1=Math.floor((C.getY()-C.getW())/labelsize-1)*labelsize; while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); final String s=format(y1); if (s.length()>0) { final int leftshift=(left)?-fm.stringWidth(s)-5:8; if (GridLabels) { IG.drawString(s, lw+leftshift, r+FH/2-2); } IG.drawLine(lw-dd, r, lw+dd, r); } y1+=labelsize; } } public boolean getAxis_show() { return Global.getParameter("axis_show", false); } public void setAxis_show(boolean b) { axis_show=b; Global.setParameter("axis_show", b); } public void setAxis_labels(boolean b) { axis_labels=b; Global.setParameter("axis_labels", b); } public void setAxis_with_grid(boolean b) { axis_with_grid=b; Global.setParameter("axis_with_grid", b); } public void setAxis_color(int i) { axis_color=i; Global.setParameter("axis_color", i); } public void setAxis_thickness(int i) { axis_thickness=i; Global.setParameter("axis_thickness", i); } /** * Paint only the coordinate axes (no grid) * * @param IG */ void paintAxes(final MyGraphics IG) { // System.out.println("paintAxes"); IG.setAntialiasing(false); int GridThickness=Global.getParameter("axis_thickness", 0); int GridColor=Global.getParameter("axis_color", 0); boolean GridLabels=Global.getParameter("axis_labels", false); boolean GridBold=Global.getParameter("grid.bold", false); boolean GridLarge=Global.getParameter("grid.large", false); if (GridThickness==ConstructionObject.THIN) { IG.setColor(ZirkelFrame.LightColors[GridColor]); } else { IG.setColor(ZirkelFrame.Colors[GridColor]); } IG.setFont(GridLarge, GridBold); final double gridsize=getGridSize(); double x1=Math.floor((C.getX()-C.getW())/gridsize-1)*gridsize; final int r0=(int) row(0); int dd=IH/200; if (dd<1) { dd=1; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); IG.drawLine(c, r0-dd, c, r0+dd); x1+=gridsize; } double y1=Math.floor((C.getY()-C.getW())/gridsize-1)*gridsize; final int c0=(int) col(0); while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); IG.drawLine(c0-dd, r, c0+dd, r); y1+=gridsize; } if (GridThickness!=ConstructionObject.INVISIBLE) { if (0C.getX()-C.getW()) { final int c=(int) col(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(c, 0, c, IH); // IG.drawRect(c, 0, 1, IH); } else { IG.drawThickLine(c, 0, c, IH); } } if (0C.getY()-C.getW()) { final int r=(int) row(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(0, r, IW, r); } else { IG.drawThickLine(0, r, IW, r); } } } dd=dd*2; double labelsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; while (C.getW()*2/labelsize>=10) { labelsize*=10; } if (C.getW()*2/labelsize<5) { labelsize/=2; } final FontMetrics fm=IG.getFontMetrics(); final int FH=fm.getHeight(); x1=Math.floor((C.getX()-C.getW())/labelsize-1)*labelsize; int lh=(int) row(0); int bottomshift=FH+2; if (lh<0||lh>IH) { lh=IH; bottomshift=-7; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); final String s=format(x1); if (s.length()>0) { if (GridLabels) { IG.drawString(s, c-fm.stringWidth(s)/2, lh+bottomshift); } IG.drawLine(c, lh-dd, c, lh+dd); } x1+=labelsize; } boolean left=true; int lw=(int) col(0); if (lw<0||lw>IW-20) { lw=0; left=false; } y1=Math.floor((C.getY()-C.getW())/labelsize-1)*labelsize; while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); final String s=format(y1); if (s.length()>0) { final int leftshift=(left)?-fm.stringWidth(s)-5:8; if (GridLabels) { IG.drawString(s, lw+leftshift, r+FH/2-2); } IG.drawLine(lw-dd, r, lw+dd, r); } y1+=labelsize; } IG.setAntialiasing(true); } public double pointSize() { return PointSize; } public double SelectionPointFactor=Global.getParameter("selectionsize", 1.5); public double selectionSize() { return SelectionPointFactor*PointSize; } public double Scale=1.0; public int scale(final int x) { return (int) (Scale*x); } static char c[]=new char[20]; int nc; public String format(double x) { // double xx=x; nc=0; boolean minus=false; if (x<-1e-12) { minus=true; x=-x; } x+=1e-12; final double h=x-Math.floor(x); if (rekformat(h, 8)) { c[nc++]='.'; } while (x>=1) { final double s=Math.floor(x/10); c[nc++]=(char) ('0'+(int) (x-s*10)); x=s; } if (nc>0&&minus) { c[nc++]='-'; } // revert c: for (int i=0; i "+new String(c,0,nc)); return new String(c, 0, nc); } boolean rekformat(double h, final int k) { h=h*10; final double x=Math.floor(h); if (k==0) { final int i=(int) x; if (i>0) { c[nc++]=(char) ('0'+i); return true; } else { return false; } } else { final int i=(int) x; if (rekformat(h-x, k-1)||i>0) { c[nc++]=(char) ('0'+i); return true; } else { return false; } } } @Override public void update(final Graphics g) { paint(g); } public void paintUntil(final ConstructionObject o) { if (LastPaint==o) { return; } LastPaint=o; repaint(); } // validate all elements @Override public void validate() { dovalidate(); if (OC instanceof TrackPainter) { ((TrackPainter) OC).validate(this); } } /** * Synchronized update of the construction to avoid a repaint during update. */ synchronized public void dovalidate() { C.dovalidate(); } // selection routines: // This vector is used by ALL selection and indication routines for // performance reasons. MyVector V=new MyVector(); public void sort(final MyVector V) { if (V.size()<2) { return; } Sorter.QuickSort(V.getArray(), 0, V.size()-1); } /** * Slow function to resort a vector by the number of each element in the * construction. */ public void sortRow(final MyVector V) { final ConstructionObject o[]=new ConstructionObject[V.size()]; V.copyInto(o); V.removeAllElements(); final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject oo=(ConstructionObject) e.nextElement(); for (final ConstructionObject element : o) { if (element==oo) { V.addElement(oo); break; } } } } /** * select a circle or a line. **/ public ConstructionObject selectCircleLine(final int x, final int y, final boolean multiple) // select a circle or a line { final MyVector v=selectCircleLineObjects(x, y, multiple, false); return select(v); } public ConstructionObject selectCircleLine(final int x, final int y) // select // a // circle // or // a // line { return selectCircleLine(x, y, true); } /** * select a circle or a line. **/ public ConstructionObject selectPointonObject(final int x, final int y, final boolean multiple) // select a circle or a line { final MyVector v=selectPointonObjects(x, y, multiple, false); return select(v); } public ConstructionObject selectPointonObject(final int x, final int y) // select // a // circle // or // a // line { return selectPointonObject(x, y, true); } /** * Select all possible circles or lines at x,y. If a matching non-filled * object is found above a filled object, the latter is never selected. * * @param multiple * determines, if it is possible to select selected objects. * @param testlocal * determines, if objects that look locally like already selected * objects should be omitted. */ public MyVector selectCircleLineObjects(final int x, final int y, final boolean multiple, final boolean testlocal) // select a circle // or a line { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject||o instanceof PrimitiveCircleObject)&&o.nearto(x, y, true, this)&&(multiple||!o.selected())) { if (testlocal) { final Enumeration ev=V.elements(); while (ev.hasMoreElements()) { final ConstructionObject ov=(ConstructionObject) ev.nextElement(); if (o.locallyLike(ov)) { o=null; break; } } } if (o!=null) { V.addElement(o); } } } return V; } public MyVector selectCircleLineObjects(final int x, final int y, final boolean multiple) { return selectCircleLineObjects(x, y, multiple, false); } public MyVector selectCircleLineObjects(final int x, final int y) { return selectCircleLineObjects(x, y, true, false); } /** * Select all possible object at x,y that can carry a point. * * @param multiple * determines, if it is possible to select selected objects. * @param testlocal * determines, if objects that look locally like already selected * objects should be omitted. */ public MyVector selectPointonObjects(final int x, final int y, final boolean multiple, final boolean testlocal) // select a circle // or a line { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PointonObject)&&o.nearto(x, y, true, this)&&(multiple||!o.selected())) { if (testlocal) { final Enumeration ev=V.elements(); while (ev.hasMoreElements()) { final ConstructionObject ov=(ConstructionObject) ev.nextElement(); if (o.locallyLike(ov)) { o=null; break; } } } if (o!=null) { V.addElement(o); } } } return V; } public MyVector selectPointonObjects(final int x, final int y, final boolean multiple) { return selectPointonObjects(x, y, multiple, false); } public MyVector selectPointonObjects(final int x, final int y) { return selectPointonObjects(x, y, true, false); } /** * Select all selectable objects near to x,y. * * @param multiple * allows multiple selections. **/ public MyVector selectObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } return V; } public MyVector selectObjects(final int x, final int y) { return selectObjects(x, y, true); } /** * Select a single object near x,y. **/ public ConstructionObject selectObject(final int x, final int y, final boolean multiple) { final MyVector v=selectObjects(x, y, multiple); return select(v, x, y); } public ConstructionObject selectObject(final int x, final int y) { return selectObject(x, y, true); } /** * select all constructable objects near x,y. **/ public MyVector selectConstructableObjects(final int x, final int y, final boolean multiple) // select an enumeration of objects { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.valid()&&o.isFlag()&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } return V; } public MyVector selectConstructableObjects(final int x, final int y) { return selectConstructableObjects(x, y, true); } /** * select a single constructable object near x,y. **/ public ConstructionObject selectConstructableObject(final int x, final int y) { final MyVector v=selectConstructableObjects(x, y, true); return select(v, x, y); // user determines } /** * Select a single line, segment, ray, perp., paral. or fixed angle near * x,y. **/ public PrimitiveLineObject selectLine(final int x, final int y, final boolean multiple) { selectLineObjects(x, y, multiple); return (PrimitiveLineObject) select(V); } public void selectLineObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PrimitiveLineObject selectLine(final int x, final int y) { return selectLine(x, y, true); } /** * Select a point or a line (for the object tracker). */ public void selectPointsOrLines(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject||o instanceof PointObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } /** * Select a single line, segment, or ray near x,y **/ public TwoPointLineObject selectTwoPointLine(final int x, final int y, final boolean multiple) { selectTwoPointLines(x, y, multiple); return (TwoPointLineObject) select(V); } public void selectTwoPointLines(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof TwoPointLineObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public TwoPointLineObject selectTwoPointLine(final int x, final int y) { return selectTwoPointLine(x, y, true); } /** * Select a single segment near x,y **/ public SegmentObject selectSegment(final int x, final int y, final boolean multiple) { selectSegments(x, y, multiple); return (SegmentObject) select(V); } public void selectSegments(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof SegmentObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public SegmentObject selectSegment(final int x, final int y) { return selectSegment(x, y, true); } public boolean isMultipleAcceptedObject(final ConstructionObject o) { boolean b=o instanceof AreaObject; b=b||o instanceof PrimitiveLineObject; b=b||o instanceof PrimitiveCircleObject; b=b||o instanceof QuadricObject; b=b||o instanceof JLocusTrackObject; return b; } public void selectMultipleFinals(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PointObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.removeAllElements(); return; } if (o.isSelectable()&&(isMultipleAcceptedObject(o))&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } if (V.size()>1) { V.removeAllElements(); } } public ConstructionObject selectMultipleFinal(final int x, final int y, final boolean multiple) { selectMultipleFinals(x, y, multiple); return (ConstructionObject) select(V); } /** * Select a single ray near x,y **/ public RayObject selectRay(final int x, final int y, final boolean multiple) { selectRays(x, y, multiple); return (RayObject) select(V); } public void selectRays(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof RayObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public RayObject selectRay(final int x, final int y) { return selectRay(x, y, true); } /** * Select a circle near x,y. A non-filled object is preferred before a * filled object. **/ public PrimitiveCircleObject selectCircle(final int x, final int y, final boolean multiple) { selectCircles(x, y, multiple); return (PrimitiveCircleObject) select(V); } public void selectCircles(final int x, final int y, final boolean multiple) { Enumeration e=C.elements(); V.removeAllElements(); boolean haveNotFilled=false; while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveCircleObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); if (!o.isFilledForSelect()) { haveNotFilled=true; } } } if (haveNotFilled) { e=V.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isFilledForSelect()) { V.removeElement(o); } } } } public PrimitiveCircleObject selectCircle(final int x, final int y) { return selectCircle(x, y, true); } public ConstructionObject selectAnimationObject(final int x, final int y) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o.nearto(x, y, this)&&(o instanceof PointObject)) { PointObject pt=(PointObject) o; if (pt.isPointOn()) { V.addElement(o); } } else if (o.isSelectable()&&o.nearto(x, y, this)&&(o instanceof ExpressionObject)) { V.addElement(o); } } return select(V); } /** * Select a point near x,y. **/ public PointObject selectPoint(final int x, final int y, final boolean multiple) { selectPointObjects(x, y, multiple); return (PointObject) select(V); } public void selectPointObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PointObject selectPoint(final int x, final int y) { return selectPoint(x, y, true); } public PointObject selectPoint(final int x, final int y, final boolean multiple, final ConstructionObject until) { selectPointObjects(x, y, multiple, until); return (PointObject) select(V); } public void selectPointObjects(final int x, final int y, final boolean multiple, final ConstructionObject until) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==until) { break; } if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PointObject selectPoint(final int x, final int y, final ConstructionObject until) { return selectPoint(x, y, true, until); } boolean NewPoint=false; public boolean isNewPoint() { return NewPoint; } /** * Select a point, and create a new point, if necessary. Even creates an * intersection, or a point bound to an object, if possible. If enabled, the * user is asked for confirmation in these cases. The variable NewPoint is * set to true, if the point was indeed created. * * @param multiple * determines, if multiple selections are possible. * @param any * determines, if the first point should be used. **/ public PointObject selectCreatePoint(final int x, final int y, final boolean multiple, final boolean any, boolean altdown) { NewPoint=false; if (Preview) { final PointObject p=new PointObject(C, x(x), y(y)); addObject(p); p.setSuperHidden(true); PreviewObject=p; return p; } // User selects a known point: final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } sort(V); } if (V.size()>0) { if (any) { return (PointObject) (V.elementAt(0)); } final ConstructionObject o=select(V, Control||!Global.getParameter("options.indicate", true)); if (o!=null) { return (PointObject) o; } return null; } // User creates a new point: ConstructionObject oc=tryCreateIntersection(x, y, true); if (oc!=null) { final PointObject o=(PointObject) oc; o.edit(this, false, false); // o.setDefaults(); // if (o.showName()) renameABC(o,false,false); return o; } if (!IntersectionYes) { return null; } final MyVector w=selectPointonObjects(x, y, true, false); filter(w, x, y, true); if (w.size()>0) { oc=select(w, !Control); if (oc==null) { return null; } if (oc!=null) { boolean yes=true; if (yes) { final PointObject o=new PointObject(C, x(x), y(y), oc); o.edit(this, false, false); // if (ShowGrid&&!Global.getParameter("grid.leftsnap", // false)) { // o.snap(this); // } o.setUseAlpha(true); addObject(o); validate(); o.setDefaults(); NewPoint=true; return o; } else { return null; } } } final PointObject p=new PointObject(C, x(x), y(y)); if (altdown&&getAxis_show()) { p.setHalfIncrement(this); } // if (getAxis_show()) { // p.snap(this); // } addObject(p); p.setDefaults(); // rename Point, if showname // if (p.showName()) renameABC(p,false,false); NewPoint=true; if (!PaletteManager.isSelected("bi_function_u")) { p.edit(this, false, false); } return p; } boolean IntersectionYes=false; public ConstructionObject tryCreateIntersection(final int x, final int y, final boolean ask) { final MyVector w=selectPointonObjects(x, y, true, true); sort(w); IntersectionYes=true; if (w.size()<2) { return null; } final ConstructionObject P1=(ConstructionObject) w.elementAt(0); final ConstructionObject P2=(ConstructionObject) w.elementAt(1); if (!(P1 instanceof PointonObject&&P2 instanceof PointonObject)) { return null; } if (!((PointonObject) P1).canInteresectWith(P2)||!((PointonObject) P2).canInteresectWith(P1)) { return null; } final IntersectionObject o[]=IntersectionConstructor.construct(P1, P2, C); if (o.length==1&&!o[0].valid()) { return null; } if (o.length==2&&!o[0].valid()&&!o[1].valid()) { return null; } if (IntersectionYes) { if (o.length==1||!o[1].valid()) { addObject(o[0]); o[0].autoAway(); o[0].validate(x(x), y(y)); validate(); o[0].setDefaults(); o[0].setRestricted(getRestricted()); return o[0]; } if (!o[0].valid()) { addObject(o[1]); o[1].autoAway(); validate(); o[1].setDefaults(); o[1].setRestricted(getRestricted()); return o[1]; } IntersectionObject oc=o[0]; final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d10) { return (ConstructionObject) V.elementAt(0); } else { return null; } } final ConstructionObject o=select(V, x, y); return o; } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel, final ConstructionObject until) { return selectWithSelector(x, y, sel, until, true); } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel, final boolean choice) { return selectWithSelector(x, y, sel, null, choice); } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel) { return selectWithSelector(x, y, sel, null, true); } /** * Select a moveable point at x,y. Don't ask user, take first. **/ public ConstructionObject selectImmediateMoveablePoint(final int x, final int y) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } } if (V.size()==0) { return null; } return (ConstructionObject) V.elementAt(0); } /** * Select a moveable object at x,y. **/ public ConstructionObject selectMoveableObject(final int x, final int y) { final ConstructionObject s=findSelectedObject(); if (s instanceof MoveableObject&&((MoveableObject) s).moveable()&&s.nearto(x, y, this)) { return s; } selectMoveableObjects(x, y); if (V.size()==1) { return (ConstructionObject) V.elementAt(0); } final ConstructionObject o=select(V); if (o!=null) { if (!Global.getParameter("options.choice", true)) { return o; } o.setSelected(true); } return null; } public void selectMoveableObjects(final int x, final int y, final boolean control) { V.removeAllElements(); final ConstructionObject s=findSelectedObject(); if (s instanceof MoveableObject&&((MoveableObject) s).moveable()&&s.nearto(x, y, this)) { V.addElement(s); return; } else if (control&&s instanceof FixedCircleObject&&s.nearto(x, y, this)&&((FixedCircleObject) s).fixedByNumber()) { V.addElement(s); return; } else if (control&&s instanceof FixedAngleObject&&s.nearto(x, y, this)&&((FixedAngleObject) s).fixedByNumber()) { V.addElement(s); return; } final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (!control&&o.isSelectable()&&o instanceof MoveableObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } else if (control&&o instanceof FixedCircleObject&&o.nearto(x, y, this)&&((FixedCircleObject) o).fixedByNumber()) { V.addElement(o); } else if (control&&o instanceof FixedAngleObject&&o.nearto(x, y, this)&&((FixedAngleObject) o).fixedByNumber()) { V.addElement(o); } } filter(V, x, y); } public void selectMoveableObjects(final int x, final int y) { selectMoveableObjects(x, y, false); } /** * Select a moveable object at x,y. Don't ask user, take first. **/ public ConstructionObject selectImmediateMoveableObject(final int x, final int y) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof MoveableObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } } filter(V, x, y); if (V.size()==0) { return null; } return (ConstructionObject) V.elementAt(0); } /** * try to determine the unique objects that are near coordinates x,y and * delete all others from the vector v. **/ public void filter(final MyVector v, final int x, final int y, final boolean choice) { boolean HasPoints=false, HasNotFilled=false; Enumeration e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o instanceof PointObject) { HasPoints=true; } if (!o.isFilledForSelect()) { HasNotFilled=true; } } if (HasPoints) { e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (!o.onlynearto(x, y, this)) { v.removeElement(o); } } } else if (HasNotFilled) { e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isFilledForSelect()) { v.removeElement(o); } } } sort(v); if (!choice) { v.truncate(1); } } public void filter(final MyVector v, final int x, final int y) { filter(v, x, y, Global.getParameter("options.choice", true)||Control); } /** * user must select an object in the selection dialog, unless the selection * is unique anyway, or the filter determines that the selection is unique. **/ public ConstructionObject select(final MyVector v, final int x, final int y, final boolean choice) { if (v.size()==0) { return null; } if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } filter(v, x, y); if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } if (!choice) { return (ConstructionObject) v.elementAt(0); } sortRow(V); RightClicked=false; final eric.JSelectPopupDialog d=new eric.JSelectPopupDialog(getFrame(), this, v); final ConstructionObject o=d.getConstructionObject(); d.doclose(); return o; } public ConstructionObject select(final MyVector v, final int x, final int y) { return select(v, x, y, Global.getParameter("options.choice", true)||Control); } /** * user must select an object in the selection dialog, unless the selection * is unique anyway. **/ public ConstructionObject select(final MyVector v, final boolean choice) { if (v.size()==0) { return null; } if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } // if (!choice) return (ConstructionObject)v.elementAt(0); sortRow(V); RightClicked=false; final eric.JSelectPopupDialog d=new eric.JSelectPopupDialog(getFrame(), this, v); final ConstructionObject o=d.getConstructionObject(); d.doclose(); return o; } public ConstructionObject select(final MyVector v) { return select(v, Global.getParameter("options.choice", true)||Control); } /** * select the label of a point, i.e. a point, which is set by the user * * @return the first label found **/ public ConstructionObject selectLabel(final int x, final int y) { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o.textcontains(x, y, this)) { return o; } } return null; } public ConstructionObject findSelectedObject() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.selected()) { return o; } } return null; } // Indication functions MyVector Indicated=new MyVector(); PointObject IndicatePoint=null; public void indicate(final MyVector v, final boolean showname) { if (v.size()==1) { if (showname) { setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); } else if (v.elementAt(0) instanceof PointObject) { setCursor(new Cursor(Cursor.HAND_CURSOR)); } } else { setCursor(Cursor.getDefaultCursor()); } if (Indicated.equalsIdentical(v)) { return; } Enumeration e=Indicated.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setIndicated(false); } Indicated.removeAllElements(); e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); Indicated.addElement(o); o.setIndicated(true, showname); } repaint(); } public void indicate(final MyVector v) { indicate(v, false); } public void clearIndicated() { IndicatePoint=null; if (Indicated.size()==0) { return; } final Enumeration e=Indicated.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setIndicated(false); } Indicated.removeAllElements(); setCursor(Cursor.getDefaultCursor()); repaint(); } boolean Preview=false; ConstructionObject LastNonPreview=null; MoveableObject PreviewObject=null; public void movePreview(final MouseEvent e) { if (PreviewObject!=null) { PreviewObject.move(x(e.getX()), y(e.getY())); validate(); repaint(); } } public void prepareForPreview(final MouseEvent e) { LastNonPreview=C.last(); Preview=true; } public boolean isPreview() { return Preview; } public void clearPreview() { if (!Preview) { return; } C.clearAfter(LastNonPreview); LastNonPreview=null; PreviewObject=null; Preview=false; Count.fixAll(false); } public void setPreviewObject(final MoveableObject o) { PreviewObject=o; } public ConstructionObject indicateTryCreateIntersection(final int x, final int y, final boolean ask) { final MyVector w=selectPointonObjects(x, y, true, true); sort(w); IntersectionYes=true; if (w.size()<2) { return null; } final IntersectionObject o[]=IntersectionConstructor.construct( (ConstructionObject) w.elementAt(0), (ConstructionObject) w.elementAt(1), C); if (o.length==1&&!o[0].valid()) { return null; } if (o.length==2) { if (!o[1].valid()) { if (!o[0].valid()) { return null; } } else { final IntersectionObject h=o[0]; o[0]=o[1]; o[1]=h; } } IntersectionObject oc=o[0]; if (o.length==2&&o[1].valid()) { final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d10) { IndicatePoint=null; filter(V, x, y, false); indicate(V); return; } PointObject oc=(PointObject) indicateTryCreateIntersection(x, y, true); if (oc!=null) { return; } final MyVector w=selectPointonObjects(x, y, true, false); filter(w, x, y, true); if (w.size()>=1) { if (!w.equalsIdentical(Indicated)) { oc=new PointObject(C, x(x), y(y), (ConstructionObject) w.elementAt(0)); if (getAxis_show()&&!Global.getParameter("grid.leftsnap", false)) { oc.snap(this); } oc.setUseAlpha(true); oc.validate(); oc.setIndicated(true); oc.setType(PointObject.CIRCLE); oc.setColorType(ConstructionObject.THICK); IndicatePoint=oc; indicate(w); } else if (IndicatePoint!=null) { IndicatePoint.setType(PointObject.CIRCLE); IndicatePoint.setColorType(ConstructionObject.THICK); IndicatePoint.move(x(x), y(y)); IndicatePoint.project((ConstructionObject) w.elementAt(0)); repaint(); } } else { clearIndicated(); } } public void indicateCircleLineObjects(final int x, final int y) { final MyVector w=selectCircleLineObjects(x, y); filter(V, x, y); indicate(w); } public void indicatePointonObjects(final int x, final int y) { final MyVector w=selectPointonObjects(x, y); filter(V, x, y); indicate(w); } public void indicateIntersectedObjects(final int x, final int y) { final MyVector w=selectPointonObjects(x, y); if (!w.equalsIdentical(Indicated)&&w.size()>=2) { final IntersectionObject o[]=IntersectionConstructor.construct( (ConstructionObject) w.elementAt(0), (ConstructionObject) w.elementAt(1), C); IntersectionObject oc=o[0]; if (o.length==2) { final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d1=Macros.size()) { appendMacro(m); } } catch (final ConstructionException ex) { Count.setAllAlternate(false); throw ex; } Count.setAllAlternate(false); } } else if (tag.name().equals("Script")) { Scripts.addScript(tree); } else if (tag.name().equals("Construction")) { if (construction) { boolean job=false; if (tag.hasParam("job")) { job=true; Last=tag.getValue("last"); if (Last==null) { throw new ConstructionException(Global.name("exception.job")); } final String Target=tag.getValue("target"); if (Target==null) { Targets=new Vector(); int i=1; while (true) { final String s=tag.getValue("target"+i); i++; if (s==null) { break; } Targets.addElement(s); } } else { Targets=new Vector(); Targets.addElement(Target); } if (Targets.size()==0) { throw new ConstructionException(Global.name("exception.job")); } } C.load(tree, this); if (job) { if (C.find(Last)==null) { throw new ConstructionException(Global.name("exception.job")); } final Enumeration et=Targets.elements(); while (et.hasMoreElements()) { final String s=(String) et.nextElement(); if (C.find(s)==null&&(!s.startsWith("~")||C.find(s.substring(1))==null)) { throw new ConstructionException(Global.name("exception.job")); } } Job=true; } break; } } else { throw new ConstructionException("Construction not found"); } } recompute(); C.translateOffsets(this); resetSum(); validate(); repaint(); } catch (final Exception e) { throw e; } reloadCD(); repaint(); // Give the magnet object list to the point // see PointConstructor.construct : Enumeration e=C.magnet.elements(); while (e.hasMoreElements()) { final PointObject p=(PointObject) e.nextElement(); p.setMagnetObjects((String) e.nextElement()); } Animations.run(); // System.out.println("finished reading file"); } public void resetSum() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o instanceof ExpressionObject) { ((ExpressionObject) o).reset(); } } } public void warning(final String s, final String help) { final Warning w=new Warning(getFrame(), s, Global.name("warning"), true, help); w.center(getFrame()); w.setVisible(true); } public void warning(final String s) { warning(s, ""); } public void load(final InputStream in) throws Exception { try { C.Loading=true; load(in, true, true); C.Loading=false; } catch (final Exception e) { C.Loading=false; throw e; } } public String getComment() { return C.getComment(); } public void setComment(final String s) { C.setComment(s); } public String getJobComment() { return C.getJobComment(); } public void setJobComment(final String s) { C.setJobComment(s); } /** * This can be used to set a frame window for the error dialogs that the * canvas my display. * @param f */ public void setFrame(final Frame f) { } public Frame getFrame() { return pipe_tools.getFrame(); } /** * Maginify the view by the specified factor. */ public void magnify(final double f) { ZoomerTool.initNonDraggableObjects(C); C.setXYW(C.getX(), C.getY(), C.getW()*f); ZoomerTool.zoomNonDraggableObjectsBy(C, f); recompute(); validate(); repaint(); } /** * Shift the view with these deltas. */ public void shift(final double dx, final double dy) { ZoomerTool.initNonDraggableObjects(C); C.setXYW(C.getX()+dx*C.getW(), C.getY()+dy*C.getW(), C.getW()); ZoomerTool.shiftNonDraggableObjectsBy(C, dx*C.getW(), dy*C.getW()); recompute(); validate(); repaint(); } /** * Tracker routines: Call the OC (must be a TrackPainter) to paint the * object track. */ public void paintTrack(final MyGraphics g) { if (!(OC instanceof TrackPainter)) { return; } ((TrackPainter) OC).paint(g, this); } /** * Run through the construction to update all object texts. This should be * called, whenever the name of an item was changed. It will recreate only * those texts, which contain the old name. */ public void updateTexts(final ConstructionObject o, final String oldname) { C.updateTexts(o, oldname); } public Construction getConstruction() { return C; } public boolean isEmpty() { return ((C.last()==null)&&(!isScript())); } /* Job part for CaRMetal 3.5 and later : * */ public String job_getMessageOk() { return Exercise.getMessage_ok(); } public void job_setMessageOk(String m) { Exercise.setMessage_ok(m); } public String job_getMessageFailed() { return Exercise.getMessage_failed(); } public void job_setMessageFailed(String m) { Exercise.setMessage_failed(m); } public void job_setHideFinals(boolean b) { Exercise.setHidefinals(b); } public void job_setBackup(String s) { Exercise.setBackup(s); } public void job_addTarget(ConstructionObject target) { Exercise.addTarget(target); } public void job_removeTarget(ConstructionObject target) { Exercise.removeTarget(target); } /*Two following methods only for loading process : * */ public void job_setTargetNames(String t) { Exercise.setTargetNames(t); } public void job_setTargets() { Exercise.setTargets(); } public boolean job_isTargets() { return (Exercise.getTargets().size()>0); } public ArrayList job_getTargets() { return Exercise.getTargets(); } public void job_showDialog() { Exercise.showControlDialog(); } public void job_setTargetsField() { Exercise.setTargetsField(); } public void initJobCreationDialog() { if (Exercise!=null) { Exercise.init(); } } /** * Sets the job parameters for the current construction (the last item to * display and the target item). * @param last */ public void setJob(final ConstructionObject last) { Job=true; Last=last.getName(); Targets=new Vector(); } public void addJobTarget(final ConstructionObject target, final boolean visible) { if (visible) { Targets.addElement("~"+target.getName()); } else { Targets.addElement(target.getName()); } } public void clearTargets() { Targets=new Vector(); } /** * Cancel the job state o fthe current construction. */ public void clearJob() { Job=false; } /** * Test, if the construction is a valid job. */ public boolean isJob() { final Enumeration e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (C.find(s)==null&&(!s.startsWith("~")||C.find(s.substring(1))==null)) { return false; } } return Job&&C.find(Last)!=null&&Targets.size()>0; } public boolean inTargets(final String s) { final Enumeration e=Targets.elements(); while (e.hasMoreElements()) { if (((String) e.nextElement()).equals(s)) { return true; } } return false; } /** * * This will display the construction as a job (if it is a job). The * construction is copied up to the last element. The copies are marked as * keep objects, so that they cannot be changed. The last object is marked * as the target object, so that it displays in a special color. * * The function can also flip back to the original construction * (flag=false). */ public void displayJob(final boolean flag) { clearSelected(); if (!(OC instanceof SaveJob)) { OC.reset(this); } if (flag) // diplay the job { C.setOriginalOrder(true); if (displayJob()||!isJob()) { return; } final Construction Cnew=new Construction(); Cnew.setXYW(C.getX(), C.getY(), C.getW()); Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setJobTarget(true); o.setJobTarget(false); } e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); Cnew.add(o); o.setKeep(true); if (inTargets(o.getName())||inTargets("~"+o.getName())) { o.setJobTarget(true); } if (o.getName().equals(Last)) { break; } } while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (inTargets(o.getName())||inTargets("~"+o.getName())) { Cnew.add(o); o.setKeep(true); o.setJobTarget(true); } } int n=0; e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (!s.startsWith("~")) { n++; } } TargetO=new ConstructionObject[n]; TargetS=new ConstructionObject[n]; n=0; e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (!s.startsWith("~")) { TargetO[n]=Cnew.find(s); TargetS[n]=null; n++; } } COriginal=C; C=Cnew; C.addAddEventListener(this); C.setComment(COriginal.getJobComment()); recompute(); reloadCD(); repaint(); } else // display the orginal construction again { if (!displayJob()) { return; } C.removeAddEventListener(this); C=COriginal; COriginal=null; final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setKeep(false); o.setJobTarget(false); } C.setOriginalOrder(false); recompute(); reloadCD(); repaint(); } } /** * If the job is solved, this function removes all restrictions. */ public void freeJob() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setKeep(false); o.setJobTarget(false); repaint(); } } /** * Test if the canvas displays a job right now. */ public boolean displayJob() { return COriginal!=null; } // The following functions change the default values of some objects. public void setShowColor(final int i) { ShowColor=i; repaint(); } public int getShowColor() { return ShowColor; } public ObjectConstructor getOC() { return OC; } // Macros: private Vector Macros=new Vector(); public Vector getMacros() { return Macros; } public boolean haveMacros() { return Macros.size()>0; } public boolean haveNonprotectedMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (!m.M.isProtected()) { return true; } } return false; } /** * Define a macro. There must be parameters (but not necessarily targets). * The function will display the macro dialog. It will create a new macro, * when the dialog was not aborted. The macro is kept in the Macros vector * by name. */ boolean defineMacro() { return true; } /** * Copy a macro with fixed parameters from another macro. */ public Macro copyMacro(final Macro m, final String name, final boolean fixed[]) { try { final Macro macro=(Macro) (m.clone()); macro.Name=name; final boolean f[]=new boolean[fixed.length]; for (int i=0; i0); } public Vector getScripts() { return Scripts.getScripts(); } public void removeScript(String s) { Scripts.removeScript(s); } public void removeAllScripts() { remove(Scripts); Scripts=null; Scripts=new ScriptPanel(this); } public AnimationPanel getAnimations() { return Animations; } public void removeAllAnimations() { remove(Animations); Animations=null; Animations=new AnimationPanel(this); } public boolean isAnimated(ConstructionObject o) { return Animations.isAnimated(o); } public void removeAnimation(ConstructionObject o) { Animations.removeAnimation(o); } public void addAnimation(ConstructionObject o) { Animations.addAnimation(o); } public void addAnimation(String objectname) { Animations.addAnimation(objectname); } public void selectAnimationPoints() { Animations.setObjectSelected(true); } public void setAnimationNegative(String objectname, boolean negative) { Animations.setAnimationNegative(objectname, negative); } public void setAnimationDelay(double delay) { Animations.setDelay(delay); } public RestrictContainer getRestrict() { return RestrictDialog; } public void initRestrictDialog() { if (RestrictDialog!=null) { RestrictDialog.init(); } } public void getNewRestrictedDialog() { closeRestrictDialog(); RestrictDialog=new RestrictContainer(this); add(RestrictDialog); RestrictDialog.init(); RestrictDialog.revalidate(); RestrictDialog.repaint(); repaint(); } public void closeRestrictDialog() { if (RestrictDialog!=null) { remove(RestrictDialog); repaint(); RestrictDialog=null; } } public void addHiddenItem(String s) { Restrict_items.add(s); } public void removeHiddenItem(String s) { Restrict_items.remove(s); } public boolean isHiddenItem(String s) { return Restrict_items.isHidden(s); } public boolean isRestricted() { return Restrict_items.isRestricted(); } public ArrayList getHiddenItems() { return Restrict_items.get(); } public void setHiddenItems(String items) { Restrict_items.set(items); } public void setHiddenItems(ArrayList items) { Restrict_items.set(items); } public void initRestrictedHiddenItemsFromFactorySettings() { Restrict_items.initRestrictedHiddenItemsFromFactorySettings(); } public void initStandardRestrictedHiddenItems() { Restrict_items.initRestrictedHiddenItems(); } public void setStandardRestrictedItems() { Restrict_items.setStandardRestrictedItems(); } public void setLibraryMacrosVisible(boolean b) { if (b!=islibrarymacrovisible) { islibrarymacrovisible=b; JZirkelCanvas.ActualiseMacroPanel(); } } public boolean isLibraryMacrosVisible() { return islibrarymacrovisible; } /** * Define a macro from the information stored in the construction c, and * store it to the macros in this ZirkelCanvas object. */ public void defineMacro(final String name, final String comment, final Construction c) throws ConstructionException { final Vector T=c.getTargets(); final String Prompts[]=new String[c.Prompts.size()]; for (int i=0; i0&&!c.ShowAll, c.SuperHide, c.getPromptFor(), true); storeMacro(m, true); } /* * Store the macro in the macro list (or replace the old macro with the same * name * * @param all Replace the macro without asking. */ public void storeMacro(final Macro m, final boolean all) { int i=0; for (i=0; i=Macros.size()) { appendMacro(m); } } public boolean ProtectMacros=false; public MacroMenu MM=null; public void appendMacro(final Macro m) { if (!ReadOnly) { if (ProtectMacros) { m.setProtected(true); } if (MM==null) { MM=new MacroMenu(PM, "", null); } final MacroItem mi=MM.add(m, m.getName()); if (mi.I!=null) { mi.I.addActionListener(this); } Macros.addElement(mi); } else { if (MM==null) { MM=new MacroMenu(null, "", null); } final MacroItem mi=MM.add(m, m.getName()); if (mi.I!=null) { mi.I.addActionListener(this); } Macros.addElement(mi); } } /** * Replace the macro item number i with m. * * @return User wants to replace all subsequent macros. */ public boolean replaceMacro(final Macro m, final int i, final boolean all) { return true; } public String MacroCurrentComment; /** * The user has to choose from a list of macros (for running). */ public Macro chooseMacro() { return null; } /** * The user can choose from a list of macros (for saving). * * @return A vector of selected Macros. */ public Vector chooseMacros() { return null; } /** * Run a macro by name. */ public Macro chooseMacro(final String name) { Macro m=null; Enumeration e=Macros.elements(); while (e.hasMoreElements()) { m=((MacroItem) e.nextElement()).M; if (name.equals(m.getName())) { return m; } } e=MacroTools.getBuiltinMacros().elements(); while (e.hasMoreElements()) { m=((MacroItem) e.nextElement()).M; if (name.equals(m.getName())) { return m; } } return null; } public void deleteMacros(final Vector v) { final Enumeration e=v.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); deleteMacro(m); } } public void deleteMacro(final MacroItem m) { Macros.removeElement(m); if (m.I!=null) { m.I.removeActionListener(this); MM.remove(m); } } public void clearMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.I!=null) { m.I.removeActionListener(this); MM.remove(m); } } Macros.removeAllElements(); } public void clearNonprotectedMacros() { final Vector V=new Vector(); final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (!m.M.isProtected()) { V.addElement(m); } } deleteMacros(V); } public void clearProtectedMacros() { final Vector V=new Vector(); final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.M.isProtected()) { V.addElement(m); } } deleteMacros(V); } public void protectMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); m.M.setProtected(true); } } public void renameMacro(final Macro macro, final String name) { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.I!=null&&m.M==macro) { deleteMacro(m); break; } } macro.setName(name); appendMacro(macro); } MacroBar MBar; public void setMacroBar(final MacroBar m) { MBar=m; } public void updateMacroBar() { // if (MBar!=null) { // MBar.update(Macros); // } } // For the prompt in the status line: TextField TF; public void setTextField(final TextField t) { TF=t; } public void setPrompt(final String s) { if (TF!=null) { TF.setText(s); } } // Loading: public void loadRun(final InputStream is) { final BufferedReader in=new BufferedReader(new InputStreamReader(is)); String s="", comment=""; while (true) { try { s=in.readLine(); if (s==null) { break; } int n; if ((n=s.indexOf("//"))>=0) { comment=s.substring(n+2).trim(); s=s.substring(0, n); } else { comment=""; } s=s.trim(); int k=0; if ((k=Interpreter.startTest("macro", s))>=0) { loadMacro(in, s.substring(k).trim()); } else if (!s.equals("")) { C.interpret(this, s, comment); } } catch (final ConstructionException e) { warning(e.getDescription()+" --- "+s); break; } catch (final Exception e) { warning(e.toString()+" --- "+s); e.printStackTrace(); break; } } C.updateCircleDep(); } public void loadMacro(final BufferedReader in, final String name) throws ConstructionException { final Construction c=new Construction(); c.clear(); String s="", comment="", macrocomment=""; boolean inComment=true, newLine=true; while (true) { try { s=in.readLine(); if (s==null) { throw new ConstructionException(Global.name("exception.macroend")); } s=s.trim(); final int n=s.indexOf("//"); if (inComment&&n==0) { final String h=s.substring(n+2).trim(); if (newLine) { macrocomment=macrocomment+h; newLine=false; } else { if (h.equals("")) { macrocomment=macrocomment+"\n"; newLine=true; } else { macrocomment=macrocomment+" "+h; newLine=false; } } continue; } inComment=false; if (n>=0) { comment=s.substring(n+2).trim(); s=s.substring(0, n); } else { comment=""; } s=s.trim(); if (s.equals(Global.name("end"))) { break; } if (s.toLowerCase().equals("end")) { break; } if (!s.equals("")) { c.interpret(this, s, comment); } } catch (final InvalidException e) { } catch (final ConstructionException e) { throw new ConstructionException(e.getDescription()+" --- "+s); } catch (final IOException e) { warning(e.toString()); return; } } defineMacro(name, macrocomment, c); } public double getGridSize() { double gridsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; if (C.getW()*2/gridsize>=30) { gridsize*=5; } if (C.getW()*2/gridsize<10) { gridsize/=2; } return gridsize; } public LatexOutput createBB(final String filename, final int w, final int h, final double dpi) { try { String path=""; if (Global.getParameter("options.fullpath", true)) { path=FileName.pathAndSeparator(filename); } PrintWriter out=new PrintWriter(new FileOutputStream(path+FileName.purefilename(filename)+".bb")); out.println("%%BoundingBox: 0 0 "+w+" "+h); out.close(); out=new PrintWriter(new FileOutputStream(path+FileName.purefilename(filename)+".ztx")); final LatexOutput lout=new LatexOutput(out); lout.open(w, h, dpi, path+FileName.filename(filename)); return lout; } catch (final Exception e) { warning(e.toString()); } return null; } /** * Save picture as PNG on file or copy to clipboard * * @param filename * ("" for clipboard) * @return not failed */ synchronized public boolean savePNG(final String filename, final boolean latex) { LatexOutput lout=null; if (IW==0||I==null) { return false; } if (Global.getParameter("printscale.middle", true)) { savePreviewAsPNG(filename); return true; } double dpi=Global.getParameter("printscale.dpi", 300); if (!Global.getParameter("printscale.sizes", false)) { final int w=Global.getParameter("printscale.w", IW); final int h=Global.getParameter("printscale.h", IH); if (latex) { lout=createBB(filename, w, h, dpi); } final int IWold=IW; IW=w; IH=h; Scale=((double) IW)/IWold; I=createImage(IW, IH); IG=new MyGraphics13(I.getGraphics(), Scale, this, lout); IG.setSize(w, h); double pointsize=PointSize*Scale; double fontsize=FontSize*Scale; if (Scale<1) { if (Global.getParameter("options.minpointsize", false)&&pointsize𰗦}`ucq{~==k!!|]>0s/ 0;; rU7[O< v)Ƙ1PaۨU*r>D9a5^54jD ~X_'67xb$D*E~I# GF=.?ZoievѶDX^uLPGj\PSsyߏΟntX ȗ mzCo*( 4g6{WjV蠎r9uQ_(͕$u "T2djkPoO$VӊĮK2B9x|]7<Μ!w6txGll'WұH$:P̧I!kXG<| XXpe E<96XV؉mϵ.j-9U$_B핵.rݦMJ0f ˗ًdiTU3󄮓[[*M{SR/ UM)E`oRb>vA (A$>H@d6W| Dz[PrUj\ڭkjv\LKЉ4^\ "[KK17ܻK%m,bho4 Y,[&C9$inD33Dh8u#&&s0caH$.#_`KgxkЫxY*Mʁ$jeR ¯T_GѨqԅlOTJs.ro+a K%o(M=0bm2iMJQ)$~_EJDiu Bͦ䞇(;uz0BD0PH~qcyt 7 Y|;V"A'Tjye9٫`6M |y,t z|#IU2P&FYvsu2ToŖK{bz (^hOP8~ڜϝ#GݹzUO.kRq-}'2IBn Z£Gx(1 %_kX |u*KQOz<>$w2/7%;{H^k/89>,r o&&2ˏȜih?Alo>t\^=[o!'XOvwlaݬ( ȶ iԵBafC+7*-%?˴<0jCa胃|,FS`QyxXȸfU+vv63KGiF?xndrPFr(y-5\ZZ({&KNJu#Ӷ Bta ;0 `~%CB=ʹ\ONxjX u>/`^8c.(JɲW cHB aA @O`㰋]8~:7 HG MwM}k{{gz:IENDB`./src/rene/zirkel/CVS/0000755000175000017500000000000011314631426013425 5ustar yvesyves./src/rene/zirkel/CVS/Repository0000644000175000017500000000002411132354034015516 0ustar yvesyvescarmetal/rene/zirkel./src/rene/zirkel/CVS/Entries0000644000175000017500000000141611314631426014763 0ustar yvesyvesD/construction//// D/constructors//// D/dialogs//// D/docs//// D/expression//// D/graphics//// D/listener//// D/macro//// D/objects//// D/structures//// D/tools//// /DemoRunner.java/-1.4/dummy timestamp/-ko/ /DragThread.java/1.3/Tue Jan 13 15:09:34 2009/-ko/ /LogoWindow.java/-1.4/dummy timestamp/-ko/ /SettingsDialog.java/-1.5/dummy timestamp/-ko/ /Zirkel.java/-1.9/dummy timestamp/-ko/ /ZirkelApplet.java/-1.7/dummy timestamp/-ko/ /ZirkelCanvas.java/1.12/Wed Sep 30 15:38:32 2009/-ko/ /ZirkelCanvasInterface.java/1.4/Tue Jan 13 15:09:39 2009/-ko/ /ZirkelFrame.java/1.6/Tue Jan 13 15:09:39 2009/-ko/ /icon.gif/1.1/Thu Mar 11 19:20:16 2004/-kb/ /icon.png/1.1/Mon Jan 08 07:07:10 2007/-kb/ /logowindow.jpg/1.1/Sat Sep 29 17:30:28 2007/-kb/ /.cvsignore/1.1/Wed Aug 19 12:29:34 2009// ./src/rene/zirkel/CVS/RevisionCache/0000755000175000017500000000000011314647426016156 5ustar yvesyves./src/rene/zirkel/CVS/RevisionCache/LogoWindow.java#1.40000644000175000017500000000522311303263137021370 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.MediaTracker; import java.awt.RenderingHints; import java.awt.Toolkit; import java.awt.Window; import java.io.InputStream; import rene.gui.Global; public class LogoWindow extends Window implements Runnable { /** * */ private static final long serialVersionUID = 1L; ZirkelFrame ZF; public LogoWindow(final ZirkelFrame zf) { super(zf); setSize(300, 150); getSize(); final Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); this.setLocation((dim.width - 300) / 2, (dim.height - 150) / 2); loadLogo(); setVisible(true); } Image I; public void loadLogo() { try { final InputStream in = getClass().getResourceAsStream( "/rene/zirkel/logowindow.jpg"); int pos = 0; int n = in.available(); final byte b[] = new byte[200000]; while (n > 0) { final int k = in.read(b, pos, n); if (k < 0) break; pos += k; n = in.available(); } in.close(); I = Toolkit.getDefaultToolkit().createImage(b, 0, pos); final MediaTracker T = new MediaTracker(this); T.addImage(I, 0); T.waitForAll(); } catch (final Exception e) { setVisible(false); I = null; } } @Override public void paint(final Graphics g) { if (I == null) return; g.drawImage(I, 0, 0, this); if (Global.getJavaVersion() >= 1.2) { final Graphics2D G = (Graphics2D) g; G.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); } g.setFont(new Font("Dialog", Font.PLAIN, 11)); String s = Zirkel.name("version") + " " + Zirkel.name("program.version"); g.setColor(Color.darkGray); g.drawString(s, 135, 80); g.setFont(new Font("Dialog", Font.PLAIN, 11)); g.setColor(Color.GRAY); s = "java : " + System.getProperty("java.version"); g.drawString(s, 135, 95); } public void run() { } } ./src/rene/zirkel/CVS/RevisionCache/SettingsDialog.java#1.50000644000175000017500000001441111261617436022230 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel; import java.awt.BorderLayout; import java.awt.Checkbox; import java.awt.Frame; import java.awt.GridLayout; import javax.swing.JPanel; import rene.gui.ButtonAction; import rene.gui.CheckboxAction; import rene.gui.Global; import rene.gui.MyPanel; import rene.gui.Panel3D; import rene.zirkel.dialogs.HelpCloseDialog; class SettingsDialog extends HelpCloseDialog { /** * */ private static final long serialVersionUID = 1L; Frame F; Checkbox MoveName, MoveFixName, QSure, QPointOn, QIntersection, QChoice, Indicate, Simple, IconBarTop, IconBarTips, UTF, FD, SmartBoard, Backups, DoubleClick, SimpleGraphics, SquarePoints, SmallIcons, OldIcons, More, GermanPoints; public SettingsDialog(final Frame frame) { super(frame, Zirkel.name("menu.options.other"), true); F = frame; setLayout(new BorderLayout()); final JPanel north = new MyPanel(); north.setLayout(new GridLayout(0, 1)); MoveName = addcheck(north, "menu.settings.movename"); MoveName.setState(Global.getParameter("options.movename", false)); MoveFixName = addcheck(north, "menu.settings.movefixname"); MoveFixName.setState(Global.getParameter("options.movefixname", true)); QSure = addcheck(north, "menu.settings.sure"); QSure.setState(Global.getParameter("options.sure", true)); QPointOn = addcheck(north, "menu.settings.pointon"); QPointOn.setState(Global.getParameter("options.pointon", false)); QIntersection = addcheck(north, "menu.settings.intersection"); QIntersection.setState(Global.getParameter("options.intersection", false)); QChoice = addcheck(north, "menu.settings.choice"); QChoice.setState(Global.getParameter("options.choice", true)); Indicate = addcheck(north, "menu.settings.indicate"); Indicate.setState(Global.getParameter("options.indicate", true)); Simple = addcheck(north, "menu.settings.indicate.simple"); Simple.setState(Global.getParameter("options.indicate.simple", false)); IconBarTop = addcheck(north, "menu.settings.iconbartop"); IconBarTop.setState(Global.getParameter("options.iconbartop", true)); IconBarTips = addcheck(north, "menu.settings.showtips"); IconBarTips.setState(Global.getParameter("iconbar.showtips", true)); FD = addcheck(north, "menu.settings.filedialog"); FD.setState(Global.getParameter("options.filedialog", true)); UTF = addcheck(north, "menu.settings.utf"); UTF.setState(Global.getParameter("options.utf", true)); SmartBoard = addcheck(north, "menu.settings.smartboard"); SmartBoard.setState(Global.getParameter("smartboard", false)); Backups = addcheck(north, "menu.settings.backups"); Backups.setState(Global.getParameter("options.backups", true)); DoubleClick = addcheck(north, "menu.settings.doubleclick"); DoubleClick.setState(Global.getParameter("options.doubleclick", false)); SimpleGraphics = addcheck(north, "menu.settings.simplegraphics"); SimpleGraphics.setState(Global.getParameter("simplegraphics", false)); /* * SquarePoints=addcheck(north,"menu.settings.squarepoints"); * SquarePoints * .setState(Global.getParameter("options.squarepoints",false)); */ SmallIcons = addcheck(north, "menu.settings.smallicons"); SmallIcons.setState(Global.getParameter("options.smallicons", false)); OldIcons = addcheck(north, "menu.settings.oldicons"); OldIcons.setState(Global.getParameter("options.oldicons", false)); More = addcheck(north, "menu.settings.more"); More.setState(Global.getParameter("options.more", false)); GermanPoints = addcheck(north, "menu.settings.germanpoints"); GermanPoints.setState(Global .getParameter("options.germanpoints", false)); add("North", new Panel3D(north)); final JPanel south = new MyPanel(); south.add(new ButtonAction(this, Zirkel.name("ok"), "OK")); south.add(new ButtonAction(this, Zirkel.name("abort"), "Close")); addHelp(south, "settings"); add("South", new Panel3D(south)); pack(); center(frame); setVisible(true); } @Override public void doAction(final String s) { if (s.equals("OK")) { Global.setParameter("options.movename", MoveName.getState()); Global.setParameter("options.movefixname", MoveFixName.getState()); Global.setParameter("options.pointon", QPointOn.getState()); Global.setParameter("options.sure", QSure.getState()); Global.setParameter("options.intersection", QIntersection .getState()); Global.setParameter("options.choice", QChoice.getState()); Global.setParameter("options.indicate", Indicate.getState()); Global.setParameter("options.indicate.simple", Simple.getState()); Global.setParameter("options.iconbartop", IconBarTop.getState()); Global.setParameter("iconbar.showtips", IconBarTips.getState()); Global.setParameter("options.filedialog", FD.getState()); Global.setParameter("options.utf", UTF.getState()); Global.setParameter("smartboard", SmartBoard.getState()); Global.setParameter("options.backups", Backups.getState()); Global.setParameter("options.doubleclick", DoubleClick.getState()); if (SimpleGraphics != null) Global .setParameter("simplegraphics", SimpleGraphics .getState()); // Global.setParameter("options.squarepoints",SquarePoints.getState()); Global.setParameter("options.smallicons", SmallIcons.getState()); Global.setParameter("options.oldicons", OldIcons.getState()); Global.setParameter("options.more", More.getState()); Global .setParameter("options.germanpoints", GermanPoints .getState()); doclose(); } else super.doAction(s); } public Checkbox addcheck(final JPanel p, final String name) { final Checkbox c = new CheckboxAction(this, Zirkel.name(name), name); p.add(c); return c; } } ./src/rene/zirkel/CVS/RevisionCache/ZirkelCanvas.java#1.120000644000175000017500000047174611301766453022003 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel; // file: ZirkelCanvas.java import java.awt.CheckboxMenuItem; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.TextField; import java.awt.datatransfer.Clipboard; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.Enumeration; import java.util.Vector; import java.util.zip.GZIPOutputStream; import rene.dialogs.Warning; import rene.gui.Global; import rene.gui.MyCheckboxMenuItem; import rene.gui.MyMenuItem; import rene.util.FileName; import rene.util.ImageSelection; import rene.util.MyVector; import rene.util.PngEncoder; import rene.util.sort.Sorter; import rene.util.xml.XmlReader; import rene.util.xml.XmlTag; import rene.util.xml.XmlTagPI; import rene.util.xml.XmlTree; import rene.util.xml.XmlWriter; import rene.zirkel.construction.ChangedListener; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionDisplayPanel; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.construction.Interpreter; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.IntersectionConstructor; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.dialogs.AgainQuestion; import rene.zirkel.dialogs.DefineMacro; import rene.zirkel.dialogs.MessageWindow; import rene.zirkel.dialogs.ReplaceMacroQuestion; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.Drawing; import rene.zirkel.graphics.LatexOutput; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.graphics.MyGraphicsEPS; import rene.zirkel.graphics.MyGraphicsFig; import rene.zirkel.graphics.MyGraphicsPDF; import rene.zirkel.graphics.MyGraphicsSvg; import rene.zirkel.graphics.PolygonDrawer; import rene.zirkel.graphics.TrackPainter; import rene.zirkel.listener.AddEventListener; import rene.zirkel.listener.DoneListener; import rene.zirkel.listener.StatusListener; import rene.zirkel.macro.Macro; import rene.zirkel.macro.MacroBar; import rene.zirkel.macro.MacroItem; import rene.zirkel.macro.MacroMenu; import rene.zirkel.macro.MacroRunner; import rene.zirkel.macro.MacroSelectDialog; import rene.zirkel.objects.AngleObject; import rene.zirkel.objects.AreaObject; import rene.zirkel.objects.AxisObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.EquationXYObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.FixedAngleObject; import rene.zirkel.objects.FixedCircleObject; import rene.zirkel.objects.FunctionObject; import rene.zirkel.objects.IntersectionObject; import rene.zirkel.objects.MoveableObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PointonObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.QuadricObject; import rene.zirkel.objects.RayObject; import rene.zirkel.objects.SegmentObject; import rene.zirkel.objects.TwoPointLineObject; import rene.zirkel.objects.UserFunctionObject; import rene.zirkel.structures.CoordinatesXY; import rene.zirkel.tools.AnimatorTool; import rene.zirkel.tools.BinderTool; import rene.zirkel.tools.BreakpointAnimator; import rene.zirkel.tools.EditTool; import rene.zirkel.tools.LabelMover; import rene.zirkel.tools.MagnetTool; import rene.zirkel.tools.MetaMover; import rene.zirkel.tools.MoverTool; import rene.zirkel.tools.ObjectTracker; import rene.zirkel.tools.SaveJob; import rene.zirkel.tools.SetAwayTool; import rene.zirkel.tools.SetCurveCenterTool; import rene.zirkel.tools.SetFixedAngle; import rene.zirkel.tools.SetFixedCircle; import rene.zirkel.tools.SetRangeTool; import rene.zirkel.tools.SetTargetsTool; import rene.zirkel.tools.Tracker; import rene.zirkel.tools.UniversalTracker; import rene.zirkel.tools.ZoomerTool; import atp.sHotEqn; import eric.JGlobals; import eric.JUndo; import eric.applet.dock.dock; import eric.controls.JControlsManager; import rene.zirkel.tools.JSmacroTool; /** * @author Rene Main class, doing most of the work in the C.a.R. application. * This canvas handles mouse and keyboard input, displays the * construction and has tools to save and load constructions. */ public class ZirkelCanvas extends javax.swing.JPanel implements MouseListener, MouseMotionListener, ItemListener, AddEventListener, ActionListener, ChangedListener, MouseWheelListener // the canvas to do the construction { /** * */ private static final long serialVersionUID=1L; ObjectConstructor OC=new MoverTool(); // the current object constructor Construction C=new Construction(), COriginal; // the construction (collection of Constructor-Objects) StatusListener SL=null; // for displaying a status message public Image I=null; MyGraphics IG; public UniversalTracker UniversalTrack=null; Image Background=null; FontMetrics FM; public double PointSize=4.0; // Size of a point double MinPointSize=4.0; // Default minimal point size public double FontSize=12.0; // Size of font double MinFontSize=12.0; // Default minimal font size public int IW=0, IH=0; // Image and its dimensions public double Xmin, DX, Ymin, DY; boolean ShowHidden=false; // show hidden objects Frame F=new Frame(); boolean ReadOnly; boolean AllowRightMouse=true; public PopupMenu PM; CheckboxMenuItem CheckboxHidden; MenuItem Replay, Empty; boolean Job=false; // this is a job (save as such) String Last=""; // Last displayed job object Vector Targets=new Vector(); // Target names ConstructionObject TargetO[], TargetS[]; // Target objects and solutions int ShowColor=0; // 0=all, 1=green etc. (black displays always) static public double // factors for rounding EditFactor=1000000.0, LengthsFactor=100.0, AnglesFactor=1.0; public boolean Visual=Global.getParameter("options.visual", true); boolean All; boolean Interactive=true; public int GridColor=0, GridThickness=ConstructionObject.THIN; public boolean ShowGrid=false, AxesOnly=false, ShowDots=true, ShowLines=true; public boolean GridLabels=true, GridBold=false, GridLarge=false; public JControlsManager JCM; public JUndo JU=new JUndo(); private dock DOCK; /** * Initiate an empty construction. The display may have a popup menu (only * for readonly displays). * * @param readonly * User cannot change the construction. * @param replay * Replay option in popup menu. * @param hidden * Show hidden option in popup menu. */ public ZirkelCanvas(final boolean readonly, final boolean replay, final boolean hidden) { ReadOnly=readonly; AllowRightMouse=!readonly; // setLayout(new BoxLayout(this,BoxLayout.X_AXIS)); setLayout(null); UniversalTrack=new UniversalTracker(this); JCM=new JControlsManager(this); if (Global.getParameter("options.nopopupmenu", false)) { PM=null; } else if (ReadOnly) { PM=new PopupMenu(); CheckboxHidden=new MyCheckboxMenuItem(Zirkel.name("popup.hidden")); CheckboxHidden.addItemListener(this); if (hidden) { PM.add(CheckboxHidden); } Replay=new MyMenuItem(Zirkel.name("popup.replay")); Replay.addActionListener(this); if (replay) { PM.add(Replay); } if (hidden||replay) { add(PM); } else { PM=null; } } else { PM=new PopupMenu(); Empty=new MyMenuItem(Zirkel.name("popup.empty")); add(PM); } C.CL=this; clear(); updateDigits(); C.addAddEventListener(this); addMouseWheelListener(this); // DOCK=new dock(this); // add(DOCK); } public ZirkelCanvas(final boolean readonly) { this(readonly, true, true); } public ZirkelCanvas() { this(false, true, true); } @Override public void paintComponents(final Graphics g) { } public void deleteAxisObjects() { C.deleteAxisObjects(); reloadCD(); repaintCD(); } public void createAxisObjects() { C.createAxisObjects(); } private void setShowHideParameters(final String s, final boolean b) { Global.setParameter("options.point."+s, b); Global.setParameter("options.segment."+s, b); Global.setParameter("options.line."+s, b); Global.setParameter("options.circle."+s, b); Global.setParameter("options.angle."+s, b); Global.setParameter("options.text."+s, b); Global.setParameter("options.locus."+s, b); Global.setParameter("options."+s, b); // setShowNames(true); } public void JSsend(final String s) { if (s.equals("shownames")) { setShowHideParameters("shownames", true); } else if (s.equals("hidenames")) { setShowHideParameters("shownames", false); } else if (s.equals("showvalues")) { setShowHideParameters("showvalues", true); } else if (s.equals("hidevalues")) { setShowHideParameters("showvalues", false); } else { try { C.interpret(this, s); } catch (final Exception ex) { } } } public String JSreceive(final String s) { String r="ERROR..."; try { double rep; final Expression exp=new Expression(s, C, null); rep=exp.getValue(); r=String.valueOf(rep); } catch (final ConstructionException ex) { ex.printStackTrace(); } return r; } public Dimension UseSize=null; @Override public Dimension getMinimumSize() { if (Background==null||!Global.getParameter("background.usesize", false)) { if (UseSize!=null) { return UseSize; } else { return new Dimension(600, 600); } } else { final int iw=Background.getWidth(this); if (iw<10) { return new Dimension(600, 600); } final int ih=Background.getHeight(this); if (Global.getParameter("background.usewidth", false)) { final int w=getSize().width, h=(int) ((double) ih/iw*w+0.5); return new Dimension(w, h); } else { return new Dimension(iw, ih); } } } @Override public Dimension getPreferredSize() { return getMinimumSize(); } public void updateDigits() { EditFactor=Math.pow(10, Global.getParameter("digits.edit", 5)); LengthsFactor=Math.pow(10, Global.getParameter("digits.lengths", 5)); AnglesFactor=Math.pow(10, Global.getParameter("digits.angles", 0)); } public void itemStateChanged(final ItemEvent e) { if (e.getSource()==CheckboxHidden) { ShowHidden=CheckboxHidden.getState(); repaint(); } } ZirkelCanvasInterface ZCI; public void setZirkelCanvasListener(final ZirkelCanvasInterface zci) { ZCI=zci; } public String loadImage() { return ZCI.loadImage(); } public Image doLoadImage(final String filename) { return ZCI.doLoadImage(filename); } public void actionPerformed(final ActionEvent e) { if (!Interactive) { return; } if (e.getSource()==Replay) { if (ZCI!=null) { ZCI.replayChosen(); } } else { final Enumeration en=Macros.elements(); while (en.hasMoreElements()) { final MacroItem m=(MacroItem) en.nextElement(); if (m.I==e.getSource()) { if (ZCI!=null) { ZCI.runMacro(m.M); } break; } } } } // Some transfer functions to compute screen coordinates etc. public double col(final double x) { return (x-Xmin)/DX*IW; } public double row(final double y) { return IH-(y-Ymin)/DY*IH; } public int width() { return IW; } public int height() { return IH; } public double x(final int c) { return Xmin+DX*c/IW; } public double y(final int r) { return Ymin+DY*(IH-r)/IH; } public double dx(final int c) { return DX*c/IW; } public double dy(final int r) { return DY*r/IH; } public double dx(final double c) { return DX*c/IW; } public double dy(final double r) { return DY*r/IH; } public double maxX() { return Xmin+DX; } public double minX() { return Xmin; } public double maxY() { return Ymin+DY; } public double minY() { return Ymin; } public boolean isInside(final double x, final double y) { return x>=Xmin&&x=Ymin&&y0) { C.setPixel(getSize().width/DX); } } DoneListener DL; public void setDoneListener(final DoneListener dl) { DL=dl; } /** * Add an item to the construction and re-paint the construction. */ public void addObject(final ConstructionObject o) // called by the // ObjectConstructor { C.add(o); if (Preview) { o.setIndicated(true); o.setSelectable(false); } C.updateCircleDep(); } /** * A construction added an item. Check, if it solves a problem and notify * the DoneListener, if so. */ public void added(final Construction c, final ConstructionObject o) { if (displayJob()&&TargetO.length>0) { boolean olddone=true; for (int i=0; i0) { boolean olddone=true; for (int i=0; i0) { final ConstructionObject o=select(v, e.getX(), e.getY()); if (o!=null) { new EditTool().mousePressed(e, o, this); check(); return; } else { repaintCD(); } return; } } if (Moved<=2&&PM!=null&&!Global.getParameter("restricted", false)) { int n=2; if (ReadOnly||!Global.getParameter("options.doubleclick", false)) { n=1; } if (e.getClickCount()>=n&&(ReadOnly||Macros.size()!=0)) { PM.show(e.getComponent(), e.getX(), e.getY()); } } repaintCD(); return; } if (SmartBoardPreview&&Global.getParameter("smartboard", false)) { Control=e.isControlDown(); clearIndicated(); clearPreview(); repaint(); Dragging=false; OC.mousePressed(e, this); SmartBoardPreview=false; mouseReleased(e); return; } if (!Dragging) { OC.mouseReleased(e, this); Dragging=false; repaintCD(); return; } if (Moved<=1) { if (OC instanceof LabelMover) { ((LabelMover) OC).resetPoint(); OC.mouseReleased(e, this); } else if (OC instanceof MetaMover) { OC.mouseReleased(e, this); if (!ReadOnly) { new EditTool().mousePressed(e, this); } } } else { OC.mouseReleased(e, this); } repaintCD(); check(); Dragging=false; } public synchronized void mouseClicked(final MouseEvent e) { } public synchronized void mouseExited(final MouseEvent e) { if (!Interactive) { return; } clearIndicated(); clearPreview(); repaint(); SmartBoardPreview=false; RightClicked=false; repaintCD(); } public void mouseEntered(final MouseEvent e) { } public synchronized void mouseMoved(final MouseEvent e) { if (!Interactive||!Global.getParameter("options.indicate", true)) { return; } if (Global.getParameter("smartboard", false)) { return; } Count.setAllAlternate(true); OC.mouseMoved(e, this, Global.getParameter("options.indicate.simple", false)); Count.setAllAlternate(false); repaintCD(); } DragThread DT=null; public synchronized void mouseDragged(final MouseEvent e) { if (!Interactive) { return; } if (DT==null) { DT=new DragThread(this); } if (SmartBoardPreview&&Global.getParameter("smartboard", false)) { OC.mouseMoved(e, this, Global.getParameter( "options.indicate.simple", false)); } else { DT.mouseDragged(e); Moved++; } repaintCD(); } public synchronized void doMouseDragged(final MouseEvent e) { OC.mouseDragged(e, this); } ConstructionObject LastPaint=null; public void newImage() { I=null; repaint(); } boolean Frozen=false; public void setFrozen(final boolean f) { Frozen=f; } public boolean getFrozen() { return Frozen; } MessageWindow MW; final double PointSizeFactor=240.0; int CC=0; // public void repaint(){ // // System.out.print("a "); // // super.repaint(); // StackTraceElement[] trace = new Throwable().getStackTrace(); // if (!trace[1].equals("javax.swing.JComponent")) super.repaint(); // // // for (int i=0;i0) { final ConstructionObject os[]=new ConstructionObject[n]; e=C.elements(); n=0; while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.HasZ) { os[n++]=o; } } Sorter.sort(os); for (int i=0; i250&&PolygonDrawer.step<50) { PolygonDrawer.step=PolygonDrawer.step*2; } if (time<100&&PolygonDrawer.step>4) { PolygonDrawer.step=PolygonDrawer.step/2; } paintDrawings(IG); // JMacrosTools.CurrentJZF.JCM.paintControls(IG.getGraphics()); } void dopaintFig(final MyGraphicsFig IG) { if (ShowGrid) { paintGrid(IG); } IG.pushLayer(true); int layer=0; while (true) { IG.pushLayer(); int l=0; Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==LastPaint) { break; } if (l==layer&&o.isBack()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l>layer) { break; } } } if (llayer) { break; } } } l=0; e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==LastPaint) { break; } if (l==layer&&!o.isBack()&&o.selected()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l>layer) { break; } } } layer++; } IG.pushLayer(false); if (LastPaint==null) { paintTrack(IG); } } int xg[]=new int[64], yg[]=new int[64]; public void setGrid() { ShowGrid=Global.getParameter("showgrid", false); AxesOnly=Global.getParameter("axesonly", false); ShowDots=Global.getParameter("showdots", false); ShowLines=Global.getParameter("showlines", false); GridThickness=Global.getParameter("grid.thickness", ConstructionObject.THIN); GridColor=Global.getParameter("grid.colorindex", 0); GridBold=Global.getParameter("grid.bold", false); GridLarge=Global.getParameter("grid.large", false); GridLabels=Global.getParameter("grid.labels", true); } /** * Paint axes and grid. * * @param IG */ void paintGrid(final MyGraphics IG) { if (GridThickness==ConstructionObject.NORMAL) { IG.setColor(ZirkelFrame.Colors[Global.getParameter( "grid.colorindex", 0)]); } else { IG.setColor(ZirkelFrame.LightColors[GridColor]); } IG.setFont(GridLarge, GridBold); final double gridsize=getGridSize(); int dd=IH/200; if (dd<1) { dd=1; } double x1=Math.floor((C.getX()-C.getW())/gridsize-1)*gridsize; int xi=0; while (x1<(C.getX()+C.getW())&&xi<64) { final int c=(int) col(x1); xg[xi++]=c; x1+=gridsize; } double y1=Math.floor((C.getY()-C.getW())/gridsize-1)*gridsize; int yi=0; while (y1<(C.getY()+C.getW())&&yi<64) { final int r=(int) row(y1); yg[yi++]=r; y1+=gridsize; } for (int i=0; iC.getX()-C.getW()) { final int c=(int) col(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(c, 0, c, IH); } else { IG.drawThickLine(c, 0, c, IH); } } if (0C.getY()-C.getW()) { final int r=(int) row(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(0, r, IW, r); } else { IG.drawThickLine(0, r, IW, r); } } } dd=dd*2; double labelsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; while (C.getW()*2/labelsize>=10) { labelsize*=10; } if (C.getW()*2/labelsize<5) { labelsize/=2; } final FontMetrics fm=IG.getFontMetrics(); final int FH=fm.getHeight(); x1=Math.floor((C.getX()-C.getW())/labelsize-1)*labelsize; int lh=(int) row(0); int bottomshift=FH+2; if (lh<0||lh>IH) { lh=IH; bottomshift=-7; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); final String s=format(x1); if (s.length()>0) { if (GridLabels) { IG.drawString(s, c-fm.stringWidth(s)/2, lh+bottomshift); } IG.drawLine(c, lh-dd, c, lh+dd); } x1+=labelsize; } boolean left=true; int lw=(int) col(0); if (lw<0||lw>IW-20) { lw=0; left=false; } y1=Math.floor((C.getY()-C.getW())/labelsize-1)*labelsize; while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); final String s=format(y1); if (s.length()>0) { final int leftshift=(left)?-fm.stringWidth(s)-5:8; if (GridLabels) { IG.drawString(s, lw+leftshift, r+FH/2-2); } IG.drawLine(lw-dd, r, lw+dd, r); } y1+=labelsize; } } /** * Paint only the coordinate axes (no grid) * * @param IG */ void paintAxes(final MyGraphics IG) { IG.setAntialiasing(false); if (GridThickness==ConstructionObject.NORMAL) { IG.setColor(ZirkelFrame.Colors[GridColor]); } else { IG.setColor(ZirkelFrame.LightColors[GridColor]); } IG.setFont(GridLarge, GridBold); final double gridsize=getGridSize(); double x1=Math.floor((C.getX()-C.getW())/gridsize-1)*gridsize; final int r0=(int) row(0); int dd=IH/200; if (dd<1) { dd=1; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); IG.drawLine(c, r0-dd, c, r0+dd); x1+=gridsize; } double y1=Math.floor((C.getY()-C.getW())/gridsize-1)*gridsize; final int c0=(int) col(0); while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); IG.drawLine(c0-dd, r, c0+dd, r); y1+=gridsize; } if (GridThickness!=ConstructionObject.INVISIBLE) { if (0C.getX()-C.getW()) { final int c=(int) col(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(c, 0, c, IH); } else { IG.drawThickLine(c, 0, c, IH); } } if (0C.getY()-C.getW()) { final int r=(int) row(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(0, r, IW, r); } else { IG.drawThickLine(0, r, IW, r); } } } dd=dd*2; double labelsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; while (C.getW()*2/labelsize>=10) { labelsize*=10; } if (C.getW()*2/labelsize<5) { labelsize/=2; } final FontMetrics fm=IG.getFontMetrics(); final int FH=fm.getHeight(); x1=Math.floor((C.getX()-C.getW())/labelsize-1)*labelsize; int lh=(int) row(0); int bottomshift=FH+2; if (lh<0||lh>IH) { lh=IH; bottomshift=-7; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); final String s=format(x1); if (s.length()>0) { if (GridLabels) { IG.drawString(s, c-fm.stringWidth(s)/2, lh+bottomshift); } IG.drawLine(c, lh-dd, c, lh+dd); } x1+=labelsize; } boolean left=true; int lw=(int) col(0); if (lw<0||lw>IW-20) { lw=0; left=false; } y1=Math.floor((C.getY()-C.getW())/labelsize-1)*labelsize; while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); final String s=format(y1); if (s.length()>0) { final int leftshift=(left)?-fm.stringWidth(s)-5:8; if (GridLabels) { IG.drawString(s, lw+leftshift, r+FH/2-2); } IG.drawLine(lw-dd, r, lw+dd, r); } y1+=labelsize; } IG.setAntialiasing(true); } public double pointSize() { return PointSize; } public double SelectionPointFactor=Global.getParameter("selectionsize", 1.5); public double selectionSize() { return SelectionPointFactor*PointSize; } public double Scale=1.0; public int scale(final int x) { return (int) (Scale*x); } static char c[]=new char[20]; int nc; public String format(double x) { // double xx=x; nc=0; boolean minus=false; if (x<-1e-12) { minus=true; x=-x; } x+=1e-12; final double h=x-Math.floor(x); if (rekformat(h, 8)) { c[nc++]='.'; } while (x>=1) { final double s=Math.floor(x/10); c[nc++]=(char) ('0'+(int) (x-s*10)); x=s; } if (nc>0&&minus) { c[nc++]='-'; } // revert c: for (int i=0; i "+new String(c,0,nc)); return new String(c, 0, nc); } boolean rekformat(double h, final int k) { h=h*10; final double x=Math.floor(h); if (k==0) { final int i=(int) x; if (i>0) { c[nc++]=(char) ('0'+i); return true; } else { return false; } } else { final int i=(int) x; if (rekformat(h-x, k-1)||i>0) { c[nc++]=(char) ('0'+i); return true; } else { return false; } } } @Override public void update(final Graphics g) { paint(g); } public void paintUntil(final ConstructionObject o) { if (LastPaint==o) { return; } LastPaint=o; repaint(); } // validate all elements @Override public void validate() { dovalidate(); if (OC instanceof TrackPainter) { ((TrackPainter) OC).validate(this); } } /** * Synchronized update of the construction to avoid a repaint during update. */ synchronized public void dovalidate() { C.dovalidate(); } // selection routines: // This vector is used by ALL selection and indication routines for // performance reasons. MyVector V=new MyVector(); public void sort(final MyVector V) { if (V.size()<2) { return; } Sorter.QuickSort(V.getArray(), 0, V.size()-1); } /** * Slow function to resort a vector by the number of each element in the * construction. */ public void sortRow(final MyVector V) { final ConstructionObject o[]=new ConstructionObject[V.size()]; V.copyInto(o); V.removeAllElements(); final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject oo=(ConstructionObject) e.nextElement(); for (final ConstructionObject element : o) { if (element==oo) { V.addElement(oo); break; } } } } /** * select a circle or a line. **/ public ConstructionObject selectCircleLine(final int x, final int y, final boolean multiple) // select a circle or a line { final MyVector v=selectCircleLineObjects(x, y, multiple, false); return select(v); } public ConstructionObject selectCircleLine(final int x, final int y) // select // a // circle // or // a // line { return selectCircleLine(x, y, true); } /** * select a circle or a line. **/ public ConstructionObject selectPointonObject(final int x, final int y, final boolean multiple) // select a circle or a line { final MyVector v=selectPointonObjects(x, y, multiple, false); return select(v); } public ConstructionObject selectPointonObject(final int x, final int y) // select // a // circle // or // a // line { return selectPointonObject(x, y, true); } /** * Select all possible circles or lines at x,y. If a matching non-filled * object is found above a filled object, the latter is never selected. * * @param multiple * determines, if it is possible to select selected objects. * @param testlocal * determines, if objects that look locally like already selected * objects should be omitted. */ public MyVector selectCircleLineObjects(final int x, final int y, final boolean multiple, final boolean testlocal) // select a circle // or a line { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject||o instanceof PrimitiveCircleObject)&&o.nearto(x, y, true, this)&&(multiple||!o.selected())) { if (testlocal) { final Enumeration ev=V.elements(); while (ev.hasMoreElements()) { final ConstructionObject ov=(ConstructionObject) ev.nextElement(); if (o.locallyLike(ov)) { o=null; break; } } } if (o!=null) { V.addElement(o); } } } return V; } public MyVector selectCircleLineObjects(final int x, final int y, final boolean multiple) { return selectCircleLineObjects(x, y, multiple, false); } public MyVector selectCircleLineObjects(final int x, final int y) { return selectCircleLineObjects(x, y, true, false); } /** * Select all possible object at x,y that can carry a point. * * @param multiple * determines, if it is possible to select selected objects. * @param testlocal * determines, if objects that look locally like already selected * objects should be omitted. */ public MyVector selectPointonObjects(final int x, final int y, final boolean multiple, final boolean testlocal) // select a circle // or a line { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PointonObject)&&o.nearto(x, y, true, this)&&(multiple||!o.selected())) { if (testlocal) { final Enumeration ev=V.elements(); while (ev.hasMoreElements()) { final ConstructionObject ov=(ConstructionObject) ev.nextElement(); if (o.locallyLike(ov)) { o=null; break; } } } if (o!=null) { V.addElement(o); } } } return V; } public MyVector selectPointonObjects(final int x, final int y, final boolean multiple) { return selectPointonObjects(x, y, multiple, false); } public MyVector selectPointonObjects(final int x, final int y) { return selectPointonObjects(x, y, true, false); } /** * Select all selectable objects near to x,y. * * @param multiple * allows multiple selections. **/ public MyVector selectObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } return V; } public MyVector selectObjects(final int x, final int y) { return selectObjects(x, y, true); } /** * Select a single object near x,y. **/ public ConstructionObject selectObject(final int x, final int y, final boolean multiple) { final MyVector v=selectObjects(x, y, multiple); return select(v, x, y); } public ConstructionObject selectObject(final int x, final int y) { return selectObject(x, y, true); } /** * select all constructable objects near x,y. **/ public MyVector selectConstructableObjects(final int x, final int y, final boolean multiple) // select an enumeration of objects { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.valid()&&o.isFlag()&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } return V; } public MyVector selectConstructableObjects(final int x, final int y) { return selectConstructableObjects(x, y, true); } /** * select a single constructable object near x,y. **/ public ConstructionObject selectConstructableObject(final int x, final int y) { final MyVector v=selectConstructableObjects(x, y, true); return select(v, x, y); // user determines } /** * Select a single line, segment, ray, perp., paral. or fixed angle near * x,y. **/ public PrimitiveLineObject selectLine(final int x, final int y, final boolean multiple) { selectLineObjects(x, y, multiple); return (PrimitiveLineObject) select(V); } public void selectLineObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PrimitiveLineObject selectLine(final int x, final int y) { return selectLine(x, y, true); } /** * Select a point or a line (for the object tracker). */ public void selectPointsOrLines(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject||o instanceof PointObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } /** * Select a single line, segment, or ray near x,y **/ public TwoPointLineObject selectTwoPointLine(final int x, final int y, final boolean multiple) { selectTwoPointLines(x, y, multiple); return (TwoPointLineObject) select(V); } public void selectTwoPointLines(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof TwoPointLineObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public TwoPointLineObject selectTwoPointLine(final int x, final int y) { return selectTwoPointLine(x, y, true); } /** * Select a single segment near x,y **/ public SegmentObject selectSegment(final int x, final int y, final boolean multiple) { selectSegments(x, y, multiple); return (SegmentObject) select(V); } public void selectSegments(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof SegmentObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public SegmentObject selectSegment(final int x, final int y) { return selectSegment(x, y, true); } public boolean isMultipleAcceptedObject(final ConstructionObject o) { boolean b=o instanceof AreaObject; b=b||o instanceof PrimitiveLineObject; b=b||o instanceof PrimitiveCircleObject; b=b||o instanceof QuadricObject; b=b||o instanceof eric.JLocusTrackObject; return b; } public void selectMultipleFinals(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PointObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.removeAllElements(); return; } if (o.isSelectable()&&(isMultipleAcceptedObject(o))&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } if (V.size()>1) { V.removeAllElements(); } } public ConstructionObject selectMultipleFinal(final int x, final int y, final boolean multiple) { selectMultipleFinals(x, y, multiple); return (ConstructionObject) select(V); } /** * Select a single ray near x,y **/ public RayObject selectRay(final int x, final int y, final boolean multiple) { selectRays(x, y, multiple); return (RayObject) select(V); } public void selectRays(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof RayObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public RayObject selectRay(final int x, final int y) { return selectRay(x, y, true); } /** * Select a circle near x,y. A non-filled object is preferred before a * filled object. **/ public PrimitiveCircleObject selectCircle(final int x, final int y, final boolean multiple) { selectCircles(x, y, multiple); return (PrimitiveCircleObject) select(V); } public void selectCircles(final int x, final int y, final boolean multiple) { Enumeration e=C.elements(); V.removeAllElements(); boolean haveNotFilled=false; while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveCircleObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); if (!o.isFilledForSelect()) { haveNotFilled=true; } } } if (haveNotFilled) { e=V.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isFilledForSelect()) { V.removeElement(o); } } } } public PrimitiveCircleObject selectCircle(final int x, final int y) { return selectCircle(x, y, true); } /** * Select a point near x,y. **/ public PointObject selectPoint(final int x, final int y, final boolean multiple) { selectPointObjects(x, y, multiple); return (PointObject) select(V); } public void selectPointObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PointObject selectPoint(final int x, final int y) { return selectPoint(x, y, true); } public PointObject selectPoint(final int x, final int y, final boolean multiple, final ConstructionObject until) { selectPointObjects(x, y, multiple, until); return (PointObject) select(V); } public void selectPointObjects(final int x, final int y, final boolean multiple, final ConstructionObject until) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==until) { break; } if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PointObject selectPoint(final int x, final int y, final ConstructionObject until) { return selectPoint(x, y, true, until); } boolean NewPoint=false; public boolean isNewPoint() { return NewPoint; } /** * Select a point, and create a new point, if necessary. Even creates an * intersection, or a point bound to an object, if possible. If enabled, the * user is asked for confirmation in these cases. The variable NewPoint is * set to true, if the point was indeed created. * * @param multiple * determines, if multiple selections are possible. * @param any * determines, if the first point should be used. **/ public PointObject selectCreatePoint(final int x, final int y, final boolean multiple, final boolean any) { NewPoint=false; if (Preview) { final PointObject p=new PointObject(C, x(x), y(y)); addObject(p); p.setSuperHidden(true); PreviewObject=p; return p; } // User selects a known point: final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } sort(V); } if (V.size()>0) { if (any) { return (PointObject) (V.elementAt(0)); } final ConstructionObject o=select(V, Control||!Global.getParameter("options.indicate", true)); if (o!=null) { return (PointObject) o; } return null; } // User creates a new point: ConstructionObject oc=tryCreateIntersection(x, y, true); if (oc!=null) { final PointObject o=(PointObject) oc; // o.setDefaults(); // if (o.showName()) renameABC(o,false,false); return o; } if (!IntersectionYes) { return null; } final MyVector w=selectPointonObjects(x, y, true, false); filter(w, x, y, true); if (w.size()>0) { oc=select(w, !Control); if (oc==null) { return null; } if (oc!=null) { boolean yes=true; if (Global.getParameter("options.pointon", false)) { final AgainQuestion q=new AgainQuestion(F, Zirkel.name("question.pointon"), Zirkel.name("question.title")); q.center(F); q.setVisible(true); yes=q.yes(); Global.setParameter("options.pointon", q.again()); } if (yes) { final PointObject o=new PointObject(C, x(x), y(y), oc); // if (ShowGrid&&!Global.getParameter("grid.leftsnap", // false)) { // o.snap(this); // } o.setUseAlpha(true); addObject(o); validate(); o.setDefaults(); // rename Point on object, if showname // if (o.showName()) renameABC(o,false,false); NewPoint=true; return o; } else { return null; } } } final PointObject p=new PointObject(C, x(x), y(y)); if (ShowGrid) { p.snap(this); } addObject(p); p.setDefaults(); // rename Point, if showname // if (p.showName()) renameABC(p,false,false); NewPoint=true; return p; } boolean IntersectionYes=false; public ConstructionObject tryCreateIntersection(final int x, final int y, final boolean ask) { final MyVector w=selectPointonObjects(x, y, true, true); sort(w); IntersectionYes=true; if (w.size()<2) { return null; } final ConstructionObject P1=(ConstructionObject) w.elementAt(0); final ConstructionObject P2=(ConstructionObject) w.elementAt(1); if (!(P1 instanceof PointonObject&&P2 instanceof PointonObject)) { return null; } if (!((PointonObject) P1).canInteresectWith(P2)||!((PointonObject) P2).canInteresectWith(P1)) { return null; } final IntersectionObject o[]=IntersectionConstructor.construct(P1, P2, C); if (o.length==1&&!o[0].valid()) { return null; } if (o.length==2&&!o[0].valid()&&!o[1].valid()) { return null; } if (ask&&Global.getParameter("options.intersection", false)) { final AgainQuestion q=new AgainQuestion(F, Zirkel.name("question.intersection"), Zirkel.name("question.title")); q.center(F); q.setVisible(true); IntersectionYes=q.yes(); Global.setParameter("options.intersection", q.again()); } if (IntersectionYes) { if (o.length==1||!o[1].valid()) { addObject(o[0]); o[0].autoAway(); o[0].validate(x(x), y(y)); validate(); o[0].setDefaults(); o[0].setRestricted(getRestricted()); return o[0]; } if (!o[0].valid()) { addObject(o[1]); o[1].autoAway(); validate(); o[1].setDefaults(); o[1].setRestricted(getRestricted()); return o[1]; } IntersectionObject oc=o[0]; final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d10) { return (ConstructionObject) V.elementAt(0); } else { return null; } } final ConstructionObject o=select(V, x, y); return o; } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel, final ConstructionObject until) { return selectWithSelector(x, y, sel, until, true); } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel, final boolean choice) { return selectWithSelector(x, y, sel, null, choice); } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel) { return selectWithSelector(x, y, sel, null, true); } /** * Select a moveable point at x,y. Don't ask user, take first. **/ public ConstructionObject selectImmediateMoveablePoint(final int x, final int y) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } } if (V.size()==0) { return null; } return (ConstructionObject) V.elementAt(0); } /** * Select a moveable object at x,y. **/ public ConstructionObject selectMoveableObject(final int x, final int y) { final ConstructionObject s=findSelectedObject(); if (s instanceof MoveableObject&&((MoveableObject) s).moveable()&&s.nearto(x, y, this)) { return s; } selectMoveableObjects(x, y); if (V.size()==1) { return (ConstructionObject) V.elementAt(0); } final ConstructionObject o=select(V); if (o!=null) { if (!Global.getParameter("options.choice", true)) { return o; } o.setSelected(true); } return null; } public void selectMoveableObjects(final int x, final int y, final boolean control) { V.removeAllElements(); final ConstructionObject s=findSelectedObject(); if (s instanceof MoveableObject&&((MoveableObject) s).moveable()&&s.nearto(x, y, this)) { V.addElement(s); return; } else if (control&&s instanceof FixedCircleObject&&s.nearto(x, y, this)&&((FixedCircleObject) s).fixedByNumber()) { V.addElement(s); return; } else if (control&&s instanceof FixedAngleObject&&s.nearto(x, y, this)&&((FixedAngleObject) s).fixedByNumber()) { V.addElement(s); return; } final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (!control&&o.isSelectable()&&o instanceof MoveableObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } else if (control&&o instanceof FixedCircleObject&&o.nearto(x, y, this)&&((FixedCircleObject) o).fixedByNumber()) { V.addElement(o); } else if (control&&o instanceof FixedAngleObject&&o.nearto(x, y, this)&&((FixedAngleObject) o).fixedByNumber()) { V.addElement(o); } } filter(V, x, y); } public void selectMoveableObjects(final int x, final int y) { selectMoveableObjects(x, y, false); } /** * Select a moveable object at x,y. Don't ask user, take first. **/ public ConstructionObject selectImmediateMoveableObject(final int x, final int y) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof MoveableObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } } filter(V, x, y); if (V.size()==0) { return null; } return (ConstructionObject) V.elementAt(0); } /** * try to determine the unique objects that are near coordinates x,y and * delete all others from the vector v. **/ public void filter(final MyVector v, final int x, final int y, final boolean choice) { boolean HasPoints=false, HasNotFilled=false; Enumeration e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o instanceof PointObject) { HasPoints=true; } if (!o.isFilledForSelect()) { HasNotFilled=true; } } if (HasPoints) { e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (!o.onlynearto(x, y, this)) { v.removeElement(o); } } } else if (HasNotFilled) { e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isFilledForSelect()) { v.removeElement(o); } } } sort(v); if (!choice) { v.truncate(1); } } public void filter(final MyVector v, final int x, final int y) { filter(v, x, y, Global.getParameter("options.choice", true)||Control); } /** * user must select an object in the selection dialog, unless the selection * is unique anyway, or the filter determines that the selection is unique. **/ public ConstructionObject select(final MyVector v, final int x, final int y, final boolean choice) { if (v.size()==0) { return null; } if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } filter(v, x, y); if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } if (!choice) { return (ConstructionObject) v.elementAt(0); } sortRow(V); RightClicked=false; final eric.JSelectPopupDialog d=new eric.JSelectPopupDialog(F, this, v); final ConstructionObject o=d.getConstructionObject(); d.doclose(); return o; } public ConstructionObject select(final MyVector v, final int x, final int y) { return select(v, x, y, Global.getParameter("options.choice", true)||Control); } /** * user must select an object in the selection dialog, unless the selection * is unique anyway. **/ public ConstructionObject select(final MyVector v, final boolean choice) { if (v.size()==0) { return null; } if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } // if (!choice) return (ConstructionObject)v.elementAt(0); sortRow(V); RightClicked=false; final eric.JSelectPopupDialog d=new eric.JSelectPopupDialog(F, this, v); final ConstructionObject o=d.getConstructionObject(); d.doclose(); return o; } public ConstructionObject select(final MyVector v) { return select(v, Global.getParameter("options.choice", true)||Control); } /** * select the label of a point, i.e. a point, which is set by the user * * @return the first label found **/ public ConstructionObject selectLabel(final int x, final int y) { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o.textcontains(x, y, this)) { return o; } } return null; } public ConstructionObject findSelectedObject() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.selected()) { return o; } } return null; } // Indication functions MyVector Indicated=new MyVector(); PointObject IndicatePoint=null; public void indicate(final MyVector v, final boolean showname) { if (v.size()==1) { if (showname) { setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); } else if (v.elementAt(0) instanceof PointObject) { setCursor(new Cursor(Cursor.HAND_CURSOR)); } } else { setCursor(Cursor.getDefaultCursor()); } if (Indicated.equalsIdentical(v)) { return; } Enumeration e=Indicated.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setIndicated(false); } Indicated.removeAllElements(); e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); Indicated.addElement(o); o.setIndicated(true, showname); } repaint(); } public void indicate(final MyVector v) { indicate(v, false); } public void clearIndicated() { IndicatePoint=null; if (Indicated.size()==0) { return; } final Enumeration e=Indicated.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setIndicated(false); } Indicated.removeAllElements(); setCursor(Cursor.getDefaultCursor()); repaint(); } boolean Preview=false; ConstructionObject LastNonPreview=null; MoveableObject PreviewObject=null; public void movePreview(final MouseEvent e) { if (PreviewObject!=null) { PreviewObject.move(x(e.getX()), y(e.getY())); validate(); repaint(); } } public void prepareForPreview(final MouseEvent e) { LastNonPreview=C.last(); Preview=true; } public boolean isPreview() { return Preview; } public void clearPreview() { if (!Preview) { return; } C.clearAfter(LastNonPreview); LastNonPreview=null; PreviewObject=null; Preview=false; Count.fixAll(false); } public void setPreviewObject(final MoveableObject o) { PreviewObject=o; } public ConstructionObject indicateTryCreateIntersection(final int x, final int y, final boolean ask) { final MyVector w=selectPointonObjects(x, y, true, true); sort(w); IntersectionYes=true; if (w.size()<2) { return null; } final IntersectionObject o[]=IntersectionConstructor.construct( (ConstructionObject) w.elementAt(0), (ConstructionObject) w.elementAt(1), C); if (o.length==1&&!o[0].valid()) { return null; } if (o.length==2) { if (!o[1].valid()) { if (!o[0].valid()) { return null; } } else { final IntersectionObject h=o[0]; o[0]=o[1]; o[1]=h; } } IntersectionObject oc=o[0]; if (o.length==2&&o[1].valid()) { final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d10) { IndicatePoint=null; filter(V, x, y, false); indicate(V); return; } PointObject oc=(PointObject) indicateTryCreateIntersection(x, y, true); if (oc!=null) { return; } final MyVector w=selectPointonObjects(x, y, true, false); filter(w, x, y, true); if (w.size()>=1) { if (!w.equalsIdentical(Indicated)) { oc=new PointObject(C, x(x), y(y), (ConstructionObject) w.elementAt(0)); if (ShowGrid&&!Global.getParameter("grid.leftsnap", false)) { oc.snap(this); } oc.setUseAlpha(true); oc.validate(); oc.setIndicated(true); oc.setType(PointObject.CIRCLE); oc.setColorType(ConstructionObject.THICK); IndicatePoint=oc; indicate(w); } else if (IndicatePoint!=null) { IndicatePoint.setType(PointObject.CIRCLE); IndicatePoint.setColorType(ConstructionObject.THICK); IndicatePoint.move(x(x), y(y)); IndicatePoint.project((ConstructionObject) w.elementAt(0)); repaint(); } } else { clearIndicated(); } } public void indicateCircleLineObjects(final int x, final int y) { final MyVector w=selectCircleLineObjects(x, y); filter(V, x, y); indicate(w); } public void indicatePointonObjects(final int x, final int y) { final MyVector w=selectPointonObjects(x, y); filter(V, x, y); indicate(w); } public void indicateIntersectedObjects(final int x, final int y) { final MyVector w=selectPointonObjects(x, y); if (!w.equalsIdentical(Indicated)&&w.size()>=2) { final IntersectionObject o[]=IntersectionConstructor.construct( (ConstructionObject) w.elementAt(0), (ConstructionObject) w.elementAt(1), C); IntersectionObject oc=o[0]; if (o.length==2) { final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d1=Macros.size()) { appendMacro(m); } } catch (final ConstructionException ex) { Count.setAllAlternate(false); throw ex; } Count.setAllAlternate(false); } } else if (tag.name().equals("Construction")) { if (construction) { boolean job=false; if (tag.hasParam("job")) { job=true; Last=tag.getValue("last"); if (Last==null) { throw new ConstructionException(Zirkel.name("exception.job")); } final String Target=tag.getValue("target"); if (Target==null) { Targets=new Vector(); int i=1; while (true) { final String s=tag.getValue("target"+i); i++; if (s==null) { break; } Targets.addElement(s); } } else { Targets=new Vector(); Targets.addElement(Target); } if (Targets.size()==0) { throw new ConstructionException(Zirkel.name("exception.job")); } } C.load(tree, this); if (job) { if (C.find(Last)==null) { throw new ConstructionException(Zirkel.name("exception.job")); } final Enumeration et=Targets.elements(); while (et.hasMoreElements()) { final String s=(String) et.nextElement(); if (C.find(s)==null&&(!s.startsWith("~")||C.find(s.substring(1))==null)) { throw new ConstructionException(Zirkel.name("exception.job")); } } Job=true; } break; } } else { throw new ConstructionException("Construction not found"); } } recompute(); C.translateOffsets(this); resetSum(); validate(); repaint(); } catch (final Exception e) { throw e; } reloadCD(); repaint(); // Give the magnet object list to the point // see PointConstructor.construct : Enumeration e=C.magnet.elements(); while (e.hasMoreElements()) { final PointObject p=(PointObject) e.nextElement(); p.setMagnetObjects((String) e.nextElement()); } // System.out.println("finished reading file"); } public void resetSum() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o instanceof ExpressionObject) { ((ExpressionObject) o).reset(); } } } public void warning(final String s, final String help) { final Warning w=new Warning(F, s, Zirkel.name("warning"), true, help); w.center(F); w.setVisible(true); } public void warning(final String s) { warning(s, ""); } public void load(final InputStream in) throws Exception { try { C.Loading=true; load(in, true, true); C.Loading=false; } catch (final Exception e) { C.Loading=false; throw e; } } public String getComment() { return C.getComment(); } public void setComment(final String s) { C.setComment(s); } public String getJobComment() { return C.getJobComment(); } public void setJobComment(final String s) { C.setJobComment(s); } /** * This can be used to set a frame window for the error dialogs that the * canvas my display. */ public void setFrame(final Frame f) { F=f; } public Frame getFrame() { return F; } /** * Maginify the view by the specified factor. */ public void magnify(final double f) { ZoomerTool.initNonDraggableObjects(C); C.setXYW(C.getX(), C.getY(), C.getW()*f); ZoomerTool.zoomNonDraggableObjectsBy(C, f); recompute(); validate(); repaint(); } /** * Shift the view with these deltas. */ public void shift(final double dx, final double dy) { ZoomerTool.initNonDraggableObjects(C); C.setXYW(C.getX()+dx*C.getW(), C.getY()+dy*C.getW(), C.getW()); ZoomerTool.shiftNonDraggableObjectsBy(C, dx*C.getW(), dy*C.getW()); recompute(); validate(); repaint(); } /** * Tracker routines: Call the OC (must be a TrackPainter) to paint the * object track. */ public void paintTrack(final MyGraphics g) { if (!(OC instanceof TrackPainter)) { return; } ((TrackPainter) OC).paint(g, this); } /** * Run through the construction to update all object texts. This should be * called, whenever the name of an item was changed. It will recreate only * those texts, which contain the old name. */ public void updateTexts(final ConstructionObject o, final String oldname) { C.updateTexts(o, oldname); } public Construction getConstruction() { return C; } public void setShowGrid(final boolean flag) { ShowGrid=flag; repaint(); } public void toggleShowGrid() { if (ShowGrid&&!AxesOnly) { AxesOnly=true; } else if (ShowGrid) { ShowGrid=false; } else { AxesOnly=false; ShowGrid=true; } Global.setParameter("showgrid", ShowGrid); Global.setParameter("axesonly", AxesOnly); repaint(); } public boolean showGrid() { return ShowGrid; } /** * Sets the job parameters for the current construction (the last item to * display and the target item). */ public void setJob(final ConstructionObject last) { Job=true; Last=last.getName(); Targets=new Vector(); } public void addJobTarget(final ConstructionObject target, final boolean visible) { if (visible) { Targets.addElement("~"+target.getName()); } else { Targets.addElement(target.getName()); } } public void clearTargets() { Targets=new Vector(); } /** * Cancel the job state o fthe current construction. */ public void clearJob() { Job=false; } /** * Test, if the construction is a valid job. */ public boolean isJob() { final Enumeration e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (C.find(s)==null&&(!s.startsWith("~")||C.find(s.substring(1))==null)) { return false; } } return Job&&C.find(Last)!=null&&Targets.size()>0; } public boolean inTargets(final String s) { final Enumeration e=Targets.elements(); while (e.hasMoreElements()) { if (((String) e.nextElement()).equals(s)) { return true; } } return false; } /** * * This will display the construction as a job (if it is a job). The * construction is copied up to the last element. The copies are marked as * keep objects, so that they cannot be changed. The last object is marked * as the target object, so that it displays in a special color. * * The function can also flip back to the original construction * (flag=false). */ public void displayJob(final boolean flag) { clearSelected(); if (!(OC instanceof SaveJob)) { OC.reset(this); } if (flag) // diplay the job { C.setOriginalOrder(true); if (displayJob()||!isJob()) { return; } final Construction Cnew=new Construction(); Cnew.setXYW(C.getX(), C.getY(), C.getW()); Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setJobTarget(true); o.setJobTarget(false); } e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); Cnew.add(o); o.setKeep(true); if (inTargets(o.getName())||inTargets("~"+o.getName())) { o.setJobTarget(true); } if (o.getName().equals(Last)) { break; } } while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (inTargets(o.getName())||inTargets("~"+o.getName())) { Cnew.add(o); o.setKeep(true); o.setJobTarget(true); } } int n=0; e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (!s.startsWith("~")) { n++; } } TargetO=new ConstructionObject[n]; TargetS=new ConstructionObject[n]; n=0; e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (!s.startsWith("~")) { TargetO[n]=Cnew.find(s); TargetS[n]=null; n++; } } COriginal=C; C=Cnew; C.addAddEventListener(this); C.setComment(COriginal.getJobComment()); recompute(); reloadCD(); repaint(); } else // display the orginal construction again { if (!displayJob()) { return; } C.removeAddEventListener(this); C=COriginal; COriginal=null; final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setKeep(false); o.setJobTarget(false); } C.setOriginalOrder(false); recompute(); reloadCD(); repaint(); } } /** * If the job is solved, this function removes all restrictions. */ public void freeJob() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setKeep(false); o.setJobTarget(false); repaint(); } } /** * Test if the canvas displays a job right now. */ public boolean displayJob() { return COriginal!=null; } // The following functions change the default values of some objects. public void setShowColor(final int i) { ShowColor=i; repaint(); } public int getShowColor() { return ShowColor; } public ObjectConstructor getOC() { return OC; } // Macros: Vector Macros=new Vector(); public Vector getMacros() { return Macros; } public boolean haveMacros() { return Macros.size()>0; } public boolean haveNonprotectedMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (!m.M.isProtected()) { return true; } } return false; } /** * Define a macro. There must be parameters (but not necessarily targets). * The function will display the macro dialog. It will create a new macro, * when the dialog was not aborted. The macro is kept in the Macros vector * by name. */ boolean defineMacro() { clearSelected(); // Read the list of Parameters and Targets from the // construction. This list is filled by the SetParameter and // SetTargets constructors. final Vector P=C.getParameters(); if (P.size()==0) // no parameters { warning(Zirkel.name("definemacro.noparams")); return false; } // Display the macro creation dialog to the user. final DefineMacro d=new DefineMacro(F, this); d.center(getFrame()); d.setVisible(true); // Aborted? if (d.isAborted()||d.getName().equals("")) { return false; } // Define a marco with the name, the comment and the paramters. final Macro m=new Macro(this, d.getName(), d.getComment(), d.getParams()); // If there are no targets, determine everything as // constructed by the paramaters, else only the things needed // to get the targets. try { defineMacro(C, m, d.targetsOnly(), d.invisible(), d.getPromptFor(), d.hideduplicates()); } catch (final ConstructionException e) { warning(e.getDescription()); OC.reset(this); return false; } storeMacro(m, false); OC.reset(this); return true; } /** * Copy a macro with fixed parameters from another macro. */ public Macro copyMacro(final Macro m, final String name, final boolean fixed[]) { try { final Macro macro=(Macro) (m.clone()); macro.Name=name; final boolean f[]=new boolean[fixed.length]; for (int i=0; i0&&!c.ShowAll, c.SuperHide, c.getPromptFor(), true); storeMacro(m, true); } /* * Store the macro in the macro list (or replace the old macro with the same * name * * @param all Replace the macro without asking. */ public void storeMacro(final Macro m, final boolean all) { int i=0; for (i=0; i=Macros.size()) { appendMacro(m); } } public boolean ProtectMacros=false; public MacroMenu MM=null; public void appendMacro(final Macro m) { if (!ReadOnly) { if (ProtectMacros) { m.setProtected(true); } if (MM==null) { MM=new MacroMenu(PM, "", null); } final MacroItem mi=MM.add(m, m.getName()); if (mi.I!=null) { mi.I.addActionListener(this); } Macros.addElement(mi); } else { if (MM==null) { MM=new MacroMenu(null, "", null); } final MacroItem mi=MM.add(m, m.getName()); if (mi.I!=null) { mi.I.addActionListener(this); } Macros.addElement(mi); } } /** * Replace the macro item number i with m. * * @return User wants to replace all subsequent macros. */ public boolean replaceMacro(final Macro m, final int i, final boolean all) { final MacroItem e=(MacroItem) Macros.elementAt(i); if (all) // don't ask { Macros.setElementAt(new MacroItem(m, e.I), i); return true; } else // ask { final ReplaceMacroQuestion d=new ReplaceMacroQuestion(getFrame(), m); d.center(getFrame()); d.setVisible(true); if (d.isNo()) { return false; } final MacroItem newitem=new MacroItem(m, e.I); MM.replace((MacroItem) Macros.elementAt(i), newitem); Macros.setElementAt(newitem, i); return d.isAll(); } } public String MacroCurrentComment; /** * The user has to choose from a list of macros (for running). */ public Macro chooseMacro() { if (Macros.size()==0) { warning(Zirkel.name("definemacro.nomacro")); return null; } final MacroSelectDialog d=new MacroSelectDialog(getFrame(), MM, false); d.setVisible(true); return d.getMacro(); } /** * The user can choose from a list of macros (for saving). * * @return A vector of selected Macros. */ public Vector chooseMacros() { if (Macros.size()==0) { warning(Zirkel.name("definemacro.nomacro")); return null; } final MacroSelectDialog d=new MacroSelectDialog(getFrame(), MM, true); d.setVisible(true); return d.getMacros(); } /** * Run a macro by name. */ public Macro chooseMacro(final String name) { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final Macro m=((MacroItem) e.nextElement()).M; if (m.getName().equals(name)) { return m; } } return null; } public void deleteMacros(final Vector v) { final Enumeration e=v.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); deleteMacro(m); } } public void deleteMacro(final MacroItem m) { Macros.removeElement(m); if (m.I!=null) { m.I.removeActionListener(this); MM.remove(m); } } public void clearMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.I!=null) { m.I.removeActionListener(this); MM.remove(m); } } Macros.removeAllElements(); } public void clearNonprotectedMacros() { final Vector V=new Vector(); final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (!m.M.isProtected()) { V.addElement(m); } } deleteMacros(V); } public void clearProtectedMacros() { final Vector V=new Vector(); final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.M.isProtected()) { V.addElement(m); } } deleteMacros(V); } public void protectMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); m.M.setProtected(true); } } public void renameMacro(final Macro macro, final String name) { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.I!=null&&m.M==macro) { deleteMacro(m); break; } } macro.setName(name); appendMacro(macro); } MacroBar MBar; public void setMacroBar(final MacroBar m) { MBar=m; } public void updateMacroBar() { // if (MBar!=null) { // MBar.update(Macros); // } } // For the prompt in the status line: TextField TF; public void setTextField(final TextField t) { TF=t; } public void setPrompt(final String s) { if (TF!=null) { TF.setText(s); } } // Loading: public void loadRun(final InputStream is) { final BufferedReader in=new BufferedReader(new InputStreamReader(is)); String s="", comment=""; while (true) { try { s=in.readLine(); if (s==null) { break; } int n; if ((n=s.indexOf("//"))>=0) { comment=s.substring(n+2).trim(); s=s.substring(0, n); } else { comment=""; } s=s.trim(); int k=0; if ((k=Interpreter.startTest("macro", s))>=0) { loadMacro(in, s.substring(k).trim()); } else if (!s.equals("")) { C.interpret(this, s, comment); } } catch (final ConstructionException e) { warning(e.getDescription()+" --- "+s); break; } catch (final Exception e) { warning(e.toString()+" --- "+s); e.printStackTrace(); break; } } C.updateCircleDep(); } public void loadMacro(final BufferedReader in, final String name) throws ConstructionException { final Construction c=new Construction(); c.clear(); String s="", comment="", macrocomment=""; boolean inComment=true, newLine=true; while (true) { try { s=in.readLine(); if (s==null) { throw new ConstructionException(Zirkel.name("exception.macroend")); } s=s.trim(); final int n=s.indexOf("//"); if (inComment&&n==0) { final String h=s.substring(n+2).trim(); if (newLine) { macrocomment=macrocomment+h; newLine=false; } else { if (h.equals("")) { macrocomment=macrocomment+"\n"; newLine=true; } else { macrocomment=macrocomment+" "+h; newLine=false; } } continue; } inComment=false; if (n>=0) { comment=s.substring(n+2).trim(); s=s.substring(0, n); } else { comment=""; } s=s.trim(); if (s.equals(Zirkel.name("end"))) { break; } if (s.toLowerCase().equals("end")) { break; } if (!s.equals("")) { c.interpret(this, s, comment); } } catch (final InvalidException e) { } catch (final ConstructionException e) { throw new ConstructionException(e.getDescription()+" --- "+s); } catch (final IOException e) { warning(e.toString()); return; } } defineMacro(name, macrocomment, c); } public double getGridSize() { double gridsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; if (C.getW()*2/gridsize>=30) { gridsize*=5; } if (C.getW()*2/gridsize<10) { gridsize/=2; } return gridsize; } public LatexOutput createBB(final String filename, final int w, final int h, final double dpi) { try { String path=""; if (Global.getParameter("options.fullpath", true)) { path=FileName.pathAndSeparator(filename); } PrintWriter out=new PrintWriter(new FileOutputStream(path+FileName.purefilename(filename)+".bb")); out.println("%%BoundingBox: 0 0 "+w+" "+h); out.close(); out=new PrintWriter(new FileOutputStream(path+FileName.purefilename(filename)+".ztx")); final LatexOutput lout=new LatexOutput(out); lout.open(w, h, dpi, path+FileName.filename(filename)); return lout; } catch (final Exception e) { warning(e.toString()); } return null; } /** * Save picture as PNG on file or copy to clipboard * * @param filename * ("" for clipboard) * @return not failed */ synchronized public boolean savePNG(final String filename, final boolean latex) { LatexOutput lout=null; if (IW==0||I==null) { return false; } if (Global.getParameter("printscale.middle", true)) { savePreviewAsPNG(filename); return true; } double dpi=Global.getParameter("printscale.dpi", 300); if (!Global.getParameter("printscale.sizes", false)) { final int w=Global.getParameter("printscale.w", IW); final int h=Global.getParameter("printscale.h", IH); if (latex) { lout=createBB(filename, w, h, dpi); } final int IWold=IW; IW=w; IH=h; Scale=((double) IW)/IWold; I=createImage(IW, IH); IG=new MyGraphics13(I.getGraphics(), Scale, this, lout); IG.setSize(w, h); double pointsize=PointSize*Scale; double fontsize=FontSize*Scale; if (Scale<1) { if (Global.getParameter("options.minpointsize", false)&&pointsize. */ package rene.zirkel; import java.applet.AppletContext; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Frame; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.Image; import java.awt.Label; import java.awt.MediaTracker; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.URL; import java.util.Enumeration; import java.util.Locale; import java.util.StringTokenizer; import java.util.logging.Level; import java.util.logging.Logger; import java.util.zip.GZIPInputStream; import javax.swing.JPanel; import rene.dialogs.Warning; import rene.gui.DoActionListener; import rene.gui.Global; import rene.gui.HistoryTextField; import rene.gui.IconBar; import rene.gui.IconBarListener; import rene.gui.Panel3D; import rene.util.FileName; import rene.util.parser.StringParser; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.constructors.AngleConstructor; import rene.zirkel.constructors.AreaConstructor; import rene.zirkel.constructors.BoundedPointConstructor; import rene.zirkel.constructors.Circle3Constructor; import rene.zirkel.constructors.CircleConstructor; import rene.zirkel.constructors.ExpressionConstructor; import rene.zirkel.constructors.ImageConstructor; import rene.zirkel.constructors.IntersectionConstructor; import rene.zirkel.constructors.LineConstructor; import rene.zirkel.constructors.MidpointConstructor; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.constructors.ParallelConstructor; import rene.zirkel.constructors.PlumbConstructor; import rene.zirkel.constructors.PointConstructor; import rene.zirkel.constructors.QuadricConstructor; import rene.zirkel.constructors.RayConstructor; import rene.zirkel.constructors.SegmentConstructor; import rene.zirkel.constructors.TextConstructor; import rene.zirkel.dialogs.CommentDialog; import rene.zirkel.dialogs.Replay; import rene.zirkel.listener.DoneListener; import rene.zirkel.listener.StatusListener; import rene.zirkel.macro.Macro; import rene.zirkel.macro.MacroBar; import rene.zirkel.macro.MacroItem; import rene.zirkel.macro.MacroRunner; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.SegmentObject; import rene.zirkel.objects.TextObject; import rene.zirkel.tools.AnimatorTool; import rene.zirkel.tools.BreakpointAnimator; import rene.zirkel.tools.DeleteTool; import rene.zirkel.tools.DrawerTool; import rene.zirkel.tools.EditTool; import rene.zirkel.tools.HiderTool; import rene.zirkel.tools.MoverTool; import rene.zirkel.tools.ObjectTracker; import rene.zirkel.tools.RenamerTool; import rene.zirkel.tools.ReorderTool; import rene.zirkel.tools.SaveJob; import rene.zirkel.tools.SetParameterTool; import rene.zirkel.tools.SetTargetsTool; import rene.zirkel.tools.Tracker; import rene.zirkel.tools.ZoomerTool; import eric.JLocusObjectTracker; import java.io.FileOutputStream; import java.io.OutputStream; import rene.util.xml.XmlWriter; public class ZirkelApplet extends javax.swing.JApplet implements IconBarListener, StatusListener, KeyListener, DoneListener, DoActionListener, ZirkelCanvasInterface { /** * */ private static final long serialVersionUID=1L; ZirkelCanvas ZC; IconBar IA, IB, IC; MacroBar IM; String filename="test.zir"; Label Status; Color C, CC; Frame F; String FirstConstructor="point", Tools="all", Options=""; int CurrentTool=0; HistoryTextField Input; ConstructionObject Last=null; boolean edit; boolean jumptostart; // for applets with replay buttons and start() public String JScontrol() { String exp=""; try { exp=String.valueOf(ZC.getConstruction().find("jscode").getValue()); } catch (final Exception ex) { } return exp; } public void JSsend(final String s) { // if it's a construction under xml form : if (s.startsWith("<")) { putConstruction(s); } else { ZC.JSsend(s); repaint(); } } public String JSreceive(final String s) { if (s.equals("construction")) { return getConstruction(); } else { return ZC.JSreceive(s); } } @Override public void paint(final Graphics gc) { super.paint(gc); // ZC.recompute(); ZC.JCM.readXmlTags(); ZC.dovalidate(); ZC.repaint(); } final static public String DefaultIcons=" point line segment ray circle fixedcircle"+" parallel plumb circle3 midpoint angle fixedangle"+" move tracker objecttracker hide expression area text quadric"+" runmacro animate "; final static public String DefaultOptions=" back undo delete color type thickness"+" hidden showcolor macro grid "+" draw twolines indicate "; @Override public void init() { if (getParameter("language")!=null) { try { Locale.setDefault(new Locale(getParameter("language"), "")); } catch (final RuntimeException e) { } } Global.initBundle("rene/zirkel/docs/ZirkelProperties"); Count.resetAll(); CC=C=Global.Background; initLightColors(); initObjectKeys(); final Dimension dscreen=getToolkit().getScreenSize(); F=new Frame(); F.setSize(dscreen); if (getParameter("oldicons")==null) { Global.setParameter("iconpath", "/eric/icons/palette/"); Global.setParameter("iconsize", getParameter("smallicons")==null?32:24); Global.setParameter("icontype", "png"); } else { Global.setParameter("iconpath", "//eric/icons/palette/"); Global.setParameter("iconsize", 20); } String color=getParameter("color"); if (color!=null) { final StringParser p=new StringParser(getParameter("color")); p.replace(',', ' '); int red, green, blue; red=p.parseint(); green=p.parseint(); blue=p.parseint(); C=new Color(red, green, blue); Global.Background=C; Global.ControlBackground=C; CC=C; } color=getParameter("colorbackground"); if (color!=null) { Global.setParameter("colorbackground", color); } else { Global.removeParameter("colorbackground"); } color=getParameter("colorselect"); if (color!=null) { Global.setParameter("colorselect", color); } else { Global.removeParameter("colorselect"); } ZirkelFrame.SelectColor=Global.getParameter("colorselect", Color.red); color=getParameter("colortarget"); if (color!=null) { Global.setParameter("colortarget", color); } else { Global.removeParameter("colortarget"); } ZirkelFrame.TargetColor=Global.getParameter("colorselect", Color.pink); ZirkelFrame.initLightColors(Color.white); final String font=getParameter("font"); if (font!=null) { if (font.indexOf("bold")>=0) { Global.setParameter("font.bold", true); } if (font.indexOf("large")>=0) { Global.setParameter("font.large", true); } } if (getParameter("demo")!=null) { initDemo(); return; } String style=getParameter("style"); // On firefox mac, I don't know why, but getParameter("style") return // null // even if there is a "style" parameter tag... so : if (style==null) { if ((getParameter("tools")!=null)||(getParameter("options")!=null)) { style="icons"; } else { style="plain"; } } final boolean simple=(style.equals("plain")||style.equals("3D")||style.equals("breaks")); edit=!simple; final boolean status=(style.equals("full")||style.equals("status")); final boolean icons=(style.equals("full")||style.equals("nonvisual")||style.equals("icons")); final boolean breaks=(style.equals("breaks")); if (getParameter("edit")!=null) { edit=true; } for (int i=0; i=0); // makeMacroBar(); if (icons) { IB=new IconBar(F); IB.setBackground(CC); IB.setIconBarListener(this); StringTokenizer t=new StringTokenizer(Tools); int count=0; while (t.hasMoreTokens()) { t.nextToken(); count++; } final String a[]=new String[count]; t=new StringTokenizer(Tools); count=0; while (t.hasMoreTokens()) { a[count++]=t.nextToken(); } if (count>0) { FirstConstructor=a[0]; } IB.addToggleGroupLeft(a); // IB.addSeparatorLeft(); if (Options.indexOf("twolines")>=0||Options.indexOf("defaults")>=0) { IA=new IconBar(F); IA.setBackground(CC); IA.setIconBarListener(this); setIA(IA, Options); final JPanel north=new JPanel(); north.setBackground(CC); north.setLayout(new GridLayout(0, 1)); north.add(IA); north.add(IB); if (IM!=null) { north.add(IM); } getContentPane().add("North", new Panel3D(north, CC)); } else { IA=IB; setIA(IB, Options); if (IM!=null) { final JPanel north=new JPanel(); north.setBackground(CC); north.setLayout(new GridLayout(0, 1)); north.add(IA); if (IM!=null) { north.add(IM); } getContentPane().add("North", new Panel3D(north, CC)); } else { getContentPane().add("North", new Panel3D(IB, CC)); } } } else { IA=IB=null; } rene.zirkel.Zirkel.IsApplet=true; Global.setParameter("options.choice", true); Global.setParameter("options.indicate", true); Global.setParameter("options.indicate.simple", false); Global.setParameter("options.intersection", false); Global.setParameter("options.pointon", false); eric.JMacrosTools.initObjectsProperties(); if (getParameter("selectionsize")!=null) { try { final double x=new Double(getParameter("selectionsize")).doubleValue(); Global.setParameter("selectionsize", x); } catch (final Exception e) { } } ZC=new ZirkelCanvas(!edit, !breaks, !breaks); ZC.addMouseListener(ZC); ZC.addMouseMotionListener(ZC); ZC.setBackground(Global.getParameter("colorbackground", C)); ZC.setFrame(F); ZC.setZirkelCanvasListener(this); if (getParameter("showhidden")!=null) { ZC.setShowHidden(true); } if (style.equals("plain")) { getContentPane().add("Center", ZC); } else { getContentPane().add("Center", new Panel3D(ZC, ZC.getBackground())); } ZC.addStatusListener(this); ZC.addKeyListener(this); setShowNames(false); if (status) { Status=new Label(""); Status.setBackground(CC); getContentPane().add("South", new Panel3D(Status, Status.getBackground())); } else if (style.equals("nonvisual")) { Input=new HistoryTextField(this, "Input"); ZC.setTextField(Input); ZC.Visual=false; setShowNames(true); getContentPane().add("South", new Panel3D(Input)); } try { Global.setParameter("digits.edit", Integer.parseInt(getParameter("editdigits"))); } catch (final Exception e) { } try { Global.setParameter("digits.lengths", Integer.parseInt(getParameter("displaydigits"))); } catch (final Exception e) { } try { Global.setParameter("digits.angles", Integer.parseInt(getParameter("angledigits"))); } catch (final Exception e) { } setOption("movename"); setOption("movefixname"); ZC.updateDigits(); setOption("nopopupmenu"); setOption("nomousezoom"); try { Global.setParameter("minpointsize", new Double( getParameter("minpointsize")).doubleValue()); } catch (final Exception e) { } try { Global.setParameter("minlinesize", new Double( getParameter("minlinesize")).doubleValue()); } catch (final Exception e) { } try { Global.setParameter("minfontsize", new Double( getParameter("minfontsize")).doubleValue()); } catch (final Exception e) { } try { Global.setParameter("arrowsize", new Double( getParameter("arrowsize")).doubleValue()); } catch (final Exception e) { } try { final String grid=getParameter("grid"); ZC.ShowGrid=!grid.equals("none"); Global.setParameter("grid.fine", grid.equals("coordinates")); if (getParameter("snap").equals("left")) { Global.setParameter("grid.leftsnap", true); } } catch (final Exception e) { } if (getParameter("interactive")!=null&&getParameter("interactive").equals("false")) { ZC.setInteractive(false); } boolean job=false; ZC.IW=getSize().width; ZC.IH=getSize().height; if (getParameter("germanpoints")!=null&&getParameter("germanpoints").equals("true")) { Global.setParameter("options.germanpoints", true); } try { final InputStream o=getClass().getResourceAsStream("/builtin.mcr"); ZC.ProtectMacros=true; ZC.load(o, false, true); ZC.ProtectMacros=false; o.close(); ZC.PM.removeAll(); } catch (final Exception e) { } filename=getParameter("file"); if (filename==null) { filename=getParameter("job"); job=true; } if (filename!=null) { boolean firsttry=true; while (true) { try { URL url; if (filename.toUpperCase().startsWith("HTTP")) { url=new URL(firsttry?FileName.toURL(filename) :filename); } else { url=new URL(getCodeBase(), firsttry?FileName.toURL(filename):filename); } ZC.clear(); InputStream in=url.openStream(); if (ZirkelFrame.isCompressed(filename)) { in=new GZIPInputStream(in); } showStatus(Global.name("loading")); ZC.load(in); toggleGrid(ZC.ShowGrid); if (job) { ZC.displayJob(true); ZC.setDoneListener(this); } if (icons) { iconPressed(FirstConstructor); } in.close(); if (getParameter("background")!=null) { final Image i=getToolkit().getImage( new URL(getCodeBase(), getParameter("background"))); final MediaTracker mt=new MediaTracker(this); mt.addImage(i, 0); mt.waitForID(0); if (mt.checkID(0)&&!mt.isErrorAny()) { ZC.setBackground(i); } } ZC.repaint(); } catch (final Exception e) { if (firsttry) { firsttry=false; continue; } final Warning w=new Warning(F, FileName.chop(32, ""+e, 64), Zirkel.name("message"), true); w.center(F); w.setVisible(true); showStatus(""+e); e.printStackTrace(); System.out.println(e); } break; } } if (breaks) { IC=new IconBar(F); IC.setBackground(CC); IC.setIconBarListener(this); IC.addLeft("allback"); if (haveBreaks()) { IC.addLeft("nextbreak"); } else { IC.addLeft("oneforward"); } IC.addLeft("allforward"); final javax.swing.JPanel pic=new Panel3D(IC); getContentPane().add("South", pic); IC.setEnabled("nextbreak", false); IC.setEnabled("oneforward", false); IC.setEnabled("allforward", false); ZC.getConstruction().setOriginalOrder(true); jumptostart=(getParameter("jumptostart")!=null); } if (getParameter("restrictedmove")!=null) { Global.setParameter("restrictedmove", true); } if (getParameter("noconfirmation")!=null) { Global.setParameter("confirmation", false); } if (IA!=null) { settype(2); } // IB.forceRepaint(); // IA.forceRepaint(); ZC.setMacroBar(IM); ZC.updateMacroBar(); ZC.recompute(); // Very weird thing which cause applet to be displayed on firefox mac : ZC.setSize(ZC.getSize().width+1, ZC.getSize().height+1); ZC.setSize(ZC.getSize().width-1, ZC.getSize().height-1); ZC.JCM.hideHandles(null); // ZC.dovalidate(); // ZC.repaint(); } public void setOption(final String option) { try { Global.setParameter("options."+option, getParameter(option).equals("true")); } catch (final Exception e) { } } DemoRunner DR=null; void initDemo() { getContentPane().setLayout(new BorderLayout()); ZC=new ZirkelCanvas(false, false, false); ZC.setBackground(Global.getParameter("colorbackground", C)); ZC.setFrame(F); ZC.setZirkelCanvasListener(this); if (getParameter("showhidden")!=null) { ZC.setShowHidden(true); } getContentPane().add("Center", new Panel3D(ZC, ZC.getBackground())); Status=new Label("", Label.CENTER); Status.setBackground(C); getContentPane().add("South", new Panel3D(Status, Status.getBackground())); } void setIA(final IconBar IA, final String set) { if (set.indexOf("rename")>=0) { IA.addToggleLeft("rename"); } if (set.indexOf("back")>=0) { IA.addLeft("back"); } if (set.indexOf("delete")>=0) { IA.addToggleLeft("delete"); } if (set.indexOf("undo")>=0) { IA.addLeft("undo"); } if (set.indexOf("hidden")>=0) { IA.addOnOffLeft("hidden"); } if (set.indexOf("showcolor")>=0) { IA.addMultipleIconLeft("showcolor", ZirkelFrame.Colors.length); } if (set.indexOf("color")>=0) { IA.addMultipleIconLeft("color", 6); } if (set.indexOf("type")>=0) { IA.addMultipleIconLeft("type", 6); } if (set.indexOf("thickness")>=0) { IA.addMultipleIconLeft("thickness", 3); } if (set.indexOf("partial")>=0) { IA.addOnOffLeft("partial"); } if (set.indexOf("plines")>=0) { IA.addOnOffLeft("plines"); } if (set.indexOf("arrow")>=0) { IA.addOnOffLeft("arrow"); } if (set.indexOf("showname")>=0) { IA.addOnOffLeft("showname"); } if (set.indexOf("showvalue")>=0) { IA.addOnOffLeft("showvalue"); } if (set.indexOf("edit")>=0) { IA.addToggleLeft("edit"); } if (set.indexOf("obtuse")>=0) { IA.addOnOffLeft("obtuse"); } if (set.indexOf("solid")>=0) { IA.addOnOffLeft("solid"); } if (set.indexOf("grid")>=0) { IA.addOnOffLeft("grid"); } if (set.indexOf("macro")>=0) { IA.addMultipleToggleIconLeft("macro", 3); } if (set.indexOf("replay")>=0) { IA.addLeft("replay"); } if (set.indexOf("zoom")>=0) { IA.addToggleLeft("zoom"); } if (set.indexOf("comment")>=0) { IA.addLeft("comment"); } if (set.indexOf("function")>=0) { IA.addLeft("function"); } if (set.indexOf("draw")>=0) { IA.addToggleLeft("draw"); } } public void makeMacroBar() { if (Global.getParameter("macrobar", true)) { IM=new MacroBar(F); IM.addKeyListener(this); IM.setIconBarListener(this); IM.setBackground(CC); } } public void updateMacroBar() { ZC.updateMacroBar(); } Replay RD=null; public void iconPressed(final String o) { if (RD!=null) { RD.doclose(); } ZC.requestFocus(); if (IA!=null&&IA.isControlPressed()) { if (o.equals("edit")) { if (CurrentTool!=ZirkelFrame.NEdit) { IA.setState("edit", false); } ZC.editLast(); ZC.repaint(); } IA.clearShiftControl(); return; } for (int i=0; i=0) { setcolor(n); } } else if (o.equals("showcolor")) { final int n=IA.getMultipleState("showcolor"); if (n>=0) { showcolor(n); } } else if (o.equals("showname")) { setShowNames(IA.getState("showname")); } else if (o.equals("obtuse")) { setObtuse(IA.getState("obtuse")); } else if (o.equals("solid")) { setSolid(IA.getState("solid")); } else if (o.equals("showvalue")) { setShowValues(IA.getState("showvalue")); } else if (o.equals("longnames")) { setLongNames(IA.getState("longnames")); } else if (o.equals("grid")) { toggleGrid(IA.getState("grid")); } else if (o.equals("comment")) { showcomment(); } else if (o.equals("function")) { if (IA.isControlPressed()) { ZC.createFunction(); } else { ZC.createCurve(); } } else if (o.equals("type")) { final int n=IA.getMultipleState("type"); if (n>=0) { settype(n); } } else if (o.equals("thickness")) { final int n=IA.getMultipleState("thickness"); if (n>=0) { setcolortype(n); } } else if (o.equals("edit")) { settool(ZirkelFrame.NEdit); } else if (o.equals("back")) { ZC.back(); ZC.repaint(); } else if (o.equals("undo")) { ZC.undo(); ZC.repaint(); } else if (o.equals("replay")) { replay(); } else if (o.equals("macro")) { final int n=IA.getMultipleState("macro"); switch (n) { case 1: settool(ZirkelFrame.NParameters); break; case 2: settool(ZirkelFrame.NTargets); break; case 0: definemacro(); break; } IA.setState("macro", true); } else if (o.equals("allback")) { if (Last!=null&&Last instanceof TextObject) { ((TextObject) Last).setDoShow(false); } final Enumeration e=ZC.getConstruction().elements(); if (e.hasMoreElements()) { Last=(ConstructionObject) e.nextElement(); ZC.paintUntil(Last); if ((Last instanceof TextObject)&&Last.valid()&&!Last.isSuperHidden()) { ((TextObject) Last).setDoShow(true); } } IC.setEnabled("allforward", true); IC.setEnabled("nextbreak", true); IC.setEnabled("oneforward", true); IC.setEnabled("allback", false); if (haveBreaks()&&!Last.isBreak()) { iconPressed("nextbreak"); } } else if (o.equals("allforward")) { if (Last!=null&&Last instanceof TextObject) { ((TextObject) Last).setDoShow(false); } ZC.paintUntil(null); Last=null; IC.setEnabled("allforward", false); IC.setEnabled("nextbreak", false); IC.setEnabled("oneforward", false); IC.setEnabled("allback", true); } else if (o.equals("nextbreak")) { if (Last!=null&&Last instanceof TextObject) { ((TextObject) Last).setDoShow(false); } final Enumeration e=ZC.getConstruction().elements(); outer: while (e.hasMoreElements()) { final ConstructionObject next=(ConstructionObject) e.nextElement(); if (next==Last) { while (e.hasMoreElements()) { Last=(ConstructionObject) e.nextElement(); if (Last==null||Last.isBreak()) { break outer; } } } } IC.setEnabled("allback", true); if ((Last instanceof TextObject)&&Last.valid()&&!Last.isSuperHidden()) { ((TextObject) Last).setDoShow(true); } ZC.paintUntil(Last); IC.setEnabled("allback", true); IC.setEnabled("nextbreak", e.hasMoreElements()); IC.setEnabled("allforward", e.hasMoreElements()); } else if (o.equals("oneforward")) { if (Last!=null&&Last instanceof TextObject) { ((TextObject) Last).setDoShow(false); } final Enumeration e=ZC.getConstruction().elements(); outer: while (e.hasMoreElements()) { final ConstructionObject next=(ConstructionObject) e.nextElement(); if (next==Last) { while (e.hasMoreElements()) { Last=(ConstructionObject) e.nextElement(); if (Last==null||!Last.isHidden()) { break outer; } if ((Last instanceof TextObject)&&Last.valid()&&!Last.isSuperHidden()) { ((TextObject) Last).setDoShow(true); break outer; } } } } IC.setEnabled("allback", true); ZC.paintUntil(Last); if (!e.hasMoreElements()) { ZC.paintUntil(null); IC.setEnabled("allforward", false); IC.setEnabled("oneforward", false); IC.setEnabled("allback", true); } } else if (o.startsWith("bi_")) { eric.JGlobals.runmacro(ZC, this, "@builtin@/"+o.substring(3)); } IA.clearShiftControl(); IB.clearShiftControl(); } public ObjectConstructor ObjectConstructors[]= // constructors {new PointConstructor(), new BoundedPointConstructor(), new IntersectionConstructor(), new LineConstructor(), new RayConstructor(), new SegmentConstructor(), new SegmentConstructor(true), new CircleConstructor(), new Circle3Constructor(), new CircleConstructor(true), new ParallelConstructor(), new PlumbConstructor(), new MidpointConstructor(), new AngleConstructor(), new AngleConstructor(true), new MoverTool(), new Tracker(), new ObjectTracker(), new AnimatorTool(), new ExpressionConstructor(), new AreaConstructor(), new QuadricConstructor(), new ImageConstructor(), new TextConstructor(), new HiderTool(), new JLocusObjectTracker(), new MacroRunner(), new EditTool(), new SetParameterTool(), new SetTargetsTool(), new SaveJob(), new DeleteTool(), new ReorderTool(), new DrawerTool(), new RenamerTool(), new ZoomerTool(), new BreakpointAnimator() }; public void settool(final int i) { if (IM!=null) { IM.deselectAll(); } ZC.setTool(ObjectConstructors[i]); CurrentTool=i; if (i0) { for (i=0; i0) { for (i=0; i0) { for (i=0; i0) { for (i=0; i=0) { settool(i); } return; } } switch (c) { case KeyEvent.VK_BACK_SPACE: ZC.undo(); ZC.repaint(); return; case '+': ZC.magnify(1/Math.sqrt(Math.sqrt(2))); break; case '-': ZC.magnify(Math.sqrt(Math.sqrt(2))); break; } } public void initLightColors() { final int n=ZirkelFrame.Colors.length; ZirkelFrame.LightColors=new Color[n]; final Color back=C; final int red=back.getRed(), green=back.getGreen(), blue=back.getBlue(); final double lambda=0.4; for (int i=0; i0) { ZirkelFrame.ObjectKeys[i]=shortcut.charAt(0); } } } public void notifyDone() { repaint(); try { Thread.sleep(500); } catch (final Exception e) { } if (Global.getParameter("confirmation", true)) { final Warning w=new Warning(F, Zirkel.name("done"), Zirkel.name("message"), true); w.center(F); w.setVisible(true); } final String sol=getParameter("solution"); if (sol!=null) { try { final AppletContext ac=getAppletContext(); ac.showDocument(new URL(getCodeBase(), FileName.toURL(sol))); } catch (final Exception e) { System.out.println(e); e.printStackTrace(); } } } public void showcolor(final int c) { ZC.setShowColor(c); } public void showcomment() { if (F==null) { return; } final CommentDialog d=new CommentDialog(F, ZC.getComment(), Zirkel.name("comment.title"), ZC.displayJob()); ZC.setComment(d.getText()); } public void showconstruction() { if (F==null) { return; } } public void toggleGrid() { ZC.toggleShowGrid(); } void definemacro() { if (!ZC.defineMacro()) { return; } if (ZC.getOC() instanceof SetTargetsTool) { settool(ZirkelFrame.NParameters); } else { ZC.getOC().reset(ZC); } } String OldMacro=null; public void runmacro(final boolean shift) { Macro m=null; if (OldMacro==null&&ZC.getMacros().size()==1) { m=((MacroItem) ZC.getMacros().elementAt(0)).M; } else { m=ZC.chooseMacro(OldMacro); if (!shift||m==null) { m=ZC.chooseMacro(); } } if (m==null) { settool(CurrentTool); return; } runMacro(m); } public void runMacro(final Macro m) { ((MacroRunner) ObjectConstructors[ZirkelFrame.NMacro]).setMacro(m, ZC); settool(ZirkelFrame.NMacro); if (IM!=null) { IM.select(m); } IB.setMultipleState("macro", 0); OldMacro=m.getName(); } public void setShowNames(final boolean flag) { if (IA!=null) { IA.setState("showname", flag); } Global.setParameter("options.point.shownames", flag); ZC.setShowNames(flag); } public void setObtuse(final boolean flag) { IA.setState("obtuse", flag); Global.setParameter("options.obtuse", flag); ZC.setObtuse(flag); } public void setSolid(final boolean flag) { IA.setState("solid", flag); Global.setParameter("options.solid", flag); ZC.setSolid(flag); } public void setShowValues(final boolean flag) { IA.setState("showvalue", flag); Global.setParameter("options.showvalue", flag); ZC.setShowValues(flag); } public void setLongNames(final boolean flag) { IA.setState("longnames", flag); Global.setParameter("options.longnames", flag); ZC.setLongNames(flag); } public void toggleGrid(final boolean grid) { ZC.setShowGrid(grid); if (IA!=null) { IA.setState("grid", grid); } } public void loadsettings() { setcolor(ZC.getDefaultColor()); settype(ZC.getDefaultType()); setcolortype(ZC.getDefaultColorType()); IA.setState("partial", ZC.getPartial()); IA.setState("plines", ZC.getPartialLines()); IA.setState("arrow", ZC.getVectors()); ZC.setHidden(false); } public void doAction(final String o) { if (o.equals("Input")) { try { ZC.getConstruction().interpret(ZC, Input.getText(), ""); Input.remember(); Input.setText(""); loadsettings(); ZC.validate(); ZC.getConstruction().updateCircleDep(); } catch (final ConstructionException e) { ZC.warning(e.getDescription()); } } } public void itemAction(final String o, final boolean flag) { } AnimatorTool A=null; @Override public void start() { if (getParameter("demo")!=null) { DR=new DemoRunner(ZC, this, getParameter("demo"), Status); return; } final Construction C=ZC.getConstruction(); ZC.paint(ZC.getGraphics()); ZC.allowRightMouse(true); if (C.TrackP!=null) { try { final ConstructionObject P=C.find(C.TrackP); if (!((P instanceof PointObject)||(P instanceof PrimitiveLineObject))) { throw new ConstructionException(""); } final ConstructionObject po[]=new ConstructionObject[C.TrackPO.size()]; for (int i=0; i=0) { return true; } return Tools.indexOf(function)>=0; } public boolean haveBreaks() { final Enumeration e=ZC.getConstruction().elements(); while (e.hasMoreElements()) { if (((ConstructionObject) e.nextElement()).isBreak()) { return true; } } return false; } public String loadImage() { return null; } public Image doLoadImage(final String filename) { Image i; try { i=getToolkit().getImage(new URL(getCodeBase(), filename)); final MediaTracker mt=new MediaTracker(this); mt.addImage(i, 0); mt.waitForID(0); if (mt.checkID(0)&&!mt.isErrorAny()) { return i; } } catch (final Exception e) { showStatus(e.toString()); } return null; } /** * For external scripting: Interprets a command s using the internal * construction language. (Expl: "A=point()") * * @param s * @return Command executed or not */ public boolean interpret(final String s) { try { ZC.getConstruction().interpret(ZC, s); ZC.repaint(); return true; } catch (final ConstructionException e) { return false; } } /** * For external scripting: Gets the construction as an XML stream contained * in a string. * * @return Construction. */ public String getConstruction() { try { final ByteArrayOutputStream out=new ByteArrayOutputStream(); ZC.save(out, true, false, false, ZC.getMacros(), ""); return out.toString("utf-8"); } catch (Exception ex) { return "Error"; } } /** * For external scripting: Receives the construction as an XML stream, * contained in a string. * * @param s * @return Success */ public boolean putConstruction(final String s) { try { final ByteArrayOutputStream bout=new ByteArrayOutputStream(); final PrintWriter out=new PrintWriter(new OutputStreamWriter( bout, "utf-8")); out.print(s); out.close(); final byte b[]=bout.toByteArray(); final InputStream in=new ByteArrayInputStream(b); ZC.load(in, true, true); return true; } catch (final Exception e) { e.printStackTrace(); return false; } } } ./src/rene/zirkel/CVS/RevisionCache/ZirkelCanvas.java#1.90000644000175000017500000047123311147546664021730 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel; // file: ZirkelCanvas.java import java.awt.CheckboxMenuItem; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.TextField; import java.awt.datatransfer.Clipboard; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.Enumeration; import java.util.Vector; import java.util.zip.GZIPOutputStream; import rene.dialogs.Warning; import rene.gui.Global; import rene.gui.MyCheckboxMenuItem; import rene.gui.MyMenuItem; import rene.util.FileName; import rene.util.ImageSelection; import rene.util.MyVector; import rene.util.PngEncoder; import rene.util.sort.Sorter; import rene.util.xml.XmlReader; import rene.util.xml.XmlTag; import rene.util.xml.XmlTagPI; import rene.util.xml.XmlTree; import rene.util.xml.XmlWriter; import rene.zirkel.construction.ChangedListener; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionDisplayPanel; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.construction.Interpreter; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.IntersectionConstructor; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.dialogs.AgainQuestion; import rene.zirkel.dialogs.DefineMacro; import rene.zirkel.dialogs.MessageWindow; import rene.zirkel.dialogs.ReplaceMacroQuestion; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.Drawing; import rene.zirkel.graphics.LatexOutput; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.graphics.MyGraphicsEPS; import rene.zirkel.graphics.MyGraphicsFig; import rene.zirkel.graphics.MyGraphicsPDF; import rene.zirkel.graphics.MyGraphicsSvg; import rene.zirkel.graphics.PolygonDrawer; import rene.zirkel.graphics.TrackPainter; import rene.zirkel.listener.AddEventListener; import rene.zirkel.listener.DoneListener; import rene.zirkel.listener.StatusListener; import rene.zirkel.macro.Macro; import rene.zirkel.macro.MacroBar; import rene.zirkel.macro.MacroItem; import rene.zirkel.macro.MacroMenu; import rene.zirkel.macro.MacroRunner; import rene.zirkel.macro.MacroSelectDialog; import rene.zirkel.objects.AngleObject; import rene.zirkel.objects.AreaObject; import rene.zirkel.objects.AxisObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.EquationXYObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.FixedAngleObject; import rene.zirkel.objects.FixedCircleObject; import rene.zirkel.objects.FunctionObject; import rene.zirkel.objects.IntersectionObject; import rene.zirkel.objects.MoveableObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PointonObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.QuadricObject; import rene.zirkel.objects.RayObject; import rene.zirkel.objects.SegmentObject; import rene.zirkel.objects.TwoPointLineObject; import rene.zirkel.objects.UserFunctionObject; import rene.zirkel.structures.CoordinatesXY; import rene.zirkel.tools.AnimatorTool; import rene.zirkel.tools.BinderTool; import rene.zirkel.tools.BreakpointAnimator; import rene.zirkel.tools.EditTool; import rene.zirkel.tools.LabelMover; import rene.zirkel.tools.MagnetTool; import rene.zirkel.tools.MetaMover; import rene.zirkel.tools.MoverTool; import rene.zirkel.tools.ObjectTracker; import rene.zirkel.tools.SaveJob; import rene.zirkel.tools.SetAwayTool; import rene.zirkel.tools.SetCurveCenterTool; import rene.zirkel.tools.SetFixedAngle; import rene.zirkel.tools.SetFixedCircle; import rene.zirkel.tools.SetRangeTool; import rene.zirkel.tools.SetTargetsTool; import rene.zirkel.tools.Tracker; import rene.zirkel.tools.UniversalTracker; import rene.zirkel.tools.ZoomerTool; import atp.sHotEqn; import eric.JGlobals; import eric.JMacrosTools; import eric.JUndo; import eric.applet.dock.dock; import eric.controls.JControlsManager; /** * @author Rene Main class, doing most of the work in the C.a.R. application. * This canvas handles mouse and keyboard input, displays the * construction and has tools to save and load constructions. */ public class ZirkelCanvas extends javax.swing.JPanel implements MouseListener, MouseMotionListener, ItemListener, AddEventListener, ActionListener, ChangedListener, MouseWheelListener // the canvas to do the construction { /** * */ private static final long serialVersionUID=1L; ObjectConstructor OC=new MoverTool(); // the current object constructor Construction C=new Construction(), COriginal; // the construction (collection of Constructor-Objects) StatusListener SL=null; // for displaying a status message public Image I=null; MyGraphics IG; public UniversalTracker UniversalTrack=null; Image Background=null; FontMetrics FM; public double PointSize=4.0; // Size of a point double MinPointSize=4.0; // Default minimal point size public double FontSize=12.0; // Size of font double MinFontSize=12.0; // Default minimal font size public int IW=0, IH=0; // Image and its dimensions public double Xmin, DX, Ymin, DY; boolean ShowHidden=false; // show hidden objects Frame F=new Frame(); boolean ReadOnly; boolean AllowRightMouse=true; public PopupMenu PM; CheckboxMenuItem CheckboxHidden; MenuItem Replay, Empty; boolean Job=false; // this is a job (save as such) String Last=""; // Last displayed job object Vector Targets=new Vector(); // Target names ConstructionObject TargetO[], TargetS[]; // Target objects and solutions int ShowColor=0; // 0=all, 1=green etc. (black displays always) static public double // factors for rounding EditFactor=1000000.0, LengthsFactor=100.0, AnglesFactor=1.0; public boolean Visual=Global.getParameter("options.visual", true); boolean All; boolean Interactive=true; public int GridColor=0, GridThickness=ConstructionObject.THIN; public boolean ShowGrid=false, AxesOnly=false, ShowDots=true, ShowLines=true; public boolean GridLabels=true, GridBold=false, GridLarge=false; public JControlsManager JCM; public JUndo JU=new JUndo(); // private dock DOCK; /** * Initiate an empty construction. The display may have a popup menu (only * for readonly displays). * * @param readonly * User cannot change the construction. * @param replay * Replay option in popup menu. * @param hidden * Show hidden option in popup menu. */ public ZirkelCanvas(final boolean readonly, final boolean replay, final boolean hidden) { ReadOnly=readonly; AllowRightMouse=!readonly; // setLayout(new BoxLayout(this,BoxLayout.X_AXIS)); setLayout(null); UniversalTrack=new UniversalTracker(this); JCM=new JControlsManager(this); if (Global.getParameter("options.nopopupmenu", false)) { PM=null; } else if (ReadOnly) { PM=new PopupMenu(); CheckboxHidden=new MyCheckboxMenuItem(Zirkel.name("popup.hidden")); CheckboxHidden.addItemListener(this); if (hidden) { PM.add(CheckboxHidden); } Replay=new MyMenuItem(Zirkel.name("popup.replay")); Replay.addActionListener(this); if (replay) { PM.add(Replay); } if (hidden||replay) { add(PM); } else { PM=null; } } else { PM=new PopupMenu(); Empty=new MyMenuItem(Zirkel.name("popup.empty")); add(PM); } C.CL=this; clear(); updateDigits(); C.addAddEventListener(this); addMouseWheelListener(this); // DOCK=new dock(this); // add(DOCK); } public ZirkelCanvas(final boolean readonly) { this(readonly, true, true); } public ZirkelCanvas() { this(false, true, true); } @Override public void paintComponents(final Graphics g) { } public void deleteAxisObjects() { C.deleteAxisObjects(); reloadCD(); repaintCD(); } public void createAxisObjects() { C.createAxisObjects(); } private void setShowHideParameters(final String s, final boolean b) { Global.setParameter("options.point."+s, b); Global.setParameter("options.segment."+s, b); Global.setParameter("options.line."+s, b); Global.setParameter("options.circle."+s, b); Global.setParameter("options.angle."+s, b); Global.setParameter("options.text."+s, b); Global.setParameter("options.locus."+s, b); Global.setParameter("options."+s, b); // setShowNames(true); } public void JSsend(final String s) { if (s.equals("shownames")) { setShowHideParameters("shownames", true); } else if (s.equals("hidenames")) { setShowHideParameters("shownames", false); } else if (s.equals("showvalues")) { setShowHideParameters("showvalues", true); } else if (s.equals("hidevalues")) { setShowHideParameters("showvalues", false); } else { try { C.interpret(this, s); } catch (final Exception ex) { } } } public String JSreceive(final String s) { String r="ERROR..."; try { double rep; final Expression exp=new Expression(s, C, null); rep=exp.getValue(); r=String.valueOf(rep); } catch (final ConstructionException ex) { ex.printStackTrace(); } return r; } public Dimension UseSize=null; @Override public Dimension getMinimumSize() { if (Background==null||!Global.getParameter("background.usesize", false)) { if (UseSize!=null) { return UseSize; } else { return new Dimension(600, 600); } } else { final int iw=Background.getWidth(this); if (iw<10) { return new Dimension(600, 600); } final int ih=Background.getHeight(this); if (Global.getParameter("background.usewidth", false)) { final int w=getSize().width, h=(int) ((double) ih/iw*w+0.5); return new Dimension(w, h); } else { return new Dimension(iw, ih); } } } @Override public Dimension getPreferredSize() { return getMinimumSize(); } public void updateDigits() { EditFactor=Math.pow(10, Global.getParameter("digits.edit", 5)); LengthsFactor=Math.pow(10, Global.getParameter("digits.lengths", 5)); AnglesFactor=Math.pow(10, Global.getParameter("digits.angles", 0)); } public void itemStateChanged(final ItemEvent e) { if (e.getSource()==CheckboxHidden) { ShowHidden=CheckboxHidden.getState(); repaint(); } } ZirkelCanvasInterface ZCI; public void setZirkelCanvasListener(final ZirkelCanvasInterface zci) { ZCI=zci; } public String loadImage() { return ZCI.loadImage(); } public Image doLoadImage(final String filename) { return ZCI.doLoadImage(filename); } public void actionPerformed(final ActionEvent e) { if (!Interactive) { return; } if (e.getSource()==Replay) { if (ZCI!=null) { ZCI.replayChosen(); } } else { final Enumeration en=Macros.elements(); while (en.hasMoreElements()) { final MacroItem m=(MacroItem) en.nextElement(); if (m.I==e.getSource()) { if (ZCI!=null) { ZCI.runMacro(m.M); } break; } } } } // Some transfer functions to compute screen coordinates etc. public double col(final double x) { return (x-Xmin)/DX*IW; } public double row(final double y) { return IH-(y-Ymin)/DY*IH; } public int width() { return IW; } public int height() { return IH; } public double x(final int c) { return Xmin+DX*c/IW; } public double y(final int r) { return Ymin+DY*(IH-r)/IH; } public double dx(final int c) { return DX*c/IW; } public double dy(final int r) { return DY*r/IH; } public double dx(final double c) { return DX*c/IW; } public double dy(final double r) { return DY*r/IH; } public double maxX() { return Xmin+DX; } public double minX() { return Xmin; } public double maxY() { return Ymin+DY; } public double minY() { return Ymin; } public boolean isInside(final double x, final double y) { return x>=Xmin&&x=Ymin&&y0) { C.setPixel(getSize().width/DX); } } DoneListener DL; public void setDoneListener(final DoneListener dl) { DL=dl; } /** * Add an item to the construction and re-paint the construction. */ public void addObject(final ConstructionObject o) // called by the // ObjectConstructor { C.add(o); if (Preview) { o.setIndicated(true); o.setSelectable(false); } C.updateCircleDep(); } /** * A construction added an item. Check, if it solves a problem and notify * the DoneListener, if so. */ public void added(final Construction c, final ConstructionObject o) { if (displayJob()&&TargetO.length>0) { boolean olddone=true; for (int i=0; i0) { boolean olddone=true; for (int i=0; i0) { final ConstructionObject o=select(v, e.getX(), e.getY()); if (o!=null) { new EditTool().mousePressed(e, o, this); check(); return; } else { repaintCD(); } return; } } if (Moved<=2&&PM!=null&&!Global.getParameter("restricted", false)) { int n=2; if (ReadOnly||!Global.getParameter("options.doubleclick", false)) { n=1; } if (e.getClickCount()>=n&&(ReadOnly||Macros.size()!=0)) { PM.show(e.getComponent(), e.getX(), e.getY()); } } repaintCD(); return; } if (SmartBoardPreview&&Global.getParameter("smartboard", false)) { Control=e.isControlDown(); clearIndicated(); clearPreview(); repaint(); Dragging=false; OC.mousePressed(e, this); SmartBoardPreview=false; mouseReleased(e); return; } if (!Dragging) { OC.mouseReleased(e, this); Dragging=false; repaintCD(); return; } if (Moved<=1) { if (OC instanceof LabelMover) { ((LabelMover) OC).resetPoint(); OC.mouseReleased(e, this); } else if (OC instanceof MetaMover) { OC.mouseReleased(e, this); if (!ReadOnly) { new EditTool().mousePressed(e, this); } } } else { OC.mouseReleased(e, this); } repaintCD(); check(); Dragging=false; } public synchronized void mouseClicked(final MouseEvent e) { } public synchronized void mouseExited(final MouseEvent e) { if (!Interactive) { return; } clearIndicated(); clearPreview(); repaint(); SmartBoardPreview=false; RightClicked=false; repaintCD(); } public void mouseEntered(final MouseEvent e) { } public synchronized void mouseMoved(final MouseEvent e) { if (!Interactive||!Global.getParameter("options.indicate", true)) { return; } if (Global.getParameter("smartboard", false)) { return; } Count.setAllAlternate(true); OC.mouseMoved(e, this, Global.getParameter("options.indicate.simple", false)); Count.setAllAlternate(false); repaintCD(); } DragThread DT=null; public synchronized void mouseDragged(final MouseEvent e) { if (!Interactive) { return; } if (DT==null) { DT=new DragThread(this); } if (SmartBoardPreview&&Global.getParameter("smartboard", false)) { OC.mouseMoved(e, this, Global.getParameter( "options.indicate.simple", false)); } else { DT.mouseDragged(e); Moved++; } repaintCD(); } public synchronized void doMouseDragged(final MouseEvent e) { OC.mouseDragged(e, this); } ConstructionObject LastPaint=null; public void newImage() { I=null; repaint(); } boolean Frozen=false; public void setFrozen(final boolean f) { Frozen=f; } public boolean getFrozen() { return Frozen; } MessageWindow MW; final double PointSizeFactor=240.0; int CC=0; // public void repaint(){ // // System.out.print("a "); // // super.repaint(); // StackTraceElement[] trace = new Throwable().getStackTrace(); // if (!trace[1].equals("javax.swing.JComponent")) super.repaint(); // // // for (int i=0;i0) { final ConstructionObject os[]=new ConstructionObject[n]; e=C.elements(); n=0; while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.HasZ) { os[n++]=o; } } Sorter.sort(os); for (int i=0; i250&&PolygonDrawer.step<50) { PolygonDrawer.step=PolygonDrawer.step*2; } if (time<100&&PolygonDrawer.step>4) { PolygonDrawer.step=PolygonDrawer.step/2; } paintDrawings(IG); // JMacrosTools.CurrentJZF.JCM.paintControls(IG.getGraphics()); } void dopaintFig(final MyGraphicsFig IG) { if (ShowGrid) { paintGrid(IG); } IG.pushLayer(true); int layer=0; while (true) { IG.pushLayer(); int l=0; Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==LastPaint) { break; } if (l==layer&&o.isBack()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l>layer) { break; } } } if (llayer) { break; } } } l=0; e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==LastPaint) { break; } if (l==layer&&!o.isBack()&&o.selected()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l>layer) { break; } } } layer++; } IG.pushLayer(false); if (LastPaint==null) { paintTrack(IG); } } int xg[]=new int[64], yg[]=new int[64]; public void setGrid() { ShowGrid=Global.getParameter("showgrid", false); AxesOnly=Global.getParameter("axesonly", false); ShowDots=Global.getParameter("showdots", false); ShowLines=Global.getParameter("showlines", false); GridThickness=Global.getParameter("grid.thickness", ConstructionObject.THIN); GridColor=Global.getParameter("grid.colorindex", 0); GridBold=Global.getParameter("grid.bold", false); GridLarge=Global.getParameter("grid.large", false); GridLabels=Global.getParameter("grid.labels", true); } /** * Paint axes and grid. * * @param IG */ void paintGrid(final MyGraphics IG) { if (GridThickness==ConstructionObject.NORMAL) { IG.setColor(ZirkelFrame.Colors[Global.getParameter( "grid.colorindex", 0)]); } else { IG.setColor(ZirkelFrame.LightColors[GridColor]); } IG.setFont(GridLarge, GridBold); final double gridsize=getGridSize(); int dd=IH/200; if (dd<1) { dd=1; } double x1=Math.floor((C.getX()-C.getW())/gridsize-1)*gridsize; int xi=0; while (x1<(C.getX()+C.getW())&&xi<64) { final int c=(int) col(x1); xg[xi++]=c; x1+=gridsize; } double y1=Math.floor((C.getY()-C.getW())/gridsize-1)*gridsize; int yi=0; while (y1<(C.getY()+C.getW())&&yi<64) { final int r=(int) row(y1); yg[yi++]=r; y1+=gridsize; } for (int i=0; iC.getX()-C.getW()) { final int c=(int) col(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(c, 0, c, IH); } else { IG.drawThickLine(c, 0, c, IH); } } if (0C.getY()-C.getW()) { final int r=(int) row(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(0, r, IW, r); } else { IG.drawThickLine(0, r, IW, r); } } } dd=dd*2; double labelsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; while (C.getW()*2/labelsize>=10) { labelsize*=10; } if (C.getW()*2/labelsize<5) { labelsize/=2; } final FontMetrics fm=IG.getFontMetrics(); final int FH=fm.getHeight(); x1=Math.floor((C.getX()-C.getW())/labelsize-1)*labelsize; int lh=(int) row(0); int bottomshift=FH+2; if (lh<0||lh>IH) { lh=IH; bottomshift=-7; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); final String s=format(x1); if (s.length()>0) { if (GridLabels) { IG.drawString(s, c-fm.stringWidth(s)/2, lh+bottomshift); } IG.drawLine(c, lh-dd, c, lh+dd); } x1+=labelsize; } boolean left=true; int lw=(int) col(0); if (lw<0||lw>IW-20) { lw=0; left=false; } y1=Math.floor((C.getY()-C.getW())/labelsize-1)*labelsize; while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); final String s=format(y1); if (s.length()>0) { final int leftshift=(left)?-fm.stringWidth(s)-5:8; if (GridLabels) { IG.drawString(s, lw+leftshift, r+FH/2-2); } IG.drawLine(lw-dd, r, lw+dd, r); } y1+=labelsize; } } /** * Paint only the coordinate axes (no grid) * * @param IG */ void paintAxes(final MyGraphics IG) { IG.setAntialiasing(false); if (GridThickness==ConstructionObject.NORMAL) { IG.setColor(ZirkelFrame.Colors[GridColor]); } else { IG.setColor(ZirkelFrame.LightColors[GridColor]); } IG.setFont(GridLarge, GridBold); final double gridsize=getGridSize(); double x1=Math.floor((C.getX()-C.getW())/gridsize-1)*gridsize; final int r0=(int) row(0); int dd=IH/200; if (dd<1) { dd=1; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); IG.drawLine(c, r0-dd, c, r0+dd); x1+=gridsize; } double y1=Math.floor((C.getY()-C.getW())/gridsize-1)*gridsize; final int c0=(int) col(0); while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); IG.drawLine(c0-dd, r, c0+dd, r); y1+=gridsize; } if (GridThickness!=ConstructionObject.INVISIBLE) { if (0C.getX()-C.getW()) { final int c=(int) col(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(c, 0, c, IH); } else { IG.drawThickLine(c, 0, c, IH); } } if (0C.getY()-C.getW()) { final int r=(int) row(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(0, r, IW, r); } else { IG.drawThickLine(0, r, IW, r); } } } dd=dd*2; double labelsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; while (C.getW()*2/labelsize>=10) { labelsize*=10; } if (C.getW()*2/labelsize<5) { labelsize/=2; } final FontMetrics fm=IG.getFontMetrics(); final int FH=fm.getHeight(); x1=Math.floor((C.getX()-C.getW())/labelsize-1)*labelsize; int lh=(int) row(0); int bottomshift=FH+2; if (lh<0||lh>IH) { lh=IH; bottomshift=-7; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); final String s=format(x1); if (s.length()>0) { if (GridLabels) { IG.drawString(s, c-fm.stringWidth(s)/2, lh+bottomshift); } IG.drawLine(c, lh-dd, c, lh+dd); } x1+=labelsize; } boolean left=true; int lw=(int) col(0); if (lw<0||lw>IW-20) { lw=0; left=false; } y1=Math.floor((C.getY()-C.getW())/labelsize-1)*labelsize; while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); final String s=format(y1); if (s.length()>0) { final int leftshift=(left)?-fm.stringWidth(s)-5:8; if (GridLabels) { IG.drawString(s, lw+leftshift, r+FH/2-2); } IG.drawLine(lw-dd, r, lw+dd, r); } y1+=labelsize; } IG.setAntialiasing(true); } public double pointSize() { return PointSize; } public double SelectionPointFactor=Global.getParameter("selectionsize", 1.5); public double selectionSize() { return SelectionPointFactor*PointSize; } public double Scale=1.0; public int scale(final int x) { return (int) (Scale*x); } static char c[]=new char[20]; int nc; public String format(double x) { // double xx=x; nc=0; boolean minus=false; if (x<-1e-12) { minus=true; x=-x; } x+=1e-12; final double h=x-Math.floor(x); if (rekformat(h, 8)) { c[nc++]='.'; } while (x>=1) { final double s=Math.floor(x/10); c[nc++]=(char) ('0'+(int) (x-s*10)); x=s; } if (nc>0&&minus) { c[nc++]='-'; } // revert c: for (int i=0; i "+new String(c,0,nc)); return new String(c, 0, nc); } boolean rekformat(double h, final int k) { h=h*10; final double x=Math.floor(h); if (k==0) { final int i=(int) x; if (i>0) { c[nc++]=(char) ('0'+i); return true; } else { return false; } } else { final int i=(int) x; if (rekformat(h-x, k-1)||i>0) { c[nc++]=(char) ('0'+i); return true; } else { return false; } } } @Override public void update(final Graphics g) { paint(g); } public void paintUntil(final ConstructionObject o) { if (LastPaint==o) { return; } LastPaint=o; repaint(); } // validate all elements @Override public void validate() { dovalidate(); if (OC instanceof TrackPainter) { ((TrackPainter) OC).validate(this); } } /** * Synchronized update of the construction to avoid a repaint during update. */ synchronized public void dovalidate() { C.dovalidate(); } // selection routines: // This vector is used by ALL selection and indication routines for // performance reasons. MyVector V=new MyVector(); public void sort(final MyVector V) { if (V.size()<2) { return; } Sorter.QuickSort(V.getArray(), 0, V.size()-1); } /** * Slow function to resort a vector by the number of each element in the * construction. */ public void sortRow(final MyVector V) { final ConstructionObject o[]=new ConstructionObject[V.size()]; V.copyInto(o); V.removeAllElements(); final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject oo=(ConstructionObject) e.nextElement(); for (final ConstructionObject element : o) { if (element==oo) { V.addElement(oo); break; } } } } /** * select a circle or a line. **/ public ConstructionObject selectCircleLine(final int x, final int y, final boolean multiple) // select a circle or a line { final MyVector v=selectCircleLineObjects(x, y, multiple, false); return select(v); } public ConstructionObject selectCircleLine(final int x, final int y) // select // a // circle // or // a // line { return selectCircleLine(x, y, true); } /** * select a circle or a line. **/ public ConstructionObject selectPointonObject(final int x, final int y, final boolean multiple) // select a circle or a line { final MyVector v=selectPointonObjects(x, y, multiple, false); return select(v); } public ConstructionObject selectPointonObject(final int x, final int y) // select // a // circle // or // a // line { return selectPointonObject(x, y, true); } /** * Select all possible circles or lines at x,y. If a matching non-filled * object is found above a filled object, the latter is never selected. * * @param multiple * determines, if it is possible to select selected objects. * @param testlocal * determines, if objects that look locally like already selected * objects should be omitted. */ public MyVector selectCircleLineObjects(final int x, final int y, final boolean multiple, final boolean testlocal) // select a circle // or a line { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject||o instanceof PrimitiveCircleObject)&&o.nearto(x, y, true, this)&&(multiple||!o.selected())) { if (testlocal) { final Enumeration ev=V.elements(); while (ev.hasMoreElements()) { final ConstructionObject ov=(ConstructionObject) ev.nextElement(); if (o.locallyLike(ov)) { o=null; break; } } } if (o!=null) { V.addElement(o); } } } return V; } public MyVector selectCircleLineObjects(final int x, final int y, final boolean multiple) { return selectCircleLineObjects(x, y, multiple, false); } public MyVector selectCircleLineObjects(final int x, final int y) { return selectCircleLineObjects(x, y, true, false); } /** * Select all possible object at x,y that can carry a point. * * @param multiple * determines, if it is possible to select selected objects. * @param testlocal * determines, if objects that look locally like already selected * objects should be omitted. */ public MyVector selectPointonObjects(final int x, final int y, final boolean multiple, final boolean testlocal) // select a circle // or a line { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PointonObject)&&o.nearto(x, y, true, this)&&(multiple||!o.selected())) { if (testlocal) { final Enumeration ev=V.elements(); while (ev.hasMoreElements()) { final ConstructionObject ov=(ConstructionObject) ev.nextElement(); if (o.locallyLike(ov)) { o=null; break; } } } if (o!=null) { V.addElement(o); } } } return V; } public MyVector selectPointonObjects(final int x, final int y, final boolean multiple) { return selectPointonObjects(x, y, multiple, false); } public MyVector selectPointonObjects(final int x, final int y) { return selectPointonObjects(x, y, true, false); } /** * Select all selectable objects near to x,y. * * @param multiple * allows multiple selections. **/ public MyVector selectObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } return V; } public MyVector selectObjects(final int x, final int y) { return selectObjects(x, y, true); } /** * Select a single object near x,y. **/ public ConstructionObject selectObject(final int x, final int y, final boolean multiple) { final MyVector v=selectObjects(x, y, multiple); return select(v, x, y); } public ConstructionObject selectObject(final int x, final int y) { return selectObject(x, y, true); } /** * select all constructable objects near x,y. **/ public MyVector selectConstructableObjects(final int x, final int y, final boolean multiple) // select an enumeration of objects { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.valid()&&o.isFlag()&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } return V; } public MyVector selectConstructableObjects(final int x, final int y) { return selectConstructableObjects(x, y, true); } /** * select a single constructable object near x,y. **/ public ConstructionObject selectConstructableObject(final int x, final int y) { final MyVector v=selectConstructableObjects(x, y, true); return select(v, x, y); // user determines } /** * Select a single line, segment, ray, perp., paral. or fixed angle near * x,y. **/ public PrimitiveLineObject selectLine(final int x, final int y, final boolean multiple) { selectLineObjects(x, y, multiple); return (PrimitiveLineObject) select(V); } public void selectLineObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PrimitiveLineObject selectLine(final int x, final int y) { return selectLine(x, y, true); } /** * Select a point or a line (for the object tracker). */ public void selectPointsOrLines(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject||o instanceof PointObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } /** * Select a single line, segment, or ray near x,y **/ public TwoPointLineObject selectTwoPointLine(final int x, final int y, final boolean multiple) { selectTwoPointLines(x, y, multiple); return (TwoPointLineObject) select(V); } public void selectTwoPointLines(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof TwoPointLineObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public TwoPointLineObject selectTwoPointLine(final int x, final int y) { return selectTwoPointLine(x, y, true); } /** * Select a single segment near x,y **/ public SegmentObject selectSegment(final int x, final int y, final boolean multiple) { selectSegments(x, y, multiple); return (SegmentObject) select(V); } public void selectSegments(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof SegmentObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public SegmentObject selectSegment(final int x, final int y) { return selectSegment(x, y, true); } public boolean isMultipleAcceptedObject(final ConstructionObject o) { boolean b=o instanceof AreaObject; b=b||o instanceof PrimitiveLineObject; b=b||o instanceof PrimitiveCircleObject; b=b||o instanceof QuadricObject; b=b||o instanceof eric.JLocusTrackObject; return b; } public void selectMultipleFinals(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PointObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.removeAllElements(); return; } if (o.isSelectable()&&(isMultipleAcceptedObject(o))&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } if (V.size()>1) { V.removeAllElements(); } } public ConstructionObject selectMultipleFinal(final int x, final int y, final boolean multiple) { selectMultipleFinals(x, y, multiple); return (ConstructionObject) select(V); } /** * Select a single ray near x,y **/ public RayObject selectRay(final int x, final int y, final boolean multiple) { selectRays(x, y, multiple); return (RayObject) select(V); } public void selectRays(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof RayObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public RayObject selectRay(final int x, final int y) { return selectRay(x, y, true); } /** * Select a circle near x,y. A non-filled object is preferred before a * filled object. **/ public PrimitiveCircleObject selectCircle(final int x, final int y, final boolean multiple) { selectCircles(x, y, multiple); return (PrimitiveCircleObject) select(V); } public void selectCircles(final int x, final int y, final boolean multiple) { Enumeration e=C.elements(); V.removeAllElements(); boolean haveNotFilled=false; while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveCircleObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); if (!o.isFilledForSelect()) { haveNotFilled=true; } } } if (haveNotFilled) { e=V.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isFilledForSelect()) { V.removeElement(o); } } } } public PrimitiveCircleObject selectCircle(final int x, final int y) { return selectCircle(x, y, true); } /** * Select a point near x,y. **/ public PointObject selectPoint(final int x, final int y, final boolean multiple) { selectPointObjects(x, y, multiple); return (PointObject) select(V); } public void selectPointObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PointObject selectPoint(final int x, final int y) { return selectPoint(x, y, true); } public PointObject selectPoint(final int x, final int y, final boolean multiple, final ConstructionObject until) { selectPointObjects(x, y, multiple, until); return (PointObject) select(V); } public void selectPointObjects(final int x, final int y, final boolean multiple, final ConstructionObject until) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==until) { break; } if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PointObject selectPoint(final int x, final int y, final ConstructionObject until) { return selectPoint(x, y, true, until); } boolean NewPoint=false; public boolean isNewPoint() { return NewPoint; } /** * Select a point, and create a new point, if necessary. Even creates an * intersection, or a point bound to an object, if possible. If enabled, the * user is asked for confirmation in these cases. The variable NewPoint is * set to true, if the point was indeed created. * * @param multiple * determines, if multiple selections are possible. * @param any * determines, if the first point should be used. **/ public PointObject selectCreatePoint(final int x, final int y, final boolean multiple, final boolean any) { NewPoint=false; if (Preview) { final PointObject p=new PointObject(C, x(x), y(y)); addObject(p); p.setSuperHidden(true); PreviewObject=p; return p; } // User selects a known point: final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } sort(V); } if (V.size()>0) { if (any) { return (PointObject) (V.elementAt(0)); } final ConstructionObject o=select(V, Control||!Global.getParameter("options.indicate", true)); if (o!=null) { return (PointObject) o; } return null; } // User creates a new point: ConstructionObject oc=tryCreateIntersection(x, y, true); if (oc!=null) { final PointObject o=(PointObject) oc; // o.setDefaults(); // if (o.showName()) renameABC(o,false,false); return o; } if (!IntersectionYes) { return null; } final MyVector w=selectPointonObjects(x, y, true, false); filter(w, x, y, true); if (w.size()>0) { oc=select(w, !Control); if (oc==null) { return null; } if (oc!=null) { boolean yes=true; if (Global.getParameter("options.pointon", false)) { final AgainQuestion q=new AgainQuestion(F, Zirkel.name("question.pointon"), Zirkel.name("question.title")); q.center(F); q.setVisible(true); yes=q.yes(); Global.setParameter("options.pointon", q.again()); } if (yes) { final PointObject o=new PointObject(C, x(x), y(y), oc); // if (ShowGrid&&!Global.getParameter("grid.leftsnap", // false)) { // o.snap(this); // } o.setUseAlpha(true); addObject(o); validate(); o.setDefaults(); // rename Point on object, if showname // if (o.showName()) renameABC(o,false,false); NewPoint=true; return o; } else { return null; } } } final PointObject p=new PointObject(C, x(x), y(y)); if (ShowGrid) { p.snap(this); } addObject(p); p.setDefaults(); // rename Point, if showname // if (p.showName()) renameABC(p,false,false); NewPoint=true; return p; } boolean IntersectionYes=false; public ConstructionObject tryCreateIntersection(final int x, final int y, final boolean ask) { final MyVector w=selectPointonObjects(x, y, true, true); sort(w); IntersectionYes=true; if (w.size()<2) { return null; } final ConstructionObject P1=(ConstructionObject) w.elementAt(0); final ConstructionObject P2=(ConstructionObject) w.elementAt(1); if (!(P1 instanceof PointonObject&&P2 instanceof PointonObject)) { return null; } if (!((PointonObject) P1).canInteresectWith(P2)||!((PointonObject) P2).canInteresectWith(P1)) { return null; } final IntersectionObject o[]=IntersectionConstructor.construct(P1, P2, C); if (o.length==1&&!o[0].valid()) { return null; } if (o.length==2&&!o[0].valid()&&!o[1].valid()) { return null; } if (ask&&Global.getParameter("options.intersection", false)) { final AgainQuestion q=new AgainQuestion(F, Zirkel.name("question.intersection"), Zirkel.name("question.title")); q.center(F); q.setVisible(true); IntersectionYes=q.yes(); Global.setParameter("options.intersection", q.again()); } if (IntersectionYes) { if (o.length==1||!o[1].valid()) { addObject(o[0]); o[0].autoAway(); o[0].validate(x(x), y(y)); validate(); o[0].setDefaults(); o[0].setRestricted(getRestricted()); return o[0]; } if (!o[0].valid()) { addObject(o[1]); o[1].autoAway(); validate(); o[1].setDefaults(); o[1].setRestricted(getRestricted()); return o[1]; } IntersectionObject oc=o[0]; final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d10) { return (ConstructionObject) V.elementAt(0); } else { return null; } } final ConstructionObject o=select(V, x, y); return o; } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel, final ConstructionObject until) { return selectWithSelector(x, y, sel, until, true); } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel, final boolean choice) { return selectWithSelector(x, y, sel, null, choice); } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel) { return selectWithSelector(x, y, sel, null, true); } /** * Select a moveable point at x,y. Don't ask user, take first. **/ public ConstructionObject selectImmediateMoveablePoint(final int x, final int y) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } } if (V.size()==0) { return null; } return (ConstructionObject) V.elementAt(0); } /** * Select a moveable object at x,y. **/ public ConstructionObject selectMoveableObject(final int x, final int y) { final ConstructionObject s=findSelectedObject(); if (s instanceof MoveableObject&&((MoveableObject) s).moveable()&&s.nearto(x, y, this)) { return s; } selectMoveableObjects(x, y); if (V.size()==1) { return (ConstructionObject) V.elementAt(0); } final ConstructionObject o=select(V); if (o!=null) { if (!Global.getParameter("options.choice", true)) { return o; } o.setSelected(true); } return null; } public void selectMoveableObjects(final int x, final int y, final boolean control) { V.removeAllElements(); final ConstructionObject s=findSelectedObject(); if (s instanceof MoveableObject&&((MoveableObject) s).moveable()&&s.nearto(x, y, this)) { V.addElement(s); return; } else if (control&&s instanceof FixedCircleObject&&s.nearto(x, y, this)&&((FixedCircleObject) s).fixedByNumber()) { V.addElement(s); return; } else if (control&&s instanceof FixedAngleObject&&s.nearto(x, y, this)&&((FixedAngleObject) s).fixedByNumber()) { V.addElement(s); return; } final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (!control&&o.isSelectable()&&o instanceof MoveableObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } else if (control&&o instanceof FixedCircleObject&&o.nearto(x, y, this)&&((FixedCircleObject) o).fixedByNumber()) { V.addElement(o); } else if (control&&o instanceof FixedAngleObject&&o.nearto(x, y, this)&&((FixedAngleObject) o).fixedByNumber()) { V.addElement(o); } } filter(V, x, y); } public void selectMoveableObjects(final int x, final int y) { selectMoveableObjects(x, y, false); } /** * Select a moveable object at x,y. Don't ask user, take first. **/ public ConstructionObject selectImmediateMoveableObject(final int x, final int y) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof MoveableObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } } filter(V, x, y); if (V.size()==0) { return null; } return (ConstructionObject) V.elementAt(0); } /** * try to determine the unique objects that are near coordinates x,y and * delete all others from the vector v. **/ public void filter(final MyVector v, final int x, final int y, final boolean choice) { boolean HasPoints=false, HasNotFilled=false; Enumeration e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o instanceof PointObject) { HasPoints=true; } if (!o.isFilledForSelect()) { HasNotFilled=true; } } if (HasPoints) { e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (!o.onlynearto(x, y, this)) { v.removeElement(o); } } } else if (HasNotFilled) { e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isFilledForSelect()) { v.removeElement(o); } } } sort(v); if (!choice) { v.truncate(1); } } public void filter(final MyVector v, final int x, final int y) { filter(v, x, y, Global.getParameter("options.choice", true)||Control); } /** * user must select an object in the selection dialog, unless the selection * is unique anyway, or the filter determines that the selection is unique. **/ public ConstructionObject select(final MyVector v, final int x, final int y, final boolean choice) { if (v.size()==0) { return null; } if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } filter(v, x, y); if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } if (!choice) { return (ConstructionObject) v.elementAt(0); } sortRow(V); RightClicked=false; final eric.JSelectPopupDialog d=new eric.JSelectPopupDialog(F, this, v); final ConstructionObject o=d.getConstructionObject(); d.doclose(); return o; } public ConstructionObject select(final MyVector v, final int x, final int y) { return select(v, x, y, Global.getParameter("options.choice", true)||Control); } /** * user must select an object in the selection dialog, unless the selection * is unique anyway. **/ public ConstructionObject select(final MyVector v, final boolean choice) { if (v.size()==0) { return null; } if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } // if (!choice) return (ConstructionObject)v.elementAt(0); sortRow(V); RightClicked=false; final eric.JSelectPopupDialog d=new eric.JSelectPopupDialog(F, this, v); final ConstructionObject o=d.getConstructionObject(); d.doclose(); return o; } public ConstructionObject select(final MyVector v) { return select(v, Global.getParameter("options.choice", true)||Control); } /** * select the label of a point, i.e. a point, which is set by the user * * @return the first label found **/ public ConstructionObject selectLabel(final int x, final int y) { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o.textcontains(x, y, this)) { return o; } } return null; } public ConstructionObject findSelectedObject() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.selected()) { return o; } } return null; } // Indication functions MyVector Indicated=new MyVector(); PointObject IndicatePoint=null; public void indicate(final MyVector v, final boolean showname) { if (v.size()==1) { if (showname) { setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); } else if (v.elementAt(0) instanceof PointObject) { setCursor(new Cursor(Cursor.HAND_CURSOR)); } } else { setCursor(Cursor.getDefaultCursor()); } if (Indicated.equalsIdentical(v)) { return; } Enumeration e=Indicated.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setIndicated(false); } Indicated.removeAllElements(); e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); Indicated.addElement(o); o.setIndicated(true, showname); } repaint(); } public void indicate(final MyVector v) { indicate(v, false); } public void clearIndicated() { IndicatePoint=null; if (Indicated.size()==0) { return; } final Enumeration e=Indicated.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setIndicated(false); } Indicated.removeAllElements(); setCursor(Cursor.getDefaultCursor()); repaint(); } boolean Preview=false; ConstructionObject LastNonPreview=null; MoveableObject PreviewObject=null; public void movePreview(final MouseEvent e) { if (PreviewObject!=null) { PreviewObject.move(x(e.getX()), y(e.getY())); validate(); repaint(); } } public void prepareForPreview(final MouseEvent e) { LastNonPreview=C.last(); Preview=true; } public boolean isPreview() { return Preview; } public void clearPreview() { if (!Preview) { return; } C.clearAfter(LastNonPreview); LastNonPreview=null; PreviewObject=null; Preview=false; Count.fixAll(false); } public void setPreviewObject(final MoveableObject o) { PreviewObject=o; } public ConstructionObject indicateTryCreateIntersection(final int x, final int y, final boolean ask) { final MyVector w=selectPointonObjects(x, y, true, true); sort(w); IntersectionYes=true; if (w.size()<2) { return null; } final IntersectionObject o[]=IntersectionConstructor.construct( (ConstructionObject) w.elementAt(0), (ConstructionObject) w.elementAt(1), C); if (o.length==1&&!o[0].valid()) { return null; } if (o.length==2) { if (!o[1].valid()) { if (!o[0].valid()) { return null; } } else { final IntersectionObject h=o[0]; o[0]=o[1]; o[1]=h; } } IntersectionObject oc=o[0]; if (o.length==2&&o[1].valid()) { final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d10) { IndicatePoint=null; filter(V, x, y, false); indicate(V); return; } PointObject oc=(PointObject) indicateTryCreateIntersection(x, y, true); if (oc!=null) { return; } final MyVector w=selectPointonObjects(x, y, true, false); filter(w, x, y, true); if (w.size()>=1) { if (!w.equalsIdentical(Indicated)) { oc=new PointObject(C, x(x), y(y), (ConstructionObject) w.elementAt(0)); if (ShowGrid&&!Global.getParameter("grid.leftsnap", false)) { oc.snap(this); } oc.setUseAlpha(true); oc.validate(); oc.setIndicated(true); oc.setType(PointObject.CIRCLE); oc.setColorType(ConstructionObject.THICK); IndicatePoint=oc; indicate(w); } else if (IndicatePoint!=null) { IndicatePoint.setType(PointObject.CIRCLE); IndicatePoint.setColorType(ConstructionObject.THICK); IndicatePoint.move(x(x), y(y)); IndicatePoint.project((ConstructionObject) w.elementAt(0)); repaint(); } } else { clearIndicated(); } } public void indicateCircleLineObjects(final int x, final int y) { final MyVector w=selectCircleLineObjects(x, y); filter(V, x, y); indicate(w); } public void indicatePointonObjects(final int x, final int y) { final MyVector w=selectPointonObjects(x, y); filter(V, x, y); indicate(w); } public void indicateIntersectedObjects(final int x, final int y) { final MyVector w=selectPointonObjects(x, y); if (!w.equalsIdentical(Indicated)&&w.size()>=2) { final IntersectionObject o[]=IntersectionConstructor.construct( (ConstructionObject) w.elementAt(0), (ConstructionObject) w.elementAt(1), C); IntersectionObject oc=o[0]; if (o.length==2) { final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d1=Macros.size()) { appendMacro(m); } } catch (final ConstructionException ex) { Count.setAllAlternate(false); throw ex; } Count.setAllAlternate(false); } } else if (tag.name().equals("Construction")) { if (construction) { boolean job=false; if (tag.hasParam("job")) { job=true; Last=tag.getValue("last"); if (Last==null) { throw new ConstructionException(Zirkel.name("exception.job")); } final String Target=tag.getValue("target"); if (Target==null) { Targets=new Vector(); int i=1; while (true) { final String s=tag.getValue("target"+i); i++; if (s==null) { break; } Targets.addElement(s); } } else { Targets=new Vector(); Targets.addElement(Target); } if (Targets.size()==0) { throw new ConstructionException(Zirkel.name("exception.job")); } } C.load(tree, this); if (job) { if (C.find(Last)==null) { throw new ConstructionException(Zirkel.name("exception.job")); } final Enumeration et=Targets.elements(); while (et.hasMoreElements()) { final String s=(String) et.nextElement(); if (C.find(s)==null&&(!s.startsWith("~")||C.find(s.substring(1))==null)) { throw new ConstructionException(Zirkel.name("exception.job")); } } Job=true; } break; } } else { throw new ConstructionException("Construction not found"); } } recompute(); C.translateOffsets(this); resetSum(); validate(); repaint(); } catch (final Exception e) { throw e; } reloadCD(); repaint(); // Give the magnet object list to the point // see PointConstructor.construct : Enumeration e=C.magnet.elements(); while (e.hasMoreElements()) { final PointObject p=(PointObject) e.nextElement(); p.setMagnetObjects((String) e.nextElement()); } // System.out.println("finished reading file"); } public void resetSum() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o instanceof ExpressionObject) { ((ExpressionObject) o).reset(); } } } public void warning(final String s, final String help) { final Warning w=new Warning(F, s, Zirkel.name("warning"), true, help); w.center(F); w.setVisible(true); } public void warning(final String s) { warning(s, ""); } public void load(final InputStream in) throws Exception { try { C.Loading=true; load(in, true, true); C.Loading=false; } catch (final Exception e) { C.Loading=false; throw e; } } public String getComment() { return C.getComment(); } public void setComment(final String s) { C.setComment(s); } public String getJobComment() { return C.getJobComment(); } public void setJobComment(final String s) { C.setJobComment(s); } /** * This can be used to set a frame window for the error dialogs that the * canvas my display. */ public void setFrame(final Frame f) { F=f; } public Frame getFrame() { return F; } /** * Maginify the view by the specified factor. */ public void magnify(final double f) { ZoomerTool.initNonDraggableObjects(C); C.setXYW(C.getX(), C.getY(), C.getW()*f); ZoomerTool.zoomNonDraggableObjectsBy(C, f); recompute(); validate(); repaint(); } /** * Shift the view with these deltas. */ public void shift(final double dx, final double dy) { ZoomerTool.initNonDraggableObjects(C); C.setXYW(C.getX()+dx*C.getW(), C.getY()+dy*C.getW(), C.getW()); ZoomerTool.shiftNonDraggableObjectsBy(C, dx*C.getW(), dy*C.getW()); recompute(); validate(); repaint(); } /** * Tracker routines: Call the OC (must be a TrackPainter) to paint the * object track. */ public void paintTrack(final MyGraphics g) { if (!(OC instanceof TrackPainter)) { return; } ((TrackPainter) OC).paint(g, this); } /** * Run through the construction to update all object texts. This should be * called, whenever the name of an item was changed. It will recreate only * those texts, which contain the old name. */ public void updateTexts(final ConstructionObject o, final String oldname) { C.updateTexts(o, oldname); } public Construction getConstruction() { return C; } public void setShowGrid(final boolean flag) { ShowGrid=flag; repaint(); } public void toggleShowGrid() { if (ShowGrid&&!AxesOnly) { AxesOnly=true; } else if (ShowGrid) { ShowGrid=false; } else { AxesOnly=false; ShowGrid=true; } Global.setParameter("showgrid", ShowGrid); Global.setParameter("axesonly", AxesOnly); repaint(); } public boolean showGrid() { return ShowGrid; } /** * Sets the job parameters for the current construction (the last item to * display and the target item). */ public void setJob(final ConstructionObject last) { Job=true; Last=last.getName(); Targets=new Vector(); } public void addJobTarget(final ConstructionObject target, final boolean visible) { if (visible) { Targets.addElement("~"+target.getName()); } else { Targets.addElement(target.getName()); } } public void clearTargets() { Targets=new Vector(); } /** * Cancel the job state o fthe current construction. */ public void clearJob() { Job=false; } /** * Test, if the construction is a valid job. */ public boolean isJob() { final Enumeration e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (C.find(s)==null&&(!s.startsWith("~")||C.find(s.substring(1))==null)) { return false; } } return Job&&C.find(Last)!=null&&Targets.size()>0; } public boolean inTargets(final String s) { final Enumeration e=Targets.elements(); while (e.hasMoreElements()) { if (((String) e.nextElement()).equals(s)) { return true; } } return false; } /** * * This will display the construction as a job (if it is a job). The * construction is copied up to the last element. The copies are marked as * keep objects, so that they cannot be changed. The last object is marked * as the target object, so that it displays in a special color. * * The function can also flip back to the original construction * (flag=false). */ public void displayJob(final boolean flag) { clearSelected(); if (!(OC instanceof SaveJob)) { OC.reset(this); } if (flag) // diplay the job { C.setOriginalOrder(true); if (displayJob()||!isJob()) { return; } final Construction Cnew=new Construction(); Cnew.setXYW(C.getX(), C.getY(), C.getW()); Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setJobTarget(true); o.setJobTarget(false); } e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); Cnew.add(o); o.setKeep(true); if (inTargets(o.getName())||inTargets("~"+o.getName())) { o.setJobTarget(true); } if (o.getName().equals(Last)) { break; } } while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (inTargets(o.getName())||inTargets("~"+o.getName())) { Cnew.add(o); o.setKeep(true); o.setJobTarget(true); } } int n=0; e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (!s.startsWith("~")) { n++; } } TargetO=new ConstructionObject[n]; TargetS=new ConstructionObject[n]; n=0; e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (!s.startsWith("~")) { TargetO[n]=Cnew.find(s); TargetS[n]=null; n++; } } COriginal=C; C=Cnew; C.addAddEventListener(this); C.setComment(COriginal.getJobComment()); recompute(); reloadCD(); repaint(); } else // display the orginal construction again { if (!displayJob()) { return; } C.removeAddEventListener(this); C=COriginal; COriginal=null; final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setKeep(false); o.setJobTarget(false); } C.setOriginalOrder(false); recompute(); reloadCD(); repaint(); } } /** * If the job is solved, this function removes all restrictions. */ public void freeJob() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setKeep(false); o.setJobTarget(false); repaint(); } } /** * Test if the canvas displays a job right now. */ public boolean displayJob() { return COriginal!=null; } // The following functions change the default values of some objects. public void setShowColor(final int i) { ShowColor=i; repaint(); } public int getShowColor() { return ShowColor; } public ObjectConstructor getOC() { return OC; } // Macros: Vector Macros=new Vector(); public Vector getMacros() { return Macros; } public boolean haveMacros() { return Macros.size()>0; } public boolean haveNonprotectedMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (!m.M.isProtected()) { return true; } } return false; } /** * Define a macro. There must be parameters (but not necessarily targets). * The function will display the macro dialog. It will create a new macro, * when the dialog was not aborted. The macro is kept in the Macros vector * by name. */ boolean defineMacro() { clearSelected(); // Read the list of Parameters and Targets from the // construction. This list is filled by the SetParameter and // SetTargets constructors. final Vector P=C.getParameters(); if (P.size()==0) // no parameters { warning(Zirkel.name("definemacro.noparams")); return false; } // Display the macro creation dialog to the user. final DefineMacro d=new DefineMacro(F, this); d.center(getFrame()); d.setVisible(true); // Aborted? if (d.isAborted()||d.getName().equals("")) { return false; } // Define a marco with the name, the comment and the paramters. final Macro m=new Macro(this, d.getName(), d.getComment(), d.getParams()); // If there are no targets, determine everything as // constructed by the paramaters, else only the things needed // to get the targets. try { defineMacro(C, m, d.targetsOnly(), d.invisible(), d.getPromptFor(), d.hideduplicates()); } catch (final ConstructionException e) { warning(e.getDescription()); OC.reset(this); return false; } storeMacro(m, false); OC.reset(this); return true; } /** * Copy a macro with fixed parameters from another macro. */ public Macro copyMacro(final Macro m, final String name, final boolean fixed[]) { try { final Macro macro=(Macro) (m.clone()); macro.Name=name; final boolean f[]=new boolean[fixed.length]; for (int i=0; i0&&!c.ShowAll, c.SuperHide, c.getPromptFor(), true); storeMacro(m, true); } /* * Store the macro in the macro list (or replace the old macro with the same * name * * @param all Replace the macro without asking. */ public void storeMacro(final Macro m, final boolean all) { int i=0; for (i=0; i=Macros.size()) { appendMacro(m); } } public boolean ProtectMacros=false; public MacroMenu MM=null; public void appendMacro(final Macro m) { if (!ReadOnly) { if (ProtectMacros) { m.setProtected(true); } if (MM==null) { MM=new MacroMenu(PM, "", null); } final MacroItem mi=MM.add(m, m.getName()); if (mi.I!=null) { mi.I.addActionListener(this); } Macros.addElement(mi); } else { if (MM==null) { MM=new MacroMenu(null, "", null); } final MacroItem mi=MM.add(m, m.getName()); if (mi.I!=null) { mi.I.addActionListener(this); } Macros.addElement(mi); } } /** * Replace the macro item number i with m. * * @return User wants to replace all subsequent macros. */ public boolean replaceMacro(final Macro m, final int i, final boolean all) { final MacroItem e=(MacroItem) Macros.elementAt(i); if (all) // don't ask { Macros.setElementAt(new MacroItem(m, e.I), i); return true; } else // ask { final ReplaceMacroQuestion d=new ReplaceMacroQuestion(getFrame(), m); d.center(getFrame()); d.setVisible(true); if (d.isNo()) { return false; } final MacroItem newitem=new MacroItem(m, e.I); MM.replace((MacroItem) Macros.elementAt(i), newitem); Macros.setElementAt(newitem, i); return d.isAll(); } } public String MacroCurrentComment; /** * The user has to choose from a list of macros (for running). */ public Macro chooseMacro() { if (Macros.size()==0) { warning(Zirkel.name("definemacro.nomacro")); return null; } final MacroSelectDialog d=new MacroSelectDialog(getFrame(), MM, false); d.setVisible(true); return d.getMacro(); } /** * The user can choose from a list of macros (for saving). * * @return A vector of selected Macros. */ public Vector chooseMacros() { if (Macros.size()==0) { warning(Zirkel.name("definemacro.nomacro")); return null; } final MacroSelectDialog d=new MacroSelectDialog(getFrame(), MM, true); d.setVisible(true); return d.getMacros(); } /** * Run a macro by name. */ public Macro chooseMacro(final String name) { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final Macro m=((MacroItem) e.nextElement()).M; if (m.getName().equals(name)) { return m; } } return null; } public void deleteMacros(final Vector v) { final Enumeration e=v.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); deleteMacro(m); } } public void deleteMacro(final MacroItem m) { Macros.removeElement(m); if (m.I!=null) { m.I.removeActionListener(this); MM.remove(m); } } public void clearMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.I!=null) { m.I.removeActionListener(this); MM.remove(m); } } Macros.removeAllElements(); } public void clearNonprotectedMacros() { final Vector V=new Vector(); final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (!m.M.isProtected()) { V.addElement(m); } } deleteMacros(V); } public void clearProtectedMacros() { final Vector V=new Vector(); final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.M.isProtected()) { V.addElement(m); } } deleteMacros(V); } public void protectMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); m.M.setProtected(true); } } public void renameMacro(final Macro macro, final String name) { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.I!=null&&m.M==macro) { deleteMacro(m); break; } } macro.setName(name); appendMacro(macro); } MacroBar MBar; public void setMacroBar(final MacroBar m) { MBar=m; } public void updateMacroBar() { // if (MBar!=null) { // MBar.update(Macros); // } } // For the prompt in the status line: TextField TF; public void setTextField(final TextField t) { TF=t; } public void setPrompt(final String s) { if (TF!=null) { TF.setText(s); } } // Loading: public void loadRun(final InputStream is) { final BufferedReader in=new BufferedReader(new InputStreamReader(is)); String s="", comment=""; while (true) { try { s=in.readLine(); if (s==null) { break; } int n; if ((n=s.indexOf("//"))>=0) { comment=s.substring(n+2).trim(); s=s.substring(0, n); } else { comment=""; } s=s.trim(); int k=0; if ((k=Interpreter.startTest("macro", s))>=0) { loadMacro(in, s.substring(k).trim()); } else if (!s.equals("")) { C.interpret(this, s, comment); } } catch (final ConstructionException e) { warning(e.getDescription()+" --- "+s); break; } catch (final Exception e) { warning(e.toString()+" --- "+s); e.printStackTrace(); break; } } C.updateCircleDep(); } public void loadMacro(final BufferedReader in, final String name) throws ConstructionException { final Construction c=new Construction(); c.clear(); String s="", comment="", macrocomment=""; boolean inComment=true, newLine=true; while (true) { try { s=in.readLine(); if (s==null) { throw new ConstructionException(Zirkel.name("exception.macroend")); } s=s.trim(); final int n=s.indexOf("//"); if (inComment&&n==0) { final String h=s.substring(n+2).trim(); if (newLine) { macrocomment=macrocomment+h; newLine=false; } else { if (h.equals("")) { macrocomment=macrocomment+"\n"; newLine=true; } else { macrocomment=macrocomment+" "+h; newLine=false; } } continue; } inComment=false; if (n>=0) { comment=s.substring(n+2).trim(); s=s.substring(0, n); } else { comment=""; } s=s.trim(); if (s.equals(Zirkel.name("end"))) { break; } if (s.toLowerCase().equals("end")) { break; } if (!s.equals("")) { c.interpret(this, s, comment); } } catch (final InvalidException e) { } catch (final ConstructionException e) { throw new ConstructionException(e.getDescription()+" --- "+s); } catch (final IOException e) { warning(e.toString()); return; } } defineMacro(name, macrocomment, c); } public double getGridSize() { double gridsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; if (C.getW()*2/gridsize>=30) { gridsize*=5; } if (C.getW()*2/gridsize<10) { gridsize/=2; } return gridsize; } public LatexOutput createBB(final String filename, final int w, final int h, final double dpi) { try { String path=""; if (Global.getParameter("options.fullpath", true)) { path=FileName.pathAndSeparator(filename); } PrintWriter out=new PrintWriter(new FileOutputStream(path+FileName.purefilename(filename)+".bb")); out.println("%%BoundingBox: 0 0 "+w+" "+h); out.close(); out=new PrintWriter(new FileOutputStream(path+FileName.purefilename(filename)+".ztx")); final LatexOutput lout=new LatexOutput(out); lout.open(w, h, dpi, path+FileName.filename(filename)); return lout; } catch (final Exception e) { warning(e.toString()); } return null; } /** * Save picture as PNG on file or copy to clipboard * * @param filename * ("" for clipboard) * @return not failed */ synchronized public boolean savePNG(final String filename, final boolean latex) { LatexOutput lout=null; if (IW==0||I==null) { return false; } if (Global.getParameter("printscale.middle", true)) { savePreviewAsPNG(filename); return true; } double dpi=Global.getParameter("printscale.dpi", 300); if (!Global.getParameter("printscale.sizes", false)) { final int w=Global.getParameter("printscale.w", IW); final int h=Global.getParameter("printscale.h", IH); if (latex) { lout=createBB(filename, w, h, dpi); } final int IWold=IW; IW=w; IH=h; Scale=((double) IW)/IWold; I=createImage(IW, IH); IG=new MyGraphics13(I.getGraphics(), Scale, this, lout); IG.setSize(w, h); double pointsize=PointSize*Scale; double fontsize=FontSize*Scale; if (Scale<1) { if (Global.getParameter("options.minpointsize", false)&&pointsize. */ package rene.zirkel; // file: ZirkelCanvas.java import java.awt.CheckboxMenuItem; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.TextField; import java.awt.datatransfer.Clipboard; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.Enumeration; import java.util.Vector; import java.util.zip.GZIPOutputStream; import rene.dialogs.Warning; import rene.gui.Global; import rene.gui.MyCheckboxMenuItem; import rene.gui.MyMenuItem; import rene.util.FileName; import rene.util.ImageSelection; import rene.util.MyVector; import rene.util.PngEncoder; import rene.util.sort.Sorter; import rene.util.xml.XmlReader; import rene.util.xml.XmlTag; import rene.util.xml.XmlTagPI; import rene.util.xml.XmlTree; import rene.util.xml.XmlWriter; import rene.zirkel.construction.ChangedListener; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionDisplayPanel; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.construction.Interpreter; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.IntersectionConstructor; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.dialogs.AgainQuestion; import rene.zirkel.dialogs.DefineMacro; import rene.zirkel.dialogs.MessageWindow; import rene.zirkel.dialogs.ReplaceMacroQuestion; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.Drawing; import rene.zirkel.graphics.LatexOutput; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.graphics.MyGraphicsEPS; import rene.zirkel.graphics.MyGraphicsFig; import rene.zirkel.graphics.MyGraphicsPDF; import rene.zirkel.graphics.MyGraphicsSvg; import rene.zirkel.graphics.PolygonDrawer; import rene.zirkel.graphics.TrackPainter; import rene.zirkel.listener.AddEventListener; import rene.zirkel.listener.DoneListener; import rene.zirkel.listener.StatusListener; import rene.zirkel.macro.Macro; import rene.zirkel.macro.MacroBar; import rene.zirkel.macro.MacroItem; import rene.zirkel.macro.MacroMenu; import rene.zirkel.macro.MacroRunner; import rene.zirkel.macro.MacroSelectDialog; import rene.zirkel.objects.AngleObject; import rene.zirkel.objects.AreaObject; import rene.zirkel.objects.AxisObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.EquationXYObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.FixedAngleObject; import rene.zirkel.objects.FixedCircleObject; import rene.zirkel.objects.FunctionObject; import rene.zirkel.objects.IntersectionObject; import rene.zirkel.objects.MoveableObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PointonObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.QuadricObject; import rene.zirkel.objects.RayObject; import rene.zirkel.objects.SegmentObject; import rene.zirkel.objects.TwoPointLineObject; import rene.zirkel.objects.UserFunctionObject; import rene.zirkel.structures.CoordinatesXY; import rene.zirkel.tools.AnimatorTool; import rene.zirkel.tools.BinderTool; import rene.zirkel.tools.BreakpointAnimator; import rene.zirkel.tools.EditTool; import rene.zirkel.tools.LabelMover; import rene.zirkel.tools.MagnetTool; import rene.zirkel.tools.MetaMover; import rene.zirkel.tools.MoverTool; import rene.zirkel.tools.ObjectTracker; import rene.zirkel.tools.SaveJob; import rene.zirkel.tools.SetAwayTool; import rene.zirkel.tools.SetCurveCenterTool; import rene.zirkel.tools.SetFixedAngle; import rene.zirkel.tools.SetFixedCircle; import rene.zirkel.tools.SetRangeTool; import rene.zirkel.tools.SetTargetsTool; import rene.zirkel.tools.Tracker; import rene.zirkel.tools.UniversalTracker; import rene.zirkel.tools.ZoomerTool; import atp.sHotEqn; import eric.JGlobals; import eric.JUndo; import eric.controls.JControlsManager; /** * @author Rene Main class, doing most of the work in the C.a.R. application. * This canvas handles mouse and keyboard input, displays the * construction and has tools to save and load constructions. */ public class ZirkelCanvas extends javax.swing.JPanel implements MouseListener, MouseMotionListener, ItemListener, AddEventListener, ActionListener, ChangedListener, MouseWheelListener // the canvas to do the construction { /** * */ private static final long serialVersionUID = 1L; ObjectConstructor OC = new MoverTool(); // the current object constructor Construction C = new Construction(), COriginal; // the construction (collection of Constructor-Objects) StatusListener SL = null; // for displaying a status message public Image I = null; MyGraphics IG; public UniversalTracker UniversalTrack = null; Image Background = null; FontMetrics FM; public double PointSize = 4.0; // Size of a point double MinPointSize = 4.0; // Default minimal point size public double FontSize = 12.0; // Size of font double MinFontSize = 12.0; // Default minimal font size public int IW = 0, IH = 0; // Image and its dimensions public double Xmin, DX, Ymin, DY; boolean ShowHidden = false; // show hidden objects Frame F = new Frame(); boolean ReadOnly; boolean AllowRightMouse = true; public PopupMenu PM; CheckboxMenuItem CheckboxHidden; MenuItem Replay, Empty; boolean Job = false; // this is a job (save as such) String Last = ""; // Last displayed job object Vector Targets = new Vector(); // Target names ConstructionObject TargetO[], TargetS[]; // Target objects and solutions int ShowColor = 0; // 0=all, 1=green etc. (black displays always) static public double // factors for rounding EditFactor = 1000000.0, LengthsFactor = 100.0, AnglesFactor = 1.0; public boolean Visual = Global.getParameter("options.visual", true); boolean All; boolean Interactive = true; public int GridColor = 0, GridThickness = ConstructionObject.THIN; public boolean ShowGrid = false, AxesOnly = false, ShowDots = true, ShowLines = true; public boolean GridLabels = true, GridBold = false, GridLarge = false; public JControlsManager JCM; public JUndo JU = new JUndo(); /** * Initiate an empty construction. The display may have a popup menu (only * for readonly displays). * * @param readonly * User cannot change the construction. * @param replay * Replay option in popup menu. * @param hidden * Show hidden option in popup menu. */ public ZirkelCanvas(final boolean readonly, final boolean replay, final boolean hidden) { ReadOnly = readonly; AllowRightMouse = !readonly; // setLayout(new BoxLayout(this,BoxLayout.X_AXIS)); setLayout(null); UniversalTrack = new UniversalTracker(this); JCM = new JControlsManager(this); if (Global.getParameter("options.nopopupmenu", false)) { PM = null; } else if (ReadOnly) { PM = new PopupMenu(); CheckboxHidden = new MyCheckboxMenuItem(Zirkel.name("popup.hidden")); CheckboxHidden.addItemListener(this); if (hidden) { PM.add(CheckboxHidden); } Replay = new MyMenuItem(Zirkel.name("popup.replay")); Replay.addActionListener(this); if (replay) { PM.add(Replay); } if (hidden || replay) { add(PM); } else { PM = null; } } else { PM = new PopupMenu(); Empty = new MyMenuItem(Zirkel.name("popup.empty")); add(PM); } C.CL = this; clear(); updateDigits(); C.addAddEventListener(this); addMouseWheelListener(this); } public ZirkelCanvas(final boolean readonly) { this(readonly, true, true); } public ZirkelCanvas() { this(false, true, true); } @Override public void paintComponents(final Graphics g) { } public void deleteAxisObjects() { C.deleteAxisObjects(); reloadCD(); repaintCD(); } public void createAxisObjects() { C.createAxisObjects(); } private void setShowHideParameters(final String s, final boolean b) { Global.setParameter("options.point." + s, b); Global.setParameter("options.segment." + s, b); Global.setParameter("options.line." + s, b); Global.setParameter("options.circle." + s, b); Global.setParameter("options.angle." + s, b); Global.setParameter("options.text." + s, b); Global.setParameter("options.locus." + s, b); Global.setParameter("options." + s, b); // setShowNames(true); } public void JSsend(final String s) { if (s.equals("shownames")) { setShowHideParameters("shownames", true); } else if (s.equals("hidenames")) { setShowHideParameters("shownames", false); } else if (s.equals("showvalues")) { setShowHideParameters("showvalues", true); } else if (s.equals("hidevalues")) { setShowHideParameters("showvalues", false); } else { try { C.interpret(this, s); } catch (final Exception ex) { } } } public String JSreceive(final String s) { String r = "ERROR..."; try { double rep; final Expression exp = new Expression(s, C, null); rep = exp.getValue(); r = String.valueOf(rep); } catch (final ConstructionException ex) { ex.printStackTrace(); } return r; } public Dimension UseSize = null; @Override public Dimension getMinimumSize() { if (Background == null || !Global.getParameter("background.usesize", false)) { if (UseSize != null) { return UseSize; } else { return new Dimension(600, 600); } } else { final int iw = Background.getWidth(this); if (iw < 10) { return new Dimension(600, 600); } final int ih = Background.getHeight(this); if (Global.getParameter("background.usewidth", false)) { final int w = getSize().width, h = (int) ((double) ih / iw * w + 0.5); return new Dimension(w, h); } else { return new Dimension(iw, ih); } } } @Override public Dimension getPreferredSize() { return getMinimumSize(); } public void updateDigits() { EditFactor = Math.pow(10, Global.getParameter("digits.edit", 5)); LengthsFactor = Math.pow(10, Global.getParameter("digits.lengths", 5)); AnglesFactor = Math.pow(10, Global.getParameter("digits.angles", 0)); } public void itemStateChanged(final ItemEvent e) { if (e.getSource() == CheckboxHidden) { ShowHidden = CheckboxHidden.getState(); repaint(); } } ZirkelCanvasInterface ZCI; public void setZirkelCanvasListener(final ZirkelCanvasInterface zci) { ZCI = zci; } public String loadImage() { return ZCI.loadImage(); } public Image doLoadImage(final String filename) { return ZCI.doLoadImage(filename); } public void actionPerformed(final ActionEvent e) { if (!Interactive) { return; } if (e.getSource() == Replay) { if (ZCI != null) { ZCI.replayChosen(); } } else { final Enumeration en = Macros.elements(); while (en.hasMoreElements()) { final MacroItem m = (MacroItem) en.nextElement(); if (m.I == e.getSource()) { if (ZCI != null) { ZCI.runMacro(m.M); } break; } } } } // Some transfer functions to compute screen coordinates etc. public double col(final double x) { return (x - Xmin) / DX * IW; } public double row(final double y) { return IH - (y - Ymin) / DY * IH; } public int width() { return IW; } public int height() { return IH; } public double x(final int c) { return Xmin + DX * c / IW; } public double y(final int r) { return Ymin + DY * (IH - r) / IH; } public double dx(final int c) { return DX * c / IW; } public double dy(final int r) { return DY * r / IH; } public double dx(final double c) { return DX * c / IW; } public double dy(final double r) { return DY * r / IH; } public double maxX() { return Xmin + DX; } public double minX() { return Xmin; } public double maxY() { return Ymin + DY; } public double minY() { return Ymin; } public boolean isInside(final double x, final double y) { return x >= Xmin && x < Xmin + DX && y >= Ymin && y < Ymin + DY; } public double dCenter(final double x, final double y) { final double dx = x - (Xmin + DX / 2), dy = y - (Ymin + DY / 2); return Math.sqrt(dx * dx + dy * dy) / Math.max(DX / 2, DY / 2); } public void recompute() { if (IH < IW) { Xmin = C.getX() - C.getW(); DX = C.getW() * 2; DY = DX / IW * IH; Ymin = C.getY() - DY / 2; } else { Ymin = C.getY() - C.getW(); DY = C.getW() * 2; DX = DY / IH * IW; Xmin = C.getX() - DY / 2; } C.setH(DY); if (DX > 0) { C.setPixel(getSize().width / DX); } } DoneListener DL; public void setDoneListener(final DoneListener dl) { DL = dl; } /** * Add an item to the construction and re-paint the construction. */ public void addObject(final ConstructionObject o) // called by the // ObjectConstructor { C.add(o); if (Preview) { o.setIndicated(true); o.setSelectable(false); } C.updateCircleDep(); } /** * A construction added an item. Check, if it solves a problem and notify * the DoneListener, if so. */ public void added(final Construction c, final ConstructionObject o) { if (displayJob() && TargetO.length > 0) { boolean olddone = true; for (int i = 0; i < TargetO.length; i++) { if (TargetS[i] != null && !TargetS[i].isInConstruction()) { TargetS[i] = null; } if (TargetS[i] != null) { continue; } else { olddone = false; } if (TargetO[i].equals(o)) { TargetS[i] = o; } } boolean done = true; for (int i = 0; i < TargetO.length; i++) { if (TargetS[i] == null) { done = false; break; } } if (done && DL != null && !olddone) { repaint(); DL.notifyDone(); freeJob(); } } repaint(); } public boolean check(final Construction c) { final int n = TargetO.length; for (int i = 0; i < n; i++) { TargetS[i] = null; } int found = 0; final Enumeration e = c.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.isKeep()) { continue; } for (int i = 0; i < n; i++) { if (TargetS[i] != null) { continue; } if (o.equals(TargetO[i])) { TargetS[i] = o; found++; break; } } } return found == n; } /** * Check if the solution to the current problem has been found. */ public void check() { if (displayJob() && TargetO.length > 0) { boolean olddone = true; for (int i = 0; i < TargetO.length; i++) { if (TargetS[i] != null && !TargetS[i].isInConstruction()) { TargetS[i] = null; } if (TargetS[i] != null) { continue; } else { olddone = false; } } final boolean done = check(C); if (done && DL != null && !olddone) { repaint(); DL.notifyDone(); freeJob(); } } } int Moved = 0; boolean Dragging = false, RightClicked = false; boolean Control = false; // Control-Taste bei letztem Mausdruck aktiv? public boolean SmartBoardPreview = false; // mouse events: public synchronized void mousePressed(final MouseEvent e) { if (!Interactive) { return; } if (JControlsManager.createControl(this, e)) { return; } SmartBoardPreview = false; clearIndicated(); clearPreview(); repaint(); requestFocus(); Dragging = false; RightClicked = false; Moved = 0; if (e.isMetaDown() && AllowRightMouse) // right mouse button! { if (!ReadOnly) { ConstructionObject o = selectLabel(e.getX(), e.getY()); if (o != null) { Dragging = true; setTool(new LabelMover(OC, this, e.getX(), e.getY(), o, e .isShiftDown())); return; } if (e.isShiftDown() && e.isControlDown()) // hiding shortcut { o = selectObject(e.getX(), e.getY()); if (o == null) { return; } o.toggleHidden(); C.updateCircleDep(); repaint(); return; } if (e.isControlDown()) // edit conditionals { o = selectObject(e.getX(), e.getY()); if (o == null) { return; } JGlobals.EditObject(o, true, false); JGlobals.SelectPropertiesTab(2); // new EditConditionals(getFrame(), o); validate(); repaint(); return; } } final ConstructionObject p = selectImmediateMoveableObject( e.getX(), e.getY()); RightClicked = true; if (p != null) { Dragging = true; setTool(new MetaMover(OC, this, p, e)); return; } else if (!Global.getParameter("options.nomousezoom", false)) // Drag // mit // rechter // Maustaste { if (selectObjects(e.getX(), e.getY()).size() == 0) { setTool(new ZoomerTool(OC, e, this)); } return; } } else // left mouse button! { if (!SmartBoardPreview && Global.getParameter("smartboard", false) && OC.useSmartBoard()) { OC.mouseMoved(e, this, Global.getParameter( "options.indicate.simple", false)); SmartBoardPreview = true; return; } else { Control = e.isControlDown(); OC.mousePressed(e, this); // pass to ObjectConstructor Control = false; } } } public synchronized void mouseReleased(final MouseEvent e) { if (!Interactive) { return; } if (DT != null) { DT.waitReady(); } if (RightClicked) { RightClicked = false; OC.mouseReleased(e, this); if (Moved <= 2 && AllowRightMouse && !ReadOnly) { final MyVector v = selectObjects(e.getX(), e.getY()); if (v.size() > 0) { final ConstructionObject o = select(v, e.getX(), e.getY()); if (o != null) { new EditTool().mousePressed(e, o, this); check(); return; } else { repaintCD(); } return; } } if (Moved <= 2 && PM != null && !Global.getParameter("restricted", false)) { int n = 2; if (ReadOnly || !Global.getParameter("options.doubleclick", false)) { n = 1; } if (e.getClickCount() >= n && (ReadOnly || Macros.size() != 0)) { PM.show(e.getComponent(), e.getX(), e.getY()); } } repaintCD(); return; } if (SmartBoardPreview && Global.getParameter("smartboard", false)) { Control = e.isControlDown(); clearIndicated(); clearPreview(); repaint(); Dragging = false; OC.mousePressed(e, this); SmartBoardPreview = false; mouseReleased(e); return; } if (!Dragging) { OC.mouseReleased(e, this); Dragging = false; repaintCD(); return; } if (Moved <= 1) { if (OC instanceof LabelMover) { ((LabelMover) OC).resetPoint(); OC.mouseReleased(e, this); } else if (OC instanceof MetaMover) { OC.mouseReleased(e, this); if (!ReadOnly) { new EditTool().mousePressed(e, this); } } } else { OC.mouseReleased(e, this); } repaintCD(); check(); Dragging = false; } public synchronized void mouseClicked(final MouseEvent e) { } public synchronized void mouseExited(final MouseEvent e) { if (!Interactive) { return; } clearIndicated(); clearPreview(); repaint(); SmartBoardPreview = false; RightClicked = false; repaintCD(); } public void mouseEntered(final MouseEvent e) { } public synchronized void mouseMoved(final MouseEvent e) { if (!Interactive || !Global.getParameter("options.indicate", true)) { return; } if (Global.getParameter("smartboard", false)) { return; } Count.setAllAlternate(true); OC.mouseMoved(e, this, Global.getParameter("options.indicate.simple", false)); Count.setAllAlternate(false); repaintCD(); } DragThread DT = null; public synchronized void mouseDragged(final MouseEvent e) { if (!Interactive) { return; } if (DT == null) { DT = new DragThread(this); } if (SmartBoardPreview && Global.getParameter("smartboard", false)) { OC.mouseMoved(e, this, Global.getParameter( "options.indicate.simple", false)); } else { DT.mouseDragged(e); Moved++; } repaintCD(); } public synchronized void doMouseDragged(final MouseEvent e) { OC.mouseDragged(e, this); } ConstructionObject LastPaint = null; public void newImage() { I = null; repaint(); } boolean Frozen = false; public void setFrozen(final boolean f) { Frozen = f; } public boolean getFrozen() { return Frozen; } MessageWindow MW; final double PointSizeFactor = 240.0; int CC = 0; // public void repaint(){ // // System.out.print("a "); // // super.repaint(); // StackTraceElement[] trace = new Throwable().getStackTrace(); // if (!trace[1].equals("javax.swing.JComponent")) super.repaint(); // // // for (int i=0;i 0) { final ConstructionObject os[] = new ConstructionObject[n]; e = C.elements(); n = 0; while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e .nextElement(); if (o.HasZ) { os[n++] = o; } } Sorter.sort(os); for (int i = 0; i < n; i++) { os[i].paint(IG, this); os[i].IsDrawn = true; } } // paint non-selected objects e = C.elements(); final Vector Pts = new Vector(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (!o.selected() && !o.IsDrawn) { if (o instanceof rene.zirkel.objects.PointObject) { Pts.add(o); } else { o.paint(IG, this); o.IsDrawn = true; } } if (o == LastPaint) { break; } } // paint selected objects e = C.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (!o.IsDrawn) { if (o instanceof rene.zirkel.objects.PointObject) { Pts.add(o); } else { o.paint(IG, this); o.IsDrawn = true; } } if (o == LastPaint) { break; } } e = Pts.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); o.paint(IG, this); o.IsDrawn = true; } if (LastPaint == null) { paintTrack(IG); } if (Interactive && IndicatePoint != null) { IndicatePoint.paint(IG, this); } time = System.currentTimeMillis() - time; if (time > 250 && PolygonDrawer.step < 50) { PolygonDrawer.step = PolygonDrawer.step * 2; } if (time < 100 && PolygonDrawer.step > 4) { PolygonDrawer.step = PolygonDrawer.step / 2; } paintDrawings(IG); // JMacrosTools.CurrentJZF.JCM.paintControls(IG.getGraphics()); } void dopaintFig(final MyGraphicsFig IG) { if (ShowGrid) { paintGrid(IG); } IG.pushLayer(true); int layer = 0; while (true) { IG.pushLayer(); int l = 0; Enumeration e = C.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e .nextElement(); if (o == LastPaint) { break; } if (l == layer && o.isBack()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l > layer) { break; } } } if (l < layer) { break; } l = 0; e = C.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e .nextElement(); if (o == LastPaint) { break; } if (l == layer && !o.isBack() && !o.selected()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l > layer) { break; } } } l = 0; e = C.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e .nextElement(); if (o == LastPaint) { break; } if (l == layer && !o.isBack() && o.selected()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l > layer) { break; } } } layer++; } IG.pushLayer(false); if (LastPaint == null) { paintTrack(IG); } } int xg[] = new int[64], yg[] = new int[64]; public void setGrid() { ShowGrid = Global.getParameter("showgrid", false); AxesOnly = Global.getParameter("axesonly", false); ShowDots = Global.getParameter("showdots", false); ShowLines = Global.getParameter("showlines", false); GridThickness = Global.getParameter("grid.thickness", ConstructionObject.THIN); GridColor = Global.getParameter("grid.colorindex", 0); GridBold = Global.getParameter("grid.bold", false); GridLarge = Global.getParameter("grid.large", false); GridLabels = Global.getParameter("grid.labels", true); } /** * Paint axes and grid. * * @param IG */ void paintGrid(final MyGraphics IG) { if (GridThickness == ConstructionObject.NORMAL) { IG.setColor(ZirkelFrame.Colors[Global.getParameter( "grid.colorindex", 0)]); } else { IG.setColor(ZirkelFrame.LightColors[GridColor]); } IG.setFont(GridLarge, GridBold); final double gridsize = getGridSize(); int dd = IH / 200; if (dd < 1) { dd = 1; } double x1 = Math.floor((C.getX() - C.getW()) / gridsize - 1) * gridsize; int xi = 0; while (x1 < (C.getX() + C.getW()) && xi < 64) { final int c = (int) col(x1); xg[xi++] = c; x1 += gridsize; } double y1 = Math.floor((C.getY() - C.getW()) / gridsize - 1) * gridsize; int yi = 0; while (y1 < (C.getY() + C.getW()) && yi < 64) { final int r = (int) row(y1); yg[yi++] = r; y1 += gridsize; } for (int i = 0; i < xi; i++) { IG.drawAxisLine(xg[i], 0, xg[i], IH); } for (int j = 0; j < yi; j++) { IG.drawAxisLine(0, yg[j], IW, yg[j]); } // for (int i=0; i C.getX() - C.getW()) { final int c = (int) col(0); if (GridThickness != ConstructionObject.THICK) { IG.drawLine(c, 0, c, IH); } else { IG.drawThickLine(c, 0, c, IH); } } if (0 < C.getY() + C.getW() && 0 > C.getY() - C.getW()) { final int r = (int) row(0); if (GridThickness != ConstructionObject.THICK) { IG.drawLine(0, r, IW, r); } else { IG.drawThickLine(0, r, IW, r); } } } dd = dd * 2; double labelsize = Math.pow(10, Math.floor(Math.log(C.getW() * 2) / Math.log(10))) / 10; while (C.getW() * 2 / labelsize >= 10) { labelsize *= 10; } if (C.getW() * 2 / labelsize < 5) { labelsize /= 2; } final FontMetrics fm = IG.getFontMetrics(); final int FH = fm.getHeight(); x1 = Math.floor((C.getX() - C.getW()) / labelsize - 1) * labelsize; int lh = (int) row(0); int bottomshift = FH + 2; if (lh < 0 || lh > IH) { lh = IH; bottomshift = -7; } while (x1 < (C.getX() + C.getW())) { final int c = (int) col(x1); final String s = format(x1); if (s.length() > 0) { if (GridLabels) { IG.drawString(s, c - fm.stringWidth(s) / 2, lh + bottomshift); } IG.drawLine(c, lh - dd, c, lh + dd); } x1 += labelsize; } boolean left = true; int lw = (int) col(0); if (lw < 0 || lw > IW - 20) { lw = 0; left = false; } y1 = Math.floor((C.getY() - C.getW()) / labelsize - 1) * labelsize; while (y1 < (C.getY() + C.getW())) { final int r = (int) row(y1); final String s = format(y1); if (s.length() > 0) { final int leftshift = (left) ? -fm.stringWidth(s) - 5 : 8; if (GridLabels) { IG.drawString(s, lw + leftshift, r + FH / 2 - 2); } IG.drawLine(lw - dd, r, lw + dd, r); } y1 += labelsize; } } /** * Paint only the coordinate axes (no grid) * * @param IG */ void paintAxes(final MyGraphics IG) { IG.setAntialiasing(false); if (GridThickness == ConstructionObject.NORMAL) { IG.setColor(ZirkelFrame.Colors[GridColor]); } else { IG.setColor(ZirkelFrame.LightColors[GridColor]); } IG.setFont(GridLarge, GridBold); final double gridsize = getGridSize(); double x1 = Math.floor((C.getX() - C.getW()) / gridsize - 1) * gridsize; final int r0 = (int) row(0); int dd = IH / 200; if (dd < 1) { dd = 1; } while (x1 < (C.getX() + C.getW())) { final int c = (int) col(x1); IG.drawLine(c, r0 - dd, c, r0 + dd); x1 += gridsize; } double y1 = Math.floor((C.getY() - C.getW()) / gridsize - 1) * gridsize; final int c0 = (int) col(0); while (y1 < (C.getY() + C.getW())) { final int r = (int) row(y1); IG.drawLine(c0 - dd, r, c0 + dd, r); y1 += gridsize; } if (GridThickness != ConstructionObject.INVISIBLE) { if (0 < C.getX() + C.getW() && 0 > C.getX() - C.getW()) { final int c = (int) col(0); if (GridThickness != ConstructionObject.THICK) { IG.drawLine(c, 0, c, IH); } else { IG.drawThickLine(c, 0, c, IH); } } if (0 < C.getY() + C.getW() && 0 > C.getY() - C.getW()) { final int r = (int) row(0); if (GridThickness != ConstructionObject.THICK) { IG.drawLine(0, r, IW, r); } else { IG.drawThickLine(0, r, IW, r); } } } dd = dd * 2; double labelsize = Math.pow(10, Math.floor(Math.log(C.getW() * 2) / Math.log(10))) / 10; while (C.getW() * 2 / labelsize >= 10) { labelsize *= 10; } if (C.getW() * 2 / labelsize < 5) { labelsize /= 2; } final FontMetrics fm = IG.getFontMetrics(); final int FH = fm.getHeight(); x1 = Math.floor((C.getX() - C.getW()) / labelsize - 1) * labelsize; int lh = (int) row(0); int bottomshift = FH + 2; if (lh < 0 || lh > IH) { lh = IH; bottomshift = -7; } while (x1 < (C.getX() + C.getW())) { final int c = (int) col(x1); final String s = format(x1); if (s.length() > 0) { if (GridLabels) { IG.drawString(s, c - fm.stringWidth(s) / 2, lh + bottomshift); } IG.drawLine(c, lh - dd, c, lh + dd); } x1 += labelsize; } boolean left = true; int lw = (int) col(0); if (lw < 0 || lw > IW - 20) { lw = 0; left = false; } y1 = Math.floor((C.getY() - C.getW()) / labelsize - 1) * labelsize; while (y1 < (C.getY() + C.getW())) { final int r = (int) row(y1); final String s = format(y1); if (s.length() > 0) { final int leftshift = (left) ? -fm.stringWidth(s) - 5 : 8; if (GridLabels) { IG.drawString(s, lw + leftshift, r + FH / 2 - 2); } IG.drawLine(lw - dd, r, lw + dd, r); } y1 += labelsize; } IG.setAntialiasing(true); } public double pointSize() { return PointSize; } public double SelectionPointFactor = Global.getParameter("selectionsize", 1.5); public double selectionSize() { return SelectionPointFactor * PointSize; } public double Scale = 1.0; public int scale(final int x) { return (int) (Scale * x); } static char c[] = new char[20]; int nc; public String format(double x) { // double xx=x; nc = 0; boolean minus = false; if (x < -1e-12) { minus = true; x = -x; } x += 1e-12; final double h = x - Math.floor(x); if (rekformat(h, 8)) { c[nc++] = '.'; } while (x >= 1) { final double s = Math.floor(x / 10); c[nc++] = (char) ('0' + (int) (x - s * 10)); x = s; } if (nc > 0 && minus) { c[nc++] = '-'; } // revert c: for (int i = 0; i < nc / 2; i++) { final char hc = c[nc - 1 - i]; c[nc - 1 - i] = c[i]; c[i] = hc; } // System.out.println(xx+" -> "+new String(c,0,nc)); return new String(c, 0, nc); } boolean rekformat(double h, final int k) { h = h * 10; final double x = Math.floor(h); if (k == 0) { final int i = (int) x; if (i > 0) { c[nc++] = (char) ('0' + i); return true; } else { return false; } } else { final int i = (int) x; if (rekformat(h - x, k - 1) || i > 0) { c[nc++] = (char) ('0' + i); return true; } else { return false; } } } @Override public void update(final Graphics g) { paint(g); } public void paintUntil(final ConstructionObject o) { if (LastPaint == o) { return; } LastPaint = o; repaint(); } // validate all elements @Override public void validate() { dovalidate(); if (OC instanceof TrackPainter) { ((TrackPainter) OC).validate(this); } } /** * Synchronized update of the construction to avoid a repaint during update. */ synchronized public void dovalidate() { C.dovalidate(); } // selection routines: // This vector is used by ALL selection and indication routines for // performance reasons. MyVector V = new MyVector(); public void sort(final MyVector V) { if (V.size() < 2) { return; } Sorter.QuickSort(V.getArray(), 0, V.size() - 1); } /** * Slow function to resort a vector by the number of each element in the * construction. */ public void sortRow(final MyVector V) { final ConstructionObject o[] = new ConstructionObject[V.size()]; V.copyInto(o); V.removeAllElements(); final Enumeration e = C.elements(); while (e.hasMoreElements()) { final ConstructionObject oo = (ConstructionObject) e.nextElement(); for (final ConstructionObject element : o) { if (element == oo) { V.addElement(oo); break; } } } } /** * select a circle or a line. **/ public ConstructionObject selectCircleLine(final int x, final int y, final boolean multiple) // select a circle or a line { final MyVector v = selectCircleLineObjects(x, y, multiple, false); return select(v); } public ConstructionObject selectCircleLine(final int x, final int y) // select // a // circle // or // a // line { return selectCircleLine(x, y, true); } /** * select a circle or a line. **/ public ConstructionObject selectPointonObject(final int x, final int y, final boolean multiple) // select a circle or a line { final MyVector v = selectPointonObjects(x, y, multiple, false); return select(v); } public ConstructionObject selectPointonObject(final int x, final int y) // select // a // circle // or // a // line { return selectPointonObject(x, y, true); } /** * Select all possible circles or lines at x,y. If a matching non-filled * object is found above a filled object, the latter is never selected. * * @param multiple * determines, if it is possible to select selected objects. * @param testlocal * determines, if objects that look locally like already selected * objects should be omitted. */ public MyVector selectCircleLineObjects(final int x, final int y, final boolean multiple, final boolean testlocal) // select a circle // or a line { final Enumeration e = C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.isSelectable() && (o instanceof PrimitiveLineObject || o instanceof PrimitiveCircleObject) && o.nearto(x, y, true, this) && (multiple || !o.selected())) { if (testlocal) { final Enumeration ev = V.elements(); while (ev.hasMoreElements()) { final ConstructionObject ov = (ConstructionObject) ev .nextElement(); if (o.locallyLike(ov)) { o = null; break; } } } if (o != null) { V.addElement(o); } } } return V; } public MyVector selectCircleLineObjects(final int x, final int y, final boolean multiple) { return selectCircleLineObjects(x, y, multiple, false); } public MyVector selectCircleLineObjects(final int x, final int y) { return selectCircleLineObjects(x, y, true, false); } /** * Select all possible object at x,y that can carry a point. * * @param multiple * determines, if it is possible to select selected objects. * @param testlocal * determines, if objects that look locally like already selected * objects should be omitted. */ public MyVector selectPointonObjects(final int x, final int y, final boolean multiple, final boolean testlocal) // select a circle // or a line { final Enumeration e = C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.isSelectable() && (o instanceof PointonObject) && o.nearto(x, y, true, this) && (multiple || !o.selected())) { if (testlocal) { final Enumeration ev = V.elements(); while (ev.hasMoreElements()) { final ConstructionObject ov = (ConstructionObject) ev .nextElement(); if (o.locallyLike(ov)) { o = null; break; } } } if (o != null) { V.addElement(o); } } } return V; } public MyVector selectPointonObjects(final int x, final int y, final boolean multiple) { return selectPointonObjects(x, y, multiple, false); } public MyVector selectPointonObjects(final int x, final int y) { return selectPointonObjects(x, y, true, false); } /** * Select all selectable objects near to x,y. * * @param multiple * allows multiple selections. **/ public MyVector selectObjects(final int x, final int y, final boolean multiple) { final Enumeration e = C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.isSelectable() && o.nearto(x, y, this) && (multiple || !o.selected())) { V.addElement(o); } } return V; } public MyVector selectObjects(final int x, final int y) { return selectObjects(x, y, true); } /** * Select a single object near x,y. **/ public ConstructionObject selectObject(final int x, final int y, final boolean multiple) { final MyVector v = selectObjects(x, y, multiple); return select(v, x, y); } public ConstructionObject selectObject(final int x, final int y) { return selectObject(x, y, true); } /** * select all constructable objects near x,y. **/ public MyVector selectConstructableObjects(final int x, final int y, final boolean multiple) // select an enumeration of objects { final Enumeration e = C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.valid() && o.isFlag() && o.nearto(x, y, this) && (multiple || !o.selected())) { V.addElement(o); } } return V; } public MyVector selectConstructableObjects(final int x, final int y) { return selectConstructableObjects(x, y, true); } /** * select a single constructable object near x,y. **/ public ConstructionObject selectConstructableObject(final int x, final int y) { final MyVector v = selectConstructableObjects(x, y, true); return select(v, x, y); // user determines } /** * Select a single line, segment, ray, perp., paral. or fixed angle near * x,y. **/ public PrimitiveLineObject selectLine(final int x, final int y, final boolean multiple) { selectLineObjects(x, y, multiple); return (PrimitiveLineObject) select(V); } public void selectLineObjects(final int x, final int y, final boolean multiple) { final Enumeration e = C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.isSelectable() && (o instanceof PrimitiveLineObject) && o.nearto(x, y, this) && (multiple || !o.selected())) { V.addElement(o); } } } public PrimitiveLineObject selectLine(final int x, final int y) { return selectLine(x, y, true); } /** * Select a point or a line (for the object tracker). */ public void selectPointsOrLines(final int x, final int y, final boolean multiple) { final Enumeration e = C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.isSelectable() && (o instanceof PrimitiveLineObject || o instanceof PointObject) && o.nearto(x, y, this) && (multiple || !o.selected())) { V.addElement(o); } } } /** * Select a single line, segment, or ray near x,y **/ public TwoPointLineObject selectTwoPointLine(final int x, final int y, final boolean multiple) { selectTwoPointLines(x, y, multiple); return (TwoPointLineObject) select(V); } public void selectTwoPointLines(final int x, final int y, final boolean multiple) { final Enumeration e = C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.isSelectable() && (o instanceof TwoPointLineObject) && o.nearto(x, y, this) && (multiple || !o.selected())) { V.addElement(o); } } } public TwoPointLineObject selectTwoPointLine(final int x, final int y) { return selectTwoPointLine(x, y, true); } /** * Select a single segment near x,y **/ public SegmentObject selectSegment(final int x, final int y, final boolean multiple) { selectSegments(x, y, multiple); return (SegmentObject) select(V); } public void selectSegments(final int x, final int y, final boolean multiple) { final Enumeration e = C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.isSelectable() && (o instanceof SegmentObject) && o.nearto(x, y, this) && (multiple || !o.selected())) { V.addElement(o); } } } public SegmentObject selectSegment(final int x, final int y) { return selectSegment(x, y, true); } public boolean isMultipleAcceptedObject(final ConstructionObject o) { boolean b = o instanceof AreaObject; b = b || o instanceof PrimitiveLineObject; b = b || o instanceof PrimitiveCircleObject; b = b || o instanceof QuadricObject; b = b || o instanceof eric.JLocusTrackObject; return b; } public void selectMultipleFinals(final int x, final int y, final boolean multiple) { final Enumeration e = C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.isSelectable() && (o instanceof PointObject) && o.nearto(x, y, this) && (multiple || !o.selected())) { V.removeAllElements(); return; } if (o.isSelectable() && (isMultipleAcceptedObject(o)) && o.nearto(x, y, this) && (multiple || !o.selected())) { V.addElement(o); } } if (V.size() > 1) V.removeAllElements(); } public ConstructionObject selectMultipleFinal(final int x, final int y, final boolean multiple) { selectMultipleFinals(x, y, multiple); return (ConstructionObject) select(V); } /** * Select a single ray near x,y **/ public RayObject selectRay(final int x, final int y, final boolean multiple) { selectRays(x, y, multiple); return (RayObject) select(V); } public void selectRays(final int x, final int y, final boolean multiple) { final Enumeration e = C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.isSelectable() && (o instanceof RayObject) && o.nearto(x, y, this) && (multiple || !o.selected())) { V.addElement(o); } } } public RayObject selectRay(final int x, final int y) { return selectRay(x, y, true); } /** * Select a circle near x,y. A non-filled object is preferred before a * filled object. **/ public PrimitiveCircleObject selectCircle(final int x, final int y, final boolean multiple) { selectCircles(x, y, multiple); return (PrimitiveCircleObject) select(V); } public void selectCircles(final int x, final int y, final boolean multiple) { Enumeration e = C.elements(); V.removeAllElements(); boolean haveNotFilled = false; while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.isSelectable() && (o instanceof PrimitiveCircleObject) && o.nearto(x, y, this) && (multiple || !o.selected())) { V.addElement(o); if (!o.isFilledForSelect()) { haveNotFilled = true; } } } if (haveNotFilled) { e = V.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e .nextElement(); if (o.isFilledForSelect()) { V.removeElement(o); } } } } public PrimitiveCircleObject selectCircle(final int x, final int y) { return selectCircle(x, y, true); } /** * Select a point near x,y. **/ public PointObject selectPoint(final int x, final int y, final boolean multiple) { selectPointObjects(x, y, multiple); return (PointObject) select(V); } public void selectPointObjects(final int x, final int y, final boolean multiple) { final Enumeration e = C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.isSelectable() && o instanceof PointObject && o.nearto(x, y, this) && (multiple || !o.selected())) { V.addElement(o); } } } public PointObject selectPoint(final int x, final int y) { return selectPoint(x, y, true); } public PointObject selectPoint(final int x, final int y, final boolean multiple, final ConstructionObject until) { selectPointObjects(x, y, multiple, until); return (PointObject) select(V); } public void selectPointObjects(final int x, final int y, final boolean multiple, final ConstructionObject until) { final Enumeration e = C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o == until) { break; } if (o.isSelectable() && o instanceof PointObject && o.nearto(x, y, this) && (multiple || !o.selected())) { V.addElement(o); } } } public PointObject selectPoint(final int x, final int y, final ConstructionObject until) { return selectPoint(x, y, true, until); } boolean NewPoint = false; public boolean isNewPoint() { return NewPoint; } /** * Select a point, and create a new point, if necessary. Even creates an * intersection, or a point bound to an object, if possible. If enabled, the * user is asked for confirmation in these cases. The variable NewPoint is * set to true, if the point was indeed created. * * @param multiple * determines, if multiple selections are possible. * @param any * determines, if the first point should be used. **/ public PointObject selectCreatePoint(final int x, final int y, final boolean multiple, final boolean any) { NewPoint = false; if (Preview) { final PointObject p = new PointObject(C, x(x), y(y)); addObject(p); p.setSuperHidden(true); PreviewObject = p; return p; } // User selects a known point: final Enumeration e = C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.isSelectable() && o instanceof PointObject && o.nearto(x, y, this) && (multiple || !o.selected())) { V.addElement(o); } sort(V); } if (V.size() > 0) { if (any) { return (PointObject) (V.elementAt(0)); } final ConstructionObject o = select(V, Control || !Global.getParameter("options.indicate", true)); if (o != null) { return (PointObject) o; } return null; } // User creates a new point: ConstructionObject oc = tryCreateIntersection(x, y, true); if (oc != null) { final PointObject o = (PointObject) oc; // o.setDefaults(); // if (o.showName()) renameABC(o,false,false); return o; } if (!IntersectionYes) { return null; } final MyVector w = selectPointonObjects(x, y, true, false); filter(w, x, y, true); if (w.size() > 0) { oc = select(w, !Control); if (oc == null) { return null; } if (oc != null) { boolean yes = true; if (Global.getParameter("options.pointon", false)) { final AgainQuestion q = new AgainQuestion(F, Zirkel .name("question.pointon"), Zirkel .name("question.title")); q.center(F); q.setVisible(true); yes = q.yes(); Global.setParameter("options.pointon", q.again()); } if (yes) { final PointObject o = new PointObject(C, x(x), y(y), oc); // if (ShowGrid&&!Global.getParameter("grid.leftsnap", // false)) { // o.snap(this); // } o.setUseAlpha(true); addObject(o); validate(); o.setDefaults(); // rename Point on object, if showname // if (o.showName()) renameABC(o,false,false); NewPoint = true; return o; } else { return null; } } } final PointObject p = new PointObject(C, x(x), y(y)); if (ShowGrid) { p.snap(this); } addObject(p); p.setDefaults(); // rename Point, if showname // if (p.showName()) renameABC(p,false,false); NewPoint = true; return p; } boolean IntersectionYes = false; public ConstructionObject tryCreateIntersection(final int x, final int y, final boolean ask) { final MyVector w = selectPointonObjects(x, y, true, true); sort(w); IntersectionYes = true; if (w.size() < 2) { return null; } final ConstructionObject P1 = (ConstructionObject) w.elementAt(0); final ConstructionObject P2 = (ConstructionObject) w.elementAt(1); if (!(P1 instanceof PointonObject && P2 instanceof PointonObject)) { return null; } if (!((PointonObject) P1).canInteresectWith(P2) || !((PointonObject) P2).canInteresectWith(P1)) { return null; } final IntersectionObject o[] = IntersectionConstructor.construct(P1, P2, C); if (o.length == 1 && !o[0].valid()) { return null; } if (o.length == 2 && !o[0].valid() && !o[1].valid()) { return null; } if (ask && Global.getParameter("options.intersection", false)) { final AgainQuestion q = new AgainQuestion(F, Zirkel .name("question.intersection"), Zirkel .name("question.title")); q.center(F); q.setVisible(true); IntersectionYes = q.yes(); Global.setParameter("options.intersection", q.again()); } if (IntersectionYes) { if (o.length == 1 || !o[1].valid()) { addObject(o[0]); o[0].autoAway(); o[0].validate(x(x), y(y)); validate(); o[0].setDefaults(); o[0].setRestricted(getRestricted()); return o[0]; } if (!o[0].valid()) { addObject(o[1]); o[1].autoAway(); validate(); o[1].setDefaults(); o[1].setRestricted(getRestricted()); return o[1]; } IntersectionObject oc = o[0]; final double d0 = o[0].distanceTo(x, y, this), d1 = o[1] .distanceTo(x, y, this); if (d1 < d0) { oc = o[1]; } addObject(oc); oc.autoAway(); oc.validate(x(x), y(y)); validate(); oc.setDefaults(); oc.setRestricted(getRestricted()); NewPoint = true; return oc; } else { return null; } } public PointObject selectCreatePoint(final int x, final int y) { return selectCreatePoint(x, y, true, false); } public PointObject selectCreatePoint(final int x, final int y, final boolean multiple) { return selectCreatePoint(x, y, multiple, false); } /** * Select a moveable point at x,y. Ask user, if necessary. **/ public ConstructionObject selectMoveablePoint(final int x, final int y) { final ConstructionObject s = findSelectedObject(); if (s instanceof PointObject && ((MoveableObject) s).moveable() && s.nearto(x, y, this)) { return s; } V.removeAllElements(); final Enumeration e = C.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.isSelectable() && (o instanceof PointObject) && ((MoveableObject) o).moveable() && o.nearto(x, y, this)) { V.addElement(o); } } if (V.size() == 1) { return (ConstructionObject) V.elementAt(0); } final ConstructionObject o = select(V); if (o != null) { o.setSelected(true); } return null; } /** * Select a point with a selector, provided by the calling constructor. **/ public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel, final ConstructionObject until, final boolean choice) { V.removeAllElements(); final Enumeration e = C.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o == until) { break; } if (o.isSelectable() && sel.isAdmissible(this, o) && o.nearto(x, y, this)) { V.addElement(o); } } if (V.size() == 1) { return (ConstructionObject) V.elementAt(0); } if (!choice) { if (V.size() > 0) { return (ConstructionObject) V.elementAt(0); } else { return null; } } final ConstructionObject o = select(V, x, y); return o; } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel, final ConstructionObject until) { return selectWithSelector(x, y, sel, until, true); } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel, final boolean choice) { return selectWithSelector(x, y, sel, null, choice); } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel) { return selectWithSelector(x, y, sel, null, true); } /** * Select a moveable point at x,y. Don't ask user, take first. **/ public ConstructionObject selectImmediateMoveablePoint(final int x, final int y) { final Enumeration e = C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.isSelectable() && o instanceof PointObject && ((MoveableObject) o).moveable() && o.nearto(x, y, this)) { V.addElement(o); } } if (V.size() == 0) { return null; } return (ConstructionObject) V.elementAt(0); } /** * Select a moveable object at x,y. **/ public ConstructionObject selectMoveableObject(final int x, final int y) { final ConstructionObject s = findSelectedObject(); if (s instanceof MoveableObject && ((MoveableObject) s).moveable() && s.nearto(x, y, this)) { return s; } selectMoveableObjects(x, y); if (V.size() == 1) { return (ConstructionObject) V.elementAt(0); } final ConstructionObject o = select(V); if (o != null) { if (!Global.getParameter("options.choice", true)) { return o; } o.setSelected(true); } return null; } public void selectMoveableObjects(final int x, final int y, final boolean control) { V.removeAllElements(); final ConstructionObject s = findSelectedObject(); if (s instanceof MoveableObject && ((MoveableObject) s).moveable() && s.nearto(x, y, this)) { V.addElement(s); return; } else if (control && s instanceof FixedCircleObject && s.nearto(x, y, this) && ((FixedCircleObject) s).fixedByNumber()) { V.addElement(s); return; } else if (control && s instanceof FixedAngleObject && s.nearto(x, y, this) && ((FixedAngleObject) s).fixedByNumber()) { V.addElement(s); return; } final Enumeration e = C.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (!control && o.isSelectable() && o instanceof MoveableObject && ((MoveableObject) o).moveable() && o.nearto(x, y, this)) { V.addElement(o); } else if (control && o instanceof FixedCircleObject && o.nearto(x, y, this) && ((FixedCircleObject) o).fixedByNumber()) { V.addElement(o); } else if (control && o instanceof FixedAngleObject && o.nearto(x, y, this) && ((FixedAngleObject) o).fixedByNumber()) { V.addElement(o); } } filter(V, x, y); } public void selectMoveableObjects(final int x, final int y) { selectMoveableObjects(x, y, false); } /** * Select a moveable object at x,y. Don't ask user, take first. **/ public ConstructionObject selectImmediateMoveableObject(final int x, final int y) { final Enumeration e = C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.isSelectable() && o instanceof MoveableObject && ((MoveableObject) o).moveable() && o.nearto(x, y, this)) { V.addElement(o); } } filter(V, x, y); if (V.size() == 0) { return null; } return (ConstructionObject) V.elementAt(0); } /** * try to determine the unique objects that are near coordinates x,y and * delete all others from the vector v. **/ public void filter(final MyVector v, final int x, final int y, final boolean choice) { boolean HasPoints = false, HasNotFilled = false; Enumeration e = v.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o instanceof PointObject) { HasPoints = true; } if (!o.isFilledForSelect()) { HasNotFilled = true; } } if (HasPoints) { e = v.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e .nextElement(); if (!o.onlynearto(x, y, this)) { v.removeElement(o); } } } else if (HasNotFilled) { e = v.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e .nextElement(); if (o.isFilledForSelect()) { v.removeElement(o); } } } sort(v); if (!choice) { v.truncate(1); } } public void filter(final MyVector v, final int x, final int y) { filter(v, x, y, Global.getParameter("options.choice", true) || Control); } /** * user must select an object in the selection dialog, unless the selection * is unique anyway, or the filter determines that the selection is unique. **/ public ConstructionObject select(final MyVector v, final int x, final int y, final boolean choice) { if (v.size() == 0) { return null; } if (v.size() == 1) { return (ConstructionObject) v.elementAt(0); } filter(v, x, y); if (v.size() == 1) { return (ConstructionObject) v.elementAt(0); } if (!choice) { return (ConstructionObject) v.elementAt(0); } sortRow(V); RightClicked = false; final eric.JSelectPopupDialog d = new eric.JSelectPopupDialog(F, this, v); final ConstructionObject o = d.getConstructionObject(); d.doclose(); return o; } public ConstructionObject select(final MyVector v, final int x, final int y) { return select(v, x, y, Global.getParameter("options.choice", true) || Control); } /** * user must select an object in the selection dialog, unless the selection * is unique anyway. **/ public ConstructionObject select(final MyVector v, final boolean choice) { if (v.size() == 0) { return null; } if (v.size() == 1) { return (ConstructionObject) v.elementAt(0); } // if (!choice) return (ConstructionObject)v.elementAt(0); sortRow(V); RightClicked = false; final eric.JSelectPopupDialog d = new eric.JSelectPopupDialog(F, this, v); final ConstructionObject o = d.getConstructionObject(); d.doclose(); return o; } public ConstructionObject select(final MyVector v) { return select(v, Global.getParameter("options.choice", true) || Control); } /** * select the label of a point, i.e. a point, which is set by the user * * @return the first label found **/ public ConstructionObject selectLabel(final int x, final int y) { final Enumeration e = C.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.isSelectable() && o.textcontains(x, y, this)) { return o; } } return null; } public ConstructionObject findSelectedObject() { final Enumeration e = C.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.selected()) { return o; } } return null; } // Indication functions MyVector Indicated = new MyVector(); PointObject IndicatePoint = null; public void indicate(final MyVector v, final boolean showname) { if (v.size() == 1) { if (showname) { setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); } else if (v.elementAt(0) instanceof PointObject) { setCursor(new Cursor(Cursor.HAND_CURSOR)); } } else { setCursor(Cursor.getDefaultCursor()); } if (Indicated.equalsIdentical(v)) { return; } Enumeration e = Indicated.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setIndicated(false); } Indicated.removeAllElements(); e = v.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); Indicated.addElement(o); o.setIndicated(true, showname); } repaint(); } public void indicate(final MyVector v) { indicate(v, false); } public void clearIndicated() { IndicatePoint = null; if (Indicated.size() == 0) { return; } final Enumeration e = Indicated.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setIndicated(false); } Indicated.removeAllElements(); setCursor(Cursor.getDefaultCursor()); repaint(); } boolean Preview = false; ConstructionObject LastNonPreview = null; MoveableObject PreviewObject = null; public void movePreview(final MouseEvent e) { if (PreviewObject != null) { PreviewObject.move(x(e.getX()), y(e.getY())); validate(); repaint(); } } public void prepareForPreview(final MouseEvent e) { LastNonPreview = C.last(); Preview = true; } public boolean isPreview() { return Preview; } public void clearPreview() { if (!Preview) { return; } C.clearAfter(LastNonPreview); LastNonPreview = null; PreviewObject = null; Preview = false; Count.fixAll(false); } public void setPreviewObject(final MoveableObject o) { PreviewObject = o; } public ConstructionObject indicateTryCreateIntersection(final int x, final int y, final boolean ask) { final MyVector w = selectPointonObjects(x, y, true, true); sort(w); IntersectionYes = true; if (w.size() < 2) { return null; } final IntersectionObject o[] = IntersectionConstructor.construct( (ConstructionObject) w.elementAt(0), (ConstructionObject) w .elementAt(1), C); if (o.length == 1 && !o[0].valid()) { return null; } if (o.length == 2) { if (!o[1].valid()) { if (!o[0].valid()) { return null; } } else { final IntersectionObject h = o[0]; o[0] = o[1]; o[1] = h; } } IntersectionObject oc = o[0]; if (o.length == 2 && o[1].valid()) { final double d0 = o[0].distanceTo(x, y, this), d1 = o[1] .distanceTo(x, y, this); if (d1 < d0) { oc = o[1]; } } // oc.setDefaults(); oc.setIndicated(true); oc.setType(PointObject.CIRCLE); oc.setColorType(ConstructionObject.THICK); IndicatePoint = oc; indicate(w); oc.validate(x(x), y(y)); return oc; } public void indicateCreatePoint(final int x, final int y, final boolean multiple) { final Enumeration e = C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.isSelectable() && o instanceof PointObject && o.nearto(x, y, this) && (multiple || !o.selected())) { V.addElement(o); } sort(V); } if (V.size() > 0) { IndicatePoint = null; filter(V, x, y, false); indicate(V); return; } PointObject oc = (PointObject) indicateTryCreateIntersection(x, y, true); if (oc != null) { return; } final MyVector w = selectPointonObjects(x, y, true, false); filter(w, x, y, true); if (w.size() >= 1) { if (!w.equalsIdentical(Indicated)) { oc = new PointObject(C, x(x), y(y), (ConstructionObject) w .elementAt(0)); if (ShowGrid && !Global.getParameter("grid.leftsnap", false)) { oc.snap(this); } oc.setUseAlpha(true); oc.validate(); oc.setIndicated(true); oc.setType(PointObject.CIRCLE); oc.setColorType(ConstructionObject.THICK); IndicatePoint = oc; indicate(w); } else if (IndicatePoint != null) { IndicatePoint.setType(PointObject.CIRCLE); IndicatePoint.setColorType(ConstructionObject.THICK); IndicatePoint.move(x(x), y(y)); IndicatePoint.project((ConstructionObject) w.elementAt(0)); repaint(); } } else { clearIndicated(); } } public void indicateCircleLineObjects(final int x, final int y) { final MyVector w = selectCircleLineObjects(x, y); filter(V, x, y); indicate(w); } public void indicatePointonObjects(final int x, final int y) { final MyVector w = selectPointonObjects(x, y); filter(V, x, y); indicate(w); } public void indicateIntersectedObjects(final int x, final int y) { final MyVector w = selectPointonObjects(x, y); if (!w.equalsIdentical(Indicated) && w.size() >= 2) { final IntersectionObject o[] = IntersectionConstructor.construct( (ConstructionObject) w.elementAt(0), (ConstructionObject) w .elementAt(1), C); IntersectionObject oc = o[0]; if (o.length == 2) { final double d0 = o[0].distanceTo(x, y, this), d1 = o[1] .distanceTo(x, y, this); if (d1 < d0) { oc = o[1]; } oc.autoAway(); } oc.validate(); oc.setDefaults(); oc.setIndicated(true); oc.setColorType(ConstructionObject.THICK); oc.setType(PointObject.CIRCLE); IndicatePoint = oc; } else { IndicatePoint = null; } indicate(w); } public void indicateLineObjects(final int x, final int y) { selectLineObjects(x, y, true); filter(V, x, y); indicate(V); } public void indicatePointObjects(final int x, final int y) { selectPointObjects(x, y, true); filter(V, x, y); indicate(V); } public void indicatePointObjects(final int x, final int y, final ConstructionObject until) { selectPointObjects(x, y, true, until); filter(V, x, y); indicate(V); } public void indicatePointsOrLines(final int x, final int y) { selectPointsOrLines(x, y, true); filter(V, x, y); indicate(V); } public void indicateSegments(final int x, final int y) { selectSegments(x, y, true); filter(V, x, y); indicate(V); } public void indicateMultipleFinal(final int x, final int y) { // selectMultipleFinals(x, y, true); filter(V, x, y); indicate(V); } public void indicateRays(final int x, final int y) { selectRays(x, y, true); filter(V, x, y); indicate(V); } public void indicateTwoPointLines(final int x, final int y) { selectTwoPointLines(x, y, true); filter(V, x, y); indicate(V); } public void indicateCircles(final int x, final int y) { selectCircles(x, y, true); filter(V, x, y); indicate(V); } public void indicateMoveableObjects(final int x, final int y, final boolean control) { selectMoveableObjects(x, y, control); filter(V, x, y); indicate(V); } public void indicateMoveableObjects(final int x, final int y) { indicateMoveableObjects(x, y, false); } public void indicateWithSelector(final int x, final int y, final Selector sel) { selectWithSelector(x, y, sel, false); filter(V, x, y); indicate(V); } public void indicateWithSelector(final int x, final int y, final Selector sel, final ConstructionObject until) { selectWithSelector(x, y, sel, until, false); filter(V, x, y); indicate(V); } public void indicateConstructableObjects(final int x, final int y) { selectConstructableObjects(x, y); filter(V, x, y); indicate(V); } public void indicateObjects(final int x, final int y, final boolean showname) { selectObjects(x, y); filter(V, x, y); indicate(V, showname); } public void indicateObjects(final int x, final int y) { indicateObjects(x, y, false); } public void setTool(final ObjectConstructor oc) { if (OC != null) { OC.invalidate(this); } OC = oc; OC.showStatus(this); clearIndicated(); clearPreview(); } public void setSuddenTool(final ObjectConstructor oc) // called from // ZirkelFrame { OC = oc; } public void reset() { clearPreview(); clearIndicated(); OC.reset(this); } public void clearSelected() // called from ObjectConstructor { final Enumeration e = C.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); o.setSelected(false); } repaint(); } public synchronized void clear() // delete complete construction { displayJob(false); if (OC != null) { OC.invalidate(this); } C.clear(); recompute(); setDefaultColor(0); setDefaultColorType(0); setDefaultType(2); setGrid(); reloadCD(); } /** * Delete last construction step done by user (highest number) and all * non-visible steps before it. */ public synchronized void back() { reset(); ConstructionObject O = C.lastByNumber(); if (O == null) { return; } if (O.isKeep()) { return; } delete(O); while (true) { O = C.lastByNumber(); if (O == null) { break; } else if (!O.mustHide(this) || O.isHideBreak() || O.isKeep()) { break; } delete(O); } validate(); } public synchronized void undo() { reset(); C.undo(); } public void delete(final ConstructionObject o) { if (C.last() == null) { return; } if (o.isKeep()) { return; } if (!(o instanceof AxisObject)) { C.clearConstructables(); o.setFlag(true); C.determineChildren(); C.delete(false); reloadCD(); repaintCD(); } } /** * Delete a vector of construction objects. * * @param v */ public void delete(final Vector v) { if (C.last() == null) { return; } C.clearConstructables(); final Enumeration e = v.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.isKeep()) { return; } o.setFlag(true); } C.determineChildren(); C.delete(false); } public boolean depends(final ConstructionObject o, final ConstructionObject on) { C.clearConstructables(); on.setFlag(true); C.determineChildren(); return o.isFlag(); } public void addStatusListener(final StatusListener sl) { SL = sl; } public void showStatus(final String s) { if (SL != null) { SL.showStatus(s); } } public void showStatus() { if (OC != null) { OC.showStatus(this); } } public boolean showHidden() { return ShowHidden; } public void setDefaultColor(final int c) { C.DefaultColor = c; } public int getDefaultColor() { return C.DefaultColor; } public void setDefaultType(final int c) { C.DefaultType = c; } public int getDefaultType() { return C.DefaultType; } public void setPartial(final boolean flag) { C.Partial = flag; } public boolean getPartial() { return C.Partial; } public void setRestricted(final boolean flag) { C.Restricted = flag; } public boolean getRestricted() { return C.Restricted; } public void setPartialLines(final boolean flag) { C.PartialLines = flag; } public boolean getPartialLines() { return C.PartialLines; } public void setVectors(final boolean flag) { C.Vectors = flag; } public boolean getVectors() { return C.Vectors; } public void setLongNames(final boolean flag) { C.LongNames = flag; } public boolean getLongNames() { return C.LongNames; } public void setLargeFont(final boolean flag) { C.LargeFont = flag; } public boolean getLargeFont() { return C.LargeFont; } public void setBoldFont(final boolean flag) { C.BoldFont = flag; } public boolean getBoldFont() { return C.BoldFont; } public void setObtuse(final boolean flag) { C.Obtuse = flag; } public boolean getObtuse() { return C.Obtuse; } public void setSolid(final boolean flag) { C.Solid = flag; } public boolean getSolid() { return C.Solid; } public void setShowNames(final boolean flag) { C.ShowNames = flag; } public boolean getShowNames() { return C.ShowNames; } public void setShowValues(final boolean flag) { C.ShowValues = flag; } public boolean getShowValues() { return C.ShowValues; } public void setDefaultColorType(final int c) { C.DefaultColorType = c; } public int getDefaultColorType() { return C.DefaultColorType; } public void setShowHidden(final boolean flag) { ShowHidden = flag; repaint(); } public boolean getShowHidden() { return ShowHidden; } public void setHidden(final boolean flag) { C.Hidden = flag; } /** * With this it is possible to hide all non-constructable items. This * function is called from any object to see if it has to hide. */ public boolean hides(final ConstructionObject o) { if (OC instanceof SetTargetsTool) { return !o.isFlag(); } else { return false; } } /** * Save the construction in this canvas in XML form to the specified output * stream. This function will create the complete XML file, including * headers. */ public void save(final OutputStream o, final boolean construction, final boolean macros, final boolean protectedmacros, final Vector Macros, final String Restrict) throws IOException { final boolean utf = Global.getParameter("options.utf", true); XmlWriter xml; if (utf) { xml = new XmlWriter(new PrintWriter(new OutputStreamWriter(o, "UTF8"), true)); xml.printEncoding(utf ? "utf-8" : "iso-8859-1"); } else { xml = new XmlWriter( new PrintWriter(new OutputStreamWriter(o), true)); xml.printXml(); } // xml.printXls("zirkel.xsl"); // xml.printDoctype("CaR","zirkel.dtd"); xml.startTagNewLine("CaR"); if (macros) { // Sorter.sort(Macros); final Enumeration e = Macros.elements(); while (e.hasMoreElements()) { final Macro m = ((MacroItem) e.nextElement()).M; if (protectedmacros || !m.isProtected()) { m.saveMacro(xml); } } } if (construction) { xml.startTagStart("Construction"); if (isJob()) { xml.printArg("job", "true"); xml.printArg("last", Last); int i = 1; final Enumeration e = Targets.elements(); while (e.hasMoreElements()) { xml.printArg("target" + i, (String) e.nextElement()); i++; } } xml.startTagEndNewLine(); xml.startTagStart("Window"); xml.printArg("x", "" + C.getX()); xml.printArg("y", "" + C.getY()); xml.printArg("w", "" + C.getW()); if (ShowGrid) { xml.printArg("showgrid", "true"); } xml.finishTagNewLine(); eric.JGlobals.XmlTagWriter(xml); eric.controls.JControlsManager.PrintXmlTags(this, xml); if (ShowGrid) { xml.startTagStart("Grid"); if (AxesOnly) { xml.printArg("axesonly", "true"); } xml.printArg("color", "" + GridColor); xml.printArg("thickness", "" + GridThickness); if (!GridLabels) { xml.printArg("nolabels", "true"); } else { if (GridLarge) { xml.printArg("large", "true"); } if (GridBold) { xml.printArg("bold", "true"); } } xml.finishTagNewLine(); } if (getConstruction().BackgroundFile != null && !getConstruction().BackgroundFile.equals("")) { xml.startTagStart("Background"); xml.printArg("file", getConstruction().BackgroundFile); if (getConstruction().ResizeBackground) { xml.printArg("resize", "true"); } xml.finishTagNewLine(); } if (!C.getComment().equals("")) { xml.startTagNewLine("Comment"); xml.printParagraphs(C.getComment(), 60); xml.endTagNewLine("Comment"); } if (!C.getJobComment().equals("")) { xml.startTagNewLine("Assignment"); xml.printParagraphs(C.getJobComment(), 60); xml.endTagNewLine("Assignment"); } if (!Restrict.equals("")) { xml.finishTag("Restrict", "icons", Restrict); } if (OC instanceof ObjectTracker) { ((ObjectTracker) OC).save(xml); } else if (OC instanceof Tracker) { ((Tracker) OC).save(xml); } else if (OC instanceof AnimatorTool) { ((AnimatorTool) OC).save(xml); } else if (OC instanceof BreakpointAnimator) { ((BreakpointAnimator) OC).save(xml); } saveDrawings(xml); xml.startTagNewLine("Objects"); C.save(xml); xml.endTagNewLine("Objects"); xml.endTagNewLine("Construction"); } xml.endTagNewLine("CaR"); } public void load(final InputStream in, final boolean construction, final boolean macros) throws Exception { // System.out.println("read file"); try { if (construction) { C.clear(); All = false; paint(getGraphics()); } else { All = true; } final XmlReader xml = new XmlReader(); xml.init(in); XmlTree tree = xml.scan(); if (tree == null) { throw new ConstructionException("XML file not recognized"); } Enumeration e = tree.getContent(); while (e.hasMoreElements()) { tree = (XmlTree) e.nextElement(); if (tree.getTag() instanceof XmlTagPI) { continue; } if (!tree.getTag().name().equals("CaR")) { throw new ConstructionException("CaR tag not found"); } else { break; } } e = tree.getContent(); while (e.hasMoreElements()) { tree = (XmlTree) e.nextElement(); final XmlTag tag = tree.getTag(); if (tag.name().equals("Macro")) { if (macros) { try { Count.setAllAlternate(true); final Macro m = new Macro(this, tree); int i = 0; for (i = 0; i < Macros.size(); i++) { if (((MacroItem) Macros.elementAt(i)).M .getName().equals(m.getName())) { break; } } if (i >= Macros.size()) { appendMacro(m); } } catch (final ConstructionException ex) { Count.setAllAlternate(false); throw ex; } Count.setAllAlternate(false); } } else if (tag.name().equals("Construction")) { if (construction) { boolean job = false; if (tag.hasParam("job")) { job = true; Last = tag.getValue("last"); if (Last == null) { throw new ConstructionException(Zirkel .name("exception.job")); } final String Target = tag.getValue("target"); if (Target == null) { Targets = new Vector(); int i = 1; while (true) { final String s = tag.getValue("target" + i); i++; if (s == null) { break; } Targets.addElement(s); } } else { Targets = new Vector(); Targets.addElement(Target); } if (Targets.size() == 0) { throw new ConstructionException(Zirkel .name("exception.job")); } } C.load(tree, this); if (job) { if (C.find(Last) == null) { throw new ConstructionException(Zirkel .name("exception.job")); } final Enumeration et = Targets.elements(); while (et.hasMoreElements()) { final String s = (String) et.nextElement(); if (C.find(s) == null && (!s.startsWith("~") || C.find(s .substring(1)) == null)) { throw new ConstructionException(Zirkel .name("exception.job")); } } Job = true; } break; } } else { throw new ConstructionException("Construction not found"); } } recompute(); C.translateOffsets(this); resetSum(); validate(); repaint(); } catch (final Exception e) { throw e; } reloadCD(); repaint(); // System.out.println("finished reading file"); } public void resetSum() { final Enumeration e = C.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o instanceof ExpressionObject) { ((ExpressionObject) o).reset(); } } } public void warning(final String s, final String help) { final Warning w = new Warning(F, s, Zirkel.name("warning"), true, help); w.center(F); w.setVisible(true); } public void warning(final String s) { warning(s, ""); } public void load(final InputStream in) throws Exception { try { C.Loading = true; load(in, true, true); C.Loading = false; } catch (final Exception e) { C.Loading = false; throw e; } } public String getComment() { return C.getComment(); } public void setComment(final String s) { C.setComment(s); } public String getJobComment() { return C.getJobComment(); } public void setJobComment(final String s) { C.setJobComment(s); } /** * This can be used to set a frame window for the error dialogs that the * canvas my display. */ public void setFrame(final Frame f) { F = f; } public Frame getFrame() { return F; } /** * Maginify the view by the specified factor. */ public void magnify(final double f) { ZoomerTool.initNonDraggableObjects(C); C.setXYW(C.getX(), C.getY(), C.getW() * f); ZoomerTool.zoomNonDraggableObjectsBy(C, f); recompute(); validate(); repaint(); } /** * Shift the view with these deltas. */ public void shift(final double dx, final double dy) { ZoomerTool.initNonDraggableObjects(C); C.setXYW(C.getX() + dx * C.getW(), C.getY() + dy * C.getW(), C.getW()); ZoomerTool.shiftNonDraggableObjectsBy(C, dx * C.getW(), dy * C.getW()); recompute(); validate(); repaint(); } /** * Tracker routines: Call the OC (must be a TrackPainter) to paint the * object track. */ public void paintTrack(final MyGraphics g) { if (!(OC instanceof TrackPainter)) { return; } ((TrackPainter) OC).paint(g, this); } /** * Run through the construction to update all object texts. This should be * called, whenever the name of an item was changed. It will recreate only * those texts, which contain the old name. */ public void updateTexts(final ConstructionObject o, final String oldname) { C.updateTexts(o, oldname); } public Construction getConstruction() { return C; } public void setShowGrid(final boolean flag) { ShowGrid = flag; repaint(); } public void toggleShowGrid() { if (ShowGrid && !AxesOnly) { AxesOnly = true; } else if (ShowGrid) { ShowGrid = false; } else { AxesOnly = false; ShowGrid = true; } Global.setParameter("showgrid", ShowGrid); Global.setParameter("axesonly", AxesOnly); repaint(); } public boolean showGrid() { return ShowGrid; } /** * Sets the job parameters for the current construction (the last item to * display and the target item). */ public void setJob(final ConstructionObject last) { Job = true; Last = last.getName(); Targets = new Vector(); } public void addJobTarget(final ConstructionObject target, final boolean visible) { if (visible) { Targets.addElement("~" + target.getName()); } else { Targets.addElement(target.getName()); } } public void clearTargets() { Targets = new Vector(); } /** * Cancel the job state o fthe current construction. */ public void clearJob() { Job = false; } /** * Test, if the construction is a valid job. */ public boolean isJob() { final Enumeration e = Targets.elements(); while (e.hasMoreElements()) { final String s = (String) e.nextElement(); if (C.find(s) == null && (!s.startsWith("~") || C.find(s.substring(1)) == null)) { return false; } } return Job && C.find(Last) != null && Targets.size() > 0; } public boolean inTargets(final String s) { final Enumeration e = Targets.elements(); while (e.hasMoreElements()) { if (((String) e.nextElement()).equals(s)) { return true; } } return false; } /** * * This will display the construction as a job (if it is a job). The * construction is copied up to the last element. The copies are marked as * keep objects, so that they cannot be changed. The last object is marked * as the target object, so that it displays in a special color. * * The function can also flip back to the original construction * (flag=false). */ public void displayJob(final boolean flag) { clearSelected(); if (!(OC instanceof SaveJob)) { OC.reset(this); } if (flag) // diplay the job { C.setOriginalOrder(true); if (displayJob() || !isJob()) { return; } final Construction Cnew = new Construction(); Cnew.setXYW(C.getX(), C.getY(), C.getW()); Enumeration e = C.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e .nextElement(); o.setJobTarget(true); o.setJobTarget(false); } e = C.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e .nextElement(); Cnew.add(o); o.setKeep(true); if (inTargets(o.getName()) || inTargets("~" + o.getName())) { o.setJobTarget(true); } if (o.getName().equals(Last)) { break; } } while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e .nextElement(); if (inTargets(o.getName()) || inTargets("~" + o.getName())) { Cnew.add(o); o.setKeep(true); o.setJobTarget(true); } } int n = 0; e = Targets.elements(); while (e.hasMoreElements()) { final String s = (String) e.nextElement(); if (!s.startsWith("~")) { n++; } } TargetO = new ConstructionObject[n]; TargetS = new ConstructionObject[n]; n = 0; e = Targets.elements(); while (e.hasMoreElements()) { final String s = (String) e.nextElement(); if (!s.startsWith("~")) { TargetO[n] = Cnew.find(s); TargetS[n] = null; n++; } } COriginal = C; C = Cnew; C.addAddEventListener(this); C.setComment(COriginal.getJobComment()); recompute(); reloadCD(); repaint(); } else // display the orginal construction again { if (!displayJob()) { return; } C.removeAddEventListener(this); C = COriginal; COriginal = null; final Enumeration e = C.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e .nextElement(); o.setKeep(false); o.setJobTarget(false); } C.setOriginalOrder(false); recompute(); reloadCD(); repaint(); } } /** * If the job is solved, this function removes all restrictions. */ public void freeJob() { final Enumeration e = C.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); o.setKeep(false); o.setJobTarget(false); repaint(); } } /** * Test if the canvas displays a job right now. */ public boolean displayJob() { return COriginal != null; } // The following functions change the default values of some objects. public void setShowColor(final int i) { ShowColor = i; repaint(); } public int getShowColor() { return ShowColor; } public ObjectConstructor getOC() { return OC; } // Macros: Vector Macros = new Vector(); public Vector getMacros() { return Macros; } public boolean haveMacros() { return Macros.size() > 0; } public boolean haveNonprotectedMacros() { final Enumeration e = Macros.elements(); while (e.hasMoreElements()) { final MacroItem m = (MacroItem) e.nextElement(); if (!m.M.isProtected()) { return true; } } return false; } /** * Define a macro. There must be parameters (but not necessarily targets). * The function will display the macro dialog. It will create a new macro, * when the dialog was not aborted. The macro is kept in the Macros vector * by name. */ boolean defineMacro() { clearSelected(); // Read the list of Parameters and Targets from the // construction. This list is filled by the SetParameter and // SetTargets constructors. final Vector P = C.getParameters(); if (P.size() == 0) // no parameters { warning(Zirkel.name("definemacro.noparams")); return false; } // Display the macro creation dialog to the user. final DefineMacro d = new DefineMacro(F, this); d.center(getFrame()); d.setVisible(true); // Aborted? if (d.isAborted() || d.getName().equals("")) { return false; } // Define a marco with the name, the comment and the paramters. final Macro m = new Macro(this, d.getName(), d.getComment(), d .getParams()); // If there are no targets, determine everything as // constructed by the paramaters, else only the things needed // to get the targets. try { defineMacro(C, m, d.targetsOnly(), d.invisible(), d.getPromptFor(), d.hideduplicates()); } catch (final ConstructionException e) { warning(e.getDescription()); OC.reset(this); return false; } storeMacro(m, false); OC.reset(this); return true; } /** * Copy a macro with fixed parameters from another macro. */ public Macro copyMacro(final Macro m, final String name, final boolean fixed[]) { try { final Macro macro = (Macro) (m.clone()); macro.Name = name; final boolean f[] = new boolean[fixed.length]; for (int i = 0; i < f.length; i++) { f[i] = fixed[i]; } macro.Fixed = f; storeMacro(macro, true); return macro; } catch (final Exception e) { return m; } } /** * Define a macro based on a construction in c and the targets and * parameters in this construction. Store the macro in m. * * @param */ public void defineMacro(final Construction c, final Macro m, final boolean targetsonly, final boolean superhide, final String prompt[], final boolean hideduplicates) throws ConstructionException { final Vector P = c.getParameters(), T = c.getTargets(); c.setTranslation(m); // for construction expressions only (windoww etc.) c.clearTranslations(); if (T.size() == 0) // got no targets { c.determineConstructables(); } else // got targets { c.clearConstructables(); c.setParameterAsConstructables(); for (int i = 0; i < T.size(); i++) { c.determineConstructables((ConstructionObject) T.elementAt(i)); } } // Make sure the counter for the macro object names starts // fresh (P1, P2, ...) Count.setAllAlternate(true); // Walk through the construction and copy all marked objects // to the macro definition. m.clearTranslators(); Enumeration e = c.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o instanceof TwoPointLineObject && canConvert(c, (TwoPointLineObject) o) && o.isMainParameter()) { ((TwoPointLineObject) o).getP1().setFlag(false); ((TwoPointLineObject) o).getP2().setFlag(false); } } e = c.elements(); while (e.hasMoreElements()) { ConstructionObject oc; final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.isFlag() && !(o.isParameter() && !o.isMainParameter() && !needed(c, o, null))) { // System.out.println(o.getName()+", parameter: "+o.isParameter()+ // ", main: "+o.isMainParameter()+", needed "+needed(c,o,null)); // Now copy to the macro, but make sure that parameters // are simplified to their object type. E.g., an // objectpoint becomes a point, if it is a parameter. if (o instanceof PointObject && o.isParameter()) { final PointObject p = (PointObject) o; if (p.isSpecialParameter() && p.dependsOnParametersOnly()) { oc = (ConstructionObject) p.copy(0, 0); } else { oc = new PointObject(c, p.getX(), p.getY()); } } else if (o instanceof FunctionObject && o.isParameter()) { final FunctionObject fo = new FunctionObject(c); fo.setExpressions("x", "0", "0"); fo.setRange("-10", "10", "0.1"); oc = fo; } else if (o instanceof UserFunctionObject && o.isParameter()) { final UserFunctionObject fo = new UserFunctionObject(c); fo.setExpressions("x", "0"); oc = fo; } else if (o instanceof ExpressionObject && o.isParameter()) { oc = new ExpressionObject(c, 0, 0); ((ExpressionObject) oc).setExpression(o.getValue() + "", o .getConstruction()); ((ExpressionObject) oc).setCurrentValue(o.getValue()); } else if (o instanceof TwoPointLineObject && canConvert(c, (TwoPointLineObject) o) && o.isParameter()) { oc = new PrimitiveLineObject(c); } else if (o instanceof PrimitiveLineObject && !(o instanceof TwoPointLineObject) && !(o instanceof FixedAngleObject) && o.isParameter()) { oc = new PrimitiveLineObject(c); } else if (o instanceof PrimitiveCircleObject && o.isParameter()) { oc = new PrimitiveCircleObject(c, ((PrimitiveCircleObject) o).getP1()); oc.translateConditionals(); oc.translate(); } else if (o instanceof AreaObject && o.isParameter()) { oc = new AreaObject(c, new Vector()); oc.translateConditionals(); oc.translate(); } else { oc = (ConstructionObject) o.copy(0, 0); } if (oc != null) { m.add(oc); if (o.isMainParameter()) { oc.setName(o.getName()); } if (targetsonly && !o.isTarget() && !o.isParameter()) { if (superhide) { oc.setSuperHidden(true); } else { oc.setHidden(true); } } if (o.isParameter() && o.isHidden()) { oc.setHidden(true); } // All parameters in the constructions translate to // the paramters in the macro definition. o.setTranslation(oc); } } else { o.setTranslation(null); } } e = c.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.isFlag() && !o.isParameter()) { o.laterTranslate(c); } } Count.setAllAlternate(false); // translate the @... forward declarations in FindObjectExpression. c.clearErrors(); m.runTranslators(c); // see if any errors occured (@.. to nonexisting object, generated // by the FindObjectExpression on translation. e = c.getErrors(); if (e.hasMoreElements()) { warning((String) e.nextElement(), "macroerror"); } // Now set the paramter array and make sure it is translated // to the objects in the macro definition. final ConstructionObject Params[] = new ConstructionObject[P.size()]; for (int i = 0; i < P.size(); i++) { Params[i] = ((ConstructionObject) P.elementAt(i)).getTranslation(); } m.setParams(Params); final String p[] = new String[prompt.length]; for (int j = 0; j < prompt.length; j++) { final ConstructionObject o = c.find(prompt[j]); if (o == null || o.getTranslation() == null || !(o instanceof FixedCircleObject || o instanceof FixedAngleObject || o instanceof ExpressionObject)) { throw new ConstructionException(Zirkel.name("exception.prompt")); } for (int i = 0; i < P.size(); i++) { final ConstructionObject op = (ConstructionObject) P .elementAt(i); if (op == o) { throw new ConstructionException(Zirkel .name("exception.prompt.parameter")); } } p[j] = o.getTranslation().getName(); } m.setPromptFor(p); for (int i = 0; i < prompt.length; i++) { m.setPromptName(i, prompt[i]); } m.hideDuplicates(hideduplicates); } /** * See, if this secondary parameter "o" is needed in the construction "c" by * either a constructable object, or a parameter different from "besides". */ public boolean needed(final Construction c, final ConstructionObject o, final ConstructionObject besides) { final Enumeration e = c.elements(); while (e.hasMoreElements()) { final ConstructionObject u = (ConstructionObject) e.nextElement(); if (!u.isFlag() || u == besides) { continue; } if (c.dependsDirectlyOn(u, o)) { return true; } } return false; } /** * See, if this two point line can be converted to a primitive line. */ public boolean canConvert(final Construction c, final TwoPointLineObject o) { final PointObject p1 = o.getP1(), p2 = o.getP2(); if (p1.isMainParameter() || p2.isMainParameter()) { return false; } return !(needed(c, p1, o) || needed(c, p2, o)); } /** * Define a macro from the information stored in the construction c, and * store it to the macros in this ZirkelCanvas object. */ public void defineMacro(final String name, final String comment, final Construction c) throws ConstructionException { final Vector T = c.getTargets(); final String Prompts[] = new String[c.Prompts.size()]; for (int i = 0; i < Prompts.length; i++) { Prompts[i] = (String) c.Prompts.elementAt(i); } final Macro m = new Macro(this, name, comment, Prompts); defineMacro(c, m, T.size() > 0 && !c.ShowAll, c.SuperHide, c .getPromptFor(), true); storeMacro(m, true); } /* * Store the macro in the macro list (or replace the old macro with the same * name * * @param all Replace the macro without asking. */ public void storeMacro(final Macro m, final boolean all) { int i = 0; for (i = 0; i < Macros.size(); i++) { if (((MacroItem) Macros.elementAt(i)).M.getName().equals( m.getName())) { All = replaceMacro(m, i, all); // ask user if All=false break; } } if (i >= Macros.size()) { appendMacro(m); } } public boolean ProtectMacros = false; public MacroMenu MM = null; public void appendMacro(final Macro m) { if (!ReadOnly) { if (ProtectMacros) { m.setProtected(true); } if (MM == null) { MM = new MacroMenu(PM, "", null); } final MacroItem mi = MM.add(m, m.getName()); if (mi.I != null) { mi.I.addActionListener(this); } Macros.addElement(mi); } else { if (MM == null) { MM = new MacroMenu(null, "", null); } final MacroItem mi = MM.add(m, m.getName()); if (mi.I != null) { mi.I.addActionListener(this); } Macros.addElement(mi); } } /** * Replace the macro item number i with m. * * @return User wants to replace all subsequent macros. */ public boolean replaceMacro(final Macro m, final int i, final boolean all) { final MacroItem e = (MacroItem) Macros.elementAt(i); if (all) // don't ask { Macros.setElementAt(new MacroItem(m, e.I), i); return true; } else // ask { final ReplaceMacroQuestion d = new ReplaceMacroQuestion(getFrame(), m); d.center(getFrame()); d.setVisible(true); if (d.isNo()) { return false; } final MacroItem newitem = new MacroItem(m, e.I); MM.replace((MacroItem) Macros.elementAt(i), newitem); Macros.setElementAt(newitem, i); return d.isAll(); } } public String MacroCurrentComment; /** * The user has to choose from a list of macros (for running). */ public Macro chooseMacro() { if (Macros.size() == 0) { warning(Zirkel.name("definemacro.nomacro")); return null; } final MacroSelectDialog d = new MacroSelectDialog(getFrame(), MM, false); d.setVisible(true); return d.getMacro(); } /** * The user can choose from a list of macros (for saving). * * @return A vector of selected Macros. */ public Vector chooseMacros() { if (Macros.size() == 0) { warning(Zirkel.name("definemacro.nomacro")); return null; } final MacroSelectDialog d = new MacroSelectDialog(getFrame(), MM, true); d.setVisible(true); return d.getMacros(); } /** * Run a macro by name. */ public Macro chooseMacro(final String name) { final Enumeration e = Macros.elements(); while (e.hasMoreElements()) { final Macro m = ((MacroItem) e.nextElement()).M; if (m.getName().equals(name)) { return m; } } return null; } public void deleteMacros(final Vector v) { final Enumeration e = v.elements(); while (e.hasMoreElements()) { final MacroItem m = (MacroItem) e.nextElement(); deleteMacro(m); } } public void deleteMacro(final MacroItem m) { Macros.removeElement(m); if (m.I != null) { m.I.removeActionListener(this); MM.remove(m); } } public void clearMacros() { final Enumeration e = Macros.elements(); while (e.hasMoreElements()) { final MacroItem m = (MacroItem) e.nextElement(); if (m.I != null) { m.I.removeActionListener(this); MM.remove(m); } } Macros.removeAllElements(); } public void clearNonprotectedMacros() { final Vector V = new Vector(); final Enumeration e = Macros.elements(); while (e.hasMoreElements()) { final MacroItem m = (MacroItem) e.nextElement(); if (!m.M.isProtected()) { V.addElement(m); } } deleteMacros(V); } public void clearProtectedMacros() { final Vector V = new Vector(); final Enumeration e = Macros.elements(); while (e.hasMoreElements()) { final MacroItem m = (MacroItem) e.nextElement(); if (m.M.isProtected()) { V.addElement(m); } } deleteMacros(V); } public void protectMacros() { final Enumeration e = Macros.elements(); while (e.hasMoreElements()) { final MacroItem m = (MacroItem) e.nextElement(); m.M.setProtected(true); } } public void renameMacro(final Macro macro, final String name) { final Enumeration e = Macros.elements(); while (e.hasMoreElements()) { final MacroItem m = (MacroItem) e.nextElement(); if (m.I != null && m.M == macro) { deleteMacro(m); break; } } macro.setName(name); appendMacro(macro); } MacroBar MBar; public void setMacroBar(final MacroBar m) { MBar = m; } public void updateMacroBar() { // if (MBar!=null) { // MBar.update(Macros); // } } // For the prompt in the status line: TextField TF; public void setTextField(final TextField t) { TF = t; } public void setPrompt(final String s) { if (TF != null) { TF.setText(s); } } // Loading: public void loadRun(final InputStream is) { final BufferedReader in = new BufferedReader(new InputStreamReader(is)); String s = "", comment = ""; while (true) { try { s = in.readLine(); if (s == null) { break; } int n; if ((n = s.indexOf("//")) >= 0) { comment = s.substring(n + 2).trim(); s = s.substring(0, n); } else { comment = ""; } s = s.trim(); int k = 0; if ((k = Interpreter.startTest("macro", s)) >= 0) { loadMacro(in, s.substring(k).trim()); } else if (!s.equals("")) { C.interpret(this, s, comment); } } catch (final ConstructionException e) { warning(e.getDescription() + " --- " + s); break; } catch (final Exception e) { warning(e.toString() + " --- " + s); e.printStackTrace(); break; } } C.updateCircleDep(); } public void loadMacro(final BufferedReader in, final String name) throws ConstructionException { final Construction c = new Construction(); c.clear(); String s = "", comment = "", macrocomment = ""; boolean inComment = true, newLine = true; while (true) { try { s = in.readLine(); if (s == null) { throw new ConstructionException(Zirkel .name("exception.macroend")); } s = s.trim(); final int n = s.indexOf("//"); if (inComment && n == 0) { final String h = s.substring(n + 2).trim(); if (newLine) { macrocomment = macrocomment + h; newLine = false; } else { if (h.equals("")) { macrocomment = macrocomment + "\n"; newLine = true; } else { macrocomment = macrocomment + " " + h; newLine = false; } } continue; } inComment = false; if (n >= 0) { comment = s.substring(n + 2).trim(); s = s.substring(0, n); } else { comment = ""; } s = s.trim(); if (s.equals(Zirkel.name("end"))) { break; } if (s.toLowerCase().equals("end")) { break; } if (!s.equals("")) { c.interpret(this, s, comment); } } catch (final InvalidException e) { } catch (final ConstructionException e) { throw new ConstructionException(e.getDescription() + " --- " + s); } catch (final IOException e) { warning(e.toString()); return; } } defineMacro(name, macrocomment, c); } public double getGridSize() { double gridsize = Math.pow(10, Math.floor(Math.log(C.getW() * 2) / Math.log(10))) / 10; if (C.getW() * 2 / gridsize >= 30) { gridsize *= 5; } if (C.getW() * 2 / gridsize < 10) { gridsize /= 2; } return gridsize; } public LatexOutput createBB(final String filename, final int w, final int h, final double dpi) { try { String path = ""; if (Global.getParameter("options.fullpath", true)) { path = FileName.pathAndSeparator(filename); } PrintWriter out = new PrintWriter(new FileOutputStream(path + FileName.purefilename(filename) + ".bb")); out.println("%%BoundingBox: 0 0 " + w + " " + h); out.close(); out = new PrintWriter(new FileOutputStream(path + FileName.purefilename(filename) + ".ztx")); final LatexOutput lout = new LatexOutput(out); lout.open(w, h, dpi, path + FileName.filename(filename)); return lout; } catch (final Exception e) { warning(e.toString()); } return null; } /** * Save picture as PNG on file or copy to clipboard * * @param filename * ("" for clipboard) * @return not failed */ synchronized public boolean savePNG(final String filename, final boolean latex) { LatexOutput lout = null; if (IW == 0 || I == null) { return false; } if (Global.getParameter("printscale.middle", true)) { savePreviewAsPNG(filename); return true; } double dpi = Global.getParameter("printscale.dpi", 300); if (!Global.getParameter("printscale.sizes", false)) { final int w = Global.getParameter("printscale.w", IW); final int h = Global.getParameter("printscale.h", IH); if (latex) { lout = createBB(filename, w, h, dpi); } final int IWold = IW; IW = w; IH = h; Scale = ((double) IW) / IWold; I = createImage(IW, IH); IG = new MyGraphics13(I.getGraphics(), Scale, this, lout); IG.setSize(w, h); double pointsize = PointSize * Scale; double fontsize = FontSize * Scale; if (Scale < 1) { if (Global.getParameter("options.minpointsize", false) && pointsize < MinPointSize) { pointsize = MinPointSize; } if (Global.getParameter("options.minfontsize", false) && fontsize < MinFontSize) { fontsize = MinFontSize; } } IG.setDefaultFont((int) (fontsize), Global.getParameter( "font.large", false), Global.getParameter("font.bold", false)); PointSize = pointsize; } else { final int IWOld = IW; dpi = Global.getParameter("printscale.dpi", 300.0); IW = (int) (Global.getParameter("printscale.width", 5.0) / 2.54 * dpi); IH = (int) (Global.getParameter("printscale.height", 5.0) / 2.54 * dpi); if (latex) { lout = createBB(filename, IW, IH, dpi); } I = createImage(IW, IH); IG = new MyGraphics13(I.getGraphics(), Global.getParameter( "printscale.linewidth", 0.02) / 2.54 * dpi, this, lout); IG.setSize(IW, IH); PointSize = Global.getParameter("printscale.pointsize", 0.07) / 2.54 * dpi; IG.setDefaultFont((int) (Global.getParameter("printscale.textsize", 0.3) / 2.54 * dpi), Global .getParameter("font.large", false), Global.getParameter( "font.bold", false)); Scale = (double) IW / IWOld; } recompute(); if (Global.getParameter("options.bitmapbackground", false)) { IG.clearRect(0, 0, IW, IH, getBackground()); } else { IG.clearRect(0, 0, IW, IH, Color.white); } if (Background != null) { final int bw = Background.getWidth(this), bh = Background .getHeight(this); if (bw == IW && bh == IH) { IG.drawImage(Background, 0, 0, this); } else if (Global.getParameter("background.tile", true) && bw < IW && bh < IH) { for (int i = (IW % bw) / 2 - bw; i < IW; i += bw) { for (int j = (IH % bh) / 2 - bh; j < IH; j += bh) { IG.drawImage(Background, i, j, this); } } } else if (Global.getParameter("background.center", true)) { IG.drawImage(Background, (IW - bw) / 2, (IH - bh) / 2, this); } else { IG.drawImage(Background, 0, 0, IW, IH, this); } } dopaint(IG); if (lout != null) { lout.close(); } Interactive = true; if (!filename.equals("")) { try { final BufferedOutputStream out = new BufferedOutputStream( new FileOutputStream(filename)); final PngEncoder png = new PngEncoder(I, PngEncoder.NO_ALPHA, 0, 9); png.setDPI(dpi); out.write(png.pngEncode()); out.close(); } catch (final Exception e) { warning(e.toString()); } } else { try { final Clipboard clipboard = getToolkit().getSystemClipboard(); final ImageSelection is = new ImageSelection(I); clipboard.setContents(is, null); } catch (final Exception e) { Scale = 1; I = null; repaint(); return false; } } Scale = 1; I = null; repaint(); return true; } public void savePreviewAsPNG(final String filename) { final int PW = Global.getParameter("printscale.w", IW); final int PH = Global.getParameter("printscale.h", IH); final Image i = createImage(PW, PH); final Graphics g = i.getGraphics(); g.setColor(Color.WHITE); g.fillRect(0, 0, PW, PH); g.drawImage(I, -(IW - PW) / 2, -(IH - PH) / 2, this); if (!filename.equals("")) { try { final FileOutputStream out = new FileOutputStream(filename); final PngEncoder png = new PngEncoder(i, PngEncoder.NO_ALPHA, 0, 9); out.write(png.pngEncode()); out.close(); } catch (final Exception e) { warning(e.toString()); } } else { try { final Clipboard clipboard = getToolkit().getSystemClipboard(); final ImageSelection is = new ImageSelection(I); clipboard.setContents(is, null); } catch (final Exception e) { } } } public void saveFIG(final String filename) { try { final PrintWriter out = new PrintWriter(new FileOutputStream( filename)); final MyGraphicsFig fig = new MyGraphicsFig(out, IW, IH); fig.setSize(IW, IH); dopaintFig(fig); fig.close(); out.close(); } catch (final Exception e) { warning(e.toString()); e.printStackTrace(); } } public void saveSVG(final String filename) { try { OutputStream o = new FileOutputStream(filename); if (ZirkelFrame.isCompressed(filename)) { o = new GZIPOutputStream(o); } final PrintWriter out = new PrintWriter(new OutputStreamWriter(o, "UTF8")); final MyGraphicsSvg svg = new MyGraphicsSvg(out, IW, IH); svg.setSize(IW, IH); dopaint(svg); svg.close(); out.close(); } catch (final Exception e) { warning(e.toString()); e.printStackTrace(); } } public void savePDF(final String filename) { PrintWriter out = null; try { OutputStream o = new FileOutputStream(filename); if (ZirkelFrame.isCompressed(filename)) { o = new GZIPOutputStream(o); } out = new PrintWriter(new OutputStreamWriter(o, "CP1252")); } catch (final Exception e) { warning(e.toString()); e.printStackTrace(); } final int iw = IW, ih = IH; IW = (int) (Global.getParameter("printscale.width", IW * 2) / 2.54 * 72 + 0.5); IH = (int) (Global.getParameter("printscale.height", IH * 2) / 2.54 * 72 + 0.5); final double ps = PointSize; Scale = (double) IW / iw; double pointsize = PointSize * Scale; double fontsize = FontSize * Scale + 1; double linewidth = Scale; if (Global.getParameter("printscale.sizes", false)) { pointsize = Global.getParameter("printscale.pointsize", 0.07) / 2.54 * 72; fontsize = Global.getParameter("printscale.fontsize", 0.3) / 2.54 * 72; linewidth = Global.getParameter("printscale.linewidth", 0.02) / 2.54 * 72; } PointSize = pointsize; recompute(); final MyGraphicsPDF pdf = new MyGraphicsPDF(out, IW, IH, linewidth); pdf.setSize(IW, IH); pdf.setDefaultFont((int) (fontsize), Global.getParameter("font.large", false), Global.getParameter("font.bold", false)); try { dopaint(pdf); pdf.close(); out.close(); } catch (final Exception e) { warning(e.toString()); e.printStackTrace(); } IW = iw; IH = ih; Scale = 1.0; PointSize = ps; I = null; repaint(); } public void saveEPS(final String filename) { OutputStream o = null; try { o = new FileOutputStream(filename); if (ZirkelFrame.isCompressed(filename)) { o = new GZIPOutputStream(o); } } catch (final Exception e) { warning(e.toString()); e.printStackTrace(); } final int iw = IW, ih = IH; IW = (int) (Global.getParameter("printscale.width", IW * 2) / 2.54 * 72 + 0.5); IH = (int) (Global.getParameter("printscale.height", IH * 2) / 2.54 * 72 + 0.5); final double ps = PointSize; Scale = (double) IW / iw; double pointsize = PointSize * Scale; double fontsize = FontSize * Scale + 1; double linewidth = Scale; if (Global.getParameter("printscale.sizes", false)) { pointsize = Global.getParameter("printscale.pointsize", 0.07) / 2.54 * 72; fontsize = Global.getParameter("printscale.fontsize", 0.3) / 2.54 * 72; linewidth = Global.getParameter("printscale.linewidth", 0.02) / 2.54 * 72; } PointSize = pointsize; recompute(); try { final MyGraphicsEPS eps = new MyGraphicsEPS(o, IW, IH); eps.setSize(IW, IH); eps.setLineWidth(linewidth); eps.setDefaultFont((int) (fontsize), Global.getParameter( "font.large", false), Global.getParameter("font.bold", false)); dopaint(eps); eps.close(); o.close(); } catch (final Exception e) { warning(e.toString()); e.printStackTrace(); } IW = iw; IH = ih; Scale = 1.0; PointSize = ps; I = null; repaint(); } /** * Return pressed. */ public void returnPressed() { if (OC instanceof MacroRunner) { ((MacroRunner) OC).returnPressed(this); } } public void magnet(final PointObject p) { setTool(new MagnetTool(this, p, OC)); } public void bind(final PointObject p) { setTool(new BinderTool(this, p, OC)); } public void setAway(final IntersectionObject p, final boolean away) { setTool(new SetAwayTool(this, p, away, OC)); } public void setCurveCenter(final FunctionObject p) { setTool(new SetCurveCenterTool(this, p, OC)); } public void range(final PrimitiveCircleObject c) { setTool(new SetRangeTool(this, c, OC)); } public void set(final FixedAngleObject a) { setTool(new SetFixedAngle(this, a, OC)); } public void set(final FixedCircleObject c) { setTool(new SetFixedCircle(this, c, OC)); } public boolean enabled(final String function) { if (ZCI != null) { return ZCI.enabled(function); } else { return true; } } public void pause(final boolean flag) { OC.pause(flag); } public void setReadOnly(final boolean flag) { ReadOnly = flag; } public void allowRightMouse(final boolean flag) { AllowRightMouse = flag; } public boolean changed() { return C.changed(); } Image OldBackground = null; /** * Create a background image for the Movertool, consisting of the current * construction. This is called when moving with the control key is called. * * @param flag */ public void grab(final boolean flag) { if (flag) { OldBackground = Background; Background = createImage(IW, IH); final Graphics G = Background.getGraphics(); G.drawImage(I, 0, 0, this); } else { Background = OldBackground; OldBackground = null; } repaint(); } public void setBackground(final Image i) { Background = i; repaint(); } public void setInteractive(final boolean flag) { Interactive = flag; } public ObjectConstructor getCurrentTool() { return OC; } MyVector Drawings = new MyVector(); public synchronized void addDrawing(final Drawing d) { Drawings.addElement(d); } public synchronized void clearDrawings() { Drawings.removeAllElements(); repaint(); } public synchronized void paintDrawings(final MyGraphics g) { final Enumeration e = Drawings.elements(); while (e.hasMoreElements()) { final Drawing d = (Drawing) e.nextElement(); final Enumeration ec = d.elements(); if (ec.hasMoreElements()) { g.setColor(ZirkelFrame.Colors[d.getColor()]); CoordinatesXY xy = (CoordinatesXY) ec.nextElement(); int c = (int) col(xy.X), r = (int) row(xy.Y); while (ec.hasMoreElements()) { xy = (CoordinatesXY) ec.nextElement(); final int c1 = (int) col(xy.X), r1 = (int) row(xy.Y); g.drawLine(c, r, c1, r1); c = c1; r = r1; } } } } public void saveDrawings(final XmlWriter xml) { final Enumeration e = Drawings.elements(); while (e.hasMoreElements()) { final Drawing d = (Drawing) e.nextElement(); final Enumeration ec = d.elements(); if (ec.hasMoreElements()) { xml.startTagNewLine("Draw", "color", "" + d.getColor()); while (ec.hasMoreElements()) { final CoordinatesXY xy = (CoordinatesXY) ec.nextElement(); xml.startTagStart("Point"); xml.printArg("x", "" + xy.X); xml.printArg("y", "" + xy.Y); xml.finishTagNewLine(); } xml.endTagNewLine("Draw"); } } } public void loadDrawings(final XmlTree tree) throws ConstructionException { XmlTag tag = tree.getTag(); if (!tag.name().equals("Draw")) { return; } final Drawing d = new Drawing(); try { if (tag.hasParam("color")) { d.setColor(Integer.parseInt(tag.getValue("color"))); } } catch (final Exception e) { throw new ConstructionException("Illegal Draw Parameter"); } final Enumeration e = tree.getContent(); while (e.hasMoreElements()) { final XmlTree t = (XmlTree) e.nextElement(); tag = t.getTag(); if (tag.name().equals("Point")) { try { final double x = new Double(tag.getValue("x")) .doubleValue(); final double y = new Double(tag.getValue("y")) .doubleValue(); d.addXY(x, y); } catch (final Exception ex) { throw new ConstructionException("Illegal Draw Parameter"); } } } Drawings.addElement(d); } int PointLast, LineLast, AngleLast; public void renameABC(final ConstructionObject o, final boolean enforce, final boolean reset) { if (!enforce) { if (o instanceof PointObject) { for (int i = 'A'; i <= 'Z'; i++) { final ConstructionObject h = C.find("" + (char) i); if (h == null) { o.setName("" + (char) i); o.setShowName(true); repaint(); break; } } } else if (o instanceof AngleObject || o instanceof FixedAngleObject) { for (int i = 'a'; i <= 'z'; i++) { final ConstructionObject h = C.find("\\" + (char) i); if (h == null) { o.setName("\\" + (char) i); o.setShowName(true); repaint(); break; } } } else if (o instanceof PrimitiveLineObject) { for (int i = 'a'; i <= 'z'; i++) { final ConstructionObject h = C.find("" + (char) i); if (h == null) { o.setName("" + (char) i); o.setShowName(true); repaint(); break; } } } } else { if (reset) { PointLast = 0; LineLast = 0; AngleLast = 0; } if (o instanceof PointObject) { final String name = "" + (char) ('A' + PointLast); final ConstructionObject h = C.find(name); if (h != null && h != o) { h.setName("***temp***"); final String s = o.getName(); o.setName(name); h.setName(s); } else { o.setName(name); } PointLast++; } else if (o instanceof AngleObject || o instanceof FixedAngleObject) { final String name = "\\" + (char) ('a' + AngleLast); final ConstructionObject h = C.find(name); if (h != null && h != o) { h.setName("***temp***"); final String s = o.getName(); o.setName(name); h.setName(s); } else { o.setName(name); } AngleLast++; } else if (o instanceof PrimitiveLineObject) { final String name = "" + (char) ('a' + LineLast); final ConstructionObject h = C.find(name); if (h != null && h != o) { h.setName("***temp***"); final String s = o.getName(); o.setName(name); h.setName(s); } else { o.setName(name); } LineLast++; } } } public void selectAllMoveableVisibleObjects() { final Enumeration e = C.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o instanceof MoveableObject && ((MoveableObject) o).moveable() && !o.mustHide(this)) { o.setStrongSelected(true); } } } public void hideDuplicates(final ConstructionObject from) { final Enumeration e = C.elements(); if (from != null) { while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e .nextElement(); if (o == from) { break; } } } while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); if (o.mustHide(this) || o.isKeep()) { continue; } final Enumeration ex = C.elements(); while (ex.hasMoreElements()) { final ConstructionObject o1 = (ConstructionObject) ex .nextElement(); if (o1 == o) { break; } if (o1.mustHide(this) || o1.isKeep()) { continue; } if (o.equals(o1)) { o.setHidden(true); break; } } } } public void hideDuplicates() { hideDuplicates(null); } public void createEquationXY() { final EquationXYObject f = new EquationXYObject(C, "(x^2+y^2)^2-3*(x^2-y^2)"); // EquationXYObject f=new EquationXYObject(C,"x+y"); f.setDefaults(); C.add(f); f.edit(this); repaint(); reloadCD(); } public void createCurve() { final FunctionObject f = new FunctionObject(C); f.setDefaults(); C.add(f); f.setExpressions("x", "x", "0"); f.edit(this); if (f.EditAborted) { delete(f); } repaint(); reloadCD(); } public void createFunction() { final UserFunctionObject f = new UserFunctionObject(C); f.setDefaults(); f.setShowName(true); f.setShowValue(true); C.add(f); f.setExpressions("x", "0"); f.edit(this); if (f.EditAborted) { delete(f); } repaint(); reloadCD(); } public void editLast() { if (C.last() == null) { return; } C.last().edit(this); } public void breakpointLast(final boolean flag, final boolean hiding) { final ConstructionObject o = C.last(); if (o == null) { return; } if (hiding) { o.setHideBreak(flag); } else { o.setBreak(flag); } } public void notifyChanged() { if (!C.Loading) { reloadCD(); } } public void startWaiting() { Interactive = false; showMessage(Zirkel.name("message.saving")); } public void endWaiting() { Interactive = true; hideMessage(); } public void showMessage(final String s) { hideMessage(); MW = new MessageWindow(F, s); MW.setVisible(true); } public void hideMessage() { if (MW != null) { MW.setVisible(false); MW.dispose(); MW = null; } } // HotEqn stuff, requires the HotEqn classes: sHotEqn HE = null; public void setHotEqn(final String s) { if (HE == null) { HE = new sHotEqn(this); } HE.setEquation(s); } public int paintHotEqn(final int c, final int r, final Graphics g) { if (HE == null) { return 0; } return HE.paint(c, r, g); } // Stuff for the permanent construction display public ConstructionDisplayPanel CDP = null; public void reloadCD() { if (CDP != null && C != null) { CDP.reload(); } } public void repaintCD() { if (CDP != null && C != null) { CDP.updateDisplay(); } } public void callCDAction(final String action) { if (CDP != null && C != null) { CDP.doAction(action); } } public void callCDItem(final String action, final boolean flag) { if (CDP != null && C != null) { CDP.itemAction(action, flag); } } public void callCDToggleItem(final String action) { if (CDP != null && C != null) { CDP.itemToggleAction(action); } } public void mouseWheelMoved(final MouseWheelEvent e) { if (Global.getParameter("options.nomousezoom", false)) { return; } if (e.getScrollType() == MouseWheelEvent.WHEEL_BLOCK_SCROLL) { if (e.getWheelRotation() < 0) { magnify(1 / Math.sqrt(Math.sqrt(2))); } else { magnify(Math.sqrt(Math.sqrt(2))); } } else { final int n = e.getScrollAmount(); if (e.getWheelRotation() < 0) { magnify(1 / Math.pow(2, n / 12.)); } else { magnify(Math.pow(2, n / 12.)); } } } } ./src/rene/zirkel/CVS/RevisionCache/ZirkelCanvas.java#0000644000175000017500000047040411133277614021466 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel; // file: ZirkelCanvas.java import java.awt.CheckboxMenuItem; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.TextField; import java.awt.datatransfer.Clipboard; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.Enumeration; import java.util.Vector; import java.util.zip.GZIPOutputStream; import rene.dialogs.Warning; import rene.gui.Global; import rene.gui.MyCheckboxMenuItem; import rene.gui.MyMenuItem; import rene.util.FileName; import rene.util.ImageSelection; import rene.util.MyVector; import rene.util.PngEncoder; import rene.util.sort.Sorter; import rene.util.xml.XmlReader; import rene.util.xml.XmlTag; import rene.util.xml.XmlTagPI; import rene.util.xml.XmlTree; import rene.util.xml.XmlWriter; import rene.zirkel.construction.ChangedListener; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionDisplayPanel; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.construction.Interpreter; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.IntersectionConstructor; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.dialogs.AgainQuestion; import rene.zirkel.dialogs.DefineMacro; import rene.zirkel.dialogs.MessageWindow; import rene.zirkel.dialogs.ReplaceMacroQuestion; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.Drawing; import rene.zirkel.graphics.LatexOutput; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.graphics.MyGraphicsEPS; import rene.zirkel.graphics.MyGraphicsFig; import rene.zirkel.graphics.MyGraphicsPDF; import rene.zirkel.graphics.MyGraphicsSvg; import rene.zirkel.graphics.PolygonDrawer; import rene.zirkel.graphics.TrackPainter; import rene.zirkel.listener.AddEventListener; import rene.zirkel.listener.DoneListener; import rene.zirkel.listener.StatusListener; import rene.zirkel.macro.Macro; import rene.zirkel.macro.MacroBar; import rene.zirkel.macro.MacroItem; import rene.zirkel.macro.MacroMenu; import rene.zirkel.macro.MacroRunner; import rene.zirkel.macro.MacroSelectDialog; import rene.zirkel.objects.AngleObject; import rene.zirkel.objects.AreaObject; import rene.zirkel.objects.AxisObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.EquationXYObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.FixedAngleObject; import rene.zirkel.objects.FixedCircleObject; import rene.zirkel.objects.FunctionObject; import rene.zirkel.objects.IntersectionObject; import rene.zirkel.objects.MoveableObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PointonObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.QuadricObject; import rene.zirkel.objects.RayObject; import rene.zirkel.objects.SegmentObject; import rene.zirkel.objects.TwoPointLineObject; import rene.zirkel.objects.UserFunctionObject; import rene.zirkel.structures.CoordinatesXY; import rene.zirkel.tools.AnimatorTool; import rene.zirkel.tools.BinderTool; import rene.zirkel.tools.BreakpointAnimator; import rene.zirkel.tools.EditTool; import rene.zirkel.tools.LabelMover; import rene.zirkel.tools.MagnetTool; import rene.zirkel.tools.MetaMover; import rene.zirkel.tools.MoverTool; import rene.zirkel.tools.ObjectTracker; import rene.zirkel.tools.SaveJob; import rene.zirkel.tools.SetAwayTool; import rene.zirkel.tools.SetCurveCenterTool; import rene.zirkel.tools.SetFixedAngle; import rene.zirkel.tools.SetFixedCircle; import rene.zirkel.tools.SetRangeTool; import rene.zirkel.tools.SetTargetsTool; import rene.zirkel.tools.Tracker; import rene.zirkel.tools.UniversalTracker; import rene.zirkel.tools.ZoomerTool; import atp.sHotEqn; import eric.JGlobals; import eric.JUndo; import eric.controls.JControlsManager; /** * @author Rene Main class, doing most of the work in the C.a.R. application. * This canvas handles mouse and keyboard input, displays the * construction and has tools to save and load constructions. */ public class ZirkelCanvas extends javax.swing.JPanel implements MouseListener, MouseMotionListener, ItemListener, AddEventListener, ActionListener, ChangedListener, MouseWheelListener // the canvas to do the construction { /** * */ private static final long serialVersionUID=1L; ObjectConstructor OC=new MoverTool(); // the current object constructor Construction C=new Construction(), COriginal; // the construction (collection of Constructor-Objects) StatusListener SL=null; // for displaying a status message public Image I=null; MyGraphics IG; public UniversalTracker UniversalTrack=null; Image Background=null; FontMetrics FM; public double PointSize=4.0; // Size of a point double MinPointSize=4.0; // Default minimal point size public double FontSize=12.0; // Size of font double MinFontSize=12.0; // Default minimal font size public int IW=0, IH=0; // Image and its dimensions public double Xmin, DX, Ymin, DY; boolean ShowHidden=false; // show hidden objects Frame F=new Frame(); boolean ReadOnly; boolean AllowRightMouse=true; public PopupMenu PM; CheckboxMenuItem CheckboxHidden; MenuItem Replay, Empty; boolean Job=false; // this is a job (save as such) String Last=""; // Last displayed job object Vector Targets=new Vector(); // Target names ConstructionObject TargetO[], TargetS[]; // Target objects and solutions int ShowColor=0; // 0=all, 1=green etc. (black displays always) static public double // factors for rounding EditFactor=1000000.0, LengthsFactor=100.0, AnglesFactor=1.0; public boolean Visual=Global.getParameter("options.visual", true); boolean All; boolean Interactive=true; public int GridColor=0, GridThickness=ConstructionObject.THIN; public boolean ShowGrid=false, AxesOnly=false, ShowDots=true, ShowLines=true; public boolean GridLabels=true, GridBold=false, GridLarge=false; public JControlsManager JCM; public JUndo JU=new JUndo(); /** * Initiate an empty construction. The display may have a popup menu (only * for readonly displays). * * @param readonly * User cannot change the construction. * @param replay * Replay option in popup menu. * @param hidden * Show hidden option in popup menu. */ public ZirkelCanvas(final boolean readonly, final boolean replay, final boolean hidden) { ReadOnly=readonly; AllowRightMouse=!readonly; // setLayout(new BoxLayout(this,BoxLayout.X_AXIS)); setLayout(null); UniversalTrack=new UniversalTracker(this); JCM=new JControlsManager(this); if (Global.getParameter("options.nopopupmenu", false)) { PM=null; } else if (ReadOnly) { PM=new PopupMenu(); CheckboxHidden=new MyCheckboxMenuItem(Zirkel.name("popup.hidden")); CheckboxHidden.addItemListener(this); if (hidden) { PM.add(CheckboxHidden); } Replay=new MyMenuItem(Zirkel.name("popup.replay")); Replay.addActionListener(this); if (replay) { PM.add(Replay); } if (hidden||replay) { add(PM); } else { PM=null; } } else { PM=new PopupMenu(); Empty=new MyMenuItem(Zirkel.name("popup.empty")); add(PM); } C.CL=this; clear(); updateDigits(); C.addAddEventListener(this); addMouseWheelListener(this); } public ZirkelCanvas(final boolean readonly) { this(readonly, true, true); } public ZirkelCanvas() { this(false, true, true); } @Override public void paintComponents(final Graphics g) { } public void deleteAxisObjects() { C.deleteAxisObjects(); reloadCD(); repaintCD(); } public void createAxisObjects() { C.createAxisObjects(); } private void setShowHideParameters(final String s, final boolean b) { Global.setParameter("options.point."+s, b); Global.setParameter("options.segment."+s, b); Global.setParameter("options.line."+s, b); Global.setParameter("options.circle."+s, b); Global.setParameter("options.angle."+s, b); Global.setParameter("options.text."+s, b); Global.setParameter("options.locus."+s, b); Global.setParameter("options."+s, b); // setShowNames(true); } public void JSsend(final String s) { if (s.equals("shownames")) { setShowHideParameters("shownames", true); } else if (s.equals("hidenames")) { setShowHideParameters("shownames", false); } else if (s.equals("showvalues")) { setShowHideParameters("showvalues", true); } else if (s.equals("hidevalues")) { setShowHideParameters("showvalues", false); } else { try { C.interpret(this, s); } catch (final Exception ex) { } } } public String JSreceive(final String s) { String r="ERROR..."; try { double rep; final Expression exp=new Expression(s, C, null); rep=exp.getValue(); r=String.valueOf(rep); } catch (final ConstructionException ex) { ex.printStackTrace(); } return r; } public Dimension UseSize=null; @Override public Dimension getMinimumSize() { if (Background==null||!Global.getParameter("background.usesize", false)) { if (UseSize!=null) { return UseSize; } else { return new Dimension(600, 600); } } else { final int iw=Background.getWidth(this); if (iw<10) { return new Dimension(600, 600); } final int ih=Background.getHeight(this); if (Global.getParameter("background.usewidth", false)) { final int w=getSize().width, h=(int) ((double) ih/iw*w+0.5); return new Dimension(w, h); } else { return new Dimension(iw, ih); } } } @Override public Dimension getPreferredSize() { return getMinimumSize(); } public void updateDigits() { EditFactor=Math.pow(10, Global.getParameter("digits.edit", 5)); LengthsFactor=Math.pow(10, Global.getParameter("digits.lengths", 5)); AnglesFactor=Math.pow(10, Global.getParameter("digits.angles", 0)); } public void itemStateChanged(final ItemEvent e) { if (e.getSource()==CheckboxHidden) { ShowHidden=CheckboxHidden.getState(); repaint(); } } ZirkelCanvasInterface ZCI; public void setZirkelCanvasListener(final ZirkelCanvasInterface zci) { ZCI=zci; } public String loadImage() { return ZCI.loadImage(); } public Image doLoadImage(final String filename) { return ZCI.doLoadImage(filename); } public void actionPerformed(final ActionEvent e) { if (!Interactive) { return; } if (e.getSource()==Replay) { if (ZCI!=null) { ZCI.replayChosen(); } } else { final Enumeration en=Macros.elements(); while (en.hasMoreElements()) { final MacroItem m=(MacroItem) en.nextElement(); if (m.I==e.getSource()) { if (ZCI!=null) { ZCI.runMacro(m.M); } break; } } } } // Some transfer functions to compute screen coordinates etc. public double col(final double x) { return (x-Xmin)/DX*IW; } public double row(final double y) { return IH-(y-Ymin)/DY*IH; } public int width() { return IW; } public int height() { return IH; } public double x(final int c) { return Xmin+DX*c/IW; } public double y(final int r) { return Ymin+DY*(IH-r)/IH; } public double dx(final int c) { return DX*c/IW; } public double dy(final int r) { return DY*r/IH; } public double dx(final double c) { return DX*c/IW; } public double dy(final double r) { return DY*r/IH; } public double maxX() { return Xmin+DX; } public double minX() { return Xmin; } public double maxY() { return Ymin+DY; } public double minY() { return Ymin; } public boolean isInside(final double x, final double y) { return x>=Xmin&&x=Ymin&&y0) { C.setPixel(getSize().width/DX); } } DoneListener DL; public void setDoneListener(final DoneListener dl) { DL=dl; } /** * Add an item to the construction and re-paint the construction. */ public void addObject(final ConstructionObject o) // called by the // ObjectConstructor { C.add(o); if (Preview) { o.setIndicated(true); o.setSelectable(false); } C.updateCircleDep(); } /** * A construction added an item. Check, if it solves a problem and notify * the DoneListener, if so. */ public void added(final Construction c, final ConstructionObject o) { if (displayJob()&&TargetO.length>0) { boolean olddone=true; for (int i=0; i0) { boolean olddone=true; for (int i=0; i0) { final ConstructionObject o=select(v, e.getX(), e.getY()); if (o!=null) { new EditTool().mousePressed(e, o, this); check(); return; } else { repaintCD(); } return; } } if (Moved<=2&&PM!=null&&!Global.getParameter("restricted", false)) { int n=2; if (ReadOnly||!Global.getParameter("options.doubleclick", false)) { n=1; } if (e.getClickCount()>=n&&(ReadOnly||Macros.size()!=0)) { PM.show(e.getComponent(), e.getX(), e.getY()); } } repaintCD(); return; } if (SmartBoardPreview&&Global.getParameter("smartboard", false)) { Control=e.isControlDown(); clearIndicated(); clearPreview(); repaint(); Dragging=false; OC.mousePressed(e, this); SmartBoardPreview=false; mouseReleased(e); return; } if (!Dragging) { OC.mouseReleased(e, this); Dragging=false; repaintCD(); return; } if (Moved<=1) { if (OC instanceof LabelMover) { ((LabelMover) OC).resetPoint(); OC.mouseReleased(e, this); } else if (OC instanceof MetaMover) { OC.mouseReleased(e, this); if (!ReadOnly) { new EditTool().mousePressed(e, this); } } } else { OC.mouseReleased(e, this); } repaintCD(); check(); Dragging=false; } public synchronized void mouseClicked(final MouseEvent e) { } public synchronized void mouseExited(final MouseEvent e) { if (!Interactive) { return; } clearIndicated(); clearPreview(); repaint(); SmartBoardPreview=false; RightClicked=false; repaintCD(); } public void mouseEntered(final MouseEvent e) { } public synchronized void mouseMoved(final MouseEvent e) { if (!Interactive||!Global.getParameter("options.indicate", true)) { return; } if (Global.getParameter("smartboard", false)) { return; } Count.setAllAlternate(true); OC.mouseMoved(e, this, Global.getParameter("options.indicate.simple", false)); Count.setAllAlternate(false); repaintCD(); } DragThread DT=null; public synchronized void mouseDragged(final MouseEvent e) { if (!Interactive) { return; } if (DT==null) { DT=new DragThread(this); } if (SmartBoardPreview&&Global.getParameter("smartboard", false)) { OC.mouseMoved(e, this, Global.getParameter( "options.indicate.simple", false)); } else { DT.mouseDragged(e); Moved++; } repaintCD(); } public synchronized void doMouseDragged(final MouseEvent e) { OC.mouseDragged(e, this); } ConstructionObject LastPaint=null; public void newImage() { I=null; repaint(); } boolean Frozen=false; public void setFrozen(final boolean f) { Frozen=f; } public boolean getFrozen() { return Frozen; } MessageWindow MW; final double PointSizeFactor=240.0; int CC=0; // public void repaint(){ // // System.out.print("a "); // // super.repaint(); // StackTraceElement[] trace = new Throwable().getStackTrace(); // if (!trace[1].equals("javax.swing.JComponent")) super.repaint(); // // // for (int i=0;i0) { final ConstructionObject os[]=new ConstructionObject[n]; e=C.elements(); n=0; while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.HasZ) { os[n++]=o; } } Sorter.sort(os); for (int i=0; i250&&PolygonDrawer.step<50) { PolygonDrawer.step=PolygonDrawer.step*2; } if (time<100&&PolygonDrawer.step>4) { PolygonDrawer.step=PolygonDrawer.step/2; } paintDrawings(IG); // JMacrosTools.CurrentJZF.JCM.paintControls(IG.getGraphics()); } void dopaintFig(final MyGraphicsFig IG) { if (ShowGrid) { paintGrid(IG); } IG.pushLayer(true); int layer=0; while (true) { IG.pushLayer(); int l=0; Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==LastPaint) { break; } if (l==layer&&o.isBack()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l>layer) { break; } } } if (llayer) { break; } } } l=0; e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==LastPaint) { break; } if (l==layer&&!o.isBack()&&o.selected()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l>layer) { break; } } } layer++; } IG.pushLayer(false); if (LastPaint==null) { paintTrack(IG); } } int xg[]=new int[64], yg[]=new int[64]; public void setGrid() { ShowGrid=Global.getParameter("showgrid", false); AxesOnly=Global.getParameter("axesonly", false); ShowDots=Global.getParameter("showdots", false); ShowLines=Global.getParameter("showlines", false); GridThickness=Global.getParameter("grid.thickness", ConstructionObject.THIN); GridColor=Global.getParameter("grid.colorindex", 0); GridBold=Global.getParameter("grid.bold", false); GridLarge=Global.getParameter("grid.large", false); GridLabels=Global.getParameter("grid.labels", true); } /** * Paint axes and grid. * * @param IG */ void paintGrid(final MyGraphics IG) { if (GridThickness==ConstructionObject.NORMAL) { IG.setColor(ZirkelFrame.Colors[Global.getParameter( "grid.colorindex", 0)]); } else { IG.setColor(ZirkelFrame.LightColors[GridColor]); } IG.setFont(GridLarge, GridBold); final double gridsize=getGridSize(); int dd=IH/200; if (dd<1) { dd=1; } double x1=Math.floor((C.getX()-C.getW())/gridsize-1)*gridsize; int xi=0; while (x1<(C.getX()+C.getW())&&xi<64) { final int c=(int) col(x1); xg[xi++]=c; x1+=gridsize; } double y1=Math.floor((C.getY()-C.getW())/gridsize-1)*gridsize; int yi=0; while (y1<(C.getY()+C.getW())&&yi<64) { final int r=(int) row(y1); yg[yi++]=r; y1+=gridsize; } for (int i=0; iC.getX()-C.getW()) { final int c=(int) col(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(c, 0, c, IH); } else { IG.drawThickLine(c, 0, c, IH); } } if (0C.getY()-C.getW()) { final int r=(int) row(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(0, r, IW, r); } else { IG.drawThickLine(0, r, IW, r); } } } dd=dd*2; double labelsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; while (C.getW()*2/labelsize>=10) { labelsize*=10; } if (C.getW()*2/labelsize<5) { labelsize/=2; } final FontMetrics fm=IG.getFontMetrics(); final int FH=fm.getHeight(); x1=Math.floor((C.getX()-C.getW())/labelsize-1)*labelsize; int lh=(int) row(0); int bottomshift=FH+2; if (lh<0||lh>IH) { lh=IH; bottomshift=-7; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); final String s=format(x1); if (s.length()>0) { if (GridLabels) { IG.drawString(s, c-fm.stringWidth(s)/2, lh+bottomshift); } IG.drawLine(c, lh-dd, c, lh+dd); } x1+=labelsize; } boolean left=true; int lw=(int) col(0); if (lw<0||lw>IW-20) { lw=0; left=false; } y1=Math.floor((C.getY()-C.getW())/labelsize-1)*labelsize; while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); final String s=format(y1); if (s.length()>0) { final int leftshift=(left)?-fm.stringWidth(s)-5:8; if (GridLabels) { IG.drawString(s, lw+leftshift, r+FH/2-2); } IG.drawLine(lw-dd, r, lw+dd, r); } y1+=labelsize; } } /** * Paint only the coordinate axes (no grid) * * @param IG */ void paintAxes(final MyGraphics IG) { IG.setAntialiasing(false); if (GridThickness==ConstructionObject.NORMAL) { IG.setColor(ZirkelFrame.Colors[GridColor]); } else { IG.setColor(ZirkelFrame.LightColors[GridColor]); } IG.setFont(GridLarge, GridBold); final double gridsize=getGridSize(); double x1=Math.floor((C.getX()-C.getW())/gridsize-1)*gridsize; final int r0=(int) row(0); int dd=IH/200; if (dd<1) { dd=1; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); IG.drawLine(c, r0-dd, c, r0+dd); x1+=gridsize; } double y1=Math.floor((C.getY()-C.getW())/gridsize-1)*gridsize; final int c0=(int) col(0); while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); IG.drawLine(c0-dd, r, c0+dd, r); y1+=gridsize; } if (GridThickness!=ConstructionObject.INVISIBLE) { if (0C.getX()-C.getW()) { final int c=(int) col(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(c, 0, c, IH); } else { IG.drawThickLine(c, 0, c, IH); } } if (0C.getY()-C.getW()) { final int r=(int) row(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(0, r, IW, r); } else { IG.drawThickLine(0, r, IW, r); } } } dd=dd*2; double labelsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; while (C.getW()*2/labelsize>=10) { labelsize*=10; } if (C.getW()*2/labelsize<5) { labelsize/=2; } final FontMetrics fm=IG.getFontMetrics(); final int FH=fm.getHeight(); x1=Math.floor((C.getX()-C.getW())/labelsize-1)*labelsize; int lh=(int) row(0); int bottomshift=FH+2; if (lh<0||lh>IH) { lh=IH; bottomshift=-7; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); final String s=format(x1); if (s.length()>0) { if (GridLabels) { IG.drawString(s, c-fm.stringWidth(s)/2, lh+bottomshift); } IG.drawLine(c, lh-dd, c, lh+dd); } x1+=labelsize; } boolean left=true; int lw=(int) col(0); if (lw<0||lw>IW-20) { lw=0; left=false; } y1=Math.floor((C.getY()-C.getW())/labelsize-1)*labelsize; while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); final String s=format(y1); if (s.length()>0) { final int leftshift=(left)?-fm.stringWidth(s)-5:8; if (GridLabels) { IG.drawString(s, lw+leftshift, r+FH/2-2); } IG.drawLine(lw-dd, r, lw+dd, r); } y1+=labelsize; } IG.setAntialiasing(true); } public double pointSize() { return PointSize; } public double SelectionPointFactor=Global.getParameter("selectionsize", 1.5); public double selectionSize() { return SelectionPointFactor*PointSize; } public double Scale=1.0; public int scale(final int x) { return (int) (Scale*x); } static char c[]=new char[20]; int nc; public String format(double x) { // double xx=x; nc=0; boolean minus=false; if (x<-1e-12) { minus=true; x=-x; } x+=1e-12; final double h=x-Math.floor(x); if (rekformat(h, 8)) { c[nc++]='.'; } while (x>=1) { final double s=Math.floor(x/10); c[nc++]=(char) ('0'+(int) (x-s*10)); x=s; } if (nc>0&&minus) { c[nc++]='-'; } // revert c: for (int i=0; i "+new String(c,0,nc)); return new String(c, 0, nc); } boolean rekformat(double h, final int k) { h=h*10; final double x=Math.floor(h); if (k==0) { final int i=(int) x; if (i>0) { c[nc++]=(char) ('0'+i); return true; } else { return false; } } else { final int i=(int) x; if (rekformat(h-x, k-1)||i>0) { c[nc++]=(char) ('0'+i); return true; } else { return false; } } } @Override public void update(final Graphics g) { paint(g); } public void paintUntil(final ConstructionObject o) { if (LastPaint==o) { return; } LastPaint=o; repaint(); } // validate all elements @Override public void validate() { dovalidate(); if (OC instanceof TrackPainter) { ((TrackPainter) OC).validate(this); } } /** * Synchronized update of the construction to avoid a repaint during update. */ synchronized public void dovalidate() { C.dovalidate(); } // selection routines: // This vector is used by ALL selection and indication routines for // performance reasons. MyVector V=new MyVector(); public void sort(final MyVector V) { if (V.size()<2) { return; } Sorter.QuickSort(V.getArray(), 0, V.size()-1); } /** * Slow function to resort a vector by the number of each element in the * construction. */ public void sortRow(final MyVector V) { final ConstructionObject o[]=new ConstructionObject[V.size()]; V.copyInto(o); V.removeAllElements(); final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject oo=(ConstructionObject) e.nextElement(); for (final ConstructionObject element : o) { if (element==oo) { V.addElement(oo); break; } } } } /** * select a circle or a line. **/ public ConstructionObject selectCircleLine(final int x, final int y, final boolean multiple) // select a circle or a line { final MyVector v=selectCircleLineObjects(x, y, multiple, false); return select(v); } public ConstructionObject selectCircleLine(final int x, final int y) // select // a // circle // or // a // line { return selectCircleLine(x, y, true); } /** * select a circle or a line. **/ public ConstructionObject selectPointonObject(final int x, final int y, final boolean multiple) // select a circle or a line { final MyVector v=selectPointonObjects(x, y, multiple, false); return select(v); } public ConstructionObject selectPointonObject(final int x, final int y) // select // a // circle // or // a // line { return selectPointonObject(x, y, true); } /** * Select all possible circles or lines at x,y. If a matching non-filled * object is found above a filled object, the latter is never selected. * * @param multiple * determines, if it is possible to select selected objects. * @param testlocal * determines, if objects that look locally like already selected * objects should be omitted. */ public MyVector selectCircleLineObjects(final int x, final int y, final boolean multiple, final boolean testlocal) // select a circle // or a line { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject||o instanceof PrimitiveCircleObject)&&o.nearto(x, y, true, this)&&(multiple||!o.selected())) { if (testlocal) { final Enumeration ev=V.elements(); while (ev.hasMoreElements()) { final ConstructionObject ov=(ConstructionObject) ev.nextElement(); if (o.locallyLike(ov)) { o=null; break; } } } if (o!=null) { V.addElement(o); } } } return V; } public MyVector selectCircleLineObjects(final int x, final int y, final boolean multiple) { return selectCircleLineObjects(x, y, multiple, false); } public MyVector selectCircleLineObjects(final int x, final int y) { return selectCircleLineObjects(x, y, true, false); } /** * Select all possible object at x,y that can carry a point. * * @param multiple * determines, if it is possible to select selected objects. * @param testlocal * determines, if objects that look locally like already selected * objects should be omitted. */ public MyVector selectPointonObjects(final int x, final int y, final boolean multiple, final boolean testlocal) // select a circle // or a line { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PointonObject)&&o.nearto(x, y, true, this)&&(multiple||!o.selected())) { if (testlocal) { final Enumeration ev=V.elements(); while (ev.hasMoreElements()) { final ConstructionObject ov=(ConstructionObject) ev.nextElement(); if (o.locallyLike(ov)) { o=null; break; } } } if (o!=null) { V.addElement(o); } } } return V; } public MyVector selectPointonObjects(final int x, final int y, final boolean multiple) { return selectPointonObjects(x, y, multiple, false); } public MyVector selectPointonObjects(final int x, final int y) { return selectPointonObjects(x, y, true, false); } /** * Select all selectable objects near to x,y. * * @param multiple * allows multiple selections. **/ public MyVector selectObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } return V; } public MyVector selectObjects(final int x, final int y) { return selectObjects(x, y, true); } /** * Select a single object near x,y. **/ public ConstructionObject selectObject(final int x, final int y, final boolean multiple) { final MyVector v=selectObjects(x, y, multiple); return select(v, x, y); } public ConstructionObject selectObject(final int x, final int y) { return selectObject(x, y, true); } /** * select all constructable objects near x,y. **/ public MyVector selectConstructableObjects(final int x, final int y, final boolean multiple) // select an enumeration of objects { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.valid()&&o.isFlag()&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } return V; } public MyVector selectConstructableObjects(final int x, final int y) { return selectConstructableObjects(x, y, true); } /** * select a single constructable object near x,y. **/ public ConstructionObject selectConstructableObject(final int x, final int y) { final MyVector v=selectConstructableObjects(x, y, true); return select(v, x, y); // user determines } /** * Select a single line, segment, ray, perp., paral. or fixed angle near * x,y. **/ public PrimitiveLineObject selectLine(final int x, final int y, final boolean multiple) { selectLineObjects(x, y, multiple); return (PrimitiveLineObject) select(V); } public void selectLineObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PrimitiveLineObject selectLine(final int x, final int y) { return selectLine(x, y, true); } /** * Select a point or a line (for the object tracker). */ public void selectPointsOrLines(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject||o instanceof PointObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } /** * Select a single line, segment, or ray near x,y **/ public TwoPointLineObject selectTwoPointLine(final int x, final int y, final boolean multiple) { selectTwoPointLines(x, y, multiple); return (TwoPointLineObject) select(V); } public void selectTwoPointLines(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof TwoPointLineObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public TwoPointLineObject selectTwoPointLine(final int x, final int y) { return selectTwoPointLine(x, y, true); } /** * Select a single segment near x,y **/ public SegmentObject selectSegment(final int x, final int y, final boolean multiple) { selectSegments(x, y, multiple); return (SegmentObject) select(V); } public void selectSegments(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof SegmentObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public SegmentObject selectSegment(final int x, final int y) { return selectSegment(x, y, true); } public boolean isMultipleAcceptedObject(final ConstructionObject o) { boolean b=o instanceof AreaObject; b=b||o instanceof PrimitiveLineObject; b=b||o instanceof PrimitiveCircleObject; b=b||o instanceof QuadricObject; b=b||o instanceof eric.JLocusTrackObject; return b; } public void selectMultipleFinals(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PointObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.removeAllElements(); return; } if (o.isSelectable()&&(isMultipleAcceptedObject(o))&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } if (V.size()>1) { V.removeAllElements(); } } public ConstructionObject selectMultipleFinal(final int x, final int y, final boolean multiple) { selectMultipleFinals(x, y, multiple); return (ConstructionObject) select(V); } /** * Select a single ray near x,y **/ public RayObject selectRay(final int x, final int y, final boolean multiple) { selectRays(x, y, multiple); return (RayObject) select(V); } public void selectRays(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof RayObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public RayObject selectRay(final int x, final int y) { return selectRay(x, y, true); } /** * Select a circle near x,y. A non-filled object is preferred before a * filled object. **/ public PrimitiveCircleObject selectCircle(final int x, final int y, final boolean multiple) { selectCircles(x, y, multiple); return (PrimitiveCircleObject) select(V); } public void selectCircles(final int x, final int y, final boolean multiple) { Enumeration e=C.elements(); V.removeAllElements(); boolean haveNotFilled=false; while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveCircleObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); if (!o.isFilledForSelect()) { haveNotFilled=true; } } } if (haveNotFilled) { e=V.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isFilledForSelect()) { V.removeElement(o); } } } } public PrimitiveCircleObject selectCircle(final int x, final int y) { return selectCircle(x, y, true); } /** * Select a point near x,y. **/ public PointObject selectPoint(final int x, final int y, final boolean multiple) { selectPointObjects(x, y, multiple); return (PointObject) select(V); } public void selectPointObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PointObject selectPoint(final int x, final int y) { return selectPoint(x, y, true); } public PointObject selectPoint(final int x, final int y, final boolean multiple, final ConstructionObject until) { selectPointObjects(x, y, multiple, until); return (PointObject) select(V); } public void selectPointObjects(final int x, final int y, final boolean multiple, final ConstructionObject until) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==until) { break; } if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PointObject selectPoint(final int x, final int y, final ConstructionObject until) { return selectPoint(x, y, true, until); } boolean NewPoint=false; public boolean isNewPoint() { return NewPoint; } /** * Select a point, and create a new point, if necessary. Even creates an * intersection, or a point bound to an object, if possible. If enabled, the * user is asked for confirmation in these cases. The variable NewPoint is * set to true, if the point was indeed created. * * @param multiple * determines, if multiple selections are possible. * @param any * determines, if the first point should be used. **/ public PointObject selectCreatePoint(final int x, final int y, final boolean multiple, final boolean any) { NewPoint=false; if (Preview) { final PointObject p=new PointObject(C, x(x), y(y)); addObject(p); p.setSuperHidden(true); PreviewObject=p; return p; } // User selects a known point: final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } sort(V); } if (V.size()>0) { if (any) { return (PointObject) (V.elementAt(0)); } final ConstructionObject o=select(V, Control||!Global.getParameter("options.indicate", true)); if (o!=null) { return (PointObject) o; } return null; } // User creates a new point: ConstructionObject oc=tryCreateIntersection(x, y, true); if (oc!=null) { final PointObject o=(PointObject) oc; // o.setDefaults(); // if (o.showName()) renameABC(o,false,false); return o; } if (!IntersectionYes) { return null; } final MyVector w=selectPointonObjects(x, y, true, false); filter(w, x, y, true); if (w.size()>0) { oc=select(w, !Control); if (oc==null) { return null; } if (oc!=null) { boolean yes=true; if (Global.getParameter("options.pointon", false)) { final AgainQuestion q=new AgainQuestion(F, Zirkel.name("question.pointon"), Zirkel.name("question.title")); q.center(F); q.setVisible(true); yes=q.yes(); Global.setParameter("options.pointon", q.again()); } if (yes) { final PointObject o=new PointObject(C, x(x), y(y), oc); // if (ShowGrid&&!Global.getParameter("grid.leftsnap", // false)) { // o.snap(this); // } o.setUseAlpha(true); addObject(o); validate(); o.setDefaults(); // rename Point on object, if showname // if (o.showName()) renameABC(o,false,false); NewPoint=true; return o; } else { return null; } } } final PointObject p=new PointObject(C, x(x), y(y)); if (ShowGrid) { p.snap(this); } addObject(p); p.setDefaults(); // rename Point, if showname // if (p.showName()) renameABC(p,false,false); NewPoint=true; return p; } boolean IntersectionYes=false; public ConstructionObject tryCreateIntersection(final int x, final int y, final boolean ask) { final MyVector w=selectPointonObjects(x, y, true, true); sort(w); IntersectionYes=true; if (w.size()<2) { return null; } final ConstructionObject P1=(ConstructionObject) w.elementAt(0); final ConstructionObject P2=(ConstructionObject) w.elementAt(1); if (!(P1 instanceof PointonObject&&P2 instanceof PointonObject)) { return null; } if (!((PointonObject) P1).canInteresectWith(P2)||!((PointonObject) P2).canInteresectWith(P1)) { return null; } final IntersectionObject o[]=IntersectionConstructor.construct(P1, P2, C); if (o.length==1&&!o[0].valid()) { return null; } if (o.length==2&&!o[0].valid()&&!o[1].valid()) { return null; } if (ask&&Global.getParameter("options.intersection", false)) { final AgainQuestion q=new AgainQuestion(F, Zirkel.name("question.intersection"), Zirkel.name("question.title")); q.center(F); q.setVisible(true); IntersectionYes=q.yes(); Global.setParameter("options.intersection", q.again()); } if (IntersectionYes) { if (o.length==1||!o[1].valid()) { addObject(o[0]); o[0].autoAway(); o[0].validate(x(x), y(y)); validate(); o[0].setDefaults(); o[0].setRestricted(getRestricted()); return o[0]; } if (!o[0].valid()) { addObject(o[1]); o[1].autoAway(); validate(); o[1].setDefaults(); o[1].setRestricted(getRestricted()); return o[1]; } IntersectionObject oc=o[0]; final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d10) { return (ConstructionObject) V.elementAt(0); } else { return null; } } final ConstructionObject o=select(V, x, y); return o; } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel, final ConstructionObject until) { return selectWithSelector(x, y, sel, until, true); } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel, final boolean choice) { return selectWithSelector(x, y, sel, null, choice); } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel) { return selectWithSelector(x, y, sel, null, true); } /** * Select a moveable point at x,y. Don't ask user, take first. **/ public ConstructionObject selectImmediateMoveablePoint(final int x, final int y) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } } if (V.size()==0) { return null; } return (ConstructionObject) V.elementAt(0); } /** * Select a moveable object at x,y. **/ public ConstructionObject selectMoveableObject(final int x, final int y) { final ConstructionObject s=findSelectedObject(); if (s instanceof MoveableObject&&((MoveableObject) s).moveable()&&s.nearto(x, y, this)) { return s; } selectMoveableObjects(x, y); if (V.size()==1) { return (ConstructionObject) V.elementAt(0); } final ConstructionObject o=select(V); if (o!=null) { if (!Global.getParameter("options.choice", true)) { return o; } o.setSelected(true); } return null; } public void selectMoveableObjects(final int x, final int y, final boolean control) { V.removeAllElements(); final ConstructionObject s=findSelectedObject(); if (s instanceof MoveableObject&&((MoveableObject) s).moveable()&&s.nearto(x, y, this)) { V.addElement(s); return; } else if (control&&s instanceof FixedCircleObject&&s.nearto(x, y, this)&&((FixedCircleObject) s).fixedByNumber()) { V.addElement(s); return; } else if (control&&s instanceof FixedAngleObject&&s.nearto(x, y, this)&&((FixedAngleObject) s).fixedByNumber()) { V.addElement(s); return; } final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (!control&&o.isSelectable()&&o instanceof MoveableObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } else if (control&&o instanceof FixedCircleObject&&o.nearto(x, y, this)&&((FixedCircleObject) o).fixedByNumber()) { V.addElement(o); } else if (control&&o instanceof FixedAngleObject&&o.nearto(x, y, this)&&((FixedAngleObject) o).fixedByNumber()) { V.addElement(o); } } filter(V, x, y); } public void selectMoveableObjects(final int x, final int y) { selectMoveableObjects(x, y, false); } /** * Select a moveable object at x,y. Don't ask user, take first. **/ public ConstructionObject selectImmediateMoveableObject(final int x, final int y) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof MoveableObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } } filter(V, x, y); if (V.size()==0) { return null; } return (ConstructionObject) V.elementAt(0); } /** * try to determine the unique objects that are near coordinates x,y and * delete all others from the vector v. **/ public void filter(final MyVector v, final int x, final int y, final boolean choice) { boolean HasPoints=false, HasNotFilled=false; Enumeration e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o instanceof PointObject) { HasPoints=true; } if (!o.isFilledForSelect()) { HasNotFilled=true; } } if (HasPoints) { e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (!o.onlynearto(x, y, this)) { v.removeElement(o); } } } else if (HasNotFilled) { e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isFilledForSelect()) { v.removeElement(o); } } } sort(v); if (!choice) { v.truncate(1); } } public void filter(final MyVector v, final int x, final int y) { filter(v, x, y, Global.getParameter("options.choice", true)||Control); } /** * user must select an object in the selection dialog, unless the selection * is unique anyway, or the filter determines that the selection is unique. **/ public ConstructionObject select(final MyVector v, final int x, final int y, final boolean choice) { if (v.size()==0) { return null; } if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } filter(v, x, y); if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } if (!choice) { return (ConstructionObject) v.elementAt(0); } sortRow(V); RightClicked=false; final eric.JSelectPopupDialog d=new eric.JSelectPopupDialog(F, this, v); final ConstructionObject o=d.getConstructionObject(); d.doclose(); return o; } public ConstructionObject select(final MyVector v, final int x, final int y) { return select(v, x, y, Global.getParameter("options.choice", true)||Control); } /** * user must select an object in the selection dialog, unless the selection * is unique anyway. **/ public ConstructionObject select(final MyVector v, final boolean choice) { if (v.size()==0) { return null; } if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } // if (!choice) return (ConstructionObject)v.elementAt(0); sortRow(V); RightClicked=false; final eric.JSelectPopupDialog d=new eric.JSelectPopupDialog(F, this, v); final ConstructionObject o=d.getConstructionObject(); d.doclose(); return o; } public ConstructionObject select(final MyVector v) { return select(v, Global.getParameter("options.choice", true)||Control); } /** * select the label of a point, i.e. a point, which is set by the user * * @return the first label found **/ public ConstructionObject selectLabel(final int x, final int y) { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o.textcontains(x, y, this)) { return o; } } return null; } public ConstructionObject findSelectedObject() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.selected()) { return o; } } return null; } // Indication functions MyVector Indicated=new MyVector(); PointObject IndicatePoint=null; public void indicate(final MyVector v, final boolean showname) { if (v.size()==1) { if (showname) { setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); } else if (v.elementAt(0) instanceof PointObject) { setCursor(new Cursor(Cursor.HAND_CURSOR)); } } else { setCursor(Cursor.getDefaultCursor()); } if (Indicated.equalsIdentical(v)) { return; } Enumeration e=Indicated.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setIndicated(false); } Indicated.removeAllElements(); e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); Indicated.addElement(o); o.setIndicated(true, showname); } repaint(); } public void indicate(final MyVector v) { indicate(v, false); } public void clearIndicated() { IndicatePoint=null; if (Indicated.size()==0) { return; } final Enumeration e=Indicated.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setIndicated(false); } Indicated.removeAllElements(); setCursor(Cursor.getDefaultCursor()); repaint(); } boolean Preview=false; ConstructionObject LastNonPreview=null; MoveableObject PreviewObject=null; public void movePreview(final MouseEvent e) { if (PreviewObject!=null) { PreviewObject.move(x(e.getX()), y(e.getY())); validate(); repaint(); } } public void prepareForPreview(final MouseEvent e) { LastNonPreview=C.last(); Preview=true; } public boolean isPreview() { return Preview; } public void clearPreview() { if (!Preview) { return; } C.clearAfter(LastNonPreview); LastNonPreview=null; PreviewObject=null; Preview=false; Count.fixAll(false); } public void setPreviewObject(final MoveableObject o) { PreviewObject=o; } public ConstructionObject indicateTryCreateIntersection(final int x, final int y, final boolean ask) { final MyVector w=selectPointonObjects(x, y, true, true); sort(w); IntersectionYes=true; if (w.size()<2) { return null; } final IntersectionObject o[]=IntersectionConstructor.construct( (ConstructionObject) w.elementAt(0), (ConstructionObject) w.elementAt(1), C); if (o.length==1&&!o[0].valid()) { return null; } if (o.length==2) { if (!o[1].valid()) { if (!o[0].valid()) { return null; } } else { final IntersectionObject h=o[0]; o[0]=o[1]; o[1]=h; } } IntersectionObject oc=o[0]; if (o.length==2&&o[1].valid()) { final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d10) { IndicatePoint=null; filter(V, x, y, false); indicate(V); return; } PointObject oc=(PointObject) indicateTryCreateIntersection(x, y, true); if (oc!=null) { return; } final MyVector w=selectPointonObjects(x, y, true, false); filter(w, x, y, true); if (w.size()>=1) { if (!w.equalsIdentical(Indicated)) { oc=new PointObject(C, x(x), y(y), (ConstructionObject) w.elementAt(0)); if (ShowGrid&&!Global.getParameter("grid.leftsnap", false)) { oc.snap(this); } oc.setUseAlpha(true); oc.validate(); oc.setIndicated(true); oc.setType(PointObject.CIRCLE); oc.setColorType(ConstructionObject.THICK); IndicatePoint=oc; indicate(w); } else if (IndicatePoint!=null) { IndicatePoint.setType(PointObject.CIRCLE); IndicatePoint.setColorType(ConstructionObject.THICK); IndicatePoint.move(x(x), y(y)); IndicatePoint.project((ConstructionObject) w.elementAt(0)); repaint(); } } else { clearIndicated(); } } public void indicateCircleLineObjects(final int x, final int y) { final MyVector w=selectCircleLineObjects(x, y); filter(V, x, y); indicate(w); } public void indicatePointonObjects(final int x, final int y) { final MyVector w=selectPointonObjects(x, y); filter(V, x, y); indicate(w); } public void indicateIntersectedObjects(final int x, final int y) { final MyVector w=selectPointonObjects(x, y); if (!w.equalsIdentical(Indicated)&&w.size()>=2) { final IntersectionObject o[]=IntersectionConstructor.construct( (ConstructionObject) w.elementAt(0), (ConstructionObject) w.elementAt(1), C); IntersectionObject oc=o[0]; if (o.length==2) { final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d1=Macros.size()) { appendMacro(m); } } catch (final ConstructionException ex) { Count.setAllAlternate(false); throw ex; } Count.setAllAlternate(false); } } else if (tag.name().equals("Construction")) { if (construction) { boolean job=false; if (tag.hasParam("job")) { job=true; Last=tag.getValue("last"); if (Last==null) { throw new ConstructionException(Zirkel.name("exception.job")); } final String Target=tag.getValue("target"); if (Target==null) { Targets=new Vector(); int i=1; while (true) { final String s=tag.getValue("target"+i); i++; if (s==null) { break; } Targets.addElement(s); } } else { Targets=new Vector(); Targets.addElement(Target); } if (Targets.size()==0) { throw new ConstructionException(Zirkel.name("exception.job")); } } C.load(tree, this); if (job) { if (C.find(Last)==null) { throw new ConstructionException(Zirkel.name("exception.job")); } final Enumeration et=Targets.elements(); while (et.hasMoreElements()) { final String s=(String) et.nextElement(); if (C.find(s)==null&&(!s.startsWith("~")||C.find(s.substring(1))==null)) { throw new ConstructionException(Zirkel.name("exception.job")); } } Job=true; } break; } } else { throw new ConstructionException("Construction not found"); } } recompute(); C.translateOffsets(this); resetSum(); validate(); repaint(); } catch (final Exception e) { throw e; } reloadCD(); repaint(); // Give the magnet object list to the point // see PointConstructor.construct : Enumeration e=Construction.magnet.elements(); while (e.hasMoreElements()) { final PointObject p=(PointObject) e.nextElement(); p.setMagnetObjects((String) e.nextElement()); } // System.out.println("finished reading file"); } public void resetSum() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o instanceof ExpressionObject) { ((ExpressionObject) o).reset(); } } } public void warning(final String s, final String help) { final Warning w=new Warning(F, s, Zirkel.name("warning"), true, help); w.center(F); w.setVisible(true); } public void warning(final String s) { warning(s, ""); } public void load(final InputStream in) throws Exception { try { C.Loading=true; load(in, true, true); C.Loading=false; } catch (final Exception e) { C.Loading=false; throw e; } } public String getComment() { return C.getComment(); } public void setComment(final String s) { C.setComment(s); } public String getJobComment() { return C.getJobComment(); } public void setJobComment(final String s) { C.setJobComment(s); } /** * This can be used to set a frame window for the error dialogs that the * canvas my display. */ public void setFrame(final Frame f) { F=f; } public Frame getFrame() { return F; } /** * Maginify the view by the specified factor. */ public void magnify(final double f) { ZoomerTool.initNonDraggableObjects(C); C.setXYW(C.getX(), C.getY(), C.getW()*f); ZoomerTool.zoomNonDraggableObjectsBy(C, f); recompute(); validate(); repaint(); } /** * Shift the view with these deltas. */ public void shift(final double dx, final double dy) { ZoomerTool.initNonDraggableObjects(C); C.setXYW(C.getX()+dx*C.getW(), C.getY()+dy*C.getW(), C.getW()); ZoomerTool.shiftNonDraggableObjectsBy(C, dx*C.getW(), dy*C.getW()); recompute(); validate(); repaint(); } /** * Tracker routines: Call the OC (must be a TrackPainter) to paint the * object track. */ public void paintTrack(final MyGraphics g) { if (!(OC instanceof TrackPainter)) { return; } ((TrackPainter) OC).paint(g, this); } /** * Run through the construction to update all object texts. This should be * called, whenever the name of an item was changed. It will recreate only * those texts, which contain the old name. */ public void updateTexts(final ConstructionObject o, final String oldname) { C.updateTexts(o, oldname); } public Construction getConstruction() { return C; } public void setShowGrid(final boolean flag) { ShowGrid=flag; repaint(); } public void toggleShowGrid() { if (ShowGrid&&!AxesOnly) { AxesOnly=true; } else if (ShowGrid) { ShowGrid=false; } else { AxesOnly=false; ShowGrid=true; } Global.setParameter("showgrid", ShowGrid); Global.setParameter("axesonly", AxesOnly); repaint(); } public boolean showGrid() { return ShowGrid; } /** * Sets the job parameters for the current construction (the last item to * display and the target item). */ public void setJob(final ConstructionObject last) { Job=true; Last=last.getName(); Targets=new Vector(); } public void addJobTarget(final ConstructionObject target, final boolean visible) { if (visible) { Targets.addElement("~"+target.getName()); } else { Targets.addElement(target.getName()); } } public void clearTargets() { Targets=new Vector(); } /** * Cancel the job state o fthe current construction. */ public void clearJob() { Job=false; } /** * Test, if the construction is a valid job. */ public boolean isJob() { final Enumeration e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (C.find(s)==null&&(!s.startsWith("~")||C.find(s.substring(1))==null)) { return false; } } return Job&&C.find(Last)!=null&&Targets.size()>0; } public boolean inTargets(final String s) { final Enumeration e=Targets.elements(); while (e.hasMoreElements()) { if (((String) e.nextElement()).equals(s)) { return true; } } return false; } /** * * This will display the construction as a job (if it is a job). The * construction is copied up to the last element. The copies are marked as * keep objects, so that they cannot be changed. The last object is marked * as the target object, so that it displays in a special color. * * The function can also flip back to the original construction * (flag=false). */ public void displayJob(final boolean flag) { clearSelected(); if (!(OC instanceof SaveJob)) { OC.reset(this); } if (flag) // diplay the job { C.setOriginalOrder(true); if (displayJob()||!isJob()) { return; } final Construction Cnew=new Construction(); Cnew.setXYW(C.getX(), C.getY(), C.getW()); Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setJobTarget(true); o.setJobTarget(false); } e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); Cnew.add(o); o.setKeep(true); if (inTargets(o.getName())||inTargets("~"+o.getName())) { o.setJobTarget(true); } if (o.getName().equals(Last)) { break; } } while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (inTargets(o.getName())||inTargets("~"+o.getName())) { Cnew.add(o); o.setKeep(true); o.setJobTarget(true); } } int n=0; e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (!s.startsWith("~")) { n++; } } TargetO=new ConstructionObject[n]; TargetS=new ConstructionObject[n]; n=0; e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (!s.startsWith("~")) { TargetO[n]=Cnew.find(s); TargetS[n]=null; n++; } } COriginal=C; C=Cnew; C.addAddEventListener(this); C.setComment(COriginal.getJobComment()); recompute(); reloadCD(); repaint(); } else // display the orginal construction again { if (!displayJob()) { return; } C.removeAddEventListener(this); C=COriginal; COriginal=null; final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setKeep(false); o.setJobTarget(false); } C.setOriginalOrder(false); recompute(); reloadCD(); repaint(); } } /** * If the job is solved, this function removes all restrictions. */ public void freeJob() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setKeep(false); o.setJobTarget(false); repaint(); } } /** * Test if the canvas displays a job right now. */ public boolean displayJob() { return COriginal!=null; } // The following functions change the default values of some objects. public void setShowColor(final int i) { ShowColor=i; repaint(); } public int getShowColor() { return ShowColor; } public ObjectConstructor getOC() { return OC; } // Macros: Vector Macros=new Vector(); public Vector getMacros() { return Macros; } public boolean haveMacros() { return Macros.size()>0; } public boolean haveNonprotectedMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (!m.M.isProtected()) { return true; } } return false; } /** * Define a macro. There must be parameters (but not necessarily targets). * The function will display the macro dialog. It will create a new macro, * when the dialog was not aborted. The macro is kept in the Macros vector * by name. */ boolean defineMacro() { clearSelected(); // Read the list of Parameters and Targets from the // construction. This list is filled by the SetParameter and // SetTargets constructors. final Vector P=C.getParameters(); if (P.size()==0) // no parameters { warning(Zirkel.name("definemacro.noparams")); return false; } // Display the macro creation dialog to the user. final DefineMacro d=new DefineMacro(F, this); d.center(getFrame()); d.setVisible(true); // Aborted? if (d.isAborted()||d.getName().equals("")) { return false; } // Define a marco with the name, the comment and the paramters. final Macro m=new Macro(this, d.getName(), d.getComment(), d.getParams()); // If there are no targets, determine everything as // constructed by the paramaters, else only the things needed // to get the targets. try { defineMacro(C, m, d.targetsOnly(), d.invisible(), d.getPromptFor(), d.hideduplicates()); } catch (final ConstructionException e) { warning(e.getDescription()); OC.reset(this); return false; } storeMacro(m, false); OC.reset(this); return true; } /** * Copy a macro with fixed parameters from another macro. */ public Macro copyMacro(final Macro m, final String name, final boolean fixed[]) { try { final Macro macro=(Macro) (m.clone()); macro.Name=name; final boolean f[]=new boolean[fixed.length]; for (int i=0; i0&&!c.ShowAll, c.SuperHide, c.getPromptFor(), true); storeMacro(m, true); } /* * Store the macro in the macro list (or replace the old macro with the same * name * * @param all Replace the macro without asking. */ public void storeMacro(final Macro m, final boolean all) { int i=0; for (i=0; i=Macros.size()) { appendMacro(m); } } public boolean ProtectMacros=false; public MacroMenu MM=null; public void appendMacro(final Macro m) { if (!ReadOnly) { if (ProtectMacros) { m.setProtected(true); } if (MM==null) { MM=new MacroMenu(PM, "", null); } final MacroItem mi=MM.add(m, m.getName()); if (mi.I!=null) { mi.I.addActionListener(this); } Macros.addElement(mi); } else { if (MM==null) { MM=new MacroMenu(null, "", null); } final MacroItem mi=MM.add(m, m.getName()); if (mi.I!=null) { mi.I.addActionListener(this); } Macros.addElement(mi); } } /** * Replace the macro item number i with m. * * @return User wants to replace all subsequent macros. */ public boolean replaceMacro(final Macro m, final int i, final boolean all) { final MacroItem e=(MacroItem) Macros.elementAt(i); if (all) // don't ask { Macros.setElementAt(new MacroItem(m, e.I), i); return true; } else // ask { final ReplaceMacroQuestion d=new ReplaceMacroQuestion(getFrame(), m); d.center(getFrame()); d.setVisible(true); if (d.isNo()) { return false; } final MacroItem newitem=new MacroItem(m, e.I); MM.replace((MacroItem) Macros.elementAt(i), newitem); Macros.setElementAt(newitem, i); return d.isAll(); } } public String MacroCurrentComment; /** * The user has to choose from a list of macros (for running). */ public Macro chooseMacro() { if (Macros.size()==0) { warning(Zirkel.name("definemacro.nomacro")); return null; } final MacroSelectDialog d=new MacroSelectDialog(getFrame(), MM, false); d.setVisible(true); return d.getMacro(); } /** * The user can choose from a list of macros (for saving). * * @return A vector of selected Macros. */ public Vector chooseMacros() { if (Macros.size()==0) { warning(Zirkel.name("definemacro.nomacro")); return null; } final MacroSelectDialog d=new MacroSelectDialog(getFrame(), MM, true); d.setVisible(true); return d.getMacros(); } /** * Run a macro by name. */ public Macro chooseMacro(final String name) { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final Macro m=((MacroItem) e.nextElement()).M; if (m.getName().equals(name)) { return m; } } return null; } public void deleteMacros(final Vector v) { final Enumeration e=v.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); deleteMacro(m); } } public void deleteMacro(final MacroItem m) { Macros.removeElement(m); if (m.I!=null) { m.I.removeActionListener(this); MM.remove(m); } } public void clearMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.I!=null) { m.I.removeActionListener(this); MM.remove(m); } } Macros.removeAllElements(); } public void clearNonprotectedMacros() { final Vector V=new Vector(); final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (!m.M.isProtected()) { V.addElement(m); } } deleteMacros(V); } public void clearProtectedMacros() { final Vector V=new Vector(); final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.M.isProtected()) { V.addElement(m); } } deleteMacros(V); } public void protectMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); m.M.setProtected(true); } } public void renameMacro(final Macro macro, final String name) { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.I!=null&&m.M==macro) { deleteMacro(m); break; } } macro.setName(name); appendMacro(macro); } MacroBar MBar; public void setMacroBar(final MacroBar m) { MBar=m; } public void updateMacroBar() { // if (MBar!=null) { // MBar.update(Macros); // } } // For the prompt in the status line: TextField TF; public void setTextField(final TextField t) { TF=t; } public void setPrompt(final String s) { if (TF!=null) { TF.setText(s); } } // Loading: public void loadRun(final InputStream is) { final BufferedReader in=new BufferedReader(new InputStreamReader(is)); String s="", comment=""; while (true) { try { s=in.readLine(); if (s==null) { break; } int n; if ((n=s.indexOf("//"))>=0) { comment=s.substring(n+2).trim(); s=s.substring(0, n); } else { comment=""; } s=s.trim(); int k=0; if ((k=Interpreter.startTest("macro", s))>=0) { loadMacro(in, s.substring(k).trim()); } else if (!s.equals("")) { C.interpret(this, s, comment); } } catch (final ConstructionException e) { warning(e.getDescription()+" --- "+s); break; } catch (final Exception e) { warning(e.toString()+" --- "+s); e.printStackTrace(); break; } } C.updateCircleDep(); } public void loadMacro(final BufferedReader in, final String name) throws ConstructionException { final Construction c=new Construction(); c.clear(); String s="", comment="", macrocomment=""; boolean inComment=true, newLine=true; while (true) { try { s=in.readLine(); if (s==null) { throw new ConstructionException(Zirkel.name("exception.macroend")); } s=s.trim(); final int n=s.indexOf("//"); if (inComment&&n==0) { final String h=s.substring(n+2).trim(); if (newLine) { macrocomment=macrocomment+h; newLine=false; } else { if (h.equals("")) { macrocomment=macrocomment+"\n"; newLine=true; } else { macrocomment=macrocomment+" "+h; newLine=false; } } continue; } inComment=false; if (n>=0) { comment=s.substring(n+2).trim(); s=s.substring(0, n); } else { comment=""; } s=s.trim(); if (s.equals(Zirkel.name("end"))) { break; } if (s.toLowerCase().equals("end")) { break; } if (!s.equals("")) { c.interpret(this, s, comment); } } catch (final InvalidException e) { } catch (final ConstructionException e) { throw new ConstructionException(e.getDescription()+" --- "+s); } catch (final IOException e) { warning(e.toString()); return; } } defineMacro(name, macrocomment, c); } public double getGridSize() { double gridsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; if (C.getW()*2/gridsize>=30) { gridsize*=5; } if (C.getW()*2/gridsize<10) { gridsize/=2; } return gridsize; } public LatexOutput createBB(final String filename, final int w, final int h, final double dpi) { try { String path=""; if (Global.getParameter("options.fullpath", true)) { path=FileName.pathAndSeparator(filename); } PrintWriter out=new PrintWriter(new FileOutputStream(path+FileName.purefilename(filename)+".bb")); out.println("%%BoundingBox: 0 0 "+w+" "+h); out.close(); out=new PrintWriter(new FileOutputStream(path+FileName.purefilename(filename)+".ztx")); final LatexOutput lout=new LatexOutput(out); lout.open(w, h, dpi, path+FileName.filename(filename)); return lout; } catch (final Exception e) { warning(e.toString()); } return null; } /** * Save picture as PNG on file or copy to clipboard * * @param filename * ("" for clipboard) * @return not failed */ synchronized public boolean savePNG(final String filename, final boolean latex) { LatexOutput lout=null; if (IW==0||I==null) { return false; } if (Global.getParameter("printscale.middle", true)) { savePreviewAsPNG(filename); return true; } double dpi=Global.getParameter("printscale.dpi", 300); if (!Global.getParameter("printscale.sizes", false)) { final int w=Global.getParameter("printscale.w", IW); final int h=Global.getParameter("printscale.h", IH); if (latex) { lout=createBB(filename, w, h, dpi); } final int IWold=IW; IW=w; IH=h; Scale=((double) IW)/IWold; I=createImage(IW, IH); IG=new MyGraphics13(I.getGraphics(), Scale, this, lout); IG.setSize(w, h); double pointsize=PointSize*Scale; double fontsize=FontSize*Scale; if (Scale<1) { if (Global.getParameter("options.minpointsize", false)&&pointsize. */ package rene.zirkel; // file: ZirkelFrame.java import java.awt.BorderLayout; import java.awt.CheckboxMenuItem; import java.awt.Color; import java.awt.Cursor; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.Image; import java.awt.MediaTracker; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.Enumeration; import java.util.Locale; import java.util.StringTokenizer; import java.util.Vector; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; import javax.swing.JPanel; import rene.dialogs.ColorEditor; import rene.dialogs.GetParameter; import rene.dialogs.MyFileDialog; import rene.dialogs.Question; import rene.dialogs.Warning; import rene.gui.CheckboxMenuItemAction; import rene.gui.CloseFrame; import rene.gui.Global; import rene.gui.HistoryTextField; import rene.gui.IconBar; import rene.gui.IconBarListener; import rene.gui.MenuItemAction; import rene.gui.MyLabel; import rene.gui.MyMenu; import rene.gui.MyPanel; import rene.gui.Panel3D; import rene.util.FileName; import rene.util.MyVector; import rene.util.parser.StringParser; import rene.util.xml.XmlWriter; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionDisplay; import rene.zirkel.construction.ConstructionDisplayPanel; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.constructors.AngleConstructor; import rene.zirkel.constructors.AreaConstructor; import rene.zirkel.constructors.BoundedPointConstructor; import rene.zirkel.constructors.Circle3Constructor; import rene.zirkel.constructors.CircleConstructor; import rene.zirkel.constructors.ExpressionConstructor; import rene.zirkel.constructors.ImageConstructor; import rene.zirkel.constructors.IntersectionConstructor; import rene.zirkel.constructors.LineConstructor; import rene.zirkel.constructors.MidpointConstructor; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.constructors.ParallelConstructor; import rene.zirkel.constructors.PlumbConstructor; import rene.zirkel.constructors.PointConstructor; import rene.zirkel.constructors.QuadricConstructor; import rene.zirkel.constructors.RayConstructor; import rene.zirkel.constructors.SegmentConstructor; import rene.zirkel.constructors.TextConstructor; import rene.zirkel.dialogs.AboutDialog; import rene.zirkel.dialogs.CommentDialog; import rene.zirkel.dialogs.DigitsDialog; import rene.zirkel.dialogs.EditGridDialog; import rene.zirkel.dialogs.EditIconBar; import rene.zirkel.dialogs.EditRunDialog; import rene.zirkel.dialogs.ExportDialog; import rene.zirkel.dialogs.ExportScaler; import rene.zirkel.dialogs.ExportSettingsDialog; import rene.zirkel.dialogs.ExportTemplateDialog; import rene.zirkel.dialogs.LatexSettingsDialog; import rene.zirkel.dialogs.RenameMacroDialog; import rene.zirkel.dialogs.Replay; import rene.zirkel.dialogs.SizesDialog; import rene.zirkel.dialogs.Sure; import rene.zirkel.listener.DoneListener; import rene.zirkel.listener.StatusListener; import rene.zirkel.macro.Macro; import rene.zirkel.macro.MacroBar; import rene.zirkel.macro.MacroRunner; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.SegmentObject; import rene.zirkel.tools.AnimatorTool; import rene.zirkel.tools.BreakpointAnimator; import rene.zirkel.tools.DeleteTool; import rene.zirkel.tools.DrawerTool; import rene.zirkel.tools.EditTool; import rene.zirkel.tools.HiderTool; import rene.zirkel.tools.MoverTool; import rene.zirkel.tools.ObjectTracker; import rene.zirkel.tools.RenamerTool; import rene.zirkel.tools.ReorderTool; import rene.zirkel.tools.SaveJob; import rene.zirkel.tools.SetParameterTool; import rene.zirkel.tools.SetTargetsTool; import rene.zirkel.tools.Tracker; import rene.zirkel.tools.ZoomerTool; import eric.JHelpPanel; import eric.JLocusObjectTracker; class ZirkelFrameLoadThread implements Runnable { String Name; ZirkelFrame ZF; public ZirkelFrameLoadThread(final ZirkelFrame zf, final String name) { Name = name; ZF = zf; new Thread(this).start(); } public void run() { ZF.doload(Name, null); ZF.setEnabled(true); ZF.ZC.requestFocus(); // eric.JMacrosTools.AfterLoadThread(ZF); } } class ShowWarning implements Runnable { ZirkelFrame ZF; String S; public ShowWarning(final ZirkelFrame zf, final String s) { ZF = zf; S = s; new Thread(this).start(); } public void run() { try { Thread.sleep(1000); } catch (final InterruptedException e) { e.printStackTrace(); } ZF.warning(S); } } public class ZirkelFrame extends CloseFrame implements StatusListener, KeyListener, IconBarListener, DoneListener, ZirkelCanvasInterface { /** * */ private static final long serialVersionUID = 1L; public ZirkelCanvas ZC; public javax.swing.JLabel Status; public String Filename = ""; public CheckboxMenuItem RestrictIcons; CheckboxMenuItem ShowHidden, Grid, TestJob, Partial, PartialLines, Vectors, IncludeMacros, LongNames, ShowNames, ShowValues, Visual, FullIcons, IsoScale, Obtuse, Solid, Compress, RestrictedMode, FontBold, FontLarge, Beginner, AlwaysClearMacros, LargeFont, BoldFont, PrintScalePreview, ConstructionDisplay, LeftSnap, Restricted, MacroBar, DefaultMacrosInBar; IconBar IA, IB; MacroBar IM; HistoryTextField Input; public String Background = ""; // color menu items: static Color DefaultColors[] = { Color.black, Color.green.darker().darker(), Color.blue.darker(), new Color(150, 100, 0), Color.cyan.darker().darker(), new Color(180, 0, 0) }; public static Color Colors[] = DefaultColors; public static Color LightColors[]; public static Color BrighterLightColors[]; public static Color BrighterColors[]; // public static Color SelectColor=Global.getParameter("colorselect", // new Color(255,0,0)); public static Color SelectColor = Global.getParameter("colorselect", Color.red); // public static Color IndicateColor=Global.getParameter("colorselect", // new Color(250,180,50)); public static Color IndicateColor = Global.getParameter("colorselect", Color.ORANGE); public static Color TargetColor = Global.getParameter("colortarget", Color.pink); public static String ColorStrings[] = { "black", "green", "blue", "brown", "cyan", "red" }; public static String PointTypes[] = { "square", "diamond", "circle", "dot", "cross", "dcross" }; public static String ColorTypes[] = { "normal", "thick", "thin" }; public static int ColorTypeKeys[] = { KeyEvent.VK_5, KeyEvent.VK_6, KeyEvent.VK_7 }; CheckboxMenuItem ColorTypeMenuItems[] = new CheckboxMenuItem[ColorTypes.length]; public static int ColorKeys[] = { KeyEvent.VK_1, KeyEvent.VK_2, KeyEvent.VK_3, KeyEvent.VK_4 }; CheckboxMenuItem ColorMenuItems[] = new CheckboxMenuItem[ColorStrings.length]; CheckboxMenuItem ShowColorMenuItems[] = new CheckboxMenuItem[ColorStrings.length]; static int PointKeys[] = { KeyEvent.VK_5, KeyEvent.VK_6, KeyEvent.VK_7, KeyEvent.VK_8, KeyEvent.VK_9, KeyEvent.VK_0 }; CheckboxMenuItem PointMenuItems[] = new CheckboxMenuItem[PointTypes.length]; // arrays for the object tools final public static String ObjectStrings[] = // names { "point", "boundedpoint", "intersection", "line", "ray", "segment", "fixedsegment", "circle", "circle3", "fixedcircle", "parallel", "plumb", "midpoint", "angle", "fixedangle", "move", "tracker", "objecttracker", "animate", "expression", "area", "quadric", "image", "text", "hide", "locus", "runmacro", "edit", "parameter", "targets", "definejob", "delete", "reorder", "draw", "rename", "zoom", "animatebreak" }; // final public static String ObjectStrings[]= // names // {"point", "boundedpoint", "intersection", // "line", "ray", "segment", "fixedsegment", // "circle", "circle3", "fixedcircle", // "parallel", "plumb", "midpoint", // "angle", "fixedangle", // "move", "tracker", "objecttracker", "animate", // "expression", "area", "quadric", "image", "text", // "hide", "runmacro", // "edit", "parameter", "targets", "definejob", "delete", "reorder", // "draw", "rename", "zoom", "animatebreak" // }; final public static String Separators[] = // names { "point", "boundedpoint", "intersection", "!line", "ray", "segment", "fixedsegment", "!circle", "circle3", "fixedcircle", "!parallel", "plumb", "midpoint", "!angle", "fixedangle", "!move", "tracker", "objecttracker", "animate", "!expression", "area", "quadric", "image", "text", "!hide", "locus", "runmacro", "edit", "parameter", "targets", "definejob", "delete", "reorder", "draw", "rename", "zoom", "animatebreak" }; final public static String MenuTitles[] = { "points", "lines", "circles", "complex", "angles", "move", "decorative" }; final public static int IconNumber = 27; final public static int NEdit = IconNumber, NParameters = IconNumber + 1, NTargets = IconNumber + 2, NDefineJob = IconNumber + 3, NDelete = IconNumber + 4, NReorder = IconNumber + 5, NDraw = IconNumber + 6, NRename = IconNumber + 7, NZoom = IconNumber + 8, NAnimateBreak = IconNumber + 9, NLocus = IconNumber + 10; final public static int NAnimator = 18, NObjectTracker = 17, NTracker = 16, NMover = 15; final public static int NMacro = IconNumber - 1; public static ObjectConstructor ObjectConstructors[] = // constructors { new PointConstructor(), new BoundedPointConstructor(), new IntersectionConstructor(), new LineConstructor(), new RayConstructor(), new SegmentConstructor(), new SegmentConstructor(true), new CircleConstructor(), new Circle3Constructor(), new CircleConstructor(true), new ParallelConstructor(), new PlumbConstructor(), new MidpointConstructor(), new AngleConstructor(), new AngleConstructor(true), new MoverTool(), new Tracker(), new ObjectTracker(), new AnimatorTool(), new ExpressionConstructor(), new AreaConstructor(), new QuadricConstructor(), new ImageConstructor(), new TextConstructor(), new HiderTool(), new JLocusObjectTracker(), new MacroRunner(), new EditTool(), new SetParameterTool(), new SetTargetsTool(), new SaveJob(), new DeleteTool(), new ReorderTool(), new DrawerTool(), new RenamerTool(), new ZoomerTool(), new BreakpointAnimator() }; CheckboxMenuItem ObjectMenuItems[] = new CheckboxMenuItem[ObjectConstructors.length]; // menu // checkbos // items static char ObjectKeys[]; public int CurrentTool = 0; // current tool public boolean IsApplet; JPanel North, Center, MainPanel; JPanel StatusPanel, InputPanel; JPanel CenterPanel; boolean Init = false; boolean SawPreviewWarning = false; MyFileDialog FileLoad, FileSave, PicSave, HTMLSave, BackgroundLoad, ImageLoad, TemplateLoad; // The file dialogs // public LogoWindow Logo; public ZirkelFrame(final boolean applet) { super(Zirkel.name("program.name")); // set window title IsApplet = applet; if (applet) { addWindowListener( // to close properly new WindowAdapter() { @Override public void windowClosing(final WindowEvent e) { close(); } }); } else { // addWindowListener( // to close properly // new WindowAdapter() { // public void windowClosed(WindowEvent e) { // Global.saveProperties("CaR Properties"); // Global.exit(0); // } // }); } // if (!applet) Logo=new LogoWindow(this); // create menu bar final MenuBar menu = new MenuBar(); setMenuBar(menu); // file menu: final Menu file = new MyMenu(Zirkel.name("menu.file")); menuadd(file, "menu.file.new"); menuadd(file, "menu.file.clearmacros"); file.addSeparator(); menuadd(file, "menu.file.load"); menuadd(file, "menu.file.save"); menuadd(file, "menu.file.saveas"); file.addSeparator(); AlwaysClearMacros = menuaddcheck(file, "menu.file.alwaysclearmacros"); AlwaysClearMacros.setState(Global .getParameter("load.clearmacros", true)); IncludeMacros = menuaddcheck(file, "menu.file.includemacros"); IncludeMacros.setState(Global.getParameter("save.includemacros", true)); Compress = menuaddcheck(file, "menu.file.compress"); Compress.setState(Global.getParameter("save.compress", false)); file.addSeparator(); menuadd(file, "menu.file.loadjob"); file.addSeparator(); menuadd(file, "menu.file.loadrun"); menuadd(file, "menu.file.editrun"); file.addSeparator(); menuadd(file, "menu.file.print"); if (!Global.getParameter("restricted", false)) { IsoScale = menuaddcheck(file, "menu.file.print.isoscale"); IsoScale.setState(Global.getParameter("print.isoscale", false)); } file.addSeparator(); PrintScalePreview = menuaddcheck(file, "menu.options.printscalepreview"); PrintScalePreview.setState(false); Global.setParameter("printscalepreview", false); menuadd(file, "menu.file.savepng"); menuadd(file, "menu.file.copypng"); file.addSeparator(); final Menu sg = new MyMenu(Zirkel.name("menu.file.savegraphics")); menuadd(sg, "menu.file.saveeps"); menuadd(sg, "menu.file.savepdf"); sg.addSeparator(); menuadd(sg, "menu.file.savesvg"); menuadd(sg, "menu.file.savefig"); file.add(sg); file.addSeparator(); menuadd(file, "menu.options.exportsettings"); file.addSeparator(); menuadd(file, "menu.file.exit"); menu.add(file); // objects menu: final Menu objects = new MyMenu(Zirkel.name("menu.actions", "Actions")); int i; ObjectKeys = new char[ObjectStrings.length]; for (i = 0; i < ObjectStrings.length; i++) { final String shortcut = Zirkel .name("shortcuts." + ObjectStrings[i]); ObjectMenuItems[i] = new CheckboxMenuItemAction(this, Zirkel .name("objects." + ObjectStrings[i]) + " (" + shortcut + ")", ObjectStrings[i]); if (shortcut.length() > 0) { ObjectKeys[i] = shortcut.charAt(0); } } int nsub = 0; Menu sub = new MyMenu(Zirkel.name("menu.actions." + MenuTitles[nsub])); for (i = 0; i < NEdit; i++) { if (Separators[i].startsWith("!")) { objects.add(sub); nsub++; if (nsub >= MenuTitles.length) { while (i < NEdit) { if (enabled(ObjectStrings[i])) { objects.add(ObjectMenuItems[i]); } i++; } break; } sub = new MyMenu(Zirkel .name("menu.actions." + MenuTitles[nsub])); } if (enabled(ObjectStrings[i])) { sub.add(ObjectMenuItems[i]); } } ObjectMenuItems[CurrentTool].setState(true); if (!Global.getParameter("restricted", false) || icon("function")) { menuadd(objects, "menu.options.function"); } if (!Global.getParameter("restricted", false) || icon("function")) { menuadd(objects, "menu.options.userfunction"); } objects.addSeparator(); menuadd(objects, "menu.options.back"); objects.add(ObjectMenuItems[NDelete]); menuadd(objects, "menu.options.undo"); objects.addSeparator(); if (!Global.getParameter("restricted", false) || icon("rename")) { objects.add(ObjectMenuItems[NRename]); } if (!Global.getParameter("restricted", false) || icon("reorder")) { objects.add(ObjectMenuItems[NReorder]); } if (!Global.getParameter("restricted", false) || icon("objecttracker")) { menuadd(objects, "menu.options.track"); } menuadd(objects, "menu.options.hideduplicates"); menuadd(objects, "menu.options.editlast"); objects.addSeparator(); objects.add(ObjectMenuItems[NDraw]); menuadd(objects, "menu.options.cleardraw"); menu.add(objects); // options menu: final Menu options = new MyMenu(Zirkel.name("menu.options", "Options")); Visual = menuaddcheck(options, "menu.options.visual"); Visual.setState(Global.getParameter("options.visual", true)); if (!enabled("visual")) { options.remove(Visual); } else { options.addSeparator(); } ShowHidden = menuaddcheck(options, "menu.options.hidden"); if (!enabled("hidden")) { options.remove(ShowHidden); } final Menu oshowcolor = new MyMenu(Zirkel .name("menu.options.showcolor")); ShowColorMenuItems[0] = menuaddcheck(oshowcolor, Zirkel .name("menu.options.all") + " " + Zirkel.name("shortcuts.showcolor." + 0), "scs-" + ColorStrings[0]); for (i = 1; i < ColorStrings.length; i++) { ShowColorMenuItems[i] = menuaddcheck(oshowcolor, Zirkel .name("colors." + ColorStrings[i]) + " " + Zirkel.name("shortcuts.showcolor." + i), "scs-" + ColorStrings[i]); } options.add(oshowcolor); options.addSeparator(); menuadd(options, "menu.options.comment"); // menuadd(options,"menu.options.constructiondisplay"); options.addSeparator(); Grid = menuaddcheck(options, "menu.options.grid"); LeftSnap = menuaddcheck(options, "menu.options.leftsnap"); LeftSnap.setState(Global.getParameter("grid.leftsnap", false)); menuadd(options, "menu.options.editgrid"); options.addSeparator(); final Menu background = new MyMenu(Zirkel.name("menu.background")); menuadd(background, "menu.background.grab"); menuadd(background, "menu.background.clear"); background.addSeparator(); menuadd(background, "menu.background.load"); background.addSeparator(); menuaddcheck(background, "menu.background.usesize").setState( Global.getParameter("background.usesize", false)); menuaddcheck(background, "menu.background.usewidth").setState( Global.getParameter("background.usewidth", false)); menuaddcheck(background, "menu.background.tile").setState( Global.getParameter("background.tile", true)); menuaddcheck(background, "menu.background.center").setState( Global.getParameter("background.center", true)); options.add(background); final Menu zoom = new MyMenu(Zirkel.name("menu.zoom")); zoom.add(ObjectMenuItems[NZoom]); menuadd(zoom, "menu.zoom.in"); menuadd(zoom, "menu.zoom.out"); menuadd(zoom, "menu.zoom.left"); menuadd(zoom, "menu.zoom.right"); menuadd(zoom, "menu.zoom.up"); menuadd(zoom, "menu.zoom.down"); options.add(zoom); options.addSeparator(); final Menu ocolor = new MyMenu(Zirkel.name("menu.options.defaultcolor")); for (i = 0; i < ColorStrings.length; i++) { final String shortcut = Zirkel.name("shortcuts.color." + i); if (!shortcut.equals("" + i)) { ColorMenuItems[i] = menuaddcheck(ocolor, Zirkel.name("colors." + ColorStrings[i]) + " " + shortcut, "cs-" + ColorStrings[i]); } else { ColorMenuItems[i] = menuaddcheck(ocolor, Zirkel.name("colors." + ColorStrings[i]), "cs-" + ColorStrings[i]); } } options.add(ocolor); final Menu otype = new MyMenu(Zirkel.name("menu.options.defaulttype")); for (i = 0; i < PointTypes.length; i++) { PointMenuItems[i] = menuaddcheck(otype, Zirkel.name("point.type." + PointTypes[i]) + " " + Zirkel.name("shortcuts.pointtype." + i), "pt-" + PointTypes[i]); } options.add(otype); final Menu othickness = new MyMenu(Zirkel .name("menu.options.defaultthickness")); for (i = 0; i < ColorTypes.length; i++) { ColorTypeMenuItems[i] = menuaddcheck(othickness, Zirkel .name("color.type." + ColorTypes[i]) + " " + Zirkel.name("shortcuts.thickness." + i), "ct-" + ColorTypes[i]); } options.add(othickness); final Menu other = new MyMenu(Zirkel.name("menu.options.other")); Restricted = menuaddcheck(other, "menu.options.restricted"); Partial = menuaddcheck(other, "menu.options.partial"); PartialLines = menuaddcheck(other, "menu.options.plines"); Vectors = menuaddcheck(other, "menu.options.arrow"); ShowNames = menuaddcheck(other, "menu.options.shownames"); ShowValues = menuaddcheck(other, "menu.options.showvalues"); LargeFont = menuaddcheck(other, "menu.options.largefont"); BoldFont = menuaddcheck(other, "menu.options.boldfont"); LongNames = menuaddcheck(other, "menu.options.longnames"); Obtuse = menuaddcheck(other, "menu.options.obtuse"); Solid = menuaddcheck(other, "menu.options.solid"); options.add(other); if (!Global.getParameter("restricted", false)) { menu.add(options); } // settings menu final Menu settings = new MyMenu(Zirkel.name("menu.moresettings")); RestrictIcons = new CheckboxMenuItemAction(this, Zirkel .name("menu.special.restricticons"), "menu.special.restricticons"); ConstructionDisplay = menuaddcheck(settings, "menu.settings.constructiondisplay"); ConstructionDisplay.setState(Global.getParameter("options.showdisplay", true)); settings.addSeparator(); if (!Global.getParameter("restricted", false)) { settings.add(RestrictIcons); menuadd(settings, "menu.options.editicons"); settings.addSeparator(); menuadd(settings, "menu.options.sizes"); settings.addSeparator(); FontBold = menuaddcheck(settings, "menu.settings.font.bold"); FontBold.setState(Global.getParameter("font.bold", false)); FontLarge = menuaddcheck(settings, "menu.settings.font.large"); FontLarge.setState(Global.getParameter("font.large", false)); settings.addSeparator(); menuadd(settings, "menu.options.setdigits"); settings.addSeparator(); final Menu colors = new MyMenu(Zirkel.name("menu.colors")); menuadd(colors, "colors.default"); menuadd(colors, "colors.color0"); menuadd(colors, "colors.color1"); menuadd(colors, "colors.color2"); menuadd(colors, "colors.color3"); menuadd(colors, "colors.color4"); menuadd(colors, "colors.color5"); menuadd(colors, "colors.select"); menuadd(colors, "colors.target"); menuadd(colors, "colors.background"); settings.add(colors); settings.addSeparator(); menuadd(settings, "menu.settings"); } if (!Locale.getDefault().toString().startsWith("en")) { settings.add(new MenuItemAction(this, Zirkel .name("menu.settings.language") + " (Set Language)", "menu.settings.language")); } else { menuadd(settings, "menu.settings.language"); } settings.addSeparator(); RestrictedMode = menuaddcheck(settings, "menu.settings.restricted"); RestrictedMode.setState(Global.getParameter("restricted", false)); Beginner = menuaddcheck(settings, "menu.settings.beginner"); Beginner.setState(Global.getParameter("beginner", false)); menu.add(settings); // macro menu final Menu macros = new MyMenu(Zirkel.name("menu.macros")); macros.add(ObjectMenuItems[NParameters]); macros.add(ObjectMenuItems[NTargets]); menuadd(macros, "menu.special.definemacro"); macros.add(ObjectMenuItems[NMacro]); macros.addSeparator(); menuadd(macros, "menu.special.loadmacros"); menuadd(macros, "menu.special.savemacros"); macros.addSeparator(); menuadd(macros, "menu.special.renamemacro"); menuadd(macros, "menu.special.deletemacros"); macros.addSeparator(); MacroBar = menuaddcheck(macros, "menu.special.macrobar"); MacroBar.setState(Global.getParameter("macrobar", true)); DefaultMacrosInBar = menuaddcheck(macros, "menu.special.defaultmacrosinbar"); DefaultMacrosInBar.setState(Global.getParameter("defaultmacrosinbar", true)); if (!Global.getParameter("restricted", false)) { menu.add(macros); } // special menu: final Menu special = new MyMenu(Zirkel.name("menu.special")); special.add(ObjectMenuItems[NDefineJob]); menuadd(special, "menu.special.jobcomment"); TestJob = menuaddcheck(special, "menu.special.testjob"); menuadd(special, "menu.file.savejob"); special.addSeparator(); menuadd(special, "menu.special.export"); menuadd(special, "menu.special.exporttemplate"); special.addSeparator(); menuadd(special, "menu.special.replay"); if (!Global.getParameter("restricted", false)) { menu.add(special); } final Menu bp = new MyMenu(Zirkel.name("menu.special.break")); menuadd(bp, "menu.bp.setbreak"); menuadd(bp, "menu.bp.sethidingbreak"); menuadd(bp, "menu.bp.clearbreak"); bp.addSeparator(); menuadd(bp, "menu.bp.animatebreak"); special.add(bp); // help menu: final Menu help = new MyMenu(Zirkel.name("menu.help")); menuadd(help, "menu.help.about"); menuadd(help, "menu.help.info"); help.addSeparator(); menuadd(help, "menu.help.browser"); menuadd(help, "menu.help.configure"); help.addSeparator(); menuadd(help, "menu.file.loadexamples"); help.addSeparator(); if (haveHelp("gui.txt")) { final Menu texthelp = new MyMenu(Zirkel.name("menu.help.text")); menuadd(texthelp, "menu.help.help"); menuadd(texthelp, "menu.help.gui"); menuadd(texthelp, "menu.help.tools"); menuadd(texthelp, "menu.help.macros"); menuadd(texthelp, "menu.help.interactive"); menuadd(texthelp, "menu.help.tips"); help.add(texthelp); } menuadd(help, "menu.help.welcome"); menu.add(help); // the canvas ZC = new ZirkelCanvas(); if (Global.Background != null) { ZC.setBackground(Global.Background); } ZC.setBackground(Global.getParameter("colorbackground", ZC .getBackground())); ZC.addMouseListener(ZC); ZC.addMouseMotionListener(ZC); ZC.setZirkelCanvasListener(this); getContentPane().setLayout(new BorderLayout()); Center = makeCenterPanel(); ZC.setTool(ObjectConstructors[CurrentTool]); ZC.addKeyListener(this); ZC.setFrame(this); // the Status line Status = new MyLabel(""); getContentPane().add("South", StatusPanel = new Panel3D(Status)); ZC.addStatusListener(this); ZC.showStatus(); Input = new HistoryTextField(this, "Input"); InputPanel = new Panel3D(Input); ZC.setTextField(Input); // Icon Bar at North makeIconBar(); final JPanel north = new MyPanel(); north.setLayout(new GridLayout(0, 1)); north.add(IA); if (IB != IA) { north.add(IB); } if (IM != null) { north.add(IM); } North = new Panel3D(north); // add the center panel, depending on the north or south icon bar makeMainPanel(); getContentPane().add("Center", MainPanel); // Icon seticon("rene/zirkel/icon.png"); // init various things initLightColors(); initFileDialogs(); // initialize choices settool(0); setcolor(Global.getParameter("options.color", 0)); settype(Global.getParameter("options.type", 2)); setcolortype(Global.getParameter("options.colortype", 0)); showcolor(0); sethidden(false); setRestricted(Global.getParameter("options.restricted", true)); setPartial(Global.getParameter("options.partial", false)); setPartialLines(Global.getParameter("options.plines", false)); setVectors(Global.getParameter("options.arrow", false)); setShowNames(Global.getParameter("options.shownames", false)); setShowValues(Global.getParameter("options.showvalues", false)); setLongNames(Global.getParameter("options.longnames", false)); setLargeFont(Global.getParameter("options.largefont", false)); setBoldFont(Global.getParameter("options.boldfont", false)); setObtuse(Global.getParameter("options.obtuse", false)); setSolid(Global.getParameter("options.solid", false)); if (Global.Background != null) { setBackground(Global.Background); } // show: pack(); setLocation(100, 40); setPosition("zirkelframe"); loadDefaultMacros(); updateMacroBar(); Init = true; // setVisible(true); clearsettings(); } @Override public void paint(final Graphics g) { } final static public String DefaultIcons = " new load save back undo delete color type thickness" + " hidden showcolor macro grid comment replay" + " point line segment ray circle fixedcircle" + " parallel plumb circle3 midpoint angle fixedangle" + " move tracker objecttracker hide expression area text quadric" + " runmacro edit animate " + " info zoom draw function rename "; final static public String DefaultRestrictedIcons = " back undo color" + " hidden showcolor macro grid comment" + " point line segment ray circle" + " parallel plumb circle3 midpoint angle fixedangle" + " move tracker objecttracker hide area text quadric" + " runmacro zoom info " + " "; /** * Generate an icon bar and insert some icons. The icon bar is inserrted * into the frame at North. */ public void makeIconBar() { final String icons = Global.getParameter("icons", DefaultIcons); if (RestrictIcons.getState()) { Global.setParameter("icons", Global.getParameter("restrictedicons", DefaultRestrictedIcons)); } else { Global.setParameter("icons", icons); } if (RestrictIcons.getState() ? Global.getParameter("icons", DefaultIcons).indexOf("twolines") >= 0 : Global.getParameter( "options.fullicons", true)) { IA = new IconBar(this, false); IA.addKeyListener(this); if (icon("new")) { IA.addLeft("new"); } if (icon("load")) { IA.addLeft("load"); } if (icon("save")) { IA.addLeft("save"); } IA.addSeparatorLeft(); if (icon("back")) { IA.addLeft("back"); } if (icon("delete")) { IA.addToggleLeft("delete"); } if (icon("undo")) { IA.addLeft("undo"); } IA.addSeparatorLeft(); if (icon("edit")) { IA.addToggleLeft("edit"); } if (icon("draw")) { IA.addToggleLeft("draw"); } if (icon("rename")) { IA.addToggleLeft("rename"); } if (icon("macro")) { IA.addMultipleToggleIconLeft("macro", 3); } IA.addSeparatorLeft(); if (icon("comment")) { IA.addLeft("comment"); } if (icon("function")) { IA.addLeft("function"); } if (icon("replay")) { IA.addLeft("replay"); } if (icon("animatebreak")) { IA.addToggleLeft("animatebreak"); } IA.addSeparatorLeft(); if (icon("color")) { IA.addMultipleIconLeft("color", 6); } if (icon("type")) { IA.addMultipleIconLeft("type", 6); } if (icon("thickness")) { IA.addMultipleIconLeft("thickness", 3); } if (icon("partial")) { IA.addOnOffLeft("partial"); } if (icon("plines")) { IA.addOnOffLeft("plines"); } if (icon("arrow")) { IA.addOnOffLeft("arrow"); } IA.addSeparatorLeft(); if (icon("showname")) { IA.addOnOffLeft("showname"); } if (icon("longnames")) { IA.addOnOffLeft("longnames"); } if (icon("large")) { IA.addOnOffLeft("large"); } if (icon("bold")) { IA.addOnOffLeft("bold"); } if (icon("showvalue")) { IA.addOnOffLeft("showvalue"); } if (icon("obtuse")) { IA.addOnOffLeft("obtuse"); } if (icon("solid")) { IA.addOnOffLeft("solid"); } IA.addSeparatorLeft(); if (icon("zoom")) { IA.addToggleLeft("zoom"); } if (icon("grid")) { IA.addOnOffLeft("grid"); } if (icon("grab")) { IA.addOnOffLeft("grab"); } IA.addSeparatorLeft(); if (icon("hidden")) { IA.addOnOffLeft("hidden"); } if (icon("showcolor")) { IA.addMultipleIconLeft("showcolor", Colors.length); } if (icon("visual")) { IA.addOnOffLeft("visual"); } IA.addSeparatorLeft(); if (icon("info")) { IA.addLeft("info"); } IA.setIconBarListener(this); IB = new IconBar(this, false); IB.addKeyListener(this); IB.setIconBarListener(this); int n = 0; for (int i = 0; i < IconNumber; i++) { if (Separators[i].startsWith("!")) { n++; } if (icon(ObjectStrings[i])) { n++; } } final String a[] = new String[n]; for (int i = 0, k = 0; i < IconNumber; i++) { if (Separators[i].startsWith("!")) { a[k++] = ""; } if (icon(ObjectStrings[i])) { a[k++] = ObjectStrings[i]; } } IB.addToggleGroupLeft(a); } else { IB = new IconBar(this, false); IB.addKeyListener(this); IB.setIconBarListener(this); int n = 0; for (int i = 0; i < IconNumber; i++) { if (Separators[i].startsWith("!")) { n++; } if (icon(ObjectStrings[i])) { n++; } } final String a[] = new String[n]; for (int i = 0, k = 0; i < IconNumber; i++) { if (Separators[i].startsWith("!")) { a[k++] = ""; } if (icon(ObjectStrings[i])) { a[k++] = ObjectStrings[i]; } } IB.addToggleGroupLeft(a); IA = IB; if (icon("back")) { IB.addRight("back"); } if (icon("delete")) { IA.addToggleLeft("delete"); } if (icon("undo")) { IA.addLeft("undo"); } IA.addSeparatorLeft(); if (icon("macro")) { IB.addMultipleToggleIconRight("macro", 3); } if (icon("replay")) { IB.addRight("replay"); } if (icon("edit")) { IA.addToggleLeft("edit"); } if (icon("zoom")) { IA.addToggleLeft("zoom"); } if (icon("draw")) { IA.addToggleLeft("draw"); } if (icon("rename")) { IA.addToggleLeft("rename"); } IA.addSeparatorLeft(); if (icon("color")) { IA.addMultipleIconLeft("color", 6); } if (icon("type")) { IA.addMultipleIconLeft("type", 6); } if (icon("thickness")) { IA.addMultipleIconLeft("thickness", 3); } if (icon("partial")) { IA.addOnOffLeft("partial"); } if (icon("plines")) { IA.addOnOffLeft("plines"); } if (icon("arrow")) { IA.addOnOffLeft("arrow"); } if (icon("showname")) { IA.addOnOffLeft("showname"); } if (icon("showvalue")) { IA.addOnOffLeft("showvalue"); } if (icon("longnames")) { IA.addOnOffLeft("longnames"); } if (icon("large")) { IA.addOnOffLeft("large"); } if (icon("bold")) { IA.addOnOffLeft("bold"); } if (icon("obtuse")) { IA.addOnOffLeft("obtuse"); } if (icon("solid")) { IA.addOnOffLeft("solid"); } if (icon("showcolor")) { IB.addMultipleIconLeft("showcolor", Colors.length); } if (icon("hidden")) { IB.addOnOffRight("hidden"); } if (icon("grid")) { IB.addOnOffRight("grid"); } if (icon("info")) { IB.addRight("info"); } } makeMacroBar(); Global.setParameter("icons", icons); } public void makeMacroBar() { if (Global.getParameter("macrobar", true)) { IM = new MacroBar(this); IM.addKeyListener(this); IM.setIconBarListener(this); ZC.setMacroBar(IM); } else { if (IM != null) { IM.removeIconBarListener(this); } IM = null; ZC.setMacroBar(IM); } } public void updateMacroBar() { ZC.updateMacroBar(); } public void remakeIconBar() { IA.removeIconBarListener(this); IB.removeIconBarListener(this); remove(MainPanel); makeIconBar(); makeMacroBar(); updateMacroBar(); final JPanel north = new MyPanel(); north.setLayout(new GridLayout(0, 1)); north.add(IA); if (IA != IB) { north.add(IB); } if (IM != null) { north.add(IM); } North = new Panel3D(north); makeMainPanel(); add("Center", MainPanel); validate(); doLayout(); clearsettings(); repaint(); } public boolean icon(final String s) { return Global.getParameter("icons", "none").indexOf(" " + s + " ") >= 0; } public boolean enabled(final String s) { return !Global.getParameter("restricted", false) || icon(s); } public void initFileDialogs() { if (Global.getParameter("options.filedialog", true)) { FileLoad = new MyFileDialog(this, Zirkel.name("filedialog.open"), Zirkel.name("filedialog.open.action"), false, true); FileLoad.setDispose(false); FileLoad.setPattern("*.zir *.job *.zirz *.jobz"); FileLoad.loadHistories("file", "", ""); FileSave = new MyFileDialog(this, Zirkel.name("filedialog.saveas"), Zirkel.name("filedialog.saveas.action"), true, true); FileSave.setPattern("*.zir *.job *.zirz *.jobz"); FileSave.setDispose(false); FileSave.loadHistories("file", "", ""); PicSave = new MyFileDialog(this, Zirkel.name("filedialog.saveas"), Zirkel.name("filedialog.saveas.action"), true, true); PicSave.setPattern("*.zir *.job *.zirz *.jobz"); PicSave.setDispose(false); PicSave.loadHistories("image", "", "jpg"); HTMLSave = new MyFileDialog(this, Zirkel .name("filedialog.htmlsave"), Zirkel .name("filedialog.htmlsave.action"), true, true); HTMLSave.setPattern("*.html *.htm"); HTMLSave.setDispose(false); HTMLSave.loadHistories("html", "", "html"); BackgroundLoad = new MyFileDialog(this, Zirkel .name("filedialog.backgroundload"), Zirkel .name("filedialog.backgroundload.action"), false, true); BackgroundLoad.setPattern("*.gif *.jpg *.png"); BackgroundLoad.setDispose(false); BackgroundLoad.loadHistories("image", "", "jgp"); ImageLoad = new MyFileDialog(this, Zirkel .name("filedialog.imageload"), Zirkel .name("filedialog.imageload.action"), false, true); ImageLoad.setPattern("*.gif *.jpg *.png"); ImageLoad.setDispose(false); ImageLoad.loadHistories("image", "", "jgp"); TemplateLoad = new MyFileDialog(this, Zirkel .name("templateload.open"), Zirkel .name("templateload.open.action"), false, true); TemplateLoad.setPattern("*.template"); TemplateLoad.setDispose(false); TemplateLoad.loadHistories("template", "", "template"); } else { FileLoad = new MyFileDialog(this, Zirkel.name("filedialog.open"), false); FileLoad.setPattern("*.zir *.job *.zirz *.jobz"); FileSave = new MyFileDialog(this, Zirkel.name("filedialog.saveas"), true); FileSave.setPattern("*.zir *.job *.zirz *.jobz"); PicSave = new MyFileDialog(this, Zirkel.name("filedialog.saveas"), true); PicSave.setPattern("*"); HTMLSave = new MyFileDialog(this, Zirkel .name("filedialog.htmlsave"), true); HTMLSave.setPattern("*.html *.htm"); BackgroundLoad = new MyFileDialog(this, Zirkel .name("filedialog.backgroundload"), false); BackgroundLoad.setPattern("*.gif *.jpg"); ImageLoad = new MyFileDialog(this, Zirkel .name("filedialog.imageload"), false); ImageLoad.setPattern("*.gif *.jpg"); TemplateLoad = new MyFileDialog(this, Zirkel .name("templateload.open"), false); TemplateLoad.setPattern("*.template"); } } public static void initLightColors(Color back) { final int n = DefaultColors.length; Colors = new Color[DefaultColors.length]; for (int i = 0; i < n; i++) { if (Global.haveParameter("color" + i)) { Colors[i] = Global.getParameter("color" + i, Color.black); } else { Colors[i] = DefaultColors[i]; } } LightColors = new Color[n]; BrighterLightColors = new Color[n]; BrighterColors = new Color[n]; if (back == null) { back = Color.gray.brighter(); } final int red = back.getRed(), green = back.getGreen(), blue = back .getBlue(); final double lambda = 0.4; for (int i = 0; i < n; i++) { final int r = (int) (red * (1 - lambda) + Colors[i].getRed() * lambda); final int g = (int) (green * (1 - lambda) + Colors[i].getGreen() * lambda); final int b = (int) (blue * (1 - lambda) + Colors[i].getBlue() * lambda); LightColors[i] = new Color(r, g, b); if (i == 0) { BrighterColors[i] = Color.gray; } else { BrighterColors[i] = Colors[i].brighter(); } BrighterLightColors[i] = LightColors[i].brighter(); } } public void initLightColors() { initLightColors(Color.white); } public CheckboxMenuItem menuaddcheck(final Menu m, final String o, final String s) // adds a menu item to the Menu m { final CheckboxMenuItem item = new CheckboxMenuItemAction(this, o, s); m.add(item); return item; } public CheckboxMenuItem menuaddcheck(final Menu m, final String o) { return menuaddcheck(m, Zirkel.name(o), o); } public MenuItem menuadd(final Menu m, final String o) // adds a menu item to // the Menu m { final MenuItem item = new MenuItemAction(this, Zirkel.name(o), o); m.add(item); return item; } @Override public void doAction(final String s) // interpret menu items { if (!Init) { return; } ZC.pause(true); if (s.equals("menu.file.exit")) { setinfo("save"); doclose(); } else if (s.equals("menu.file.save")) { setinfo("save"); save(); } else if (s.equals("menu.file.clearmacros")) { setinfo("macro"); clearNonprotectedMacros(); } else if (s.equals("menu.file.saveas")) { setinfo("save"); saveas(); } else if (s.equals("menu.file.load")) { setinfo("save"); load(); } else if (s.equals("menu.file.loadexamples")) { setinfo("save"); loadExamples(); } else if (s.equals("menu.file.loadrun")) { setinfo("run"); loadRun(); } else if (s.equals("menu.file.editrun")) { setinfo("run"); editRun(OldRun); } else if (s.equals("menu.file.print")) { // setinfo("print"); // print(); } else if (s.equals("menu.file.savepng")) { setinfo("print"); savePNG(); } else if (s.equals("menu.file.copypng")) { setinfo("print"); copyPNG(); } else if (s.equals("menu.file.savefig")) { setinfo("print"); saveFIG(); } else if (s.equals("menu.file.savesvg")) { setinfo("print"); saveSVG(); } else if (s.equals("menu.file.savepdf")) { setinfo("print"); savePDF(); } else if (s.equals("menu.file.saveeps")) { setinfo("print"); saveEPS(); } else if (s.equals("menu.special.loadmacros")) { setinfo("macro"); loadMacros(); } else if (s.equals("menu.special.savemacros")) { setinfo("macro"); saveMacros(); } else if (s.equals("menu.special.deletemacros")) { setinfo("macro"); deleteMacros(); } else if (s.equals("menu.special.renamemacro")) { setinfo("macro"); renameMacro(); } else if (s.equals("menu.file.loadjob")) { setinfo("assignment"); loadJob(); } else if (s.equals("menu.file.savejob")) { setinfo("assignment"); saveJob(); } else if (s.equals("menu.file.new")) { setinfo("start"); newfile(false); } else if (s.equals("menu.options.back")) { setinfo("delete"); ZC.back(); ZC.repaint(); } else if (s.equals("menu.options.undo")) { setinfo("undo"); ZC.undo(); ZC.repaint(); } else if (s.equals("menu.options.track")) { setinfo("tracker"); track(); } else if (s.equals("menu.options.hideduplicates")) { setinfo("hide"); ZC.hideDuplicates(); ZC.repaint(); } else if (s.equals("menu.options.comment")) { setinfo("comment"); showcomment(); } else if (s.equals("menu.special.jobcomment")) { setinfo("comment"); showjobcomment(); } else if (s.equals("menu.special.definemacro")) { setinfo("macro"); definemacro(); } else if (s.equals("menu.special.replay")) { setinfo("replay"); replay(); } else if (s.equals("menu.options.constructiondisplay")) { setinfo("construction"); showconstruction(); } else if (s.equals("menu.options.setdigits")) { setinfo("defaults"); setDigits(); } else if (s.equals("menu.settings.language")) { setinfo("language"); setLanguage(); } else if (s.equals("menu.options.editicons")) { setinfo("iconbar"); editIcons(); } else if (s.equals("menu.options.function")) { setinfo("function"); ZC.createCurve(); } else if (s.equals("menu.options.userfunction")) { setinfo("function"); ZC.createFunction(); } else if (s.equals("menu.options.editlast")) { setinfo("edit"); ZC.editLast(); } else if (s.equals("menu.settings")) { setinfo("settings"); final boolean iconbartop = Global.getParameter( "options.iconbartop", true); final boolean filedialog = Global.getParameter( "options.filedialog", true); new SettingsDialog(this); if (Global.getParameter("options.iconbartop", true) != iconbartop) { itemAction("menu.settings.iconbartop", Global.getParameter( "options.iconbartop", true)); } if (Global.getParameter("options.filedialog", true) != filedialog) { initFileDialogs(); } ZC.newImage(); } else if (s.equals("menu.options.exportsettings")) { setinfo("exportsettings"); new ExportSettingsDialog(this); ZC.newImage(); } else if (s.equals("menu.help.browser")) { setinfo("browser"); browser(); } else if (s.equals("menu.help.info")) { // info(); ZC.pause(false); return; } else if (s.equals("menu.help.configure")) { setinfo("browser"); configure(); } else if (s.equals("menu.help.help")) { setinfo("start"); // new Help("schoolgeometry.txt"); ZC.pause(false); return; } else if (s.equals("menu.help.gui")) { setinfo("start"); // new Help("gui.txt"); ZC.pause(false); return; } else if (s.equals("menu.help.macros")) { setinfo("start"); // new Help("macros.txt"); ZC.pause(false); return; } else if (s.equals("menu.help.tools")) { setinfo("start"); // new Help("tools.txt"); ZC.pause(false); return; } else if (s.equals("menu.help.tips")) { setinfo("start"); // new Help("tips.txt"); ZC.pause(false); return; } else if (s.equals("menu.help.interactive")) { setinfo("start"); // new Help("interactiv.txt"); ZC.pause(false); return; } else if (s.equals("menu.help.about")) { setinfo("start"); new AboutDialog(this); } else if (s.equals("menu.help.welcome")) { setinfo("start"); // new Help("version.txt"); ZC.pause(false); return; } else if (s.equals("menu.special.export")) { setinfo("htmlexport"); exportHTML(); } else if (s.equals("menu.special.exporttemplate")) { setinfo("htmlexporttemplate"); exportTemplateHTML(); } else if (s.equals("menu.zoom.in")) { setinfo("zoomer"); ZC.magnify(1 / Math.sqrt(Math.sqrt(2))); } else if (s.equals("menu.zoom.out")) { setinfo("zoomer"); ZC.magnify(Math.sqrt(Math.sqrt(2))); } else if (s.equals("menu.zoom.left")) { setinfo("zoomer"); ZC.shift(-0.1, 0); } else if (s.equals("menu.zoom.right")) { setinfo("zoomer"); ZC.shift(0.1, 0); } else if (s.equals("menu.zoom.up")) { setinfo("zoomer"); ZC.shift(0, 0.1); } else if (s.equals("menu.zoom.down")) { setinfo("zoomer"); ZC.shift(0, -0.1); } else if (s.equals("Input")) { try { ZC.getConstruction().interpret(ZC, Input.getText()); ZC.validate(); ZC.getConstruction().updateCircleDep(); ZC.repaint(); Input.remember(); Input.setText(""); loadsettings(); Input.requestFocus(); ZC.pause(false); return; } catch (final ConstructionException e) { warning(e.getDescription()); } } else if (s.equals("colors.default")) { setinfo("colors"); for (int i = 0; i < Colors.length; i++) { Global.removeParameter("color" + i); } Global.removeParameter("colorbackground"); Global.removeParameter("colorselect"); Global.removeParameter("colortarget"); ZC.setBackground(getBackground()); Center.setBackground(getBackground()); if (ZC.CDP != null) { ZC.CDP.setListingBackground(getBackground()); if (CenterPanel != null) { CenterPanel.setBackground(getBackground()); } } initLightColors(); SelectColor = Global.getParameter("colorselect", SelectColor); TargetColor = Global.getParameter("colortarget", TargetColor); if (ZC.CDP != null) { ZC.CDP.setListingBackground(Global.getParameter( "colorbackground", Color.white)); } ZC.repaint(); } else if (s.startsWith("colors.color")) { setinfo("colors"); try { final int c = Integer.parseInt(s.substring("colors.color" .length())); final ColorEditor ce = new ColorEditor(this, "color" + c, Colors[c]); ce.center(this); ce.setVisible(true); initLightColors(); ZC.repaint(); } catch (final Exception e) { } } else if (s.equals("colors.background")) { setinfo("colors"); final ColorEditor ce = new ColorEditor(this, "colorbackground", getBackground()); ce.center(this); ce.setVisible(true); initLightColors(); if (Global.haveParameter("colorbackground")) { ZC.setBackground(Global.getParameter("colorbackground", Color.white)); if (ZC.CDP != null) { ZC.CDP.setListingBackground(Global.getParameter( "colorbackground", Color.white)); if (CenterPanel != null) { CenterPanel.setBackground(Global.getParameter( "colorbackground", Color.white)); } } Center.setBackground(Global.getParameter("colorbackground", Color.white)); } ZC.repaint(); } else if (s.equals("colors.select")) { setinfo("colors"); final ColorEditor ce = new ColorEditor(this, "colorselect", SelectColor); ce.center(this); ce.setVisible(true); SelectColor = Global.getParameter("colorselect", SelectColor); ZC.repaint(); } else if (s.equals("colors.target")) { setinfo("colors"); final ColorEditor ce = new ColorEditor(this, "colortarget", SelectColor); ce.center(this); ce.setVisible(true); TargetColor = Global.getParameter("colortarget", TargetColor); ZC.repaint(); } else if (s.equals("menu.background.grab")) { setinfo("background"); dograb(true); } else if (s.equals("menu.background.clear")) { setinfo("background"); dograb(false); } else if (s.equals("menu.background.load")) { setinfo("background"); loadBackground(); } else if (s.equals("menu.options.sizes")) { new SizesDialog(this); ZC.resetGraphics(); } else if (s.equals("menu.options.cleardraw")) { setinfo("draw"); ZC.clearDrawings(); } else if (s.equals("menu.bp.setbreak")) { ZC.breakpointLast(true, false); } else if (s.equals("menu.bp.clearbreak")) { ZC.breakpointLast(false, false); } else if (s.equals("menu.bp.sethidingbreak")) { ZC.breakpointLast(true, true); } else if (s.equals("menu.bp.animatebreak")) { settool(NAnimateBreak); } else if (s.equals("menu.options.editgrid")) { editGrid(); setinfo("grid"); } ZC.pause(false); ZC.requestFocus(); } public void clear(final boolean defaults) { ZC.clear(); Count.resetAll(); TestJob.setState(false); clearsettings(defaults); ZC.clearDrawings(); ZC.repaint(); } public void clearsettings(final boolean defaults) { if (defaults) { settool(0); setcolor(0); setcolortype(0); settype(2); showcolor(0); setRestricted(true); setPartial(false); setPartialLines(false); setVectors(false); setShowNames(false); setShowValues(false); setLongNames(false); setLargeFont(false); setBoldFont(false); setObtuse(false); setSolid(false); setVisual(true); sethidden(false); } else { settool(0); setcolor(Global.getParameter("options.color", 0)); setcolortype(Global.getParameter("options.colortype", 0)); settype(Global.getParameter("options.type", 2)); showcolor(0); setRestricted(Global.getParameter("options.restricted", true)); setPartial(Global.getParameter("options.partial", false)); setPartialLines(Global.getParameter("options.plines", false)); setVectors(Global.getParameter("options.arrow", false)); setShowNames(Global.getParameter("options.shownames", false)); setShowValues(Global.getParameter("options.showvalues", false)); setLongNames(Global.getParameter("options.longnames", false)); setLargeFont(Global.getParameter("options.largefont", false)); setBoldFont(Global.getParameter("options.boldfont", false)); setObtuse(Global.getParameter("options.obtuse", false)); setSolid(Global.getParameter("options.solid", false)); setVisual(Global.getParameter("options.visual", true)); sethidden(false); } } public void clearsettings() { clearsettings(false); } public void loadsettings() { setcolor(ZC.getDefaultColor()); settype(ZC.getDefaultType()); setcolortype(ZC.getDefaultColorType()); setPartial(ZC.getPartial()); setPartialLines(ZC.getPartialLines()); setVectors(ZC.getVectors()); setShowNames(ZC.getConstruction().ShowNames); setShowValues(ZC.getConstruction().ShowValues); } @Override public void itemAction(final String o, boolean flag) // interpret checkbox // changes { for (int i = 0; i < ObjectMenuItems.length; i++) { if (o.equals(ObjectStrings[i])) { if (i == NMacro) { setinfo("runmacro"); runMacro(false); } else { setinfo(ObjectStrings[i]); settool(i); } return; } } for (int i = 0; i < ColorMenuItems.length; i++) { if (o.equals("cs-" + ColorStrings[i])) { setcolor(i); setinfo("defaults"); return; } } for (int i = 0; i < ShowColorMenuItems.length; i++) { if (o.equals("scs-" + ColorStrings[i])) { showcolor(i); setinfo("show"); return; } } for (int i = 0; i < PointMenuItems.length; i++) { if (o.equals("pt-" + PointTypes[i])) { settype(i); setinfo("defaults"); return; } } for (int i = 0; i < ColorTypeMenuItems.length; i++) { if (o.equals("ct-" + ColorTypes[i])) { setcolortype(i); setinfo("defaults"); return; } } if (o.equals("menu.options.hidden")) { sethidden(flag); ZC.reloadCD(); setinfo("hide"); } else if (o.equals("menu.file.includemacros")) { IncludeMacros.setState(flag); Global.setParameter("save.includemacros", flag); setinfo("save"); } else if (o.equals("menu.file.alwaysclearmacros")) { AlwaysClearMacros.setState(flag); Global.setParameter("load.clearmacros", flag); setinfo("save"); } else if (o.equals("menu.options.visual")) { setVisual(flag); setShowNames(!flag); setinfo("visual"); } else if (o.equals("menu.options.printscalepreview")) { if (flag) { final ExportScaler d = new ExportScaler(this, true); if (d.isAborted()) { flag = false; } } Global.setParameter("printscalepreview", flag); PrintScalePreview.setState(flag); ZC.newImage(); setinfo("print"); } else if (o.equals("menu.file.compress")) { Global.setParameter("save.compress", flag); setinfo("save"); } else if (o.equals("menu.options.partial")) { setPartial(flag); setinfo("defaults"); } else if (o.equals("menu.options.restricted")) { setRestricted(flag); setinfo("defaults"); } else if (o.equals("menu.options.plines")) { setPartialLines(flag); setinfo("defaults"); } else if (o.equals("menu.options.arrow")) { setVectors(flag); setinfo("defaults"); } else if (o.equals("menu.options.longnames")) { setLongNames(flag); setinfo("defaults"); } else if (o.equals("menu.options.largefont")) { setLargeFont(flag); setinfo("defaults"); } else if (o.equals("menu.options.boldfont")) { setBoldFont(flag); setinfo("defaults"); } else if (o.equals("menu.options.shownames")) { setShowNames(flag); setinfo("defaults"); } else if (o.equals("menu.options.obtuse")) { setObtuse(flag); setinfo("defaults"); } else if (o.equals("menu.options.solid")) { setSolid(flag); setinfo("defaults"); } else if (o.equals("menu.options.showvalues")) { setShowValues(flag); setinfo("defaults"); } else if (o.equals("menu.options.grid")) { toggleGrid(); setinfo("grid"); } else if (o.equals("menu.options.leftsnap")) { Global.setParameter("grid.leftsnap", flag); setinfo("grid"); ZC.repaint(); } else if (o.equals("menu.background.tile")) { Global.setParameter("background.tile", flag); ZC.repaint(); setinfo("background"); } else if (o.equals("menu.background.usesize")) { Global.setParameter("background.usesize", flag); resize(); setinfo("background"); } else if (o.equals("menu.background.usewidth")) { Global.setParameter("background.usewidth", flag); resize(); setinfo("background"); } else if (o.equals("menu.background.center")) { Global.setParameter("background.center", flag); ZC.repaint(); setinfo("background"); } else if (o.equals("menu.background.usesize")) { Global.setParameter("background.usesize", flag); if (flag) { resize(); } setinfo("background"); } else if (o.equals("menu.special.testjob")) { testjob(flag); if (flag && !ZC.getConstruction().getComment().equals("")) { showcomment(); } setinfo("assignments"); } else if (o.equals("menu.settings.constructiondisplay")) { Global.setParameter("options.showdisplay", flag); showConstructionDisplay(flag); setinfo("constructiondisplay"); } else if (o.equals("menu.settings.font.bold")) { Global.setParameter("font.bold", flag); ZC.resetGraphics(); setinfo("fonts"); } else if (o.equals("menu.settings.font.large")) { Global.setParameter("font.large", flag); ZC.resetGraphics(); setinfo("fonts"); } else if (o.equals("menu.settings.iconbartop")) { Global.setParameter("options.iconbartop", flag); remove(MainPanel); makeMainPanel(); add("Center", MainPanel); validate(); setinfo("iconbar"); } else if (o.equals("menu.settings.restricted")) { Global.setParameter("restricted", flag); warning(Zirkel.name("warning.reset")); setinfo("restricted"); } else if (o.equals("menu.settings.beginner")) { Global.setParameter("beginner", flag); if (flag) { Global.setParameter("options.indicate", true); Global.setParameter("options.indicate.simple", true); Global.setParameter("options.pointon", true); Global.setParameter("options.intersection", true); Global.setParameter("options.choice", true); Global.setParameter("showtips", true); Global.setParameter("restrictedicons", DefaultRestrictedIcons); Global.setParameter("saveicons", Global.getParameter("icons", DefaultIcons)); Global.setParameter("icons", DefaultRestrictedIcons); remakeIconBar(); } else { Global.setParameter("options.indicate", true); Global.setParameter("options.indicate.simple", false); Global.setParameter("options.pointon", false); Global.setParameter("options.intersection", false); Global.setParameter("icons", Global.getParameter("saveicons", DefaultIcons)); remakeIconBar(); } setinfo("beginner"); } else if (o.equals("menu.special.macrobar")) { Global.setParameter("macrobar", flag); setinfo("macrobar"); remakeIconBar(); } else if (o.equals("menu.special.defaultmacrosinbar")) { Global.setParameter("defaultmacrosinbar", flag); setinfo("macrobar"); updateMacroBar(); } else if (o.equals("menu.file.print.isoscale")) { Global.setParameter("print.isoscale", flag); setinfo("background"); } else if (o.equals("menu.special.restricticons")) { restrictIcons(flag); setinfo("restricted"); } } public void iconPressed(final String o) { ZC.pause(true); ZC.requestFocus(); if (o.equals("load")) { setinfo("save"); load(); } else if (o.equals("save")) { setinfo("save"); save(); } else if (o.equals("new")) { setinfo("save"); newfile(IA.isControlPressed()); IA.clearShiftControl(); } else if (o.equals("hidden")) { itemAction("menu.options.hidden", IA.getState("hidden")); setinfo("hide"); } else if (o.equals("partial")) { setPartial(IA.getState("partial")); setinfo("defaults"); } else if (o.equals("plines")) { setPartialLines(IA.getState("plines")); setinfo("defaults"); } else if (o.equals("arrow")) { setVectors(IA.getState("arrow")); setinfo("defaults"); } else if (o.equals("visual")) { setVisual(IA.getState("visual")); setShowNames(!IA.getState("visual")); setinfo("visual"); } else if (o.equals("color")) { final int n = IA.getMultipleState("color"); if (n >= 0) { setcolor(n); } setinfo("defaults"); } else if (o.equals("showcolor")) { final int n = IA.getMultipleState("showcolor"); if (n >= 0) { showcolor(n); } setinfo("show"); } else if (o.equals("type")) { final int n = IA.getMultipleState("type"); if (n >= 0) { settype(n); } setinfo("defaults"); } else if (o.equals("thickness")) { final int n = IA.getMultipleState("thickness"); if (n >= 0) { setcolortype(n); } setinfo("defaults"); } else if (o.equals("showname")) { setShowNames(IA.getState("showname")); setinfo("defaults"); } else if (o.equals("showvalue")) { setShowValues(IA.getState("showvalue")); setinfo("defaults"); } else if (o.equals("longnames")) { setLongNames(IA.getState("longnames")); setinfo("defaults"); } else if (o.equals("large")) { setLargeFont(IA.getState("large")); setinfo("defaults"); } else if (o.equals("bold")) { setBoldFont(IA.getState("bold")); setinfo("defaults"); } else if (o.equals("obtuse")) { setObtuse(IA.getState("obtuse")); setinfo("defaults"); } else if (o.equals("solid")) { setSolid(IA.getState("solid")); setinfo("defaults"); } else if (o.equals("grid")) { toggleGrid(); setinfo("grid"); } else if (o.equals("back")) { ZC.back(); ZC.repaint(); setinfo("back"); } else if (o.equals("undo")) { ZC.undo(); ZC.repaint(); setinfo("undo"); } else if (o.equals("comment")) { setinfo("comment"); if (IA.isShiftPressed()) { showjobcomment(); } else { showcomment(); } } else if (o.equals("grab")) { dograb(); setinfo("background"); } else if (o.equals("macro")) { final int n = IA.getMultipleState("macro"); switch (n) { case 1: setinfo("parameter"); settool(NParameters); break; case 2: setinfo("target"); settool(NTargets); break; case 0: setinfo("macro"); definemacro(); break; } IA.setState("macro", true); } else if (o.equals("replay")) { setinfo("replay"); replay(); } else if (o.equals("info")) { // info(); } else if (o.equals("function")) { setinfo("function"); if (IA.isControlPressed()) { ZC.createFunction(); } else { ZC.createCurve(); } } else if (IB.isControlPressed()) { final int i = CurrentTool; if (o.equals("hide")) { ZC.hideDuplicates(); ZC.repaint(); } else if (o.equals("runmacro")) { setinfo("runmacro"); runMacro(true); return; } else if (o.equals("objecttracker")) { track(); } settool(i); } else if (IA.isControlPressed()) { final int i = CurrentTool; if (o.equals("edit")) { if (CurrentTool != NEdit) { IA.setState("edit", false); } ZC.editLast(); ZC.repaint(); } else if (o.equals("objecttracker")) { track(); } settool(i); } else { for (int i = 0; i < ObjectMenuItems.length; i++) { if (o.equals(ObjectStrings[i])) { if (i == NMacro) { setinfo("runmacro"); runMacro(IB.isShiftPressed()); } else { settool(i); setinfo(ObjectStrings[i]); } ZC.requestFocus(); return; } } if (IM != null) // Search in the macro line { final Macro m = IM.find(o); if (m != null) { runMacro(m); } } } IA.clearShiftControl(); IB.clearShiftControl(); ZC.pause(false); ZC.requestFocus(); } /** * Choose the tool i and set the icons and menu entries. */ public void settool(final int i) { if (IM != null) { IM.deselectAll(); } ObjectMenuItems[CurrentTool].setState(false); CurrentTool = i; ObjectMenuItems[i].setState(true); ZC.setTool(ObjectConstructors[i]); if (i < IconNumber && IB.have(ObjectStrings[i])) { IB.toggle(ObjectStrings[i]); } else { IB.unselect("point"); } ObjectConstructors[i].resetFirstTime(ZC); if (i == NTargets) { IA.setMultipleState("macro", 2); } else if (i == NParameters) { IA.setMultipleState("macro", 1); } else if (i == NDefineJob) { testjob(false); } else { IA.setMultipleState("macro", 0); IA.setState("macro", false); } IA.setState("delete", i == NDelete); IA.setState("edit", i == NEdit); IA.setState("draw", i == NDraw); IA.setState("rename", i == NRename); IA.setState("zoom", i == NZoom); IA.setState("animatebreak", i == NAnimateBreak); } public void setcolor(final int c) { for (final CheckboxMenuItem colorMenuItem : ColorMenuItems) { colorMenuItem.setState(false); } ColorMenuItems[c].setState(true); IA.setMultipleState("color", c); ZC.setDefaultColor(c); Global.setParameter("options.color", c); } public void settype(final int c) { for (final CheckboxMenuItem pointMenuItem : PointMenuItems) { pointMenuItem.setState(false); } PointMenuItems[c].setState(true); IA.setMultipleState("type", c); ZC.setDefaultType(c); Global.setParameter("options.type", c); } public void setcolortype(int c) { if (c >= ColorTypeMenuItems.length || c < 0) { c = 0; } for (final CheckboxMenuItem colorTypeMenuItem : ColorTypeMenuItems) { colorTypeMenuItem.setState(false); } ColorTypeMenuItems[c].setState(true); IA.setMultipleState("thickness", c); ZC.setDefaultColorType(c); Global.setParameter("options.colortype", c); } public void showcolor(final int c) { ZC.setShowColor(c); for (int i = 0; i < ShowColorMenuItems.length; i++) { ShowColorMenuItems[i].setState(c == i); } IA.setMultipleState("showcolor", c); } public void showStatus(final String s) { if (Status.getText().equals(s)) { return; } try { Status.setText(eric.JMacrosTools.CurrentJZF.FilteredStatus(s)); } catch (final Exception e) { } } public void keyReleased(final KeyEvent e) { } public void keyPressed(final KeyEvent e) { final int code = e.getKeyCode(); int i; final boolean Shift = e.isShiftDown(), Control = e.isControlDown(), Alt = e .isAltDown(); if (Control && Alt) { switch (code) { case '1': ZC.callCDItem("Description", true); break; case '2': ZC.callCDItem("Size", true); break; case '3': ZC.callCDItem("Formula", true); break; case '4': ZC.callCDAction("Hide"); break; case '5': ZC.callCDAction("SuperHide"); break; case '7': ZC.callCDAction("Copy"); break; case '9': ZC.callCDToggleItem("Visible"); break; case '0': ZC.callCDToggleItem("Sort"); break; } } else if (Control) { switch (e.getKeyCode()) { case KeyEvent.VK_O: load(); return; case KeyEvent.VK_R: loadRun(); return; case KeyEvent.VK_X: editRun(OldRun); return; case KeyEvent.VK_J: loadJob(); return; case KeyEvent.VK_K: saveJob(); return; case KeyEvent.VK_S: save(); return; case KeyEvent.VK_A: saveas(); return; case KeyEvent.VK_E: exportHTML(); return; case KeyEvent.VK_Z: ZC.undo(); ZC.repaint(); return; case KeyEvent.VK_N: doAction("menu.file.new"); return; case KeyEvent.VK_I: itemAction("menu.special.restricticons", !RestrictIcons .getState()); return; } for (i = 0; i < PointKeys.length; i++) { if (PointKeys[i] == code) { settype(i); return; } } for (i = 0; i < ColorKeys.length; i++) { if (ColorKeys[i] == code) { setcolor(i); return; } } } else if (Alt) { for (i = 0; i < ColorKeys.length; i++) { if (ColorKeys[i] == code) { showcolor(i); return; } } for (i = 0; i < ColorTypeKeys.length; i++) { if (ColorTypeKeys[i] == code) { setcolortype(i); return; } } } else { switch (code) { // case KeyEvent.VK_DELETE : // settool(NDelete); break; // case KeyEvent.VK_ESCAPE : // if (ZC.getCurrentTool() instanceof DrawerTool) // ZC.clearDrawings(); // else reset(); // break; case KeyEvent.VK_SPACE: ZC.returnPressed(); break; case KeyEvent.VK_ENTER: if (Shift) { track(); } break; } } if (!e.isActionKey()) { return; } switch (code) { case KeyEvent.VK_F1: if (Shift || Control) { if (!Global.getParameter("restricted", false)) { TestJob.setState(!TestJob.getState()); itemAction("menu.special.testjob", TestJob.getState()); } } else { // info(); } break; case KeyEvent.VK_F3: if (Shift || Control) { itemAction("menu.options.printscalepreview", !PrintScalePreview .getState()); } break; case KeyEvent.VK_F4: if (Alt) { doclose(); } break; case KeyEvent.VK_F5: if (Shift || Control) { if (enabled("macro")) { definemacro(); } } else { if (enabled("runmacro")) { runMacro(false); } } break; case KeyEvent.VK_F6: if (Shift || Control) { setShowNames(!ShowNames.getState()); } break; case KeyEvent.VK_F7: if (Shift || Control) { setShowValues(!ShowValues.getState()); } break; case KeyEvent.VK_F8: if (Shift || Control) { setLongNames(!LongNames.getState()); } else { showjobcomment(); } break; case KeyEvent.VK_F9: /* * if (Shift && Control && Alt) { * ZC.getConstruction().dovalidateDebug(); } else */ if (Shift || Control) { setPartial(!Partial.getState()); } else { ShowHidden.setState(!ShowHidden.getState()); IA.setState("hidden", ShowHidden.getState()); ZC.setShowHidden(ShowHidden.getState()); } break; case KeyEvent.VK_F10: if (Shift || Control) { setPartialLines(!PartialLines.getState()); } else { showcomment(); } break; case KeyEvent.VK_F11: if (Shift || Control) { setVectors(!Vectors.getState()); } else { showConstructionDisplay(!Global.getParameter( "options.showdisplay", true)); } break; case KeyEvent.VK_F12: if (Shift || Control) { setObtuse(!Obtuse.getState()); } else { toggleGrid(); } break; case KeyEvent.VK_LEFT: if (Shift && ZC.getCurrentTool() instanceof ObjectTracker) { ((ObjectTracker) ZC.getCurrentTool()).decreaseOmit(); } else if (Shift && ZC.getCurrentTool() instanceof BreakpointAnimator) { ((BreakpointAnimator) ZC.getCurrentTool()).decreaseSpeed(); } else if (Shift && ZC.getCurrentTool() instanceof AnimatorTool) { ((AnimatorTool) ZC.getCurrentTool()).decreaseSpeed(); } else { // ZC.shift(-0.1, 0); } break; case KeyEvent.VK_RIGHT: if (Shift && ZC.getCurrentTool() instanceof ObjectTracker) { ((ObjectTracker) ZC.getCurrentTool()).increaseOmit(); } else if (Shift && ZC.getCurrentTool() instanceof BreakpointAnimator) { ((BreakpointAnimator) ZC.getCurrentTool()).increaseSpeed(); } else if (Shift && ZC.getCurrentTool() instanceof AnimatorTool) { ((AnimatorTool) ZC.getCurrentTool()).increaseSpeed(); } else { // ZC.shift(0.1, 0); } break; case KeyEvent.VK_UP: // ZC.shift(0, 0.1); break; case KeyEvent.VK_DOWN: // ZC.shift(0, -0.1); break; } } public void keyTyped(final KeyEvent e) { final char c = e.getKeyChar(); int i; if (e.isControlDown() || e.isAltDown()) { return; } for (i = 0; i < ObjectKeys.length; i++) { if (c == ObjectKeys[i]) { if (enabled(ObjectStrings[i])) { if (i == NMacro) { runMacro(false); } // else settool(i); } return; } } switch (c) { case KeyEvent.VK_BACK_SPACE: ZC.back(); ZC.repaint(); return; case '+': if (e.isControlDown() && ZC.getCurrentTool() instanceof ObjectTracker) { ((ObjectTracker) ZC.getCurrentTool()).increaseOmit(); } else { ZC.magnify(1 / Math.sqrt(Math.sqrt(2))); } break; case '-': ZC.magnify(Math.sqrt(Math.sqrt(2))); break; } } public void save() { testjob(false); if (!haveFile()) { saveas(); } else { dosave(Filename, true, Global.getParameter("save.includemacros", false), false, ZC.getMacros()); } } public static boolean isCompressed(final String filename) { return FileName.extension(filename).endsWith("z"); } public boolean dosave(final String Filename, final boolean construction, final boolean macros, final boolean protectedmacros, final Vector v) { if (Global.getParameter("options.backups", true) && exists(Filename)) { final File F = new File(Filename); final File Back = new File(Filename + ".bak"); try { if (Back.exists()) { Back.delete(); } F.renameTo(Back); } catch (final Exception e) { final Warning w = new Warning(this, Zirkel .name("warning.save.backup"), FileName.chop(32, e .toString(), 64), Zirkel.name("warning"), true); w.center(this); w.setVisible(true); return false; } } try { OutputStream o = new FileOutputStream(Filename); if (isCompressed(Filename)) { o = new GZIPOutputStream(o, 10000); } ZC.getConstruction().BackgroundFile = Background; ZC.getConstruction().ResizeBackground = Global.getParameter( "background.usesize", false); if (RestrictIcons.getState()) { final String icons = Global.getParameter("restrictedicons", DefaultIcons); ZC.save(o, construction, macros, protectedmacros, v, icons); } else { ZC.save(o, construction, macros, protectedmacros, v, ""); } o.close(); if (construction) { setTitle(Zirkel.name("program.name") + " : " + FileName.chop(Filename)); } } catch (final FileNotFoundException ef) { return false; } catch (final Exception e) { final Warning w = new Warning(this, Zirkel.name("warning.save"), FileName.chop(32, e.toString(), 64), Zirkel.name("warning"), true); w.center(this); w.setVisible(true); return false; } return true; } public boolean saveas(final String pattern, final String ext) { testjob(false); FileSave.center(this); if (haveFile()) { FileSave.setDirectory(FileName.path(Filename)); FileSave.setFilePath(FileName.filename(Filename)); } FileSave.setPattern(Global.getParameter("pattern", pattern)); FileSave.update(!haveFile()); FileSave.setVisible(true); if (FileSave.isAborted()) { return false; } String filename = FileSave.getFilePath(); if (FileName.extension(filename).equals("")) { filename = filename + ext; } if (Global.getParameter("options.filedialog", true) && exists(filename)) { final Question d = new Question(this, FileName.filename(filename) + " : " + Zirkel.name("file.exists.overwrite"), Zirkel .name("file.exists.title"), this, false, true); d.center(this); d.setVisible(true); if (!d.yes()) { return false; } } Filename = filename; return dosave(Filename, true, Global.getParameter("save.includemacros", false), false, ZC.getMacros()); } public boolean saveas() { return saveas("*.zir *.zirz *.job *.jobz", Global.getParameter( "save.compress", false) ? ".zirz" : ".zir"); } public boolean exists(final String filename) { final File f = new File(filename); return f.exists(); } public boolean savefile() { testjob(false); if (!haveFile()) { return saveas(); } else { return dosave(Filename, true, Global.getParameter( "save.includemacros", false), false, ZC.getMacros()); } } public void saveMacros() { testjob(false); final Vector v = ZC.chooseMacros(); if (v == null || v.size() == 0) { return; } FileSave.center(this); FileSave .setPattern(Global.getParameter("pattern.macro", "*.mcr *mcrz")); FileSave.update(); FileSave.setVisible(true); if (FileSave.isAborted()) { return; } String Filename = FileSave.getFilePath(); if (FileName.extension(Filename).equals("")) { Filename = Filename + (Global.getParameter("save.compress", false) ? ".mcrz" : ".mcr"); } if (Global.getParameter("options.filedialog", true) && exists(Filename)) { final Question d = new Question(this, FileName.filename(Filename) + " : " + Zirkel.name("file.exists.overwrite"), Zirkel .name("file.exists.title"), this, false, true); d.center(this); d.setVisible(true); if (!d.yes()) { return; } } dosave(Filename, false, true, true, v); } public void deleteMacros() { final Vector v = ZC.chooseMacros(); if (v == null || v.size() == 0) { return; } ZC.deleteMacros(v); } public void renameMacro() { final Macro m = ZC.chooseMacro(); if (m == null) { return; } if (ZC.MacroCurrentComment != null) { m.setComment(ZC.MacroCurrentComment); } final RenameMacroDialog d = new RenameMacroDialog(this, m); d.center(this); d.setVisible(true); if (d.isAborted()) { return; } if (!d.getName().equals("")) { ZC.renameMacro(m, d.getName()); } m.setComment(d.getComment()); updateMacroBar(); } public void clearMacros() { if (!ZC.haveMacros()) { return; } if (!Global.getParameter("options.sure", true) || Sure.ask(this, Zirkel.name("sure.macros"))) { ZC.clearMacros(); } updateMacroBar(); } public void clearNonprotectedMacros() { if (!ZC.haveNonprotectedMacros()) { return; } if (!Global.getParameter("options.sure", true) || Sure.ask(this, Zirkel.name("sure.macros"))) { ZC.clearNonprotectedMacros(); } updateMacroBar(); } public void loadExamples() { String dir = System.getProperty("user.dir"); if (new File(dir + System.getProperty("file.separator") + "Data") .exists()) { dir = dir + System.getProperty("file.separator") + "Data"; } loadInDir(dir); } public void loadInDir(final String dir) { testjob(false); if (ZC.changed()) { final Question q = new Question(this, Zirkel .name("savequestion.qsave"), Zirkel .name("savequestion.title"), true); q.center(this); q.setVisible(true); if (q.yes() && !savefile()) { return; } if (q.isAborted()) { return; } } FileLoad.setPattern(Global.getParameter("pattern", "*.zir *.job *.zirz *.jobz")); FileLoad.center(this); if (dir != null) { FileLoad.setDirectory(dir); FileLoad.updateFiles(); FileLoad.updateDir(); } FileLoad.update(dir == null); FileLoad.setVisible(true); if (FileLoad.isAborted()) { return; } Filename = FileLoad.getFilePath(); if (Global.getParameter("load.clearmacros", true)) { clearNonprotectedMacros(); } if (!new File(Filename).exists()) { if (new File(Filename + ".zir").exists()) { Filename = Filename + ".zir"; } else if (new File(Filename + ".zirz").exists()) { Filename = Filename + ".zirz"; } } reset(); load(Filename); } public void load() { loadInDir(null); } public void loadRun() { testjob(false); FileLoad.setPattern(Global.getParameter("pattern.run", "*.run")); FileLoad.center(this); FileLoad.update(); FileLoad.setVisible(true); if (FileLoad.isAborted()) { return; } final String filename = FileLoad.getFilePath(); if (Global.getParameter("load.clearmacros", true)) { clearNonprotectedMacros(); } loadRun(filename); Filename = ""; } public void loadRun(final String name) { try { InputStream o = new FileInputStream(name); if (isCompressed(name)) { o = new GZIPInputStream(o); } clear(false); ZC.loadRun(o); o.close(); setTitle(Zirkel.name("program.name") + " : " + FileName.chop(name)); if (!ZC.getConstruction().getComment().equals("")) { showcomment(); } loadsettings(); } catch (final Exception e) { final Warning w = new Warning(this, Zirkel.name("warning.load"), FileName.chop(32, e.toString(), 64), Zirkel.name("warning"), true); w.center(this); w.setVisible(true); ZC.endWaiting(); e.printStackTrace(); } settool(NMover); updateMacroBar(); } String OldRun = ""; public void editRun(final String oldrun) { testjob(false); if (oldrun.equals("")) { FileLoad.setPattern(Global.getParameter("pattern.run", "*.run")); FileLoad.center(this); FileLoad.update(); FileLoad.setVisible(true); if (FileLoad.isAborted()) { return; } OldRun = FileLoad.getFilePath(); } else { OldRun = oldrun; } final EditRunDialog d = new EditRunDialog(this, OldRun); d.setVisible(true); } public void load(final String name) { setEnabled(false); new ZirkelFrameLoadThread(this, name); } public void doload(final String name, final InputStream in) { // System.out.println("load "+name); try { InputStream o = null; if (in == null) { o = new FileInputStream(name); if (isCompressed(name)) { o = new GZIPInputStream(o); } } else { o = in; } clear(false); ZC.startWaiting(); ZC.load(o); ZC.endWaiting(); o.close(); setTitle(Zirkel.name("program.name") + " : " + FileName.chop(name)); setEnabled(true); if (!ZC.getConstruction().getComment().equals("") && !ZC.isJob()) { showcomment(); } Filename = name; Grid.setState(ZC.showGrid()); IA.setState("grid", ZC.showGrid()); } catch (final Exception e) { final Warning w = new Warning(this, Zirkel.name("warning.load"), FileName.chop(32, e.toString(), 64), Zirkel.name("warning"), true); w.center(this); w.setVisible(true); ZC.endWaiting(); // e.printStackTrace(); return; } // System.out.println("finished loading "+name); eric.JGlobals.CheckRestrictedIcons(ZC.getConstruction().Icons); // System.out.println("finished setting icons"); if ((in == null) && (ZC.getConstruction().BackgroundFile != null)) { // System.out.println("setting background"); final String backgroundfile = ZC.getConstruction().BackgroundFile; String file = backgroundfile; if (FileName.path(backgroundfile).equals("")) { file = FileName.path(name) + File.separator + backgroundfile; } Global.setParameter("background.usesize", ZC.getConstruction().ResizeBackground); doloadBackground(file); } final Construction C = ZC.getConstruction(); if (C.TrackP != null) { // System.out.println("setting track"); try { final ConstructionObject P = C.find(C.TrackP); if (P == null || !((P instanceof PointObject) || (P instanceof PrimitiveLineObject))) { throw new ConstructionException(""); } PointObject PM = null; if (C.find(C.TrackPM) != null) { PM = (PointObject) C.find(C.TrackPM); } final ConstructionObject po[] = new ConstructionObject[C.TrackPO .size()]; for (int i = 0; i < po.length; i++) { final ConstructionObject o = C.find((String) C.TrackPO .elementAt(i)); if (o == null || !((o instanceof PointObject) || (o instanceof PrimitiveLineObject))) { throw new ConstructionException(""); } po[i] = o; } if (C.TrackO != null) { final ConstructionObject O = C.find(C.TrackO); if (P == null || (PM == null && !(O instanceof ExpressionObject)) || O == null) { throw new ConstructionException(""); } settool(NObjectTracker); final ObjectTracker TR = new ObjectTracker(P, PM, O, ZC, C.Animate, C.Paint, po); if (C.Omit > 0) { TR.setOmit(C.Omit); } ZC.setTool(TR); ZC.validate(); ZC.repaint(); } else { if (P == null) { throw new ConstructionException(""); } settool(NTracker); ZC.setTool(new Tracker(P, po)); if (PM != null) { PM.setSelected(true); } ZC.validate(); ZC.repaint(); } } catch (final Exception e) { warning(Zirkel.name("exception.track")); } } else if (C.AnimateP != null) { // System.out.println("setting animation"); try { final PointObject P = (PointObject) C.find(C.AnimateP); if (P == null) { throw new ConstructionException(""); } final Enumeration e = C.AnimateV.elements(); while (e.hasMoreElements()) { final String s = (String) e.nextElement(); final ConstructionObject o = C.find(s); if (o == null || !(o instanceof SegmentObject || o instanceof PrimitiveCircleObject || o instanceof PointObject)) { throw new ConstructionException(""); } } settool(NAnimator); ZC.setTool(new AnimatorTool(P, C.AnimateV, ZC, C.AnimateNegative, C.AnimateOriginal, C.AnimateDelay)); } catch (final Exception e) { warning(Zirkel.name("exception.animate")); } } else if (C.AnimateBreakpoints) { // System.out.println("setting animation with brakpoints"); final BreakpointAnimator bp = new BreakpointAnimator(); bp.setLoop(C.AnimateLoop); bp.setSpeed(C.AnimateTime); ZC.setTool(bp); bp.reset(ZC); } else { // System.out.println("setting mover"); settool(NMover); } updateMacroBar(); // System.out.println("finished loading"); } public void loadMacros() { FileLoad.setPattern("*.mcr *.mcrz"); FileLoad.center(this); FileLoad.update(); FileLoad.setVisible(true); if (FileLoad.isAborted()) { return; } final String Filename = FileLoad.getFilePath(); try { InputStream o = new FileInputStream(Filename); if (isCompressed(Filename)) { o = new GZIPInputStream(o); } ZC.load(o, false, true); o.close(); } catch (final Exception e) { final Warning w = new Warning(this, Zirkel .name("warning.loadmacros"), FileName.chop(32, e.toString(), 64), Zirkel.name("warning"), true); w.center(this); w.setVisible(true); } updateMacroBar(); } public void loadJob() { testjob(false); FileLoad.setPattern("*.job *.jobz"); FileLoad.center(this); FileLoad.update(); FileLoad.setVisible(true); if (FileLoad.isAborted()) { return; } Filename = FileLoad.getFilePath(); try { InputStream o = new FileInputStream(Filename); if (isCompressed(Filename)) { o = new GZIPInputStream(o); } clear(false); ZC.load(o); o.close(); setTitle(Zirkel.name("program.name") + " : " + FileName.chop(Filename)); final String icons = ZC.getConstruction().Icons; if (!icons.equals("")) { Global.setParameter("restrictedicons", icons); RestrictIcons.setState(true); showDefaultIcons(false); remakeIconBar(); } else if (RestrictIcons.getState()) { RestrictIcons.setState(false); showDefaultIcons(true); remakeIconBar(); } if (ZC.isJob()) { testjob(true); } if (!ZC.getConstruction().getComment().equals("")) { showcomment(); } } catch (final Exception e) { final Warning w = new Warning(this, Zirkel.name("warning.load"), FileName.chop(32, e.toString(), 64), Zirkel.name("warning"), true); w.center(this); w.setVisible(true); } updateMacroBar(); } public void saveJob() { testjob(false); if (!ZC.isJob()) { warning(Zirkel.name("warning.nojob")); TestJob.setState(false); return; } saveas("*.job *.jobz", Global.getParameter("save.compress", false) ? ".jobz" : ".job"); } public void showcomment() { final CommentDialog d = new CommentDialog(this, ZC.getComment(), Zirkel .name("comment.title"), ZC.displayJob()); ZC.setComment(d.getText()); } public void showjobcomment() { final CommentDialog d = new CommentDialog(this, ZC.getJobComment(), Zirkel.name("jobcomment.title"), false); ZC.setJobComment(d.getText()); } public void showconstruction() { new ConstructionDisplay(this, ZC); } @Override public boolean close() { if (Zirkel.IsApplet) { return true; } if (ZC.changed()) { final Question q = new Question(this, Zirkel .name("savequestion.qsave"), Zirkel .name("savequestion.title"), true); q.center(this); q.setVisible(true); if (q.yes()) { return savefile(); } return q.getResult() != Question.ABORT; } return true; } @Override public void doclose() { notePosition("zirkelframe"); super.doclose(); } @Override public void windowActivated(final WindowEvent e) { if (ZC != null) { ZC.requestFocus(); } // It seems Linux may call this before the constructor. Strange! } public void toggleGrid() { ZC.toggleShowGrid(); Grid.setState(ZC.showGrid()); IA.setState("grid", ZC.showGrid()); } /* * (non-Javadoc) * * @see rene.zirkel.DoneListener#notifyDone() Display a message for the * user. */ public void notifyDone() { repaint(); try { Thread.sleep(500); } catch (final Exception e) { } warning(Zirkel.name("done")); } /** * Test a job, or stop testing a job. Register as listener to ZC, when the * job is done. * * @param flag */ public void testjob(final boolean flag) { if (flag == ZC.displayJob()) { return; } // nothing to do if (flag && !ZC.isJob()) // user error! { warning(Zirkel.name("warning.nojob")); TestJob.setState(false); ZC.reloadCD(); return; } // else: ZC.displayJob(flag); // main action is in ZC. if (flag) { ZC.setDoneListener(this); } else { ZC.setDoneListener(null); } TestJob.setState(flag); ZC.reloadCD(); } public boolean exportHTML() { testjob(false); if (!haveFile()) { warning(Zirkel.name("export.savefirst")); return false; } final ExportDialog d = new ExportDialog(this, ZC.getConstruction(), RestrictIcons.getState()); d.center(this); if (!Background.equals("") && Global.getParameter("background.usesize", false) && ZC.Background.getWidth(this) == ZC.IW && ZC.Background.getHeight(this) == ZC.IH) { d.setDimensions(ZC.IW, ZC.IH); } d.setVisible(true); if (d.isAborted()) { return false; } doexport(d, false); if (!d.getSolution().equals("") && d.saveSolution()) { doexport(d, true); } return true; } public void doexport(final ExportDialog d, final boolean solution) { final String sep = System.getProperty("file.separator"); String filename = FileName.path(Filename) + sep + FileName.purefilename(Filename); if (solution) { filename += "-sol.html"; } else { filename += ".html"; } if (FileName.extension(filename).equals("")) { filename = filename + ".html"; } if (Global.getParameter("options.filedialog", true) && exists(filename)) { final Question q = new Question(this, FileName.filename(filename) + " : " + Zirkel.name("file.exists.overwrite"), Zirkel .name("file.exists.title"), this, false, true); q.center(this); q.setVisible(true); if (!q.yes()) { return; } } final boolean utf = Global.getParameter("options.utf", true); try { PrintWriter out; if (utf) { out = new PrintWriter(new OutputStreamWriter( new FileOutputStream(filename), "UTF8")); } else { out = new PrintWriter(new OutputStreamWriter( new FileOutputStream(filename))); } out.println(""); out.println(""); out.println(""); if (utf) { out .println(""); } else { out .println(""); } out .println(""); if (solution) { out.println("" + d.getPageTitle() + ", " + Zirkel.name("export.soltext", "Solution") + ""); } else { out.println("" + d.getPageTitle() + ""); } if (!d.getStyleSheet().equals("")) { out.println(""); } out.println(""); if (d.useForBackground()) { out.println(""); } else { out.println(""); } if (solution) { out.println("

" + d.getPageTitle() + ", " + Zirkel.name("export.soltext", "Solution") + "

"); } else { out.println("

" + d.getPageTitle() + "

"); } out.println("
"); out.println("

"); final String jar = d.getJar(); final String jarname = FileName.filename(jar); final String jardir = FileName.path(jar); if (jardir.equals("")) { out.println(""); } else { out.println(""); } if (!d.getFile().equals("")) { if (d.isJob() && !solution) { out.println(""); } else { out.println(""); } } if (d.useForApplet()) { out.println(""); } if (d.saveBackground() && Global.haveParameter("colorbackground")) { out.println(""); } if (d.saveColors()) { if (Global.haveParameter("colorselect")) { out.println(""); } if (Global.haveParameter("colortarget")) { out.println(""); } for (int i = 0; i < Colors.length; i++) { if (Global.haveParameter("color" + i)) { out.println(""); } } } /* * // now saved in the construction file if * (Global.getParameter("grid.fine",false)) { * out.println(""); } */ if (Global.getParameter("grid.leftsnap", false)) { out.println(""); } String style = d.getStyle(); if (solution) { style = "3D"; } out.println(""); if (!style.equals("plain") && !style.equals("3D")) { String s = d.getIcons(); out.println(""); s = d.getTools(); out.println(""); } final String sol = d.getSolution(); if (!sol.equals("") && d.jumpSolution() && !solution) { out.println(""); } if (ZC.showHidden()) { out.println(""); } if (Global.getParameter("options.movename", false)) { out.println(""); } if (Global.getParameter("options.movefixname", true)) { out.println(""); } if (Global.getParameter("options.smallicons", false)) { out.println(""); } if (Global.getParameter("options.oldicons", false)) { out.println(""); } if (!d.allowZoom()) { out.println(""); } if (!d.allowPopup()) { out.println(""); } if (d.restrictedMove()) { out.println(""); } String s = ""; if (Global.getParameter("font.bold", false)) { s = s + "bold"; } if (Global.getParameter("font.large", false)) { s = s + " large"; } if (!s.equals("")) { out.println(""); } if (d.saveDigits()) { out.println(""); out.println(""); out.println(""); } out.println(""); out.println(""); out.println(""); out.println(""); if (Global.getParameter("options.germanpoints", true)) { out.println(""); } if (!Background.equals("")) { out.println(""); } out.println(""); out.println("

"); out.println(""); s = ZC.getComment(); if (d.isJob() && !solution) { s = ZC.getJobComment(); } if (!s.equals("") && d.saveComment()) { final XmlWriter xml = new XmlWriter(out); xml.printParagraphs(s, 60); } if (!sol.equals("") && !solution && d.linkSolution()) { out.println("

"); out.println("" + Zirkel.name("export.soltext", "Solution") + ""); out.println("

"); } out.println("
"); out.println("

"); out.println(Zirkel.name("export.signature")); out.println("

"); out.println(""); out.println(""); out.close(); } catch (final Exception e) { final Warning w = new Warning(this, Zirkel.name("warning.save"), FileName.chop(32, e.toString(), 64), Zirkel.name("warning"), true); w.center(this); w.setVisible(true); // e.printStackTrace(); } } public void exportTemplateHTML() { testjob(false); if (!haveFile()) { warning(Zirkel.name("export.savefirst")); return; } TemplateLoad.center(this); TemplateLoad.update(); TemplateLoad.setVisible(true); if (TemplateLoad.isAborted()) { return; } final String Template = TemplateLoad.getFilePath(); final ExportTemplateDialog d = new ExportTemplateDialog(this, ZC .getConstruction(), RestrictIcons.getState()); d.center(this); d.setVisible(true); if (d.isAborted()) { return; } doexporttemplate(d, Template); } public void doexporttemplate(final ExportTemplateDialog d, final String template) { HTMLSave.center(this); HTMLSave.setDirectory(FileName.path(Filename)); HTMLSave.setFilePath(FileName.purefilename(Filename) + ".html"); HTMLSave.update(false); HTMLSave.setVisible(true); if (HTMLSave.isAborted()) { return; } String filename = HTMLSave.getFilePath(); if (FileName.extension(filename).equals("")) { filename = filename + ".html"; } if (Global.getParameter("options.filedialog", true) && exists(filename)) { final Question q = new Question(this, FileName.filename(filename) + " : " + Zirkel.name("file.exists.overwrite"), Zirkel .name("file.exists.title"), this, false, true); q.center(this); q.setVisible(true); if (!q.yes()) { return; } } final boolean utf = Global.getParameter("options.utf", true); try { PrintWriter out; if (utf) { out = new PrintWriter(new OutputStreamWriter( new FileOutputStream(filename), "UTF8")); } else { out = new PrintWriter(new OutputStreamWriter( new FileOutputStream(filename))); } BufferedReader in; if (utf) { in = new BufferedReader(new InputStreamReader( new FileInputStream(template), "UTF8")); } else { in = new BufferedReader(new InputStreamReader( new FileInputStream(template))); } while (true) { final String s = readTemplateLine(in); if (s == null) { break; } if (s.startsWith("#")) { if (s.equals("#title")) { printCheck(out, d.getPageTitle()); } else if (s.equals("#file")) { out.println(""); } else if (s.startsWith("#comment")) { String com = ZC.getComment(); if (ZC.isJob()) { com = ZC.getJobComment(); } if (!s.equals("#comment")) { try { final int n = Integer.parseInt(s.substring(8)); final StringTokenizer t = new StringTokenizer( com, "~"); int i = 1; com = ""; while (t.hasMoreTokens()) { final String h = t.nextToken(); if (i == n) { com = h; break; } i++; } } catch (final Exception e) { System.out.println(e); } } if (!com.equals("")) { printParagraphs(out, com, 60); } } else if (s.startsWith("#text")) { String com = ZC.getComment(); if (ZC.isJob()) { com = ZC.getJobComment(); } if (!s.equals("#text")) { try { final int n = Integer.parseInt(s.substring(5)); final StringTokenizer t = new StringTokenizer( com, "~"); int i = 1; while (t.hasMoreTokens()) { final String h = t.nextToken(); if (i == n) { com = h; break; } i++; } } catch (final Exception e) { System.out.println(e); } if (com.startsWith("\n")) { com = com.substring(1); } if (com.endsWith("\n") && com.length() > 1) { com = com.substring(0, com.length() - 1); } } if (!com.equals("")) { printCheck(out, com); } } else if (s.equals("#parameter")) { if (!d.getFile().equals("")) { if (ZC.isJob() && d.isJob()) { out.println(""); } else { out.println(""); } } final String style = d.getStyle(); out.println(""); if (!style.equals("plain") && !style.equals("3D")) { String ss = d.getIcons(); out.println(""); ss = d.getTools(); out.println(""); } if (ZC.showHidden()) { out .println(""); } if (Global.getParameter("options.movename", false)) { out .println(""); } if (Global.getParameter("options.movefixname", true)) { out .println(""); } if (Global.getParameter("options.smallicons", false)) { out .println(""); } if (Global.getParameter("options.oldicons", false)) { out .println(""); } if (Global.getParameter("options.germanpoints", true)) { out .println(""); } /* * // now saved in the construction file if * (Global.getParameter("grid.fine",false)) * out.println("" * ); */ if (Global.getParameter("grid.leftsnap", false)) { out.println(""); } } else if (s.equals("#color")) { if (Global.haveParameter("colorselect")) { out.println(""); } if (Global.haveParameter("colortarget")) { out.println(""); } for (int i = 0; i < Colors.length; i++) { if (Global.haveParameter("color" + i)) { out.println(""); } } } else if (s.equals("#font")) { String ss = ""; if (Global.getParameter("font.bold", false)) { ss = ss + "bold"; } if (Global.getParameter("font.large", false)) { ss = ss + " large"; } if (!ss.equals("")) { out.println(""); } out.println(""); out .println(""); out.println(""); if (Global.getParameter("minpointsize", 3) != 4) { out.println(""); } if (Global.getParameter("minfontsize", 12) != 12) { out.println(""); } if (Global.getParameter("minlinesize", 1.0) != 1.0) { out.println(""); } if (!Background.equals("")) { out.println(""); } } else if (s.equals("#codebase")) { final String cb = d.getCodebase(); if (!cb.equals("")) { out.print(" CODEBASE=\"" + cb + "\" "); } } } else { printCheck(out, s); } } in.close(); out.close(); } catch (final Exception e) { final Warning w = new Warning(this, Zirkel.name("warning.template"), FileName.chop(32, e .toString(), 64), Zirkel.name("warning"), true); w.center(this); w.setVisible(true); e.printStackTrace(); } } MyVector TB = new MyVector(); int TBN = 0; public void printCheck(final PrintWriter out, final String s) { if (TBN == 0) { out.println(s); } else { out.print(s); } } public String readTemplateLine(final BufferedReader in) throws IOException { if (TB.size() > 0) // Still strings in the buffer { final String h = (String) TB.elementAt(TBN); TBN++; if (TBN >= TB.size()) { TBN = 0; TB.removeAllElements(); } return h; } final String h = in.readLine(); if (h == null) { return h; } if (h.indexOf('#') < 0) { return h; } bufferTemplate(h); if (TB.size() > 0) { return readTemplateLine(in); } else { return h; } } public void bufferTemplate(final String s) { final int n = s.indexOf('#'); if (n < 0) { TB.addElement(s); return; } final String h = s.substring(n); if (h.startsWith("#title")) { bufferTemplate(s, n, h, "#title"); } else if (h.startsWith("#parameter")) { bufferTemplate(s, n, h, "#parameter"); } else if (h.startsWith("#color")) { bufferTemplate(s, n, h, "#color"); } else if (h.startsWith("#font")) { bufferTemplate(s, n, h, "#font"); } else if (h.startsWith("#codebase")) { bufferTemplate(s, n, h, "#codebase"); } else if (h.startsWith("#comment")) { for (int i = 0; i < 10; i++) { final String t = "#comment" + i; if (h.startsWith(t)) { bufferTemplate(s, n, h, t); return; } } bufferTemplate(s, n, h, "#comment"); } else if (h.startsWith("#text")) { for (int i = 0; i < 10; i++) { final String t = "#text" + i; if (h.startsWith(t)) { bufferTemplate(s, n, h, t); return; } } bufferTemplate(s, n, h, "#text"); } } public void bufferTemplate(final String s, final int n, String h, final String ph) { if (n > 0) { TB.addElement(s.substring(0, n)); } TB.addElement(ph); h = h.substring(ph.length()); if (!h.equals("")) { bufferTemplate(h); } } public void printParagraphs(final PrintWriter out, String s, final int linelength) { final StringParser p = new StringParser(s); final Vector v = p.wrapwords(linelength); for (int i = 0; i < v.size(); i++) { out.println("

"); s = (String) v.elementAt(i); final StringParser q = new StringParser(s); final Vector w = q.wraplines(linelength); for (int j = 0; j < w.size(); j++) { if (j > 0) { out.println(); } s = (String) w.elementAt(j); out.print(s); } out.println("

"); } } public int getDigits(final double x) { return (int) (Math.log(x) / Math.log(10) + 0.5); } public void setPartial(final boolean flag) { IA.setState("partial", flag); Partial.setState(flag); Global.setParameter("options.partial", flag); ZC.setPartial(flag); } public void setRestricted(final boolean flag) { Restricted.setState(flag); Global.setParameter("options.restricted", flag); ZC.setRestricted(flag); } public void setPartialLines(final boolean flag) { IA.setState("plines", flag); PartialLines.setState(flag); Global.setParameter("options.plines", flag); ZC.setPartialLines(flag); } public void setVectors(final boolean flag) { IA.setState("arrow", flag); Vectors.setState(flag); Global.setParameter("options.arrow", flag); ZC.setVectors(flag); } public void setLongNames(final boolean flag) { LongNames.setState(flag); IA.setState("longnames", flag); Global.setParameter("options.longnames", flag); ZC.setLongNames(flag); } public void setBoldFont(final boolean flag) { BoldFont.setState(flag); IA.setState("bold", flag); Global.setParameter("options.boldfont", flag); ZC.setBoldFont(flag); } public void setLargeFont(final boolean flag) { LargeFont.setState(flag); IA.setState("large", flag); Global.setParameter("options.largefont", flag); ZC.setLargeFont(flag); } public void setObtuse(final boolean flag) { Obtuse.setState(flag); IA.setState("obtuse", flag); Global.setParameter("options.obtuse", flag); ZC.setObtuse(flag); } public void setSolid(final boolean flag) { Solid.setState(flag); IA.setState("solid", flag); Global.setParameter("options.solid", flag); ZC.setSolid(flag); } public void setShowNames(final boolean flag) { ShowNames.setState(flag); IA.setState("showname", flag); Global.setParameter("options.shownames", flag); ZC.setShowNames(flag); } public void setShowValues(final boolean flag) { ShowValues.setState(flag); IA.setState("showvalue", flag); Global.setParameter("options.showvalue", flag); ZC.setShowValues(flag); } void definemacro() { ZC.defineMacro(); updateMacroBar(); settool(NParameters); ZC.getOC().reset(ZC); } String OldMacro = null; public void runMacro(final boolean shift) { Macro m = ZC.chooseMacro(OldMacro); if (!shift || m == null) { m = ZC.chooseMacro(); } if (m == null) { settool(CurrentTool); return; } runMacro(m); } public void runMacro(final Macro m) { ((MacroRunner) ObjectConstructors[NMacro]).setMacro(m, ZC); settool(NMacro); if (IM != null) { IM.select(m); } IB.setMultipleState("macro", 0); OldMacro = m.getName(); } public void replayChosen() { } public void setDigits() { new DigitsDialog(this); ZC.updateDigits(); ZC.repaint(); } public void setLanguage() { GetParameter.InputLength = 20; final GetParameter g = new GetParameter(this, Zirkel .name("language.title"), Zirkel.name("language.prompt"), Zirkel .name("ok"), "language"); g.set("default"); g.center(this); g.setVisible(true); if (!g.aborted()) { Global.setParameter("language", g.getResult()); } } public void savePNG() { final ExportScaler d = new ExportScaler(this, true); if (d.isAborted()) { return; } if (Global.getParameter("printscale.latex", false)) { final LatexSettingsDialog lsd = new LatexSettingsDialog(this); lsd.setVisible(true); if (lsd.isAborted()) { return; } } PicSave.center(this); if (haveFile()) { PicSave.setDirectory(FileName.path(Filename)); PicSave.setFilePath(FileName.purefilename(Filename) + ".png"); } PicSave.setPattern(Global.getParameter("pattern.bitmap", "*.png")); PicSave.update(!haveFile()); PicSave.setVisible(true); if (PicSave.isAborted()) { return; } String filename = PicSave.getFilePath(); if (FileName.extension(filename).equals("")) { filename = filename + ".png"; } if (Global.getParameter("options.filedialog", true) && exists(filename)) { final Question qd = new Question(this, FileName.filename(filename) + " : " + Zirkel.name("file.exists.overwrite"), Zirkel .name("file.exists.title"), this, false, true); qd.center(this); qd.setVisible(true); if (!qd.yes()) { return; } } try { ZC.startWaiting(); ZC .savePNG(filename, Global.getParameter("printscale.latex", false)); } catch (final Exception e) { } ZC.endWaiting(); } /** * Copy graphics to clipboard (in print preview format). */ public void copyPNG() { final ExportScaler d = new ExportScaler(this, true); if (d.isAborted()) { return; } try { ZC.startWaiting(); if (!ZC.savePNG("", false)) { warning(Global.name("exception.clipboardcopy")); } } catch (final Exception e) { } ZC.endWaiting(); } public void saveFIG() { PicSave.center(this); if (haveFile()) { PicSave.setDirectory(FileName.path(Filename)); PicSave.setFilePath(FileName.purefilename(Filename) + ".fig"); } PicSave.setPattern(Global.getParameter("pattern.fig", "*.fig")); PicSave.update(!haveFile()); PicSave.setVisible(true); if (PicSave.isAborted()) { return; } String filename = PicSave.getFilePath(); if (FileName.extension(filename).equals("")) { filename = filename + ".fig"; } if (Global.getParameter("options.filedialog", true) && exists(filename)) { final Question d = new Question(this, FileName.filename(filename) + " : " + Zirkel.name("file.exists.overwrite"), Zirkel .name("file.exists.title"), this, false, true); d.center(this); d.setVisible(true); if (!d.yes()) { return; } } ZC.saveFIG(filename); } public void saveSVG() { PicSave.center(this); if (haveFile()) { PicSave.setDirectory(FileName.path(Filename)); PicSave.setFilePath(FileName.purefilename(Filename) + ".svg"); } PicSave.setPattern("*.svg *.svgz"); PicSave.update(!haveFile()); PicSave.setVisible(true); if (PicSave.isAborted()) { return; } String filename = PicSave.getFilePath(); if (FileName.extension(filename).equals("")) { filename = filename + (Global.getParameter("save.compress", false) ? ".svgz" : ".svg"); } if (Global.getParameter("options.filedialog", true) && exists(filename)) { final Question d = new Question(this, FileName.filename(filename) + " : " + Zirkel.name("file.exists.overwrite"), Zirkel .name("file.exists.title"), this, false, true); d.center(this); d.setVisible(true); if (!d.yes()) { return; } } try { ZC.startWaiting(); ZC.saveSVG(filename); } catch (final Exception e) { } ZC.endWaiting(); } public void savePDF() { final ExportScaler d = new ExportScaler(this, false); if (d.isAborted()) { return; } PicSave.center(this); if (haveFile()) { PicSave.setDirectory(FileName.path(Filename)); PicSave.setFilePath(FileName.purefilename(Filename) + ".pdf"); } PicSave.setPattern("*.pdf"); PicSave.update(!haveFile()); PicSave.setVisible(true); if (PicSave.isAborted()) { return; } String filename = PicSave.getFilePath(); if (FileName.extension(filename).equals("")) { filename = filename + ".pdf"; } if (Global.getParameter("options.filedialog", true) && exists(filename)) { final Question qd = new Question(this, FileName.filename(filename) + " : " + Zirkel.name("file.exists.overwrite"), Zirkel .name("file.exists.title"), this, false, true); qd.center(this); qd.setVisible(true); if (!qd.yes()) { return; } } try { ZC.startWaiting(); ZC.savePDF(filename); } catch (final Exception e) { } ZC.endWaiting(); } public void saveEPS() { final ExportScaler d = new ExportScaler(this, false); if (d.isAborted()) { return; } PicSave.center(this); if (haveFile()) { PicSave.setDirectory(FileName.path(Filename)); PicSave.setFilePath(FileName.purefilename(Filename) + ".eps"); } PicSave.setPattern("*.eps *.epsz"); PicSave.update(!haveFile()); PicSave.setVisible(true); if (PicSave.isAborted()) { return; } String filename = PicSave.getFilePath(); if (FileName.extension(filename).equals("")) { filename = filename + (Global.getParameter("save.compress", false) ? ".epsz" : ".eps"); } if (Global.getParameter("options.filedialog", true) && exists(filename)) { final Question qd = new Question(this, FileName.filename(filename) + " : " + Zirkel.name("file.exists.overwrite"), Zirkel .name("file.exists.title"), this, false, true); qd.center(this); qd.setVisible(true); if (!qd.yes()) { return; } } try { ZC.startWaiting(); ZC.saveEPS(filename); } catch (final Exception e) { } ZC.endWaiting(); } public void setVisual(final boolean flag) { Visual.setState(flag); Global.setParameter("options.visual", flag); ZC.Visual = flag; IA.setState("visual", flag); if (!flag) { remove(StatusPanel); getContentPane().add("South", InputPanel); validate(); Input.requestFocus(); } else { remove(InputPanel); getContentPane().add("South", StatusPanel); validate(); final String s = Status.getText(); Status.setText(""); Status.setText(s); ZC.getConstruction().Hidden = false; } } public void replay() { ZC.OC.invalidate(ZC); ZC.getConstruction().setOriginalOrder(true); final Replay r = new Replay(this, ZC); r.setVisible(true); ZC.getConstruction().setOriginalOrder(false); ZC.validate(); ZC.repaint(); } public void editIcons() { final EditIconBar b = new EditIconBar(this, RestrictIcons.getState()); if (!b.isAbort()) { remakeIconBar(); } } public void makeMainPanel() { MainPanel = new MyPanel(); MainPanel.setLayout(new BorderLayout()); if (Global.getParameter("options.iconbartop", true)) { MainPanel.add("North", North); MainPanel.add("Center", Center); } else { MainPanel.add("Center", Center); MainPanel.add("South", North); } } JPanel CDP3D; MouseAdapter CDPMA; public JPanel makeCenterPanel() { if (Global.getParameter("options.showdisplay", true)) { final JPanel center = new MyPanel(); center.setLayout(new BorderLayout()); ZC.CDP = new ConstructionDisplayPanel(ZC); ZC.CDP.setListingBackground(Global.getParameter("colorbackground", Color.white)); ZC.reloadCD(); CDP3D = new Panel3D(ZC.CDP); center.add("West", CDP3D); center.add("Center", CenterPanel = new Panel3D(ZC, ZC .getBackground())); CDP3D.addMouseListener(CDPMA = new MouseAdapter() { @Override public void mousePressed(final MouseEvent e) { centerResizeStart(e.getX()); } @Override public void mouseReleased(final MouseEvent e) { centerResizeEnd(e.getX()); } }); return center; } else { ZC.CDP = null; return new Panel3D(ZC, ZC.getBackground()); } } public int resizeCol; boolean resizeFlag = false; public void centerResizeStart(final int col) { if (CDP3D.getSize().width - col > 10) { return; } resizeCol = col; resizeFlag = true; setCursor(new Cursor(Cursor.W_RESIZE_CURSOR)); } public void centerResizeEnd(final int col) { if (!resizeFlag) { return; } setCursor(Cursor.getDefaultCursor()); int c = Global.getParameter("options.constructiondisplay.width", 200); c = c + (col - resizeCol); if (c < 10) { c = 10; } if (c > 600) { c = 600; } Global.setParameter("options.constructiondisplay.width", c); CDP3D.removeMouseListener(CDPMA); Center = makeCenterPanel(); remove(MainPanel); makeMainPanel(); add("Center", MainPanel); validate(); repaint(); ZC.requestFocus(); } public void reset() { ZC.reset(); if (CurrentTool == NTargets) { settool(NParameters); } } public void browser() { try { final Runtime R = Runtime.getRuntime(); final String user = Global.getParameter("browser.user", ""); if (user.equals("")) { String file = Zirkel.name("homefile"); if (!new File(file).exists()) { file = Zirkel.name("homepage") + file; } final String os = System.getProperty("os.name"); String browser = "netscape"; if (os.indexOf("Windows") >= 0) { browser = "explorer"; } exec(R, "\"" + browser + "\" \"" + file + "\""); } else { exec(R, user); } } catch (final Exception e) { e.printStackTrace(); configure(); } } public void exec(final Runtime r, String s) throws Exception { final Vector v = new Vector(); int pos = 0; s = s.trim(); while (pos < s.length()) { if (s.charAt(pos) == ' ') { pos++; } else if (s.charAt(pos) == '\"') { pos++; final int n = s.indexOf('\"', pos); if (n >= 0) { v.addElement(s.substring(pos, n)); pos = n + 1; } else { v.addElement(s.substring(pos)); break; } } else { final int n = s.indexOf(' ', pos); if (n >= 0) { v.addElement(s.substring(pos, n)); pos = n + 1; } else { v.addElement(s.substring(pos)); break; } } } final String c[] = new String[v.size()]; for (int i = 0; i < c.length; i++) { c[i] = (String) v.elementAt(i); } r.exec(c); } public void configure() { GetParameter.InputLength = 50; final GetParameter g = new GetParameter(this, Zirkel .name("configure.title"), Zirkel.name("configure.prompt"), Zirkel.name("ok"), "browser"); String user = Global.getParameter("browser.user", ""); if (user.equals("")) { String file = Zirkel.name("homefile"); if (!new File(file).exists()) { file = Zirkel.name("homepage") + file; } String browser = "netscape"; final String os = System.getProperty("os.name"); if (os.indexOf("Windows") >= 0) { browser = "explorer"; } user = "\"" + browser + "\" \"" + file + "\""; } g.set(user); g.center(this); g.setVisible(true); if (!g.aborted()) { Global.setParameter("browser.user", g.getResult()); } } public void dograb() { if (IA.getState("grab")) { ZC.grab(true); } else { ZC.grab(false); } Background = ""; } public void dograb(final boolean flag) { ZC.grab(flag); IA.setState("grag", flag); Background = ""; } public String loadImage() { ImageLoad.center(this); ImageLoad.update(); ImageLoad.setVisible(true); if (ImageLoad.isAborted()) { return ""; } return ImageLoad.getFilePath(); } public Image doLoadImage(String filename) { filename = FileName.path(Filename) + System.getProperty("file.separator") + filename; try { final Image i = getToolkit().getImage(filename); final MediaTracker mt = new MediaTracker(this); mt.addImage(i, 0); mt.waitForID(0); if (mt.checkID(0) && !mt.isErrorAny()) { return i; } else { throw new Exception(Zirkel.name("error.image")); } } catch (final Exception e) { new ShowWarning(this, e.toString()); return null; } } /** * Loada background picture, and resize if wanted */ public void loadBackground() { BackgroundLoad.center(this); BackgroundLoad.update(); BackgroundLoad.setVisible(true); if (BackgroundLoad.isAborted()) { return; } final String filename = BackgroundLoad.getFilePath(); doloadBackground(filename); } public void doloadBackground(final String filename) { try { final Image i = getToolkit().getImage(filename); final MediaTracker mt = new MediaTracker(this); mt.addImage(i, 0); mt.waitForID(0); if (mt.checkID(0) && !mt.isErrorAny()) { ZC.setBackground(i); IA.setState("grab", true); if (Global.getParameter("background.usesize", false)) { resize(); } } else { throw new Exception(Zirkel.name("background.loaderror")); } Background = FileName.filename(filename); } catch (final Exception e) { warning(e.toString()); Background = ""; } } public void resize() { pack(); } public void track() { if (ZC.getCurrentTool() instanceof ObjectTracker && ((ObjectTracker) ZC.getCurrentTool()).isComplete()) { final Question q = new Question(this, Zirkel .name("trackquestion.keep"), Zirkel .name("trackquestion.title"), true); q.center(this); q.setVisible(true); if (q.yes()) { ((ObjectTracker) ZC.getCurrentTool()).keep(ZC); } } } public void restrictIcons(final boolean flag) { if (flag) { RestrictIcons.setState(true); showDefaultIcons(false); remakeIconBar(); } else { RestrictIcons.setState(false); showDefaultIcons(true); remakeIconBar(); } } public eric.JHelpPanel InfoPanel = new eric.JHelpPanel(this, false); public synchronized void removeInfo() { InfoPanel = null; } public synchronized void info() { InfoPanel = new JHelpPanel(this, false); // if (InfoPanel!=null) { // InfoPanel.doclose(); // } else { // InfoPanel=new JInfoPanel1(this); // } } // public void setinfo(String s,boolean WithFocusText) { // JContextHelpPanel.Subject=s; // InfoPanel.clearSearchTxtField(); // if (InfoPanel!=null) { // InfoPanel.fill(WithFocusText); // } // } public void setinfo(final String s, final boolean WithTxtFocus) { JHelpPanel.Subject = s; InfoPanel.clearSearchTxtField(); if (InfoPanel != null) { InfoPanel.fill(WithTxtFocus); } } public void setinfo(final String s) { setinfo(s, true); } /** * Load default macros from ".default.mcr", if that file exists. Else load * from resources, if such a file exists in the resources. */ public void loadBuiltInMacros() { try { final InputStream o = getClass() .getResourceAsStream("/builtin.mcr"); ZC.ProtectMacros = true; ZC.load(o, false, true); ZC.ProtectMacros = false; o.close(); } catch (final Exception e) { } } public void loadDefaultMacros() { // loadBuiltInMacros(); // String mypath=eric.JGlobals.AppPath(); // String Filename="library.mcr"; // if (new // File(mypath+Zirkel.name("language","")+"library.mcr").exists()) // Filename=Zirkel.name("language","")+"library.mcr"; // Filename=mypath+Filename; // if (new File(Filename).exists()) { // try { // InputStream o=new FileInputStream(Filename); // if (isCompressed(Filename)) o=new GZIPInputStream(o); // ZC.ProtectMacros=true; // ZC.load(o,false,true); // ZC.ProtectMacros=false; // o.close(); // } // catch (Exception e) { // warning(Zirkel.name("warning.load")); // } // return; // } // try { // InputStream o=getClass().getResourceAsStream("/default.mcr"); // ZC.ProtectMacros=true; // ZC.load(o,false,true); // ZC.ProtectMacros=false; // o.close(); // return; // } // catch (Exception e) {} } public void showDefaultIcons(final boolean flag) { if (!flag) { ZC.clearProtectedMacros(); } else { loadDefaultMacros(); } } /** * Search for a help topic. This help should be replaced by the context * help. * * @param subject * file name * @return */ public boolean haveHelp(final String subject) { final String lang = Zirkel.name("language", ""); try { final BufferedReader in = new BufferedReader(new InputStreamReader( getClass().getResourceAsStream( "/rene/zirkel/docs/" + lang + subject))); in.close(); } catch (final Exception e) { return false; } return true; } /** * Opened or saved a file (or new construction). * * @return state */ public boolean haveFile() { return !Filename.equals(""); } public void newfile(final boolean defaults) { if (ZC.changed()) { final Question q = new Question(this, Zirkel .name("savequestion.qsave"), Zirkel .name("savequestion.title"), true); q.center(this); q.setVisible(true); if (q.yes() && !savefile()) { return; } if (q.isAborted()) { return; } } clear(defaults); if (RestrictIcons.getState()) { RestrictIcons.setState(false); showDefaultIcons(true); remakeIconBar(); } Filename = ""; clearNonprotectedMacros(); setTitle(Zirkel.name("program.name")); } public void warning(final String s) { final Warning w = new Warning(this, s, "", true); w.center(this); w.setVisible(true); } /** * Display or hide the permanent construction display * * @param flag */ public void showConstructionDisplay(final boolean flag) { Global.setParameter("options.showdisplay", flag); notePosition("zirkelframe"); ConstructionDisplay.setState(flag); Center = makeCenterPanel(); ZC.UseSize = ZC.getSize(); remove(MainPanel); makeMainPanel(); add("Center", MainPanel); validate(); // resize(); ZC.UseSize = null; repaint(); ZC.requestFocus(); } /** * Set the show hidden state * * @param flag */ public void sethidden(final boolean flag) { ZC.setShowHidden(flag); IA.setState("hidden", flag); ShowHidden.setState(flag); } public void editGrid() { new EditGridDialog(this); ZC.setGrid(); ZC.repaint(); } } ./src/rene/zirkel/CVS/RevisionCache/ZirkelCanvas.java#1.70000644000175000017500000047040411133170060021677 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel; // file: ZirkelCanvas.java import java.awt.CheckboxMenuItem; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.TextField; import java.awt.datatransfer.Clipboard; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.Enumeration; import java.util.Vector; import java.util.zip.GZIPOutputStream; import rene.dialogs.Warning; import rene.gui.Global; import rene.gui.MyCheckboxMenuItem; import rene.gui.MyMenuItem; import rene.util.FileName; import rene.util.ImageSelection; import rene.util.MyVector; import rene.util.PngEncoder; import rene.util.sort.Sorter; import rene.util.xml.XmlReader; import rene.util.xml.XmlTag; import rene.util.xml.XmlTagPI; import rene.util.xml.XmlTree; import rene.util.xml.XmlWriter; import rene.zirkel.construction.ChangedListener; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionDisplayPanel; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.construction.Interpreter; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.IntersectionConstructor; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.dialogs.AgainQuestion; import rene.zirkel.dialogs.DefineMacro; import rene.zirkel.dialogs.MessageWindow; import rene.zirkel.dialogs.ReplaceMacroQuestion; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.Drawing; import rene.zirkel.graphics.LatexOutput; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.graphics.MyGraphicsEPS; import rene.zirkel.graphics.MyGraphicsFig; import rene.zirkel.graphics.MyGraphicsPDF; import rene.zirkel.graphics.MyGraphicsSvg; import rene.zirkel.graphics.PolygonDrawer; import rene.zirkel.graphics.TrackPainter; import rene.zirkel.listener.AddEventListener; import rene.zirkel.listener.DoneListener; import rene.zirkel.listener.StatusListener; import rene.zirkel.macro.Macro; import rene.zirkel.macro.MacroBar; import rene.zirkel.macro.MacroItem; import rene.zirkel.macro.MacroMenu; import rene.zirkel.macro.MacroRunner; import rene.zirkel.macro.MacroSelectDialog; import rene.zirkel.objects.AngleObject; import rene.zirkel.objects.AreaObject; import rene.zirkel.objects.AxisObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.EquationXYObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.FixedAngleObject; import rene.zirkel.objects.FixedCircleObject; import rene.zirkel.objects.FunctionObject; import rene.zirkel.objects.IntersectionObject; import rene.zirkel.objects.MoveableObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PointonObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.QuadricObject; import rene.zirkel.objects.RayObject; import rene.zirkel.objects.SegmentObject; import rene.zirkel.objects.TwoPointLineObject; import rene.zirkel.objects.UserFunctionObject; import rene.zirkel.structures.CoordinatesXY; import rene.zirkel.tools.AnimatorTool; import rene.zirkel.tools.BinderTool; import rene.zirkel.tools.BreakpointAnimator; import rene.zirkel.tools.EditTool; import rene.zirkel.tools.LabelMover; import rene.zirkel.tools.MagnetTool; import rene.zirkel.tools.MetaMover; import rene.zirkel.tools.MoverTool; import rene.zirkel.tools.ObjectTracker; import rene.zirkel.tools.SaveJob; import rene.zirkel.tools.SetAwayTool; import rene.zirkel.tools.SetCurveCenterTool; import rene.zirkel.tools.SetFixedAngle; import rene.zirkel.tools.SetFixedCircle; import rene.zirkel.tools.SetRangeTool; import rene.zirkel.tools.SetTargetsTool; import rene.zirkel.tools.Tracker; import rene.zirkel.tools.UniversalTracker; import rene.zirkel.tools.ZoomerTool; import atp.sHotEqn; import eric.JGlobals; import eric.JUndo; import eric.controls.JControlsManager; /** * @author Rene Main class, doing most of the work in the C.a.R. application. * This canvas handles mouse and keyboard input, displays the * construction and has tools to save and load constructions. */ public class ZirkelCanvas extends javax.swing.JPanel implements MouseListener, MouseMotionListener, ItemListener, AddEventListener, ActionListener, ChangedListener, MouseWheelListener // the canvas to do the construction { /** * */ private static final long serialVersionUID=1L; ObjectConstructor OC=new MoverTool(); // the current object constructor Construction C=new Construction(), COriginal; // the construction (collection of Constructor-Objects) StatusListener SL=null; // for displaying a status message public Image I=null; MyGraphics IG; public UniversalTracker UniversalTrack=null; Image Background=null; FontMetrics FM; public double PointSize=4.0; // Size of a point double MinPointSize=4.0; // Default minimal point size public double FontSize=12.0; // Size of font double MinFontSize=12.0; // Default minimal font size public int IW=0, IH=0; // Image and its dimensions public double Xmin, DX, Ymin, DY; boolean ShowHidden=false; // show hidden objects Frame F=new Frame(); boolean ReadOnly; boolean AllowRightMouse=true; public PopupMenu PM; CheckboxMenuItem CheckboxHidden; MenuItem Replay, Empty; boolean Job=false; // this is a job (save as such) String Last=""; // Last displayed job object Vector Targets=new Vector(); // Target names ConstructionObject TargetO[], TargetS[]; // Target objects and solutions int ShowColor=0; // 0=all, 1=green etc. (black displays always) static public double // factors for rounding EditFactor=1000000.0, LengthsFactor=100.0, AnglesFactor=1.0; public boolean Visual=Global.getParameter("options.visual", true); boolean All; boolean Interactive=true; public int GridColor=0, GridThickness=ConstructionObject.THIN; public boolean ShowGrid=false, AxesOnly=false, ShowDots=true, ShowLines=true; public boolean GridLabels=true, GridBold=false, GridLarge=false; public JControlsManager JCM; public JUndo JU=new JUndo(); /** * Initiate an empty construction. The display may have a popup menu (only * for readonly displays). * * @param readonly * User cannot change the construction. * @param replay * Replay option in popup menu. * @param hidden * Show hidden option in popup menu. */ public ZirkelCanvas(final boolean readonly, final boolean replay, final boolean hidden) { ReadOnly=readonly; AllowRightMouse=!readonly; // setLayout(new BoxLayout(this,BoxLayout.X_AXIS)); setLayout(null); UniversalTrack=new UniversalTracker(this); JCM=new JControlsManager(this); if (Global.getParameter("options.nopopupmenu", false)) { PM=null; } else if (ReadOnly) { PM=new PopupMenu(); CheckboxHidden=new MyCheckboxMenuItem(Zirkel.name("popup.hidden")); CheckboxHidden.addItemListener(this); if (hidden) { PM.add(CheckboxHidden); } Replay=new MyMenuItem(Zirkel.name("popup.replay")); Replay.addActionListener(this); if (replay) { PM.add(Replay); } if (hidden||replay) { add(PM); } else { PM=null; } } else { PM=new PopupMenu(); Empty=new MyMenuItem(Zirkel.name("popup.empty")); add(PM); } C.CL=this; clear(); updateDigits(); C.addAddEventListener(this); addMouseWheelListener(this); } public ZirkelCanvas(final boolean readonly) { this(readonly, true, true); } public ZirkelCanvas() { this(false, true, true); } @Override public void paintComponents(final Graphics g) { } public void deleteAxisObjects() { C.deleteAxisObjects(); reloadCD(); repaintCD(); } public void createAxisObjects() { C.createAxisObjects(); } private void setShowHideParameters(final String s, final boolean b) { Global.setParameter("options.point."+s, b); Global.setParameter("options.segment."+s, b); Global.setParameter("options.line."+s, b); Global.setParameter("options.circle."+s, b); Global.setParameter("options.angle."+s, b); Global.setParameter("options.text."+s, b); Global.setParameter("options.locus."+s, b); Global.setParameter("options."+s, b); // setShowNames(true); } public void JSsend(final String s) { if (s.equals("shownames")) { setShowHideParameters("shownames", true); } else if (s.equals("hidenames")) { setShowHideParameters("shownames", false); } else if (s.equals("showvalues")) { setShowHideParameters("showvalues", true); } else if (s.equals("hidevalues")) { setShowHideParameters("showvalues", false); } else { try { C.interpret(this, s); } catch (final Exception ex) { } } } public String JSreceive(final String s) { String r="ERROR..."; try { double rep; final Expression exp=new Expression(s, C, null); rep=exp.getValue(); r=String.valueOf(rep); } catch (final ConstructionException ex) { ex.printStackTrace(); } return r; } public Dimension UseSize=null; @Override public Dimension getMinimumSize() { if (Background==null||!Global.getParameter("background.usesize", false)) { if (UseSize!=null) { return UseSize; } else { return new Dimension(600, 600); } } else { final int iw=Background.getWidth(this); if (iw<10) { return new Dimension(600, 600); } final int ih=Background.getHeight(this); if (Global.getParameter("background.usewidth", false)) { final int w=getSize().width, h=(int) ((double) ih/iw*w+0.5); return new Dimension(w, h); } else { return new Dimension(iw, ih); } } } @Override public Dimension getPreferredSize() { return getMinimumSize(); } public void updateDigits() { EditFactor=Math.pow(10, Global.getParameter("digits.edit", 5)); LengthsFactor=Math.pow(10, Global.getParameter("digits.lengths", 5)); AnglesFactor=Math.pow(10, Global.getParameter("digits.angles", 0)); } public void itemStateChanged(final ItemEvent e) { if (e.getSource()==CheckboxHidden) { ShowHidden=CheckboxHidden.getState(); repaint(); } } ZirkelCanvasInterface ZCI; public void setZirkelCanvasListener(final ZirkelCanvasInterface zci) { ZCI=zci; } public String loadImage() { return ZCI.loadImage(); } public Image doLoadImage(final String filename) { return ZCI.doLoadImage(filename); } public void actionPerformed(final ActionEvent e) { if (!Interactive) { return; } if (e.getSource()==Replay) { if (ZCI!=null) { ZCI.replayChosen(); } } else { final Enumeration en=Macros.elements(); while (en.hasMoreElements()) { final MacroItem m=(MacroItem) en.nextElement(); if (m.I==e.getSource()) { if (ZCI!=null) { ZCI.runMacro(m.M); } break; } } } } // Some transfer functions to compute screen coordinates etc. public double col(final double x) { return (x-Xmin)/DX*IW; } public double row(final double y) { return IH-(y-Ymin)/DY*IH; } public int width() { return IW; } public int height() { return IH; } public double x(final int c) { return Xmin+DX*c/IW; } public double y(final int r) { return Ymin+DY*(IH-r)/IH; } public double dx(final int c) { return DX*c/IW; } public double dy(final int r) { return DY*r/IH; } public double dx(final double c) { return DX*c/IW; } public double dy(final double r) { return DY*r/IH; } public double maxX() { return Xmin+DX; } public double minX() { return Xmin; } public double maxY() { return Ymin+DY; } public double minY() { return Ymin; } public boolean isInside(final double x, final double y) { return x>=Xmin&&x=Ymin&&y0) { C.setPixel(getSize().width/DX); } } DoneListener DL; public void setDoneListener(final DoneListener dl) { DL=dl; } /** * Add an item to the construction and re-paint the construction. */ public void addObject(final ConstructionObject o) // called by the // ObjectConstructor { C.add(o); if (Preview) { o.setIndicated(true); o.setSelectable(false); } C.updateCircleDep(); } /** * A construction added an item. Check, if it solves a problem and notify * the DoneListener, if so. */ public void added(final Construction c, final ConstructionObject o) { if (displayJob()&&TargetO.length>0) { boolean olddone=true; for (int i=0; i0) { boolean olddone=true; for (int i=0; i0) { final ConstructionObject o=select(v, e.getX(), e.getY()); if (o!=null) { new EditTool().mousePressed(e, o, this); check(); return; } else { repaintCD(); } return; } } if (Moved<=2&&PM!=null&&!Global.getParameter("restricted", false)) { int n=2; if (ReadOnly||!Global.getParameter("options.doubleclick", false)) { n=1; } if (e.getClickCount()>=n&&(ReadOnly||Macros.size()!=0)) { PM.show(e.getComponent(), e.getX(), e.getY()); } } repaintCD(); return; } if (SmartBoardPreview&&Global.getParameter("smartboard", false)) { Control=e.isControlDown(); clearIndicated(); clearPreview(); repaint(); Dragging=false; OC.mousePressed(e, this); SmartBoardPreview=false; mouseReleased(e); return; } if (!Dragging) { OC.mouseReleased(e, this); Dragging=false; repaintCD(); return; } if (Moved<=1) { if (OC instanceof LabelMover) { ((LabelMover) OC).resetPoint(); OC.mouseReleased(e, this); } else if (OC instanceof MetaMover) { OC.mouseReleased(e, this); if (!ReadOnly) { new EditTool().mousePressed(e, this); } } } else { OC.mouseReleased(e, this); } repaintCD(); check(); Dragging=false; } public synchronized void mouseClicked(final MouseEvent e) { } public synchronized void mouseExited(final MouseEvent e) { if (!Interactive) { return; } clearIndicated(); clearPreview(); repaint(); SmartBoardPreview=false; RightClicked=false; repaintCD(); } public void mouseEntered(final MouseEvent e) { } public synchronized void mouseMoved(final MouseEvent e) { if (!Interactive||!Global.getParameter("options.indicate", true)) { return; } if (Global.getParameter("smartboard", false)) { return; } Count.setAllAlternate(true); OC.mouseMoved(e, this, Global.getParameter("options.indicate.simple", false)); Count.setAllAlternate(false); repaintCD(); } DragThread DT=null; public synchronized void mouseDragged(final MouseEvent e) { if (!Interactive) { return; } if (DT==null) { DT=new DragThread(this); } if (SmartBoardPreview&&Global.getParameter("smartboard", false)) { OC.mouseMoved(e, this, Global.getParameter( "options.indicate.simple", false)); } else { DT.mouseDragged(e); Moved++; } repaintCD(); } public synchronized void doMouseDragged(final MouseEvent e) { OC.mouseDragged(e, this); } ConstructionObject LastPaint=null; public void newImage() { I=null; repaint(); } boolean Frozen=false; public void setFrozen(final boolean f) { Frozen=f; } public boolean getFrozen() { return Frozen; } MessageWindow MW; final double PointSizeFactor=240.0; int CC=0; // public void repaint(){ // // System.out.print("a "); // // super.repaint(); // StackTraceElement[] trace = new Throwable().getStackTrace(); // if (!trace[1].equals("javax.swing.JComponent")) super.repaint(); // // // for (int i=0;i0) { final ConstructionObject os[]=new ConstructionObject[n]; e=C.elements(); n=0; while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.HasZ) { os[n++]=o; } } Sorter.sort(os); for (int i=0; i250&&PolygonDrawer.step<50) { PolygonDrawer.step=PolygonDrawer.step*2; } if (time<100&&PolygonDrawer.step>4) { PolygonDrawer.step=PolygonDrawer.step/2; } paintDrawings(IG); // JMacrosTools.CurrentJZF.JCM.paintControls(IG.getGraphics()); } void dopaintFig(final MyGraphicsFig IG) { if (ShowGrid) { paintGrid(IG); } IG.pushLayer(true); int layer=0; while (true) { IG.pushLayer(); int l=0; Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==LastPaint) { break; } if (l==layer&&o.isBack()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l>layer) { break; } } } if (llayer) { break; } } } l=0; e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==LastPaint) { break; } if (l==layer&&!o.isBack()&&o.selected()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l>layer) { break; } } } layer++; } IG.pushLayer(false); if (LastPaint==null) { paintTrack(IG); } } int xg[]=new int[64], yg[]=new int[64]; public void setGrid() { ShowGrid=Global.getParameter("showgrid", false); AxesOnly=Global.getParameter("axesonly", false); ShowDots=Global.getParameter("showdots", false); ShowLines=Global.getParameter("showlines", false); GridThickness=Global.getParameter("grid.thickness", ConstructionObject.THIN); GridColor=Global.getParameter("grid.colorindex", 0); GridBold=Global.getParameter("grid.bold", false); GridLarge=Global.getParameter("grid.large", false); GridLabels=Global.getParameter("grid.labels", true); } /** * Paint axes and grid. * * @param IG */ void paintGrid(final MyGraphics IG) { if (GridThickness==ConstructionObject.NORMAL) { IG.setColor(ZirkelFrame.Colors[Global.getParameter( "grid.colorindex", 0)]); } else { IG.setColor(ZirkelFrame.LightColors[GridColor]); } IG.setFont(GridLarge, GridBold); final double gridsize=getGridSize(); int dd=IH/200; if (dd<1) { dd=1; } double x1=Math.floor((C.getX()-C.getW())/gridsize-1)*gridsize; int xi=0; while (x1<(C.getX()+C.getW())&&xi<64) { final int c=(int) col(x1); xg[xi++]=c; x1+=gridsize; } double y1=Math.floor((C.getY()-C.getW())/gridsize-1)*gridsize; int yi=0; while (y1<(C.getY()+C.getW())&&yi<64) { final int r=(int) row(y1); yg[yi++]=r; y1+=gridsize; } for (int i=0; iC.getX()-C.getW()) { final int c=(int) col(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(c, 0, c, IH); } else { IG.drawThickLine(c, 0, c, IH); } } if (0C.getY()-C.getW()) { final int r=(int) row(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(0, r, IW, r); } else { IG.drawThickLine(0, r, IW, r); } } } dd=dd*2; double labelsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; while (C.getW()*2/labelsize>=10) { labelsize*=10; } if (C.getW()*2/labelsize<5) { labelsize/=2; } final FontMetrics fm=IG.getFontMetrics(); final int FH=fm.getHeight(); x1=Math.floor((C.getX()-C.getW())/labelsize-1)*labelsize; int lh=(int) row(0); int bottomshift=FH+2; if (lh<0||lh>IH) { lh=IH; bottomshift=-7; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); final String s=format(x1); if (s.length()>0) { if (GridLabels) { IG.drawString(s, c-fm.stringWidth(s)/2, lh+bottomshift); } IG.drawLine(c, lh-dd, c, lh+dd); } x1+=labelsize; } boolean left=true; int lw=(int) col(0); if (lw<0||lw>IW-20) { lw=0; left=false; } y1=Math.floor((C.getY()-C.getW())/labelsize-1)*labelsize; while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); final String s=format(y1); if (s.length()>0) { final int leftshift=(left)?-fm.stringWidth(s)-5:8; if (GridLabels) { IG.drawString(s, lw+leftshift, r+FH/2-2); } IG.drawLine(lw-dd, r, lw+dd, r); } y1+=labelsize; } } /** * Paint only the coordinate axes (no grid) * * @param IG */ void paintAxes(final MyGraphics IG) { IG.setAntialiasing(false); if (GridThickness==ConstructionObject.NORMAL) { IG.setColor(ZirkelFrame.Colors[GridColor]); } else { IG.setColor(ZirkelFrame.LightColors[GridColor]); } IG.setFont(GridLarge, GridBold); final double gridsize=getGridSize(); double x1=Math.floor((C.getX()-C.getW())/gridsize-1)*gridsize; final int r0=(int) row(0); int dd=IH/200; if (dd<1) { dd=1; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); IG.drawLine(c, r0-dd, c, r0+dd); x1+=gridsize; } double y1=Math.floor((C.getY()-C.getW())/gridsize-1)*gridsize; final int c0=(int) col(0); while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); IG.drawLine(c0-dd, r, c0+dd, r); y1+=gridsize; } if (GridThickness!=ConstructionObject.INVISIBLE) { if (0C.getX()-C.getW()) { final int c=(int) col(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(c, 0, c, IH); } else { IG.drawThickLine(c, 0, c, IH); } } if (0C.getY()-C.getW()) { final int r=(int) row(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(0, r, IW, r); } else { IG.drawThickLine(0, r, IW, r); } } } dd=dd*2; double labelsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; while (C.getW()*2/labelsize>=10) { labelsize*=10; } if (C.getW()*2/labelsize<5) { labelsize/=2; } final FontMetrics fm=IG.getFontMetrics(); final int FH=fm.getHeight(); x1=Math.floor((C.getX()-C.getW())/labelsize-1)*labelsize; int lh=(int) row(0); int bottomshift=FH+2; if (lh<0||lh>IH) { lh=IH; bottomshift=-7; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); final String s=format(x1); if (s.length()>0) { if (GridLabels) { IG.drawString(s, c-fm.stringWidth(s)/2, lh+bottomshift); } IG.drawLine(c, lh-dd, c, lh+dd); } x1+=labelsize; } boolean left=true; int lw=(int) col(0); if (lw<0||lw>IW-20) { lw=0; left=false; } y1=Math.floor((C.getY()-C.getW())/labelsize-1)*labelsize; while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); final String s=format(y1); if (s.length()>0) { final int leftshift=(left)?-fm.stringWidth(s)-5:8; if (GridLabels) { IG.drawString(s, lw+leftshift, r+FH/2-2); } IG.drawLine(lw-dd, r, lw+dd, r); } y1+=labelsize; } IG.setAntialiasing(true); } public double pointSize() { return PointSize; } public double SelectionPointFactor=Global.getParameter("selectionsize", 1.5); public double selectionSize() { return SelectionPointFactor*PointSize; } public double Scale=1.0; public int scale(final int x) { return (int) (Scale*x); } static char c[]=new char[20]; int nc; public String format(double x) { // double xx=x; nc=0; boolean minus=false; if (x<-1e-12) { minus=true; x=-x; } x+=1e-12; final double h=x-Math.floor(x); if (rekformat(h, 8)) { c[nc++]='.'; } while (x>=1) { final double s=Math.floor(x/10); c[nc++]=(char) ('0'+(int) (x-s*10)); x=s; } if (nc>0&&minus) { c[nc++]='-'; } // revert c: for (int i=0; i "+new String(c,0,nc)); return new String(c, 0, nc); } boolean rekformat(double h, final int k) { h=h*10; final double x=Math.floor(h); if (k==0) { final int i=(int) x; if (i>0) { c[nc++]=(char) ('0'+i); return true; } else { return false; } } else { final int i=(int) x; if (rekformat(h-x, k-1)||i>0) { c[nc++]=(char) ('0'+i); return true; } else { return false; } } } @Override public void update(final Graphics g) { paint(g); } public void paintUntil(final ConstructionObject o) { if (LastPaint==o) { return; } LastPaint=o; repaint(); } // validate all elements @Override public void validate() { dovalidate(); if (OC instanceof TrackPainter) { ((TrackPainter) OC).validate(this); } } /** * Synchronized update of the construction to avoid a repaint during update. */ synchronized public void dovalidate() { C.dovalidate(); } // selection routines: // This vector is used by ALL selection and indication routines for // performance reasons. MyVector V=new MyVector(); public void sort(final MyVector V) { if (V.size()<2) { return; } Sorter.QuickSort(V.getArray(), 0, V.size()-1); } /** * Slow function to resort a vector by the number of each element in the * construction. */ public void sortRow(final MyVector V) { final ConstructionObject o[]=new ConstructionObject[V.size()]; V.copyInto(o); V.removeAllElements(); final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject oo=(ConstructionObject) e.nextElement(); for (final ConstructionObject element : o) { if (element==oo) { V.addElement(oo); break; } } } } /** * select a circle or a line. **/ public ConstructionObject selectCircleLine(final int x, final int y, final boolean multiple) // select a circle or a line { final MyVector v=selectCircleLineObjects(x, y, multiple, false); return select(v); } public ConstructionObject selectCircleLine(final int x, final int y) // select // a // circle // or // a // line { return selectCircleLine(x, y, true); } /** * select a circle or a line. **/ public ConstructionObject selectPointonObject(final int x, final int y, final boolean multiple) // select a circle or a line { final MyVector v=selectPointonObjects(x, y, multiple, false); return select(v); } public ConstructionObject selectPointonObject(final int x, final int y) // select // a // circle // or // a // line { return selectPointonObject(x, y, true); } /** * Select all possible circles or lines at x,y. If a matching non-filled * object is found above a filled object, the latter is never selected. * * @param multiple * determines, if it is possible to select selected objects. * @param testlocal * determines, if objects that look locally like already selected * objects should be omitted. */ public MyVector selectCircleLineObjects(final int x, final int y, final boolean multiple, final boolean testlocal) // select a circle // or a line { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject||o instanceof PrimitiveCircleObject)&&o.nearto(x, y, true, this)&&(multiple||!o.selected())) { if (testlocal) { final Enumeration ev=V.elements(); while (ev.hasMoreElements()) { final ConstructionObject ov=(ConstructionObject) ev.nextElement(); if (o.locallyLike(ov)) { o=null; break; } } } if (o!=null) { V.addElement(o); } } } return V; } public MyVector selectCircleLineObjects(final int x, final int y, final boolean multiple) { return selectCircleLineObjects(x, y, multiple, false); } public MyVector selectCircleLineObjects(final int x, final int y) { return selectCircleLineObjects(x, y, true, false); } /** * Select all possible object at x,y that can carry a point. * * @param multiple * determines, if it is possible to select selected objects. * @param testlocal * determines, if objects that look locally like already selected * objects should be omitted. */ public MyVector selectPointonObjects(final int x, final int y, final boolean multiple, final boolean testlocal) // select a circle // or a line { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PointonObject)&&o.nearto(x, y, true, this)&&(multiple||!o.selected())) { if (testlocal) { final Enumeration ev=V.elements(); while (ev.hasMoreElements()) { final ConstructionObject ov=(ConstructionObject) ev.nextElement(); if (o.locallyLike(ov)) { o=null; break; } } } if (o!=null) { V.addElement(o); } } } return V; } public MyVector selectPointonObjects(final int x, final int y, final boolean multiple) { return selectPointonObjects(x, y, multiple, false); } public MyVector selectPointonObjects(final int x, final int y) { return selectPointonObjects(x, y, true, false); } /** * Select all selectable objects near to x,y. * * @param multiple * allows multiple selections. **/ public MyVector selectObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } return V; } public MyVector selectObjects(final int x, final int y) { return selectObjects(x, y, true); } /** * Select a single object near x,y. **/ public ConstructionObject selectObject(final int x, final int y, final boolean multiple) { final MyVector v=selectObjects(x, y, multiple); return select(v, x, y); } public ConstructionObject selectObject(final int x, final int y) { return selectObject(x, y, true); } /** * select all constructable objects near x,y. **/ public MyVector selectConstructableObjects(final int x, final int y, final boolean multiple) // select an enumeration of objects { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.valid()&&o.isFlag()&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } return V; } public MyVector selectConstructableObjects(final int x, final int y) { return selectConstructableObjects(x, y, true); } /** * select a single constructable object near x,y. **/ public ConstructionObject selectConstructableObject(final int x, final int y) { final MyVector v=selectConstructableObjects(x, y, true); return select(v, x, y); // user determines } /** * Select a single line, segment, ray, perp., paral. or fixed angle near * x,y. **/ public PrimitiveLineObject selectLine(final int x, final int y, final boolean multiple) { selectLineObjects(x, y, multiple); return (PrimitiveLineObject) select(V); } public void selectLineObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PrimitiveLineObject selectLine(final int x, final int y) { return selectLine(x, y, true); } /** * Select a point or a line (for the object tracker). */ public void selectPointsOrLines(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject||o instanceof PointObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } /** * Select a single line, segment, or ray near x,y **/ public TwoPointLineObject selectTwoPointLine(final int x, final int y, final boolean multiple) { selectTwoPointLines(x, y, multiple); return (TwoPointLineObject) select(V); } public void selectTwoPointLines(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof TwoPointLineObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public TwoPointLineObject selectTwoPointLine(final int x, final int y) { return selectTwoPointLine(x, y, true); } /** * Select a single segment near x,y **/ public SegmentObject selectSegment(final int x, final int y, final boolean multiple) { selectSegments(x, y, multiple); return (SegmentObject) select(V); } public void selectSegments(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof SegmentObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public SegmentObject selectSegment(final int x, final int y) { return selectSegment(x, y, true); } public boolean isMultipleAcceptedObject(final ConstructionObject o) { boolean b=o instanceof AreaObject; b=b||o instanceof PrimitiveLineObject; b=b||o instanceof PrimitiveCircleObject; b=b||o instanceof QuadricObject; b=b||o instanceof eric.JLocusTrackObject; return b; } public void selectMultipleFinals(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PointObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.removeAllElements(); return; } if (o.isSelectable()&&(isMultipleAcceptedObject(o))&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } if (V.size()>1) { V.removeAllElements(); } } public ConstructionObject selectMultipleFinal(final int x, final int y, final boolean multiple) { selectMultipleFinals(x, y, multiple); return (ConstructionObject) select(V); } /** * Select a single ray near x,y **/ public RayObject selectRay(final int x, final int y, final boolean multiple) { selectRays(x, y, multiple); return (RayObject) select(V); } public void selectRays(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof RayObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public RayObject selectRay(final int x, final int y) { return selectRay(x, y, true); } /** * Select a circle near x,y. A non-filled object is preferred before a * filled object. **/ public PrimitiveCircleObject selectCircle(final int x, final int y, final boolean multiple) { selectCircles(x, y, multiple); return (PrimitiveCircleObject) select(V); } public void selectCircles(final int x, final int y, final boolean multiple) { Enumeration e=C.elements(); V.removeAllElements(); boolean haveNotFilled=false; while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveCircleObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); if (!o.isFilledForSelect()) { haveNotFilled=true; } } } if (haveNotFilled) { e=V.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isFilledForSelect()) { V.removeElement(o); } } } } public PrimitiveCircleObject selectCircle(final int x, final int y) { return selectCircle(x, y, true); } /** * Select a point near x,y. **/ public PointObject selectPoint(final int x, final int y, final boolean multiple) { selectPointObjects(x, y, multiple); return (PointObject) select(V); } public void selectPointObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PointObject selectPoint(final int x, final int y) { return selectPoint(x, y, true); } public PointObject selectPoint(final int x, final int y, final boolean multiple, final ConstructionObject until) { selectPointObjects(x, y, multiple, until); return (PointObject) select(V); } public void selectPointObjects(final int x, final int y, final boolean multiple, final ConstructionObject until) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==until) { break; } if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PointObject selectPoint(final int x, final int y, final ConstructionObject until) { return selectPoint(x, y, true, until); } boolean NewPoint=false; public boolean isNewPoint() { return NewPoint; } /** * Select a point, and create a new point, if necessary. Even creates an * intersection, or a point bound to an object, if possible. If enabled, the * user is asked for confirmation in these cases. The variable NewPoint is * set to true, if the point was indeed created. * * @param multiple * determines, if multiple selections are possible. * @param any * determines, if the first point should be used. **/ public PointObject selectCreatePoint(final int x, final int y, final boolean multiple, final boolean any) { NewPoint=false; if (Preview) { final PointObject p=new PointObject(C, x(x), y(y)); addObject(p); p.setSuperHidden(true); PreviewObject=p; return p; } // User selects a known point: final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } sort(V); } if (V.size()>0) { if (any) { return (PointObject) (V.elementAt(0)); } final ConstructionObject o=select(V, Control||!Global.getParameter("options.indicate", true)); if (o!=null) { return (PointObject) o; } return null; } // User creates a new point: ConstructionObject oc=tryCreateIntersection(x, y, true); if (oc!=null) { final PointObject o=(PointObject) oc; // o.setDefaults(); // if (o.showName()) renameABC(o,false,false); return o; } if (!IntersectionYes) { return null; } final MyVector w=selectPointonObjects(x, y, true, false); filter(w, x, y, true); if (w.size()>0) { oc=select(w, !Control); if (oc==null) { return null; } if (oc!=null) { boolean yes=true; if (Global.getParameter("options.pointon", false)) { final AgainQuestion q=new AgainQuestion(F, Zirkel.name("question.pointon"), Zirkel.name("question.title")); q.center(F); q.setVisible(true); yes=q.yes(); Global.setParameter("options.pointon", q.again()); } if (yes) { final PointObject o=new PointObject(C, x(x), y(y), oc); // if (ShowGrid&&!Global.getParameter("grid.leftsnap", // false)) { // o.snap(this); // } o.setUseAlpha(true); addObject(o); validate(); o.setDefaults(); // rename Point on object, if showname // if (o.showName()) renameABC(o,false,false); NewPoint=true; return o; } else { return null; } } } final PointObject p=new PointObject(C, x(x), y(y)); if (ShowGrid) { p.snap(this); } addObject(p); p.setDefaults(); // rename Point, if showname // if (p.showName()) renameABC(p,false,false); NewPoint=true; return p; } boolean IntersectionYes=false; public ConstructionObject tryCreateIntersection(final int x, final int y, final boolean ask) { final MyVector w=selectPointonObjects(x, y, true, true); sort(w); IntersectionYes=true; if (w.size()<2) { return null; } final ConstructionObject P1=(ConstructionObject) w.elementAt(0); final ConstructionObject P2=(ConstructionObject) w.elementAt(1); if (!(P1 instanceof PointonObject&&P2 instanceof PointonObject)) { return null; } if (!((PointonObject) P1).canInteresectWith(P2)||!((PointonObject) P2).canInteresectWith(P1)) { return null; } final IntersectionObject o[]=IntersectionConstructor.construct(P1, P2, C); if (o.length==1&&!o[0].valid()) { return null; } if (o.length==2&&!o[0].valid()&&!o[1].valid()) { return null; } if (ask&&Global.getParameter("options.intersection", false)) { final AgainQuestion q=new AgainQuestion(F, Zirkel.name("question.intersection"), Zirkel.name("question.title")); q.center(F); q.setVisible(true); IntersectionYes=q.yes(); Global.setParameter("options.intersection", q.again()); } if (IntersectionYes) { if (o.length==1||!o[1].valid()) { addObject(o[0]); o[0].autoAway(); o[0].validate(x(x), y(y)); validate(); o[0].setDefaults(); o[0].setRestricted(getRestricted()); return o[0]; } if (!o[0].valid()) { addObject(o[1]); o[1].autoAway(); validate(); o[1].setDefaults(); o[1].setRestricted(getRestricted()); return o[1]; } IntersectionObject oc=o[0]; final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d10) { return (ConstructionObject) V.elementAt(0); } else { return null; } } final ConstructionObject o=select(V, x, y); return o; } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel, final ConstructionObject until) { return selectWithSelector(x, y, sel, until, true); } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel, final boolean choice) { return selectWithSelector(x, y, sel, null, choice); } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel) { return selectWithSelector(x, y, sel, null, true); } /** * Select a moveable point at x,y. Don't ask user, take first. **/ public ConstructionObject selectImmediateMoveablePoint(final int x, final int y) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } } if (V.size()==0) { return null; } return (ConstructionObject) V.elementAt(0); } /** * Select a moveable object at x,y. **/ public ConstructionObject selectMoveableObject(final int x, final int y) { final ConstructionObject s=findSelectedObject(); if (s instanceof MoveableObject&&((MoveableObject) s).moveable()&&s.nearto(x, y, this)) { return s; } selectMoveableObjects(x, y); if (V.size()==1) { return (ConstructionObject) V.elementAt(0); } final ConstructionObject o=select(V); if (o!=null) { if (!Global.getParameter("options.choice", true)) { return o; } o.setSelected(true); } return null; } public void selectMoveableObjects(final int x, final int y, final boolean control) { V.removeAllElements(); final ConstructionObject s=findSelectedObject(); if (s instanceof MoveableObject&&((MoveableObject) s).moveable()&&s.nearto(x, y, this)) { V.addElement(s); return; } else if (control&&s instanceof FixedCircleObject&&s.nearto(x, y, this)&&((FixedCircleObject) s).fixedByNumber()) { V.addElement(s); return; } else if (control&&s instanceof FixedAngleObject&&s.nearto(x, y, this)&&((FixedAngleObject) s).fixedByNumber()) { V.addElement(s); return; } final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (!control&&o.isSelectable()&&o instanceof MoveableObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } else if (control&&o instanceof FixedCircleObject&&o.nearto(x, y, this)&&((FixedCircleObject) o).fixedByNumber()) { V.addElement(o); } else if (control&&o instanceof FixedAngleObject&&o.nearto(x, y, this)&&((FixedAngleObject) o).fixedByNumber()) { V.addElement(o); } } filter(V, x, y); } public void selectMoveableObjects(final int x, final int y) { selectMoveableObjects(x, y, false); } /** * Select a moveable object at x,y. Don't ask user, take first. **/ public ConstructionObject selectImmediateMoveableObject(final int x, final int y) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof MoveableObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } } filter(V, x, y); if (V.size()==0) { return null; } return (ConstructionObject) V.elementAt(0); } /** * try to determine the unique objects that are near coordinates x,y and * delete all others from the vector v. **/ public void filter(final MyVector v, final int x, final int y, final boolean choice) { boolean HasPoints=false, HasNotFilled=false; Enumeration e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o instanceof PointObject) { HasPoints=true; } if (!o.isFilledForSelect()) { HasNotFilled=true; } } if (HasPoints) { e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (!o.onlynearto(x, y, this)) { v.removeElement(o); } } } else if (HasNotFilled) { e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isFilledForSelect()) { v.removeElement(o); } } } sort(v); if (!choice) { v.truncate(1); } } public void filter(final MyVector v, final int x, final int y) { filter(v, x, y, Global.getParameter("options.choice", true)||Control); } /** * user must select an object in the selection dialog, unless the selection * is unique anyway, or the filter determines that the selection is unique. **/ public ConstructionObject select(final MyVector v, final int x, final int y, final boolean choice) { if (v.size()==0) { return null; } if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } filter(v, x, y); if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } if (!choice) { return (ConstructionObject) v.elementAt(0); } sortRow(V); RightClicked=false; final eric.JSelectPopupDialog d=new eric.JSelectPopupDialog(F, this, v); final ConstructionObject o=d.getConstructionObject(); d.doclose(); return o; } public ConstructionObject select(final MyVector v, final int x, final int y) { return select(v, x, y, Global.getParameter("options.choice", true)||Control); } /** * user must select an object in the selection dialog, unless the selection * is unique anyway. **/ public ConstructionObject select(final MyVector v, final boolean choice) { if (v.size()==0) { return null; } if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } // if (!choice) return (ConstructionObject)v.elementAt(0); sortRow(V); RightClicked=false; final eric.JSelectPopupDialog d=new eric.JSelectPopupDialog(F, this, v); final ConstructionObject o=d.getConstructionObject(); d.doclose(); return o; } public ConstructionObject select(final MyVector v) { return select(v, Global.getParameter("options.choice", true)||Control); } /** * select the label of a point, i.e. a point, which is set by the user * * @return the first label found **/ public ConstructionObject selectLabel(final int x, final int y) { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o.textcontains(x, y, this)) { return o; } } return null; } public ConstructionObject findSelectedObject() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.selected()) { return o; } } return null; } // Indication functions MyVector Indicated=new MyVector(); PointObject IndicatePoint=null; public void indicate(final MyVector v, final boolean showname) { if (v.size()==1) { if (showname) { setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); } else if (v.elementAt(0) instanceof PointObject) { setCursor(new Cursor(Cursor.HAND_CURSOR)); } } else { setCursor(Cursor.getDefaultCursor()); } if (Indicated.equalsIdentical(v)) { return; } Enumeration e=Indicated.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setIndicated(false); } Indicated.removeAllElements(); e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); Indicated.addElement(o); o.setIndicated(true, showname); } repaint(); } public void indicate(final MyVector v) { indicate(v, false); } public void clearIndicated() { IndicatePoint=null; if (Indicated.size()==0) { return; } final Enumeration e=Indicated.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setIndicated(false); } Indicated.removeAllElements(); setCursor(Cursor.getDefaultCursor()); repaint(); } boolean Preview=false; ConstructionObject LastNonPreview=null; MoveableObject PreviewObject=null; public void movePreview(final MouseEvent e) { if (PreviewObject!=null) { PreviewObject.move(x(e.getX()), y(e.getY())); validate(); repaint(); } } public void prepareForPreview(final MouseEvent e) { LastNonPreview=C.last(); Preview=true; } public boolean isPreview() { return Preview; } public void clearPreview() { if (!Preview) { return; } C.clearAfter(LastNonPreview); LastNonPreview=null; PreviewObject=null; Preview=false; Count.fixAll(false); } public void setPreviewObject(final MoveableObject o) { PreviewObject=o; } public ConstructionObject indicateTryCreateIntersection(final int x, final int y, final boolean ask) { final MyVector w=selectPointonObjects(x, y, true, true); sort(w); IntersectionYes=true; if (w.size()<2) { return null; } final IntersectionObject o[]=IntersectionConstructor.construct( (ConstructionObject) w.elementAt(0), (ConstructionObject) w.elementAt(1), C); if (o.length==1&&!o[0].valid()) { return null; } if (o.length==2) { if (!o[1].valid()) { if (!o[0].valid()) { return null; } } else { final IntersectionObject h=o[0]; o[0]=o[1]; o[1]=h; } } IntersectionObject oc=o[0]; if (o.length==2&&o[1].valid()) { final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d10) { IndicatePoint=null; filter(V, x, y, false); indicate(V); return; } PointObject oc=(PointObject) indicateTryCreateIntersection(x, y, true); if (oc!=null) { return; } final MyVector w=selectPointonObjects(x, y, true, false); filter(w, x, y, true); if (w.size()>=1) { if (!w.equalsIdentical(Indicated)) { oc=new PointObject(C, x(x), y(y), (ConstructionObject) w.elementAt(0)); if (ShowGrid&&!Global.getParameter("grid.leftsnap", false)) { oc.snap(this); } oc.setUseAlpha(true); oc.validate(); oc.setIndicated(true); oc.setType(PointObject.CIRCLE); oc.setColorType(ConstructionObject.THICK); IndicatePoint=oc; indicate(w); } else if (IndicatePoint!=null) { IndicatePoint.setType(PointObject.CIRCLE); IndicatePoint.setColorType(ConstructionObject.THICK); IndicatePoint.move(x(x), y(y)); IndicatePoint.project((ConstructionObject) w.elementAt(0)); repaint(); } } else { clearIndicated(); } } public void indicateCircleLineObjects(final int x, final int y) { final MyVector w=selectCircleLineObjects(x, y); filter(V, x, y); indicate(w); } public void indicatePointonObjects(final int x, final int y) { final MyVector w=selectPointonObjects(x, y); filter(V, x, y); indicate(w); } public void indicateIntersectedObjects(final int x, final int y) { final MyVector w=selectPointonObjects(x, y); if (!w.equalsIdentical(Indicated)&&w.size()>=2) { final IntersectionObject o[]=IntersectionConstructor.construct( (ConstructionObject) w.elementAt(0), (ConstructionObject) w.elementAt(1), C); IntersectionObject oc=o[0]; if (o.length==2) { final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d1=Macros.size()) { appendMacro(m); } } catch (final ConstructionException ex) { Count.setAllAlternate(false); throw ex; } Count.setAllAlternate(false); } } else if (tag.name().equals("Construction")) { if (construction) { boolean job=false; if (tag.hasParam("job")) { job=true; Last=tag.getValue("last"); if (Last==null) { throw new ConstructionException(Zirkel.name("exception.job")); } final String Target=tag.getValue("target"); if (Target==null) { Targets=new Vector(); int i=1; while (true) { final String s=tag.getValue("target"+i); i++; if (s==null) { break; } Targets.addElement(s); } } else { Targets=new Vector(); Targets.addElement(Target); } if (Targets.size()==0) { throw new ConstructionException(Zirkel.name("exception.job")); } } C.load(tree, this); if (job) { if (C.find(Last)==null) { throw new ConstructionException(Zirkel.name("exception.job")); } final Enumeration et=Targets.elements(); while (et.hasMoreElements()) { final String s=(String) et.nextElement(); if (C.find(s)==null&&(!s.startsWith("~")||C.find(s.substring(1))==null)) { throw new ConstructionException(Zirkel.name("exception.job")); } } Job=true; } break; } } else { throw new ConstructionException("Construction not found"); } } recompute(); C.translateOffsets(this); resetSum(); validate(); repaint(); } catch (final Exception e) { throw e; } reloadCD(); repaint(); // Give the magnet object list to the point // see PointConstructor.construct : Enumeration e=Construction.magnet.elements(); while (e.hasMoreElements()) { final PointObject p=(PointObject) e.nextElement(); p.setMagnetObjects((String) e.nextElement()); } // System.out.println("finished reading file"); } public void resetSum() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o instanceof ExpressionObject) { ((ExpressionObject) o).reset(); } } } public void warning(final String s, final String help) { final Warning w=new Warning(F, s, Zirkel.name("warning"), true, help); w.center(F); w.setVisible(true); } public void warning(final String s) { warning(s, ""); } public void load(final InputStream in) throws Exception { try { C.Loading=true; load(in, true, true); C.Loading=false; } catch (final Exception e) { C.Loading=false; throw e; } } public String getComment() { return C.getComment(); } public void setComment(final String s) { C.setComment(s); } public String getJobComment() { return C.getJobComment(); } public void setJobComment(final String s) { C.setJobComment(s); } /** * This can be used to set a frame window for the error dialogs that the * canvas my display. */ public void setFrame(final Frame f) { F=f; } public Frame getFrame() { return F; } /** * Maginify the view by the specified factor. */ public void magnify(final double f) { ZoomerTool.initNonDraggableObjects(C); C.setXYW(C.getX(), C.getY(), C.getW()*f); ZoomerTool.zoomNonDraggableObjectsBy(C, f); recompute(); validate(); repaint(); } /** * Shift the view with these deltas. */ public void shift(final double dx, final double dy) { ZoomerTool.initNonDraggableObjects(C); C.setXYW(C.getX()+dx*C.getW(), C.getY()+dy*C.getW(), C.getW()); ZoomerTool.shiftNonDraggableObjectsBy(C, dx*C.getW(), dy*C.getW()); recompute(); validate(); repaint(); } /** * Tracker routines: Call the OC (must be a TrackPainter) to paint the * object track. */ public void paintTrack(final MyGraphics g) { if (!(OC instanceof TrackPainter)) { return; } ((TrackPainter) OC).paint(g, this); } /** * Run through the construction to update all object texts. This should be * called, whenever the name of an item was changed. It will recreate only * those texts, which contain the old name. */ public void updateTexts(final ConstructionObject o, final String oldname) { C.updateTexts(o, oldname); } public Construction getConstruction() { return C; } public void setShowGrid(final boolean flag) { ShowGrid=flag; repaint(); } public void toggleShowGrid() { if (ShowGrid&&!AxesOnly) { AxesOnly=true; } else if (ShowGrid) { ShowGrid=false; } else { AxesOnly=false; ShowGrid=true; } Global.setParameter("showgrid", ShowGrid); Global.setParameter("axesonly", AxesOnly); repaint(); } public boolean showGrid() { return ShowGrid; } /** * Sets the job parameters for the current construction (the last item to * display and the target item). */ public void setJob(final ConstructionObject last) { Job=true; Last=last.getName(); Targets=new Vector(); } public void addJobTarget(final ConstructionObject target, final boolean visible) { if (visible) { Targets.addElement("~"+target.getName()); } else { Targets.addElement(target.getName()); } } public void clearTargets() { Targets=new Vector(); } /** * Cancel the job state o fthe current construction. */ public void clearJob() { Job=false; } /** * Test, if the construction is a valid job. */ public boolean isJob() { final Enumeration e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (C.find(s)==null&&(!s.startsWith("~")||C.find(s.substring(1))==null)) { return false; } } return Job&&C.find(Last)!=null&&Targets.size()>0; } public boolean inTargets(final String s) { final Enumeration e=Targets.elements(); while (e.hasMoreElements()) { if (((String) e.nextElement()).equals(s)) { return true; } } return false; } /** * * This will display the construction as a job (if it is a job). The * construction is copied up to the last element. The copies are marked as * keep objects, so that they cannot be changed. The last object is marked * as the target object, so that it displays in a special color. * * The function can also flip back to the original construction * (flag=false). */ public void displayJob(final boolean flag) { clearSelected(); if (!(OC instanceof SaveJob)) { OC.reset(this); } if (flag) // diplay the job { C.setOriginalOrder(true); if (displayJob()||!isJob()) { return; } final Construction Cnew=new Construction(); Cnew.setXYW(C.getX(), C.getY(), C.getW()); Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setJobTarget(true); o.setJobTarget(false); } e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); Cnew.add(o); o.setKeep(true); if (inTargets(o.getName())||inTargets("~"+o.getName())) { o.setJobTarget(true); } if (o.getName().equals(Last)) { break; } } while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (inTargets(o.getName())||inTargets("~"+o.getName())) { Cnew.add(o); o.setKeep(true); o.setJobTarget(true); } } int n=0; e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (!s.startsWith("~")) { n++; } } TargetO=new ConstructionObject[n]; TargetS=new ConstructionObject[n]; n=0; e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (!s.startsWith("~")) { TargetO[n]=Cnew.find(s); TargetS[n]=null; n++; } } COriginal=C; C=Cnew; C.addAddEventListener(this); C.setComment(COriginal.getJobComment()); recompute(); reloadCD(); repaint(); } else // display the orginal construction again { if (!displayJob()) { return; } C.removeAddEventListener(this); C=COriginal; COriginal=null; final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setKeep(false); o.setJobTarget(false); } C.setOriginalOrder(false); recompute(); reloadCD(); repaint(); } } /** * If the job is solved, this function removes all restrictions. */ public void freeJob() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setKeep(false); o.setJobTarget(false); repaint(); } } /** * Test if the canvas displays a job right now. */ public boolean displayJob() { return COriginal!=null; } // The following functions change the default values of some objects. public void setShowColor(final int i) { ShowColor=i; repaint(); } public int getShowColor() { return ShowColor; } public ObjectConstructor getOC() { return OC; } // Macros: Vector Macros=new Vector(); public Vector getMacros() { return Macros; } public boolean haveMacros() { return Macros.size()>0; } public boolean haveNonprotectedMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (!m.M.isProtected()) { return true; } } return false; } /** * Define a macro. There must be parameters (but not necessarily targets). * The function will display the macro dialog. It will create a new macro, * when the dialog was not aborted. The macro is kept in the Macros vector * by name. */ boolean defineMacro() { clearSelected(); // Read the list of Parameters and Targets from the // construction. This list is filled by the SetParameter and // SetTargets constructors. final Vector P=C.getParameters(); if (P.size()==0) // no parameters { warning(Zirkel.name("definemacro.noparams")); return false; } // Display the macro creation dialog to the user. final DefineMacro d=new DefineMacro(F, this); d.center(getFrame()); d.setVisible(true); // Aborted? if (d.isAborted()||d.getName().equals("")) { return false; } // Define a marco with the name, the comment and the paramters. final Macro m=new Macro(this, d.getName(), d.getComment(), d.getParams()); // If there are no targets, determine everything as // constructed by the paramaters, else only the things needed // to get the targets. try { defineMacro(C, m, d.targetsOnly(), d.invisible(), d.getPromptFor(), d.hideduplicates()); } catch (final ConstructionException e) { warning(e.getDescription()); OC.reset(this); return false; } storeMacro(m, false); OC.reset(this); return true; } /** * Copy a macro with fixed parameters from another macro. */ public Macro copyMacro(final Macro m, final String name, final boolean fixed[]) { try { final Macro macro=(Macro) (m.clone()); macro.Name=name; final boolean f[]=new boolean[fixed.length]; for (int i=0; i0&&!c.ShowAll, c.SuperHide, c.getPromptFor(), true); storeMacro(m, true); } /* * Store the macro in the macro list (or replace the old macro with the same * name * * @param all Replace the macro without asking. */ public void storeMacro(final Macro m, final boolean all) { int i=0; for (i=0; i=Macros.size()) { appendMacro(m); } } public boolean ProtectMacros=false; public MacroMenu MM=null; public void appendMacro(final Macro m) { if (!ReadOnly) { if (ProtectMacros) { m.setProtected(true); } if (MM==null) { MM=new MacroMenu(PM, "", null); } final MacroItem mi=MM.add(m, m.getName()); if (mi.I!=null) { mi.I.addActionListener(this); } Macros.addElement(mi); } else { if (MM==null) { MM=new MacroMenu(null, "", null); } final MacroItem mi=MM.add(m, m.getName()); if (mi.I!=null) { mi.I.addActionListener(this); } Macros.addElement(mi); } } /** * Replace the macro item number i with m. * * @return User wants to replace all subsequent macros. */ public boolean replaceMacro(final Macro m, final int i, final boolean all) { final MacroItem e=(MacroItem) Macros.elementAt(i); if (all) // don't ask { Macros.setElementAt(new MacroItem(m, e.I), i); return true; } else // ask { final ReplaceMacroQuestion d=new ReplaceMacroQuestion(getFrame(), m); d.center(getFrame()); d.setVisible(true); if (d.isNo()) { return false; } final MacroItem newitem=new MacroItem(m, e.I); MM.replace((MacroItem) Macros.elementAt(i), newitem); Macros.setElementAt(newitem, i); return d.isAll(); } } public String MacroCurrentComment; /** * The user has to choose from a list of macros (for running). */ public Macro chooseMacro() { if (Macros.size()==0) { warning(Zirkel.name("definemacro.nomacro")); return null; } final MacroSelectDialog d=new MacroSelectDialog(getFrame(), MM, false); d.setVisible(true); return d.getMacro(); } /** * The user can choose from a list of macros (for saving). * * @return A vector of selected Macros. */ public Vector chooseMacros() { if (Macros.size()==0) { warning(Zirkel.name("definemacro.nomacro")); return null; } final MacroSelectDialog d=new MacroSelectDialog(getFrame(), MM, true); d.setVisible(true); return d.getMacros(); } /** * Run a macro by name. */ public Macro chooseMacro(final String name) { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final Macro m=((MacroItem) e.nextElement()).M; if (m.getName().equals(name)) { return m; } } return null; } public void deleteMacros(final Vector v) { final Enumeration e=v.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); deleteMacro(m); } } public void deleteMacro(final MacroItem m) { Macros.removeElement(m); if (m.I!=null) { m.I.removeActionListener(this); MM.remove(m); } } public void clearMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.I!=null) { m.I.removeActionListener(this); MM.remove(m); } } Macros.removeAllElements(); } public void clearNonprotectedMacros() { final Vector V=new Vector(); final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (!m.M.isProtected()) { V.addElement(m); } } deleteMacros(V); } public void clearProtectedMacros() { final Vector V=new Vector(); final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.M.isProtected()) { V.addElement(m); } } deleteMacros(V); } public void protectMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); m.M.setProtected(true); } } public void renameMacro(final Macro macro, final String name) { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.I!=null&&m.M==macro) { deleteMacro(m); break; } } macro.setName(name); appendMacro(macro); } MacroBar MBar; public void setMacroBar(final MacroBar m) { MBar=m; } public void updateMacroBar() { // if (MBar!=null) { // MBar.update(Macros); // } } // For the prompt in the status line: TextField TF; public void setTextField(final TextField t) { TF=t; } public void setPrompt(final String s) { if (TF!=null) { TF.setText(s); } } // Loading: public void loadRun(final InputStream is) { final BufferedReader in=new BufferedReader(new InputStreamReader(is)); String s="", comment=""; while (true) { try { s=in.readLine(); if (s==null) { break; } int n; if ((n=s.indexOf("//"))>=0) { comment=s.substring(n+2).trim(); s=s.substring(0, n); } else { comment=""; } s=s.trim(); int k=0; if ((k=Interpreter.startTest("macro", s))>=0) { loadMacro(in, s.substring(k).trim()); } else if (!s.equals("")) { C.interpret(this, s, comment); } } catch (final ConstructionException e) { warning(e.getDescription()+" --- "+s); break; } catch (final Exception e) { warning(e.toString()+" --- "+s); e.printStackTrace(); break; } } C.updateCircleDep(); } public void loadMacro(final BufferedReader in, final String name) throws ConstructionException { final Construction c=new Construction(); c.clear(); String s="", comment="", macrocomment=""; boolean inComment=true, newLine=true; while (true) { try { s=in.readLine(); if (s==null) { throw new ConstructionException(Zirkel.name("exception.macroend")); } s=s.trim(); final int n=s.indexOf("//"); if (inComment&&n==0) { final String h=s.substring(n+2).trim(); if (newLine) { macrocomment=macrocomment+h; newLine=false; } else { if (h.equals("")) { macrocomment=macrocomment+"\n"; newLine=true; } else { macrocomment=macrocomment+" "+h; newLine=false; } } continue; } inComment=false; if (n>=0) { comment=s.substring(n+2).trim(); s=s.substring(0, n); } else { comment=""; } s=s.trim(); if (s.equals(Zirkel.name("end"))) { break; } if (s.toLowerCase().equals("end")) { break; } if (!s.equals("")) { c.interpret(this, s, comment); } } catch (final InvalidException e) { } catch (final ConstructionException e) { throw new ConstructionException(e.getDescription()+" --- "+s); } catch (final IOException e) { warning(e.toString()); return; } } defineMacro(name, macrocomment, c); } public double getGridSize() { double gridsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; if (C.getW()*2/gridsize>=30) { gridsize*=5; } if (C.getW()*2/gridsize<10) { gridsize/=2; } return gridsize; } public LatexOutput createBB(final String filename, final int w, final int h, final double dpi) { try { String path=""; if (Global.getParameter("options.fullpath", true)) { path=FileName.pathAndSeparator(filename); } PrintWriter out=new PrintWriter(new FileOutputStream(path+FileName.purefilename(filename)+".bb")); out.println("%%BoundingBox: 0 0 "+w+" "+h); out.close(); out=new PrintWriter(new FileOutputStream(path+FileName.purefilename(filename)+".ztx")); final LatexOutput lout=new LatexOutput(out); lout.open(w, h, dpi, path+FileName.filename(filename)); return lout; } catch (final Exception e) { warning(e.toString()); } return null; } /** * Save picture as PNG on file or copy to clipboard * * @param filename * ("" for clipboard) * @return not failed */ synchronized public boolean savePNG(final String filename, final boolean latex) { LatexOutput lout=null; if (IW==0||I==null) { return false; } if (Global.getParameter("printscale.middle", true)) { savePreviewAsPNG(filename); return true; } double dpi=Global.getParameter("printscale.dpi", 300); if (!Global.getParameter("printscale.sizes", false)) { final int w=Global.getParameter("printscale.w", IW); final int h=Global.getParameter("printscale.h", IH); if (latex) { lout=createBB(filename, w, h, dpi); } final int IWold=IW; IW=w; IH=h; Scale=((double) IW)/IWold; I=createImage(IW, IH); IG=new MyGraphics13(I.getGraphics(), Scale, this, lout); IG.setSize(w, h); double pointsize=PointSize*Scale; double fontsize=FontSize*Scale; if (Scale<1) { if (Global.getParameter("options.minpointsize", false)&&pointsize. */ package rene.zirkel; // file: ZirkelCanvas.java import java.awt.CheckboxMenuItem; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.TextField; import java.awt.datatransfer.Clipboard; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.Enumeration; import java.util.Vector; import java.util.zip.GZIPOutputStream; import rene.dialogs.Warning; import rene.gui.Global; import rene.gui.MyCheckboxMenuItem; import rene.gui.MyMenuItem; import rene.util.FileName; import rene.util.ImageSelection; import rene.util.MyVector; import rene.util.PngEncoder; import rene.util.sort.Sorter; import rene.util.xml.XmlReader; import rene.util.xml.XmlTag; import rene.util.xml.XmlTagPI; import rene.util.xml.XmlTree; import rene.util.xml.XmlWriter; import rene.zirkel.construction.ChangedListener; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionDisplayPanel; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.construction.Interpreter; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.IntersectionConstructor; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.dialogs.AgainQuestion; import rene.zirkel.dialogs.DefineMacro; import rene.zirkel.dialogs.MessageWindow; import rene.zirkel.dialogs.ReplaceMacroQuestion; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.Drawing; import rene.zirkel.graphics.LatexOutput; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.graphics.MyGraphicsEPS; import rene.zirkel.graphics.MyGraphicsFig; import rene.zirkel.graphics.MyGraphicsPDF; import rene.zirkel.graphics.MyGraphicsSvg; import rene.zirkel.graphics.PolygonDrawer; import rene.zirkel.graphics.TrackPainter; import rene.zirkel.listener.AddEventListener; import rene.zirkel.listener.DoneListener; import rene.zirkel.listener.StatusListener; import rene.zirkel.macro.Macro; import rene.zirkel.macro.MacroBar; import rene.zirkel.macro.MacroItem; import rene.zirkel.macro.MacroMenu; import rene.zirkel.macro.MacroRunner; import rene.zirkel.macro.MacroSelectDialog; import rene.zirkel.objects.AngleObject; import rene.zirkel.objects.AreaObject; import rene.zirkel.objects.AxisObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.EquationXYObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.FixedAngleObject; import rene.zirkel.objects.FixedCircleObject; import rene.zirkel.objects.FunctionObject; import rene.zirkel.objects.IntersectionObject; import rene.zirkel.objects.MoveableObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PointonObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.QuadricObject; import rene.zirkel.objects.RayObject; import rene.zirkel.objects.SegmentObject; import rene.zirkel.objects.TwoPointLineObject; import rene.zirkel.objects.UserFunctionObject; import rene.zirkel.structures.CoordinatesXY; import rene.zirkel.tools.AnimatorTool; import rene.zirkel.tools.BinderTool; import rene.zirkel.tools.BreakpointAnimator; import rene.zirkel.tools.EditTool; import rene.zirkel.tools.LabelMover; import rene.zirkel.tools.MagnetTool; import rene.zirkel.tools.MetaMover; import rene.zirkel.tools.MoverTool; import rene.zirkel.tools.ObjectTracker; import rene.zirkel.tools.SaveJob; import rene.zirkel.tools.SetAwayTool; import rene.zirkel.tools.SetCurveCenterTool; import rene.zirkel.tools.SetFixedAngle; import rene.zirkel.tools.SetFixedCircle; import rene.zirkel.tools.SetRangeTool; import rene.zirkel.tools.SetTargetsTool; import rene.zirkel.tools.Tracker; import rene.zirkel.tools.UniversalTracker; import rene.zirkel.tools.ZoomerTool; import atp.sHotEqn; import eric.JGlobals; import eric.JUndo; import eric.controls.JControlsManager; /** * @author Rene Main class, doing most of the work in the C.a.R. application. * This canvas handles mouse and keyboard input, displays the * construction and has tools to save and load constructions. */ public class ZirkelCanvas extends javax.swing.JPanel implements MouseListener, MouseMotionListener, ItemListener, AddEventListener, ActionListener, ChangedListener, MouseWheelListener // the canvas to do the construction { /** * */ private static final long serialVersionUID=1L; ObjectConstructor OC=new MoverTool(); // the current object constructor Construction C=new Construction(), COriginal; // the construction (collection of Constructor-Objects) StatusListener SL=null; // for displaying a status message public Image I=null; MyGraphics IG; public UniversalTracker UniversalTrack=null; Image Background=null; FontMetrics FM; public double PointSize=4.0; // Size of a point double MinPointSize=4.0; // Default minimal point size public double FontSize=12.0; // Size of font double MinFontSize=12.0; // Default minimal font size public int IW=0, IH=0; // Image and its dimensions public double Xmin, DX, Ymin, DY; boolean ShowHidden=false; // show hidden objects Frame F=new Frame(); boolean ReadOnly; boolean AllowRightMouse=true; public PopupMenu PM; CheckboxMenuItem CheckboxHidden; MenuItem Replay, Empty; boolean Job=false; // this is a job (save as such) String Last=""; // Last displayed job object Vector Targets=new Vector(); // Target names ConstructionObject TargetO[], TargetS[]; // Target objects and solutions int ShowColor=0; // 0=all, 1=green etc. (black displays always) static public double // factors for rounding EditFactor=1000000.0, LengthsFactor=100.0, AnglesFactor=1.0; public boolean Visual=Global.getParameter("options.visual", true); boolean All; boolean Interactive=true; public int GridColor=0, GridThickness=ConstructionObject.THIN; public boolean ShowGrid=false, AxesOnly=false, ShowDots=true, ShowLines=true; public boolean GridLabels=true, GridBold=false, GridLarge=false; public JControlsManager JCM; public JUndo JU=new JUndo(); /** * Initiate an empty construction. The display may have a popup menu (only * for readonly displays). * * @param readonly * User cannot change the construction. * @param replay * Replay option in popup menu. * @param hidden * Show hidden option in popup menu. */ public ZirkelCanvas(final boolean readonly, final boolean replay, final boolean hidden) { ReadOnly=readonly; AllowRightMouse=!readonly; // setLayout(new BoxLayout(this,BoxLayout.X_AXIS)); setLayout(null); UniversalTrack=new UniversalTracker(this); JCM=new JControlsManager(this); if (Global.getParameter("options.nopopupmenu", false)) { PM=null; } else if (ReadOnly) { PM=new PopupMenu(); CheckboxHidden=new MyCheckboxMenuItem(Zirkel.name("popup.hidden")); CheckboxHidden.addItemListener(this); if (hidden) { PM.add(CheckboxHidden); } Replay=new MyMenuItem(Zirkel.name("popup.replay")); Replay.addActionListener(this); if (replay) { PM.add(Replay); } if (hidden||replay) { add(PM); } else { PM=null; } } else { PM=new PopupMenu(); Empty=new MyMenuItem(Zirkel.name("popup.empty")); add(PM); } C.CL=this; clear(); updateDigits(); C.addAddEventListener(this); addMouseWheelListener(this); } public ZirkelCanvas(final boolean readonly) { this(readonly, true, true); } public ZirkelCanvas() { this(false, true, true); } @Override public void paintComponents(final Graphics g) { } public void deleteAxisObjects() { C.deleteAxisObjects(); reloadCD(); repaintCD(); } public void createAxisObjects() { C.createAxisObjects(); } private void setShowHideParameters(final String s, final boolean b) { Global.setParameter("options.point."+s, b); Global.setParameter("options.segment."+s, b); Global.setParameter("options.line."+s, b); Global.setParameter("options.circle."+s, b); Global.setParameter("options.angle."+s, b); Global.setParameter("options.text."+s, b); Global.setParameter("options.locus."+s, b); Global.setParameter("options."+s, b); // setShowNames(true); } public void JSsend(final String s) { if (s.equals("shownames")) { setShowHideParameters("shownames", true); } else if (s.equals("hidenames")) { setShowHideParameters("shownames", false); } else if (s.equals("showvalues")) { setShowHideParameters("showvalues", true); } else if (s.equals("hidevalues")) { setShowHideParameters("showvalues", false); } else { try { C.interpret(this, s); } catch (final Exception ex) { } } } public String JSreceive(final String s) { String r="ERROR..."; try { double rep; final Expression exp=new Expression(s, C, null); rep=exp.getValue(); r=String.valueOf(rep); } catch (final ConstructionException ex) { ex.printStackTrace(); } return r; } public Dimension UseSize=null; @Override public Dimension getMinimumSize() { if (Background==null||!Global.getParameter("background.usesize", false)) { if (UseSize!=null) { return UseSize; } else { return new Dimension(600, 600); } } else { final int iw=Background.getWidth(this); if (iw<10) { return new Dimension(600, 600); } final int ih=Background.getHeight(this); if (Global.getParameter("background.usewidth", false)) { final int w=getSize().width, h=(int) ((double) ih/iw*w+0.5); return new Dimension(w, h); } else { return new Dimension(iw, ih); } } } @Override public Dimension getPreferredSize() { return getMinimumSize(); } public void updateDigits() { EditFactor=Math.pow(10, Global.getParameter("digits.edit", 5)); LengthsFactor=Math.pow(10, Global.getParameter("digits.lengths", 5)); AnglesFactor=Math.pow(10, Global.getParameter("digits.angles", 0)); } public void itemStateChanged(final ItemEvent e) { if (e.getSource()==CheckboxHidden) { ShowHidden=CheckboxHidden.getState(); repaint(); } } ZirkelCanvasInterface ZCI; public void setZirkelCanvasListener(final ZirkelCanvasInterface zci) { ZCI=zci; } public String loadImage() { return ZCI.loadImage(); } public Image doLoadImage(final String filename) { return ZCI.doLoadImage(filename); } public void actionPerformed(final ActionEvent e) { if (!Interactive) { return; } if (e.getSource()==Replay) { if (ZCI!=null) { ZCI.replayChosen(); } } else { final Enumeration en=Macros.elements(); while (en.hasMoreElements()) { final MacroItem m=(MacroItem) en.nextElement(); if (m.I==e.getSource()) { if (ZCI!=null) { ZCI.runMacro(m.M); } break; } } } } // Some transfer functions to compute screen coordinates etc. public double col(final double x) { return (x-Xmin)/DX*IW; } public double row(final double y) { return IH-(y-Ymin)/DY*IH; } public int width() { return IW; } public int height() { return IH; } public double x(final int c) { return Xmin+DX*c/IW; } public double y(final int r) { return Ymin+DY*(IH-r)/IH; } public double dx(final int c) { return DX*c/IW; } public double dy(final int r) { return DY*r/IH; } public double dx(final double c) { return DX*c/IW; } public double dy(final double r) { return DY*r/IH; } public double maxX() { return Xmin+DX; } public double minX() { return Xmin; } public double maxY() { return Ymin+DY; } public double minY() { return Ymin; } public boolean isInside(final double x, final double y) { return x>=Xmin&&x=Ymin&&y0) { C.setPixel(getSize().width/DX); } } DoneListener DL; public void setDoneListener(final DoneListener dl) { DL=dl; } /** * Add an item to the construction and re-paint the construction. */ public void addObject(final ConstructionObject o) // called by the // ObjectConstructor { C.add(o); if (Preview) { o.setIndicated(true); o.setSelectable(false); } C.updateCircleDep(); } /** * A construction added an item. Check, if it solves a problem and notify * the DoneListener, if so. */ public void added(final Construction c, final ConstructionObject o) { if (displayJob()&&TargetO.length>0) { boolean olddone=true; for (int i=0; i0) { boolean olddone=true; for (int i=0; i0) { final ConstructionObject o=select(v, e.getX(), e.getY()); if (o!=null) { new EditTool().mousePressed(e, o, this); check(); return; } else { repaintCD(); } return; } } if (Moved<=2&&PM!=null&&!Global.getParameter("restricted", false)) { int n=2; if (ReadOnly||!Global.getParameter("options.doubleclick", false)) { n=1; } if (e.getClickCount()>=n&&(ReadOnly||Macros.size()!=0)) { PM.show(e.getComponent(), e.getX(), e.getY()); } } repaintCD(); return; } if (SmartBoardPreview&&Global.getParameter("smartboard", false)) { Control=e.isControlDown(); clearIndicated(); clearPreview(); repaint(); Dragging=false; OC.mousePressed(e, this); SmartBoardPreview=false; mouseReleased(e); return; } if (!Dragging) { OC.mouseReleased(e, this); Dragging=false; repaintCD(); return; } if (Moved<=1) { if (OC instanceof LabelMover) { ((LabelMover) OC).resetPoint(); OC.mouseReleased(e, this); } else if (OC instanceof MetaMover) { OC.mouseReleased(e, this); if (!ReadOnly) { new EditTool().mousePressed(e, this); } } } else { OC.mouseReleased(e, this); } repaintCD(); check(); Dragging=false; } public synchronized void mouseClicked(final MouseEvent e) { } public synchronized void mouseExited(final MouseEvent e) { if (!Interactive) { return; } clearIndicated(); clearPreview(); repaint(); SmartBoardPreview=false; RightClicked=false; repaintCD(); } public void mouseEntered(final MouseEvent e) { } public synchronized void mouseMoved(final MouseEvent e) { if (!Interactive||!Global.getParameter("options.indicate", true)) { return; } if (Global.getParameter("smartboard", false)) { return; } Count.setAllAlternate(true); OC.mouseMoved(e, this, Global.getParameter("options.indicate.simple", false)); Count.setAllAlternate(false); repaintCD(); } DragThread DT=null; public synchronized void mouseDragged(final MouseEvent e) { if (!Interactive) { return; } if (DT==null) { DT=new DragThread(this); } if (SmartBoardPreview&&Global.getParameter("smartboard", false)) { OC.mouseMoved(e, this, Global.getParameter( "options.indicate.simple", false)); } else { DT.mouseDragged(e); Moved++; } repaintCD(); } public synchronized void doMouseDragged(final MouseEvent e) { OC.mouseDragged(e, this); } ConstructionObject LastPaint=null; public void newImage() { I=null; repaint(); } boolean Frozen=false; public void setFrozen(final boolean f) { Frozen=f; } public boolean getFrozen() { return Frozen; } MessageWindow MW; final double PointSizeFactor=240.0; int CC=0; // public void repaint(){ // // System.out.print("a "); // // super.repaint(); // StackTraceElement[] trace = new Throwable().getStackTrace(); // if (!trace[1].equals("javax.swing.JComponent")) super.repaint(); // // // for (int i=0;i0) { final ConstructionObject os[]=new ConstructionObject[n]; e=C.elements(); n=0; while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.HasZ) { os[n++]=o; } } Sorter.sort(os); for (int i=0; i250&&PolygonDrawer.step<50) { PolygonDrawer.step=PolygonDrawer.step*2; } if (time<100&&PolygonDrawer.step>4) { PolygonDrawer.step=PolygonDrawer.step/2; } paintDrawings(IG); // JMacrosTools.CurrentJZF.JCM.paintControls(IG.getGraphics()); } void dopaintFig(final MyGraphicsFig IG) { if (ShowGrid) { paintGrid(IG); } IG.pushLayer(true); int layer=0; while (true) { IG.pushLayer(); int l=0; Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==LastPaint) { break; } if (l==layer&&o.isBack()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l>layer) { break; } } } if (llayer) { break; } } } l=0; e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==LastPaint) { break; } if (l==layer&&!o.isBack()&&o.selected()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l>layer) { break; } } } layer++; } IG.pushLayer(false); if (LastPaint==null) { paintTrack(IG); } } int xg[]=new int[64], yg[]=new int[64]; public void setGrid() { ShowGrid=Global.getParameter("showgrid", false); AxesOnly=Global.getParameter("axesonly", false); ShowDots=Global.getParameter("showdots", false); ShowLines=Global.getParameter("showlines", false); GridThickness=Global.getParameter("grid.thickness", ConstructionObject.THIN); GridColor=Global.getParameter("grid.colorindex", 0); GridBold=Global.getParameter("grid.bold", false); GridLarge=Global.getParameter("grid.large", false); GridLabels=Global.getParameter("grid.labels", true); } /** * Paint axes and grid. * * @param IG */ void paintGrid(final MyGraphics IG) { if (GridThickness==ConstructionObject.NORMAL) { IG.setColor(ZirkelFrame.Colors[Global.getParameter( "grid.colorindex", 0)]); } else { IG.setColor(ZirkelFrame.LightColors[GridColor]); } IG.setFont(GridLarge, GridBold); final double gridsize=getGridSize(); int dd=IH/200; if (dd<1) { dd=1; } double x1=Math.floor((C.getX()-C.getW())/gridsize-1)*gridsize; int xi=0; while (x1<(C.getX()+C.getW())&&xi<64) { final int c=(int) col(x1); xg[xi++]=c; x1+=gridsize; } double y1=Math.floor((C.getY()-C.getW())/gridsize-1)*gridsize; int yi=0; while (y1<(C.getY()+C.getW())&&yi<64) { final int r=(int) row(y1); yg[yi++]=r; y1+=gridsize; } for (int i=0; iC.getX()-C.getW()) { final int c=(int) col(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(c, 0, c, IH); } else { IG.drawThickLine(c, 0, c, IH); } } if (0C.getY()-C.getW()) { final int r=(int) row(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(0, r, IW, r); } else { IG.drawThickLine(0, r, IW, r); } } } dd=dd*2; double labelsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; while (C.getW()*2/labelsize>=10) { labelsize*=10; } if (C.getW()*2/labelsize<5) { labelsize/=2; } final FontMetrics fm=IG.getFontMetrics(); final int FH=fm.getHeight(); x1=Math.floor((C.getX()-C.getW())/labelsize-1)*labelsize; int lh=(int) row(0); int bottomshift=FH+2; if (lh<0||lh>IH) { lh=IH; bottomshift=-7; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); final String s=format(x1); if (s.length()>0) { if (GridLabels) { IG.drawString(s, c-fm.stringWidth(s)/2, lh+bottomshift); } IG.drawLine(c, lh-dd, c, lh+dd); } x1+=labelsize; } boolean left=true; int lw=(int) col(0); if (lw<0||lw>IW-20) { lw=0; left=false; } y1=Math.floor((C.getY()-C.getW())/labelsize-1)*labelsize; while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); final String s=format(y1); if (s.length()>0) { final int leftshift=(left)?-fm.stringWidth(s)-5:8; if (GridLabels) { IG.drawString(s, lw+leftshift, r+FH/2-2); } IG.drawLine(lw-dd, r, lw+dd, r); } y1+=labelsize; } } /** * Paint only the coordinate axes (no grid) * * @param IG */ void paintAxes(final MyGraphics IG) { IG.setAntialiasing(false); if (GridThickness==ConstructionObject.NORMAL) { IG.setColor(ZirkelFrame.Colors[GridColor]); } else { IG.setColor(ZirkelFrame.LightColors[GridColor]); } IG.setFont(GridLarge, GridBold); final double gridsize=getGridSize(); double x1=Math.floor((C.getX()-C.getW())/gridsize-1)*gridsize; final int r0=(int) row(0); int dd=IH/200; if (dd<1) { dd=1; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); IG.drawLine(c, r0-dd, c, r0+dd); x1+=gridsize; } double y1=Math.floor((C.getY()-C.getW())/gridsize-1)*gridsize; final int c0=(int) col(0); while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); IG.drawLine(c0-dd, r, c0+dd, r); y1+=gridsize; } if (GridThickness!=ConstructionObject.INVISIBLE) { if (0C.getX()-C.getW()) { final int c=(int) col(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(c, 0, c, IH); } else { IG.drawThickLine(c, 0, c, IH); } } if (0C.getY()-C.getW()) { final int r=(int) row(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(0, r, IW, r); } else { IG.drawThickLine(0, r, IW, r); } } } dd=dd*2; double labelsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; while (C.getW()*2/labelsize>=10) { labelsize*=10; } if (C.getW()*2/labelsize<5) { labelsize/=2; } final FontMetrics fm=IG.getFontMetrics(); final int FH=fm.getHeight(); x1=Math.floor((C.getX()-C.getW())/labelsize-1)*labelsize; int lh=(int) row(0); int bottomshift=FH+2; if (lh<0||lh>IH) { lh=IH; bottomshift=-7; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); final String s=format(x1); if (s.length()>0) { if (GridLabels) { IG.drawString(s, c-fm.stringWidth(s)/2, lh+bottomshift); } IG.drawLine(c, lh-dd, c, lh+dd); } x1+=labelsize; } boolean left=true; int lw=(int) col(0); if (lw<0||lw>IW-20) { lw=0; left=false; } y1=Math.floor((C.getY()-C.getW())/labelsize-1)*labelsize; while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); final String s=format(y1); if (s.length()>0) { final int leftshift=(left)?-fm.stringWidth(s)-5:8; if (GridLabels) { IG.drawString(s, lw+leftshift, r+FH/2-2); } IG.drawLine(lw-dd, r, lw+dd, r); } y1+=labelsize; } IG.setAntialiasing(true); } public double pointSize() { return PointSize; } public double SelectionPointFactor=Global.getParameter("selectionsize", 1.5); public double selectionSize() { return SelectionPointFactor*PointSize; } public double Scale=1.0; public int scale(final int x) { return (int) (Scale*x); } static char c[]=new char[20]; int nc; public String format(double x) { // double xx=x; nc=0; boolean minus=false; if (x<-1e-12) { minus=true; x=-x; } x+=1e-12; final double h=x-Math.floor(x); if (rekformat(h, 8)) { c[nc++]='.'; } while (x>=1) { final double s=Math.floor(x/10); c[nc++]=(char) ('0'+(int) (x-s*10)); x=s; } if (nc>0&&minus) { c[nc++]='-'; } // revert c: for (int i=0; i "+new String(c,0,nc)); return new String(c, 0, nc); } boolean rekformat(double h, final int k) { h=h*10; final double x=Math.floor(h); if (k==0) { final int i=(int) x; if (i>0) { c[nc++]=(char) ('0'+i); return true; } else { return false; } } else { final int i=(int) x; if (rekformat(h-x, k-1)||i>0) { c[nc++]=(char) ('0'+i); return true; } else { return false; } } } @Override public void update(final Graphics g) { paint(g); } public void paintUntil(final ConstructionObject o) { if (LastPaint==o) { return; } LastPaint=o; repaint(); } // validate all elements @Override public void validate() { dovalidate(); if (OC instanceof TrackPainter) { ((TrackPainter) OC).validate(this); } } /** * Synchronized update of the construction to avoid a repaint during update. */ synchronized public void dovalidate() { C.dovalidate(); } // selection routines: // This vector is used by ALL selection and indication routines for // performance reasons. MyVector V=new MyVector(); public void sort(final MyVector V) { if (V.size()<2) { return; } Sorter.QuickSort(V.getArray(), 0, V.size()-1); } /** * Slow function to resort a vector by the number of each element in the * construction. */ public void sortRow(final MyVector V) { final ConstructionObject o[]=new ConstructionObject[V.size()]; V.copyInto(o); V.removeAllElements(); final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject oo=(ConstructionObject) e.nextElement(); for (final ConstructionObject element : o) { if (element==oo) { V.addElement(oo); break; } } } } /** * select a circle or a line. **/ public ConstructionObject selectCircleLine(final int x, final int y, final boolean multiple) // select a circle or a line { final MyVector v=selectCircleLineObjects(x, y, multiple, false); return select(v); } public ConstructionObject selectCircleLine(final int x, final int y) // select // a // circle // or // a // line { return selectCircleLine(x, y, true); } /** * select a circle or a line. **/ public ConstructionObject selectPointonObject(final int x, final int y, final boolean multiple) // select a circle or a line { final MyVector v=selectPointonObjects(x, y, multiple, false); return select(v); } public ConstructionObject selectPointonObject(final int x, final int y) // select // a // circle // or // a // line { return selectPointonObject(x, y, true); } /** * Select all possible circles or lines at x,y. If a matching non-filled * object is found above a filled object, the latter is never selected. * * @param multiple * determines, if it is possible to select selected objects. * @param testlocal * determines, if objects that look locally like already selected * objects should be omitted. */ public MyVector selectCircleLineObjects(final int x, final int y, final boolean multiple, final boolean testlocal) // select a circle // or a line { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject||o instanceof PrimitiveCircleObject)&&o.nearto(x, y, true, this)&&(multiple||!o.selected())) { if (testlocal) { final Enumeration ev=V.elements(); while (ev.hasMoreElements()) { final ConstructionObject ov=(ConstructionObject) ev.nextElement(); if (o.locallyLike(ov)) { o=null; break; } } } if (o!=null) { V.addElement(o); } } } return V; } public MyVector selectCircleLineObjects(final int x, final int y, final boolean multiple) { return selectCircleLineObjects(x, y, multiple, false); } public MyVector selectCircleLineObjects(final int x, final int y) { return selectCircleLineObjects(x, y, true, false); } /** * Select all possible object at x,y that can carry a point. * * @param multiple * determines, if it is possible to select selected objects. * @param testlocal * determines, if objects that look locally like already selected * objects should be omitted. */ public MyVector selectPointonObjects(final int x, final int y, final boolean multiple, final boolean testlocal) // select a circle // or a line { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PointonObject)&&o.nearto(x, y, true, this)&&(multiple||!o.selected())) { if (testlocal) { final Enumeration ev=V.elements(); while (ev.hasMoreElements()) { final ConstructionObject ov=(ConstructionObject) ev.nextElement(); if (o.locallyLike(ov)) { o=null; break; } } } if (o!=null) { V.addElement(o); } } } return V; } public MyVector selectPointonObjects(final int x, final int y, final boolean multiple) { return selectPointonObjects(x, y, multiple, false); } public MyVector selectPointonObjects(final int x, final int y) { return selectPointonObjects(x, y, true, false); } /** * Select all selectable objects near to x,y. * * @param multiple * allows multiple selections. **/ public MyVector selectObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } return V; } public MyVector selectObjects(final int x, final int y) { return selectObjects(x, y, true); } /** * Select a single object near x,y. **/ public ConstructionObject selectObject(final int x, final int y, final boolean multiple) { final MyVector v=selectObjects(x, y, multiple); return select(v, x, y); } public ConstructionObject selectObject(final int x, final int y) { return selectObject(x, y, true); } /** * select all constructable objects near x,y. **/ public MyVector selectConstructableObjects(final int x, final int y, final boolean multiple) // select an enumeration of objects { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.valid()&&o.isFlag()&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } return V; } public MyVector selectConstructableObjects(final int x, final int y) { return selectConstructableObjects(x, y, true); } /** * select a single constructable object near x,y. **/ public ConstructionObject selectConstructableObject(final int x, final int y) { final MyVector v=selectConstructableObjects(x, y, true); return select(v, x, y); // user determines } /** * Select a single line, segment, ray, perp., paral. or fixed angle near * x,y. **/ public PrimitiveLineObject selectLine(final int x, final int y, final boolean multiple) { selectLineObjects(x, y, multiple); return (PrimitiveLineObject) select(V); } public void selectLineObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PrimitiveLineObject selectLine(final int x, final int y) { return selectLine(x, y, true); } /** * Select a point or a line (for the object tracker). */ public void selectPointsOrLines(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject||o instanceof PointObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } /** * Select a single line, segment, or ray near x,y **/ public TwoPointLineObject selectTwoPointLine(final int x, final int y, final boolean multiple) { selectTwoPointLines(x, y, multiple); return (TwoPointLineObject) select(V); } public void selectTwoPointLines(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof TwoPointLineObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public TwoPointLineObject selectTwoPointLine(final int x, final int y) { return selectTwoPointLine(x, y, true); } /** * Select a single segment near x,y **/ public SegmentObject selectSegment(final int x, final int y, final boolean multiple) { selectSegments(x, y, multiple); return (SegmentObject) select(V); } public void selectSegments(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof SegmentObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public SegmentObject selectSegment(final int x, final int y) { return selectSegment(x, y, true); } public boolean isMultipleAcceptedObject(final ConstructionObject o) { boolean b=o instanceof AreaObject; b=b||o instanceof PrimitiveLineObject; b=b||o instanceof PrimitiveCircleObject; b=b||o instanceof QuadricObject; b=b||o instanceof eric.JLocusTrackObject; return b; } public void selectMultipleFinals(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PointObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.removeAllElements(); return; } if (o.isSelectable()&&(isMultipleAcceptedObject(o))&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } if (V.size()>1) { V.removeAllElements(); } } public ConstructionObject selectMultipleFinal(final int x, final int y, final boolean multiple) { selectMultipleFinals(x, y, multiple); return (ConstructionObject) select(V); } /** * Select a single ray near x,y **/ public RayObject selectRay(final int x, final int y, final boolean multiple) { selectRays(x, y, multiple); return (RayObject) select(V); } public void selectRays(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof RayObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public RayObject selectRay(final int x, final int y) { return selectRay(x, y, true); } /** * Select a circle near x,y. A non-filled object is preferred before a * filled object. **/ public PrimitiveCircleObject selectCircle(final int x, final int y, final boolean multiple) { selectCircles(x, y, multiple); return (PrimitiveCircleObject) select(V); } public void selectCircles(final int x, final int y, final boolean multiple) { Enumeration e=C.elements(); V.removeAllElements(); boolean haveNotFilled=false; while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveCircleObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); if (!o.isFilledForSelect()) { haveNotFilled=true; } } } if (haveNotFilled) { e=V.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isFilledForSelect()) { V.removeElement(o); } } } } public PrimitiveCircleObject selectCircle(final int x, final int y) { return selectCircle(x, y, true); } /** * Select a point near x,y. **/ public PointObject selectPoint(final int x, final int y, final boolean multiple) { selectPointObjects(x, y, multiple); return (PointObject) select(V); } public void selectPointObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PointObject selectPoint(final int x, final int y) { return selectPoint(x, y, true); } public PointObject selectPoint(final int x, final int y, final boolean multiple, final ConstructionObject until) { selectPointObjects(x, y, multiple, until); return (PointObject) select(V); } public void selectPointObjects(final int x, final int y, final boolean multiple, final ConstructionObject until) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==until) { break; } if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PointObject selectPoint(final int x, final int y, final ConstructionObject until) { return selectPoint(x, y, true, until); } boolean NewPoint=false; public boolean isNewPoint() { return NewPoint; } /** * Select a point, and create a new point, if necessary. Even creates an * intersection, or a point bound to an object, if possible. If enabled, the * user is asked for confirmation in these cases. The variable NewPoint is * set to true, if the point was indeed created. * * @param multiple * determines, if multiple selections are possible. * @param any * determines, if the first point should be used. **/ public PointObject selectCreatePoint(final int x, final int y, final boolean multiple, final boolean any) { NewPoint=false; if (Preview) { final PointObject p=new PointObject(C, x(x), y(y)); addObject(p); p.setSuperHidden(true); PreviewObject=p; return p; } // User selects a known point: final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } sort(V); } if (V.size()>0) { if (any) { return (PointObject) (V.elementAt(0)); } final ConstructionObject o=select(V, Control||!Global.getParameter("options.indicate", true)); if (o!=null) { return (PointObject) o; } return null; } // User creates a new point: ConstructionObject oc=tryCreateIntersection(x, y, true); if (oc!=null) { final PointObject o=(PointObject) oc; // o.setDefaults(); // if (o.showName()) renameABC(o,false,false); return o; } if (!IntersectionYes) { return null; } final MyVector w=selectPointonObjects(x, y, true, false); filter(w, x, y, true); if (w.size()>0) { oc=select(w, !Control); if (oc==null) { return null; } if (oc!=null) { boolean yes=true; if (Global.getParameter("options.pointon", false)) { final AgainQuestion q=new AgainQuestion(F, Zirkel.name("question.pointon"), Zirkel.name("question.title")); q.center(F); q.setVisible(true); yes=q.yes(); Global.setParameter("options.pointon", q.again()); } if (yes) { final PointObject o=new PointObject(C, x(x), y(y), oc); // if (ShowGrid&&!Global.getParameter("grid.leftsnap", // false)) { // o.snap(this); // } o.setUseAlpha(true); addObject(o); validate(); o.setDefaults(); // rename Point on object, if showname // if (o.showName()) renameABC(o,false,false); NewPoint=true; return o; } else { return null; } } } final PointObject p=new PointObject(C, x(x), y(y)); if (ShowGrid) { p.snap(this); } addObject(p); p.setDefaults(); // rename Point, if showname // if (p.showName()) renameABC(p,false,false); NewPoint=true; return p; } boolean IntersectionYes=false; public ConstructionObject tryCreateIntersection(final int x, final int y, final boolean ask) { final MyVector w=selectPointonObjects(x, y, true, true); sort(w); IntersectionYes=true; if (w.size()<2) { return null; } final ConstructionObject P1=(ConstructionObject) w.elementAt(0); final ConstructionObject P2=(ConstructionObject) w.elementAt(1); if (!(P1 instanceof PointonObject&&P2 instanceof PointonObject)) { return null; } if (!((PointonObject) P1).canInteresectWith(P2)||!((PointonObject) P2).canInteresectWith(P1)) { return null; } final IntersectionObject o[]=IntersectionConstructor.construct(P1, P2, C); if (o.length==1&&!o[0].valid()) { return null; } if (o.length==2&&!o[0].valid()&&!o[1].valid()) { return null; } if (ask&&Global.getParameter("options.intersection", false)) { final AgainQuestion q=new AgainQuestion(F, Zirkel.name("question.intersection"), Zirkel.name("question.title")); q.center(F); q.setVisible(true); IntersectionYes=q.yes(); Global.setParameter("options.intersection", q.again()); } if (IntersectionYes) { if (o.length==1||!o[1].valid()) { addObject(o[0]); o[0].autoAway(); o[0].validate(x(x), y(y)); validate(); o[0].setDefaults(); o[0].setRestricted(getRestricted()); return o[0]; } if (!o[0].valid()) { addObject(o[1]); o[1].autoAway(); validate(); o[1].setDefaults(); o[1].setRestricted(getRestricted()); return o[1]; } IntersectionObject oc=o[0]; final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d10) { return (ConstructionObject) V.elementAt(0); } else { return null; } } final ConstructionObject o=select(V, x, y); return o; } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel, final ConstructionObject until) { return selectWithSelector(x, y, sel, until, true); } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel, final boolean choice) { return selectWithSelector(x, y, sel, null, choice); } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel) { return selectWithSelector(x, y, sel, null, true); } /** * Select a moveable point at x,y. Don't ask user, take first. **/ public ConstructionObject selectImmediateMoveablePoint(final int x, final int y) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } } if (V.size()==0) { return null; } return (ConstructionObject) V.elementAt(0); } /** * Select a moveable object at x,y. **/ public ConstructionObject selectMoveableObject(final int x, final int y) { final ConstructionObject s=findSelectedObject(); if (s instanceof MoveableObject&&((MoveableObject) s).moveable()&&s.nearto(x, y, this)) { return s; } selectMoveableObjects(x, y); if (V.size()==1) { return (ConstructionObject) V.elementAt(0); } final ConstructionObject o=select(V); if (o!=null) { if (!Global.getParameter("options.choice", true)) { return o; } o.setSelected(true); } return null; } public void selectMoveableObjects(final int x, final int y, final boolean control) { V.removeAllElements(); final ConstructionObject s=findSelectedObject(); if (s instanceof MoveableObject&&((MoveableObject) s).moveable()&&s.nearto(x, y, this)) { V.addElement(s); return; } else if (control&&s instanceof FixedCircleObject&&s.nearto(x, y, this)&&((FixedCircleObject) s).fixedByNumber()) { V.addElement(s); return; } else if (control&&s instanceof FixedAngleObject&&s.nearto(x, y, this)&&((FixedAngleObject) s).fixedByNumber()) { V.addElement(s); return; } final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (!control&&o.isSelectable()&&o instanceof MoveableObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } else if (control&&o instanceof FixedCircleObject&&o.nearto(x, y, this)&&((FixedCircleObject) o).fixedByNumber()) { V.addElement(o); } else if (control&&o instanceof FixedAngleObject&&o.nearto(x, y, this)&&((FixedAngleObject) o).fixedByNumber()) { V.addElement(o); } } filter(V, x, y); } public void selectMoveableObjects(final int x, final int y) { selectMoveableObjects(x, y, false); } /** * Select a moveable object at x,y. Don't ask user, take first. **/ public ConstructionObject selectImmediateMoveableObject(final int x, final int y) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof MoveableObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } } filter(V, x, y); if (V.size()==0) { return null; } return (ConstructionObject) V.elementAt(0); } /** * try to determine the unique objects that are near coordinates x,y and * delete all others from the vector v. **/ public void filter(final MyVector v, final int x, final int y, final boolean choice) { boolean HasPoints=false, HasNotFilled=false; Enumeration e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o instanceof PointObject) { HasPoints=true; } if (!o.isFilledForSelect()) { HasNotFilled=true; } } if (HasPoints) { e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (!o.onlynearto(x, y, this)) { v.removeElement(o); } } } else if (HasNotFilled) { e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isFilledForSelect()) { v.removeElement(o); } } } sort(v); if (!choice) { v.truncate(1); } } public void filter(final MyVector v, final int x, final int y) { filter(v, x, y, Global.getParameter("options.choice", true)||Control); } /** * user must select an object in the selection dialog, unless the selection * is unique anyway, or the filter determines that the selection is unique. **/ public ConstructionObject select(final MyVector v, final int x, final int y, final boolean choice) { if (v.size()==0) { return null; } if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } filter(v, x, y); if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } if (!choice) { return (ConstructionObject) v.elementAt(0); } sortRow(V); RightClicked=false; final eric.JSelectPopupDialog d=new eric.JSelectPopupDialog(F, this, v); final ConstructionObject o=d.getConstructionObject(); d.doclose(); return o; } public ConstructionObject select(final MyVector v, final int x, final int y) { return select(v, x, y, Global.getParameter("options.choice", true)||Control); } /** * user must select an object in the selection dialog, unless the selection * is unique anyway. **/ public ConstructionObject select(final MyVector v, final boolean choice) { if (v.size()==0) { return null; } if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } // if (!choice) return (ConstructionObject)v.elementAt(0); sortRow(V); RightClicked=false; final eric.JSelectPopupDialog d=new eric.JSelectPopupDialog(F, this, v); final ConstructionObject o=d.getConstructionObject(); d.doclose(); return o; } public ConstructionObject select(final MyVector v) { return select(v, Global.getParameter("options.choice", true)||Control); } /** * select the label of a point, i.e. a point, which is set by the user * * @return the first label found **/ public ConstructionObject selectLabel(final int x, final int y) { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o.textcontains(x, y, this)) { return o; } } return null; } public ConstructionObject findSelectedObject() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.selected()) { return o; } } return null; } // Indication functions MyVector Indicated=new MyVector(); PointObject IndicatePoint=null; public void indicate(final MyVector v, final boolean showname) { if (v.size()==1) { if (showname) { setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); } else if (v.elementAt(0) instanceof PointObject) { setCursor(new Cursor(Cursor.HAND_CURSOR)); } } else { setCursor(Cursor.getDefaultCursor()); } if (Indicated.equalsIdentical(v)) { return; } Enumeration e=Indicated.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setIndicated(false); } Indicated.removeAllElements(); e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); Indicated.addElement(o); o.setIndicated(true, showname); } repaint(); } public void indicate(final MyVector v) { indicate(v, false); } public void clearIndicated() { IndicatePoint=null; if (Indicated.size()==0) { return; } final Enumeration e=Indicated.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setIndicated(false); } Indicated.removeAllElements(); setCursor(Cursor.getDefaultCursor()); repaint(); } boolean Preview=false; ConstructionObject LastNonPreview=null; MoveableObject PreviewObject=null; public void movePreview(final MouseEvent e) { if (PreviewObject!=null) { PreviewObject.move(x(e.getX()), y(e.getY())); validate(); repaint(); } } public void prepareForPreview(final MouseEvent e) { LastNonPreview=C.last(); Preview=true; } public boolean isPreview() { return Preview; } public void clearPreview() { if (!Preview) { return; } C.clearAfter(LastNonPreview); LastNonPreview=null; PreviewObject=null; Preview=false; Count.fixAll(false); } public void setPreviewObject(final MoveableObject o) { PreviewObject=o; } public ConstructionObject indicateTryCreateIntersection(final int x, final int y, final boolean ask) { final MyVector w=selectPointonObjects(x, y, true, true); sort(w); IntersectionYes=true; if (w.size()<2) { return null; } final IntersectionObject o[]=IntersectionConstructor.construct( (ConstructionObject) w.elementAt(0), (ConstructionObject) w.elementAt(1), C); if (o.length==1&&!o[0].valid()) { return null; } if (o.length==2) { if (!o[1].valid()) { if (!o[0].valid()) { return null; } } else { final IntersectionObject h=o[0]; o[0]=o[1]; o[1]=h; } } IntersectionObject oc=o[0]; if (o.length==2&&o[1].valid()) { final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d10) { IndicatePoint=null; filter(V, x, y, false); indicate(V); return; } PointObject oc=(PointObject) indicateTryCreateIntersection(x, y, true); if (oc!=null) { return; } final MyVector w=selectPointonObjects(x, y, true, false); filter(w, x, y, true); if (w.size()>=1) { if (!w.equalsIdentical(Indicated)) { oc=new PointObject(C, x(x), y(y), (ConstructionObject) w.elementAt(0)); if (ShowGrid&&!Global.getParameter("grid.leftsnap", false)) { oc.snap(this); } oc.setUseAlpha(true); oc.validate(); oc.setIndicated(true); oc.setType(PointObject.CIRCLE); oc.setColorType(ConstructionObject.THICK); IndicatePoint=oc; indicate(w); } else if (IndicatePoint!=null) { IndicatePoint.setType(PointObject.CIRCLE); IndicatePoint.setColorType(ConstructionObject.THICK); IndicatePoint.move(x(x), y(y)); IndicatePoint.project((ConstructionObject) w.elementAt(0)); repaint(); } } else { clearIndicated(); } } public void indicateCircleLineObjects(final int x, final int y) { final MyVector w=selectCircleLineObjects(x, y); filter(V, x, y); indicate(w); } public void indicatePointonObjects(final int x, final int y) { final MyVector w=selectPointonObjects(x, y); filter(V, x, y); indicate(w); } public void indicateIntersectedObjects(final int x, final int y) { final MyVector w=selectPointonObjects(x, y); if (!w.equalsIdentical(Indicated)&&w.size()>=2) { final IntersectionObject o[]=IntersectionConstructor.construct( (ConstructionObject) w.elementAt(0), (ConstructionObject) w.elementAt(1), C); IntersectionObject oc=o[0]; if (o.length==2) { final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d1=Macros.size()) { appendMacro(m); } } catch (final ConstructionException ex) { Count.setAllAlternate(false); throw ex; } Count.setAllAlternate(false); } } else if (tag.name().equals("Construction")) { if (construction) { boolean job=false; if (tag.hasParam("job")) { job=true; Last=tag.getValue("last"); if (Last==null) { throw new ConstructionException(Zirkel.name("exception.job")); } final String Target=tag.getValue("target"); if (Target==null) { Targets=new Vector(); int i=1; while (true) { final String s=tag.getValue("target"+i); i++; if (s==null) { break; } Targets.addElement(s); } } else { Targets=new Vector(); Targets.addElement(Target); } if (Targets.size()==0) { throw new ConstructionException(Zirkel.name("exception.job")); } } C.load(tree, this); if (job) { if (C.find(Last)==null) { throw new ConstructionException(Zirkel.name("exception.job")); } final Enumeration et=Targets.elements(); while (et.hasMoreElements()) { final String s=(String) et.nextElement(); if (C.find(s)==null&&(!s.startsWith("~")||C.find(s.substring(1))==null)) { throw new ConstructionException(Zirkel.name("exception.job")); } } Job=true; } break; } } else { throw new ConstructionException("Construction not found"); } } recompute(); C.translateOffsets(this); resetSum(); validate(); repaint(); } catch (final Exception e) { throw e; } reloadCD(); repaint(); // Give the magnet object list to the point // see PointConstructor.construct : Enumeration e=C.magnet.elements(); while (e.hasMoreElements()) { final PointObject p=(PointObject) e.nextElement(); p.setMagnetObjects((String) e.nextElement()); } // System.out.println("finished reading file"); } public void resetSum() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o instanceof ExpressionObject) { ((ExpressionObject) o).reset(); } } } public void warning(final String s, final String help) { final Warning w=new Warning(F, s, Zirkel.name("warning"), true, help); w.center(F); w.setVisible(true); } public void warning(final String s) { warning(s, ""); } public void load(final InputStream in) throws Exception { try { C.Loading=true; load(in, true, true); C.Loading=false; } catch (final Exception e) { C.Loading=false; throw e; } } public String getComment() { return C.getComment(); } public void setComment(final String s) { C.setComment(s); } public String getJobComment() { return C.getJobComment(); } public void setJobComment(final String s) { C.setJobComment(s); } /** * This can be used to set a frame window for the error dialogs that the * canvas my display. */ public void setFrame(final Frame f) { F=f; } public Frame getFrame() { return F; } /** * Maginify the view by the specified factor. */ public void magnify(final double f) { ZoomerTool.initNonDraggableObjects(C); C.setXYW(C.getX(), C.getY(), C.getW()*f); ZoomerTool.zoomNonDraggableObjectsBy(C, f); recompute(); validate(); repaint(); } /** * Shift the view with these deltas. */ public void shift(final double dx, final double dy) { ZoomerTool.initNonDraggableObjects(C); C.setXYW(C.getX()+dx*C.getW(), C.getY()+dy*C.getW(), C.getW()); ZoomerTool.shiftNonDraggableObjectsBy(C, dx*C.getW(), dy*C.getW()); recompute(); validate(); repaint(); } /** * Tracker routines: Call the OC (must be a TrackPainter) to paint the * object track. */ public void paintTrack(final MyGraphics g) { if (!(OC instanceof TrackPainter)) { return; } ((TrackPainter) OC).paint(g, this); } /** * Run through the construction to update all object texts. This should be * called, whenever the name of an item was changed. It will recreate only * those texts, which contain the old name. */ public void updateTexts(final ConstructionObject o, final String oldname) { C.updateTexts(o, oldname); } public Construction getConstruction() { return C; } public void setShowGrid(final boolean flag) { ShowGrid=flag; repaint(); } public void toggleShowGrid() { if (ShowGrid&&!AxesOnly) { AxesOnly=true; } else if (ShowGrid) { ShowGrid=false; } else { AxesOnly=false; ShowGrid=true; } Global.setParameter("showgrid", ShowGrid); Global.setParameter("axesonly", AxesOnly); repaint(); } public boolean showGrid() { return ShowGrid; } /** * Sets the job parameters for the current construction (the last item to * display and the target item). */ public void setJob(final ConstructionObject last) { Job=true; Last=last.getName(); Targets=new Vector(); } public void addJobTarget(final ConstructionObject target, final boolean visible) { if (visible) { Targets.addElement("~"+target.getName()); } else { Targets.addElement(target.getName()); } } public void clearTargets() { Targets=new Vector(); } /** * Cancel the job state o fthe current construction. */ public void clearJob() { Job=false; } /** * Test, if the construction is a valid job. */ public boolean isJob() { final Enumeration e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (C.find(s)==null&&(!s.startsWith("~")||C.find(s.substring(1))==null)) { return false; } } return Job&&C.find(Last)!=null&&Targets.size()>0; } public boolean inTargets(final String s) { final Enumeration e=Targets.elements(); while (e.hasMoreElements()) { if (((String) e.nextElement()).equals(s)) { return true; } } return false; } /** * * This will display the construction as a job (if it is a job). The * construction is copied up to the last element. The copies are marked as * keep objects, so that they cannot be changed. The last object is marked * as the target object, so that it displays in a special color. * * The function can also flip back to the original construction * (flag=false). */ public void displayJob(final boolean flag) { clearSelected(); if (!(OC instanceof SaveJob)) { OC.reset(this); } if (flag) // diplay the job { C.setOriginalOrder(true); if (displayJob()||!isJob()) { return; } final Construction Cnew=new Construction(); Cnew.setXYW(C.getX(), C.getY(), C.getW()); Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setJobTarget(true); o.setJobTarget(false); } e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); Cnew.add(o); o.setKeep(true); if (inTargets(o.getName())||inTargets("~"+o.getName())) { o.setJobTarget(true); } if (o.getName().equals(Last)) { break; } } while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (inTargets(o.getName())||inTargets("~"+o.getName())) { Cnew.add(o); o.setKeep(true); o.setJobTarget(true); } } int n=0; e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (!s.startsWith("~")) { n++; } } TargetO=new ConstructionObject[n]; TargetS=new ConstructionObject[n]; n=0; e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (!s.startsWith("~")) { TargetO[n]=Cnew.find(s); TargetS[n]=null; n++; } } COriginal=C; C=Cnew; C.addAddEventListener(this); C.setComment(COriginal.getJobComment()); recompute(); reloadCD(); repaint(); } else // display the orginal construction again { if (!displayJob()) { return; } C.removeAddEventListener(this); C=COriginal; COriginal=null; final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setKeep(false); o.setJobTarget(false); } C.setOriginalOrder(false); recompute(); reloadCD(); repaint(); } } /** * If the job is solved, this function removes all restrictions. */ public void freeJob() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setKeep(false); o.setJobTarget(false); repaint(); } } /** * Test if the canvas displays a job right now. */ public boolean displayJob() { return COriginal!=null; } // The following functions change the default values of some objects. public void setShowColor(final int i) { ShowColor=i; repaint(); } public int getShowColor() { return ShowColor; } public ObjectConstructor getOC() { return OC; } // Macros: Vector Macros=new Vector(); public Vector getMacros() { return Macros; } public boolean haveMacros() { return Macros.size()>0; } public boolean haveNonprotectedMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (!m.M.isProtected()) { return true; } } return false; } /** * Define a macro. There must be parameters (but not necessarily targets). * The function will display the macro dialog. It will create a new macro, * when the dialog was not aborted. The macro is kept in the Macros vector * by name. */ boolean defineMacro() { clearSelected(); // Read the list of Parameters and Targets from the // construction. This list is filled by the SetParameter and // SetTargets constructors. final Vector P=C.getParameters(); if (P.size()==0) // no parameters { warning(Zirkel.name("definemacro.noparams")); return false; } // Display the macro creation dialog to the user. final DefineMacro d=new DefineMacro(F, this); d.center(getFrame()); d.setVisible(true); // Aborted? if (d.isAborted()||d.getName().equals("")) { return false; } // Define a marco with the name, the comment and the paramters. final Macro m=new Macro(this, d.getName(), d.getComment(), d.getParams()); // If there are no targets, determine everything as // constructed by the paramaters, else only the things needed // to get the targets. try { defineMacro(C, m, d.targetsOnly(), d.invisible(), d.getPromptFor(), d.hideduplicates()); } catch (final ConstructionException e) { warning(e.getDescription()); OC.reset(this); return false; } storeMacro(m, false); OC.reset(this); return true; } /** * Copy a macro with fixed parameters from another macro. */ public Macro copyMacro(final Macro m, final String name, final boolean fixed[]) { try { final Macro macro=(Macro) (m.clone()); macro.Name=name; final boolean f[]=new boolean[fixed.length]; for (int i=0; i0&&!c.ShowAll, c.SuperHide, c.getPromptFor(), true); storeMacro(m, true); } /* * Store the macro in the macro list (or replace the old macro with the same * name * * @param all Replace the macro without asking. */ public void storeMacro(final Macro m, final boolean all) { int i=0; for (i=0; i=Macros.size()) { appendMacro(m); } } public boolean ProtectMacros=false; public MacroMenu MM=null; public void appendMacro(final Macro m) { if (!ReadOnly) { if (ProtectMacros) { m.setProtected(true); } if (MM==null) { MM=new MacroMenu(PM, "", null); } final MacroItem mi=MM.add(m, m.getName()); if (mi.I!=null) { mi.I.addActionListener(this); } Macros.addElement(mi); } else { if (MM==null) { MM=new MacroMenu(null, "", null); } final MacroItem mi=MM.add(m, m.getName()); if (mi.I!=null) { mi.I.addActionListener(this); } Macros.addElement(mi); } } /** * Replace the macro item number i with m. * * @return User wants to replace all subsequent macros. */ public boolean replaceMacro(final Macro m, final int i, final boolean all) { final MacroItem e=(MacroItem) Macros.elementAt(i); if (all) // don't ask { Macros.setElementAt(new MacroItem(m, e.I), i); return true; } else // ask { final ReplaceMacroQuestion d=new ReplaceMacroQuestion(getFrame(), m); d.center(getFrame()); d.setVisible(true); if (d.isNo()) { return false; } final MacroItem newitem=new MacroItem(m, e.I); MM.replace((MacroItem) Macros.elementAt(i), newitem); Macros.setElementAt(newitem, i); return d.isAll(); } } public String MacroCurrentComment; /** * The user has to choose from a list of macros (for running). */ public Macro chooseMacro() { if (Macros.size()==0) { warning(Zirkel.name("definemacro.nomacro")); return null; } final MacroSelectDialog d=new MacroSelectDialog(getFrame(), MM, false); d.setVisible(true); return d.getMacro(); } /** * The user can choose from a list of macros (for saving). * * @return A vector of selected Macros. */ public Vector chooseMacros() { if (Macros.size()==0) { warning(Zirkel.name("definemacro.nomacro")); return null; } final MacroSelectDialog d=new MacroSelectDialog(getFrame(), MM, true); d.setVisible(true); return d.getMacros(); } /** * Run a macro by name. */ public Macro chooseMacro(final String name) { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final Macro m=((MacroItem) e.nextElement()).M; if (m.getName().equals(name)) { return m; } } return null; } public void deleteMacros(final Vector v) { final Enumeration e=v.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); deleteMacro(m); } } public void deleteMacro(final MacroItem m) { Macros.removeElement(m); if (m.I!=null) { m.I.removeActionListener(this); MM.remove(m); } } public void clearMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.I!=null) { m.I.removeActionListener(this); MM.remove(m); } } Macros.removeAllElements(); } public void clearNonprotectedMacros() { final Vector V=new Vector(); final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (!m.M.isProtected()) { V.addElement(m); } } deleteMacros(V); } public void clearProtectedMacros() { final Vector V=new Vector(); final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.M.isProtected()) { V.addElement(m); } } deleteMacros(V); } public void protectMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); m.M.setProtected(true); } } public void renameMacro(final Macro macro, final String name) { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.I!=null&&m.M==macro) { deleteMacro(m); break; } } macro.setName(name); appendMacro(macro); } MacroBar MBar; public void setMacroBar(final MacroBar m) { MBar=m; } public void updateMacroBar() { // if (MBar!=null) { // MBar.update(Macros); // } } // For the prompt in the status line: TextField TF; public void setTextField(final TextField t) { TF=t; } public void setPrompt(final String s) { if (TF!=null) { TF.setText(s); } } // Loading: public void loadRun(final InputStream is) { final BufferedReader in=new BufferedReader(new InputStreamReader(is)); String s="", comment=""; while (true) { try { s=in.readLine(); if (s==null) { break; } int n; if ((n=s.indexOf("//"))>=0) { comment=s.substring(n+2).trim(); s=s.substring(0, n); } else { comment=""; } s=s.trim(); int k=0; if ((k=Interpreter.startTest("macro", s))>=0) { loadMacro(in, s.substring(k).trim()); } else if (!s.equals("")) { C.interpret(this, s, comment); } } catch (final ConstructionException e) { warning(e.getDescription()+" --- "+s); break; } catch (final Exception e) { warning(e.toString()+" --- "+s); e.printStackTrace(); break; } } C.updateCircleDep(); } public void loadMacro(final BufferedReader in, final String name) throws ConstructionException { final Construction c=new Construction(); c.clear(); String s="", comment="", macrocomment=""; boolean inComment=true, newLine=true; while (true) { try { s=in.readLine(); if (s==null) { throw new ConstructionException(Zirkel.name("exception.macroend")); } s=s.trim(); final int n=s.indexOf("//"); if (inComment&&n==0) { final String h=s.substring(n+2).trim(); if (newLine) { macrocomment=macrocomment+h; newLine=false; } else { if (h.equals("")) { macrocomment=macrocomment+"\n"; newLine=true; } else { macrocomment=macrocomment+" "+h; newLine=false; } } continue; } inComment=false; if (n>=0) { comment=s.substring(n+2).trim(); s=s.substring(0, n); } else { comment=""; } s=s.trim(); if (s.equals(Zirkel.name("end"))) { break; } if (s.toLowerCase().equals("end")) { break; } if (!s.equals("")) { c.interpret(this, s, comment); } } catch (final InvalidException e) { } catch (final ConstructionException e) { throw new ConstructionException(e.getDescription()+" --- "+s); } catch (final IOException e) { warning(e.toString()); return; } } defineMacro(name, macrocomment, c); } public double getGridSize() { double gridsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; if (C.getW()*2/gridsize>=30) { gridsize*=5; } if (C.getW()*2/gridsize<10) { gridsize/=2; } return gridsize; } public LatexOutput createBB(final String filename, final int w, final int h, final double dpi) { try { String path=""; if (Global.getParameter("options.fullpath", true)) { path=FileName.pathAndSeparator(filename); } PrintWriter out=new PrintWriter(new FileOutputStream(path+FileName.purefilename(filename)+".bb")); out.println("%%BoundingBox: 0 0 "+w+" "+h); out.close(); out=new PrintWriter(new FileOutputStream(path+FileName.purefilename(filename)+".ztx")); final LatexOutput lout=new LatexOutput(out); lout.open(w, h, dpi, path+FileName.filename(filename)); return lout; } catch (final Exception e) { warning(e.toString()); } return null; } /** * Save picture as PNG on file or copy to clipboard * * @param filename * ("" for clipboard) * @return not failed */ synchronized public boolean savePNG(final String filename, final boolean latex) { LatexOutput lout=null; if (IW==0||I==null) { return false; } if (Global.getParameter("printscale.middle", true)) { savePreviewAsPNG(filename); return true; } double dpi=Global.getParameter("printscale.dpi", 300); if (!Global.getParameter("printscale.sizes", false)) { final int w=Global.getParameter("printscale.w", IW); final int h=Global.getParameter("printscale.h", IH); if (latex) { lout=createBB(filename, w, h, dpi); } final int IWold=IW; IW=w; IH=h; Scale=((double) IW)/IWold; I=createImage(IW, IH); IG=new MyGraphics13(I.getGraphics(), Scale, this, lout); IG.setSize(w, h); double pointsize=PointSize*Scale; double fontsize=FontSize*Scale; if (Scale<1) { if (Global.getParameter("options.minpointsize", false)&&pointsize. */ package rene.zirkel; import java.awt.event.MouseEvent; /** * @author Rene A thread for reporting drags to the main program, avoiding to * many drag messages, so that the program seems to hang. */ class DragThread extends Thread { MouseEvent EWaiting = null; ZirkelCanvas ZC; Object Ready = new Object(); boolean Working = false; public DragThread(final ZirkelCanvas zc) { ZC = zc; start(); } @Override public void run() { MouseEvent e; while (true) { if (EWaiting == null) { try { synchronized (this) { wait(); } } catch (final Exception ex) { } } if (EWaiting != null) { synchronized (this) { e = EWaiting; EWaiting = null; } Working = true; ZC.doMouseDragged(e); try { sleep(0); } catch (final Exception ex) { } Working = false; synchronized (Ready) { Ready.notify(); } } } } public synchronized void mouseDragged(final MouseEvent e) { EWaiting = e; notify(); } public void waitReady() { if (!Working) return; synchronized (Ready) { try { Thread.currentThread().wait(1000); } catch (final Exception ex) { } } } } ./src/rene/zirkel/CVS/RevisionCache/ZirkelCanvas.java#1.110000644000175000017500000047167111257334425021777 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel; // file: ZirkelCanvas.java import java.awt.CheckboxMenuItem; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.TextField; import java.awt.datatransfer.Clipboard; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.Enumeration; import java.util.Vector; import java.util.zip.GZIPOutputStream; import rene.dialogs.Warning; import rene.gui.Global; import rene.gui.MyCheckboxMenuItem; import rene.gui.MyMenuItem; import rene.util.FileName; import rene.util.ImageSelection; import rene.util.MyVector; import rene.util.PngEncoder; import rene.util.sort.Sorter; import rene.util.xml.XmlReader; import rene.util.xml.XmlTag; import rene.util.xml.XmlTagPI; import rene.util.xml.XmlTree; import rene.util.xml.XmlWriter; import rene.zirkel.construction.ChangedListener; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionDisplayPanel; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.construction.Interpreter; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.IntersectionConstructor; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.dialogs.AgainQuestion; import rene.zirkel.dialogs.DefineMacro; import rene.zirkel.dialogs.MessageWindow; import rene.zirkel.dialogs.ReplaceMacroQuestion; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.Drawing; import rene.zirkel.graphics.LatexOutput; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.graphics.MyGraphicsEPS; import rene.zirkel.graphics.MyGraphicsFig; import rene.zirkel.graphics.MyGraphicsPDF; import rene.zirkel.graphics.MyGraphicsSvg; import rene.zirkel.graphics.PolygonDrawer; import rene.zirkel.graphics.TrackPainter; import rene.zirkel.listener.AddEventListener; import rene.zirkel.listener.DoneListener; import rene.zirkel.listener.StatusListener; import rene.zirkel.macro.Macro; import rene.zirkel.macro.MacroBar; import rene.zirkel.macro.MacroItem; import rene.zirkel.macro.MacroMenu; import rene.zirkel.macro.MacroRunner; import rene.zirkel.macro.MacroSelectDialog; import rene.zirkel.objects.AngleObject; import rene.zirkel.objects.AreaObject; import rene.zirkel.objects.AxisObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.EquationXYObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.FixedAngleObject; import rene.zirkel.objects.FixedCircleObject; import rene.zirkel.objects.FunctionObject; import rene.zirkel.objects.IntersectionObject; import rene.zirkel.objects.MoveableObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PointonObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.QuadricObject; import rene.zirkel.objects.RayObject; import rene.zirkel.objects.SegmentObject; import rene.zirkel.objects.TwoPointLineObject; import rene.zirkel.objects.UserFunctionObject; import rene.zirkel.structures.CoordinatesXY; import rene.zirkel.tools.AnimatorTool; import rene.zirkel.tools.BinderTool; import rene.zirkel.tools.BreakpointAnimator; import rene.zirkel.tools.EditTool; import rene.zirkel.tools.LabelMover; import rene.zirkel.tools.MagnetTool; import rene.zirkel.tools.MetaMover; import rene.zirkel.tools.MoverTool; import rene.zirkel.tools.ObjectTracker; import rene.zirkel.tools.SaveJob; import rene.zirkel.tools.SetAwayTool; import rene.zirkel.tools.SetCurveCenterTool; import rene.zirkel.tools.SetFixedAngle; import rene.zirkel.tools.SetFixedCircle; import rene.zirkel.tools.SetRangeTool; import rene.zirkel.tools.SetTargetsTool; import rene.zirkel.tools.Tracker; import rene.zirkel.tools.UniversalTracker; import rene.zirkel.tools.ZoomerTool; import atp.sHotEqn; import eric.JGlobals; import eric.JUndo; import eric.applet.dock.dock; import eric.controls.JControlsManager; import rene.zirkel.tools.JSmacroTool; /** * @author Rene Main class, doing most of the work in the C.a.R. application. * This canvas handles mouse and keyboard input, displays the * construction and has tools to save and load constructions. */ public class ZirkelCanvas extends javax.swing.JPanel implements MouseListener, MouseMotionListener, ItemListener, AddEventListener, ActionListener, ChangedListener, MouseWheelListener // the canvas to do the construction { /** * */ private static final long serialVersionUID=1L; ObjectConstructor OC=new MoverTool(); // the current object constructor Construction C=new Construction(), COriginal; // the construction (collection of Constructor-Objects) StatusListener SL=null; // for displaying a status message public Image I=null; MyGraphics IG; public UniversalTracker UniversalTrack=null; Image Background=null; FontMetrics FM; public double PointSize=4.0; // Size of a point double MinPointSize=4.0; // Default minimal point size public double FontSize=12.0; // Size of font double MinFontSize=12.0; // Default minimal font size public int IW=0, IH=0; // Image and its dimensions public double Xmin, DX, Ymin, DY; boolean ShowHidden=false; // show hidden objects Frame F=new Frame(); boolean ReadOnly; boolean AllowRightMouse=true; public PopupMenu PM; CheckboxMenuItem CheckboxHidden; MenuItem Replay, Empty; boolean Job=false; // this is a job (save as such) String Last=""; // Last displayed job object Vector Targets=new Vector(); // Target names ConstructionObject TargetO[], TargetS[]; // Target objects and solutions int ShowColor=0; // 0=all, 1=green etc. (black displays always) static public double // factors for rounding EditFactor=1000000.0, LengthsFactor=100.0, AnglesFactor=1.0; public boolean Visual=Global.getParameter("options.visual", true); boolean All; boolean Interactive=true; public int GridColor=0, GridThickness=ConstructionObject.THIN; public boolean ShowGrid=false, AxesOnly=false, ShowDots=true, ShowLines=true; public boolean GridLabels=true, GridBold=false, GridLarge=false; public JControlsManager JCM; public JUndo JU=new JUndo(); private dock DOCK; /** * Initiate an empty construction. The display may have a popup menu (only * for readonly displays). * * @param readonly * User cannot change the construction. * @param replay * Replay option in popup menu. * @param hidden * Show hidden option in popup menu. */ public ZirkelCanvas(final boolean readonly, final boolean replay, final boolean hidden) { ReadOnly=readonly; AllowRightMouse=!readonly; // setLayout(new BoxLayout(this,BoxLayout.X_AXIS)); setLayout(null); UniversalTrack=new UniversalTracker(this); JCM=new JControlsManager(this); if (Global.getParameter("options.nopopupmenu", false)) { PM=null; } else if (ReadOnly) { PM=new PopupMenu(); CheckboxHidden=new MyCheckboxMenuItem(Zirkel.name("popup.hidden")); CheckboxHidden.addItemListener(this); if (hidden) { PM.add(CheckboxHidden); } Replay=new MyMenuItem(Zirkel.name("popup.replay")); Replay.addActionListener(this); if (replay) { PM.add(Replay); } if (hidden||replay) { add(PM); } else { PM=null; } } else { PM=new PopupMenu(); Empty=new MyMenuItem(Zirkel.name("popup.empty")); add(PM); } C.CL=this; clear(); updateDigits(); C.addAddEventListener(this); addMouseWheelListener(this); // DOCK=new dock(this); // add(DOCK); } public ZirkelCanvas(final boolean readonly) { this(readonly, true, true); } public ZirkelCanvas() { this(false, true, true); } @Override public void paintComponents(final Graphics g) { } public void deleteAxisObjects() { C.deleteAxisObjects(); reloadCD(); repaintCD(); } public void createAxisObjects() { C.createAxisObjects(); } private void setShowHideParameters(final String s, final boolean b) { Global.setParameter("options.point."+s, b); Global.setParameter("options.segment."+s, b); Global.setParameter("options.line."+s, b); Global.setParameter("options.circle."+s, b); Global.setParameter("options.angle."+s, b); Global.setParameter("options.text."+s, b); Global.setParameter("options.locus."+s, b); Global.setParameter("options."+s, b); // setShowNames(true); } public void JSsend(final String s) { if (s.equals("shownames")) { setShowHideParameters("shownames", true); } else if (s.equals("hidenames")) { setShowHideParameters("shownames", false); } else if (s.equals("showvalues")) { setShowHideParameters("showvalues", true); } else if (s.equals("hidevalues")) { setShowHideParameters("showvalues", false); } else { try { C.interpret(this, s); } catch (final Exception ex) { } } } public String JSreceive(final String s) { String r="ERROR..."; try { double rep; final Expression exp=new Expression(s, C, null); rep=exp.getValue(); r=String.valueOf(rep); } catch (final ConstructionException ex) { ex.printStackTrace(); } return r; } public Dimension UseSize=null; @Override public Dimension getMinimumSize() { if (Background==null||!Global.getParameter("background.usesize", false)) { if (UseSize!=null) { return UseSize; } else { return new Dimension(600, 600); } } else { final int iw=Background.getWidth(this); if (iw<10) { return new Dimension(600, 600); } final int ih=Background.getHeight(this); if (Global.getParameter("background.usewidth", false)) { final int w=getSize().width, h=(int) ((double) ih/iw*w+0.5); return new Dimension(w, h); } else { return new Dimension(iw, ih); } } } @Override public Dimension getPreferredSize() { return getMinimumSize(); } public void updateDigits() { EditFactor=Math.pow(10, Global.getParameter("digits.edit", 5)); LengthsFactor=Math.pow(10, Global.getParameter("digits.lengths", 5)); AnglesFactor=Math.pow(10, Global.getParameter("digits.angles", 0)); } public void itemStateChanged(final ItemEvent e) { if (e.getSource()==CheckboxHidden) { ShowHidden=CheckboxHidden.getState(); repaint(); } } ZirkelCanvasInterface ZCI; public void setZirkelCanvasListener(final ZirkelCanvasInterface zci) { ZCI=zci; } public String loadImage() { return ZCI.loadImage(); } public Image doLoadImage(final String filename) { return ZCI.doLoadImage(filename); } public void actionPerformed(final ActionEvent e) { if (!Interactive) { return; } if (e.getSource()==Replay) { if (ZCI!=null) { ZCI.replayChosen(); } } else { final Enumeration en=Macros.elements(); while (en.hasMoreElements()) { final MacroItem m=(MacroItem) en.nextElement(); if (m.I==e.getSource()) { if (ZCI!=null) { ZCI.runMacro(m.M); } break; } } } } // Some transfer functions to compute screen coordinates etc. public double col(final double x) { return (x-Xmin)/DX*IW; } public double row(final double y) { return IH-(y-Ymin)/DY*IH; } public int width() { return IW; } public int height() { return IH; } public double x(final int c) { return Xmin+DX*c/IW; } public double y(final int r) { return Ymin+DY*(IH-r)/IH; } public double dx(final int c) { return DX*c/IW; } public double dy(final int r) { return DY*r/IH; } public double dx(final double c) { return DX*c/IW; } public double dy(final double r) { return DY*r/IH; } public double maxX() { return Xmin+DX; } public double minX() { return Xmin; } public double maxY() { return Ymin+DY; } public double minY() { return Ymin; } public boolean isInside(final double x, final double y) { return x>=Xmin&&x=Ymin&&y0) { C.setPixel(getSize().width/DX); } } DoneListener DL; public void setDoneListener(final DoneListener dl) { DL=dl; } /** * Add an item to the construction and re-paint the construction. */ public void addObject(final ConstructionObject o) // called by the // ObjectConstructor { C.add(o); if (Preview) { o.setIndicated(true); o.setSelectable(false); } C.updateCircleDep(); } /** * A construction added an item. Check, if it solves a problem and notify * the DoneListener, if so. */ public void added(final Construction c, final ConstructionObject o) { if (displayJob()&&TargetO.length>0) { boolean olddone=true; for (int i=0; i0) { boolean olddone=true; for (int i=0; i0) { final ConstructionObject o=select(v, e.getX(), e.getY()); if (o!=null) { new EditTool().mousePressed(e, o, this); check(); return; } else { repaintCD(); } return; } } if (Moved<=2&&PM!=null&&!Global.getParameter("restricted", false)) { int n=2; if (ReadOnly||!Global.getParameter("options.doubleclick", false)) { n=1; } if (e.getClickCount()>=n&&(ReadOnly||Macros.size()!=0)) { PM.show(e.getComponent(), e.getX(), e.getY()); } } repaintCD(); return; } if (SmartBoardPreview&&Global.getParameter("smartboard", false)) { Control=e.isControlDown(); clearIndicated(); clearPreview(); repaint(); Dragging=false; OC.mousePressed(e, this); SmartBoardPreview=false; mouseReleased(e); return; } if (!Dragging) { OC.mouseReleased(e, this); Dragging=false; repaintCD(); return; } if (Moved<=1) { if (OC instanceof LabelMover) { ((LabelMover) OC).resetPoint(); OC.mouseReleased(e, this); } else if (OC instanceof MetaMover) { OC.mouseReleased(e, this); if (!ReadOnly) { new EditTool().mousePressed(e, this); } } } else { OC.mouseReleased(e, this); } repaintCD(); check(); Dragging=false; } public synchronized void mouseClicked(final MouseEvent e) { } public synchronized void mouseExited(final MouseEvent e) { if (!Interactive) { return; } clearIndicated(); clearPreview(); repaint(); SmartBoardPreview=false; RightClicked=false; repaintCD(); } public void mouseEntered(final MouseEvent e) { } public synchronized void mouseMoved(final MouseEvent e) { if (!Interactive||!Global.getParameter("options.indicate", true)) { return; } if (Global.getParameter("smartboard", false)) { return; } Count.setAllAlternate(true); OC.mouseMoved(e, this, Global.getParameter("options.indicate.simple", false)); Count.setAllAlternate(false); repaintCD(); } DragThread DT=null; public synchronized void mouseDragged(final MouseEvent e) { if (!Interactive) { return; } if (DT==null) { DT=new DragThread(this); } if (SmartBoardPreview&&Global.getParameter("smartboard", false)) { OC.mouseMoved(e, this, Global.getParameter( "options.indicate.simple", false)); } else { DT.mouseDragged(e); Moved++; } repaintCD(); } public synchronized void doMouseDragged(final MouseEvent e) { OC.mouseDragged(e, this); } ConstructionObject LastPaint=null; public void newImage() { I=null; repaint(); } boolean Frozen=false; public void setFrozen(final boolean f) { Frozen=f; } public boolean getFrozen() { return Frozen; } MessageWindow MW; final double PointSizeFactor=240.0; int CC=0; // public void repaint(){ // // System.out.print("a "); // // super.repaint(); // StackTraceElement[] trace = new Throwable().getStackTrace(); // if (!trace[1].equals("javax.swing.JComponent")) super.repaint(); // // // for (int i=0;i0) { final ConstructionObject os[]=new ConstructionObject[n]; e=C.elements(); n=0; while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.HasZ) { os[n++]=o; } } Sorter.sort(os); for (int i=0; i250&&PolygonDrawer.step<50) { PolygonDrawer.step=PolygonDrawer.step*2; } if (time<100&&PolygonDrawer.step>4) { PolygonDrawer.step=PolygonDrawer.step/2; } paintDrawings(IG); // JMacrosTools.CurrentJZF.JCM.paintControls(IG.getGraphics()); } void dopaintFig(final MyGraphicsFig IG) { if (ShowGrid) { paintGrid(IG); } IG.pushLayer(true); int layer=0; while (true) { IG.pushLayer(); int l=0; Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==LastPaint) { break; } if (l==layer&&o.isBack()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l>layer) { break; } } } if (llayer) { break; } } } l=0; e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==LastPaint) { break; } if (l==layer&&!o.isBack()&&o.selected()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l>layer) { break; } } } layer++; } IG.pushLayer(false); if (LastPaint==null) { paintTrack(IG); } } int xg[]=new int[64], yg[]=new int[64]; public void setGrid() { ShowGrid=Global.getParameter("showgrid", false); AxesOnly=Global.getParameter("axesonly", false); ShowDots=Global.getParameter("showdots", false); ShowLines=Global.getParameter("showlines", false); GridThickness=Global.getParameter("grid.thickness", ConstructionObject.THIN); GridColor=Global.getParameter("grid.colorindex", 0); GridBold=Global.getParameter("grid.bold", false); GridLarge=Global.getParameter("grid.large", false); GridLabels=Global.getParameter("grid.labels", true); } /** * Paint axes and grid. * * @param IG */ void paintGrid(final MyGraphics IG) { if (GridThickness==ConstructionObject.NORMAL) { IG.setColor(ZirkelFrame.Colors[Global.getParameter( "grid.colorindex", 0)]); } else { IG.setColor(ZirkelFrame.LightColors[GridColor]); } IG.setFont(GridLarge, GridBold); final double gridsize=getGridSize(); int dd=IH/200; if (dd<1) { dd=1; } double x1=Math.floor((C.getX()-C.getW())/gridsize-1)*gridsize; int xi=0; while (x1<(C.getX()+C.getW())&&xi<64) { final int c=(int) col(x1); xg[xi++]=c; x1+=gridsize; } double y1=Math.floor((C.getY()-C.getW())/gridsize-1)*gridsize; int yi=0; while (y1<(C.getY()+C.getW())&&yi<64) { final int r=(int) row(y1); yg[yi++]=r; y1+=gridsize; } for (int i=0; iC.getX()-C.getW()) { final int c=(int) col(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(c, 0, c, IH); } else { IG.drawThickLine(c, 0, c, IH); } } if (0C.getY()-C.getW()) { final int r=(int) row(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(0, r, IW, r); } else { IG.drawThickLine(0, r, IW, r); } } } dd=dd*2; double labelsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; while (C.getW()*2/labelsize>=10) { labelsize*=10; } if (C.getW()*2/labelsize<5) { labelsize/=2; } final FontMetrics fm=IG.getFontMetrics(); final int FH=fm.getHeight(); x1=Math.floor((C.getX()-C.getW())/labelsize-1)*labelsize; int lh=(int) row(0); int bottomshift=FH+2; if (lh<0||lh>IH) { lh=IH; bottomshift=-7; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); final String s=format(x1); if (s.length()>0) { if (GridLabels) { IG.drawString(s, c-fm.stringWidth(s)/2, lh+bottomshift); } IG.drawLine(c, lh-dd, c, lh+dd); } x1+=labelsize; } boolean left=true; int lw=(int) col(0); if (lw<0||lw>IW-20) { lw=0; left=false; } y1=Math.floor((C.getY()-C.getW())/labelsize-1)*labelsize; while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); final String s=format(y1); if (s.length()>0) { final int leftshift=(left)?-fm.stringWidth(s)-5:8; if (GridLabels) { IG.drawString(s, lw+leftshift, r+FH/2-2); } IG.drawLine(lw-dd, r, lw+dd, r); } y1+=labelsize; } } /** * Paint only the coordinate axes (no grid) * * @param IG */ void paintAxes(final MyGraphics IG) { IG.setAntialiasing(false); if (GridThickness==ConstructionObject.NORMAL) { IG.setColor(ZirkelFrame.Colors[GridColor]); } else { IG.setColor(ZirkelFrame.LightColors[GridColor]); } IG.setFont(GridLarge, GridBold); final double gridsize=getGridSize(); double x1=Math.floor((C.getX()-C.getW())/gridsize-1)*gridsize; final int r0=(int) row(0); int dd=IH/200; if (dd<1) { dd=1; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); IG.drawLine(c, r0-dd, c, r0+dd); x1+=gridsize; } double y1=Math.floor((C.getY()-C.getW())/gridsize-1)*gridsize; final int c0=(int) col(0); while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); IG.drawLine(c0-dd, r, c0+dd, r); y1+=gridsize; } if (GridThickness!=ConstructionObject.INVISIBLE) { if (0C.getX()-C.getW()) { final int c=(int) col(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(c, 0, c, IH); } else { IG.drawThickLine(c, 0, c, IH); } } if (0C.getY()-C.getW()) { final int r=(int) row(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(0, r, IW, r); } else { IG.drawThickLine(0, r, IW, r); } } } dd=dd*2; double labelsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; while (C.getW()*2/labelsize>=10) { labelsize*=10; } if (C.getW()*2/labelsize<5) { labelsize/=2; } final FontMetrics fm=IG.getFontMetrics(); final int FH=fm.getHeight(); x1=Math.floor((C.getX()-C.getW())/labelsize-1)*labelsize; int lh=(int) row(0); int bottomshift=FH+2; if (lh<0||lh>IH) { lh=IH; bottomshift=-7; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); final String s=format(x1); if (s.length()>0) { if (GridLabels) { IG.drawString(s, c-fm.stringWidth(s)/2, lh+bottomshift); } IG.drawLine(c, lh-dd, c, lh+dd); } x1+=labelsize; } boolean left=true; int lw=(int) col(0); if (lw<0||lw>IW-20) { lw=0; left=false; } y1=Math.floor((C.getY()-C.getW())/labelsize-1)*labelsize; while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); final String s=format(y1); if (s.length()>0) { final int leftshift=(left)?-fm.stringWidth(s)-5:8; if (GridLabels) { IG.drawString(s, lw+leftshift, r+FH/2-2); } IG.drawLine(lw-dd, r, lw+dd, r); } y1+=labelsize; } IG.setAntialiasing(true); } public double pointSize() { return PointSize; } public double SelectionPointFactor=Global.getParameter("selectionsize", 1.5); public double selectionSize() { return SelectionPointFactor*PointSize; } public double Scale=1.0; public int scale(final int x) { return (int) (Scale*x); } static char c[]=new char[20]; int nc; public String format(double x) { // double xx=x; nc=0; boolean minus=false; if (x<-1e-12) { minus=true; x=-x; } x+=1e-12; final double h=x-Math.floor(x); if (rekformat(h, 8)) { c[nc++]='.'; } while (x>=1) { final double s=Math.floor(x/10); c[nc++]=(char) ('0'+(int) (x-s*10)); x=s; } if (nc>0&&minus) { c[nc++]='-'; } // revert c: for (int i=0; i "+new String(c,0,nc)); return new String(c, 0, nc); } boolean rekformat(double h, final int k) { h=h*10; final double x=Math.floor(h); if (k==0) { final int i=(int) x; if (i>0) { c[nc++]=(char) ('0'+i); return true; } else { return false; } } else { final int i=(int) x; if (rekformat(h-x, k-1)||i>0) { c[nc++]=(char) ('0'+i); return true; } else { return false; } } } @Override public void update(final Graphics g) { paint(g); } public void paintUntil(final ConstructionObject o) { if (LastPaint==o) { return; } LastPaint=o; repaint(); } // validate all elements @Override public void validate() { dovalidate(); if (OC instanceof TrackPainter) { ((TrackPainter) OC).validate(this); } } /** * Synchronized update of the construction to avoid a repaint during update. */ synchronized public void dovalidate() { C.dovalidate(); } // selection routines: // This vector is used by ALL selection and indication routines for // performance reasons. MyVector V=new MyVector(); public void sort(final MyVector V) { if (V.size()<2) { return; } Sorter.QuickSort(V.getArray(), 0, V.size()-1); } /** * Slow function to resort a vector by the number of each element in the * construction. */ public void sortRow(final MyVector V) { final ConstructionObject o[]=new ConstructionObject[V.size()]; V.copyInto(o); V.removeAllElements(); final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject oo=(ConstructionObject) e.nextElement(); for (final ConstructionObject element : o) { if (element==oo) { V.addElement(oo); break; } } } } /** * select a circle or a line. **/ public ConstructionObject selectCircleLine(final int x, final int y, final boolean multiple) // select a circle or a line { final MyVector v=selectCircleLineObjects(x, y, multiple, false); return select(v); } public ConstructionObject selectCircleLine(final int x, final int y) // select // a // circle // or // a // line { return selectCircleLine(x, y, true); } /** * select a circle or a line. **/ public ConstructionObject selectPointonObject(final int x, final int y, final boolean multiple) // select a circle or a line { final MyVector v=selectPointonObjects(x, y, multiple, false); return select(v); } public ConstructionObject selectPointonObject(final int x, final int y) // select // a // circle // or // a // line { return selectPointonObject(x, y, true); } /** * Select all possible circles or lines at x,y. If a matching non-filled * object is found above a filled object, the latter is never selected. * * @param multiple * determines, if it is possible to select selected objects. * @param testlocal * determines, if objects that look locally like already selected * objects should be omitted. */ public MyVector selectCircleLineObjects(final int x, final int y, final boolean multiple, final boolean testlocal) // select a circle // or a line { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject||o instanceof PrimitiveCircleObject)&&o.nearto(x, y, true, this)&&(multiple||!o.selected())) { if (testlocal) { final Enumeration ev=V.elements(); while (ev.hasMoreElements()) { final ConstructionObject ov=(ConstructionObject) ev.nextElement(); if (o.locallyLike(ov)) { o=null; break; } } } if (o!=null) { V.addElement(o); } } } return V; } public MyVector selectCircleLineObjects(final int x, final int y, final boolean multiple) { return selectCircleLineObjects(x, y, multiple, false); } public MyVector selectCircleLineObjects(final int x, final int y) { return selectCircleLineObjects(x, y, true, false); } /** * Select all possible object at x,y that can carry a point. * * @param multiple * determines, if it is possible to select selected objects. * @param testlocal * determines, if objects that look locally like already selected * objects should be omitted. */ public MyVector selectPointonObjects(final int x, final int y, final boolean multiple, final boolean testlocal) // select a circle // or a line { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PointonObject)&&o.nearto(x, y, true, this)&&(multiple||!o.selected())) { if (testlocal) { final Enumeration ev=V.elements(); while (ev.hasMoreElements()) { final ConstructionObject ov=(ConstructionObject) ev.nextElement(); if (o.locallyLike(ov)) { o=null; break; } } } if (o!=null) { V.addElement(o); } } } return V; } public MyVector selectPointonObjects(final int x, final int y, final boolean multiple) { return selectPointonObjects(x, y, multiple, false); } public MyVector selectPointonObjects(final int x, final int y) { return selectPointonObjects(x, y, true, false); } /** * Select all selectable objects near to x,y. * * @param multiple * allows multiple selections. **/ public MyVector selectObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } return V; } public MyVector selectObjects(final int x, final int y) { return selectObjects(x, y, true); } /** * Select a single object near x,y. **/ public ConstructionObject selectObject(final int x, final int y, final boolean multiple) { final MyVector v=selectObjects(x, y, multiple); return select(v, x, y); } public ConstructionObject selectObject(final int x, final int y) { return selectObject(x, y, true); } /** * select all constructable objects near x,y. **/ public MyVector selectConstructableObjects(final int x, final int y, final boolean multiple) // select an enumeration of objects { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.valid()&&o.isFlag()&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } return V; } public MyVector selectConstructableObjects(final int x, final int y) { return selectConstructableObjects(x, y, true); } /** * select a single constructable object near x,y. **/ public ConstructionObject selectConstructableObject(final int x, final int y) { final MyVector v=selectConstructableObjects(x, y, true); return select(v, x, y); // user determines } /** * Select a single line, segment, ray, perp., paral. or fixed angle near * x,y. **/ public PrimitiveLineObject selectLine(final int x, final int y, final boolean multiple) { selectLineObjects(x, y, multiple); return (PrimitiveLineObject) select(V); } public void selectLineObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PrimitiveLineObject selectLine(final int x, final int y) { return selectLine(x, y, true); } /** * Select a point or a line (for the object tracker). */ public void selectPointsOrLines(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject||o instanceof PointObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } /** * Select a single line, segment, or ray near x,y **/ public TwoPointLineObject selectTwoPointLine(final int x, final int y, final boolean multiple) { selectTwoPointLines(x, y, multiple); return (TwoPointLineObject) select(V); } public void selectTwoPointLines(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof TwoPointLineObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public TwoPointLineObject selectTwoPointLine(final int x, final int y) { return selectTwoPointLine(x, y, true); } /** * Select a single segment near x,y **/ public SegmentObject selectSegment(final int x, final int y, final boolean multiple) { selectSegments(x, y, multiple); return (SegmentObject) select(V); } public void selectSegments(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof SegmentObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public SegmentObject selectSegment(final int x, final int y) { return selectSegment(x, y, true); } public boolean isMultipleAcceptedObject(final ConstructionObject o) { boolean b=o instanceof AreaObject; b=b||o instanceof PrimitiveLineObject; b=b||o instanceof PrimitiveCircleObject; b=b||o instanceof QuadricObject; b=b||o instanceof eric.JLocusTrackObject; return b; } public void selectMultipleFinals(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PointObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.removeAllElements(); return; } if (o.isSelectable()&&(isMultipleAcceptedObject(o))&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } if (V.size()>1) { V.removeAllElements(); } } public ConstructionObject selectMultipleFinal(final int x, final int y, final boolean multiple) { selectMultipleFinals(x, y, multiple); return (ConstructionObject) select(V); } /** * Select a single ray near x,y **/ public RayObject selectRay(final int x, final int y, final boolean multiple) { selectRays(x, y, multiple); return (RayObject) select(V); } public void selectRays(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof RayObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public RayObject selectRay(final int x, final int y) { return selectRay(x, y, true); } /** * Select a circle near x,y. A non-filled object is preferred before a * filled object. **/ public PrimitiveCircleObject selectCircle(final int x, final int y, final boolean multiple) { selectCircles(x, y, multiple); return (PrimitiveCircleObject) select(V); } public void selectCircles(final int x, final int y, final boolean multiple) { Enumeration e=C.elements(); V.removeAllElements(); boolean haveNotFilled=false; while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveCircleObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); if (!o.isFilledForSelect()) { haveNotFilled=true; } } } if (haveNotFilled) { e=V.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isFilledForSelect()) { V.removeElement(o); } } } } public PrimitiveCircleObject selectCircle(final int x, final int y) { return selectCircle(x, y, true); } /** * Select a point near x,y. **/ public PointObject selectPoint(final int x, final int y, final boolean multiple) { selectPointObjects(x, y, multiple); return (PointObject) select(V); } public void selectPointObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PointObject selectPoint(final int x, final int y) { return selectPoint(x, y, true); } public PointObject selectPoint(final int x, final int y, final boolean multiple, final ConstructionObject until) { selectPointObjects(x, y, multiple, until); return (PointObject) select(V); } public void selectPointObjects(final int x, final int y, final boolean multiple, final ConstructionObject until) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==until) { break; } if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PointObject selectPoint(final int x, final int y, final ConstructionObject until) { return selectPoint(x, y, true, until); } boolean NewPoint=false; public boolean isNewPoint() { return NewPoint; } /** * Select a point, and create a new point, if necessary. Even creates an * intersection, or a point bound to an object, if possible. If enabled, the * user is asked for confirmation in these cases. The variable NewPoint is * set to true, if the point was indeed created. * * @param multiple * determines, if multiple selections are possible. * @param any * determines, if the first point should be used. **/ public PointObject selectCreatePoint(final int x, final int y, final boolean multiple, final boolean any) { NewPoint=false; if (Preview) { final PointObject p=new PointObject(C, x(x), y(y)); addObject(p); p.setSuperHidden(true); PreviewObject=p; return p; } // User selects a known point: final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } sort(V); } if (V.size()>0) { if (any) { return (PointObject) (V.elementAt(0)); } final ConstructionObject o=select(V, Control||!Global.getParameter("options.indicate", true)); if (o!=null) { return (PointObject) o; } return null; } // User creates a new point: ConstructionObject oc=tryCreateIntersection(x, y, true); if (oc!=null) { final PointObject o=(PointObject) oc; // o.setDefaults(); // if (o.showName()) renameABC(o,false,false); return o; } if (!IntersectionYes) { return null; } final MyVector w=selectPointonObjects(x, y, true, false); filter(w, x, y, true); if (w.size()>0) { oc=select(w, !Control); if (oc==null) { return null; } if (oc!=null) { boolean yes=true; if (Global.getParameter("options.pointon", false)) { final AgainQuestion q=new AgainQuestion(F, Zirkel.name("question.pointon"), Zirkel.name("question.title")); q.center(F); q.setVisible(true); yes=q.yes(); Global.setParameter("options.pointon", q.again()); } if (yes) { final PointObject o=new PointObject(C, x(x), y(y), oc); // if (ShowGrid&&!Global.getParameter("grid.leftsnap", // false)) { // o.snap(this); // } o.setUseAlpha(true); addObject(o); validate(); o.setDefaults(); // rename Point on object, if showname // if (o.showName()) renameABC(o,false,false); NewPoint=true; return o; } else { return null; } } } final PointObject p=new PointObject(C, x(x), y(y)); if (ShowGrid) { p.snap(this); } addObject(p); p.setDefaults(); // rename Point, if showname // if (p.showName()) renameABC(p,false,false); NewPoint=true; return p; } boolean IntersectionYes=false; public ConstructionObject tryCreateIntersection(final int x, final int y, final boolean ask) { final MyVector w=selectPointonObjects(x, y, true, true); sort(w); IntersectionYes=true; if (w.size()<2) { return null; } final ConstructionObject P1=(ConstructionObject) w.elementAt(0); final ConstructionObject P2=(ConstructionObject) w.elementAt(1); if (!(P1 instanceof PointonObject&&P2 instanceof PointonObject)) { return null; } if (!((PointonObject) P1).canInteresectWith(P2)||!((PointonObject) P2).canInteresectWith(P1)) { return null; } final IntersectionObject o[]=IntersectionConstructor.construct(P1, P2, C); if (o.length==1&&!o[0].valid()) { return null; } if (o.length==2&&!o[0].valid()&&!o[1].valid()) { return null; } if (ask&&Global.getParameter("options.intersection", false)) { final AgainQuestion q=new AgainQuestion(F, Zirkel.name("question.intersection"), Zirkel.name("question.title")); q.center(F); q.setVisible(true); IntersectionYes=q.yes(); Global.setParameter("options.intersection", q.again()); } if (IntersectionYes) { if (o.length==1||!o[1].valid()) { addObject(o[0]); o[0].autoAway(); o[0].validate(x(x), y(y)); validate(); o[0].setDefaults(); o[0].setRestricted(getRestricted()); return o[0]; } if (!o[0].valid()) { addObject(o[1]); o[1].autoAway(); validate(); o[1].setDefaults(); o[1].setRestricted(getRestricted()); return o[1]; } IntersectionObject oc=o[0]; final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d10) { return (ConstructionObject) V.elementAt(0); } else { return null; } } final ConstructionObject o=select(V, x, y); return o; } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel, final ConstructionObject until) { return selectWithSelector(x, y, sel, until, true); } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel, final boolean choice) { return selectWithSelector(x, y, sel, null, choice); } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel) { return selectWithSelector(x, y, sel, null, true); } /** * Select a moveable point at x,y. Don't ask user, take first. **/ public ConstructionObject selectImmediateMoveablePoint(final int x, final int y) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } } if (V.size()==0) { return null; } return (ConstructionObject) V.elementAt(0); } /** * Select a moveable object at x,y. **/ public ConstructionObject selectMoveableObject(final int x, final int y) { final ConstructionObject s=findSelectedObject(); if (s instanceof MoveableObject&&((MoveableObject) s).moveable()&&s.nearto(x, y, this)) { return s; } selectMoveableObjects(x, y); if (V.size()==1) { return (ConstructionObject) V.elementAt(0); } final ConstructionObject o=select(V); if (o!=null) { if (!Global.getParameter("options.choice", true)) { return o; } o.setSelected(true); } return null; } public void selectMoveableObjects(final int x, final int y, final boolean control) { V.removeAllElements(); final ConstructionObject s=findSelectedObject(); if (s instanceof MoveableObject&&((MoveableObject) s).moveable()&&s.nearto(x, y, this)) { V.addElement(s); return; } else if (control&&s instanceof FixedCircleObject&&s.nearto(x, y, this)&&((FixedCircleObject) s).fixedByNumber()) { V.addElement(s); return; } else if (control&&s instanceof FixedAngleObject&&s.nearto(x, y, this)&&((FixedAngleObject) s).fixedByNumber()) { V.addElement(s); return; } final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (!control&&o.isSelectable()&&o instanceof MoveableObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } else if (control&&o instanceof FixedCircleObject&&o.nearto(x, y, this)&&((FixedCircleObject) o).fixedByNumber()) { V.addElement(o); } else if (control&&o instanceof FixedAngleObject&&o.nearto(x, y, this)&&((FixedAngleObject) o).fixedByNumber()) { V.addElement(o); } } filter(V, x, y); } public void selectMoveableObjects(final int x, final int y) { selectMoveableObjects(x, y, false); } /** * Select a moveable object at x,y. Don't ask user, take first. **/ public ConstructionObject selectImmediateMoveableObject(final int x, final int y) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof MoveableObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } } filter(V, x, y); if (V.size()==0) { return null; } return (ConstructionObject) V.elementAt(0); } /** * try to determine the unique objects that are near coordinates x,y and * delete all others from the vector v. **/ public void filter(final MyVector v, final int x, final int y, final boolean choice) { boolean HasPoints=false, HasNotFilled=false; Enumeration e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o instanceof PointObject) { HasPoints=true; } if (!o.isFilledForSelect()) { HasNotFilled=true; } } if (HasPoints) { e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (!o.onlynearto(x, y, this)) { v.removeElement(o); } } } else if (HasNotFilled) { e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isFilledForSelect()) { v.removeElement(o); } } } sort(v); if (!choice) { v.truncate(1); } } public void filter(final MyVector v, final int x, final int y) { filter(v, x, y, Global.getParameter("options.choice", true)||Control); } /** * user must select an object in the selection dialog, unless the selection * is unique anyway, or the filter determines that the selection is unique. **/ public ConstructionObject select(final MyVector v, final int x, final int y, final boolean choice) { if (v.size()==0) { return null; } if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } filter(v, x, y); if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } if (!choice) { return (ConstructionObject) v.elementAt(0); } sortRow(V); RightClicked=false; final eric.JSelectPopupDialog d=new eric.JSelectPopupDialog(F, this, v); final ConstructionObject o=d.getConstructionObject(); d.doclose(); return o; } public ConstructionObject select(final MyVector v, final int x, final int y) { return select(v, x, y, Global.getParameter("options.choice", true)||Control); } /** * user must select an object in the selection dialog, unless the selection * is unique anyway. **/ public ConstructionObject select(final MyVector v, final boolean choice) { if (v.size()==0) { return null; } if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } // if (!choice) return (ConstructionObject)v.elementAt(0); sortRow(V); RightClicked=false; final eric.JSelectPopupDialog d=new eric.JSelectPopupDialog(F, this, v); final ConstructionObject o=d.getConstructionObject(); d.doclose(); return o; } public ConstructionObject select(final MyVector v) { return select(v, Global.getParameter("options.choice", true)||Control); } /** * select the label of a point, i.e. a point, which is set by the user * * @return the first label found **/ public ConstructionObject selectLabel(final int x, final int y) { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o.textcontains(x, y, this)) { return o; } } return null; } public ConstructionObject findSelectedObject() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.selected()) { return o; } } return null; } // Indication functions MyVector Indicated=new MyVector(); PointObject IndicatePoint=null; public void indicate(final MyVector v, final boolean showname) { if (v.size()==1) { if (showname) { setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); } else if (v.elementAt(0) instanceof PointObject) { setCursor(new Cursor(Cursor.HAND_CURSOR)); } } else { setCursor(Cursor.getDefaultCursor()); } if (Indicated.equalsIdentical(v)) { return; } Enumeration e=Indicated.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setIndicated(false); } Indicated.removeAllElements(); e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); Indicated.addElement(o); o.setIndicated(true, showname); } repaint(); } public void indicate(final MyVector v) { indicate(v, false); } public void clearIndicated() { IndicatePoint=null; if (Indicated.size()==0) { return; } final Enumeration e=Indicated.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setIndicated(false); } Indicated.removeAllElements(); setCursor(Cursor.getDefaultCursor()); repaint(); } boolean Preview=false; ConstructionObject LastNonPreview=null; MoveableObject PreviewObject=null; public void movePreview(final MouseEvent e) { if (PreviewObject!=null) { PreviewObject.move(x(e.getX()), y(e.getY())); validate(); repaint(); } } public void prepareForPreview(final MouseEvent e) { LastNonPreview=C.last(); Preview=true; } public boolean isPreview() { return Preview; } public void clearPreview() { if (!Preview) { return; } C.clearAfter(LastNonPreview); LastNonPreview=null; PreviewObject=null; Preview=false; Count.fixAll(false); } public void setPreviewObject(final MoveableObject o) { PreviewObject=o; } public ConstructionObject indicateTryCreateIntersection(final int x, final int y, final boolean ask) { final MyVector w=selectPointonObjects(x, y, true, true); sort(w); IntersectionYes=true; if (w.size()<2) { return null; } final IntersectionObject o[]=IntersectionConstructor.construct( (ConstructionObject) w.elementAt(0), (ConstructionObject) w.elementAt(1), C); if (o.length==1&&!o[0].valid()) { return null; } if (o.length==2) { if (!o[1].valid()) { if (!o[0].valid()) { return null; } } else { final IntersectionObject h=o[0]; o[0]=o[1]; o[1]=h; } } IntersectionObject oc=o[0]; if (o.length==2&&o[1].valid()) { final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d10) { IndicatePoint=null; filter(V, x, y, false); indicate(V); return; } PointObject oc=(PointObject) indicateTryCreateIntersection(x, y, true); if (oc!=null) { return; } final MyVector w=selectPointonObjects(x, y, true, false); filter(w, x, y, true); if (w.size()>=1) { if (!w.equalsIdentical(Indicated)) { oc=new PointObject(C, x(x), y(y), (ConstructionObject) w.elementAt(0)); if (ShowGrid&&!Global.getParameter("grid.leftsnap", false)) { oc.snap(this); } oc.setUseAlpha(true); oc.validate(); oc.setIndicated(true); oc.setType(PointObject.CIRCLE); oc.setColorType(ConstructionObject.THICK); IndicatePoint=oc; indicate(w); } else if (IndicatePoint!=null) { IndicatePoint.setType(PointObject.CIRCLE); IndicatePoint.setColorType(ConstructionObject.THICK); IndicatePoint.move(x(x), y(y)); IndicatePoint.project((ConstructionObject) w.elementAt(0)); repaint(); } } else { clearIndicated(); } } public void indicateCircleLineObjects(final int x, final int y) { final MyVector w=selectCircleLineObjects(x, y); filter(V, x, y); indicate(w); } public void indicatePointonObjects(final int x, final int y) { final MyVector w=selectPointonObjects(x, y); filter(V, x, y); indicate(w); } public void indicateIntersectedObjects(final int x, final int y) { final MyVector w=selectPointonObjects(x, y); if (!w.equalsIdentical(Indicated)&&w.size()>=2) { final IntersectionObject o[]=IntersectionConstructor.construct( (ConstructionObject) w.elementAt(0), (ConstructionObject) w.elementAt(1), C); IntersectionObject oc=o[0]; if (o.length==2) { final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d1=Macros.size()) { appendMacro(m); } } catch (final ConstructionException ex) { Count.setAllAlternate(false); throw ex; } Count.setAllAlternate(false); } } else if (tag.name().equals("Construction")) { if (construction) { boolean job=false; if (tag.hasParam("job")) { job=true; Last=tag.getValue("last"); if (Last==null) { throw new ConstructionException(Zirkel.name("exception.job")); } final String Target=tag.getValue("target"); if (Target==null) { Targets=new Vector(); int i=1; while (true) { final String s=tag.getValue("target"+i); i++; if (s==null) { break; } Targets.addElement(s); } } else { Targets=new Vector(); Targets.addElement(Target); } if (Targets.size()==0) { throw new ConstructionException(Zirkel.name("exception.job")); } } C.load(tree, this); if (job) { if (C.find(Last)==null) { throw new ConstructionException(Zirkel.name("exception.job")); } final Enumeration et=Targets.elements(); while (et.hasMoreElements()) { final String s=(String) et.nextElement(); if (C.find(s)==null&&(!s.startsWith("~")||C.find(s.substring(1))==null)) { throw new ConstructionException(Zirkel.name("exception.job")); } } Job=true; } break; } } else { throw new ConstructionException("Construction not found"); } } recompute(); C.translateOffsets(this); resetSum(); validate(); repaint(); } catch (final Exception e) { throw e; } reloadCD(); repaint(); // Give the magnet object list to the point // see PointConstructor.construct : Enumeration e=C.magnet.elements(); while (e.hasMoreElements()) { final PointObject p=(PointObject) e.nextElement(); p.setMagnetObjects((String) e.nextElement()); } // System.out.println("finished reading file"); } public void resetSum() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o instanceof ExpressionObject) { ((ExpressionObject) o).reset(); } } } public void warning(final String s, final String help) { final Warning w=new Warning(F, s, Zirkel.name("warning"), true, help); w.center(F); w.setVisible(true); } public void warning(final String s) { warning(s, ""); } public void load(final InputStream in) throws Exception { try { C.Loading=true; load(in, true, true); C.Loading=false; } catch (final Exception e) { C.Loading=false; throw e; } } public String getComment() { return C.getComment(); } public void setComment(final String s) { C.setComment(s); } public String getJobComment() { return C.getJobComment(); } public void setJobComment(final String s) { C.setJobComment(s); } /** * This can be used to set a frame window for the error dialogs that the * canvas my display. */ public void setFrame(final Frame f) { F=f; } public Frame getFrame() { return F; } /** * Maginify the view by the specified factor. */ public void magnify(final double f) { ZoomerTool.initNonDraggableObjects(C); C.setXYW(C.getX(), C.getY(), C.getW()*f); ZoomerTool.zoomNonDraggableObjectsBy(C, f); recompute(); validate(); repaint(); } /** * Shift the view with these deltas. */ public void shift(final double dx, final double dy) { ZoomerTool.initNonDraggableObjects(C); C.setXYW(C.getX()+dx*C.getW(), C.getY()+dy*C.getW(), C.getW()); ZoomerTool.shiftNonDraggableObjectsBy(C, dx*C.getW(), dy*C.getW()); recompute(); validate(); repaint(); } /** * Tracker routines: Call the OC (must be a TrackPainter) to paint the * object track. */ public void paintTrack(final MyGraphics g) { if (!(OC instanceof TrackPainter)) { return; } ((TrackPainter) OC).paint(g, this); } /** * Run through the construction to update all object texts. This should be * called, whenever the name of an item was changed. It will recreate only * those texts, which contain the old name. */ public void updateTexts(final ConstructionObject o, final String oldname) { C.updateTexts(o, oldname); } public Construction getConstruction() { return C; } public void setShowGrid(final boolean flag) { ShowGrid=flag; repaint(); } public void toggleShowGrid() { if (ShowGrid&&!AxesOnly) { AxesOnly=true; } else if (ShowGrid) { ShowGrid=false; } else { AxesOnly=false; ShowGrid=true; } Global.setParameter("showgrid", ShowGrid); Global.setParameter("axesonly", AxesOnly); repaint(); } public boolean showGrid() { return ShowGrid; } /** * Sets the job parameters for the current construction (the last item to * display and the target item). */ public void setJob(final ConstructionObject last) { Job=true; Last=last.getName(); Targets=new Vector(); } public void addJobTarget(final ConstructionObject target, final boolean visible) { if (visible) { Targets.addElement("~"+target.getName()); } else { Targets.addElement(target.getName()); } } public void clearTargets() { Targets=new Vector(); } /** * Cancel the job state o fthe current construction. */ public void clearJob() { Job=false; } /** * Test, if the construction is a valid job. */ public boolean isJob() { final Enumeration e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (C.find(s)==null&&(!s.startsWith("~")||C.find(s.substring(1))==null)) { return false; } } return Job&&C.find(Last)!=null&&Targets.size()>0; } public boolean inTargets(final String s) { final Enumeration e=Targets.elements(); while (e.hasMoreElements()) { if (((String) e.nextElement()).equals(s)) { return true; } } return false; } /** * * This will display the construction as a job (if it is a job). The * construction is copied up to the last element. The copies are marked as * keep objects, so that they cannot be changed. The last object is marked * as the target object, so that it displays in a special color. * * The function can also flip back to the original construction * (flag=false). */ public void displayJob(final boolean flag) { clearSelected(); if (!(OC instanceof SaveJob)) { OC.reset(this); } if (flag) // diplay the job { C.setOriginalOrder(true); if (displayJob()||!isJob()) { return; } final Construction Cnew=new Construction(); Cnew.setXYW(C.getX(), C.getY(), C.getW()); Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setJobTarget(true); o.setJobTarget(false); } e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); Cnew.add(o); o.setKeep(true); if (inTargets(o.getName())||inTargets("~"+o.getName())) { o.setJobTarget(true); } if (o.getName().equals(Last)) { break; } } while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (inTargets(o.getName())||inTargets("~"+o.getName())) { Cnew.add(o); o.setKeep(true); o.setJobTarget(true); } } int n=0; e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (!s.startsWith("~")) { n++; } } TargetO=new ConstructionObject[n]; TargetS=new ConstructionObject[n]; n=0; e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (!s.startsWith("~")) { TargetO[n]=Cnew.find(s); TargetS[n]=null; n++; } } COriginal=C; C=Cnew; C.addAddEventListener(this); C.setComment(COriginal.getJobComment()); recompute(); reloadCD(); repaint(); } else // display the orginal construction again { if (!displayJob()) { return; } C.removeAddEventListener(this); C=COriginal; COriginal=null; final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setKeep(false); o.setJobTarget(false); } C.setOriginalOrder(false); recompute(); reloadCD(); repaint(); } } /** * If the job is solved, this function removes all restrictions. */ public void freeJob() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setKeep(false); o.setJobTarget(false); repaint(); } } /** * Test if the canvas displays a job right now. */ public boolean displayJob() { return COriginal!=null; } // The following functions change the default values of some objects. public void setShowColor(final int i) { ShowColor=i; repaint(); } public int getShowColor() { return ShowColor; } public ObjectConstructor getOC() { return OC; } // Macros: Vector Macros=new Vector(); public Vector getMacros() { return Macros; } public boolean haveMacros() { return Macros.size()>0; } public boolean haveNonprotectedMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (!m.M.isProtected()) { return true; } } return false; } /** * Define a macro. There must be parameters (but not necessarily targets). * The function will display the macro dialog. It will create a new macro, * when the dialog was not aborted. The macro is kept in the Macros vector * by name. */ boolean defineMacro() { clearSelected(); // Read the list of Parameters and Targets from the // construction. This list is filled by the SetParameter and // SetTargets constructors. final Vector P=C.getParameters(); if (P.size()==0) // no parameters { warning(Zirkel.name("definemacro.noparams")); return false; } // Display the macro creation dialog to the user. final DefineMacro d=new DefineMacro(F, this); d.center(getFrame()); d.setVisible(true); // Aborted? if (d.isAborted()||d.getName().equals("")) { return false; } // Define a marco with the name, the comment and the paramters. final Macro m=new Macro(this, d.getName(), d.getComment(), d.getParams()); // If there are no targets, determine everything as // constructed by the paramaters, else only the things needed // to get the targets. try { defineMacro(C, m, d.targetsOnly(), d.invisible(), d.getPromptFor(), d.hideduplicates()); } catch (final ConstructionException e) { warning(e.getDescription()); OC.reset(this); return false; } storeMacro(m, false); OC.reset(this); return true; } /** * Copy a macro with fixed parameters from another macro. */ public Macro copyMacro(final Macro m, final String name, final boolean fixed[]) { try { final Macro macro=(Macro) (m.clone()); macro.Name=name; final boolean f[]=new boolean[fixed.length]; for (int i=0; i0&&!c.ShowAll, c.SuperHide, c.getPromptFor(), true); storeMacro(m, true); } /* * Store the macro in the macro list (or replace the old macro with the same * name * * @param all Replace the macro without asking. */ public void storeMacro(final Macro m, final boolean all) { int i=0; for (i=0; i=Macros.size()) { appendMacro(m); } } public boolean ProtectMacros=false; public MacroMenu MM=null; public void appendMacro(final Macro m) { if (!ReadOnly) { if (ProtectMacros) { m.setProtected(true); } if (MM==null) { MM=new MacroMenu(PM, "", null); } final MacroItem mi=MM.add(m, m.getName()); if (mi.I!=null) { mi.I.addActionListener(this); } Macros.addElement(mi); } else { if (MM==null) { MM=new MacroMenu(null, "", null); } final MacroItem mi=MM.add(m, m.getName()); if (mi.I!=null) { mi.I.addActionListener(this); } Macros.addElement(mi); } } /** * Replace the macro item number i with m. * * @return User wants to replace all subsequent macros. */ public boolean replaceMacro(final Macro m, final int i, final boolean all) { final MacroItem e=(MacroItem) Macros.elementAt(i); if (all) // don't ask { Macros.setElementAt(new MacroItem(m, e.I), i); return true; } else // ask { final ReplaceMacroQuestion d=new ReplaceMacroQuestion(getFrame(), m); d.center(getFrame()); d.setVisible(true); if (d.isNo()) { return false; } final MacroItem newitem=new MacroItem(m, e.I); MM.replace((MacroItem) Macros.elementAt(i), newitem); Macros.setElementAt(newitem, i); return d.isAll(); } } public String MacroCurrentComment; /** * The user has to choose from a list of macros (for running). */ public Macro chooseMacro() { if (Macros.size()==0) { warning(Zirkel.name("definemacro.nomacro")); return null; } final MacroSelectDialog d=new MacroSelectDialog(getFrame(), MM, false); d.setVisible(true); return d.getMacro(); } /** * The user can choose from a list of macros (for saving). * * @return A vector of selected Macros. */ public Vector chooseMacros() { if (Macros.size()==0) { warning(Zirkel.name("definemacro.nomacro")); return null; } final MacroSelectDialog d=new MacroSelectDialog(getFrame(), MM, true); d.setVisible(true); return d.getMacros(); } /** * Run a macro by name. */ public Macro chooseMacro(final String name) { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final Macro m=((MacroItem) e.nextElement()).M; if (m.getName().equals(name)) { return m; } } return null; } public void deleteMacros(final Vector v) { final Enumeration e=v.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); deleteMacro(m); } } public void deleteMacro(final MacroItem m) { Macros.removeElement(m); if (m.I!=null) { m.I.removeActionListener(this); MM.remove(m); } } public void clearMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.I!=null) { m.I.removeActionListener(this); MM.remove(m); } } Macros.removeAllElements(); } public void clearNonprotectedMacros() { final Vector V=new Vector(); final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (!m.M.isProtected()) { V.addElement(m); } } deleteMacros(V); } public void clearProtectedMacros() { final Vector V=new Vector(); final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.M.isProtected()) { V.addElement(m); } } deleteMacros(V); } public void protectMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); m.M.setProtected(true); } } public void renameMacro(final Macro macro, final String name) { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.I!=null&&m.M==macro) { deleteMacro(m); break; } } macro.setName(name); appendMacro(macro); } MacroBar MBar; public void setMacroBar(final MacroBar m) { MBar=m; } public void updateMacroBar() { // if (MBar!=null) { // MBar.update(Macros); // } } // For the prompt in the status line: TextField TF; public void setTextField(final TextField t) { TF=t; } public void setPrompt(final String s) { if (TF!=null) { TF.setText(s); } } // Loading: public void loadRun(final InputStream is) { final BufferedReader in=new BufferedReader(new InputStreamReader(is)); String s="", comment=""; while (true) { try { s=in.readLine(); if (s==null) { break; } int n; if ((n=s.indexOf("//"))>=0) { comment=s.substring(n+2).trim(); s=s.substring(0, n); } else { comment=""; } s=s.trim(); int k=0; if ((k=Interpreter.startTest("macro", s))>=0) { loadMacro(in, s.substring(k).trim()); } else if (!s.equals("")) { C.interpret(this, s, comment); } } catch (final ConstructionException e) { warning(e.getDescription()+" --- "+s); break; } catch (final Exception e) { warning(e.toString()+" --- "+s); e.printStackTrace(); break; } } C.updateCircleDep(); } public void loadMacro(final BufferedReader in, final String name) throws ConstructionException { final Construction c=new Construction(); c.clear(); String s="", comment="", macrocomment=""; boolean inComment=true, newLine=true; while (true) { try { s=in.readLine(); if (s==null) { throw new ConstructionException(Zirkel.name("exception.macroend")); } s=s.trim(); final int n=s.indexOf("//"); if (inComment&&n==0) { final String h=s.substring(n+2).trim(); if (newLine) { macrocomment=macrocomment+h; newLine=false; } else { if (h.equals("")) { macrocomment=macrocomment+"\n"; newLine=true; } else { macrocomment=macrocomment+" "+h; newLine=false; } } continue; } inComment=false; if (n>=0) { comment=s.substring(n+2).trim(); s=s.substring(0, n); } else { comment=""; } s=s.trim(); if (s.equals(Zirkel.name("end"))) { break; } if (s.toLowerCase().equals("end")) { break; } if (!s.equals("")) { c.interpret(this, s, comment); } } catch (final InvalidException e) { } catch (final ConstructionException e) { throw new ConstructionException(e.getDescription()+" --- "+s); } catch (final IOException e) { warning(e.toString()); return; } } defineMacro(name, macrocomment, c); } public double getGridSize() { double gridsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; if (C.getW()*2/gridsize>=30) { gridsize*=5; } if (C.getW()*2/gridsize<10) { gridsize/=2; } return gridsize; } public LatexOutput createBB(final String filename, final int w, final int h, final double dpi) { try { String path=""; if (Global.getParameter("options.fullpath", true)) { path=FileName.pathAndSeparator(filename); } PrintWriter out=new PrintWriter(new FileOutputStream(path+FileName.purefilename(filename)+".bb")); out.println("%%BoundingBox: 0 0 "+w+" "+h); out.close(); out=new PrintWriter(new FileOutputStream(path+FileName.purefilename(filename)+".ztx")); final LatexOutput lout=new LatexOutput(out); lout.open(w, h, dpi, path+FileName.filename(filename)); return lout; } catch (final Exception e) { warning(e.toString()); } return null; } /** * Save picture as PNG on file or copy to clipboard * * @param filename * ("" for clipboard) * @return not failed */ synchronized public boolean savePNG(final String filename, final boolean latex) { LatexOutput lout=null; if (IW==0||I==null) { return false; } if (Global.getParameter("printscale.middle", true)) { savePreviewAsPNG(filename); return true; } double dpi=Global.getParameter("printscale.dpi", 300); if (!Global.getParameter("printscale.sizes", false)) { final int w=Global.getParameter("printscale.w", IW); final int h=Global.getParameter("printscale.h", IH); if (latex) { lout=createBB(filename, w, h, dpi); } final int IWold=IW; IW=w; IH=h; Scale=((double) IW)/IWold; I=createImage(IW, IH); IG=new MyGraphics13(I.getGraphics(), Scale, this, lout); IG.setSize(w, h); double pointsize=PointSize*Scale; double fontsize=FontSize*Scale; if (Scale<1) { if (Global.getParameter("options.minpointsize", false)&&pointsize. */ package rene.zirkel; // File: Zirkel.java import java.applet.Applet; import java.awt.BorderLayout; import java.awt.Button; import java.awt.GraphicsEnvironment; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileOutputStream; import java.io.PrintStream; import java.util.Locale; import java.util.Properties; import javax.swing.JFrame; import javax.swing.SwingUtilities; import rene.gui.Global; public class Zirkel extends Applet implements ActionListener { /** * */ private static final long serialVersionUID=1L; public static final long Version=110; public static boolean IsApplet=false; static public Rectangle SCREEN=new Rectangle(); static public int REALHEIGHT=0,REALTOP=0; public static void DetectDesktopSize() { if (System.getProperty("os.name").equals("Linux")) { // Very dirty trick to escape a very dirty bug on linux java : final JFrame myframe=new JFrame(); myframe.setUndecorated(true); myframe.pack(); final int s=JFrame.ICONIFIED; myframe.setExtendedState(s); myframe.setVisible(true); myframe.setExtendedState(JFrame.MAXIMIZED_BOTH); while (myframe.getExtendedState()==s) { } try { SwingUtilities.invokeAndWait(new Runnable() { public void run() { SCREEN.x=myframe.getBounds().x; SCREEN.y=myframe.getBounds().y; SCREEN.width=myframe.getBounds().width; SCREEN.height=myframe.getBounds().height; if (SCREEN.x<0) { SCREEN.x=0; } myframe.dispose(); } }); } catch (Exception ex) { } } else { // this is much better on mac and windows : GraphicsEnvironment GE=GraphicsEnvironment.getLocalGraphicsEnvironment(); SCREEN=GE.getMaximumWindowBounds(); } REALHEIGHT=SCREEN.height; REALTOP=SCREEN.y; } public static String name(final String tag, final String def) { return Global.name(tag, def); } public static String name(final String tag) { return Global.name(tag); } @Override public void init() // zirkel is called as applet { final String s=getParameter("Language"); if (s!=null) { Locale.setDefault(new Locale(s, "")); } Global.initBundle("rene/zirkel/docs/ZirkelProperties"); setLayout(new BorderLayout()); final Button StartButton=new Button("Start"); add("Center", StartButton); StartButton.addActionListener(this); IsApplet=true; if (getParameter("oldicons")!=null) { Global.setParameter("iconpath", "/rene/zirkel/icons/"); Global.setParameter("icontype", "gif"); Global.setParameter("iconsize", 20); } else { Global.setParameter("iconpath", "/rene/zirkel/newicons/"); Global.setParameter("icontype", "png"); if (getParameter("smallicons")!=null) { Global.setParameter("iconsize", 24); } else { Global.setParameter("iconsize", 32); } } } public static void main(final String args[]) // zirkel is calles as // application { DetectDesktopSize(); int i=0; String filename=""; while (i. */ package rene.zirkel; // File: Zirkel.java import java.applet.Applet; import java.awt.BorderLayout; import java.awt.Button; import java.awt.GraphicsEnvironment; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileOutputStream; import java.io.PrintStream; import java.util.Locale; import java.util.Properties; import javax.swing.JFrame; import rene.gui.Global; public class Zirkel extends Applet implements ActionListener { /** * */ private static final long serialVersionUID = 1L; public static final long Version = 110; public static boolean IsApplet = false; static public GraphicsEnvironment GE; static public Rectangle SCREEN; public static void DetectDesktopSize() { GE = GraphicsEnvironment.getLocalGraphicsEnvironment(); if (System.getProperty("os.name").equals("Linux")) { // Very dirty trick to escape a very dirty bug on linux java : final JFrame myframe = new JFrame(); myframe.setUndecorated(true); final int s = myframe.getExtendedState(); myframe.setExtendedState(JFrame.MAXIMIZED_BOTH); myframe.setVisible(true); myframe.setExtendedState(JFrame.MAXIMIZED_BOTH); while (myframe.getExtendedState() == s) { } SCREEN = myframe.getBounds(); myframe.dispose(); if (SCREEN.x < 0) SCREEN.x = 0; } else { // this is much better on mac and windows : SCREEN = GE.getMaximumWindowBounds(); } } public static String name(final String tag, final String def) { return Global.name(tag, def); } public static String name(final String tag) { return Global.name(tag); } @Override public void init() // zirkel is called as applet { final String s = getParameter("Language"); if (s != null) { Locale.setDefault(new Locale(s, "")); } Global.initBundle("rene/zirkel/docs/ZirkelProperties"); setLayout(new BorderLayout()); final Button StartButton = new Button("Start"); add("Center", StartButton); StartButton.addActionListener(this); IsApplet = true; if (getParameter("oldicons") != null) { Global.setParameter("iconpath", "/rene/zirkel/icons/"); Global.setParameter("icontype", "gif"); Global.setParameter("iconsize", 20); } else { Global.setParameter("iconpath", "/rene/zirkel/newicons/"); Global.setParameter("icontype", "png"); if (getParameter("smallicons") != null) { Global.setParameter("iconsize", 24); } else { Global.setParameter("iconsize", 32); } } } public static void main(final String args[]) // zirkel is calles as // application { DetectDesktopSize(); int i = 0; String filename = ""; while (i < args.length) { if (args[i].startsWith("-l") && i < args.length - 1) { Locale.setDefault(new Locale(args[i + 1], "")); i += 2; } else if (args[i].startsWith("-h") && i < args.length - 1) { i += 2; } else if (args[i].startsWith("-s")) { i++; } else if (args[i].startsWith("-r")) { i++; } else if (args[i].startsWith("-d")) { final Properties p = System.getProperties(); try { final PrintStream out = new PrintStream( new FileOutputStream(p.getProperty("user.home") + p.getProperty("file.separator") + "zirkel.log")); System.setErr(out); System.setOut(out); } catch (final Exception e) { System.out.println("Could not open log file!"); } i++; } else { filename = args[i]; eric.JMacrosTools.StartupFiles.add(filename); i++; } } Global.loadProperties(eric.JMacrosTools.getHomeDirectory() + "carmetal_config.txt"); Global.initBundle("rene/zirkel/docs/ZirkelProperties", true); eric.JGlobals.ShowLogoWindow(); eric.JMacrosTools.initProperties(); eric.JMacrosTools.createLocalDirectory(); eric.JGlobalPreferences.initPreferences(); eric.JMacrosTools.FirstRun(); eric.JGlobals.CreatePopertiesBar(); eric.JGlobals.DisposeLogoWindow(); } public void actionPerformed(final ActionEvent e) // the user pressed the // start button of the // applet { final ZirkelFrame F = new ZirkelFrame(true); F.setVisible(true); } } ./src/rene/zirkel/CVS/RevisionCache/ZirkelCanvas.java#1.60000644000175000017500000047024411133157455021715 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel; // file: ZirkelCanvas.java import java.awt.CheckboxMenuItem; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.TextField; import java.awt.datatransfer.Clipboard; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.Enumeration; import java.util.Vector; import java.util.zip.GZIPOutputStream; import rene.dialogs.Warning; import rene.gui.Global; import rene.gui.MyCheckboxMenuItem; import rene.gui.MyMenuItem; import rene.util.FileName; import rene.util.ImageSelection; import rene.util.MyVector; import rene.util.PngEncoder; import rene.util.sort.Sorter; import rene.util.xml.XmlReader; import rene.util.xml.XmlTag; import rene.util.xml.XmlTagPI; import rene.util.xml.XmlTree; import rene.util.xml.XmlWriter; import rene.zirkel.construction.ChangedListener; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionDisplayPanel; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.construction.Interpreter; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.IntersectionConstructor; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.dialogs.AgainQuestion; import rene.zirkel.dialogs.DefineMacro; import rene.zirkel.dialogs.MessageWindow; import rene.zirkel.dialogs.ReplaceMacroQuestion; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.Drawing; import rene.zirkel.graphics.LatexOutput; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.graphics.MyGraphicsEPS; import rene.zirkel.graphics.MyGraphicsFig; import rene.zirkel.graphics.MyGraphicsPDF; import rene.zirkel.graphics.MyGraphicsSvg; import rene.zirkel.graphics.PolygonDrawer; import rene.zirkel.graphics.TrackPainter; import rene.zirkel.listener.AddEventListener; import rene.zirkel.listener.DoneListener; import rene.zirkel.listener.StatusListener; import rene.zirkel.macro.Macro; import rene.zirkel.macro.MacroBar; import rene.zirkel.macro.MacroItem; import rene.zirkel.macro.MacroMenu; import rene.zirkel.macro.MacroRunner; import rene.zirkel.macro.MacroSelectDialog; import rene.zirkel.objects.AngleObject; import rene.zirkel.objects.AreaObject; import rene.zirkel.objects.AxisObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.EquationXYObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.FixedAngleObject; import rene.zirkel.objects.FixedCircleObject; import rene.zirkel.objects.FunctionObject; import rene.zirkel.objects.IntersectionObject; import rene.zirkel.objects.MoveableObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PointonObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.QuadricObject; import rene.zirkel.objects.RayObject; import rene.zirkel.objects.SegmentObject; import rene.zirkel.objects.TwoPointLineObject; import rene.zirkel.objects.UserFunctionObject; import rene.zirkel.structures.CoordinatesXY; import rene.zirkel.tools.AnimatorTool; import rene.zirkel.tools.BinderTool; import rene.zirkel.tools.BreakpointAnimator; import rene.zirkel.tools.EditTool; import rene.zirkel.tools.LabelMover; import rene.zirkel.tools.MagnetTool; import rene.zirkel.tools.MetaMover; import rene.zirkel.tools.MoverTool; import rene.zirkel.tools.ObjectTracker; import rene.zirkel.tools.SaveJob; import rene.zirkel.tools.SetAwayTool; import rene.zirkel.tools.SetCurveCenterTool; import rene.zirkel.tools.SetFixedAngle; import rene.zirkel.tools.SetFixedCircle; import rene.zirkel.tools.SetRangeTool; import rene.zirkel.tools.SetTargetsTool; import rene.zirkel.tools.Tracker; import rene.zirkel.tools.UniversalTracker; import rene.zirkel.tools.ZoomerTool; import atp.sHotEqn; import eric.JGlobals; import eric.JUndo; import eric.controls.JControlsManager; /** * @author Rene Main class, doing most of the work in the C.a.R. application. * This canvas handles mouse and keyboard input, displays the * construction and has tools to save and load constructions. */ public class ZirkelCanvas extends javax.swing.JPanel implements MouseListener, MouseMotionListener, ItemListener, AddEventListener, ActionListener, ChangedListener, MouseWheelListener // the canvas to do the construction { /** * */ private static final long serialVersionUID=1L; ObjectConstructor OC=new MoverTool(); // the current object constructor Construction C=new Construction(), COriginal; // the construction (collection of Constructor-Objects) StatusListener SL=null; // for displaying a status message public Image I=null; MyGraphics IG; public UniversalTracker UniversalTrack=null; Image Background=null; FontMetrics FM; public double PointSize=4.0; // Size of a point double MinPointSize=4.0; // Default minimal point size public double FontSize=12.0; // Size of font double MinFontSize=12.0; // Default minimal font size public int IW=0, IH=0; // Image and its dimensions public double Xmin, DX, Ymin, DY; boolean ShowHidden=false; // show hidden objects Frame F=new Frame(); boolean ReadOnly; boolean AllowRightMouse=true; public PopupMenu PM; CheckboxMenuItem CheckboxHidden; MenuItem Replay, Empty; boolean Job=false; // this is a job (save as such) String Last=""; // Last displayed job object Vector Targets=new Vector(); // Target names ConstructionObject TargetO[], TargetS[]; // Target objects and solutions int ShowColor=0; // 0=all, 1=green etc. (black displays always) static public double // factors for rounding EditFactor=1000000.0, LengthsFactor=100.0, AnglesFactor=1.0; public boolean Visual=Global.getParameter("options.visual", true); boolean All; boolean Interactive=true; public int GridColor=0, GridThickness=ConstructionObject.THIN; public boolean ShowGrid=false, AxesOnly=false, ShowDots=true, ShowLines=true; public boolean GridLabels=true, GridBold=false, GridLarge=false; public JControlsManager JCM; public JUndo JU=new JUndo(); /** * Initiate an empty construction. The display may have a popup menu (only * for readonly displays). * * @param readonly * User cannot change the construction. * @param replay * Replay option in popup menu. * @param hidden * Show hidden option in popup menu. */ public ZirkelCanvas(final boolean readonly, final boolean replay, final boolean hidden) { ReadOnly=readonly; AllowRightMouse=!readonly; // setLayout(new BoxLayout(this,BoxLayout.X_AXIS)); setLayout(null); UniversalTrack=new UniversalTracker(this); JCM=new JControlsManager(this); if (Global.getParameter("options.nopopupmenu", false)) { PM=null; } else if (ReadOnly) { PM=new PopupMenu(); CheckboxHidden=new MyCheckboxMenuItem(Zirkel.name("popup.hidden")); CheckboxHidden.addItemListener(this); if (hidden) { PM.add(CheckboxHidden); } Replay=new MyMenuItem(Zirkel.name("popup.replay")); Replay.addActionListener(this); if (replay) { PM.add(Replay); } if (hidden||replay) { add(PM); } else { PM=null; } } else { PM=new PopupMenu(); Empty=new MyMenuItem(Zirkel.name("popup.empty")); add(PM); } C.CL=this; clear(); updateDigits(); C.addAddEventListener(this); addMouseWheelListener(this); } public ZirkelCanvas(final boolean readonly) { this(readonly, true, true); } public ZirkelCanvas() { this(false, true, true); } @Override public void paintComponents(final Graphics g) { } public void deleteAxisObjects() { C.deleteAxisObjects(); reloadCD(); repaintCD(); } public void createAxisObjects() { C.createAxisObjects(); } private void setShowHideParameters(final String s, final boolean b) { Global.setParameter("options.point."+s, b); Global.setParameter("options.segment."+s, b); Global.setParameter("options.line."+s, b); Global.setParameter("options.circle."+s, b); Global.setParameter("options.angle."+s, b); Global.setParameter("options.text."+s, b); Global.setParameter("options.locus."+s, b); Global.setParameter("options."+s, b); // setShowNames(true); } public void JSsend(final String s) { if (s.equals("shownames")) { setShowHideParameters("shownames", true); } else if (s.equals("hidenames")) { setShowHideParameters("shownames", false); } else if (s.equals("showvalues")) { setShowHideParameters("showvalues", true); } else if (s.equals("hidevalues")) { setShowHideParameters("showvalues", false); } else { try { C.interpret(this, s); } catch (final Exception ex) { } } } public String JSreceive(final String s) { String r="ERROR..."; try { double rep; final Expression exp=new Expression(s, C, null); rep=exp.getValue(); r=String.valueOf(rep); } catch (final ConstructionException ex) { ex.printStackTrace(); } return r; } public Dimension UseSize=null; @Override public Dimension getMinimumSize() { if (Background==null||!Global.getParameter("background.usesize", false)) { if (UseSize!=null) { return UseSize; } else { return new Dimension(600, 600); } } else { final int iw=Background.getWidth(this); if (iw<10) { return new Dimension(600, 600); } final int ih=Background.getHeight(this); if (Global.getParameter("background.usewidth", false)) { final int w=getSize().width, h=(int) ((double) ih/iw*w+0.5); return new Dimension(w, h); } else { return new Dimension(iw, ih); } } } @Override public Dimension getPreferredSize() { return getMinimumSize(); } public void updateDigits() { EditFactor=Math.pow(10, Global.getParameter("digits.edit", 5)); LengthsFactor=Math.pow(10, Global.getParameter("digits.lengths", 5)); AnglesFactor=Math.pow(10, Global.getParameter("digits.angles", 0)); } public void itemStateChanged(final ItemEvent e) { if (e.getSource()==CheckboxHidden) { ShowHidden=CheckboxHidden.getState(); repaint(); } } ZirkelCanvasInterface ZCI; public void setZirkelCanvasListener(final ZirkelCanvasInterface zci) { ZCI=zci; } public String loadImage() { return ZCI.loadImage(); } public Image doLoadImage(final String filename) { return ZCI.doLoadImage(filename); } public void actionPerformed(final ActionEvent e) { if (!Interactive) { return; } if (e.getSource()==Replay) { if (ZCI!=null) { ZCI.replayChosen(); } } else { final Enumeration en=Macros.elements(); while (en.hasMoreElements()) { final MacroItem m=(MacroItem) en.nextElement(); if (m.I==e.getSource()) { if (ZCI!=null) { ZCI.runMacro(m.M); } break; } } } } // Some transfer functions to compute screen coordinates etc. public double col(final double x) { return (x-Xmin)/DX*IW; } public double row(final double y) { return IH-(y-Ymin)/DY*IH; } public int width() { return IW; } public int height() { return IH; } public double x(final int c) { return Xmin+DX*c/IW; } public double y(final int r) { return Ymin+DY*(IH-r)/IH; } public double dx(final int c) { return DX*c/IW; } public double dy(final int r) { return DY*r/IH; } public double dx(final double c) { return DX*c/IW; } public double dy(final double r) { return DY*r/IH; } public double maxX() { return Xmin+DX; } public double minX() { return Xmin; } public double maxY() { return Ymin+DY; } public double minY() { return Ymin; } public boolean isInside(final double x, final double y) { return x>=Xmin&&x=Ymin&&y0) { C.setPixel(getSize().width/DX); } } DoneListener DL; public void setDoneListener(final DoneListener dl) { DL=dl; } /** * Add an item to the construction and re-paint the construction. */ public void addObject(final ConstructionObject o) // called by the // ObjectConstructor { C.add(o); if (Preview) { o.setIndicated(true); o.setSelectable(false); } C.updateCircleDep(); } /** * A construction added an item. Check, if it solves a problem and notify * the DoneListener, if so. */ public void added(final Construction c, final ConstructionObject o) { if (displayJob()&&TargetO.length>0) { boolean olddone=true; for (int i=0; i0) { boolean olddone=true; for (int i=0; i0) { final ConstructionObject o=select(v, e.getX(), e.getY()); if (o!=null) { new EditTool().mousePressed(e, o, this); check(); return; } else { repaintCD(); } return; } } if (Moved<=2&&PM!=null&&!Global.getParameter("restricted", false)) { int n=2; if (ReadOnly||!Global.getParameter("options.doubleclick", false)) { n=1; } if (e.getClickCount()>=n&&(ReadOnly||Macros.size()!=0)) { PM.show(e.getComponent(), e.getX(), e.getY()); } } repaintCD(); return; } if (SmartBoardPreview&&Global.getParameter("smartboard", false)) { Control=e.isControlDown(); clearIndicated(); clearPreview(); repaint(); Dragging=false; OC.mousePressed(e, this); SmartBoardPreview=false; mouseReleased(e); return; } if (!Dragging) { OC.mouseReleased(e, this); Dragging=false; repaintCD(); return; } if (Moved<=1) { if (OC instanceof LabelMover) { ((LabelMover) OC).resetPoint(); OC.mouseReleased(e, this); } else if (OC instanceof MetaMover) { OC.mouseReleased(e, this); if (!ReadOnly) { new EditTool().mousePressed(e, this); } } } else { OC.mouseReleased(e, this); } repaintCD(); check(); Dragging=false; } public synchronized void mouseClicked(final MouseEvent e) { } public synchronized void mouseExited(final MouseEvent e) { if (!Interactive) { return; } clearIndicated(); clearPreview(); repaint(); SmartBoardPreview=false; RightClicked=false; repaintCD(); } public void mouseEntered(final MouseEvent e) { } public synchronized void mouseMoved(final MouseEvent e) { if (!Interactive||!Global.getParameter("options.indicate", true)) { return; } if (Global.getParameter("smartboard", false)) { return; } Count.setAllAlternate(true); OC.mouseMoved(e, this, Global.getParameter("options.indicate.simple", false)); Count.setAllAlternate(false); repaintCD(); } DragThread DT=null; public synchronized void mouseDragged(final MouseEvent e) { if (!Interactive) { return; } if (DT==null) { DT=new DragThread(this); } if (SmartBoardPreview&&Global.getParameter("smartboard", false)) { OC.mouseMoved(e, this, Global.getParameter( "options.indicate.simple", false)); } else { DT.mouseDragged(e); Moved++; } repaintCD(); } public synchronized void doMouseDragged(final MouseEvent e) { OC.mouseDragged(e, this); } ConstructionObject LastPaint=null; public void newImage() { I=null; repaint(); } boolean Frozen=false; public void setFrozen(final boolean f) { Frozen=f; } public boolean getFrozen() { return Frozen; } MessageWindow MW; final double PointSizeFactor=240.0; int CC=0; // public void repaint(){ // // System.out.print("a "); // // super.repaint(); // StackTraceElement[] trace = new Throwable().getStackTrace(); // if (!trace[1].equals("javax.swing.JComponent")) super.repaint(); // // // for (int i=0;i0) { final ConstructionObject os[]=new ConstructionObject[n]; e=C.elements(); n=0; while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.HasZ) { os[n++]=o; } } Sorter.sort(os); for (int i=0; i250&&PolygonDrawer.step<50) { PolygonDrawer.step=PolygonDrawer.step*2; } if (time<100&&PolygonDrawer.step>4) { PolygonDrawer.step=PolygonDrawer.step/2; } paintDrawings(IG); // JMacrosTools.CurrentJZF.JCM.paintControls(IG.getGraphics()); } void dopaintFig(final MyGraphicsFig IG) { if (ShowGrid) { paintGrid(IG); } IG.pushLayer(true); int layer=0; while (true) { IG.pushLayer(); int l=0; Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==LastPaint) { break; } if (l==layer&&o.isBack()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l>layer) { break; } } } if (llayer) { break; } } } l=0; e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==LastPaint) { break; } if (l==layer&&!o.isBack()&&o.selected()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l>layer) { break; } } } layer++; } IG.pushLayer(false); if (LastPaint==null) { paintTrack(IG); } } int xg[]=new int[64], yg[]=new int[64]; public void setGrid() { ShowGrid=Global.getParameter("showgrid", false); AxesOnly=Global.getParameter("axesonly", false); ShowDots=Global.getParameter("showdots", false); ShowLines=Global.getParameter("showlines", false); GridThickness=Global.getParameter("grid.thickness", ConstructionObject.THIN); GridColor=Global.getParameter("grid.colorindex", 0); GridBold=Global.getParameter("grid.bold", false); GridLarge=Global.getParameter("grid.large", false); GridLabels=Global.getParameter("grid.labels", true); } /** * Paint axes and grid. * * @param IG */ void paintGrid(final MyGraphics IG) { if (GridThickness==ConstructionObject.NORMAL) { IG.setColor(ZirkelFrame.Colors[Global.getParameter( "grid.colorindex", 0)]); } else { IG.setColor(ZirkelFrame.LightColors[GridColor]); } IG.setFont(GridLarge, GridBold); final double gridsize=getGridSize(); int dd=IH/200; if (dd<1) { dd=1; } double x1=Math.floor((C.getX()-C.getW())/gridsize-1)*gridsize; int xi=0; while (x1<(C.getX()+C.getW())&&xi<64) { final int c=(int) col(x1); xg[xi++]=c; x1+=gridsize; } double y1=Math.floor((C.getY()-C.getW())/gridsize-1)*gridsize; int yi=0; while (y1<(C.getY()+C.getW())&&yi<64) { final int r=(int) row(y1); yg[yi++]=r; y1+=gridsize; } for (int i=0; iC.getX()-C.getW()) { final int c=(int) col(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(c, 0, c, IH); } else { IG.drawThickLine(c, 0, c, IH); } } if (0C.getY()-C.getW()) { final int r=(int) row(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(0, r, IW, r); } else { IG.drawThickLine(0, r, IW, r); } } } dd=dd*2; double labelsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; while (C.getW()*2/labelsize>=10) { labelsize*=10; } if (C.getW()*2/labelsize<5) { labelsize/=2; } final FontMetrics fm=IG.getFontMetrics(); final int FH=fm.getHeight(); x1=Math.floor((C.getX()-C.getW())/labelsize-1)*labelsize; int lh=(int) row(0); int bottomshift=FH+2; if (lh<0||lh>IH) { lh=IH; bottomshift=-7; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); final String s=format(x1); if (s.length()>0) { if (GridLabels) { IG.drawString(s, c-fm.stringWidth(s)/2, lh+bottomshift); } IG.drawLine(c, lh-dd, c, lh+dd); } x1+=labelsize; } boolean left=true; int lw=(int) col(0); if (lw<0||lw>IW-20) { lw=0; left=false; } y1=Math.floor((C.getY()-C.getW())/labelsize-1)*labelsize; while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); final String s=format(y1); if (s.length()>0) { final int leftshift=(left)?-fm.stringWidth(s)-5:8; if (GridLabels) { IG.drawString(s, lw+leftshift, r+FH/2-2); } IG.drawLine(lw-dd, r, lw+dd, r); } y1+=labelsize; } } /** * Paint only the coordinate axes (no grid) * * @param IG */ void paintAxes(final MyGraphics IG) { IG.setAntialiasing(false); if (GridThickness==ConstructionObject.NORMAL) { IG.setColor(ZirkelFrame.Colors[GridColor]); } else { IG.setColor(ZirkelFrame.LightColors[GridColor]); } IG.setFont(GridLarge, GridBold); final double gridsize=getGridSize(); double x1=Math.floor((C.getX()-C.getW())/gridsize-1)*gridsize; final int r0=(int) row(0); int dd=IH/200; if (dd<1) { dd=1; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); IG.drawLine(c, r0-dd, c, r0+dd); x1+=gridsize; } double y1=Math.floor((C.getY()-C.getW())/gridsize-1)*gridsize; final int c0=(int) col(0); while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); IG.drawLine(c0-dd, r, c0+dd, r); y1+=gridsize; } if (GridThickness!=ConstructionObject.INVISIBLE) { if (0C.getX()-C.getW()) { final int c=(int) col(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(c, 0, c, IH); } else { IG.drawThickLine(c, 0, c, IH); } } if (0C.getY()-C.getW()) { final int r=(int) row(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(0, r, IW, r); } else { IG.drawThickLine(0, r, IW, r); } } } dd=dd*2; double labelsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; while (C.getW()*2/labelsize>=10) { labelsize*=10; } if (C.getW()*2/labelsize<5) { labelsize/=2; } final FontMetrics fm=IG.getFontMetrics(); final int FH=fm.getHeight(); x1=Math.floor((C.getX()-C.getW())/labelsize-1)*labelsize; int lh=(int) row(0); int bottomshift=FH+2; if (lh<0||lh>IH) { lh=IH; bottomshift=-7; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); final String s=format(x1); if (s.length()>0) { if (GridLabels) { IG.drawString(s, c-fm.stringWidth(s)/2, lh+bottomshift); } IG.drawLine(c, lh-dd, c, lh+dd); } x1+=labelsize; } boolean left=true; int lw=(int) col(0); if (lw<0||lw>IW-20) { lw=0; left=false; } y1=Math.floor((C.getY()-C.getW())/labelsize-1)*labelsize; while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); final String s=format(y1); if (s.length()>0) { final int leftshift=(left)?-fm.stringWidth(s)-5:8; if (GridLabels) { IG.drawString(s, lw+leftshift, r+FH/2-2); } IG.drawLine(lw-dd, r, lw+dd, r); } y1+=labelsize; } IG.setAntialiasing(true); } public double pointSize() { return PointSize; } public double SelectionPointFactor=Global.getParameter("selectionsize", 1.5); public double selectionSize() { return SelectionPointFactor*PointSize; } public double Scale=1.0; public int scale(final int x) { return (int) (Scale*x); } static char c[]=new char[20]; int nc; public String format(double x) { // double xx=x; nc=0; boolean minus=false; if (x<-1e-12) { minus=true; x=-x; } x+=1e-12; final double h=x-Math.floor(x); if (rekformat(h, 8)) { c[nc++]='.'; } while (x>=1) { final double s=Math.floor(x/10); c[nc++]=(char) ('0'+(int) (x-s*10)); x=s; } if (nc>0&&minus) { c[nc++]='-'; } // revert c: for (int i=0; i "+new String(c,0,nc)); return new String(c, 0, nc); } boolean rekformat(double h, final int k) { h=h*10; final double x=Math.floor(h); if (k==0) { final int i=(int) x; if (i>0) { c[nc++]=(char) ('0'+i); return true; } else { return false; } } else { final int i=(int) x; if (rekformat(h-x, k-1)||i>0) { c[nc++]=(char) ('0'+i); return true; } else { return false; } } } @Override public void update(final Graphics g) { paint(g); } public void paintUntil(final ConstructionObject o) { if (LastPaint==o) { return; } LastPaint=o; repaint(); } // validate all elements @Override public void validate() { dovalidate(); if (OC instanceof TrackPainter) { ((TrackPainter) OC).validate(this); } } /** * Synchronized update of the construction to avoid a repaint during update. */ synchronized public void dovalidate() { C.dovalidate(); } // selection routines: // This vector is used by ALL selection and indication routines for // performance reasons. MyVector V=new MyVector(); public void sort(final MyVector V) { if (V.size()<2) { return; } Sorter.QuickSort(V.getArray(), 0, V.size()-1); } /** * Slow function to resort a vector by the number of each element in the * construction. */ public void sortRow(final MyVector V) { final ConstructionObject o[]=new ConstructionObject[V.size()]; V.copyInto(o); V.removeAllElements(); final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject oo=(ConstructionObject) e.nextElement(); for (final ConstructionObject element : o) { if (element==oo) { V.addElement(oo); break; } } } } /** * select a circle or a line. **/ public ConstructionObject selectCircleLine(final int x, final int y, final boolean multiple) // select a circle or a line { final MyVector v=selectCircleLineObjects(x, y, multiple, false); return select(v); } public ConstructionObject selectCircleLine(final int x, final int y) // select // a // circle // or // a // line { return selectCircleLine(x, y, true); } /** * select a circle or a line. **/ public ConstructionObject selectPointonObject(final int x, final int y, final boolean multiple) // select a circle or a line { final MyVector v=selectPointonObjects(x, y, multiple, false); return select(v); } public ConstructionObject selectPointonObject(final int x, final int y) // select // a // circle // or // a // line { return selectPointonObject(x, y, true); } /** * Select all possible circles or lines at x,y. If a matching non-filled * object is found above a filled object, the latter is never selected. * * @param multiple * determines, if it is possible to select selected objects. * @param testlocal * determines, if objects that look locally like already selected * objects should be omitted. */ public MyVector selectCircleLineObjects(final int x, final int y, final boolean multiple, final boolean testlocal) // select a circle // or a line { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject||o instanceof PrimitiveCircleObject)&&o.nearto(x, y, true, this)&&(multiple||!o.selected())) { if (testlocal) { final Enumeration ev=V.elements(); while (ev.hasMoreElements()) { final ConstructionObject ov=(ConstructionObject) ev.nextElement(); if (o.locallyLike(ov)) { o=null; break; } } } if (o!=null) { V.addElement(o); } } } return V; } public MyVector selectCircleLineObjects(final int x, final int y, final boolean multiple) { return selectCircleLineObjects(x, y, multiple, false); } public MyVector selectCircleLineObjects(final int x, final int y) { return selectCircleLineObjects(x, y, true, false); } /** * Select all possible object at x,y that can carry a point. * * @param multiple * determines, if it is possible to select selected objects. * @param testlocal * determines, if objects that look locally like already selected * objects should be omitted. */ public MyVector selectPointonObjects(final int x, final int y, final boolean multiple, final boolean testlocal) // select a circle // or a line { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PointonObject)&&o.nearto(x, y, true, this)&&(multiple||!o.selected())) { if (testlocal) { final Enumeration ev=V.elements(); while (ev.hasMoreElements()) { final ConstructionObject ov=(ConstructionObject) ev.nextElement(); if (o.locallyLike(ov)) { o=null; break; } } } if (o!=null) { V.addElement(o); } } } return V; } public MyVector selectPointonObjects(final int x, final int y, final boolean multiple) { return selectPointonObjects(x, y, multiple, false); } public MyVector selectPointonObjects(final int x, final int y) { return selectPointonObjects(x, y, true, false); } /** * Select all selectable objects near to x,y. * * @param multiple * allows multiple selections. **/ public MyVector selectObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } return V; } public MyVector selectObjects(final int x, final int y) { return selectObjects(x, y, true); } /** * Select a single object near x,y. **/ public ConstructionObject selectObject(final int x, final int y, final boolean multiple) { final MyVector v=selectObjects(x, y, multiple); return select(v, x, y); } public ConstructionObject selectObject(final int x, final int y) { return selectObject(x, y, true); } /** * select all constructable objects near x,y. **/ public MyVector selectConstructableObjects(final int x, final int y, final boolean multiple) // select an enumeration of objects { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.valid()&&o.isFlag()&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } return V; } public MyVector selectConstructableObjects(final int x, final int y) { return selectConstructableObjects(x, y, true); } /** * select a single constructable object near x,y. **/ public ConstructionObject selectConstructableObject(final int x, final int y) { final MyVector v=selectConstructableObjects(x, y, true); return select(v, x, y); // user determines } /** * Select a single line, segment, ray, perp., paral. or fixed angle near * x,y. **/ public PrimitiveLineObject selectLine(final int x, final int y, final boolean multiple) { selectLineObjects(x, y, multiple); return (PrimitiveLineObject) select(V); } public void selectLineObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PrimitiveLineObject selectLine(final int x, final int y) { return selectLine(x, y, true); } /** * Select a point or a line (for the object tracker). */ public void selectPointsOrLines(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject||o instanceof PointObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } /** * Select a single line, segment, or ray near x,y **/ public TwoPointLineObject selectTwoPointLine(final int x, final int y, final boolean multiple) { selectTwoPointLines(x, y, multiple); return (TwoPointLineObject) select(V); } public void selectTwoPointLines(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof TwoPointLineObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public TwoPointLineObject selectTwoPointLine(final int x, final int y) { return selectTwoPointLine(x, y, true); } /** * Select a single segment near x,y **/ public SegmentObject selectSegment(final int x, final int y, final boolean multiple) { selectSegments(x, y, multiple); return (SegmentObject) select(V); } public void selectSegments(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof SegmentObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public SegmentObject selectSegment(final int x, final int y) { return selectSegment(x, y, true); } public boolean isMultipleAcceptedObject(final ConstructionObject o) { boolean b=o instanceof AreaObject; b=b||o instanceof PrimitiveLineObject; b=b||o instanceof PrimitiveCircleObject; b=b||o instanceof QuadricObject; b=b||o instanceof eric.JLocusTrackObject; return b; } public void selectMultipleFinals(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PointObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.removeAllElements(); return; } if (o.isSelectable()&&(isMultipleAcceptedObject(o))&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } if (V.size()>1) { V.removeAllElements(); } } public ConstructionObject selectMultipleFinal(final int x, final int y, final boolean multiple) { selectMultipleFinals(x, y, multiple); return (ConstructionObject) select(V); } /** * Select a single ray near x,y **/ public RayObject selectRay(final int x, final int y, final boolean multiple) { selectRays(x, y, multiple); return (RayObject) select(V); } public void selectRays(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof RayObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public RayObject selectRay(final int x, final int y) { return selectRay(x, y, true); } /** * Select a circle near x,y. A non-filled object is preferred before a * filled object. **/ public PrimitiveCircleObject selectCircle(final int x, final int y, final boolean multiple) { selectCircles(x, y, multiple); return (PrimitiveCircleObject) select(V); } public void selectCircles(final int x, final int y, final boolean multiple) { Enumeration e=C.elements(); V.removeAllElements(); boolean haveNotFilled=false; while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveCircleObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); if (!o.isFilledForSelect()) { haveNotFilled=true; } } } if (haveNotFilled) { e=V.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isFilledForSelect()) { V.removeElement(o); } } } } public PrimitiveCircleObject selectCircle(final int x, final int y) { return selectCircle(x, y, true); } /** * Select a point near x,y. **/ public PointObject selectPoint(final int x, final int y, final boolean multiple) { selectPointObjects(x, y, multiple); return (PointObject) select(V); } public void selectPointObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PointObject selectPoint(final int x, final int y) { return selectPoint(x, y, true); } public PointObject selectPoint(final int x, final int y, final boolean multiple, final ConstructionObject until) { selectPointObjects(x, y, multiple, until); return (PointObject) select(V); } public void selectPointObjects(final int x, final int y, final boolean multiple, final ConstructionObject until) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==until) { break; } if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PointObject selectPoint(final int x, final int y, final ConstructionObject until) { return selectPoint(x, y, true, until); } boolean NewPoint=false; public boolean isNewPoint() { return NewPoint; } /** * Select a point, and create a new point, if necessary. Even creates an * intersection, or a point bound to an object, if possible. If enabled, the * user is asked for confirmation in these cases. The variable NewPoint is * set to true, if the point was indeed created. * * @param multiple * determines, if multiple selections are possible. * @param any * determines, if the first point should be used. **/ public PointObject selectCreatePoint(final int x, final int y, final boolean multiple, final boolean any) { NewPoint=false; if (Preview) { final PointObject p=new PointObject(C, x(x), y(y)); addObject(p); p.setSuperHidden(true); PreviewObject=p; return p; } // User selects a known point: final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } sort(V); } if (V.size()>0) { if (any) { return (PointObject) (V.elementAt(0)); } final ConstructionObject o=select(V, Control||!Global.getParameter("options.indicate", true)); if (o!=null) { return (PointObject) o; } return null; } // User creates a new point: ConstructionObject oc=tryCreateIntersection(x, y, true); if (oc!=null) { final PointObject o=(PointObject) oc; // o.setDefaults(); // if (o.showName()) renameABC(o,false,false); return o; } if (!IntersectionYes) { return null; } final MyVector w=selectPointonObjects(x, y, true, false); filter(w, x, y, true); if (w.size()>0) { oc=select(w, !Control); if (oc==null) { return null; } if (oc!=null) { boolean yes=true; if (Global.getParameter("options.pointon", false)) { final AgainQuestion q=new AgainQuestion(F, Zirkel.name("question.pointon"), Zirkel.name("question.title")); q.center(F); q.setVisible(true); yes=q.yes(); Global.setParameter("options.pointon", q.again()); } if (yes) { final PointObject o=new PointObject(C, x(x), y(y), oc); // if (ShowGrid&&!Global.getParameter("grid.leftsnap", // false)) { // o.snap(this); // } o.setUseAlpha(true); addObject(o); validate(); o.setDefaults(); // rename Point on object, if showname // if (o.showName()) renameABC(o,false,false); NewPoint=true; return o; } else { return null; } } } final PointObject p=new PointObject(C, x(x), y(y)); if (ShowGrid) { p.snap(this); } addObject(p); p.setDefaults(); // rename Point, if showname // if (p.showName()) renameABC(p,false,false); NewPoint=true; return p; } boolean IntersectionYes=false; public ConstructionObject tryCreateIntersection(final int x, final int y, final boolean ask) { final MyVector w=selectPointonObjects(x, y, true, true); sort(w); IntersectionYes=true; if (w.size()<2) { return null; } final ConstructionObject P1=(ConstructionObject) w.elementAt(0); final ConstructionObject P2=(ConstructionObject) w.elementAt(1); if (!(P1 instanceof PointonObject&&P2 instanceof PointonObject)) { return null; } if (!((PointonObject) P1).canInteresectWith(P2)||!((PointonObject) P2).canInteresectWith(P1)) { return null; } final IntersectionObject o[]=IntersectionConstructor.construct(P1, P2, C); if (o.length==1&&!o[0].valid()) { return null; } if (o.length==2&&!o[0].valid()&&!o[1].valid()) { return null; } if (ask&&Global.getParameter("options.intersection", false)) { final AgainQuestion q=new AgainQuestion(F, Zirkel.name("question.intersection"), Zirkel.name("question.title")); q.center(F); q.setVisible(true); IntersectionYes=q.yes(); Global.setParameter("options.intersection", q.again()); } if (IntersectionYes) { if (o.length==1||!o[1].valid()) { addObject(o[0]); o[0].autoAway(); o[0].validate(x(x), y(y)); validate(); o[0].setDefaults(); o[0].setRestricted(getRestricted()); return o[0]; } if (!o[0].valid()) { addObject(o[1]); o[1].autoAway(); validate(); o[1].setDefaults(); o[1].setRestricted(getRestricted()); return o[1]; } IntersectionObject oc=o[0]; final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d10) { return (ConstructionObject) V.elementAt(0); } else { return null; } } final ConstructionObject o=select(V, x, y); return o; } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel, final ConstructionObject until) { return selectWithSelector(x, y, sel, until, true); } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel, final boolean choice) { return selectWithSelector(x, y, sel, null, choice); } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel) { return selectWithSelector(x, y, sel, null, true); } /** * Select a moveable point at x,y. Don't ask user, take first. **/ public ConstructionObject selectImmediateMoveablePoint(final int x, final int y) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } } if (V.size()==0) { return null; } return (ConstructionObject) V.elementAt(0); } /** * Select a moveable object at x,y. **/ public ConstructionObject selectMoveableObject(final int x, final int y) { final ConstructionObject s=findSelectedObject(); if (s instanceof MoveableObject&&((MoveableObject) s).moveable()&&s.nearto(x, y, this)) { return s; } selectMoveableObjects(x, y); if (V.size()==1) { return (ConstructionObject) V.elementAt(0); } final ConstructionObject o=select(V); if (o!=null) { if (!Global.getParameter("options.choice", true)) { return o; } o.setSelected(true); } return null; } public void selectMoveableObjects(final int x, final int y, final boolean control) { V.removeAllElements(); final ConstructionObject s=findSelectedObject(); if (s instanceof MoveableObject&&((MoveableObject) s).moveable()&&s.nearto(x, y, this)) { V.addElement(s); return; } else if (control&&s instanceof FixedCircleObject&&s.nearto(x, y, this)&&((FixedCircleObject) s).fixedByNumber()) { V.addElement(s); return; } else if (control&&s instanceof FixedAngleObject&&s.nearto(x, y, this)&&((FixedAngleObject) s).fixedByNumber()) { V.addElement(s); return; } final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (!control&&o.isSelectable()&&o instanceof MoveableObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } else if (control&&o instanceof FixedCircleObject&&o.nearto(x, y, this)&&((FixedCircleObject) o).fixedByNumber()) { V.addElement(o); } else if (control&&o instanceof FixedAngleObject&&o.nearto(x, y, this)&&((FixedAngleObject) o).fixedByNumber()) { V.addElement(o); } } filter(V, x, y); } public void selectMoveableObjects(final int x, final int y) { selectMoveableObjects(x, y, false); } /** * Select a moveable object at x,y. Don't ask user, take first. **/ public ConstructionObject selectImmediateMoveableObject(final int x, final int y) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof MoveableObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } } filter(V, x, y); if (V.size()==0) { return null; } return (ConstructionObject) V.elementAt(0); } /** * try to determine the unique objects that are near coordinates x,y and * delete all others from the vector v. **/ public void filter(final MyVector v, final int x, final int y, final boolean choice) { boolean HasPoints=false, HasNotFilled=false; Enumeration e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o instanceof PointObject) { HasPoints=true; } if (!o.isFilledForSelect()) { HasNotFilled=true; } } if (HasPoints) { e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (!o.onlynearto(x, y, this)) { v.removeElement(o); } } } else if (HasNotFilled) { e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isFilledForSelect()) { v.removeElement(o); } } } sort(v); if (!choice) { v.truncate(1); } } public void filter(final MyVector v, final int x, final int y) { filter(v, x, y, Global.getParameter("options.choice", true)||Control); } /** * user must select an object in the selection dialog, unless the selection * is unique anyway, or the filter determines that the selection is unique. **/ public ConstructionObject select(final MyVector v, final int x, final int y, final boolean choice) { if (v.size()==0) { return null; } if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } filter(v, x, y); if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } if (!choice) { return (ConstructionObject) v.elementAt(0); } sortRow(V); RightClicked=false; final eric.JSelectPopupDialog d=new eric.JSelectPopupDialog(F, this, v); final ConstructionObject o=d.getConstructionObject(); d.doclose(); return o; } public ConstructionObject select(final MyVector v, final int x, final int y) { return select(v, x, y, Global.getParameter("options.choice", true)||Control); } /** * user must select an object in the selection dialog, unless the selection * is unique anyway. **/ public ConstructionObject select(final MyVector v, final boolean choice) { if (v.size()==0) { return null; } if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } // if (!choice) return (ConstructionObject)v.elementAt(0); sortRow(V); RightClicked=false; final eric.JSelectPopupDialog d=new eric.JSelectPopupDialog(F, this, v); final ConstructionObject o=d.getConstructionObject(); d.doclose(); return o; } public ConstructionObject select(final MyVector v) { return select(v, Global.getParameter("options.choice", true)||Control); } /** * select the label of a point, i.e. a point, which is set by the user * * @return the first label found **/ public ConstructionObject selectLabel(final int x, final int y) { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o.textcontains(x, y, this)) { return o; } } return null; } public ConstructionObject findSelectedObject() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.selected()) { return o; } } return null; } // Indication functions MyVector Indicated=new MyVector(); PointObject IndicatePoint=null; public void indicate(final MyVector v, final boolean showname) { if (v.size()==1) { if (showname) { setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); } else if (v.elementAt(0) instanceof PointObject) { setCursor(new Cursor(Cursor.HAND_CURSOR)); } } else { setCursor(Cursor.getDefaultCursor()); } if (Indicated.equalsIdentical(v)) { return; } Enumeration e=Indicated.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setIndicated(false); } Indicated.removeAllElements(); e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); Indicated.addElement(o); o.setIndicated(true, showname); } repaint(); } public void indicate(final MyVector v) { indicate(v, false); } public void clearIndicated() { IndicatePoint=null; if (Indicated.size()==0) { return; } final Enumeration e=Indicated.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setIndicated(false); } Indicated.removeAllElements(); setCursor(Cursor.getDefaultCursor()); repaint(); } boolean Preview=false; ConstructionObject LastNonPreview=null; MoveableObject PreviewObject=null; public void movePreview(final MouseEvent e) { if (PreviewObject!=null) { PreviewObject.move(x(e.getX()), y(e.getY())); validate(); repaint(); } } public void prepareForPreview(final MouseEvent e) { LastNonPreview=C.last(); Preview=true; } public boolean isPreview() { return Preview; } public void clearPreview() { if (!Preview) { return; } C.clearAfter(LastNonPreview); LastNonPreview=null; PreviewObject=null; Preview=false; Count.fixAll(false); } public void setPreviewObject(final MoveableObject o) { PreviewObject=o; } public ConstructionObject indicateTryCreateIntersection(final int x, final int y, final boolean ask) { final MyVector w=selectPointonObjects(x, y, true, true); sort(w); IntersectionYes=true; if (w.size()<2) { return null; } final IntersectionObject o[]=IntersectionConstructor.construct( (ConstructionObject) w.elementAt(0), (ConstructionObject) w.elementAt(1), C); if (o.length==1&&!o[0].valid()) { return null; } if (o.length==2) { if (!o[1].valid()) { if (!o[0].valid()) { return null; } } else { final IntersectionObject h=o[0]; o[0]=o[1]; o[1]=h; } } IntersectionObject oc=o[0]; if (o.length==2&&o[1].valid()) { final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d10) { IndicatePoint=null; filter(V, x, y, false); indicate(V); return; } PointObject oc=(PointObject) indicateTryCreateIntersection(x, y, true); if (oc!=null) { return; } final MyVector w=selectPointonObjects(x, y, true, false); filter(w, x, y, true); if (w.size()>=1) { if (!w.equalsIdentical(Indicated)) { oc=new PointObject(C, x(x), y(y), (ConstructionObject) w.elementAt(0)); if (ShowGrid&&!Global.getParameter("grid.leftsnap", false)) { oc.snap(this); } oc.setUseAlpha(true); oc.validate(); oc.setIndicated(true); oc.setType(PointObject.CIRCLE); oc.setColorType(ConstructionObject.THICK); IndicatePoint=oc; indicate(w); } else if (IndicatePoint!=null) { IndicatePoint.setType(PointObject.CIRCLE); IndicatePoint.setColorType(ConstructionObject.THICK); IndicatePoint.move(x(x), y(y)); IndicatePoint.project((ConstructionObject) w.elementAt(0)); repaint(); } } else { clearIndicated(); } } public void indicateCircleLineObjects(final int x, final int y) { final MyVector w=selectCircleLineObjects(x, y); filter(V, x, y); indicate(w); } public void indicatePointonObjects(final int x, final int y) { final MyVector w=selectPointonObjects(x, y); filter(V, x, y); indicate(w); } public void indicateIntersectedObjects(final int x, final int y) { final MyVector w=selectPointonObjects(x, y); if (!w.equalsIdentical(Indicated)&&w.size()>=2) { final IntersectionObject o[]=IntersectionConstructor.construct( (ConstructionObject) w.elementAt(0), (ConstructionObject) w.elementAt(1), C); IntersectionObject oc=o[0]; if (o.length==2) { final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d1=Macros.size()) { appendMacro(m); } } catch (final ConstructionException ex) { Count.setAllAlternate(false); throw ex; } Count.setAllAlternate(false); } } else if (tag.name().equals("Construction")) { if (construction) { boolean job=false; if (tag.hasParam("job")) { job=true; Last=tag.getValue("last"); if (Last==null) { throw new ConstructionException(Zirkel.name("exception.job")); } final String Target=tag.getValue("target"); if (Target==null) { Targets=new Vector(); int i=1; while (true) { final String s=tag.getValue("target"+i); i++; if (s==null) { break; } Targets.addElement(s); } } else { Targets=new Vector(); Targets.addElement(Target); } if (Targets.size()==0) { throw new ConstructionException(Zirkel.name("exception.job")); } } C.load(tree, this); if (job) { if (C.find(Last)==null) { throw new ConstructionException(Zirkel.name("exception.job")); } final Enumeration et=Targets.elements(); while (et.hasMoreElements()) { final String s=(String) et.nextElement(); if (C.find(s)==null&&(!s.startsWith("~")||C.find(s.substring(1))==null)) { throw new ConstructionException(Zirkel.name("exception.job")); } } Job=true; } break; } } else { throw new ConstructionException("Construction not found"); } } recompute(); C.translateOffsets(this); resetSum(); validate(); repaint(); } catch (final Exception e) { throw e; } reloadCD(); repaint(); Enumeration e=Construction.magnet.elements(); while (e.hasMoreElements()) { final PointObject p=(PointObject) e.nextElement(); p.setMagnetObjects((String) e.nextElement()); } // System.out.println("finished reading file"); } public void resetSum() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o instanceof ExpressionObject) { ((ExpressionObject) o).reset(); } } } public void warning(final String s, final String help) { final Warning w=new Warning(F, s, Zirkel.name("warning"), true, help); w.center(F); w.setVisible(true); } public void warning(final String s) { warning(s, ""); } public void load(final InputStream in) throws Exception { try { C.Loading=true; load(in, true, true); C.Loading=false; } catch (final Exception e) { C.Loading=false; throw e; } } public String getComment() { return C.getComment(); } public void setComment(final String s) { C.setComment(s); } public String getJobComment() { return C.getJobComment(); } public void setJobComment(final String s) { C.setJobComment(s); } /** * This can be used to set a frame window for the error dialogs that the * canvas my display. */ public void setFrame(final Frame f) { F=f; } public Frame getFrame() { return F; } /** * Maginify the view by the specified factor. */ public void magnify(final double f) { ZoomerTool.initNonDraggableObjects(C); C.setXYW(C.getX(), C.getY(), C.getW()*f); ZoomerTool.zoomNonDraggableObjectsBy(C, f); recompute(); validate(); repaint(); } /** * Shift the view with these deltas. */ public void shift(final double dx, final double dy) { ZoomerTool.initNonDraggableObjects(C); C.setXYW(C.getX()+dx*C.getW(), C.getY()+dy*C.getW(), C.getW()); ZoomerTool.shiftNonDraggableObjectsBy(C, dx*C.getW(), dy*C.getW()); recompute(); validate(); repaint(); } /** * Tracker routines: Call the OC (must be a TrackPainter) to paint the * object track. */ public void paintTrack(final MyGraphics g) { if (!(OC instanceof TrackPainter)) { return; } ((TrackPainter) OC).paint(g, this); } /** * Run through the construction to update all object texts. This should be * called, whenever the name of an item was changed. It will recreate only * those texts, which contain the old name. */ public void updateTexts(final ConstructionObject o, final String oldname) { C.updateTexts(o, oldname); } public Construction getConstruction() { return C; } public void setShowGrid(final boolean flag) { ShowGrid=flag; repaint(); } public void toggleShowGrid() { if (ShowGrid&&!AxesOnly) { AxesOnly=true; } else if (ShowGrid) { ShowGrid=false; } else { AxesOnly=false; ShowGrid=true; } Global.setParameter("showgrid", ShowGrid); Global.setParameter("axesonly", AxesOnly); repaint(); } public boolean showGrid() { return ShowGrid; } /** * Sets the job parameters for the current construction (the last item to * display and the target item). */ public void setJob(final ConstructionObject last) { Job=true; Last=last.getName(); Targets=new Vector(); } public void addJobTarget(final ConstructionObject target, final boolean visible) { if (visible) { Targets.addElement("~"+target.getName()); } else { Targets.addElement(target.getName()); } } public void clearTargets() { Targets=new Vector(); } /** * Cancel the job state o fthe current construction. */ public void clearJob() { Job=false; } /** * Test, if the construction is a valid job. */ public boolean isJob() { final Enumeration e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (C.find(s)==null&&(!s.startsWith("~")||C.find(s.substring(1))==null)) { return false; } } return Job&&C.find(Last)!=null&&Targets.size()>0; } public boolean inTargets(final String s) { final Enumeration e=Targets.elements(); while (e.hasMoreElements()) { if (((String) e.nextElement()).equals(s)) { return true; } } return false; } /** * * This will display the construction as a job (if it is a job). The * construction is copied up to the last element. The copies are marked as * keep objects, so that they cannot be changed. The last object is marked * as the target object, so that it displays in a special color. * * The function can also flip back to the original construction * (flag=false). */ public void displayJob(final boolean flag) { clearSelected(); if (!(OC instanceof SaveJob)) { OC.reset(this); } if (flag) // diplay the job { C.setOriginalOrder(true); if (displayJob()||!isJob()) { return; } final Construction Cnew=new Construction(); Cnew.setXYW(C.getX(), C.getY(), C.getW()); Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setJobTarget(true); o.setJobTarget(false); } e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); Cnew.add(o); o.setKeep(true); if (inTargets(o.getName())||inTargets("~"+o.getName())) { o.setJobTarget(true); } if (o.getName().equals(Last)) { break; } } while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (inTargets(o.getName())||inTargets("~"+o.getName())) { Cnew.add(o); o.setKeep(true); o.setJobTarget(true); } } int n=0; e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (!s.startsWith("~")) { n++; } } TargetO=new ConstructionObject[n]; TargetS=new ConstructionObject[n]; n=0; e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (!s.startsWith("~")) { TargetO[n]=Cnew.find(s); TargetS[n]=null; n++; } } COriginal=C; C=Cnew; C.addAddEventListener(this); C.setComment(COriginal.getJobComment()); recompute(); reloadCD(); repaint(); } else // display the orginal construction again { if (!displayJob()) { return; } C.removeAddEventListener(this); C=COriginal; COriginal=null; final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setKeep(false); o.setJobTarget(false); } C.setOriginalOrder(false); recompute(); reloadCD(); repaint(); } } /** * If the job is solved, this function removes all restrictions. */ public void freeJob() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setKeep(false); o.setJobTarget(false); repaint(); } } /** * Test if the canvas displays a job right now. */ public boolean displayJob() { return COriginal!=null; } // The following functions change the default values of some objects. public void setShowColor(final int i) { ShowColor=i; repaint(); } public int getShowColor() { return ShowColor; } public ObjectConstructor getOC() { return OC; } // Macros: Vector Macros=new Vector(); public Vector getMacros() { return Macros; } public boolean haveMacros() { return Macros.size()>0; } public boolean haveNonprotectedMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (!m.M.isProtected()) { return true; } } return false; } /** * Define a macro. There must be parameters (but not necessarily targets). * The function will display the macro dialog. It will create a new macro, * when the dialog was not aborted. The macro is kept in the Macros vector * by name. */ boolean defineMacro() { clearSelected(); // Read the list of Parameters and Targets from the // construction. This list is filled by the SetParameter and // SetTargets constructors. final Vector P=C.getParameters(); if (P.size()==0) // no parameters { warning(Zirkel.name("definemacro.noparams")); return false; } // Display the macro creation dialog to the user. final DefineMacro d=new DefineMacro(F, this); d.center(getFrame()); d.setVisible(true); // Aborted? if (d.isAborted()||d.getName().equals("")) { return false; } // Define a marco with the name, the comment and the paramters. final Macro m=new Macro(this, d.getName(), d.getComment(), d.getParams()); // If there are no targets, determine everything as // constructed by the paramaters, else only the things needed // to get the targets. try { defineMacro(C, m, d.targetsOnly(), d.invisible(), d.getPromptFor(), d.hideduplicates()); } catch (final ConstructionException e) { warning(e.getDescription()); OC.reset(this); return false; } storeMacro(m, false); OC.reset(this); return true; } /** * Copy a macro with fixed parameters from another macro. */ public Macro copyMacro(final Macro m, final String name, final boolean fixed[]) { try { final Macro macro=(Macro) (m.clone()); macro.Name=name; final boolean f[]=new boolean[fixed.length]; for (int i=0; i0&&!c.ShowAll, c.SuperHide, c.getPromptFor(), true); storeMacro(m, true); } /* * Store the macro in the macro list (or replace the old macro with the same * name * * @param all Replace the macro without asking. */ public void storeMacro(final Macro m, final boolean all) { int i=0; for (i=0; i=Macros.size()) { appendMacro(m); } } public boolean ProtectMacros=false; public MacroMenu MM=null; public void appendMacro(final Macro m) { if (!ReadOnly) { if (ProtectMacros) { m.setProtected(true); } if (MM==null) { MM=new MacroMenu(PM, "", null); } final MacroItem mi=MM.add(m, m.getName()); if (mi.I!=null) { mi.I.addActionListener(this); } Macros.addElement(mi); } else { if (MM==null) { MM=new MacroMenu(null, "", null); } final MacroItem mi=MM.add(m, m.getName()); if (mi.I!=null) { mi.I.addActionListener(this); } Macros.addElement(mi); } } /** * Replace the macro item number i with m. * * @return User wants to replace all subsequent macros. */ public boolean replaceMacro(final Macro m, final int i, final boolean all) { final MacroItem e=(MacroItem) Macros.elementAt(i); if (all) // don't ask { Macros.setElementAt(new MacroItem(m, e.I), i); return true; } else // ask { final ReplaceMacroQuestion d=new ReplaceMacroQuestion(getFrame(), m); d.center(getFrame()); d.setVisible(true); if (d.isNo()) { return false; } final MacroItem newitem=new MacroItem(m, e.I); MM.replace((MacroItem) Macros.elementAt(i), newitem); Macros.setElementAt(newitem, i); return d.isAll(); } } public String MacroCurrentComment; /** * The user has to choose from a list of macros (for running). */ public Macro chooseMacro() { if (Macros.size()==0) { warning(Zirkel.name("definemacro.nomacro")); return null; } final MacroSelectDialog d=new MacroSelectDialog(getFrame(), MM, false); d.setVisible(true); return d.getMacro(); } /** * The user can choose from a list of macros (for saving). * * @return A vector of selected Macros. */ public Vector chooseMacros() { if (Macros.size()==0) { warning(Zirkel.name("definemacro.nomacro")); return null; } final MacroSelectDialog d=new MacroSelectDialog(getFrame(), MM, true); d.setVisible(true); return d.getMacros(); } /** * Run a macro by name. */ public Macro chooseMacro(final String name) { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final Macro m=((MacroItem) e.nextElement()).M; if (m.getName().equals(name)) { return m; } } return null; } public void deleteMacros(final Vector v) { final Enumeration e=v.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); deleteMacro(m); } } public void deleteMacro(final MacroItem m) { Macros.removeElement(m); if (m.I!=null) { m.I.removeActionListener(this); MM.remove(m); } } public void clearMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.I!=null) { m.I.removeActionListener(this); MM.remove(m); } } Macros.removeAllElements(); } public void clearNonprotectedMacros() { final Vector V=new Vector(); final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (!m.M.isProtected()) { V.addElement(m); } } deleteMacros(V); } public void clearProtectedMacros() { final Vector V=new Vector(); final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.M.isProtected()) { V.addElement(m); } } deleteMacros(V); } public void protectMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); m.M.setProtected(true); } } public void renameMacro(final Macro macro, final String name) { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.I!=null&&m.M==macro) { deleteMacro(m); break; } } macro.setName(name); appendMacro(macro); } MacroBar MBar; public void setMacroBar(final MacroBar m) { MBar=m; } public void updateMacroBar() { // if (MBar!=null) { // MBar.update(Macros); // } } // For the prompt in the status line: TextField TF; public void setTextField(final TextField t) { TF=t; } public void setPrompt(final String s) { if (TF!=null) { TF.setText(s); } } // Loading: public void loadRun(final InputStream is) { final BufferedReader in=new BufferedReader(new InputStreamReader(is)); String s="", comment=""; while (true) { try { s=in.readLine(); if (s==null) { break; } int n; if ((n=s.indexOf("//"))>=0) { comment=s.substring(n+2).trim(); s=s.substring(0, n); } else { comment=""; } s=s.trim(); int k=0; if ((k=Interpreter.startTest("macro", s))>=0) { loadMacro(in, s.substring(k).trim()); } else if (!s.equals("")) { C.interpret(this, s, comment); } } catch (final ConstructionException e) { warning(e.getDescription()+" --- "+s); break; } catch (final Exception e) { warning(e.toString()+" --- "+s); e.printStackTrace(); break; } } C.updateCircleDep(); } public void loadMacro(final BufferedReader in, final String name) throws ConstructionException { final Construction c=new Construction(); c.clear(); String s="", comment="", macrocomment=""; boolean inComment=true, newLine=true; while (true) { try { s=in.readLine(); if (s==null) { throw new ConstructionException(Zirkel.name("exception.macroend")); } s=s.trim(); final int n=s.indexOf("//"); if (inComment&&n==0) { final String h=s.substring(n+2).trim(); if (newLine) { macrocomment=macrocomment+h; newLine=false; } else { if (h.equals("")) { macrocomment=macrocomment+"\n"; newLine=true; } else { macrocomment=macrocomment+" "+h; newLine=false; } } continue; } inComment=false; if (n>=0) { comment=s.substring(n+2).trim(); s=s.substring(0, n); } else { comment=""; } s=s.trim(); if (s.equals(Zirkel.name("end"))) { break; } if (s.toLowerCase().equals("end")) { break; } if (!s.equals("")) { c.interpret(this, s, comment); } } catch (final InvalidException e) { } catch (final ConstructionException e) { throw new ConstructionException(e.getDescription()+" --- "+s); } catch (final IOException e) { warning(e.toString()); return; } } defineMacro(name, macrocomment, c); } public double getGridSize() { double gridsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; if (C.getW()*2/gridsize>=30) { gridsize*=5; } if (C.getW()*2/gridsize<10) { gridsize/=2; } return gridsize; } public LatexOutput createBB(final String filename, final int w, final int h, final double dpi) { try { String path=""; if (Global.getParameter("options.fullpath", true)) { path=FileName.pathAndSeparator(filename); } PrintWriter out=new PrintWriter(new FileOutputStream(path+FileName.purefilename(filename)+".bb")); out.println("%%BoundingBox: 0 0 "+w+" "+h); out.close(); out=new PrintWriter(new FileOutputStream(path+FileName.purefilename(filename)+".ztx")); final LatexOutput lout=new LatexOutput(out); lout.open(w, h, dpi, path+FileName.filename(filename)); return lout; } catch (final Exception e) { warning(e.toString()); } return null; } /** * Save picture as PNG on file or copy to clipboard * * @param filename * ("" for clipboard) * @return not failed */ synchronized public boolean savePNG(final String filename, final boolean latex) { LatexOutput lout=null; if (IW==0||I==null) { return false; } if (Global.getParameter("printscale.middle", true)) { savePreviewAsPNG(filename); return true; } double dpi=Global.getParameter("printscale.dpi", 300); if (!Global.getParameter("printscale.sizes", false)) { final int w=Global.getParameter("printscale.w", IW); final int h=Global.getParameter("printscale.h", IH); if (latex) { lout=createBB(filename, w, h, dpi); } final int IWold=IW; IW=w; IH=h; Scale=((double) IW)/IWold; I=createImage(IW, IH); IG=new MyGraphics13(I.getGraphics(), Scale, this, lout); IG.setSize(w, h); double pointsize=PointSize*Scale; double fontsize=FontSize*Scale; if (Scale<1) { if (Global.getParameter("options.minpointsize", false)&&pointsize. */ package rene.zirkel; // file: ZirkelCanvas.java import java.awt.*; import java.awt.datatransfer.*; import java.awt.event.*; import java.util.*; import java.util.zip.*; import java.io.*; import javax.swing.BoxLayout; import rene.util.xml.*; import rene.gui.*; import rene.dialogs.*; import rene.zirkel.construction.*; import rene.zirkel.constructors.*; import rene.zirkel.dialogs.*; import rene.zirkel.expression.*; import rene.zirkel.graphics.*; import rene.zirkel.listener.*; import rene.zirkel.macro.*; import rene.zirkel.objects.*; import rene.zirkel.structures.*; import rene.zirkel.tools.*; import rene.util.*; import rene.util.sort.*; import atp.sHotEqn; import eric.JGlobals; import eric.JMacrosTools; import eric.JUndo; import eric.controls.JControlsManager; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JSlider; import javax.swing.JTextField; /** * @author Rene * Main class, doing most of the work in the C.a.R. application. * This canvas handles mouse and keyboard input, displays the * construction and has tools to save and load constructions. */ public class ZirkelCanvas extends javax.swing.JPanel implements MouseListener, MouseMotionListener, ItemListener, AddEventListener, ActionListener, ChangedListener, MouseWheelListener // the canvas to do the construction { ObjectConstructor OC=new MoverTool(); // the current object constructor Construction C=new Construction(), COriginal; // the construction (collection of Constructor-Objects) StatusListener SL=null; // for displaying a status message public Image I=null; MyGraphics IG; public UniversalTracker UniversalTrack=null; Image Background=null; FontMetrics FM; public double PointSize=4.0; // Size of a point double MinPointSize=4.0; // Default minimal point size public double FontSize=12.0; // Size of font double MinFontSize=12.0; // Default minimal font size public int IW=0, IH=0; // Image and its dimensions public double Xmin, DX, Ymin, DY; boolean ShowHidden=false; // show hidden objects Frame F=new Frame(); boolean ReadOnly; boolean AllowRightMouse=true; public PopupMenu PM; CheckboxMenuItem CheckboxHidden; MenuItem Replay, Empty; boolean Job=false; // this is a job (save as such) String Last=""; // Last displayed job object Vector Targets=new Vector(); // Target names ConstructionObject TargetO[], TargetS[]; // Target objects and solutions int ShowColor=0; // 0=all, 1=green etc. (black displays always) static public double // factors for rounding EditFactor=1000000.0, LengthsFactor=100.0, AnglesFactor=1.0; public boolean Visual=Global.getParameter("options.visual", true); boolean All; boolean Interactive=true; public int GridColor=0, GridThickness=ConstructionObject.THIN; public boolean ShowGrid=false, AxesOnly=false, ShowDots=true, ShowLines=true; public boolean GridLabels=true, GridBold=false, GridLarge=false; public JControlsManager JCM; public JUndo JU=new JUndo(); /** * Initiate an empty construction. The display may have a popup * menu (only for readonly displays). * * @param readonly User cannot change the construction. * @param replay Replay option in popup menu. * @param hidden Show hidden option in popup menu. */ public ZirkelCanvas(boolean readonly, boolean replay, boolean hidden) { ReadOnly=readonly; AllowRightMouse=!readonly; // setLayout(new BoxLayout(this,BoxLayout.X_AXIS)); setLayout(null); UniversalTrack=new UniversalTracker(this); JCM=new JControlsManager(this); if (Global.getParameter("options.nopopupmenu", false)) { PM=null; } else if (ReadOnly) { PM=new PopupMenu(); CheckboxHidden=new MyCheckboxMenuItem( Zirkel.name("popup.hidden")); CheckboxHidden.addItemListener(this); if (hidden) { PM.add(CheckboxHidden); } Replay=new MyMenuItem( Zirkel.name("popup.replay")); Replay.addActionListener(this); if (replay) { PM.add(Replay); } if (hidden||replay) { add(PM); } else { PM=null; } } else { PM=new PopupMenu(); Empty=new MyMenuItem( Zirkel.name("popup.empty")); add(PM); } C.CL=this; clear(); updateDigits(); C.addAddEventListener(this); addMouseWheelListener(this); } public ZirkelCanvas(boolean readonly) { this(readonly, true, true); } public ZirkelCanvas() { this(false, true, true); } public void paintComponents(Graphics g){ } public void deleteAxisObjects() { C.deleteAxisObjects(); reloadCD(); repaintCD(); } public void createAxisObjects() { C.createAxisObjects(); } private void showvalues() { Global.setParameter("options.point.showvalues", true); Global.setParameter("options.segment.showvalues", true); Global.setParameter("options.line.showvalues", true); Global.setParameter("options.circle.showvalues", true); Global.setParameter("options.angle.showvalues", true); Global.setParameter("options.text.showvalues", true); Global.setParameter("options.locus.showvalues", true); Global.setParameter("options.showvalues", true); setShowValues(true); } private void setShowHideParameters(String s, boolean b) { Global.setParameter("options.point."+s, b); Global.setParameter("options.segment."+s, b); Global.setParameter("options.line."+s, b); Global.setParameter("options.circle."+s, b); Global.setParameter("options.angle."+s, b); Global.setParameter("options.text."+s, b); Global.setParameter("options.locus."+s, b); Global.setParameter("options."+s, b); // setShowNames(true); } private void setShowHideParameters(String s, int i) { Global.setParameter("options.point."+s, i); Global.setParameter("options.segment."+s, i); Global.setParameter("options.line."+s, i); Global.setParameter("options.circle."+s, i); Global.setParameter("options.angle."+s, i); Global.setParameter("options.text."+s, i); Global.setParameter("options.locus."+s, i); Global.setParameter("options."+s, i); // setShowNames(true); } public void JSsend(String s) { if (s.equals("shownames")) { setShowHideParameters("shownames", true); } else if (s.equals("hidenames")) { setShowHideParameters("shownames", false); } else if (s.equals("showvalues")) { setShowHideParameters("showvalues", true); } else if (s.equals("hidevalues")) { setShowHideParameters("showvalues", false); } else { try { C.interpret(this, s); } catch (Exception ex) { } } } public String JSreceive(String s) { String r="ERROR..."; try { double rep; Expression exp=new Expression(s, C, null); rep=exp.getValue(); r=String.valueOf(rep); } catch (ConstructionException ex) { ex.printStackTrace(); } return r; } public Dimension UseSize=null; public Dimension getMinimumSize() { if (Background==null||!Global.getParameter("background.usesize", false)) { if (UseSize!=null) { return UseSize; } else { return new Dimension(600, 600); } } else { int iw=Background.getWidth(this); if (iw<10) { return new Dimension(600, 600); } int ih=Background.getHeight(this); if (Global.getParameter("background.usewidth", false)) { int w=getSize().width, h=(int) ((double) ih/iw*w+0.5); return new Dimension(w, h); } else { return new Dimension(iw, ih); } } } public Dimension getPreferredSize() { return getMinimumSize(); } public void updateDigits() { EditFactor=Math.pow(10, Global.getParameter("digits.edit", 5)); LengthsFactor=Math.pow(10, Global.getParameter("digits.lengths", 5)); AnglesFactor=Math.pow(10, Global.getParameter("digits.angles", 0)); } public void itemStateChanged(ItemEvent e) { if (e.getSource()==CheckboxHidden) { ShowHidden=CheckboxHidden.getState(); repaint(); } } ZirkelCanvasInterface ZCI; public void setZirkelCanvasListener(ZirkelCanvasInterface zci) { ZCI=zci; } public String loadImage() { return ZCI.loadImage(); } public Image doLoadImage(String filename) { return ZCI.doLoadImage(filename); } public void actionPerformed(ActionEvent e) { if (!Interactive) { return; } if (e.getSource()==Replay) { if (ZCI!=null) { ZCI.replayChosen(); } } else { Enumeration en=Macros.elements(); while (en.hasMoreElements()) { MacroItem m=(MacroItem) en.nextElement(); if (m.I==e.getSource()) { if (ZCI!=null) { ZCI.runMacro(m.M); } break; } } } } // Some transfer functions to compute screen coordinates etc. public double col(double x) { return (x-Xmin)/DX*IW; } public double row(double y) { return IH-(y-Ymin)/DY*IH; } public int width() { return IW; } public int height() { return IH; } public double x(int c) { return Xmin+DX*c/IW; } public double y(int r) { return Ymin+DY*(IH-r)/IH; } public double dx(int c) { return DX*c/IW; } public double dy(int r) { return DY*r/IH; } public double dx(double c) { return DX*c/IW; } public double dy(double r) { return DY*r/IH; } public double maxX() { return Xmin+DX; } public double minX() { return Xmin; } public double maxY() { return Ymin+DY; } public double minY() { return Ymin; } public boolean isInside(double x, double y) { return x>=Xmin&&x=Ymin&&y0) { C.setPixel(getSize().width/DX); } } DoneListener DL; public void setDoneListener(DoneListener dl) { DL=dl; } /** * Add an item to the construction and re-paint the construction. */ public void addObject(ConstructionObject o) // called by the ObjectConstructor { C.add(o); if (Preview) { o.setIndicated(true); o.setSelectable(false); } C.updateCircleDep(); } /** * A construction added an item. * Check, if it solves a problem and notify the DoneListener, if so. */ public void added(Construction c, ConstructionObject o) { if (displayJob()&&TargetO.length>0) { boolean olddone=true; for (int i=0; i0) { boolean olddone=true; for (int i=0; i0) { ConstructionObject o=select(v, e.getX(), e.getY()); if (o!=null) { new EditTool().mousePressed(e, o, this); check(); return; } else { repaintCD(); } return; } } if (Moved<=2&&PM!=null&&!Global.getParameter("restricted", false)) { int n=2; if (ReadOnly||!Global.getParameter("options.doubleclick", false)) { n=1; } if (e.getClickCount()>=n&& (ReadOnly||Macros.size()!=0)) { PM.show(e.getComponent(), e.getX(), e.getY()); } } repaintCD(); return; } if (SmartBoardPreview&&Global.getParameter("smartboard", false)) { Control=e.isControlDown(); clearIndicated(); clearPreview(); repaint(); Dragging=false; OC.mousePressed(e, this); SmartBoardPreview=false; mouseReleased(e); return; } if (!Dragging) { OC.mouseReleased(e, this); Dragging=false; repaintCD(); return; } if (Moved<=1) { if (OC instanceof LabelMover) { ((LabelMover) OC).resetPoint(); OC.mouseReleased(e, this); } else if (OC instanceof MetaMover) { OC.mouseReleased(e, this); if (!ReadOnly) { new EditTool().mousePressed(e, this); } } } else { OC.mouseReleased(e, this); } repaintCD(); check(); Dragging=false; } public synchronized void mouseClicked(MouseEvent e) { } public synchronized void mouseExited(MouseEvent e) { if (!Interactive) { return; } clearIndicated(); clearPreview(); repaint(); SmartBoardPreview=false; RightClicked=false; repaintCD(); } public void mouseEntered(MouseEvent e) { } public synchronized void mouseMoved(MouseEvent e) { if (!Interactive|| !Global.getParameter("options.indicate", true)) { return; } if (Global.getParameter("smartboard", false)) { return; } Count.setAllAlternate(true); OC.mouseMoved(e, this, Global.getParameter("options.indicate.simple", false)); Count.setAllAlternate(false); repaintCD(); } DragThread DT=null; public synchronized void mouseDragged(MouseEvent e) { if (!Interactive) { return; } if (DT==null) { DT=new DragThread(this); } if (SmartBoardPreview&&Global.getParameter("smartboard", false)) { OC.mouseMoved(e, this, Global.getParameter("options.indicate.simple", false)); } else { DT.mouseDragged(e); Moved++; } repaintCD(); } public synchronized void doMouseDragged(MouseEvent e) { OC.mouseDragged(e, this); } ConstructionObject LastPaint=null; public void newImage() { I=null; repaint(); } boolean Frozen=false; public void setFrozen(boolean f) { Frozen=f; } public boolean getFrozen() { return Frozen; } MessageWindow MW; final double PointSizeFactor=240.0; int CC=0; // public void repaint(){ //// System.out.print("a "); //// super.repaint(); // StackTraceElement[] trace = new Throwable().getStackTrace(); // if (!trace[1].equals("javax.swing.JComponent")) super.repaint(); // //// for (int i=0;i0) { ConstructionObject os[]=new ConstructionObject[n]; e=C.elements(); n=0; while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.HasZ) { os[n++]=o; } } Sorter.sort(os); for (int i=0; i250&&PolygonDrawer.step<50) { PolygonDrawer.step=PolygonDrawer.step*2; } if (time<100&&PolygonDrawer.step>4) { PolygonDrawer.step=PolygonDrawer.step/2; } paintDrawings(IG); // JMacrosTools.CurrentJZF.JCM.paintControls(IG.getGraphics()); } void dopaintFig(MyGraphicsFig IG) { if (ShowGrid) { paintGrid(IG); } IG.pushLayer(true); int layer=0; while (true) { IG.pushLayer(); int l=0; Enumeration e=C.elements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==LastPaint) { break; } if (l==layer&&o.isBack()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l>layer) { break; } } } if (llayer) { break; } } } l=0; e=C.elements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==LastPaint) { break; } if (l==layer&&!o.isBack()&&o.selected()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l>layer) { break; } } } layer++; } IG.pushLayer(false); if (LastPaint==null) { paintTrack(IG); } } int xg[]=new int[64], yg[]=new int[64]; public void setGrid() { ShowGrid=Global.getParameter("showgrid", false); AxesOnly=Global.getParameter("axesonly", false); ShowDots=Global.getParameter("showdots", false); ShowLines=Global.getParameter("showlines", false); GridThickness=Global.getParameter("grid.thickness", ConstructionObject.THIN); GridColor=Global.getParameter("grid.colorindex", 0); GridBold=Global.getParameter("grid.bold", false); GridLarge=Global.getParameter("grid.large", false); GridLabels=Global.getParameter("grid.labels", true); } /** * Paint axes and grid. * @param IG */ void paintGrid(MyGraphics IG) { if (GridThickness==ConstructionObject.NORMAL) { IG.setColor(ZirkelFrame.Colors[Global.getParameter("grid.colorindex", 0)]); } else { IG.setColor(ZirkelFrame.LightColors[GridColor]); } IG.setFont(GridLarge, GridBold); double gridsize=getGridSize(); int dd=IH/200; if (dd<1) { dd=1; } double x1=Math.floor( (C.getX()-C.getW())/gridsize-1)*gridsize; int xi=0; while (x1<(C.getX()+C.getW())&&xi<64) { int c=(int) col(x1); xg[xi++]=c; x1+=gridsize; } double y1=Math.floor( (C.getY()-C.getW())/gridsize-1)*gridsize; int yi=0; while (y1<(C.getY()+C.getW())&&yi<64) { int r=(int) row(y1); yg[yi++]=r; y1+=gridsize; } for (int i=0; iC.getX()-C.getW()) { int c=(int) col(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(c, 0, c, IH); } else { IG.drawThickLine(c, 0, c, IH); } } if (0C.getY()-C.getW()) { int r=(int) row(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(0, r, IW, r); } else { IG.drawThickLine(0, r, IW, r); } } } dd=dd*2; double labelsize=Math.pow(10, Math.floor( Math.log(C.getW()*2)/Math.log(10)))/10; while (C.getW()*2/labelsize>=10) { labelsize*=10; } if (C.getW()*2/labelsize<5) { labelsize/=2; } FontMetrics fm=IG.getFontMetrics(); int FH=fm.getHeight(); x1=Math.floor( (C.getX()-C.getW())/labelsize-1)*labelsize; int lh=(int) row(0); int bottomshift=FH+2; if (lh<0||lh>IH) { lh=IH; bottomshift=-7; } while (x1<(C.getX()+C.getW())) { int c=(int) col(x1); String s=format(x1); if (s.length()>0) { if (GridLabels) { IG.drawString(s, c-fm.stringWidth(s)/2, lh+bottomshift); } IG.drawLine(c, lh-dd, c, lh+dd); } x1+=labelsize; } boolean left=true; int lw=(int) col(0); if (lw<0||lw>IW-20) { lw=0; left=false; } y1=Math.floor( (C.getY()-C.getW())/labelsize-1)*labelsize; while (y1<(C.getY()+C.getW())) { int r=(int) row(y1); String s=format(y1); if (s.length()>0) { int leftshift=(left)?-fm.stringWidth(s)-5:8; if (GridLabels) { IG.drawString(s, lw+leftshift, r+FH/2-2); } IG.drawLine(lw-dd, r, lw+dd, r); } y1+=labelsize; } } /** * Paint only the coordinate axes (no grid) * @param IG */ void paintAxes(MyGraphics IG) { IG.setAntialiasing(false); if (GridThickness==ConstructionObject.NORMAL) { IG.setColor(ZirkelFrame.Colors[GridColor]); } else { IG.setColor(ZirkelFrame.LightColors[GridColor]); } IG.setFont(GridLarge, GridBold); double gridsize=getGridSize(); double x1=Math.floor( (C.getX()-C.getW())/gridsize-1)*gridsize; int r0=(int) row(0); int dd=IH/200; if (dd<1) { dd=1; } while (x1<(C.getX()+C.getW())) { int c=(int) col(x1); IG.drawLine(c, r0-dd, c, r0+dd); x1+=gridsize; } double y1=Math.floor( (C.getY()-C.getW())/gridsize-1)*gridsize; int c0=(int) col(0); while (y1<(C.getY()+C.getW())) { int r=(int) row(y1); IG.drawLine(c0-dd, r, c0+dd, r); y1+=gridsize; } if (GridThickness!=ConstructionObject.INVISIBLE) { if (0C.getX()-C.getW()) { int c=(int) col(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(c, 0, c, IH); } else { IG.drawThickLine(c, 0, c, IH); } } if (0C.getY()-C.getW()) { int r=(int) row(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(0, r, IW, r); } else { IG.drawThickLine(0, r, IW, r); } } } dd=dd*2; double labelsize=Math.pow(10, Math.floor( Math.log(C.getW()*2)/Math.log(10)))/10; while (C.getW()*2/labelsize>=10) { labelsize*=10; } if (C.getW()*2/labelsize<5) { labelsize/=2; } FontMetrics fm=IG.getFontMetrics(); int FH=fm.getHeight(); x1=Math.floor( (C.getX()-C.getW())/labelsize-1)*labelsize; int lh=(int) row(0); int bottomshift=FH+2; if (lh<0||lh>IH) { lh=IH; bottomshift=-7; } while (x1<(C.getX()+C.getW())) { int c=(int) col(x1); String s=format(x1); if (s.length()>0) { if (GridLabels) { IG.drawString(s, c-fm.stringWidth(s)/2, lh+bottomshift); } IG.drawLine(c, lh-dd, c, lh+dd); } x1+=labelsize; } boolean left=true; int lw=(int) col(0); if (lw<0||lw>IW-20) { lw=0; left=false; } y1=Math.floor( (C.getY()-C.getW())/labelsize-1)*labelsize; while (y1<(C.getY()+C.getW())) { int r=(int) row(y1); String s=format(y1); if (s.length()>0) { int leftshift=(left)?-fm.stringWidth(s)-5:8; if (GridLabels) { IG.drawString(s, lw+leftshift, r+FH/2-2); } IG.drawLine(lw-dd, r, lw+dd, r); } y1+=labelsize; } IG.setAntialiasing(true); } public double pointSize() { return PointSize; } public double SelectionPointFactor=Global.getParameter("selectionsize", 1.5); public double selectionSize() { return SelectionPointFactor*PointSize; } public double Scale=1.0; public int scale(int x) { return (int) (Scale*x); } static char c[]=new char[20]; int nc; public String format(double x) { // double xx=x; nc=0; boolean minus=false; if (x<-1e-12) { minus=true; x=-x; } x+=1e-12; double h=x-Math.floor(x); if (rekformat(h, 8)) { c[nc++]='.'; } while (x>=1) { double s=Math.floor(x/10); c[nc++]=(char) ('0'+(int) (x-s*10)); x=s; } if (nc>0&&minus) { c[nc++]='-'; } // revert c: for (int i=0; i "+new String(c,0,nc)); return new String(c, 0, nc); } boolean rekformat(double h, int k) { h=h*10; double x=Math.floor(h); if (k==0) { int i=(int) x; if (i>0) { c[nc++]=(char) ('0'+i); return true; } else { return false; } } else { int i=(int) x; if (rekformat(h-x, k-1)||i>0) { c[nc++]=(char) ('0'+i); return true; } else { return false; } } } public void update(Graphics g) { paint(g); } public void paintUntil(ConstructionObject o) { if (LastPaint==o) { return; } LastPaint=o; repaint(); } // validate all elements public void validate() { dovalidate(); if (OC instanceof TrackPainter) { ((TrackPainter) OC).validate(this); } } /** * Synchronized update of the construction to avoid a repaint * during update. */ synchronized public void dovalidate() { C.dovalidate(); } // selection routines: // This vector is used by ALL selection and indication routines for // performance reasons. MyVector V=new MyVector(); public void sort(MyVector V) { if (V.size()<2) { return; } Sorter.QuickSort(V.getArray(), 0, V.size()-1); } /** * Slow function to resort a vector by the number of each element in * the construction. */ public void sortRow(MyVector V) { ConstructionObject o[]=new ConstructionObject[V.size()]; V.copyInto(o); V.removeAllElements(); Enumeration e=C.elements(); while (e.hasMoreElements()) { ConstructionObject oo=(ConstructionObject) e.nextElement(); for (int i=0; i1) V.removeAllElements(); } public ConstructionObject selectMultipleFinal(int x, int y, boolean multiple) { selectMultipleFinals(x, y, multiple); return (ConstructionObject) select(V); } /** * Select a single ray near x,y **/ public RayObject selectRay(int x, int y, boolean multiple) { selectRays(x, y, multiple); return (RayObject) select(V); } public void selectRays(int x, int y, boolean multiple) { Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof RayObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public RayObject selectRay(int x, int y) { return selectRay(x, y, true); } /** * Select a circle near x,y. A non-filled object is preferred before * a filled object. **/ public PrimitiveCircleObject selectCircle(int x, int y, boolean multiple) { selectCircles(x, y, multiple); return (PrimitiveCircleObject) select(V); } public void selectCircles(int x, int y, boolean multiple) { Enumeration e=C.elements(); V.removeAllElements(); boolean haveNotFilled=false; while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveCircleObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); if (!o.isFilledForSelect()) { haveNotFilled=true; } } } if (haveNotFilled) { e=V.elements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isFilledForSelect()) { V.removeElement(o); } } } } public PrimitiveCircleObject selectCircle(int x, int y) { return selectCircle(x, y, true); } /** * Select a point near x,y. **/ public PointObject selectPoint(int x, int y, boolean multiple) { selectPointObjects(x, y, multiple); return (PointObject) select(V); } public void selectPointObjects(int x, int y, boolean multiple) { Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PointObject selectPoint(int x, int y) { return selectPoint(x, y, true); } public PointObject selectPoint(int x, int y, boolean multiple, ConstructionObject until) { selectPointObjects(x, y, multiple, until); return (PointObject) select(V); } public void selectPointObjects(int x, int y, boolean multiple, ConstructionObject until) { Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==until) { break; } if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PointObject selectPoint(int x, int y, ConstructionObject until) { return selectPoint(x, y, true, until); } boolean NewPoint=false; public boolean isNewPoint() { return NewPoint; } /** * Select a point, and create a new point, if necessary. Even creates * an intersection, or a point bound to an object, if possible. If * enabled, the user is asked for confirmation in these cases. The * variable NewPoint is set to true, if the point was indeed created. * @param multiple determines, if multiple selections are possible. * @param any determines, if the first point should be used. **/ public PointObject selectCreatePoint(int x, int y, boolean multiple, boolean any) { NewPoint=false; if (Preview) { PointObject p=new PointObject(C, x(x), y(y)); addObject(p); p.setSuperHidden(true); PreviewObject=p; return p; } // User selects a known point: Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } sort(V); } if (V.size()>0) { if (any) { return (PointObject) (V.elementAt(0)); } ConstructionObject o=select(V, Control||!Global.getParameter("options.indicate", true)); if (o!=null) { return (PointObject) o; } return null; } // User creates a new point: ConstructionObject oc=tryCreateIntersection(x, y, true); if (oc!=null) { PointObject o=(PointObject) oc; // o.setDefaults(); // if (o.showName()) renameABC(o,false,false); return o; } if (!IntersectionYes) { return null; } MyVector w=selectPointonObjects(x, y, true, false); filter(w, x, y, true); if (w.size()>0) { oc=select(w, !Control); if (oc==null) { return null; } if (oc!=null) { boolean yes=true; if (Global.getParameter("options.pointon", false)) { AgainQuestion q=new AgainQuestion(F, Zirkel.name("question.pointon"), Zirkel.name("question.title")); q.center(F); q.setVisible(true); yes=q.yes(); Global.setParameter("options.pointon", q.again()); } if (yes) { PointObject o=new PointObject(C, x(x), y(y), oc); // if (ShowGrid&&!Global.getParameter("grid.leftsnap", false)) { // o.snap(this); // } o.setUseAlpha(true); addObject(o); validate(); o.setDefaults(); // rename Point on object, if showname // if (o.showName()) renameABC(o,false,false); NewPoint=true; return o; } else { return null; } } } PointObject p=new PointObject(C, x(x), y(y)); if (ShowGrid) { p.snap(this); } addObject(p); p.setDefaults(); // rename Point, if showname // if (p.showName()) renameABC(p,false,false); NewPoint=true; return p; } boolean IntersectionYes=false; public ConstructionObject tryCreateIntersection(int x, int y, boolean ask) { MyVector w=selectPointonObjects(x, y, true, true); sort(w); IntersectionYes=true; if (w.size()<2) { return null; } ConstructionObject P1=(ConstructionObject) w.elementAt(0); ConstructionObject P2=(ConstructionObject) w.elementAt(1); if (!(P1 instanceof PointonObject&&P2 instanceof PointonObject)) { return null; } if (!((PointonObject) P1).canInteresectWith(P2)||!((PointonObject) P2).canInteresectWith(P1)) { return null; } IntersectionObject o[]=IntersectionConstructor.construct(P1, P2, C); if (o.length==1&&!o[0].valid()) { return null; } if (o.length==2&&!o[0].valid()&&!o[1].valid()) { return null; } if (ask&&Global.getParameter("options.intersection", false)) { AgainQuestion q=new AgainQuestion(F, Zirkel.name("question.intersection"), Zirkel.name("question.title")); q.center(F); q.setVisible(true); IntersectionYes=q.yes(); Global.setParameter("options.intersection", q.again()); } if (IntersectionYes) { if (o.length==1||!o[1].valid()) { addObject(o[0]); o[0].autoAway(); o[0].validate(x(x), y(y)); validate(); o[0].setDefaults(); o[0].setRestricted(getRestricted()); return o[0]; } if (!o[0].valid()) { addObject(o[1]); o[1].autoAway(); validate(); o[1].setDefaults(); o[1].setRestricted(getRestricted()); return o[1]; } IntersectionObject oc=o[0]; double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d10) { return (ConstructionObject) V.elementAt(0); } else { return null; } } ConstructionObject o=select(V, x, y); return o; } public ConstructionObject selectWithSelector(int x, int y, Selector sel, ConstructionObject until) { return selectWithSelector(x, y, sel, until, true); } public ConstructionObject selectWithSelector(int x, int y, Selector sel, boolean choice) { return selectWithSelector(x, y, sel, null, choice); } public ConstructionObject selectWithSelector(int x, int y, Selector sel) { return selectWithSelector(x, y, sel, null, true); } /** * Select a moveable point at x,y. Don't ask user, take first. **/ public ConstructionObject selectImmediateMoveablePoint(int x, int y) { Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&& o instanceof PointObject&&((MoveableObject) o).moveable()&& o.nearto(x, y, this)) { V.addElement(o); } } if (V.size()==0) { return null; } return (ConstructionObject) V.elementAt(0); } /** * Select a moveable object at x,y. **/ public ConstructionObject selectMoveableObject(int x, int y) { ConstructionObject s=findSelectedObject(); if (s instanceof MoveableObject&& ((MoveableObject) s).moveable()&&s.nearto(x, y, this)) { return s; } selectMoveableObjects(x, y); if (V.size()==1) { return (ConstructionObject) V.elementAt(0); } ConstructionObject o=select(V); if (o!=null) { if (!Global.getParameter("options.choice", true)) { return o; } o.setSelected(true); } return null; } public void selectMoveableObjects(int x, int y, boolean control) { V.removeAllElements(); ConstructionObject s=findSelectedObject(); if (s instanceof MoveableObject&& ((MoveableObject) s).moveable()&&s.nearto(x, y, this)) { V.addElement(s); return; } else if (control&&s instanceof FixedCircleObject&&s.nearto(x, y, this)&& ((FixedCircleObject) s).fixedByNumber()) { V.addElement(s); return; } else if (control&&s instanceof FixedAngleObject&&s.nearto(x, y, this)&& ((FixedAngleObject) s).fixedByNumber()) { V.addElement(s); return; } Enumeration e=C.elements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (!control&&o.isSelectable()&& o instanceof MoveableObject&&((MoveableObject) o).moveable()&& o.nearto(x, y, this)) { V.addElement(o); } else if (control&&o instanceof FixedCircleObject&&o.nearto(x, y, this)&& ((FixedCircleObject) o).fixedByNumber()) { V.addElement(o); } else if (control&&o instanceof FixedAngleObject&&o.nearto(x, y, this)&& ((FixedAngleObject) o).fixedByNumber()) { V.addElement(o); } } filter(V, x, y); } public void selectMoveableObjects(int x, int y) { selectMoveableObjects(x, y, false); } /** * Select a moveable object at x,y. Don't ask user, take first. **/ public ConstructionObject selectImmediateMoveableObject(int x, int y) { Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&& o instanceof MoveableObject&&((MoveableObject) o).moveable()&& o.nearto(x, y, this)) { V.addElement(o); } } filter(V, x, y); if (V.size()==0) { return null; } return (ConstructionObject) V.elementAt(0); } /** * try to determine the unique objects that are near coordinates x,y * and delete all others from the vector v. **/ public void filter(MyVector v, int x, int y, boolean choice) { boolean HasPoints=false, HasNotFilled=false; Enumeration e=v.elements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o instanceof PointObject) { HasPoints=true; } if (!o.isFilledForSelect()) { HasNotFilled=true; } } if (HasPoints) { e=v.elements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (!o.onlynearto(x, y, this)) { v.removeElement(o); } } } else if (HasNotFilled) { e=v.elements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isFilledForSelect()) { v.removeElement(o); } } } sort(v); if (!choice) { v.truncate(1); } } public void filter(MyVector v, int x, int y) { filter(v, x, y, Global.getParameter("options.choice", true)||Control); } /** * user must select an object in the selection dialog, unless the * selection is unique anyway, or the filter determines that the * selection is unique. **/ public ConstructionObject select(MyVector v, int x, int y, boolean choice) { if (v.size()==0) { return null; } if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } filter(v, x, y); if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } if (!choice) { return (ConstructionObject) v.elementAt(0); } sortRow(V); RightClicked=false; eric.JSelectPopupDialog d=new eric.JSelectPopupDialog(F, this, v); ConstructionObject o=d.getConstructionObject(); d.doclose(); return o; } public ConstructionObject select(MyVector v, int x, int y) { return select(v, x, y, Global.getParameter("options.choice", true)||Control); } /** * user must select an object in the selection dialog, unless the * selection is unique anyway. **/ public ConstructionObject select(MyVector v, boolean choice) { if (v.size()==0) { return null; } if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } // if (!choice) return (ConstructionObject)v.elementAt(0); sortRow(V); RightClicked=false; eric.JSelectPopupDialog d=new eric.JSelectPopupDialog(F, this, v); ConstructionObject o=d.getConstructionObject(); d.doclose(); return o; } public ConstructionObject select(MyVector v) { return select(v, Global.getParameter("options.choice", true)||Control); } /** * select the label of a point, i.e. a point, which is set by the * user * @return the first label found **/ public ConstructionObject selectLabel(int x, int y) { Enumeration e=C.elements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o.textcontains(x, y, this)) { return o; } } return null; } public ConstructionObject findSelectedObject() { Enumeration e=C.elements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.selected()) { return o; } } return null; } // Indication functions MyVector Indicated=new MyVector(); PointObject IndicatePoint=null; public void indicate(MyVector v, boolean showname) { if (v.size()==1) { if (showname) { setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); } else if (v.elementAt(0) instanceof PointObject) { setCursor(new Cursor(Cursor.HAND_CURSOR)); } } else { setCursor(Cursor.getDefaultCursor()); } if (Indicated.equalsIdentical(v)) { return; } Enumeration e=Indicated.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setIndicated(false); } Indicated.removeAllElements(); e=v.elements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); Indicated.addElement(o); o.setIndicated(true, showname); } repaint(); } public void indicate(MyVector v) { indicate(v, false); } public void clearIndicated() { IndicatePoint=null; if (Indicated.size()==0) { return; } Enumeration e=Indicated.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setIndicated(false); } Indicated.removeAllElements(); setCursor(Cursor.getDefaultCursor()); repaint(); } boolean Preview=false; ConstructionObject LastNonPreview=null; MoveableObject PreviewObject=null; public void movePreview(MouseEvent e) { if (PreviewObject!=null) { PreviewObject.move(x(e.getX()), y(e.getY())); validate(); repaint(); } } public void prepareForPreview(MouseEvent e) { LastNonPreview=C.last(); Preview=true; } public boolean isPreview() { return Preview; } public void clearPreview() { if (!Preview) { return; } C.clearAfter(LastNonPreview); LastNonPreview=null; PreviewObject=null; Preview=false; Count.fixAll(false); } public void setPreviewObject(MoveableObject o) { PreviewObject=o; } public ConstructionObject indicateTryCreateIntersection(int x, int y, boolean ask) { MyVector w=selectPointonObjects(x, y, true, true); sort(w); IntersectionYes=true; if (w.size()<2) { return null; } IntersectionObject o[]=IntersectionConstructor.construct( (ConstructionObject) w.elementAt(0), (ConstructionObject) w.elementAt(1), C); if (o.length==1&&!o[0].valid()) { return null; } if (o.length==2) { if (!o[1].valid()) { if (!o[0].valid()) { return null; } } else { IntersectionObject h=o[0]; o[0]=o[1]; o[1]=h; } } IntersectionObject oc=o[0]; if (o.length==2&&o[1].valid()) { double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d10) { IndicatePoint=null; filter(V, x, y, false); indicate(V); return; } PointObject oc=(PointObject) indicateTryCreateIntersection(x, y, true); if (oc!=null) { return; } MyVector w=selectPointonObjects(x, y, true, false); filter(w, x, y, true); if (w.size()>=1) { if (!w.equalsIdentical(Indicated)) { oc=new PointObject(C, x(x), y(y), (ConstructionObject) w.elementAt(0)); if (ShowGrid&&!Global.getParameter("grid.leftsnap", false)) { oc.snap(this); } oc.setUseAlpha(true); oc.validate(); oc.setIndicated(true); oc.setType(PointObject.CIRCLE); oc.setColorType(ConstructionObject.THICK); IndicatePoint=oc; indicate(w); } else if (IndicatePoint!=null) { IndicatePoint.setType(PointObject.CIRCLE); IndicatePoint.setColorType(ConstructionObject.THICK); IndicatePoint.move(x(x), y(y)); IndicatePoint.project((ConstructionObject) w.elementAt(0)); repaint(); } } else { clearIndicated(); } } public void indicateCircleLineObjects(int x, int y) { MyVector w=selectCircleLineObjects(x, y); filter(V, x, y); indicate(w); } public void indicatePointonObjects(int x, int y) { MyVector w=selectPointonObjects(x, y); filter(V, x, y); indicate(w); } public void indicateIntersectedObjects(int x, int y) { MyVector w=selectPointonObjects(x, y); if (!w.equalsIdentical(Indicated)&&w.size()>=2) { IntersectionObject o[]=IntersectionConstructor.construct( (ConstructionObject) w.elementAt(0), (ConstructionObject) w.elementAt(1), C); IntersectionObject oc=o[0]; if (o.length==2) { double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d1=Macros.size()) { appendMacro(m); } } catch (ConstructionException ex) { Count.setAllAlternate(false); throw ex; } Count.setAllAlternate(false); } } else if (tag.name().equals("Construction")) { if (construction) { boolean job=false; if (tag.hasParam("job")) { job=true; Last=tag.getValue("last"); if (Last==null) { throw new ConstructionException( Zirkel.name("exception.job")); } String Target=tag.getValue("target"); if (Target==null) { Targets=new Vector(); int i=1; while (true) { String s=tag.getValue("target"+i); i++; if (s==null) { break; } Targets.addElement(s); } } else { Targets=new Vector(); Targets.addElement(Target); } if (Targets.size()==0) { throw new ConstructionException( Zirkel.name("exception.job")); } } C.load(tree, this); if (job) { if (C.find(Last)==null) { throw new ConstructionException( Zirkel.name("exception.job")); } Enumeration et=Targets.elements(); while (et.hasMoreElements()) { String s=(String) et.nextElement(); if (C.find(s)==null&& (!s.startsWith("~")|| C.find(s.substring(1))==null)) { throw new ConstructionException( Zirkel.name("exception.job")); } } Job=true; } break; } } else { throw new ConstructionException( "Construction not found"); } } recompute(); C.translateOffsets(this); resetSum(); validate(); repaint(); } catch (Exception e) { throw e; } reloadCD(); repaint(); // System.out.println("finished reading file"); } public void resetSum() { Enumeration e=C.elements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o instanceof ExpressionObject) { ((ExpressionObject) o).reset(); } } } public void warning(String s, String help) { Warning w=new Warning(F, s, Zirkel.name("warning"), true, help); w.center(F); w.setVisible(true); } public void warning(String s) { warning(s, ""); } public void load(InputStream in) throws Exception { try { C.Loading=true; load(in, true, true); C.Loading=false; } catch (Exception e) { C.Loading=false; throw e; } } public String getComment() { return C.getComment(); } public void setComment(String s) { C.setComment(s); } public String getJobComment() { return C.getJobComment(); } public void setJobComment(String s) { C.setJobComment(s); } /** * This can be used to set a frame window for the error dialogs that * the canvas my display. */ public void setFrame(Frame f) { F=f; } public Frame getFrame() { return F; } /** * Maginify the view by the specified factor. */ public void magnify(double f) { ZoomerTool.initNonDraggableObjects(C); C.setXYW(C.getX(), C.getY(), C.getW()*f); ZoomerTool.zoomNonDraggableObjectsBy(C, f); recompute(); validate(); repaint(); } /** * Shift the view with these deltas. */ public void shift(double dx, double dy) { ZoomerTool.initNonDraggableObjects(C); C.setXYW(C.getX()+dx*C.getW(), C.getY()+dy*C.getW(), C.getW()); ZoomerTool.shiftNonDraggableObjectsBy(C, dx*C.getW(), dy*C.getW()); recompute(); validate(); repaint(); } /** * Tracker routines: * Call the OC (must be a TrackPainter) to paint the object track. */ public void paintTrack(MyGraphics g) { if (!(OC instanceof TrackPainter)) { return; } ((TrackPainter) OC).paint(g, this); } /** * Run through the construction to update all object texts. This * should be called, whenever the name of an item was changed. It * will recreate only those texts, which contain the old name. */ public void updateTexts(ConstructionObject o, String oldname) { C.updateTexts(o, oldname); } public Construction getConstruction() { return C; } public void setShowGrid(boolean flag) { ShowGrid=flag; repaint(); } public void toggleShowGrid() { if (ShowGrid&&!AxesOnly) { AxesOnly=true; } else if (ShowGrid) { ShowGrid=false; } else { AxesOnly=false; ShowGrid=true; } Global.setParameter("showgrid", ShowGrid); Global.setParameter("axesonly", AxesOnly); repaint(); } public boolean showGrid() { return ShowGrid; } /** * Sets the job parameters for the current construction (the last * item to display and the target item). */ public void setJob(ConstructionObject last) { Job=true; Last=last.getName(); Targets=new Vector(); } public void addJobTarget(ConstructionObject target, boolean visible) { if (visible) { Targets.addElement("~"+target.getName()); } else { Targets.addElement(target.getName()); } } public void clearTargets() { Targets=new Vector(); } /** * Cancel the job state o fthe current construction. */ public void clearJob() { Job=false; } /** * Test, if the construction is a valid job. */ public boolean isJob() { Enumeration e=Targets.elements(); while (e.hasMoreElements()) { String s=(String) e.nextElement(); if (C.find(s)==null&& (!s.startsWith("~")||C.find(s.substring(1))==null)) { return false; } } return Job&&C.find(Last)!=null&&Targets.size()>0; } public boolean inTargets(String s) { Enumeration e=Targets.elements(); while (e.hasMoreElements()) { if (((String) e.nextElement()).equals(s)) { return true; } } return false; } /** * * This will display the construction as a job (if it is a job). * The construction is copied up to the last element. The copies are * marked as keep objects, so that they cannot be changed. The last * object is marked as the target object, so that it displays in a * special color. * * The function can also flip back to the original construction (flag=false). */ public void displayJob(boolean flag) { clearSelected(); if (!(OC instanceof SaveJob)) { OC.reset(this); } if (flag) // diplay the job { C.setOriginalOrder(true); if (displayJob()||!isJob()) { return; } Construction Cnew=new Construction(); Cnew.setXYW(C.getX(), C.getY(), C.getW()); Enumeration e=C.elements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); o.setJobTarget(true); o.setJobTarget(false); } e=C.elements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); Cnew.add(o); o.setKeep(true); if (inTargets(o.getName())||inTargets("~"+o.getName())) { o.setJobTarget(true); } if (o.getName().equals(Last)) { break; } } while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (inTargets(o.getName())||inTargets("~"+o.getName())) { Cnew.add(o); o.setKeep(true); o.setJobTarget(true); } } int n=0; e=Targets.elements(); while (e.hasMoreElements()) { String s=(String) e.nextElement(); if (!s.startsWith("~")) { n++; } } TargetO=new ConstructionObject[n]; TargetS=new ConstructionObject[n]; n=0; e=Targets.elements(); while (e.hasMoreElements()) { String s=(String) e.nextElement(); if (!s.startsWith("~")) { TargetO[n]=Cnew.find(s); TargetS[n]=null; n++; } } COriginal=C; C=Cnew; C.addAddEventListener(this); C.setComment(COriginal.getJobComment()); recompute(); reloadCD(); repaint(); } else // display the orginal construction again { if (!displayJob()) { return; } C.removeAddEventListener(this); C=COriginal; COriginal=null; Enumeration e=C.elements(); while (e.hasMoreElements()) { ConstructionObject o= (ConstructionObject) e.nextElement(); o.setKeep(false); o.setJobTarget(false); } C.setOriginalOrder(false); recompute(); reloadCD(); repaint(); } } /** * If the job is solved, this function removes all restrictions. */ public void freeJob() { Enumeration e=C.elements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); o.setKeep(false); o.setJobTarget(false); repaint(); } } /** * Test if the canvas displays a job right now. */ public boolean displayJob() { return COriginal!=null; } // The following functions change the default values of some objects. public void setShowColor(int i) { ShowColor=i; repaint(); } public int getShowColor() { return ShowColor; } public ObjectConstructor getOC() { return OC; } // Macros: Vector Macros=new Vector(); public Vector getMacros() { return Macros; } public boolean haveMacros() { return Macros.size()>0; } public boolean haveNonprotectedMacros() { Enumeration e=Macros.elements(); while (e.hasMoreElements()) { MacroItem m=(MacroItem) e.nextElement(); if (!m.M.isProtected()) { return true; } } return false; } /** * Define a macro. There must be parameters (but not necessarily * targets). * The function will display the macro dialog. It will create a new * macro, when the dialog was not aborted. The macro is kept in the * Macros vector by name. */ boolean defineMacro() { clearSelected(); // Read the list of Parameters and Targets from the // construction. This list is filled by the SetParameter and // SetTargets constructors. Vector P=C.getParameters(); if (P.size()==0) // no parameters { warning(Zirkel.name("definemacro.noparams")); return false; } // Display the macro creation dialog to the user. DefineMacro d=new DefineMacro(F, this); d.center(getFrame()); d.setVisible(true); // Aborted? if (d.isAborted()||d.getName().equals("")) { return false; } // Define a marco with the name, the comment and the paramters. Macro m=new Macro(this, d.getName(), d.getComment(), d.getParams()); // If there are no targets, determine everything as // constructed by the paramaters, else only the things needed // to get the targets. try { defineMacro(C, m, d.targetsOnly(), d.invisible(), d.getPromptFor(), d.hideduplicates()); } catch (ConstructionException e) { warning(e.getDescription()); OC.reset(this); return false; } storeMacro(m, false); OC.reset(this); return true; } /** * Copy a macro with fixed parameters from another macro. */ public Macro copyMacro(Macro m, String name, boolean fixed[]) { try { Macro macro=(Macro) (m.clone()); macro.Name=name; boolean f[]=new boolean[fixed.length]; for (int i=0; i0&&!c.ShowAll, c.SuperHide, c.getPromptFor(), true); storeMacro(m, true); } /* Store the macro in the macro list (or replace the old macro with the same name @param all Replace the macro without asking. */ public void storeMacro(Macro m, boolean all) { int i=0; for (i=0; i=Macros.size()) { appendMacro(m); } } public boolean ProtectMacros=false; public MacroMenu MM=null; public void appendMacro(Macro m) { if (!ReadOnly) { if (ProtectMacros) { m.setProtected(true); } if (MM==null) { MM=new MacroMenu(PM, "", null); } MacroItem mi=MM.add(m, m.getName()); if (mi.I!=null) { mi.I.addActionListener(this); } Macros.addElement(mi); } else { if (MM==null) { MM=new MacroMenu(null, "", null); } MacroItem mi=MM.add(m, m.getName()); if (mi.I!=null) { mi.I.addActionListener(this); } Macros.addElement(mi); } } /** * Replace the macro item number i with m. * @return User wants to replace all subsequent macros. */ public boolean replaceMacro(Macro m, int i, boolean all) { MacroItem e=(MacroItem) Macros.elementAt(i); if (all) // don't ask { Macros.setElementAt(new MacroItem(m, e.I), i); return true; } else // ask { ReplaceMacroQuestion d=new ReplaceMacroQuestion(getFrame(), m); d.center(getFrame()); d.setVisible(true); if (d.isNo()) { return false; } MacroItem newitem=new MacroItem(m, e.I); MM.replace((MacroItem) Macros.elementAt(i), newitem); Macros.setElementAt(newitem, i); return d.isAll(); } } public String MacroCurrentComment; /** * The user has to choose from a list of macros (for running). */ public Macro chooseMacro() { if (Macros.size()==0) { warning(Zirkel.name("definemacro.nomacro")); return null; } MacroSelectDialog d=new MacroSelectDialog(getFrame(), MM, false); d.setVisible(true); return d.getMacro(); } /** * The user can choose from a list of macros (for saving). * @return A vector of selected Macros. */ public Vector chooseMacros() { if (Macros.size()==0) { warning(Zirkel.name("definemacro.nomacro")); return null; } MacroSelectDialog d= new MacroSelectDialog(getFrame(), MM, true); d.setVisible(true); return d.getMacros(); } /** * Run a macro by name. */ public Macro chooseMacro(String name) { Enumeration e=Macros.elements(); while (e.hasMoreElements()) { Macro m=((MacroItem) e.nextElement()).M; if (m.getName().equals(name)) { return m; } } return null; } public void deleteMacros(Vector v) { Enumeration e=v.elements(); while (e.hasMoreElements()) { MacroItem m=(MacroItem) e.nextElement(); deleteMacro(m); } } public void deleteMacro(MacroItem m) { Macros.removeElement(m); if (m.I!=null) { m.I.removeActionListener(this); MM.remove(m); } } public void clearMacros() { Enumeration e=Macros.elements(); while (e.hasMoreElements()) { MacroItem m=(MacroItem) e.nextElement(); if (m.I!=null) { m.I.removeActionListener(this); MM.remove(m); } } Macros.removeAllElements(); } public void clearNonprotectedMacros() { Vector V=new Vector(); Enumeration e=Macros.elements(); while (e.hasMoreElements()) { MacroItem m=(MacroItem) e.nextElement(); if (!m.M.isProtected()) { V.addElement(m); } } deleteMacros(V); } public void clearProtectedMacros() { Vector V=new Vector(); Enumeration e=Macros.elements(); while (e.hasMoreElements()) { MacroItem m=(MacroItem) e.nextElement(); if (m.M.isProtected()) { V.addElement(m); } } deleteMacros(V); } public void protectMacros() { Enumeration e=Macros.elements(); while (e.hasMoreElements()) { MacroItem m=(MacroItem) e.nextElement(); m.M.setProtected(true); } } public void renameMacro(Macro macro, String name) { Enumeration e=Macros.elements(); while (e.hasMoreElements()) { MacroItem m=(MacroItem) e.nextElement(); if (m.I!=null&&m.M==macro) { deleteMacro(m); break; } } macro.setName(name); appendMacro(macro); } MacroBar MBar; public void setMacroBar(MacroBar m) { MBar=m; } public void updateMacroBar() { // if (MBar!=null) { // MBar.update(Macros); // } } // For the prompt in the status line: TextField TF; public void setTextField(TextField t) { TF=t; } public void setPrompt(String s) { if (TF!=null) { TF.setText(s); } } // Loading: public void loadRun(InputStream is) { BufferedReader in=new BufferedReader( new InputStreamReader(is)); String s="", comment=""; while (true) { try { s=in.readLine(); if (s==null) { break; } int n; if ((n=s.indexOf("//"))>=0) { comment=s.substring(n+2).trim(); s=s.substring(0, n); } else { comment=""; } s=s.trim(); int k=0; if ((k=Interpreter.startTest("macro", s))>=0) { loadMacro(in, s.substring(k).trim()); } else if (!s.equals("")) { C.interpret(this, s, comment); } } catch (ConstructionException e) { warning(e.getDescription()+" --- "+s); break; } catch (Exception e) { warning(e.toString()+" --- "+s); e.printStackTrace(); break; } } C.updateCircleDep(); } public void loadMacro(BufferedReader in, String name) throws ConstructionException { Construction c=new Construction(); c.clear(); String s="", comment="", macrocomment=""; boolean inComment=true, newLine=true; while (true) { try { s=in.readLine(); if (s==null) { throw new ConstructionException( Zirkel.name("exception.macroend")); } s=s.trim(); int n=s.indexOf("//"); if (inComment&&n==0) { String h=s.substring(n+2).trim(); if (newLine) { macrocomment=macrocomment+h; newLine=false; } else { if (h.equals("")) { macrocomment=macrocomment+"\n"; newLine=true; } else { macrocomment=macrocomment+" "+h; newLine=false; } } continue; } inComment=false; if (n>=0) { comment=s.substring(n+2).trim(); s=s.substring(0, n); } else { comment=""; } s=s.trim(); if (s.equals(Zirkel.name("end"))) { break; } if (s.toLowerCase().equals("end")) { break; } if (!s.equals("")) { c.interpret(this, s, comment); } } catch (InvalidException e) { } catch (ConstructionException e) { throw new ConstructionException(e.getDescription()+" --- "+s); } catch (IOException e) { warning(e.toString()); return; } } defineMacro(name, macrocomment, c); } public double getGridSize() { double gridsize=Math.pow(10, Math.floor( Math.log(C.getW()*2)/Math.log(10)))/10; if (C.getW()*2/gridsize>=30) { gridsize*=5; } if (C.getW()*2/gridsize<10) { gridsize/=2; } return gridsize; } public LatexOutput createBB(String filename, int w, int h, double dpi) { try { String path=""; if (Global.getParameter("options.fullpath", true)) { path=FileName.pathAndSeparator(filename); } PrintWriter out= new PrintWriter(new FileOutputStream( path+FileName.purefilename(filename)+".bb")); out.println("%%BoundingBox: 0 0 "+w+" "+h); out.close(); out=new PrintWriter(new FileOutputStream( path+FileName.purefilename(filename)+".ztx")); LatexOutput lout=new LatexOutput(out); lout.open(w, h, dpi, path+FileName.filename(filename)); return lout; } catch (Exception e) { warning(e.toString()); } return null; } /** * Save picture as PNG on file or copy to clipboard * @param filename ("" for clipboard) * @return not failed */ synchronized public boolean savePNG(String filename, boolean latex) { LatexOutput lout=null; if (IW==0||I==null) { return false; } if (Global.getParameter("printscale.middle", true)) { savePreviewAsPNG(filename); return true; } double dpi=Global.getParameter("printscale.dpi", 300); if (!Global.getParameter("printscale.sizes", false)) { int w=Global.getParameter("printscale.w", IW); int h=Global.getParameter("printscale.h", IH); if (latex) { lout=createBB(filename, w, h, dpi); } int IWold=IW; IW=w; IH=h; Scale=((double) IW)/IWold; I=createImage(IW, IH); IG=new MyGraphics13(I.getGraphics(), Scale, this, lout); IG.setSize(w, h); double pointsize=PointSize*Scale; double fontsize=FontSize*Scale; if (Scale<1) { if (Global.getParameter("options.minpointsize", false)&& pointsize. */ package rene.zirkel; import java.awt.Image; import rene.zirkel.macro.Macro; public interface ZirkelCanvasInterface { public void replayChosen(); public void runMacro(Macro m); public boolean enabled(String tool); public String loadImage(); public Image doLoadImage(String filename); } ./src/rene/zirkel/CVS/RevisionCache/DemoRunner.java#1.40000644000175000017500000001635011314631067021364 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel; import java.awt.Label; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.InputStream; import java.net.URL; import java.util.Enumeration; import rene.util.xml.XmlReader; import rene.util.xml.XmlTag; import rene.util.xml.XmlTagPI; import rene.util.xml.XmlTagText; import rene.util.xml.XmlTree; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.SegmentObject; import rene.zirkel.tools.AnimatorTool; import rene.zirkel.tools.ObjectTracker; import rene.zirkel.tools.Tracker; public class DemoRunner implements Runnable, MouseListener { ZirkelCanvas ZC; ZirkelApplet ZA; boolean Stopped = false, Continue = false, Hold = false; int delay = 10; Label L; XmlTree Tree; public DemoRunner(final ZirkelCanvas zc, final ZirkelApplet za, final String filename, final Label label) { ZC = zc; ZA = za; L = label; try { URL url; if (filename.toUpperCase().startsWith("HTTP")) url = new URL(filename); else url = new URL(ZA.getCodeBase(), filename); final InputStream in = url.openStream(); final XmlReader xml = new XmlReader(); xml.init(in); XmlTree tree = xml.scan(); Enumeration e = tree.getContent(); while (e.hasMoreElements()) { tree = (XmlTree) e.nextElement(); if (tree.getTag() instanceof XmlTagPI) continue; if (!tree.getTag().name().equals("Demo")) throw new ConstructionException("Demo tag not found"); else { final XmlTag tag = tree.getTag(); if (tag.hasParam("delay")) { try { delay = Integer.parseInt(tag.getValue("delay")); } catch (final Exception ex) { } } break; } } Tree = tree; e = tree.getContent(); if (!e.hasMoreElements()) return; while (e.hasMoreElements()) { tree = (XmlTree) e.nextElement(); if (!tree.getTag().name().equals("File")) throw new ConstructionException("Illegal tag " + tree.getTag().name()); } in.close(); } catch (final ConstructionException e) { label.setText(e.toString()); } catch (final Exception e) { label.setText("Error loading " + filename); } zc.addMouseListener(this); new Thread(this).start(); } public void run() { Enumeration e = Tree.getContent(); ZC.setFrozen(true); while (true) { Continue = false; final int D = delay; if (e.hasMoreElements()) { try { XmlTree tree = (XmlTree) e.nextElement(); final XmlTag tag = tree.getTag(); final String filename = tag.getValue("name"); URL url; if (filename.toUpperCase().startsWith("HTTP")) url = new URL(filename); else url = new URL(ZA.getCodeBase(), filename); final InputStream in = url.openStream(); ZC.clearMacros(); ZC.load(in); in.close(); ZC.recompute(); if (tag.hasParam("delay")) { try { delay = Integer.parseInt(tag.getValue("delay")); } catch (final Exception ex) { } } final Enumeration en = tree.getContent(); while (en.hasMoreElements()) { tree = (XmlTree) en.nextElement(); if (tree.getTag() instanceof XmlTagText) { L .setText(((XmlTagText) tree.getTag()) .getContent()); } } startZC(); } catch (final Exception ex) { L.setText("Error loading file!"); } try { for (int i = 0; i < delay * 2 || Hold; i++) { Thread.sleep(500); if (i == 0) { ZC.setFrozen(false); ZC.repaint(); } if (Stopped) return; if (Continue) { Hold = false; break; } } ZC.setFrozen(true); } catch (final Exception ex) { } delay = D; } else { e = Tree.getContent(); } } } AnimatorTool A; public void startZC() { final Construction C = ZC.getConstruction(); ZC.setInteractive(false); if (C.TrackP != null) { try { final ConstructionObject P = C.find(C.TrackP); if (!((P instanceof PointObject) || (P instanceof PrimitiveLineObject))) throw new ConstructionException(""); final ConstructionObject po[] = new ConstructionObject[C.TrackPO .size()]; for (int i = 0; i < po.length; i++) { final ConstructionObject o = C.find((String) C.TrackPO .elementAt(i)); if (o == null || !((o instanceof PointObject) || (o instanceof PrimitiveLineObject) || (o instanceof PointObject))) throw new ConstructionException(""); po[i] = o; } final PointObject PM = (PointObject) C.find(C.TrackPM); if (C.TrackO != null) { final ConstructionObject O = C.find(C.TrackO); if (P == null || PM == null || O == null) throw new ConstructionException(""); final ObjectTracker ot = new ObjectTracker(P, PM, O, ZC, C.Animate, C.Paint, po); if (C.Animate) ot.Interactive = false; ot.setOmit(C.Omit); ZC.setTool(ot); ZC.allowRightMouse(false); ZC.validate(); ZC.repaint(); } else { if (P == null) throw new ConstructionException(""); ZC.setTool(new Tracker(P, po)); if (PM != null) PM.setSelected(true); ZC.validate(); ZC.repaint(); } } catch (final Exception e) { e.printStackTrace(); } } else if (C.AnimateP != null) { try { final PointObject P = (PointObject) C.find(C.AnimateP); if (P == null || !P.moveable()) throw new ConstructionException(""); final Enumeration e = C.AnimateV.elements(); while (e.hasMoreElements()) { final String s = (String) e.nextElement(); final ConstructionObject o = C.find(s); if (o == null || !(o instanceof SegmentObject || o instanceof PrimitiveCircleObject || o instanceof PointObject)) throw new ConstructionException(""); } ZC.setTool(A = new AnimatorTool(P, C.AnimateV, ZC, C.AnimateNegative, C.AnimateOriginal, C.AnimateDelay)); ZC.allowRightMouse(false); A.setInteractive(false); } catch (final Exception e) { e.printStackTrace(); } } ZC.repaint(); } public void stop() { Stopped = true; } public void mousePressed(final MouseEvent e) { } public void mouseReleased(final MouseEvent e) { } public void mouseEntered(final MouseEvent e) { } public void mouseExited(final MouseEvent e) { } public void mouseClicked(final MouseEvent e) { if (e.isMetaDown()) Hold = true; else Continue = true; } } ./src/rene/zirkel/CVS/RevisionCache/ZirkelApplet.java#1.70000644000175000017500000014623011170357756021732 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel; import java.applet.AppletContext; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Frame; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.Image; import java.awt.Label; import java.awt.MediaTracker; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.URL; import java.util.Enumeration; import java.util.Locale; import java.util.StringTokenizer; import java.util.zip.GZIPInputStream; import javax.swing.JPanel; import rene.dialogs.Warning; import rene.gui.DoActionListener; import rene.gui.Global; import rene.gui.HistoryTextField; import rene.gui.IconBar; import rene.gui.IconBarListener; import rene.gui.Panel3D; import rene.util.FileName; import rene.util.parser.StringParser; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.constructors.AngleConstructor; import rene.zirkel.constructors.AreaConstructor; import rene.zirkel.constructors.BoundedPointConstructor; import rene.zirkel.constructors.Circle3Constructor; import rene.zirkel.constructors.CircleConstructor; import rene.zirkel.constructors.ExpressionConstructor; import rene.zirkel.constructors.ImageConstructor; import rene.zirkel.constructors.IntersectionConstructor; import rene.zirkel.constructors.LineConstructor; import rene.zirkel.constructors.MidpointConstructor; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.constructors.ParallelConstructor; import rene.zirkel.constructors.PlumbConstructor; import rene.zirkel.constructors.PointConstructor; import rene.zirkel.constructors.QuadricConstructor; import rene.zirkel.constructors.RayConstructor; import rene.zirkel.constructors.SegmentConstructor; import rene.zirkel.constructors.TextConstructor; import rene.zirkel.dialogs.CommentDialog; import rene.zirkel.dialogs.Replay; import rene.zirkel.listener.DoneListener; import rene.zirkel.listener.StatusListener; import rene.zirkel.macro.Macro; import rene.zirkel.macro.MacroBar; import rene.zirkel.macro.MacroItem; import rene.zirkel.macro.MacroRunner; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.SegmentObject; import rene.zirkel.objects.TextObject; import rene.zirkel.tools.AnimatorTool; import rene.zirkel.tools.BreakpointAnimator; import rene.zirkel.tools.DeleteTool; import rene.zirkel.tools.DrawerTool; import rene.zirkel.tools.EditTool; import rene.zirkel.tools.HiderTool; import rene.zirkel.tools.MoverTool; import rene.zirkel.tools.ObjectTracker; import rene.zirkel.tools.RenamerTool; import rene.zirkel.tools.ReorderTool; import rene.zirkel.tools.SaveJob; import rene.zirkel.tools.SetParameterTool; import rene.zirkel.tools.SetTargetsTool; import rene.zirkel.tools.Tracker; import rene.zirkel.tools.ZoomerTool; import eric.JLocusObjectTracker; public class ZirkelApplet extends javax.swing.JApplet implements IconBarListener, StatusListener, KeyListener, DoneListener, DoActionListener, ZirkelCanvasInterface { /** * */ private static final long serialVersionUID=1L; ZirkelCanvas ZC; IconBar IA, IB, IC; MacroBar IM; String filename="test.zir"; Label Status; Color C, CC; Frame F; String FirstConstructor="point", Tools="all", Options=""; int CurrentTool=0; HistoryTextField Input; ConstructionObject Last=null; boolean edit; boolean jumptostart; // for applets with replay buttons and start() public String JScontrol() { String exp=""; try { exp=String.valueOf(ZC.getConstruction().find("jscode").getValue()); } catch (final Exception ex) { } return exp; } public void JSsend(final String s) { // if it's a construction under xml form : if (s.startsWith("<")) { putConstruction(s); } else { ZC.JSsend(s); repaint(); } } public String JSreceive(final String s) { if (s.equals("construction")) { return getConstruction(); } else { return ZC.JSreceive(s); } } @Override public void paint(final Graphics gc) { super.paint(gc); // ZC.recompute(); ZC.JCM.readXmlTags(); ZC.dovalidate(); ZC.repaint(); } final static public String DefaultIcons=" point line segment ray circle fixedcircle"+" parallel plumb circle3 midpoint angle fixedangle"+" move tracker objecttracker hide expression area text quadric"+" runmacro animate "; final static public String DefaultOptions=" back undo delete color type thickness"+" hidden showcolor macro grid "+" draw twolines indicate "; @Override public void init() { if (getParameter("language")!=null) { try { Locale.setDefault(new Locale(getParameter("language"), "")); } catch (final RuntimeException e) { } } Global.initBundle("rene/zirkel/docs/ZirkelProperties"); Count.resetAll(); CC=C=Global.Background; initLightColors(); initObjectKeys(); final Dimension dscreen=getToolkit().getScreenSize(); F=new Frame(); F.setSize(dscreen); if (getParameter("oldicons")==null) { Global.setParameter("iconpath", "/eric/icons/palette/"); Global.setParameter("iconsize", getParameter("smallicons")==null?32:24); Global.setParameter("icontype", "png"); } else { Global.setParameter("iconpath", "//eric/icons/palette/"); Global.setParameter("iconsize", 20); } String color=getParameter("color"); if (color!=null) { final StringParser p=new StringParser(getParameter("color")); p.replace(',', ' '); int red, green, blue; red=p.parseint(); green=p.parseint(); blue=p.parseint(); C=new Color(red, green, blue); Global.Background=C; Global.ControlBackground=C; CC=C; } color=getParameter("colorbackground"); if (color!=null) { Global.setParameter("colorbackground", color); } else { Global.removeParameter("colorbackground"); } color=getParameter("colorselect"); if (color!=null) { Global.setParameter("colorselect", color); } else { Global.removeParameter("colorselect"); } ZirkelFrame.SelectColor=Global.getParameter("colorselect", Color.red); color=getParameter("colortarget"); if (color!=null) { Global.setParameter("colortarget", color); } else { Global.removeParameter("colortarget"); } ZirkelFrame.TargetColor=Global.getParameter("colorselect", Color.pink); ZirkelFrame.initLightColors(Color.white); final String font=getParameter("font"); if (font!=null) { if (font.indexOf("bold")>=0) { Global.setParameter("font.bold", true); } if (font.indexOf("large")>=0) { Global.setParameter("font.large", true); } } if (getParameter("demo")!=null) { initDemo(); return; } String style=getParameter("style"); // On firefox mac, I don't know why, but getParameter("style") return // null // even if there is a "style" parameter tag... so : if (style==null) { if ((getParameter("tools")!=null)||(getParameter("options")!=null)) { style="icons"; } else { style="plain"; } } final boolean simple=(style.equals("plain")||style.equals("3D")||style.equals("breaks")); edit=!simple; final boolean status=(style.equals("full")||style.equals("status")); final boolean icons=(style.equals("full")||style.equals("nonvisual")||style.equals("icons")); final boolean breaks=(style.equals("breaks")); if (getParameter("edit")!=null) { edit=true; } for (int i=0; i=0); // makeMacroBar(); if (icons) { IB=new IconBar(F); IB.setBackground(CC); IB.setIconBarListener(this); StringTokenizer t=new StringTokenizer(Tools); int count=0; while (t.hasMoreTokens()) { t.nextToken(); count++; } final String a[]=new String[count]; t=new StringTokenizer(Tools); count=0; while (t.hasMoreTokens()) { a[count++]=t.nextToken(); } if (count>0) { FirstConstructor=a[0]; } IB.addToggleGroupLeft(a); // IB.addSeparatorLeft(); if (Options.indexOf("twolines")>=0||Options.indexOf("defaults")>=0) { IA=new IconBar(F); IA.setBackground(CC); IA.setIconBarListener(this); setIA(IA, Options); final JPanel north=new JPanel(); north.setBackground(CC); north.setLayout(new GridLayout(0, 1)); north.add(IA); north.add(IB); if (IM!=null) { north.add(IM); } getContentPane().add("North", new Panel3D(north, CC)); } else { IA=IB; setIA(IB, Options); if (IM!=null) { final JPanel north=new JPanel(); north.setBackground(CC); north.setLayout(new GridLayout(0, 1)); north.add(IA); if (IM!=null) { north.add(IM); } getContentPane().add("North", new Panel3D(north, CC)); } else { getContentPane().add("North", new Panel3D(IB, CC)); } } } else { IA=IB=null; } rene.zirkel.Zirkel.IsApplet=true; Global.setParameter("options.choice", true); Global.setParameter("options.indicate", true); Global.setParameter("options.indicate.simple", false); Global.setParameter("options.intersection", false); Global.setParameter("options.pointon", false); eric.JMacrosTools.initObjectsProperties(); if (getParameter("selectionsize")!=null) { try { final double x=new Double(getParameter("selectionsize")).doubleValue(); Global.setParameter("selectionsize", x); } catch (final Exception e) { } } ZC=new ZirkelCanvas(!edit, !breaks, !breaks); ZC.addMouseListener(ZC); ZC.addMouseMotionListener(ZC); ZC.setBackground(Global.getParameter("colorbackground", C)); ZC.setFrame(F); ZC.setZirkelCanvasListener(this); if (getParameter("showhidden")!=null) { ZC.setShowHidden(true); } if (style.equals("plain")) { getContentPane().add("Center", ZC); } else { getContentPane().add("Center", new Panel3D(ZC, ZC.getBackground())); } ZC.addStatusListener(this); ZC.addKeyListener(this); setShowNames(false); if (status) { Status=new Label(""); Status.setBackground(CC); getContentPane().add("South", new Panel3D(Status, Status.getBackground())); } else if (style.equals("nonvisual")) { Input=new HistoryTextField(this, "Input"); ZC.setTextField(Input); ZC.Visual=false; setShowNames(true); getContentPane().add("South", new Panel3D(Input)); } try { Global.setParameter("digits.edit", Integer.parseInt(getParameter("editdigits"))); } catch (final Exception e) { } try { Global.setParameter("digits.lengths", Integer.parseInt(getParameter("displaydigits"))); } catch (final Exception e) { } try { Global.setParameter("digits.angles", Integer.parseInt(getParameter("angledigits"))); } catch (final Exception e) { } setOption("movename"); setOption("movefixname"); ZC.updateDigits(); setOption("nopopupmenu"); setOption("nomousezoom"); try { Global.setParameter("minpointsize", new Double( getParameter("minpointsize")).doubleValue()); } catch (final Exception e) { } try { Global.setParameter("minlinesize", new Double( getParameter("minlinesize")).doubleValue()); } catch (final Exception e) { } try { Global.setParameter("minfontsize", new Double( getParameter("minfontsize")).doubleValue()); } catch (final Exception e) { } try { Global.setParameter("arrowsize", new Double( getParameter("arrowsize")).doubleValue()); } catch (final Exception e) { } try { final String grid=getParameter("grid"); ZC.ShowGrid=!grid.equals("none"); Global.setParameter("grid.fine", grid.equals("coordinates")); if (getParameter("snap").equals("left")) { Global.setParameter("grid.leftsnap", true); } } catch (final Exception e) { } if (getParameter("interactive")!=null&&getParameter("interactive").equals("false")) { ZC.setInteractive(false); } boolean job=false; ZC.IW=getSize().width; ZC.IH=getSize().height; if (getParameter("germanpoints")!=null&&getParameter("germanpoints").equals("true")) { Global.setParameter("options.germanpoints", true); } try { final InputStream o=getClass().getResourceAsStream("/builtin.mcr"); ZC.ProtectMacros=true; ZC.load(o, false, true); ZC.ProtectMacros=false; o.close(); ZC.PM.removeAll(); } catch (final Exception e) { } filename=getParameter("file"); if (filename==null) { filename=getParameter("job"); job=true; } if (filename!=null) { boolean firsttry=true; while (true) { try { URL url; if (filename.toUpperCase().startsWith("HTTP")) { url=new URL(firsttry?FileName.toURL(filename) :filename); } else { url=new URL(getCodeBase(), firsttry?FileName.toURL(filename):filename); } ZC.clear(); InputStream in=url.openStream(); if (ZirkelFrame.isCompressed(filename)) { in=new GZIPInputStream(in); } showStatus(Global.name("loading")); ZC.load(in); toggleGrid(ZC.ShowGrid); if (job) { ZC.displayJob(true); ZC.setDoneListener(this); } if (icons) { iconPressed(FirstConstructor); } in.close(); if (getParameter("background")!=null) { final Image i=getToolkit().getImage( new URL(getCodeBase(), getParameter("background"))); final MediaTracker mt=new MediaTracker(this); mt.addImage(i, 0); mt.waitForID(0); if (mt.checkID(0)&&!mt.isErrorAny()) { ZC.setBackground(i); } } ZC.repaint(); } catch (final Exception e) { if (firsttry) { firsttry=false; continue; } final Warning w=new Warning(F, FileName.chop(32, ""+e, 64), Zirkel.name("message"), true); w.center(F); w.setVisible(true); showStatus(""+e); e.printStackTrace(); System.out.println(e); } break; } } if (breaks) { IC=new IconBar(F); IC.setBackground(CC); IC.setIconBarListener(this); IC.addLeft("allback"); if (haveBreaks()) { IC.addLeft("nextbreak"); } else { IC.addLeft("oneforward"); } IC.addLeft("allforward"); final javax.swing.JPanel pic=new Panel3D(IC); getContentPane().add("South", pic); IC.setEnabled("nextbreak", false); IC.setEnabled("oneforward", false); IC.setEnabled("allforward", false); ZC.getConstruction().setOriginalOrder(true); jumptostart=(getParameter("jumptostart")!=null); } if (getParameter("restrictedmove")!=null) { Global.setParameter("restrictedmove", true); } if (getParameter("noconfirmation")!=null) { Global.setParameter("confirmation", false); } if (IA!=null) { settype(2); } // IB.forceRepaint(); // IA.forceRepaint(); ZC.setMacroBar(IM); ZC.updateMacroBar(); ZC.recompute(); // Very weird thing which cause applet to be displayed on firefox mac : ZC.setSize(ZC.getSize().width+1, ZC.getSize().height+1); ZC.setSize(ZC.getSize().width-1, ZC.getSize().height-1); ZC.JCM.hideHandles(null); // ZC.dovalidate(); // ZC.repaint(); } public void setOption(final String option) { try { Global.setParameter("options."+option, getParameter(option).equals("true")); } catch (final Exception e) { } } DemoRunner DR=null; void initDemo() { getContentPane().setLayout(new BorderLayout()); ZC=new ZirkelCanvas(false, false, false); ZC.setBackground(Global.getParameter("colorbackground", C)); ZC.setFrame(F); ZC.setZirkelCanvasListener(this); if (getParameter("showhidden")!=null) { ZC.setShowHidden(true); } getContentPane().add("Center", new Panel3D(ZC, ZC.getBackground())); Status=new Label("", Label.CENTER); Status.setBackground(C); getContentPane().add("South", new Panel3D(Status, Status.getBackground())); } void setIA(final IconBar IA, final String set) { if (set.indexOf("rename")>=0) { IA.addToggleLeft("rename"); } if (set.indexOf("back")>=0) { IA.addLeft("back"); } if (set.indexOf("delete")>=0) { IA.addToggleLeft("delete"); } if (set.indexOf("undo")>=0) { IA.addLeft("undo"); } if (set.indexOf("hidden")>=0) { IA.addOnOffLeft("hidden"); } if (set.indexOf("showcolor")>=0) { IA.addMultipleIconLeft("showcolor", ZirkelFrame.Colors.length); } if (set.indexOf("color")>=0) { IA.addMultipleIconLeft("color", 6); } if (set.indexOf("type")>=0) { IA.addMultipleIconLeft("type", 6); } if (set.indexOf("thickness")>=0) { IA.addMultipleIconLeft("thickness", 3); } if (set.indexOf("partial")>=0) { IA.addOnOffLeft("partial"); } if (set.indexOf("plines")>=0) { IA.addOnOffLeft("plines"); } if (set.indexOf("arrow")>=0) { IA.addOnOffLeft("arrow"); } if (set.indexOf("showname")>=0) { IA.addOnOffLeft("showname"); } if (set.indexOf("showvalue")>=0) { IA.addOnOffLeft("showvalue"); } if (set.indexOf("edit")>=0) { IA.addToggleLeft("edit"); } if (set.indexOf("obtuse")>=0) { IA.addOnOffLeft("obtuse"); } if (set.indexOf("solid")>=0) { IA.addOnOffLeft("solid"); } if (set.indexOf("grid")>=0) { IA.addOnOffLeft("grid"); } if (set.indexOf("macro")>=0) { IA.addMultipleToggleIconLeft("macro", 3); } if (set.indexOf("replay")>=0) { IA.addLeft("replay"); } if (set.indexOf("zoom")>=0) { IA.addToggleLeft("zoom"); } if (set.indexOf("comment")>=0) { IA.addLeft("comment"); } if (set.indexOf("function")>=0) { IA.addLeft("function"); } if (set.indexOf("draw")>=0) { IA.addToggleLeft("draw"); } } public void makeMacroBar() { if (Global.getParameter("macrobar", true)) { IM=new MacroBar(F); IM.addKeyListener(this); IM.setIconBarListener(this); IM.setBackground(CC); } } public void updateMacroBar() { ZC.updateMacroBar(); } Replay RD=null; public void iconPressed(final String o) { if (RD!=null) { RD.doclose(); } ZC.requestFocus(); if (IA!=null&&IA.isControlPressed()) { if (o.equals("edit")) { if (CurrentTool!=ZirkelFrame.NEdit) { IA.setState("edit", false); } ZC.editLast(); ZC.repaint(); } IA.clearShiftControl(); return; } for (int i=0; i=0) { setcolor(n); } } else if (o.equals("showcolor")) { final int n=IA.getMultipleState("showcolor"); if (n>=0) { showcolor(n); } } else if (o.equals("showname")) { setShowNames(IA.getState("showname")); } else if (o.equals("obtuse")) { setObtuse(IA.getState("obtuse")); } else if (o.equals("solid")) { setSolid(IA.getState("solid")); } else if (o.equals("showvalue")) { setShowValues(IA.getState("showvalue")); } else if (o.equals("longnames")) { setLongNames(IA.getState("longnames")); } else if (o.equals("grid")) { toggleGrid(IA.getState("grid")); } else if (o.equals("comment")) { showcomment(); } else if (o.equals("function")) { if (IA.isControlPressed()) { ZC.createFunction(); } else { ZC.createCurve(); } } else if (o.equals("type")) { final int n=IA.getMultipleState("type"); if (n>=0) { settype(n); } } else if (o.equals("thickness")) { final int n=IA.getMultipleState("thickness"); if (n>=0) { setcolortype(n); } } else if (o.equals("edit")) { settool(ZirkelFrame.NEdit); } else if (o.equals("back")) { ZC.back(); ZC.repaint(); } else if (o.equals("undo")) { ZC.undo(); ZC.repaint(); } else if (o.equals("replay")) { replay(); } else if (o.equals("macro")) { final int n=IA.getMultipleState("macro"); switch (n) { case 1: settool(ZirkelFrame.NParameters); break; case 2: settool(ZirkelFrame.NTargets); break; case 0: definemacro(); break; } IA.setState("macro", true); } else if (o.equals("allback")) { if (Last!=null&&Last instanceof TextObject) { ((TextObject) Last).setDoShow(false); } final Enumeration e=ZC.getConstruction().elements(); if (e.hasMoreElements()) { Last=(ConstructionObject) e.nextElement(); ZC.paintUntil(Last); if ((Last instanceof TextObject)&&Last.valid()&&!Last.isSuperHidden()) { ((TextObject) Last).setDoShow(true); } } IC.setEnabled("allforward", true); IC.setEnabled("nextbreak", true); IC.setEnabled("oneforward", true); IC.setEnabled("allback", false); if (haveBreaks()&&!Last.isBreak()) { iconPressed("nextbreak"); } } else if (o.equals("allforward")) { if (Last!=null&&Last instanceof TextObject) { ((TextObject) Last).setDoShow(false); } ZC.paintUntil(null); Last=null; IC.setEnabled("allforward", false); IC.setEnabled("nextbreak", false); IC.setEnabled("oneforward", false); IC.setEnabled("allback", true); } else if (o.equals("nextbreak")) { if (Last!=null&&Last instanceof TextObject) { ((TextObject) Last).setDoShow(false); } final Enumeration e=ZC.getConstruction().elements(); outer: while (e.hasMoreElements()) { final ConstructionObject next=(ConstructionObject) e.nextElement(); if (next==Last) { while (e.hasMoreElements()) { Last=(ConstructionObject) e.nextElement(); if (Last==null||Last.isBreak()) { break outer; } } } } IC.setEnabled("allback", true); if ((Last instanceof TextObject)&&Last.valid()&&!Last.isSuperHidden()) { ((TextObject) Last).setDoShow(true); } ZC.paintUntil(Last); IC.setEnabled("allback", true); IC.setEnabled("nextbreak", e.hasMoreElements()); IC.setEnabled("allforward", e.hasMoreElements()); } else if (o.equals("oneforward")) { if (Last!=null&&Last instanceof TextObject) { ((TextObject) Last).setDoShow(false); } final Enumeration e=ZC.getConstruction().elements(); outer: while (e.hasMoreElements()) { final ConstructionObject next=(ConstructionObject) e.nextElement(); if (next==Last) { while (e.hasMoreElements()) { Last=(ConstructionObject) e.nextElement(); if (Last==null||!Last.isHidden()) { break outer; } if ((Last instanceof TextObject)&&Last.valid()&&!Last.isSuperHidden()) { ((TextObject) Last).setDoShow(true); break outer; } } } } IC.setEnabled("allback", true); ZC.paintUntil(Last); if (!e.hasMoreElements()) { ZC.paintUntil(null); IC.setEnabled("allforward", false); IC.setEnabled("oneforward", false); IC.setEnabled("allback", true); } } else if (o.startsWith("bi_")) { eric.JGlobals.runmacro(ZC, this, "@builtin@/"+o.substring(3)); } IA.clearShiftControl(); IB.clearShiftControl(); } public ObjectConstructor ObjectConstructors[]= // constructors {new PointConstructor(), new BoundedPointConstructor(), new IntersectionConstructor(), new LineConstructor(), new RayConstructor(), new SegmentConstructor(), new SegmentConstructor(true), new CircleConstructor(), new Circle3Constructor(), new CircleConstructor(true), new ParallelConstructor(), new PlumbConstructor(), new MidpointConstructor(), new AngleConstructor(), new AngleConstructor(true), new MoverTool(), new Tracker(), new ObjectTracker(), new AnimatorTool(), new ExpressionConstructor(), new AreaConstructor(), new QuadricConstructor(), new ImageConstructor(), new TextConstructor(), new HiderTool(), new JLocusObjectTracker(), new MacroRunner(), new EditTool(), new SetParameterTool(), new SetTargetsTool(), new SaveJob(), new DeleteTool(), new ReorderTool(), new DrawerTool(), new RenamerTool(), new ZoomerTool(), new BreakpointAnimator() }; public void settool(final int i) { if (IM!=null) { IM.deselectAll(); } ZC.setTool(ObjectConstructors[i]); CurrentTool=i; if (i0) { for (i=0; i0) { for (i=0; i0) { for (i=0; i0) { for (i=0; i=0) { settool(i); } return; } } switch (c) { case KeyEvent.VK_BACK_SPACE: ZC.undo(); ZC.repaint(); return; case '+': ZC.magnify(1/Math.sqrt(Math.sqrt(2))); break; case '-': ZC.magnify(Math.sqrt(Math.sqrt(2))); break; } } public void initLightColors() { final int n=ZirkelFrame.Colors.length; ZirkelFrame.LightColors=new Color[n]; final Color back=C; final int red=back.getRed(), green=back.getGreen(), blue=back.getBlue(); final double lambda=0.4; for (int i=0; i0) { ZirkelFrame.ObjectKeys[i]=shortcut.charAt(0); } } } public void notifyDone() { repaint(); try { Thread.sleep(500); } catch (final Exception e) { } if (Global.getParameter("confirmation", true)) { final Warning w=new Warning(F, Zirkel.name("done"), Zirkel.name("message"), true); w.center(F); w.setVisible(true); } final String sol=getParameter("solution"); if (sol!=null) { try { final AppletContext ac=getAppletContext(); ac.showDocument(new URL(getCodeBase(), FileName.toURL(sol))); } catch (final Exception e) { System.out.println(e); e.printStackTrace(); } } } public void showcolor(final int c) { ZC.setShowColor(c); } public void showcomment() { if (F==null) { return; } final CommentDialog d=new CommentDialog(F, ZC.getComment(), Zirkel.name("comment.title"), ZC.displayJob()); ZC.setComment(d.getText()); } public void showconstruction() { if (F==null) { return; } } public void toggleGrid() { ZC.toggleShowGrid(); } void definemacro() { if (!ZC.defineMacro()) { return; } if (ZC.getOC() instanceof SetTargetsTool) { settool(ZirkelFrame.NParameters); } else { ZC.getOC().reset(ZC); } } String OldMacro=null; public void runmacro(final boolean shift) { Macro m=null; if (OldMacro==null&&ZC.getMacros().size()==1) { m=((MacroItem) ZC.getMacros().elementAt(0)).M; } else { m=ZC.chooseMacro(OldMacro); if (!shift||m==null) { m=ZC.chooseMacro(); } } if (m==null) { settool(CurrentTool); return; } runMacro(m); } public void runMacro(final Macro m) { ((MacroRunner) ObjectConstructors[ZirkelFrame.NMacro]).setMacro(m, ZC); settool(ZirkelFrame.NMacro); if (IM!=null) { IM.select(m); } IB.setMultipleState("macro", 0); OldMacro=m.getName(); } public void setShowNames(final boolean flag) { if (IA!=null) { IA.setState("showname", flag); } Global.setParameter("options.point.shownames", flag); ZC.setShowNames(flag); } public void setObtuse(final boolean flag) { IA.setState("obtuse", flag); Global.setParameter("options.obtuse", flag); ZC.setObtuse(flag); } public void setSolid(final boolean flag) { IA.setState("solid", flag); Global.setParameter("options.solid", flag); ZC.setSolid(flag); } public void setShowValues(final boolean flag) { IA.setState("showvalue", flag); Global.setParameter("options.showvalue", flag); ZC.setShowValues(flag); } public void setLongNames(final boolean flag) { IA.setState("longnames", flag); Global.setParameter("options.longnames", flag); ZC.setLongNames(flag); } public void toggleGrid(final boolean grid) { ZC.setShowGrid(grid); if (IA!=null) { IA.setState("grid", grid); } } public void loadsettings() { setcolor(ZC.getDefaultColor()); settype(ZC.getDefaultType()); setcolortype(ZC.getDefaultColorType()); IA.setState("partial", ZC.getPartial()); IA.setState("plines", ZC.getPartialLines()); IA.setState("arrow", ZC.getVectors()); ZC.setHidden(false); } public void doAction(final String o) { if (o.equals("Input")) { try { ZC.getConstruction().interpret(ZC, Input.getText(), ""); Input.remember(); Input.setText(""); loadsettings(); ZC.validate(); ZC.getConstruction().updateCircleDep(); } catch (final ConstructionException e) { ZC.warning(e.getDescription()); } } } public void itemAction(final String o, final boolean flag) { } AnimatorTool A=null; @Override public void start() { if (getParameter("demo")!=null) { DR=new DemoRunner(ZC, this, getParameter("demo"), Status); return; } final Construction C=ZC.getConstruction(); ZC.paint(ZC.getGraphics()); ZC.allowRightMouse(true); if (C.TrackP!=null) { try { final ConstructionObject P=C.find(C.TrackP); if (!((P instanceof PointObject)||(P instanceof PrimitiveLineObject))) { throw new ConstructionException(""); } final ConstructionObject po[]=new ConstructionObject[C.TrackPO.size()]; for (int i=0; i=0) { return true; } return Tools.indexOf(function)>=0; } public boolean haveBreaks() { final Enumeration e=ZC.getConstruction().elements(); while (e.hasMoreElements()) { if (((ConstructionObject) e.nextElement()).isBreak()) { return true; } } return false; } public String loadImage() { return null; } public Image doLoadImage(final String filename) { Image i; try { i=getToolkit().getImage(new URL(getCodeBase(), filename)); final MediaTracker mt=new MediaTracker(this); mt.addImage(i, 0); mt.waitForID(0); if (mt.checkID(0)&&!mt.isErrorAny()) { return i; } } catch (final Exception e) { showStatus(e.toString()); } return null; } /** * For external scripting: Interprets a command s using the internal * construction language. (Expl: "A=point()") * * @param s * @return Command executed or not */ public boolean interpret(final String s) { try { ZC.getConstruction().interpret(ZC, s); ZC.repaint(); return true; } catch (final ConstructionException e) { return false; } } /** * For external scripting: Gets the construction as an XML stream contained * in a string. * * @return Construction. */ public String getConstruction() { try { final ByteArrayOutputStream out=new ByteArrayOutputStream(); ZC.save(out, true, false, false, ZC.getMacros(), ""); return out.toString("utf-8"); } catch (Exception ex) { return "Error"; } } /** * For external scripting: Receives the construction as an XML stream, * contained in a string. * * @param s * @return Success */ public boolean putConstruction(final String s) { try { final ByteArrayOutputStream bout=new ByteArrayOutputStream(); final PrintWriter out=new PrintWriter(new OutputStreamWriter( bout, "utf-8")); out.print(s); out.close(); final byte b[]=bout.toByteArray(); final InputStream in=new ByteArrayInputStream(b); ZC.load(in, true, true); return true; } catch (final Exception e) { e.printStackTrace(); return false; } } } ./src/rene/zirkel/CVS/RevisionCache/Zirkel.java#1.90000644000175000017500000001410111276462762020556 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel; // File: Zirkel.java import java.applet.Applet; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Color; import java.awt.GraphicsEnvironment; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileOutputStream; import java.io.PrintStream; import java.util.Locale; import java.util.Properties; import javax.swing.JFrame; import javax.swing.SwingUtilities; import rene.gui.Global; public class Zirkel extends Applet implements ActionListener { /** * */ private static final long serialVersionUID=1L; public static final long Version=110; public static boolean IsApplet=false; static public Rectangle SCREEN=new Rectangle(); static public int REALHEIGHT=0,REALTOP=0; public static void DetectDesktopSize() { if (System.getProperty("os.name").equals("Linux")) { // Very dirty trick to escape a very dirty bug on linux java : final JFrame myframe=new JFrame(); myframe.setUndecorated(true); myframe.pack(); final int s=JFrame.ICONIFIED; myframe.setExtendedState(s); myframe.setVisible(true); myframe.setExtendedState(JFrame.MAXIMIZED_BOTH); while (myframe.getExtendedState()==s) { } try { SwingUtilities.invokeAndWait(new Runnable() { public void run() { SCREEN.x=myframe.getBounds().x; SCREEN.y=myframe.getBounds().y; SCREEN.width=myframe.getBounds().width; SCREEN.height=myframe.getBounds().height; if (SCREEN.x<0) { SCREEN.x=0; } myframe.dispose(); } }); } catch (Exception ex) { } } else { // this is much better on mac and windows : GraphicsEnvironment GE=GraphicsEnvironment.getLocalGraphicsEnvironment(); SCREEN=GE.getMaximumWindowBounds(); } REALHEIGHT=SCREEN.height; REALTOP=SCREEN.y; } public static String name(final String tag, final String def) { return Global.name(tag, def); } public static String name(final String tag) { return Global.name(tag); } @Override public void init() // zirkel is called as applet { final String s=getParameter("Language"); if (s!=null) { Locale.setDefault(new Locale(s, "")); } Global.initBundle("rene/zirkel/docs/ZirkelProperties"); setLayout(new BorderLayout()); final Button StartButton=new Button("Start"); add("Center", StartButton); StartButton.addActionListener(this); IsApplet=true; if (getParameter("oldicons")!=null) { Global.setParameter("iconpath", "/rene/zirkel/icons/"); Global.setParameter("icontype", "gif"); Global.setParameter("iconsize", 20); } else { Global.setParameter("iconpath", "/rene/zirkel/newicons/"); Global.setParameter("icontype", "png"); if (getParameter("smallicons")!=null) { Global.setParameter("iconsize", 24); } else { Global.setParameter("iconsize", 32); } } } public static void main(final String args[]) // zirkel is calles as // application { DetectDesktopSize(); int i=0; String filename=""; while (i. */ package rene.zirkel; // file: ZirkelCanvas.java import java.awt.CheckboxMenuItem; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.TextField; import java.awt.datatransfer.Clipboard; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.Enumeration; import java.util.Vector; import java.util.zip.GZIPOutputStream; import rene.dialogs.Warning; import rene.gui.Global; import rene.gui.MyCheckboxMenuItem; import rene.gui.MyMenuItem; import rene.util.FileName; import rene.util.ImageSelection; import rene.util.MyVector; import rene.util.PngEncoder; import rene.util.sort.Sorter; import rene.util.xml.XmlReader; import rene.util.xml.XmlTag; import rene.util.xml.XmlTagPI; import rene.util.xml.XmlTree; import rene.util.xml.XmlWriter; import rene.zirkel.construction.ChangedListener; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionDisplayPanel; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.construction.Interpreter; import rene.zirkel.construction.Selector; import rene.zirkel.constructors.IntersectionConstructor; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.dialogs.AgainQuestion; import rene.zirkel.dialogs.DefineMacro; import rene.zirkel.dialogs.MessageWindow; import rene.zirkel.dialogs.ReplaceMacroQuestion; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.Drawing; import rene.zirkel.graphics.LatexOutput; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.graphics.MyGraphicsEPS; import rene.zirkel.graphics.MyGraphicsFig; import rene.zirkel.graphics.MyGraphicsPDF; import rene.zirkel.graphics.MyGraphicsSvg; import rene.zirkel.graphics.PolygonDrawer; import rene.zirkel.graphics.TrackPainter; import rene.zirkel.listener.AddEventListener; import rene.zirkel.listener.DoneListener; import rene.zirkel.listener.StatusListener; import rene.zirkel.macro.Macro; import rene.zirkel.macro.MacroBar; import rene.zirkel.macro.MacroItem; import rene.zirkel.macro.MacroMenu; import rene.zirkel.macro.MacroRunner; import rene.zirkel.macro.MacroSelectDialog; import rene.zirkel.objects.AngleObject; import rene.zirkel.objects.AreaObject; import rene.zirkel.objects.AxisObject; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.EquationXYObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.FixedAngleObject; import rene.zirkel.objects.FixedCircleObject; import rene.zirkel.objects.FunctionObject; import rene.zirkel.objects.IntersectionObject; import rene.zirkel.objects.MoveableObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PointonObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.QuadricObject; import rene.zirkel.objects.RayObject; import rene.zirkel.objects.SegmentObject; import rene.zirkel.objects.TwoPointLineObject; import rene.zirkel.objects.UserFunctionObject; import rene.zirkel.structures.CoordinatesXY; import rene.zirkel.tools.AnimatorTool; import rene.zirkel.tools.BinderTool; import rene.zirkel.tools.BreakpointAnimator; import rene.zirkel.tools.EditTool; import rene.zirkel.tools.LabelMover; import rene.zirkel.tools.MagnetTool; import rene.zirkel.tools.MetaMover; import rene.zirkel.tools.MoverTool; import rene.zirkel.tools.ObjectTracker; import rene.zirkel.tools.SaveJob; import rene.zirkel.tools.SetAwayTool; import rene.zirkel.tools.SetCurveCenterTool; import rene.zirkel.tools.SetFixedAngle; import rene.zirkel.tools.SetFixedCircle; import rene.zirkel.tools.SetRangeTool; import rene.zirkel.tools.SetTargetsTool; import rene.zirkel.tools.Tracker; import rene.zirkel.tools.UniversalTracker; import rene.zirkel.tools.ZoomerTool; import atp.sHotEqn; import eric.JGlobals; import eric.JUndo; import eric.controls.JControlsManager; /** * @author Rene Main class, doing most of the work in the C.a.R. application. * This canvas handles mouse and keyboard input, displays the * construction and has tools to save and load constructions. */ public class ZirkelCanvas extends javax.swing.JPanel implements MouseListener, MouseMotionListener, ItemListener, AddEventListener, ActionListener, ChangedListener, MouseWheelListener // the canvas to do the construction { /** * */ private static final long serialVersionUID=1L; ObjectConstructor OC=new MoverTool(); // the current object constructor Construction C=new Construction(), COriginal; // the construction (collection of Constructor-Objects) StatusListener SL=null; // for displaying a status message public Image I=null; MyGraphics IG; public UniversalTracker UniversalTrack=null; Image Background=null; FontMetrics FM; public double PointSize=4.0; // Size of a point double MinPointSize=4.0; // Default minimal point size public double FontSize=12.0; // Size of font double MinFontSize=12.0; // Default minimal font size public int IW=0, IH=0; // Image and its dimensions public double Xmin, DX, Ymin, DY; boolean ShowHidden=false; // show hidden objects Frame F=new Frame(); boolean ReadOnly; boolean AllowRightMouse=true; public PopupMenu PM; CheckboxMenuItem CheckboxHidden; MenuItem Replay, Empty; boolean Job=false; // this is a job (save as such) String Last=""; // Last displayed job object Vector Targets=new Vector(); // Target names ConstructionObject TargetO[], TargetS[]; // Target objects and solutions int ShowColor=0; // 0=all, 1=green etc. (black displays always) static public double // factors for rounding EditFactor=1000000.0, LengthsFactor=100.0, AnglesFactor=1.0; public boolean Visual=Global.getParameter("options.visual", true); boolean All; boolean Interactive=true; public int GridColor=0, GridThickness=ConstructionObject.THIN; public boolean ShowGrid=false, AxesOnly=false, ShowDots=true, ShowLines=true; public boolean GridLabels=true, GridBold=false, GridLarge=false; public JControlsManager JCM; public JUndo JU=new JUndo(); // private dock DOCK; /** * Initiate an empty construction. The display may have a popup menu (only * for readonly displays). * * @param readonly * User cannot change the construction. * @param replay * Replay option in popup menu. * @param hidden * Show hidden option in popup menu. */ public ZirkelCanvas(final boolean readonly, final boolean replay, final boolean hidden) { ReadOnly=readonly; AllowRightMouse=!readonly; // setLayout(new BoxLayout(this,BoxLayout.X_AXIS)); setLayout(null); UniversalTrack=new UniversalTracker(this); JCM=new JControlsManager(this); if (Global.getParameter("options.nopopupmenu", false)) { PM=null; } else if (ReadOnly) { PM=new PopupMenu(); CheckboxHidden=new MyCheckboxMenuItem(Zirkel.name("popup.hidden")); CheckboxHidden.addItemListener(this); if (hidden) { PM.add(CheckboxHidden); } Replay=new MyMenuItem(Zirkel.name("popup.replay")); Replay.addActionListener(this); if (replay) { PM.add(Replay); } if (hidden||replay) { add(PM); } else { PM=null; } } else { PM=new PopupMenu(); Empty=new MyMenuItem(Zirkel.name("popup.empty")); add(PM); } C.CL=this; clear(); updateDigits(); C.addAddEventListener(this); addMouseWheelListener(this); // DOCK=new dock(this); // add(DOCK); } public ZirkelCanvas(final boolean readonly) { this(readonly, true, true); } public ZirkelCanvas() { this(false, true, true); } @Override public void paintComponents(final Graphics g) { } public void deleteAxisObjects() { C.deleteAxisObjects(); reloadCD(); repaintCD(); } public void createAxisObjects() { C.createAxisObjects(); } private void setShowHideParameters(final String s, final boolean b) { Global.setParameter("options.point."+s, b); Global.setParameter("options.segment."+s, b); Global.setParameter("options.line."+s, b); Global.setParameter("options.circle."+s, b); Global.setParameter("options.angle."+s, b); Global.setParameter("options.text."+s, b); Global.setParameter("options.locus."+s, b); Global.setParameter("options."+s, b); // setShowNames(true); } public void JSsend(final String s) { if (s.equals("shownames")) { setShowHideParameters("shownames", true); } else if (s.equals("hidenames")) { setShowHideParameters("shownames", false); } else if (s.equals("showvalues")) { setShowHideParameters("showvalues", true); } else if (s.equals("hidevalues")) { setShowHideParameters("showvalues", false); } else { try { C.interpret(this, s); } catch (final Exception ex) { } } } public String JSreceive(final String s) { String r="ERROR..."; try { double rep; final Expression exp=new Expression(s, C, null); rep=exp.getValue(); r=String.valueOf(rep); } catch (final ConstructionException ex) { ex.printStackTrace(); } return r; } public Dimension UseSize=null; @Override public Dimension getMinimumSize() { if (Background==null||!Global.getParameter("background.usesize", false)) { if (UseSize!=null) { return UseSize; } else { return new Dimension(600, 600); } } else { final int iw=Background.getWidth(this); if (iw<10) { return new Dimension(600, 600); } final int ih=Background.getHeight(this); if (Global.getParameter("background.usewidth", false)) { final int w=getSize().width, h=(int) ((double) ih/iw*w+0.5); return new Dimension(w, h); } else { return new Dimension(iw, ih); } } } @Override public Dimension getPreferredSize() { return getMinimumSize(); } public void updateDigits() { EditFactor=Math.pow(10, Global.getParameter("digits.edit", 5)); LengthsFactor=Math.pow(10, Global.getParameter("digits.lengths", 5)); AnglesFactor=Math.pow(10, Global.getParameter("digits.angles", 0)); } public void itemStateChanged(final ItemEvent e) { if (e.getSource()==CheckboxHidden) { ShowHidden=CheckboxHidden.getState(); repaint(); } } ZirkelCanvasInterface ZCI; public void setZirkelCanvasListener(final ZirkelCanvasInterface zci) { ZCI=zci; } public String loadImage() { return ZCI.loadImage(); } public Image doLoadImage(final String filename) { return ZCI.doLoadImage(filename); } public void actionPerformed(final ActionEvent e) { if (!Interactive) { return; } if (e.getSource()==Replay) { if (ZCI!=null) { ZCI.replayChosen(); } } else { final Enumeration en=Macros.elements(); while (en.hasMoreElements()) { final MacroItem m=(MacroItem) en.nextElement(); if (m.I==e.getSource()) { if (ZCI!=null) { ZCI.runMacro(m.M); } break; } } } } // Some transfer functions to compute screen coordinates etc. public double col(final double x) { return (x-Xmin)/DX*IW; } public double row(final double y) { return IH-(y-Ymin)/DY*IH; } public int width() { return IW; } public int height() { return IH; } public double x(final int c) { return Xmin+DX*c/IW; } public double y(final int r) { return Ymin+DY*(IH-r)/IH; } public double dx(final int c) { return DX*c/IW; } public double dy(final int r) { return DY*r/IH; } public double dx(final double c) { return DX*c/IW; } public double dy(final double r) { return DY*r/IH; } public double maxX() { return Xmin+DX; } public double minX() { return Xmin; } public double maxY() { return Ymin+DY; } public double minY() { return Ymin; } public boolean isInside(final double x, final double y) { return x>=Xmin&&x=Ymin&&y0) { C.setPixel(getSize().width/DX); } } DoneListener DL; public void setDoneListener(final DoneListener dl) { DL=dl; } /** * Add an item to the construction and re-paint the construction. */ public void addObject(final ConstructionObject o) // called by the // ObjectConstructor { C.add(o); if (Preview) { o.setIndicated(true); o.setSelectable(false); } C.updateCircleDep(); } /** * A construction added an item. Check, if it solves a problem and notify * the DoneListener, if so. */ public void added(final Construction c, final ConstructionObject o) { if (displayJob()&&TargetO.length>0) { boolean olddone=true; for (int i=0; i0) { boolean olddone=true; for (int i=0; i0) { final ConstructionObject o=select(v, e.getX(), e.getY()); if (o!=null) { new EditTool().mousePressed(e, o, this); check(); return; } else { repaintCD(); } return; } } if (Moved<=2&&PM!=null&&!Global.getParameter("restricted", false)) { int n=2; if (ReadOnly||!Global.getParameter("options.doubleclick", false)) { n=1; } if (e.getClickCount()>=n&&(ReadOnly||Macros.size()!=0)) { PM.show(e.getComponent(), e.getX(), e.getY()); } } repaintCD(); return; } if (SmartBoardPreview&&Global.getParameter("smartboard", false)) { Control=e.isControlDown(); clearIndicated(); clearPreview(); repaint(); Dragging=false; OC.mousePressed(e, this); SmartBoardPreview=false; mouseReleased(e); return; } if (!Dragging) { OC.mouseReleased(e, this); Dragging=false; repaintCD(); return; } if (Moved<=1) { if (OC instanceof LabelMover) { ((LabelMover) OC).resetPoint(); OC.mouseReleased(e, this); } else if (OC instanceof MetaMover) { OC.mouseReleased(e, this); if (!ReadOnly) { new EditTool().mousePressed(e, this); } } } else { OC.mouseReleased(e, this); } repaintCD(); check(); Dragging=false; } public synchronized void mouseClicked(final MouseEvent e) { } public synchronized void mouseExited(final MouseEvent e) { if (!Interactive) { return; } clearIndicated(); clearPreview(); repaint(); SmartBoardPreview=false; RightClicked=false; repaintCD(); } public void mouseEntered(final MouseEvent e) { } public synchronized void mouseMoved(final MouseEvent e) { if (!Interactive||!Global.getParameter("options.indicate", true)) { return; } if (Global.getParameter("smartboard", false)) { return; } Count.setAllAlternate(true); OC.mouseMoved(e, this, Global.getParameter("options.indicate.simple", false)); Count.setAllAlternate(false); repaintCD(); } DragThread DT=null; public synchronized void mouseDragged(final MouseEvent e) { if (!Interactive) { return; } if (DT==null) { DT=new DragThread(this); } if (SmartBoardPreview&&Global.getParameter("smartboard", false)) { OC.mouseMoved(e, this, Global.getParameter( "options.indicate.simple", false)); } else { DT.mouseDragged(e); Moved++; } repaintCD(); } public synchronized void doMouseDragged(final MouseEvent e) { OC.mouseDragged(e, this); } ConstructionObject LastPaint=null; public void newImage() { I=null; repaint(); } boolean Frozen=false; public void setFrozen(final boolean f) { Frozen=f; } public boolean getFrozen() { return Frozen; } MessageWindow MW; final double PointSizeFactor=240.0; int CC=0; // public void repaint(){ // // System.out.print("a "); // // super.repaint(); // StackTraceElement[] trace = new Throwable().getStackTrace(); // if (!trace[1].equals("javax.swing.JComponent")) super.repaint(); // // // for (int i=0;i0) { final ConstructionObject os[]=new ConstructionObject[n]; e=C.elements(); n=0; while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.HasZ) { os[n++]=o; } } Sorter.sort(os); for (int i=0; i250&&PolygonDrawer.step<50) { PolygonDrawer.step=PolygonDrawer.step*2; } if (time<100&&PolygonDrawer.step>4) { PolygonDrawer.step=PolygonDrawer.step/2; } paintDrawings(IG); // JMacrosTools.CurrentJZF.JCM.paintControls(IG.getGraphics()); } void dopaintFig(final MyGraphicsFig IG) { if (ShowGrid) { paintGrid(IG); } IG.pushLayer(true); int layer=0; while (true) { IG.pushLayer(); int l=0; Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==LastPaint) { break; } if (l==layer&&o.isBack()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l>layer) { break; } } } if (llayer) { break; } } } l=0; e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==LastPaint) { break; } if (l==layer&&!o.isBack()&&o.selected()) { o.paint(IG, this); } if (o.isBreak()) { l++; if (l>layer) { break; } } } layer++; } IG.pushLayer(false); if (LastPaint==null) { paintTrack(IG); } } int xg[]=new int[64], yg[]=new int[64]; public void setGrid() { ShowGrid=Global.getParameter("showgrid", false); AxesOnly=Global.getParameter("axesonly", false); ShowDots=Global.getParameter("showdots", false); ShowLines=Global.getParameter("showlines", false); GridThickness=Global.getParameter("grid.thickness", ConstructionObject.THIN); GridColor=Global.getParameter("grid.colorindex", 0); GridBold=Global.getParameter("grid.bold", false); GridLarge=Global.getParameter("grid.large", false); GridLabels=Global.getParameter("grid.labels", true); } /** * Paint axes and grid. * * @param IG */ void paintGrid(final MyGraphics IG) { if (GridThickness==ConstructionObject.NORMAL) { IG.setColor(ZirkelFrame.Colors[Global.getParameter( "grid.colorindex", 0)]); } else { IG.setColor(ZirkelFrame.LightColors[GridColor]); } IG.setFont(GridLarge, GridBold); final double gridsize=getGridSize(); int dd=IH/200; if (dd<1) { dd=1; } double x1=Math.floor((C.getX()-C.getW())/gridsize-1)*gridsize; int xi=0; while (x1<(C.getX()+C.getW())&&xi<64) { final int c=(int) col(x1); xg[xi++]=c; x1+=gridsize; } double y1=Math.floor((C.getY()-C.getW())/gridsize-1)*gridsize; int yi=0; while (y1<(C.getY()+C.getW())&&yi<64) { final int r=(int) row(y1); yg[yi++]=r; y1+=gridsize; } for (int i=0; iC.getX()-C.getW()) { final int c=(int) col(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(c, 0, c, IH); } else { IG.drawThickLine(c, 0, c, IH); } } if (0C.getY()-C.getW()) { final int r=(int) row(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(0, r, IW, r); } else { IG.drawThickLine(0, r, IW, r); } } } dd=dd*2; double labelsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; while (C.getW()*2/labelsize>=10) { labelsize*=10; } if (C.getW()*2/labelsize<5) { labelsize/=2; } final FontMetrics fm=IG.getFontMetrics(); final int FH=fm.getHeight(); x1=Math.floor((C.getX()-C.getW())/labelsize-1)*labelsize; int lh=(int) row(0); int bottomshift=FH+2; if (lh<0||lh>IH) { lh=IH; bottomshift=-7; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); final String s=format(x1); if (s.length()>0) { if (GridLabels) { IG.drawString(s, c-fm.stringWidth(s)/2, lh+bottomshift); } IG.drawLine(c, lh-dd, c, lh+dd); } x1+=labelsize; } boolean left=true; int lw=(int) col(0); if (lw<0||lw>IW-20) { lw=0; left=false; } y1=Math.floor((C.getY()-C.getW())/labelsize-1)*labelsize; while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); final String s=format(y1); if (s.length()>0) { final int leftshift=(left)?-fm.stringWidth(s)-5:8; if (GridLabels) { IG.drawString(s, lw+leftshift, r+FH/2-2); } IG.drawLine(lw-dd, r, lw+dd, r); } y1+=labelsize; } } /** * Paint only the coordinate axes (no grid) * * @param IG */ void paintAxes(final MyGraphics IG) { IG.setAntialiasing(false); if (GridThickness==ConstructionObject.NORMAL) { IG.setColor(ZirkelFrame.Colors[GridColor]); } else { IG.setColor(ZirkelFrame.LightColors[GridColor]); } IG.setFont(GridLarge, GridBold); final double gridsize=getGridSize(); double x1=Math.floor((C.getX()-C.getW())/gridsize-1)*gridsize; final int r0=(int) row(0); int dd=IH/200; if (dd<1) { dd=1; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); IG.drawLine(c, r0-dd, c, r0+dd); x1+=gridsize; } double y1=Math.floor((C.getY()-C.getW())/gridsize-1)*gridsize; final int c0=(int) col(0); while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); IG.drawLine(c0-dd, r, c0+dd, r); y1+=gridsize; } if (GridThickness!=ConstructionObject.INVISIBLE) { if (0C.getX()-C.getW()) { final int c=(int) col(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(c, 0, c, IH); } else { IG.drawThickLine(c, 0, c, IH); } } if (0C.getY()-C.getW()) { final int r=(int) row(0); if (GridThickness!=ConstructionObject.THICK) { IG.drawLine(0, r, IW, r); } else { IG.drawThickLine(0, r, IW, r); } } } dd=dd*2; double labelsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; while (C.getW()*2/labelsize>=10) { labelsize*=10; } if (C.getW()*2/labelsize<5) { labelsize/=2; } final FontMetrics fm=IG.getFontMetrics(); final int FH=fm.getHeight(); x1=Math.floor((C.getX()-C.getW())/labelsize-1)*labelsize; int lh=(int) row(0); int bottomshift=FH+2; if (lh<0||lh>IH) { lh=IH; bottomshift=-7; } while (x1<(C.getX()+C.getW())) { final int c=(int) col(x1); final String s=format(x1); if (s.length()>0) { if (GridLabels) { IG.drawString(s, c-fm.stringWidth(s)/2, lh+bottomshift); } IG.drawLine(c, lh-dd, c, lh+dd); } x1+=labelsize; } boolean left=true; int lw=(int) col(0); if (lw<0||lw>IW-20) { lw=0; left=false; } y1=Math.floor((C.getY()-C.getW())/labelsize-1)*labelsize; while (y1<(C.getY()+C.getW())) { final int r=(int) row(y1); final String s=format(y1); if (s.length()>0) { final int leftshift=(left)?-fm.stringWidth(s)-5:8; if (GridLabels) { IG.drawString(s, lw+leftshift, r+FH/2-2); } IG.drawLine(lw-dd, r, lw+dd, r); } y1+=labelsize; } IG.setAntialiasing(true); } public double pointSize() { return PointSize; } public double SelectionPointFactor=Global.getParameter("selectionsize", 1.5); public double selectionSize() { return SelectionPointFactor*PointSize; } public double Scale=1.0; public int scale(final int x) { return (int) (Scale*x); } static char c[]=new char[20]; int nc; public String format(double x) { // double xx=x; nc=0; boolean minus=false; if (x<-1e-12) { minus=true; x=-x; } x+=1e-12; final double h=x-Math.floor(x); if (rekformat(h, 8)) { c[nc++]='.'; } while (x>=1) { final double s=Math.floor(x/10); c[nc++]=(char) ('0'+(int) (x-s*10)); x=s; } if (nc>0&&minus) { c[nc++]='-'; } // revert c: for (int i=0; i "+new String(c,0,nc)); return new String(c, 0, nc); } boolean rekformat(double h, final int k) { h=h*10; final double x=Math.floor(h); if (k==0) { final int i=(int) x; if (i>0) { c[nc++]=(char) ('0'+i); return true; } else { return false; } } else { final int i=(int) x; if (rekformat(h-x, k-1)||i>0) { c[nc++]=(char) ('0'+i); return true; } else { return false; } } } @Override public void update(final Graphics g) { paint(g); } public void paintUntil(final ConstructionObject o) { if (LastPaint==o) { return; } LastPaint=o; repaint(); } // validate all elements @Override public void validate() { dovalidate(); if (OC instanceof TrackPainter) { ((TrackPainter) OC).validate(this); } } /** * Synchronized update of the construction to avoid a repaint during update. */ synchronized public void dovalidate() { C.dovalidate(); } // selection routines: // This vector is used by ALL selection and indication routines for // performance reasons. MyVector V=new MyVector(); public void sort(final MyVector V) { if (V.size()<2) { return; } Sorter.QuickSort(V.getArray(), 0, V.size()-1); } /** * Slow function to resort a vector by the number of each element in the * construction. */ public void sortRow(final MyVector V) { final ConstructionObject o[]=new ConstructionObject[V.size()]; V.copyInto(o); V.removeAllElements(); final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject oo=(ConstructionObject) e.nextElement(); for (final ConstructionObject element : o) { if (element==oo) { V.addElement(oo); break; } } } } /** * select a circle or a line. **/ public ConstructionObject selectCircleLine(final int x, final int y, final boolean multiple) // select a circle or a line { final MyVector v=selectCircleLineObjects(x, y, multiple, false); return select(v); } public ConstructionObject selectCircleLine(final int x, final int y) // select // a // circle // or // a // line { return selectCircleLine(x, y, true); } /** * select a circle or a line. **/ public ConstructionObject selectPointonObject(final int x, final int y, final boolean multiple) // select a circle or a line { final MyVector v=selectPointonObjects(x, y, multiple, false); return select(v); } public ConstructionObject selectPointonObject(final int x, final int y) // select // a // circle // or // a // line { return selectPointonObject(x, y, true); } /** * Select all possible circles or lines at x,y. If a matching non-filled * object is found above a filled object, the latter is never selected. * * @param multiple * determines, if it is possible to select selected objects. * @param testlocal * determines, if objects that look locally like already selected * objects should be omitted. */ public MyVector selectCircleLineObjects(final int x, final int y, final boolean multiple, final boolean testlocal) // select a circle // or a line { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject||o instanceof PrimitiveCircleObject)&&o.nearto(x, y, true, this)&&(multiple||!o.selected())) { if (testlocal) { final Enumeration ev=V.elements(); while (ev.hasMoreElements()) { final ConstructionObject ov=(ConstructionObject) ev.nextElement(); if (o.locallyLike(ov)) { o=null; break; } } } if (o!=null) { V.addElement(o); } } } return V; } public MyVector selectCircleLineObjects(final int x, final int y, final boolean multiple) { return selectCircleLineObjects(x, y, multiple, false); } public MyVector selectCircleLineObjects(final int x, final int y) { return selectCircleLineObjects(x, y, true, false); } /** * Select all possible object at x,y that can carry a point. * * @param multiple * determines, if it is possible to select selected objects. * @param testlocal * determines, if objects that look locally like already selected * objects should be omitted. */ public MyVector selectPointonObjects(final int x, final int y, final boolean multiple, final boolean testlocal) // select a circle // or a line { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PointonObject)&&o.nearto(x, y, true, this)&&(multiple||!o.selected())) { if (testlocal) { final Enumeration ev=V.elements(); while (ev.hasMoreElements()) { final ConstructionObject ov=(ConstructionObject) ev.nextElement(); if (o.locallyLike(ov)) { o=null; break; } } } if (o!=null) { V.addElement(o); } } } return V; } public MyVector selectPointonObjects(final int x, final int y, final boolean multiple) { return selectPointonObjects(x, y, multiple, false); } public MyVector selectPointonObjects(final int x, final int y) { return selectPointonObjects(x, y, true, false); } /** * Select all selectable objects near to x,y. * * @param multiple * allows multiple selections. **/ public MyVector selectObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } return V; } public MyVector selectObjects(final int x, final int y) { return selectObjects(x, y, true); } /** * Select a single object near x,y. **/ public ConstructionObject selectObject(final int x, final int y, final boolean multiple) { final MyVector v=selectObjects(x, y, multiple); return select(v, x, y); } public ConstructionObject selectObject(final int x, final int y) { return selectObject(x, y, true); } /** * select all constructable objects near x,y. **/ public MyVector selectConstructableObjects(final int x, final int y, final boolean multiple) // select an enumeration of objects { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.valid()&&o.isFlag()&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } return V; } public MyVector selectConstructableObjects(final int x, final int y) { return selectConstructableObjects(x, y, true); } /** * select a single constructable object near x,y. **/ public ConstructionObject selectConstructableObject(final int x, final int y) { final MyVector v=selectConstructableObjects(x, y, true); return select(v, x, y); // user determines } /** * Select a single line, segment, ray, perp., paral. or fixed angle near * x,y. **/ public PrimitiveLineObject selectLine(final int x, final int y, final boolean multiple) { selectLineObjects(x, y, multiple); return (PrimitiveLineObject) select(V); } public void selectLineObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PrimitiveLineObject selectLine(final int x, final int y) { return selectLine(x, y, true); } /** * Select a point or a line (for the object tracker). */ public void selectPointsOrLines(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveLineObject||o instanceof PointObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } /** * Select a single line, segment, or ray near x,y **/ public TwoPointLineObject selectTwoPointLine(final int x, final int y, final boolean multiple) { selectTwoPointLines(x, y, multiple); return (TwoPointLineObject) select(V); } public void selectTwoPointLines(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof TwoPointLineObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public TwoPointLineObject selectTwoPointLine(final int x, final int y) { return selectTwoPointLine(x, y, true); } /** * Select a single segment near x,y **/ public SegmentObject selectSegment(final int x, final int y, final boolean multiple) { selectSegments(x, y, multiple); return (SegmentObject) select(V); } public void selectSegments(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof SegmentObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public SegmentObject selectSegment(final int x, final int y) { return selectSegment(x, y, true); } public boolean isMultipleAcceptedObject(final ConstructionObject o) { boolean b=o instanceof AreaObject; b=b||o instanceof PrimitiveLineObject; b=b||o instanceof PrimitiveCircleObject; b=b||o instanceof QuadricObject; b=b||o instanceof eric.JLocusTrackObject; return b; } public void selectMultipleFinals(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PointObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.removeAllElements(); return; } if (o.isSelectable()&&(isMultipleAcceptedObject(o))&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } if (V.size()>1) { V.removeAllElements(); } } public ConstructionObject selectMultipleFinal(final int x, final int y, final boolean multiple) { selectMultipleFinals(x, y, multiple); return (ConstructionObject) select(V); } /** * Select a single ray near x,y **/ public RayObject selectRay(final int x, final int y, final boolean multiple) { selectRays(x, y, multiple); return (RayObject) select(V); } public void selectRays(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof RayObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public RayObject selectRay(final int x, final int y) { return selectRay(x, y, true); } /** * Select a circle near x,y. A non-filled object is preferred before a * filled object. **/ public PrimitiveCircleObject selectCircle(final int x, final int y, final boolean multiple) { selectCircles(x, y, multiple); return (PrimitiveCircleObject) select(V); } public void selectCircles(final int x, final int y, final boolean multiple) { Enumeration e=C.elements(); V.removeAllElements(); boolean haveNotFilled=false; while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&(o instanceof PrimitiveCircleObject)&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); if (!o.isFilledForSelect()) { haveNotFilled=true; } } } if (haveNotFilled) { e=V.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isFilledForSelect()) { V.removeElement(o); } } } } public PrimitiveCircleObject selectCircle(final int x, final int y) { return selectCircle(x, y, true); } /** * Select a point near x,y. **/ public PointObject selectPoint(final int x, final int y, final boolean multiple) { selectPointObjects(x, y, multiple); return (PointObject) select(V); } public void selectPointObjects(final int x, final int y, final boolean multiple) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PointObject selectPoint(final int x, final int y) { return selectPoint(x, y, true); } public PointObject selectPoint(final int x, final int y, final boolean multiple, final ConstructionObject until) { selectPointObjects(x, y, multiple, until); return (PointObject) select(V); } public void selectPointObjects(final int x, final int y, final boolean multiple, final ConstructionObject until) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o==until) { break; } if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } } } public PointObject selectPoint(final int x, final int y, final ConstructionObject until) { return selectPoint(x, y, true, until); } boolean NewPoint=false; public boolean isNewPoint() { return NewPoint; } /** * Select a point, and create a new point, if necessary. Even creates an * intersection, or a point bound to an object, if possible. If enabled, the * user is asked for confirmation in these cases. The variable NewPoint is * set to true, if the point was indeed created. * * @param multiple * determines, if multiple selections are possible. * @param any * determines, if the first point should be used. **/ public PointObject selectCreatePoint(final int x, final int y, final boolean multiple, final boolean any) { NewPoint=false; if (Preview) { final PointObject p=new PointObject(C, x(x), y(y)); addObject(p); p.setSuperHidden(true); PreviewObject=p; return p; } // User selects a known point: final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&o.nearto(x, y, this)&&(multiple||!o.selected())) { V.addElement(o); } sort(V); } if (V.size()>0) { if (any) { return (PointObject) (V.elementAt(0)); } final ConstructionObject o=select(V, Control||!Global.getParameter("options.indicate", true)); if (o!=null) { return (PointObject) o; } return null; } // User creates a new point: ConstructionObject oc=tryCreateIntersection(x, y, true); if (oc!=null) { final PointObject o=(PointObject) oc; // o.setDefaults(); // if (o.showName()) renameABC(o,false,false); return o; } if (!IntersectionYes) { return null; } final MyVector w=selectPointonObjects(x, y, true, false); filter(w, x, y, true); if (w.size()>0) { oc=select(w, !Control); if (oc==null) { return null; } if (oc!=null) { boolean yes=true; if (Global.getParameter("options.pointon", false)) { final AgainQuestion q=new AgainQuestion(F, Zirkel.name("question.pointon"), Zirkel.name("question.title")); q.center(F); q.setVisible(true); yes=q.yes(); Global.setParameter("options.pointon", q.again()); } if (yes) { final PointObject o=new PointObject(C, x(x), y(y), oc); // if (ShowGrid&&!Global.getParameter("grid.leftsnap", // false)) { // o.snap(this); // } o.setUseAlpha(true); addObject(o); validate(); o.setDefaults(); // rename Point on object, if showname // if (o.showName()) renameABC(o,false,false); NewPoint=true; return o; } else { return null; } } } final PointObject p=new PointObject(C, x(x), y(y)); if (ShowGrid) { p.snap(this); } addObject(p); p.setDefaults(); // rename Point, if showname // if (p.showName()) renameABC(p,false,false); NewPoint=true; return p; } boolean IntersectionYes=false; public ConstructionObject tryCreateIntersection(final int x, final int y, final boolean ask) { final MyVector w=selectPointonObjects(x, y, true, true); sort(w); IntersectionYes=true; if (w.size()<2) { return null; } final ConstructionObject P1=(ConstructionObject) w.elementAt(0); final ConstructionObject P2=(ConstructionObject) w.elementAt(1); if (!(P1 instanceof PointonObject&&P2 instanceof PointonObject)) { return null; } if (!((PointonObject) P1).canInteresectWith(P2)||!((PointonObject) P2).canInteresectWith(P1)) { return null; } final IntersectionObject o[]=IntersectionConstructor.construct(P1, P2, C); if (o.length==1&&!o[0].valid()) { return null; } if (o.length==2&&!o[0].valid()&&!o[1].valid()) { return null; } if (ask&&Global.getParameter("options.intersection", false)) { final AgainQuestion q=new AgainQuestion(F, Zirkel.name("question.intersection"), Zirkel.name("question.title")); q.center(F); q.setVisible(true); IntersectionYes=q.yes(); Global.setParameter("options.intersection", q.again()); } if (IntersectionYes) { if (o.length==1||!o[1].valid()) { addObject(o[0]); o[0].autoAway(); o[0].validate(x(x), y(y)); validate(); o[0].setDefaults(); o[0].setRestricted(getRestricted()); return o[0]; } if (!o[0].valid()) { addObject(o[1]); o[1].autoAway(); validate(); o[1].setDefaults(); o[1].setRestricted(getRestricted()); return o[1]; } IntersectionObject oc=o[0]; final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d10) { return (ConstructionObject) V.elementAt(0); } else { return null; } } final ConstructionObject o=select(V, x, y); return o; } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel, final ConstructionObject until) { return selectWithSelector(x, y, sel, until, true); } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel, final boolean choice) { return selectWithSelector(x, y, sel, null, choice); } public ConstructionObject selectWithSelector(final int x, final int y, final Selector sel) { return selectWithSelector(x, y, sel, null, true); } /** * Select a moveable point at x,y. Don't ask user, take first. **/ public ConstructionObject selectImmediateMoveablePoint(final int x, final int y) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof PointObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } } if (V.size()==0) { return null; } return (ConstructionObject) V.elementAt(0); } /** * Select a moveable object at x,y. **/ public ConstructionObject selectMoveableObject(final int x, final int y) { final ConstructionObject s=findSelectedObject(); if (s instanceof MoveableObject&&((MoveableObject) s).moveable()&&s.nearto(x, y, this)) { return s; } selectMoveableObjects(x, y); if (V.size()==1) { return (ConstructionObject) V.elementAt(0); } final ConstructionObject o=select(V); if (o!=null) { if (!Global.getParameter("options.choice", true)) { return o; } o.setSelected(true); } return null; } public void selectMoveableObjects(final int x, final int y, final boolean control) { V.removeAllElements(); final ConstructionObject s=findSelectedObject(); if (s instanceof MoveableObject&&((MoveableObject) s).moveable()&&s.nearto(x, y, this)) { V.addElement(s); return; } else if (control&&s instanceof FixedCircleObject&&s.nearto(x, y, this)&&((FixedCircleObject) s).fixedByNumber()) { V.addElement(s); return; } else if (control&&s instanceof FixedAngleObject&&s.nearto(x, y, this)&&((FixedAngleObject) s).fixedByNumber()) { V.addElement(s); return; } final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (!control&&o.isSelectable()&&o instanceof MoveableObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } else if (control&&o instanceof FixedCircleObject&&o.nearto(x, y, this)&&((FixedCircleObject) o).fixedByNumber()) { V.addElement(o); } else if (control&&o instanceof FixedAngleObject&&o.nearto(x, y, this)&&((FixedAngleObject) o).fixedByNumber()) { V.addElement(o); } } filter(V, x, y); } public void selectMoveableObjects(final int x, final int y) { selectMoveableObjects(x, y, false); } /** * Select a moveable object at x,y. Don't ask user, take first. **/ public ConstructionObject selectImmediateMoveableObject(final int x, final int y) { final Enumeration e=C.elements(); V.removeAllElements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o instanceof MoveableObject&&((MoveableObject) o).moveable()&&o.nearto(x, y, this)) { V.addElement(o); } } filter(V, x, y); if (V.size()==0) { return null; } return (ConstructionObject) V.elementAt(0); } /** * try to determine the unique objects that are near coordinates x,y and * delete all others from the vector v. **/ public void filter(final MyVector v, final int x, final int y, final boolean choice) { boolean HasPoints=false, HasNotFilled=false; Enumeration e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o instanceof PointObject) { HasPoints=true; } if (!o.isFilledForSelect()) { HasNotFilled=true; } } if (HasPoints) { e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (!o.onlynearto(x, y, this)) { v.removeElement(o); } } } else if (HasNotFilled) { e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isFilledForSelect()) { v.removeElement(o); } } } sort(v); if (!choice) { v.truncate(1); } } public void filter(final MyVector v, final int x, final int y) { filter(v, x, y, Global.getParameter("options.choice", true)||Control); } /** * user must select an object in the selection dialog, unless the selection * is unique anyway, or the filter determines that the selection is unique. **/ public ConstructionObject select(final MyVector v, final int x, final int y, final boolean choice) { if (v.size()==0) { return null; } if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } filter(v, x, y); if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } if (!choice) { return (ConstructionObject) v.elementAt(0); } sortRow(V); RightClicked=false; final eric.JSelectPopupDialog d=new eric.JSelectPopupDialog(F, this, v); final ConstructionObject o=d.getConstructionObject(); d.doclose(); return o; } public ConstructionObject select(final MyVector v, final int x, final int y) { return select(v, x, y, Global.getParameter("options.choice", true)||Control); } /** * user must select an object in the selection dialog, unless the selection * is unique anyway. **/ public ConstructionObject select(final MyVector v, final boolean choice) { if (v.size()==0) { return null; } if (v.size()==1) { return (ConstructionObject) v.elementAt(0); } // if (!choice) return (ConstructionObject)v.elementAt(0); sortRow(V); RightClicked=false; final eric.JSelectPopupDialog d=new eric.JSelectPopupDialog(F, this, v); final ConstructionObject o=d.getConstructionObject(); d.doclose(); return o; } public ConstructionObject select(final MyVector v) { return select(v, Global.getParameter("options.choice", true)||Control); } /** * select the label of a point, i.e. a point, which is set by the user * * @return the first label found **/ public ConstructionObject selectLabel(final int x, final int y) { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.isSelectable()&&o.textcontains(x, y, this)) { return o; } } return null; } public ConstructionObject findSelectedObject() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o.selected()) { return o; } } return null; } // Indication functions MyVector Indicated=new MyVector(); PointObject IndicatePoint=null; public void indicate(final MyVector v, final boolean showname) { if (v.size()==1) { if (showname) { setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); } else if (v.elementAt(0) instanceof PointObject) { setCursor(new Cursor(Cursor.HAND_CURSOR)); } } else { setCursor(Cursor.getDefaultCursor()); } if (Indicated.equalsIdentical(v)) { return; } Enumeration e=Indicated.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setIndicated(false); } Indicated.removeAllElements(); e=v.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); Indicated.addElement(o); o.setIndicated(true, showname); } repaint(); } public void indicate(final MyVector v) { indicate(v, false); } public void clearIndicated() { IndicatePoint=null; if (Indicated.size()==0) { return; } final Enumeration e=Indicated.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setIndicated(false); } Indicated.removeAllElements(); setCursor(Cursor.getDefaultCursor()); repaint(); } boolean Preview=false; ConstructionObject LastNonPreview=null; MoveableObject PreviewObject=null; public void movePreview(final MouseEvent e) { if (PreviewObject!=null) { PreviewObject.move(x(e.getX()), y(e.getY())); validate(); repaint(); } } public void prepareForPreview(final MouseEvent e) { LastNonPreview=C.last(); Preview=true; } public boolean isPreview() { return Preview; } public void clearPreview() { if (!Preview) { return; } C.clearAfter(LastNonPreview); LastNonPreview=null; PreviewObject=null; Preview=false; Count.fixAll(false); } public void setPreviewObject(final MoveableObject o) { PreviewObject=o; } public ConstructionObject indicateTryCreateIntersection(final int x, final int y, final boolean ask) { final MyVector w=selectPointonObjects(x, y, true, true); sort(w); IntersectionYes=true; if (w.size()<2) { return null; } final IntersectionObject o[]=IntersectionConstructor.construct( (ConstructionObject) w.elementAt(0), (ConstructionObject) w.elementAt(1), C); if (o.length==1&&!o[0].valid()) { return null; } if (o.length==2) { if (!o[1].valid()) { if (!o[0].valid()) { return null; } } else { final IntersectionObject h=o[0]; o[0]=o[1]; o[1]=h; } } IntersectionObject oc=o[0]; if (o.length==2&&o[1].valid()) { final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d10) { IndicatePoint=null; filter(V, x, y, false); indicate(V); return; } PointObject oc=(PointObject) indicateTryCreateIntersection(x, y, true); if (oc!=null) { return; } final MyVector w=selectPointonObjects(x, y, true, false); filter(w, x, y, true); if (w.size()>=1) { if (!w.equalsIdentical(Indicated)) { oc=new PointObject(C, x(x), y(y), (ConstructionObject) w.elementAt(0)); if (ShowGrid&&!Global.getParameter("grid.leftsnap", false)) { oc.snap(this); } oc.setUseAlpha(true); oc.validate(); oc.setIndicated(true); oc.setType(PointObject.CIRCLE); oc.setColorType(ConstructionObject.THICK); IndicatePoint=oc; indicate(w); } else if (IndicatePoint!=null) { IndicatePoint.setType(PointObject.CIRCLE); IndicatePoint.setColorType(ConstructionObject.THICK); IndicatePoint.move(x(x), y(y)); IndicatePoint.project((ConstructionObject) w.elementAt(0)); repaint(); } } else { clearIndicated(); } } public void indicateCircleLineObjects(final int x, final int y) { final MyVector w=selectCircleLineObjects(x, y); filter(V, x, y); indicate(w); } public void indicatePointonObjects(final int x, final int y) { final MyVector w=selectPointonObjects(x, y); filter(V, x, y); indicate(w); } public void indicateIntersectedObjects(final int x, final int y) { final MyVector w=selectPointonObjects(x, y); if (!w.equalsIdentical(Indicated)&&w.size()>=2) { final IntersectionObject o[]=IntersectionConstructor.construct( (ConstructionObject) w.elementAt(0), (ConstructionObject) w.elementAt(1), C); IntersectionObject oc=o[0]; if (o.length==2) { final double d0=o[0].distanceTo(x, y, this), d1=o[1].distanceTo(x, y, this); if (d1=Macros.size()) { appendMacro(m); } } catch (final ConstructionException ex) { Count.setAllAlternate(false); throw ex; } Count.setAllAlternate(false); } } else if (tag.name().equals("Construction")) { if (construction) { boolean job=false; if (tag.hasParam("job")) { job=true; Last=tag.getValue("last"); if (Last==null) { throw new ConstructionException(Zirkel.name("exception.job")); } final String Target=tag.getValue("target"); if (Target==null) { Targets=new Vector(); int i=1; while (true) { final String s=tag.getValue("target"+i); i++; if (s==null) { break; } Targets.addElement(s); } } else { Targets=new Vector(); Targets.addElement(Target); } if (Targets.size()==0) { throw new ConstructionException(Zirkel.name("exception.job")); } } C.load(tree, this); if (job) { if (C.find(Last)==null) { throw new ConstructionException(Zirkel.name("exception.job")); } final Enumeration et=Targets.elements(); while (et.hasMoreElements()) { final String s=(String) et.nextElement(); if (C.find(s)==null&&(!s.startsWith("~")||C.find(s.substring(1))==null)) { throw new ConstructionException(Zirkel.name("exception.job")); } } Job=true; } break; } } else { throw new ConstructionException("Construction not found"); } } recompute(); C.translateOffsets(this); resetSum(); validate(); repaint(); } catch (final Exception e) { throw e; } reloadCD(); repaint(); // Give the magnet object list to the point // see PointConstructor.construct : Enumeration e=C.magnet.elements(); while (e.hasMoreElements()) { final PointObject p=(PointObject) e.nextElement(); p.setMagnetObjects((String) e.nextElement()); } // System.out.println("finished reading file"); } public void resetSum() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (o instanceof ExpressionObject) { ((ExpressionObject) o).reset(); } } } public void warning(final String s, final String help) { final Warning w=new Warning(F, s, Zirkel.name("warning"), true, help); w.center(F); w.setVisible(true); } public void warning(final String s) { warning(s, ""); } public void load(final InputStream in) throws Exception { try { C.Loading=true; load(in, true, true); C.Loading=false; } catch (final Exception e) { C.Loading=false; throw e; } } public String getComment() { return C.getComment(); } public void setComment(final String s) { C.setComment(s); } public String getJobComment() { return C.getJobComment(); } public void setJobComment(final String s) { C.setJobComment(s); } /** * This can be used to set a frame window for the error dialogs that the * canvas my display. */ public void setFrame(final Frame f) { F=f; } public Frame getFrame() { return F; } /** * Maginify the view by the specified factor. */ public void magnify(final double f) { ZoomerTool.initNonDraggableObjects(C); C.setXYW(C.getX(), C.getY(), C.getW()*f); ZoomerTool.zoomNonDraggableObjectsBy(C, f); recompute(); validate(); repaint(); } /** * Shift the view with these deltas. */ public void shift(final double dx, final double dy) { ZoomerTool.initNonDraggableObjects(C); C.setXYW(C.getX()+dx*C.getW(), C.getY()+dy*C.getW(), C.getW()); ZoomerTool.shiftNonDraggableObjectsBy(C, dx*C.getW(), dy*C.getW()); recompute(); validate(); repaint(); } /** * Tracker routines: Call the OC (must be a TrackPainter) to paint the * object track. */ public void paintTrack(final MyGraphics g) { if (!(OC instanceof TrackPainter)) { return; } ((TrackPainter) OC).paint(g, this); } /** * Run through the construction to update all object texts. This should be * called, whenever the name of an item was changed. It will recreate only * those texts, which contain the old name. */ public void updateTexts(final ConstructionObject o, final String oldname) { C.updateTexts(o, oldname); } public Construction getConstruction() { return C; } public void setShowGrid(final boolean flag) { ShowGrid=flag; repaint(); } public void toggleShowGrid() { if (ShowGrid&&!AxesOnly) { AxesOnly=true; } else if (ShowGrid) { ShowGrid=false; } else { AxesOnly=false; ShowGrid=true; } Global.setParameter("showgrid", ShowGrid); Global.setParameter("axesonly", AxesOnly); repaint(); } public boolean showGrid() { return ShowGrid; } /** * Sets the job parameters for the current construction (the last item to * display and the target item). */ public void setJob(final ConstructionObject last) { Job=true; Last=last.getName(); Targets=new Vector(); } public void addJobTarget(final ConstructionObject target, final boolean visible) { if (visible) { Targets.addElement("~"+target.getName()); } else { Targets.addElement(target.getName()); } } public void clearTargets() { Targets=new Vector(); } /** * Cancel the job state o fthe current construction. */ public void clearJob() { Job=false; } /** * Test, if the construction is a valid job. */ public boolean isJob() { final Enumeration e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (C.find(s)==null&&(!s.startsWith("~")||C.find(s.substring(1))==null)) { return false; } } return Job&&C.find(Last)!=null&&Targets.size()>0; } public boolean inTargets(final String s) { final Enumeration e=Targets.elements(); while (e.hasMoreElements()) { if (((String) e.nextElement()).equals(s)) { return true; } } return false; } /** * * This will display the construction as a job (if it is a job). The * construction is copied up to the last element. The copies are marked as * keep objects, so that they cannot be changed. The last object is marked * as the target object, so that it displays in a special color. * * The function can also flip back to the original construction * (flag=false). */ public void displayJob(final boolean flag) { clearSelected(); if (!(OC instanceof SaveJob)) { OC.reset(this); } if (flag) // diplay the job { C.setOriginalOrder(true); if (displayJob()||!isJob()) { return; } final Construction Cnew=new Construction(); Cnew.setXYW(C.getX(), C.getY(), C.getW()); Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setJobTarget(true); o.setJobTarget(false); } e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); Cnew.add(o); o.setKeep(true); if (inTargets(o.getName())||inTargets("~"+o.getName())) { o.setJobTarget(true); } if (o.getName().equals(Last)) { break; } } while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); if (inTargets(o.getName())||inTargets("~"+o.getName())) { Cnew.add(o); o.setKeep(true); o.setJobTarget(true); } } int n=0; e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (!s.startsWith("~")) { n++; } } TargetO=new ConstructionObject[n]; TargetS=new ConstructionObject[n]; n=0; e=Targets.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); if (!s.startsWith("~")) { TargetO[n]=Cnew.find(s); TargetS[n]=null; n++; } } COriginal=C; C=Cnew; C.addAddEventListener(this); C.setComment(COriginal.getJobComment()); recompute(); reloadCD(); repaint(); } else // display the orginal construction again { if (!displayJob()) { return; } C.removeAddEventListener(this); C=COriginal; COriginal=null; final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setKeep(false); o.setJobTarget(false); } C.setOriginalOrder(false); recompute(); reloadCD(); repaint(); } } /** * If the job is solved, this function removes all restrictions. */ public void freeJob() { final Enumeration e=C.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); o.setKeep(false); o.setJobTarget(false); repaint(); } } /** * Test if the canvas displays a job right now. */ public boolean displayJob() { return COriginal!=null; } // The following functions change the default values of some objects. public void setShowColor(final int i) { ShowColor=i; repaint(); } public int getShowColor() { return ShowColor; } public ObjectConstructor getOC() { return OC; } // Macros: Vector Macros=new Vector(); public Vector getMacros() { return Macros; } public boolean haveMacros() { return Macros.size()>0; } public boolean haveNonprotectedMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (!m.M.isProtected()) { return true; } } return false; } /** * Define a macro. There must be parameters (but not necessarily targets). * The function will display the macro dialog. It will create a new macro, * when the dialog was not aborted. The macro is kept in the Macros vector * by name. */ boolean defineMacro() { clearSelected(); // Read the list of Parameters and Targets from the // construction. This list is filled by the SetParameter and // SetTargets constructors. final Vector P=C.getParameters(); if (P.size()==0) // no parameters { warning(Zirkel.name("definemacro.noparams")); return false; } // Display the macro creation dialog to the user. final DefineMacro d=new DefineMacro(F, this); d.center(getFrame()); d.setVisible(true); // Aborted? if (d.isAborted()||d.getName().equals("")) { return false; } // Define a marco with the name, the comment and the paramters. final Macro m=new Macro(this, d.getName(), d.getComment(), d.getParams()); // If there are no targets, determine everything as // constructed by the paramaters, else only the things needed // to get the targets. try { defineMacro(C, m, d.targetsOnly(), d.invisible(), d.getPromptFor(), d.hideduplicates()); } catch (final ConstructionException e) { warning(e.getDescription()); OC.reset(this); return false; } storeMacro(m, false); OC.reset(this); return true; } /** * Copy a macro with fixed parameters from another macro. */ public Macro copyMacro(final Macro m, final String name, final boolean fixed[]) { try { final Macro macro=(Macro) (m.clone()); macro.Name=name; final boolean f[]=new boolean[fixed.length]; for (int i=0; i0&&!c.ShowAll, c.SuperHide, c.getPromptFor(), true); storeMacro(m, true); } /* * Store the macro in the macro list (or replace the old macro with the same * name * * @param all Replace the macro without asking. */ public void storeMacro(final Macro m, final boolean all) { int i=0; for (i=0; i=Macros.size()) { appendMacro(m); } } public boolean ProtectMacros=false; public MacroMenu MM=null; public void appendMacro(final Macro m) { if (!ReadOnly) { if (ProtectMacros) { m.setProtected(true); } if (MM==null) { MM=new MacroMenu(PM, "", null); } final MacroItem mi=MM.add(m, m.getName()); if (mi.I!=null) { mi.I.addActionListener(this); } Macros.addElement(mi); } else { if (MM==null) { MM=new MacroMenu(null, "", null); } final MacroItem mi=MM.add(m, m.getName()); if (mi.I!=null) { mi.I.addActionListener(this); } Macros.addElement(mi); } } /** * Replace the macro item number i with m. * * @return User wants to replace all subsequent macros. */ public boolean replaceMacro(final Macro m, final int i, final boolean all) { final MacroItem e=(MacroItem) Macros.elementAt(i); if (all) // don't ask { Macros.setElementAt(new MacroItem(m, e.I), i); return true; } else // ask { final ReplaceMacroQuestion d=new ReplaceMacroQuestion(getFrame(), m); d.center(getFrame()); d.setVisible(true); if (d.isNo()) { return false; } final MacroItem newitem=new MacroItem(m, e.I); MM.replace((MacroItem) Macros.elementAt(i), newitem); Macros.setElementAt(newitem, i); return d.isAll(); } } public String MacroCurrentComment; /** * The user has to choose from a list of macros (for running). */ public Macro chooseMacro() { if (Macros.size()==0) { warning(Zirkel.name("definemacro.nomacro")); return null; } final MacroSelectDialog d=new MacroSelectDialog(getFrame(), MM, false); d.setVisible(true); return d.getMacro(); } /** * The user can choose from a list of macros (for saving). * * @return A vector of selected Macros. */ public Vector chooseMacros() { if (Macros.size()==0) { warning(Zirkel.name("definemacro.nomacro")); return null; } final MacroSelectDialog d=new MacroSelectDialog(getFrame(), MM, true); d.setVisible(true); return d.getMacros(); } /** * Run a macro by name. */ public Macro chooseMacro(final String name) { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final Macro m=((MacroItem) e.nextElement()).M; if (m.getName().equals(name)) { return m; } } return null; } public void deleteMacros(final Vector v) { final Enumeration e=v.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); deleteMacro(m); } } public void deleteMacro(final MacroItem m) { Macros.removeElement(m); if (m.I!=null) { m.I.removeActionListener(this); MM.remove(m); } } public void clearMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.I!=null) { m.I.removeActionListener(this); MM.remove(m); } } Macros.removeAllElements(); } public void clearNonprotectedMacros() { final Vector V=new Vector(); final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (!m.M.isProtected()) { V.addElement(m); } } deleteMacros(V); } public void clearProtectedMacros() { final Vector V=new Vector(); final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.M.isProtected()) { V.addElement(m); } } deleteMacros(V); } public void protectMacros() { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); m.M.setProtected(true); } } public void renameMacro(final Macro macro, final String name) { final Enumeration e=Macros.elements(); while (e.hasMoreElements()) { final MacroItem m=(MacroItem) e.nextElement(); if (m.I!=null&&m.M==macro) { deleteMacro(m); break; } } macro.setName(name); appendMacro(macro); } MacroBar MBar; public void setMacroBar(final MacroBar m) { MBar=m; } public void updateMacroBar() { // if (MBar!=null) { // MBar.update(Macros); // } } // For the prompt in the status line: TextField TF; public void setTextField(final TextField t) { TF=t; } public void setPrompt(final String s) { if (TF!=null) { TF.setText(s); } } // Loading: public void loadRun(final InputStream is) { final BufferedReader in=new BufferedReader(new InputStreamReader(is)); String s="", comment=""; while (true) { try { s=in.readLine(); if (s==null) { break; } int n; if ((n=s.indexOf("//"))>=0) { comment=s.substring(n+2).trim(); s=s.substring(0, n); } else { comment=""; } s=s.trim(); int k=0; if ((k=Interpreter.startTest("macro", s))>=0) { loadMacro(in, s.substring(k).trim()); } else if (!s.equals("")) { C.interpret(this, s, comment); } } catch (final ConstructionException e) { warning(e.getDescription()+" --- "+s); break; } catch (final Exception e) { warning(e.toString()+" --- "+s); e.printStackTrace(); break; } } C.updateCircleDep(); } public void loadMacro(final BufferedReader in, final String name) throws ConstructionException { final Construction c=new Construction(); c.clear(); String s="", comment="", macrocomment=""; boolean inComment=true, newLine=true; while (true) { try { s=in.readLine(); if (s==null) { throw new ConstructionException(Zirkel.name("exception.macroend")); } s=s.trim(); final int n=s.indexOf("//"); if (inComment&&n==0) { final String h=s.substring(n+2).trim(); if (newLine) { macrocomment=macrocomment+h; newLine=false; } else { if (h.equals("")) { macrocomment=macrocomment+"\n"; newLine=true; } else { macrocomment=macrocomment+" "+h; newLine=false; } } continue; } inComment=false; if (n>=0) { comment=s.substring(n+2).trim(); s=s.substring(0, n); } else { comment=""; } s=s.trim(); if (s.equals(Zirkel.name("end"))) { break; } if (s.toLowerCase().equals("end")) { break; } if (!s.equals("")) { c.interpret(this, s, comment); } } catch (final InvalidException e) { } catch (final ConstructionException e) { throw new ConstructionException(e.getDescription()+" --- "+s); } catch (final IOException e) { warning(e.toString()); return; } } defineMacro(name, macrocomment, c); } public double getGridSize() { double gridsize=Math.pow(10, Math.floor(Math.log(C.getW()*2)/Math.log(10)))/10; if (C.getW()*2/gridsize>=30) { gridsize*=5; } if (C.getW()*2/gridsize<10) { gridsize/=2; } return gridsize; } public LatexOutput createBB(final String filename, final int w, final int h, final double dpi) { try { String path=""; if (Global.getParameter("options.fullpath", true)) { path=FileName.pathAndSeparator(filename); } PrintWriter out=new PrintWriter(new FileOutputStream(path+FileName.purefilename(filename)+".bb")); out.println("%%BoundingBox: 0 0 "+w+" "+h); out.close(); out=new PrintWriter(new FileOutputStream(path+FileName.purefilename(filename)+".ztx")); final LatexOutput lout=new LatexOutput(out); lout.open(w, h, dpi, path+FileName.filename(filename)); return lout; } catch (final Exception e) { warning(e.toString()); } return null; } /** * Save picture as PNG on file or copy to clipboard * * @param filename * ("" for clipboard) * @return not failed */ synchronized public boolean savePNG(final String filename, final boolean latex) { LatexOutput lout=null; if (IW==0||I==null) { return false; } if (Global.getParameter("printscale.middle", true)) { savePreviewAsPNG(filename); return true; } double dpi=Global.getParameter("printscale.dpi", 300); if (!Global.getParameter("printscale.sizes", false)) { final int w=Global.getParameter("printscale.w", IW); final int h=Global.getParameter("printscale.h", IH); if (latex) { lout=createBB(filename, w, h, dpi); } final int IWold=IW; IW=w; IH=h; Scale=((double) IW)/IWold; I=createImage(IW, IH); IG=new MyGraphics13(I.getGraphics(), Scale, this, lout); IG.setSize(w, h); double pointsize=PointSize*Scale; double fontsize=FontSize*Scale; if (Scale<1) { if (Global.getParameter("options.minpointsize", false)&&pointsize. */ package rene.zirkel; import java.applet.AppletContext; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Frame; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.Image; import java.awt.Label; import java.awt.MediaTracker; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.URL; import java.util.Enumeration; import java.util.Locale; import java.util.StringTokenizer; import java.util.zip.GZIPInputStream; import javax.swing.JPanel; import rene.dialogs.Warning; import rene.gui.DoActionListener; import rene.gui.Global; import rene.gui.HistoryTextField; import rene.gui.IconBar; import rene.gui.IconBarListener; import rene.gui.Panel3D; import rene.util.FileName; import rene.util.parser.StringParser; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.constructors.AngleConstructor; import rene.zirkel.constructors.AreaConstructor; import rene.zirkel.constructors.BoundedPointConstructor; import rene.zirkel.constructors.Circle3Constructor; import rene.zirkel.constructors.CircleConstructor; import rene.zirkel.constructors.ExpressionConstructor; import rene.zirkel.constructors.ImageConstructor; import rene.zirkel.constructors.IntersectionConstructor; import rene.zirkel.constructors.LineConstructor; import rene.zirkel.constructors.MidpointConstructor; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.constructors.ParallelConstructor; import rene.zirkel.constructors.PlumbConstructor; import rene.zirkel.constructors.PointConstructor; import rene.zirkel.constructors.QuadricConstructor; import rene.zirkel.constructors.RayConstructor; import rene.zirkel.constructors.SegmentConstructor; import rene.zirkel.constructors.TextConstructor; import rene.zirkel.dialogs.CommentDialog; import rene.zirkel.dialogs.Replay; import rene.zirkel.listener.DoneListener; import rene.zirkel.listener.StatusListener; import rene.zirkel.macro.Macro; import rene.zirkel.macro.MacroBar; import rene.zirkel.macro.MacroItem; import rene.zirkel.macro.MacroRunner; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.SegmentObject; import rene.zirkel.objects.TextObject; import rene.zirkel.tools.AnimatorTool; import rene.zirkel.tools.BreakpointAnimator; import rene.zirkel.tools.DeleteTool; import rene.zirkel.tools.DrawerTool; import rene.zirkel.tools.EditTool; import rene.zirkel.tools.HiderTool; import rene.zirkel.tools.MoverTool; import rene.zirkel.tools.ObjectTracker; import rene.zirkel.tools.RenamerTool; import rene.zirkel.tools.ReorderTool; import rene.zirkel.tools.SaveJob; import rene.zirkel.tools.SetParameterTool; import rene.zirkel.tools.SetTargetsTool; import rene.zirkel.tools.Tracker; import rene.zirkel.tools.ZoomerTool; import eric.JLocusObjectTracker; public class ZirkelApplet extends javax.swing.JApplet implements IconBarListener, StatusListener, KeyListener, DoneListener, DoActionListener, ZirkelCanvasInterface { /** * */ private static final long serialVersionUID = 1L; ZirkelCanvas ZC; IconBar IA, IB, IC; MacroBar IM; String filename = "test.zir"; Label Status; Color C, CC; Frame F; String FirstConstructor = "point", Tools = "all", Options = ""; int CurrentTool = 0; HistoryTextField Input; ConstructionObject Last = null; boolean edit; boolean jumptostart; // for applets with replay buttons and start() public String JScontrol() { String exp = ""; try { exp = String .valueOf(ZC.getConstruction().find("jscode").getValue()); } catch (final Exception ex) { } return exp; } public void JSsend(final String s) { ZC.JSsend(s); repaint(); } public String JSreceive(final String s) { return ZC.JSreceive(s); } @Override public void paint(final Graphics gc) { super.paint(gc); // ZC.recompute(); ZC.JCM.readXmlTags(); ZC.dovalidate(); ZC.repaint(); } final static public String DefaultIcons = " point line segment ray circle fixedcircle" + " parallel plumb circle3 midpoint angle fixedangle" + " move tracker objecttracker hide expression area text quadric" + " runmacro animate "; final static public String DefaultOptions = " back undo delete color type thickness" + " hidden showcolor macro grid " + " draw twolines indicate "; @Override public void init() { if (getParameter("language") != null) try { Locale.setDefault(new Locale(getParameter("language"), "")); } catch (final RuntimeException e) { } Global.initBundle("rene/zirkel/docs/ZirkelProperties"); Count.resetAll(); CC = C = Global.Background; initLightColors(); initObjectKeys(); final Dimension dscreen = getToolkit().getScreenSize(); F = new Frame(); F.setSize(dscreen); if (getParameter("oldicons") == null) { Global.setParameter("iconpath", "/eric/icons/palette/"); Global.setParameter("iconsize", getParameter("smallicons") == null ? 32 : 24); Global.setParameter("icontype", "png"); } else { Global.setParameter("iconpath", "//eric/icons/palette/"); Global.setParameter("iconsize", 20); } String color = getParameter("color"); if (color != null) { final StringParser p = new StringParser(getParameter("color")); p.replace(',', ' '); int red, green, blue; red = p.parseint(); green = p.parseint(); blue = p.parseint(); C = new Color(red, green, blue); Global.Background = C; Global.ControlBackground = C; CC = C; } color = getParameter("colorbackground"); if (color != null) Global.setParameter("colorbackground", color); else Global.removeParameter("colorbackground"); color = getParameter("colorselect"); if (color != null) Global.setParameter("colorselect", color); else Global.removeParameter("colorselect"); ZirkelFrame.SelectColor = Global.getParameter("colorselect", Color.red); color = getParameter("colortarget"); if (color != null) Global.setParameter("colortarget", color); else Global.removeParameter("colortarget"); ZirkelFrame.TargetColor = Global .getParameter("colorselect", Color.pink); ZirkelFrame.initLightColors(Color.white); final String font = getParameter("font"); if (font != null) { if (font.indexOf("bold") >= 0) Global.setParameter("font.bold", true); if (font.indexOf("large") >= 0) Global.setParameter("font.large", true); } if (getParameter("demo") != null) { initDemo(); return; } String style = getParameter("style"); // On firefox mac, I don't know why, but getParameter("style") return // null // even if there is a "style" parameter tag... so : if (style == null) { if ((getParameter("tools") != null) || (getParameter("options") != null)) style = "icons"; else style = "plain"; } final boolean simple = (style.equals("plain") || style.equals("3D") || style .equals("breaks")); edit = !simple; final boolean status = (style.equals("full") || style.equals("status")); final boolean icons = (style.equals("full") || style.equals("nonvisual") || style.equals("icons")); final boolean breaks = (style.equals("breaks")); if (getParameter("edit") != null) edit = true; for (int i = 0; i < ZirkelFrame.Colors.length; i++) { color = getParameter("color" + i); if (color != null) Global.setParameter("color" + i, color); else Global.removeParameter("color" + i); } ZirkelFrame.initLightColors(Color.white); getContentPane().setLayout(new BorderLayout()); Tools = getParameter("tools"); if (Tools == null || Tools.equals("defaults")) Tools = DefaultIcons; Options = getParameter("options"); if (Options == null || Options.equals("defaults")) Options = DefaultOptions; Global.setParameter("macrobar", Options.indexOf("macrobar") >= 0); // makeMacroBar(); if (icons) { IB = new IconBar(F); IB.setBackground(CC); IB.setIconBarListener(this); StringTokenizer t = new StringTokenizer(Tools); int count = 0; while (t.hasMoreTokens()) { t.nextToken(); count++; } final String a[] = new String[count]; t = new StringTokenizer(Tools); count = 0; while (t.hasMoreTokens()) { a[count++] = t.nextToken(); } if (count > 0) FirstConstructor = a[0]; IB.addToggleGroupLeft(a); // IB.addSeparatorLeft(); if (Options.indexOf("twolines") >= 0 || Options.indexOf("defaults") >= 0) { IA = new IconBar(F); IA.setBackground(CC); IA.setIconBarListener(this); setIA(IA, Options); final JPanel north = new JPanel(); north.setBackground(CC); north.setLayout(new GridLayout(0, 1)); north.add(IA); north.add(IB); if (IM != null) north.add(IM); getContentPane().add("North", new Panel3D(north, CC)); } else { IA = IB; setIA(IB, Options); if (IM != null) { final JPanel north = new JPanel(); north.setBackground(CC); north.setLayout(new GridLayout(0, 1)); north.add(IA); if (IM != null) north.add(IM); getContentPane().add("North", new Panel3D(north, CC)); } else { getContentPane().add("North", new Panel3D(IB, CC)); } } } else IA = IB = null; rene.zirkel.Zirkel.IsApplet = true; Global.setParameter("options.choice", true); Global.setParameter("options.indicate", true); Global.setParameter("options.indicate.simple", false); Global.setParameter("options.intersection", false); Global.setParameter("options.pointon", false); eric.JMacrosTools.initObjectsProperties(); if (getParameter("selectionsize") != null) { try { final double x = new Double(getParameter("selectionsize")) .doubleValue(); Global.setParameter("selectionsize", x); } catch (final Exception e) { } } ZC = new ZirkelCanvas(!edit, !breaks, !breaks); ZC.addMouseListener(ZC); ZC.addMouseMotionListener(ZC); ZC.setBackground(Global.getParameter("colorbackground", C)); ZC.setFrame(F); ZC.setZirkelCanvasListener(this); if (getParameter("showhidden") != null) ZC.setShowHidden(true); if (style.equals("plain")) getContentPane().add("Center", ZC); else getContentPane().add("Center", new Panel3D(ZC, ZC.getBackground())); ZC.addStatusListener(this); ZC.addKeyListener(this); setShowNames(false); if (status) { Status = new Label(""); Status.setBackground(CC); getContentPane().add("South", new Panel3D(Status, Status.getBackground())); } else if (style.equals("nonvisual")) { Input = new HistoryTextField(this, "Input"); ZC.setTextField(Input); ZC.Visual = false; setShowNames(true); getContentPane().add("South", new Panel3D(Input)); } try { Global.setParameter("digits.edit", Integer .parseInt(getParameter("editdigits"))); } catch (final Exception e) { } try { Global.setParameter("digits.lengths", Integer .parseInt(getParameter("displaydigits"))); } catch (final Exception e) { } try { Global.setParameter("digits.angles", Integer .parseInt(getParameter("angledigits"))); } catch (final Exception e) { } setOption("movename"); setOption("movefixname"); ZC.updateDigits(); setOption("nopopupmenu"); setOption("nomousezoom"); try { Global.setParameter("minpointsize", new Double( getParameter("minpointsize")).doubleValue()); } catch (final Exception e) { } try { Global.setParameter("minlinesize", new Double( getParameter("minlinesize")).doubleValue()); } catch (final Exception e) { } try { Global.setParameter("minfontsize", new Double( getParameter("minfontsize")).doubleValue()); } catch (final Exception e) { } try { Global.setParameter("arrowsize", new Double( getParameter("arrowsize")).doubleValue()); } catch (final Exception e) { } try { final String grid = getParameter("grid"); ZC.ShowGrid = !grid.equals("none"); Global.setParameter("grid.fine", grid.equals("coordinates")); if (getParameter("snap").equals("left")) Global.setParameter("grid.leftsnap", true); } catch (final Exception e) { } if (getParameter("interactive") != null && getParameter("interactive").equals("false")) ZC.setInteractive(false); boolean job = false; ZC.IW = getSize().width; ZC.IH = getSize().height; if (getParameter("germanpoints") != null && getParameter("germanpoints").equals("true")) Global.setParameter("options.germanpoints", true); try { final InputStream o = getClass() .getResourceAsStream("/builtin.mcr"); ZC.ProtectMacros = true; ZC.load(o, false, true); ZC.ProtectMacros = false; o.close(); ZC.PM.removeAll(); } catch (final Exception e) { } filename = getParameter("file"); if (filename == null) { filename = getParameter("job"); job = true; } if (filename != null) { boolean firsttry = true; while (true) { try { URL url; if (filename.toUpperCase().startsWith("HTTP")) url = new URL(firsttry ? FileName.toURL(filename) : filename); else url = new URL(getCodeBase(), firsttry ? FileName .toURL(filename) : filename); ZC.clear(); InputStream in = url.openStream(); if (ZirkelFrame.isCompressed(filename)) in = new GZIPInputStream(in); showStatus(Global.name("loading")); ZC.load(in); toggleGrid(ZC.ShowGrid); if (job) { ZC.displayJob(true); ZC.setDoneListener(this); } if (icons) iconPressed(FirstConstructor); in.close(); if (getParameter("background") != null) { final Image i = getToolkit().getImage( new URL(getCodeBase(), getParameter("background"))); final MediaTracker mt = new MediaTracker(this); mt.addImage(i, 0); mt.waitForID(0); if (mt.checkID(0) && !mt.isErrorAny()) { ZC.setBackground(i); } } ZC.repaint(); } catch (final Exception e) { if (firsttry) { firsttry = false; continue; } final Warning w = new Warning(F, FileName.chop(32, "" + e, 64), Zirkel.name("message"), true); w.center(F); w.setVisible(true); showStatus("" + e); e.printStackTrace(); System.out.println(e); } break; } } if (breaks) { IC = new IconBar(F); IC.setBackground(CC); IC.setIconBarListener(this); IC.addLeft("allback"); if (haveBreaks()) IC.addLeft("nextbreak"); else IC.addLeft("oneforward"); IC.addLeft("allforward"); final javax.swing.JPanel pic = new Panel3D(IC); getContentPane().add("South", pic); IC.setEnabled("nextbreak", false); IC.setEnabled("oneforward", false); IC.setEnabled("allforward", false); ZC.getConstruction().setOriginalOrder(true); jumptostart = (getParameter("jumptostart") != null); } if (getParameter("restrictedmove") != null) { Global.setParameter("restrictedmove", true); } if (getParameter("noconfirmation") != null) { Global.setParameter("confirmation", false); } if (IA != null) settype(2); // IB.forceRepaint(); // IA.forceRepaint(); ZC.setMacroBar(IM); ZC.updateMacroBar(); ZC.recompute(); // Very weird thing which cause applet to be displayed on firefox mac : ZC.setSize(ZC.getSize().width + 1, ZC.getSize().height + 1); ZC.setSize(ZC.getSize().width - 1, ZC.getSize().height - 1); ZC.JCM.hideHandles(null); // ZC.dovalidate(); // ZC.repaint(); } public void setOption(final String option) { try { Global.setParameter("options." + option, getParameter(option) .equals("true")); } catch (final Exception e) { } } DemoRunner DR = null; void initDemo() { getContentPane().setLayout(new BorderLayout()); ZC = new ZirkelCanvas(false, false, false); ZC.setBackground(Global.getParameter("colorbackground", C)); ZC.setFrame(F); ZC.setZirkelCanvasListener(this); if (getParameter("showhidden") != null) ZC.setShowHidden(true); getContentPane().add("Center", new Panel3D(ZC, ZC.getBackground())); Status = new Label("", Label.CENTER); Status.setBackground(C); getContentPane().add("South", new Panel3D(Status, Status.getBackground())); } void setIA(final IconBar IA, final String set) { if (set.indexOf("rename") >= 0) IA.addToggleLeft("rename"); if (set.indexOf("back") >= 0) IA.addLeft("back"); if (set.indexOf("delete") >= 0) IA.addToggleLeft("delete"); if (set.indexOf("undo") >= 0) IA.addLeft("undo"); if (set.indexOf("hidden") >= 0) IA.addOnOffLeft("hidden"); if (set.indexOf("showcolor") >= 0) IA.addMultipleIconLeft("showcolor", ZirkelFrame.Colors.length); if (set.indexOf("color") >= 0) IA.addMultipleIconLeft("color", 6); if (set.indexOf("type") >= 0) IA.addMultipleIconLeft("type", 6); if (set.indexOf("thickness") >= 0) IA.addMultipleIconLeft("thickness", 3); if (set.indexOf("partial") >= 0) IA.addOnOffLeft("partial"); if (set.indexOf("plines") >= 0) IA.addOnOffLeft("plines"); if (set.indexOf("arrow") >= 0) IA.addOnOffLeft("arrow"); if (set.indexOf("showname") >= 0) IA.addOnOffLeft("showname"); if (set.indexOf("showvalue") >= 0) IA.addOnOffLeft("showvalue"); if (set.indexOf("edit") >= 0) IA.addToggleLeft("edit"); if (set.indexOf("obtuse") >= 0) IA.addOnOffLeft("obtuse"); if (set.indexOf("solid") >= 0) IA.addOnOffLeft("solid"); if (set.indexOf("grid") >= 0) IA.addOnOffLeft("grid"); if (set.indexOf("macro") >= 0) IA.addMultipleToggleIconLeft("macro", 3); if (set.indexOf("replay") >= 0) IA.addLeft("replay"); if (set.indexOf("zoom") >= 0) IA.addToggleLeft("zoom"); if (set.indexOf("comment") >= 0) IA.addLeft("comment"); if (set.indexOf("function") >= 0) IA.addLeft("function"); if (set.indexOf("draw") >= 0) IA.addToggleLeft("draw"); } public void makeMacroBar() { if (Global.getParameter("macrobar", true)) { IM = new MacroBar(F); IM.addKeyListener(this); IM.setIconBarListener(this); IM.setBackground(CC); } } public void updateMacroBar() { ZC.updateMacroBar(); } Replay RD = null; public void iconPressed(final String o) { if (RD != null) RD.doclose(); ZC.requestFocus(); if (IA != null && IA.isControlPressed()) { if (o.equals("edit")) { if (CurrentTool != ZirkelFrame.NEdit) IA.setState("edit", false); ZC.editLast(); ZC.repaint(); } IA.clearShiftControl(); return; } for (int i = 0; i < ZirkelFrame.ObjectStrings.length; i++) if (o.equals(ZirkelFrame.ObjectStrings[i])) { if (i == ZirkelFrame.NMacro) runmacro(IB.isShiftPressed()); else settool(i); return; } if (IM != null) // Search in the macro line { final Macro m = IM.find(o); if (m != null) { runMacro(m); return; } } if (o.equals("hidden")) { ZC.setShowHidden(IA.getState("hidden")); } else if (o.equals("partial")) { ZC.setPartial(IA.getState("partial")); } else if (o.equals("plines")) { ZC.setPartialLines(IA.getState("plines")); } else if (o.equals("arrow")) { ZC.setVectors(IA.getState("arrow")); } else if (o.equals("color")) { final int n = IA.getMultipleState("color"); if (n >= 0) setcolor(n); } else if (o.equals("showcolor")) { final int n = IA.getMultipleState("showcolor"); if (n >= 0) showcolor(n); } else if (o.equals("showname")) { setShowNames(IA.getState("showname")); } else if (o.equals("obtuse")) { setObtuse(IA.getState("obtuse")); } else if (o.equals("solid")) { setSolid(IA.getState("solid")); } else if (o.equals("showvalue")) { setShowValues(IA.getState("showvalue")); } else if (o.equals("longnames")) { setLongNames(IA.getState("longnames")); } else if (o.equals("grid")) { toggleGrid(IA.getState("grid")); } else if (o.equals("comment")) { showcomment(); } else if (o.equals("function")) { if (IA.isControlPressed()) ZC.createFunction(); else ZC.createCurve(); } else if (o.equals("type")) { final int n = IA.getMultipleState("type"); if (n >= 0) settype(n); } else if (o.equals("thickness")) { final int n = IA.getMultipleState("thickness"); if (n >= 0) setcolortype(n); } else if (o.equals("edit")) { settool(ZirkelFrame.NEdit); } else if (o.equals("back")) { ZC.back(); ZC.repaint(); } else if (o.equals("undo")) { ZC.undo(); ZC.repaint(); } else if (o.equals("replay")) { replay(); } else if (o.equals("macro")) { final int n = IA.getMultipleState("macro"); switch (n) { case 1: settool(ZirkelFrame.NParameters); break; case 2: settool(ZirkelFrame.NTargets); break; case 0: definemacro(); break; } IA.setState("macro", true); } else if (o.equals("allback")) { if (Last != null && Last instanceof TextObject) ((TextObject) Last).setDoShow(false); final Enumeration e = ZC.getConstruction().elements(); if (e.hasMoreElements()) { Last = (ConstructionObject) e.nextElement(); ZC.paintUntil(Last); if ((Last instanceof TextObject) && Last.valid() && !Last.isSuperHidden()) { ((TextObject) Last).setDoShow(true); } } IC.setEnabled("allforward", true); IC.setEnabled("nextbreak", true); IC.setEnabled("oneforward", true); IC.setEnabled("allback", false); if (haveBreaks() && !Last.isBreak()) iconPressed("nextbreak"); } else if (o.equals("allforward")) { if (Last != null && Last instanceof TextObject) ((TextObject) Last).setDoShow(false); ZC.paintUntil(null); Last = null; IC.setEnabled("allforward", false); IC.setEnabled("nextbreak", false); IC.setEnabled("oneforward", false); IC.setEnabled("allback", true); } else if (o.equals("nextbreak")) { if (Last != null && Last instanceof TextObject) ((TextObject) Last).setDoShow(false); final Enumeration e = ZC.getConstruction().elements(); outer: while (e.hasMoreElements()) { final ConstructionObject next = (ConstructionObject) e .nextElement(); if (next == Last) while (e.hasMoreElements()) { Last = (ConstructionObject) e.nextElement(); if (Last == null || Last.isBreak()) break outer; } } IC.setEnabled("allback", true); if ((Last instanceof TextObject) && Last.valid() && !Last.isSuperHidden()) { ((TextObject) Last).setDoShow(true); } ZC.paintUntil(Last); IC.setEnabled("allback", true); IC.setEnabled("nextbreak", e.hasMoreElements()); IC.setEnabled("allforward", e.hasMoreElements()); } else if (o.equals("oneforward")) { if (Last != null && Last instanceof TextObject) ((TextObject) Last).setDoShow(false); final Enumeration e = ZC.getConstruction().elements(); outer: while (e.hasMoreElements()) { final ConstructionObject next = (ConstructionObject) e .nextElement(); if (next == Last) while (e.hasMoreElements()) { Last = (ConstructionObject) e.nextElement(); if (Last == null || !Last.isHidden()) break outer; if ((Last instanceof TextObject) && Last.valid() && !Last.isSuperHidden()) { ((TextObject) Last).setDoShow(true); break outer; } } } IC.setEnabled("allback", true); ZC.paintUntil(Last); if (!e.hasMoreElements()) { ZC.paintUntil(null); IC.setEnabled("allforward", false); IC.setEnabled("oneforward", false); IC.setEnabled("allback", true); } } else if (o.startsWith("bi_")) { eric.JGlobals.runmacro(ZC, this, "@builtin@/" + o.substring(3)); } IA.clearShiftControl(); IB.clearShiftControl(); } public ObjectConstructor ObjectConstructors[] = // constructors { new PointConstructor(), new BoundedPointConstructor(), new IntersectionConstructor(), new LineConstructor(), new RayConstructor(), new SegmentConstructor(), new SegmentConstructor(true), new CircleConstructor(), new Circle3Constructor(), new CircleConstructor(true), new ParallelConstructor(), new PlumbConstructor(), new MidpointConstructor(), new AngleConstructor(), new AngleConstructor(true), new MoverTool(), new Tracker(), new ObjectTracker(), new AnimatorTool(), new ExpressionConstructor(), new AreaConstructor(), new QuadricConstructor(), new ImageConstructor(), new TextConstructor(), new HiderTool(), new JLocusObjectTracker(), new MacroRunner(), new EditTool(), new SetParameterTool(), new SetTargetsTool(), new SaveJob(), new DeleteTool(), new ReorderTool(), new DrawerTool(), new RenamerTool(), new ZoomerTool(), new BreakpointAnimator() }; public void settool(final int i) { if (IM != null) IM.deselectAll(); ZC.setTool(ObjectConstructors[i]); CurrentTool = i; if (i < ZirkelFrame.IconNumber && IB.have(ZirkelFrame.ObjectStrings[i])) IB.toggle(ZirkelFrame.ObjectStrings[i]); else IB.unselect(FirstConstructor); ObjectConstructors[i].resetFirstTime(ZC); if (i == ZirkelFrame.NTargets) IA.setMultipleState("macro", 2); else if (i == ZirkelFrame.NParameters) IA.setMultipleState("macro", 1); else { IA.setMultipleState("macro", 0); IA.setState("macro", false); } IA.setState("delete", i == ZirkelFrame.NDelete); IA.setState("edit", i == ZirkelFrame.NEdit); IA.setState("draw", i == ZirkelFrame.NDraw); IA.setState("rename", i == ZirkelFrame.NRename); IA.setState("zoom", i == ZirkelFrame.NZoom); } public void setcolor(final int c) { IA.setMultipleState("color", c); ZC.setDefaultColor(c); } public void settype(final int c) { IA.setMultipleState("type", c); ZC.setDefaultType(c); } public void setcolortype(final int c) { IA.setMultipleState("thickness", c); ZC.setDefaultColorType(c); } @Override public void showStatus(final String s) { super.showStatus(s); if (Status != null) Status.setText(s); } public void keyPressed(final KeyEvent e) { } public void keyReleased(final KeyEvent e) { final int code = e.getKeyCode(); int i; final boolean Shift = e.isShiftDown(), Control = e.isControlDown(), Alt = e .isAltDown(); if (Control) { if (Options.indexOf("type") > 0) for (i = 0; i < ZirkelFrame.PointKeys.length; i++) { if (ZirkelFrame.PointKeys[i] == code) { settype(i); return; } } if (Options.indexOf("color") > 0) for (i = 0; i < ZirkelFrame.ColorKeys.length; i++) { if (ZirkelFrame.ColorKeys[i] == code) { setcolor(i); return; } } } else if (Alt) { if (Options.indexOf("showcolor") > 0) for (i = 0; i < ZirkelFrame.ColorKeys.length; i++) { if (ZirkelFrame.ColorKeys[i] == code) { showcolor(i); return; } } if (Options.indexOf("thickness") > 0) for (i = 0; i < ZirkelFrame.ColorTypeKeys.length; i++) { if (ZirkelFrame.ColorTypeKeys[i] == code) { setcolortype(i); return; } } } else { switch (code) { case KeyEvent.VK_ESCAPE: if (ZC.getCurrentTool() instanceof DrawerTool) ZC.clearDrawings(); else ZC.reset(); break; } } if (!e.isActionKey()) return; switch (code) { case KeyEvent.VK_F1: showVersion(); break; case KeyEvent.VK_F7: if (Shift || Control) { setShowNames(!IA.getState("showname")); } break; case KeyEvent.VK_F8: if (Shift || Control) { setLongNames(!IA.getState("longnames")); } break; case KeyEvent.VK_F9: if (Shift || Control) { IA.setState("partial", !IA.getState("partial")); ZC.setPartial(IA.getState("partial")); } else { if (Options.indexOf("hidden") < 0) break; IA.setState("hidden", !IA.getState("hidden")); ZC.setShowHidden(IA.getState("hidden")); } break; case KeyEvent.VK_F10: if (Shift || Control) { IA.setState("plines", !IA.getState("plines")); ZC.setPartial(IA.getState("plines")); } else showcomment(); break; case KeyEvent.VK_F11: if (Shift || Control) { IA.setState("arrow", !IA.getState("arrow")); ZC.setPartial(IA.getState("arrow")); } else showconstruction(); break; case KeyEvent.VK_F12: if (Shift || Control) { IA.setState("obtuse", !IA.getState("obtuse")); ZC.setObtuse(IA.getState("obtuse")); } else toggleGrid(); break; case KeyEvent.VK_LEFT: if (Shift && ZC.getCurrentTool() instanceof ObjectTracker) ((ObjectTracker) ZC.getCurrentTool()).increaseOmit(); else if (Shift && ZC.getCurrentTool() instanceof BreakpointAnimator) ((BreakpointAnimator) ZC.getCurrentTool()).decreaseSpeed(); else if (Shift && ZC.getCurrentTool() instanceof AnimatorTool) ((AnimatorTool) ZC.getCurrentTool()).decreaseSpeed(); else ZC.shift(-0.2, 0); break; case KeyEvent.VK_RIGHT: if (Shift && ZC.getCurrentTool() instanceof ObjectTracker) ((ObjectTracker) ZC.getCurrentTool()).decreaseOmit(); else if (Shift && ZC.getCurrentTool() instanceof BreakpointAnimator) ((BreakpointAnimator) ZC.getCurrentTool()).increaseSpeed(); else if (Shift && ZC.getCurrentTool() instanceof AnimatorTool) ((AnimatorTool) ZC.getCurrentTool()).increaseSpeed(); else ZC.shift(0.2, 0); break; case KeyEvent.VK_UP: ZC.shift(0, 0.2); break; case KeyEvent.VK_DOWN: ZC.shift(0, -0.2); break; } } public void keyTyped(final KeyEvent e) { final char c = e.getKeyChar(); if (e.isControlDown() || e.isAltDown()) return; int i; for (i = 0; i < ZirkelFrame.ObjectKeys.length; i++) { if (c == ZirkelFrame.ObjectKeys[i]) { if (Tools.indexOf(ZirkelFrame.ObjectStrings[i]) >= 0) settool(i); return; } } switch (c) { case KeyEvent.VK_BACK_SPACE: ZC.undo(); ZC.repaint(); return; case '+': ZC.magnify(1 / Math.sqrt(Math.sqrt(2))); break; case '-': ZC.magnify(Math.sqrt(Math.sqrt(2))); break; } } public void initLightColors() { final int n = ZirkelFrame.Colors.length; ZirkelFrame.LightColors = new Color[n]; final Color back = C; final int red = back.getRed(), green = back.getGreen(), blue = back .getBlue(); final double lambda = 0.4; for (int i = 0; i < n; i++) { final int r = (int) (red * (1 - lambda) + ZirkelFrame.Colors[i] .getRed() * lambda); final int g = (int) (green * (1 - lambda) + ZirkelFrame.Colors[i] .getGreen() * lambda); final int b = (int) (blue * (1 - lambda) + ZirkelFrame.Colors[i] .getBlue() * lambda); ZirkelFrame.LightColors[i] = new Color(r, g, b); } } public void initObjectKeys() { ZirkelFrame.ObjectKeys = new char[ZirkelFrame.ObjectStrings.length]; for (int i = 0; i < ZirkelFrame.ObjectStrings.length; i++) { final String shortcut = Zirkel.name("shortcuts." + ZirkelFrame.ObjectStrings[i]); if (shortcut.length() > 0) ZirkelFrame.ObjectKeys[i] = shortcut.charAt(0); } } public void notifyDone() { repaint(); try { Thread.sleep(500); } catch (final Exception e) { } if (Global.getParameter("confirmation", true)) { final Warning w = new Warning(F, Zirkel.name("done"), Zirkel .name("message"), true); w.center(F); w.setVisible(true); } final String sol = getParameter("solution"); if (sol != null) { try { final AppletContext ac = getAppletContext(); ac.showDocument(new URL(getCodeBase(), FileName.toURL(sol))); } catch (final Exception e) { System.out.println(e); e.printStackTrace(); } } } public void showcolor(final int c) { ZC.setShowColor(c); } public void showcomment() { if (F == null) return; final CommentDialog d = new CommentDialog(F, ZC.getComment(), Zirkel .name("comment.title"), ZC.displayJob()); ZC.setComment(d.getText()); } public void showconstruction() { if (F == null) return; } public void toggleGrid() { ZC.toggleShowGrid(); } void definemacro() { if (!ZC.defineMacro()) return; if (ZC.getOC() instanceof SetTargetsTool) settool(ZirkelFrame.NParameters); else ZC.getOC().reset(ZC); } String OldMacro = null; public void runmacro(final boolean shift) { Macro m = null; if (OldMacro == null && ZC.getMacros().size() == 1) m = ((MacroItem) ZC.getMacros().elementAt(0)).M; else { m = ZC.chooseMacro(OldMacro); if (!shift || m == null) m = ZC.chooseMacro(); } if (m == null) { settool(CurrentTool); return; } runMacro(m); } public void runMacro(final Macro m) { ((MacroRunner) ObjectConstructors[ZirkelFrame.NMacro]).setMacro(m, ZC); settool(ZirkelFrame.NMacro); if (IM != null) IM.select(m); IB.setMultipleState("macro", 0); OldMacro = m.getName(); } public void setShowNames(final boolean flag) { if (IA != null) IA.setState("showname", flag); Global.setParameter("options.point.shownames", flag); ZC.setShowNames(flag); } public void setObtuse(final boolean flag) { IA.setState("obtuse", flag); Global.setParameter("options.obtuse", flag); ZC.setObtuse(flag); } public void setSolid(final boolean flag) { IA.setState("solid", flag); Global.setParameter("options.solid", flag); ZC.setSolid(flag); } public void setShowValues(final boolean flag) { IA.setState("showvalue", flag); Global.setParameter("options.showvalue", flag); ZC.setShowValues(flag); } public void setLongNames(final boolean flag) { IA.setState("longnames", flag); Global.setParameter("options.longnames", flag); ZC.setLongNames(flag); } public void toggleGrid(final boolean grid) { ZC.setShowGrid(grid); if (IA != null) IA.setState("grid", grid); } public void loadsettings() { setcolor(ZC.getDefaultColor()); settype(ZC.getDefaultType()); setcolortype(ZC.getDefaultColorType()); IA.setState("partial", ZC.getPartial()); IA.setState("plines", ZC.getPartialLines()); IA.setState("arrow", ZC.getVectors()); ZC.setHidden(false); } public void doAction(final String o) { if (o.equals("Input")) { try { ZC.getConstruction().interpret(ZC, Input.getText(), ""); Input.remember(); Input.setText(""); loadsettings(); ZC.validate(); ZC.getConstruction().updateCircleDep(); } catch (final ConstructionException e) { ZC.warning(e.getDescription()); } } } public void itemAction(final String o, final boolean flag) { } AnimatorTool A = null; @Override public void start() { if (getParameter("demo") != null) { DR = new DemoRunner(ZC, this, getParameter("demo"), Status); return; } final Construction C = ZC.getConstruction(); ZC.paint(ZC.getGraphics()); ZC.allowRightMouse(true); if (C.TrackP != null) { try { final ConstructionObject P = C.find(C.TrackP); if (!((P instanceof PointObject) || (P instanceof PrimitiveLineObject))) throw new ConstructionException(""); final ConstructionObject po[] = new ConstructionObject[C.TrackPO .size()]; for (int i = 0; i < po.length; i++) { final ConstructionObject o = C.find((String) C.TrackPO .elementAt(i)); if (o == null || !((o instanceof PointObject) || (o instanceof PrimitiveLineObject))) throw new ConstructionException(""); po[i] = o; } PointObject PM = null; if (C.TrackPM != null) PM = (PointObject) C.find(C.TrackPM); if (C.TrackO != null) { final ConstructionObject O = C.find(C.TrackO); if (P == null || (PM == null && (O instanceof ExpressionObject)) || O == null) throw new ConstructionException(""); final ObjectTracker ot = new ObjectTracker(P, PM, O, ZC, C.Animate, C.Paint, po); if (C.Animate) ot.Interactive = false; ot.setOmit(C.Omit); ZC.setTool(ot); if (!edit) ZC.allowRightMouse(false); ZC.validate(); ZC.repaint(); } else { if (P == null) throw new ConstructionException(""); ZC.setTool(new Tracker(P, po)); if (PM != null) PM.setSelected(true); ZC.validate(); ZC.repaint(); } } catch (final Exception e) { } } else if (C.AnimateP != null) { try { final PointObject P = (PointObject) C.find(C.AnimateP); if (P == null || !P.moveable()) throw new ConstructionException(""); final Enumeration e = C.AnimateV.elements(); while (e.hasMoreElements()) { final String s = (String) e.nextElement(); final ConstructionObject o = C.find(s); if (o == null || !(o instanceof SegmentObject || o instanceof PrimitiveCircleObject || o instanceof PointObject)) throw new ConstructionException(""); } ZC.setTool(A = new AnimatorTool(P, C.AnimateV, ZC, C.AnimateNegative, C.AnimateOriginal, C.AnimateDelay)); ZC.allowRightMouse(false); A.setInteractive(false); } catch (final Exception e) { // e.printStackTrace(); } } else if (C.AnimateBreakpoints) { final BreakpointAnimator bp = new BreakpointAnimator(); bp.setLoop(C.AnimateLoop); bp.setSpeed(C.AnimateTime); ZC.allowRightMouse(false); ZC.setTool(bp); bp.reset(ZC); } else if (jumptostart) { System.out.println("here"); iconPressed("allback"); } } public void showVersion() { showStatus(Zirkel.name("program.name") + " " + Zirkel.name("program.version") + " " + Zirkel.name("program.date")); } @Override public void stop() { ZC.invalidate(); if (DR != null) DR.stop(); } @Override public void destroy() { ZC.invalidate(); if (DR != null) DR.stop(); } public void replay() { if (RD != null) return; RD = new Replay(F, ZC) { /** * */ private static final long serialVersionUID = 1L; @Override public void doclose() { RD = null; super.doclose(); } }; final Dimension d = getToolkit().getScreenSize(); RD.setLocation(d.width - 100 - RD.getSize().width, 100); ZC.OC.invalidate(ZC); RD.setVisible(true); } public void replayChosen() { replay(); } public boolean enabled(final String function) { if (Tools.indexOf("all") >= 0) return true; return Tools.indexOf(function) >= 0; } public boolean haveBreaks() { final Enumeration e = ZC.getConstruction().elements(); while (e.hasMoreElements()) { if (((ConstructionObject) e.nextElement()).isBreak()) return true; } return false; } public String loadImage() { return null; } public Image doLoadImage(final String filename) { Image i; try { i = getToolkit().getImage(new URL(getCodeBase(), filename)); final MediaTracker mt = new MediaTracker(this); mt.addImage(i, 0); mt.waitForID(0); if (mt.checkID(0) && !mt.isErrorAny()) { return i; } } catch (final Exception e) { showStatus(e.toString()); } return null; } /** * For external scripting: Interprets a command s using the internal * construction language. (Expl: "A=point()") * * @param s * @return Command executed or not */ public boolean interpret(final String s) { try { ZC.getConstruction().interpret(ZC, s); ZC.repaint(); return true; } catch (final ConstructionException e) { return false; } } /** * For external scripting: Gets the construction as an XML stream contained * in a string. * * @return Construction. */ public String getConstruction() { final ByteArrayOutputStream out = new ByteArrayOutputStream(); try { ZC.save(out, true, true, false, ZC.getMacros(), ""); return out.toString("utf-8"); } catch (final Exception e) { return "Error"; } } /** * For external scripting: Receives the construction as an XML stream, * contained in a string. * * @param s * @return Success */ public boolean putConstruction(final String s) { try { final ByteArrayOutputStream bout = new ByteArrayOutputStream(); final PrintWriter out = new PrintWriter(new OutputStreamWriter( bout, "utf-8")); out.print(s); out.close(); final byte b[] = bout.toByteArray(); final InputStream in = new ByteArrayInputStream(b); ZC.load(in, true, true); return true; } catch (final Exception e) { e.printStackTrace(); return false; } } } ./src/rene/zirkel/CVS/RevisionCache/ZirkelApplet.java#1.40000644000175000017500000012135211134575643021722 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel; import java.applet.AppletContext; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Frame; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.Image; import java.awt.Label; import java.awt.MediaTracker; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.URL; import java.util.Enumeration; import java.util.Locale; import java.util.StringTokenizer; import java.util.zip.GZIPInputStream; import javax.swing.JPanel; import rene.dialogs.Warning; import rene.gui.DoActionListener; import rene.gui.Global; import rene.gui.HistoryTextField; import rene.gui.IconBar; import rene.gui.IconBarListener; import rene.gui.Panel3D; import rene.util.FileName; import rene.util.parser.StringParser; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.constructors.AngleConstructor; import rene.zirkel.constructors.AreaConstructor; import rene.zirkel.constructors.BoundedPointConstructor; import rene.zirkel.constructors.Circle3Constructor; import rene.zirkel.constructors.CircleConstructor; import rene.zirkel.constructors.ExpressionConstructor; import rene.zirkel.constructors.ImageConstructor; import rene.zirkel.constructors.IntersectionConstructor; import rene.zirkel.constructors.LineConstructor; import rene.zirkel.constructors.MidpointConstructor; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.constructors.ParallelConstructor; import rene.zirkel.constructors.PlumbConstructor; import rene.zirkel.constructors.PointConstructor; import rene.zirkel.constructors.QuadricConstructor; import rene.zirkel.constructors.RayConstructor; import rene.zirkel.constructors.SegmentConstructor; import rene.zirkel.constructors.TextConstructor; import rene.zirkel.dialogs.CommentDialog; import rene.zirkel.dialogs.Replay; import rene.zirkel.listener.DoneListener; import rene.zirkel.listener.StatusListener; import rene.zirkel.macro.Macro; import rene.zirkel.macro.MacroBar; import rene.zirkel.macro.MacroItem; import rene.zirkel.macro.MacroRunner; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.SegmentObject; import rene.zirkel.objects.TextObject; import rene.zirkel.tools.AnimatorTool; import rene.zirkel.tools.BreakpointAnimator; import rene.zirkel.tools.DeleteTool; import rene.zirkel.tools.DrawerTool; import rene.zirkel.tools.EditTool; import rene.zirkel.tools.HiderTool; import rene.zirkel.tools.MoverTool; import rene.zirkel.tools.ObjectTracker; import rene.zirkel.tools.RenamerTool; import rene.zirkel.tools.ReorderTool; import rene.zirkel.tools.SaveJob; import rene.zirkel.tools.SetParameterTool; import rene.zirkel.tools.SetTargetsTool; import rene.zirkel.tools.Tracker; import rene.zirkel.tools.ZoomerTool; import eric.JLocusObjectTracker; public class ZirkelApplet extends javax.swing.JApplet implements IconBarListener, StatusListener, KeyListener, DoneListener, DoActionListener, ZirkelCanvasInterface { /** * */ private static final long serialVersionUID = 1L; ZirkelCanvas ZC; IconBar IA, IB, IC; MacroBar IM; String filename = "test.zir"; Label Status; Color C, CC; Frame F; String FirstConstructor = "point", Tools = "all", Options = ""; int CurrentTool = 0; HistoryTextField Input; ConstructionObject Last = null; boolean edit; boolean jumptostart; // for applets with replay buttons and start() public String JScontrol() { String exp = ""; try { exp = String .valueOf(ZC.getConstruction().find("jscode").getValue()); } catch (final Exception ex) { } return exp; } public void JSsend(final String s) { ZC.JSsend(s); repaint(); } public String JSreceive(final String s) { return ZC.JSreceive(s); } @Override public void paint(final Graphics gc) { super.paint(gc); // ZC.recompute(); ZC.JCM.readXmlTags(); ZC.dovalidate(); ZC.repaint(); } final static public String DefaultIcons = " point line segment ray circle fixedcircle" + " parallel plumb circle3 midpoint angle fixedangle" + " move tracker objecttracker hide expression area text quadric" + " runmacro animate "; final static public String DefaultOptions = " back undo delete color type thickness" + " hidden showcolor macro grid " + " draw twolines indicate "; @Override public void init() { if (getParameter("language") != null) try { Locale.setDefault(new Locale(getParameter("language"), "")); } catch (final RuntimeException e) { } Global.initBundle("rene/zirkel/docs/ZirkelProperties"); Count.resetAll(); CC = C = Global.Background; initLightColors(); initObjectKeys(); final Dimension dscreen = getToolkit().getScreenSize(); F = new Frame(); F.setSize(dscreen); if (getParameter("oldicons") == null) { Global.setParameter("iconpath", "/eric/icons/palette/"); Global.setParameter("iconsize", getParameter("smallicons") == null ? 32 : 24); Global.setParameter("icontype", "png"); } else { Global.setParameter("iconpath", "//eric/icons/palette/"); Global.setParameter("iconsize", 20); } String color = getParameter("color"); if (color != null) { final StringParser p = new StringParser(getParameter("color")); p.replace(',', ' '); int red, green, blue; red = p.parseint(); green = p.parseint(); blue = p.parseint(); C = new Color(red, green, blue); Global.Background = C; Global.ControlBackground = C; CC = C; } color = getParameter("colorbackground"); if (color != null) Global.setParameter("colorbackground", color); else Global.removeParameter("colorbackground"); color = getParameter("colorselect"); if (color != null) Global.setParameter("colorselect", color); else Global.removeParameter("colorselect"); ZirkelFrame.SelectColor = Global.getParameter("colorselect", Color.red); color = getParameter("colortarget"); if (color != null) Global.setParameter("colortarget", color); else Global.removeParameter("colortarget"); ZirkelFrame.TargetColor = Global .getParameter("colorselect", Color.pink); ZirkelFrame.initLightColors(Color.white); final String font = getParameter("font"); if (font != null) { if (font.indexOf("bold") >= 0) Global.setParameter("font.bold", true); if (font.indexOf("large") >= 0) Global.setParameter("font.large", true); } if (getParameter("demo") != null) { initDemo(); return; } String style = getParameter("style"); // On firefox mac, I don't know why, but getParameter("style") return // null // even if there is a "style" parameter tag... so : if (style == null) { if ((getParameter("tools") != null) || (getParameter("options") != null)) style = "icons"; else style = "plain"; } final boolean simple = (style.equals("plain") || style.equals("3D") || style .equals("breaks")); edit = !simple; final boolean status = (style.equals("full") || style.equals("status")); final boolean icons = (style.equals("full") || style.equals("nonvisual") || style.equals("icons")); final boolean breaks = (style.equals("breaks")); if (getParameter("edit") != null) edit = true; for (int i = 0; i < ZirkelFrame.Colors.length; i++) { color = getParameter("color" + i); if (color != null) Global.setParameter("color" + i, color); else Global.removeParameter("color" + i); } ZirkelFrame.initLightColors(Color.white); getContentPane().setLayout(new BorderLayout()); Tools = getParameter("tools"); if (Tools == null || Tools.equals("defaults")) Tools = DefaultIcons; Options = getParameter("options"); if (Options == null || Options.equals("defaults")) Options = DefaultOptions; Global.setParameter("macrobar", Options.indexOf("macrobar") >= 0); // makeMacroBar(); if (icons) { IB = new IconBar(F); IB.setBackground(CC); IB.setIconBarListener(this); StringTokenizer t = new StringTokenizer(Tools); int count = 0; while (t.hasMoreTokens()) { t.nextToken(); count++; } final String a[] = new String[count]; t = new StringTokenizer(Tools); count = 0; while (t.hasMoreTokens()) { a[count++] = t.nextToken(); } if (count > 0) FirstConstructor = a[0]; IB.addToggleGroupLeft(a); // IB.addSeparatorLeft(); if (Options.indexOf("twolines") >= 0 || Options.indexOf("defaults") >= 0) { IA = new IconBar(F); IA.setBackground(CC); IA.setIconBarListener(this); setIA(IA, Options); final JPanel north = new JPanel(); north.setBackground(CC); north.setLayout(new GridLayout(0, 1)); north.add(IA); north.add(IB); if (IM != null) north.add(IM); getContentPane().add("North", new Panel3D(north, CC)); } else { IA = IB; setIA(IB, Options); if (IM != null) { final JPanel north = new JPanel(); north.setBackground(CC); north.setLayout(new GridLayout(0, 1)); north.add(IA); if (IM != null) north.add(IM); getContentPane().add("North", new Panel3D(north, CC)); } else { getContentPane().add("North", new Panel3D(IB, CC)); } } } else IA = IB = null; rene.zirkel.Zirkel.IsApplet = true; Global.setParameter("options.choice", true); Global.setParameter("options.indicate", true); Global.setParameter("options.indicate.simple", false); Global.setParameter("options.intersection", false); Global.setParameter("options.pointon", false); eric.JMacrosTools.initObjectsProperties(); if (getParameter("selectionsize") != null) { try { final double x = new Double(getParameter("selectionsize")) .doubleValue(); Global.setParameter("selectionsize", x); } catch (final Exception e) { } } ZC = new ZirkelCanvas(!edit, !breaks, !breaks); ZC.addMouseListener(ZC); ZC.addMouseMotionListener(ZC); ZC.setBackground(Global.getParameter("colorbackground", C)); ZC.setFrame(F); ZC.setZirkelCanvasListener(this); if (getParameter("showhidden") != null) ZC.setShowHidden(true); if (style.equals("plain")) getContentPane().add("Center", ZC); else getContentPane().add("Center", new Panel3D(ZC, ZC.getBackground())); ZC.addStatusListener(this); ZC.addKeyListener(this); setShowNames(false); if (status) { Status = new Label(""); Status.setBackground(CC); getContentPane().add("South", new Panel3D(Status, Status.getBackground())); } else if (style.equals("nonvisual")) { Input = new HistoryTextField(this, "Input"); ZC.setTextField(Input); ZC.Visual = false; setShowNames(true); getContentPane().add("South", new Panel3D(Input)); } try { Global.setParameter("digits.edit", Integer .parseInt(getParameter("editdigits"))); } catch (final Exception e) { } try { Global.setParameter("digits.lengths", Integer .parseInt(getParameter("displaydigits"))); } catch (final Exception e) { } try { Global.setParameter("digits.angles", Integer .parseInt(getParameter("angledigits"))); } catch (final Exception e) { } setOption("movename"); setOption("movefixname"); ZC.updateDigits(); setOption("nopopupmenu"); setOption("nomousezoom"); try { Global.setParameter("minpointsize", new Double( getParameter("minpointsize")).doubleValue()); } catch (final Exception e) { } try { Global.setParameter("minlinesize", new Double( getParameter("minlinesize")).doubleValue()); } catch (final Exception e) { } try { Global.setParameter("minfontsize", new Double( getParameter("minfontsize")).doubleValue()); } catch (final Exception e) { } try { Global.setParameter("arrowsize", new Double( getParameter("arrowsize")).doubleValue()); } catch (final Exception e) { } try { final String grid = getParameter("grid"); ZC.ShowGrid = !grid.equals("none"); Global.setParameter("grid.fine", grid.equals("coordinates")); if (getParameter("snap").equals("left")) Global.setParameter("grid.leftsnap", true); } catch (final Exception e) { } if (getParameter("interactive") != null && getParameter("interactive").equals("false")) ZC.setInteractive(false); boolean job = false; ZC.IW = getSize().width; ZC.IH = getSize().height; if (getParameter("germanpoints") != null && getParameter("germanpoints").equals("true")) Global.setParameter("options.germanpoints", true); try { final InputStream o = getClass() .getResourceAsStream("/builtin.mcr"); ZC.ProtectMacros = true; ZC.load(o, false, true); ZC.ProtectMacros = false; o.close(); ZC.PM.removeAll(); } catch (final Exception e) { } filename = getParameter("file"); if (filename == null) { filename = getParameter("job"); job = true; } if (filename != null) { boolean firsttry = true; while (true) { try { URL url; if (filename.toUpperCase().startsWith("HTTP")) url = new URL(firsttry ? FileName.toURL(filename) : filename); else url = new URL(getCodeBase(), firsttry ? FileName .toURL(filename) : filename); ZC.clear(); InputStream in = url.openStream(); if (ZirkelFrame.isCompressed(filename)) in = new GZIPInputStream(in); showStatus(Global.name("loading")); ZC.load(in); toggleGrid(ZC.ShowGrid); if (job) { ZC.displayJob(true); ZC.setDoneListener(this); } if (icons) iconPressed(FirstConstructor); in.close(); if (getParameter("background") != null) { final Image i = getToolkit().getImage( new URL(getCodeBase(), getParameter("background"))); final MediaTracker mt = new MediaTracker(this); mt.addImage(i, 0); mt.waitForID(0); if (mt.checkID(0) && !mt.isErrorAny()) { ZC.setBackground(i); } } ZC.repaint(); } catch (final Exception e) { if (firsttry) { firsttry = false; continue; } final Warning w = new Warning(F, FileName.chop(32, "" + e, 64), Zirkel.name("message"), true); w.center(F); w.setVisible(true); showStatus("" + e); e.printStackTrace(); System.out.println(e); } break; } } if (breaks) { IC = new IconBar(F); IC.setBackground(CC); IC.setIconBarListener(this); IC.addLeft("allback"); if (haveBreaks()) IC.addLeft("nextbreak"); else IC.addLeft("oneforward"); IC.addLeft("allforward"); final javax.swing.JPanel pic = new Panel3D(IC); getContentPane().add("South", pic); IC.setEnabled("nextbreak", false); IC.setEnabled("oneforward", false); IC.setEnabled("allforward", false); ZC.getConstruction().setOriginalOrder(true); jumptostart = (getParameter("jumptostart") != null); } if (getParameter("restrictedmove") != null) { Global.setParameter("restrictedmove", true); } if (getParameter("noconfirmation") != null) { Global.setParameter("confirmation", false); } if (IA != null) settype(2); // IB.forceRepaint(); // IA.forceRepaint(); ZC.setMacroBar(IM); ZC.updateMacroBar(); ZC.recompute(); // Very weird thing which cause applet to be displayed on firefox mac : ZC.setSize(ZC.getSize().width + 1, ZC.getSize().height + 1); ZC.setSize(ZC.getSize().width - 1, ZC.getSize().height - 1); ZC.JCM.hideHandles(null); // ZC.dovalidate(); // ZC.repaint(); } public void setOption(final String option) { try { Global.setParameter("options." + option, getParameter(option) .equals("true")); } catch (final Exception e) { } } DemoRunner DR = null; void initDemo() { getContentPane().setLayout(new BorderLayout()); ZC = new ZirkelCanvas(false, false, false); ZC.setBackground(Global.getParameter("colorbackground", C)); ZC.setFrame(F); ZC.setZirkelCanvasListener(this); if (getParameter("showhidden") != null) ZC.setShowHidden(true); getContentPane().add("Center", new Panel3D(ZC, ZC.getBackground())); Status = new Label("", Label.CENTER); Status.setBackground(C); getContentPane().add("South", new Panel3D(Status, Status.getBackground())); } void setIA(final IconBar IA, final String set) { if (set.indexOf("rename") >= 0) IA.addToggleLeft("rename"); if (set.indexOf("back") >= 0) IA.addLeft("back"); if (set.indexOf("delete") >= 0) IA.addToggleLeft("delete"); if (set.indexOf("undo") >= 0) IA.addLeft("undo"); if (set.indexOf("hidden") >= 0) IA.addOnOffLeft("hidden"); if (set.indexOf("showcolor") >= 0) IA.addMultipleIconLeft("showcolor", ZirkelFrame.Colors.length); if (set.indexOf("color") >= 0) IA.addMultipleIconLeft("color", 6); if (set.indexOf("type") >= 0) IA.addMultipleIconLeft("type", 6); if (set.indexOf("thickness") >= 0) IA.addMultipleIconLeft("thickness", 3); if (set.indexOf("partial") >= 0) IA.addOnOffLeft("partial"); if (set.indexOf("plines") >= 0) IA.addOnOffLeft("plines"); if (set.indexOf("arrow") >= 0) IA.addOnOffLeft("arrow"); if (set.indexOf("showname") >= 0) IA.addOnOffLeft("showname"); if (set.indexOf("showvalue") >= 0) IA.addOnOffLeft("showvalue"); if (set.indexOf("edit") >= 0) IA.addToggleLeft("edit"); if (set.indexOf("obtuse") >= 0) IA.addOnOffLeft("obtuse"); if (set.indexOf("solid") >= 0) IA.addOnOffLeft("solid"); if (set.indexOf("grid") >= 0) IA.addOnOffLeft("grid"); if (set.indexOf("macro") >= 0) IA.addMultipleToggleIconLeft("macro", 3); if (set.indexOf("replay") >= 0) IA.addLeft("replay"); if (set.indexOf("zoom") >= 0) IA.addToggleLeft("zoom"); if (set.indexOf("comment") >= 0) IA.addLeft("comment"); if (set.indexOf("function") >= 0) IA.addLeft("function"); if (set.indexOf("draw") >= 0) IA.addToggleLeft("draw"); } public void makeMacroBar() { if (Global.getParameter("macrobar", true)) { IM = new MacroBar(F); IM.addKeyListener(this); IM.setIconBarListener(this); IM.setBackground(CC); } } public void updateMacroBar() { ZC.updateMacroBar(); } Replay RD = null; public void iconPressed(final String o) { if (RD != null) RD.doclose(); ZC.requestFocus(); if (IA != null && IA.isControlPressed()) { if (o.equals("edit")) { if (CurrentTool != ZirkelFrame.NEdit) IA.setState("edit", false); ZC.editLast(); ZC.repaint(); } IA.clearShiftControl(); return; } for (int i = 0; i < ZirkelFrame.ObjectStrings.length; i++) if (o.equals(ZirkelFrame.ObjectStrings[i])) { if (i == ZirkelFrame.NMacro) runmacro(IB.isShiftPressed()); else settool(i); return; } if (IM != null) // Search in the macro line { final Macro m = IM.find(o); if (m != null) { runMacro(m); return; } } if (o.equals("hidden")) { ZC.setShowHidden(IA.getState("hidden")); } else if (o.equals("partial")) { ZC.setPartial(IA.getState("partial")); } else if (o.equals("plines")) { ZC.setPartialLines(IA.getState("plines")); } else if (o.equals("arrow")) { ZC.setVectors(IA.getState("arrow")); } else if (o.equals("color")) { final int n = IA.getMultipleState("color"); if (n >= 0) setcolor(n); } else if (o.equals("showcolor")) { final int n = IA.getMultipleState("showcolor"); if (n >= 0) showcolor(n); } else if (o.equals("showname")) { setShowNames(IA.getState("showname")); } else if (o.equals("obtuse")) { setObtuse(IA.getState("obtuse")); } else if (o.equals("solid")) { setSolid(IA.getState("solid")); } else if (o.equals("showvalue")) { setShowValues(IA.getState("showvalue")); } else if (o.equals("longnames")) { setLongNames(IA.getState("longnames")); } else if (o.equals("grid")) { toggleGrid(IA.getState("grid")); } else if (o.equals("comment")) { showcomment(); } else if (o.equals("function")) { if (IA.isControlPressed()) ZC.createFunction(); else ZC.createCurve(); } else if (o.equals("type")) { final int n = IA.getMultipleState("type"); if (n >= 0) settype(n); } else if (o.equals("thickness")) { final int n = IA.getMultipleState("thickness"); if (n >= 0) setcolortype(n); } else if (o.equals("edit")) { settool(ZirkelFrame.NEdit); } else if (o.equals("back")) { ZC.back(); ZC.repaint(); } else if (o.equals("undo")) { ZC.undo(); ZC.repaint(); } else if (o.equals("replay")) { replay(); } else if (o.equals("macro")) { final int n = IA.getMultipleState("macro"); switch (n) { case 1: settool(ZirkelFrame.NParameters); break; case 2: settool(ZirkelFrame.NTargets); break; case 0: definemacro(); break; } IA.setState("macro", true); } else if (o.equals("allback")) { if (Last != null && Last instanceof TextObject) ((TextObject) Last).setDoShow(false); final Enumeration e = ZC.getConstruction().elements(); if (e.hasMoreElements()) { Last = (ConstructionObject) e.nextElement(); ZC.paintUntil(Last); if ((Last instanceof TextObject) && Last.valid() && !Last.isSuperHidden()) { ((TextObject) Last).setDoShow(true); } } IC.setEnabled("allforward", true); IC.setEnabled("nextbreak", true); IC.setEnabled("oneforward", true); IC.setEnabled("allback", false); if (haveBreaks() && !Last.isBreak()) iconPressed("nextbreak"); } else if (o.equals("allforward")) { if (Last != null && Last instanceof TextObject) ((TextObject) Last).setDoShow(false); ZC.paintUntil(null); Last = null; IC.setEnabled("allforward", false); IC.setEnabled("nextbreak", false); IC.setEnabled("oneforward", false); IC.setEnabled("allback", true); } else if (o.equals("nextbreak")) { if (Last != null && Last instanceof TextObject) ((TextObject) Last).setDoShow(false); final Enumeration e = ZC.getConstruction().elements(); outer: while (e.hasMoreElements()) { final ConstructionObject next = (ConstructionObject) e .nextElement(); if (next == Last) while (e.hasMoreElements()) { Last = (ConstructionObject) e.nextElement(); if (Last == null || Last.isBreak()) break outer; } } IC.setEnabled("allback", true); if ((Last instanceof TextObject) && Last.valid() && !Last.isSuperHidden()) { ((TextObject) Last).setDoShow(true); } ZC.paintUntil(Last); IC.setEnabled("allback", true); IC.setEnabled("nextbreak", e.hasMoreElements()); IC.setEnabled("allforward", e.hasMoreElements()); } else if (o.equals("oneforward")) { if (Last != null && Last instanceof TextObject) ((TextObject) Last).setDoShow(false); final Enumeration e = ZC.getConstruction().elements(); outer: while (e.hasMoreElements()) { final ConstructionObject next = (ConstructionObject) e .nextElement(); if (next == Last) while (e.hasMoreElements()) { Last = (ConstructionObject) e.nextElement(); if (Last == null || !Last.isHidden()) break outer; if ((Last instanceof TextObject) && Last.valid() && !Last.isSuperHidden()) { ((TextObject) Last).setDoShow(true); break outer; } } } IC.setEnabled("allback", true); ZC.paintUntil(Last); if (!e.hasMoreElements()) { ZC.paintUntil(null); IC.setEnabled("allforward", false); IC.setEnabled("oneforward", false); IC.setEnabled("allback", true); } } else if (o.startsWith("bi_")) { eric.JGlobals.runmacro(ZC, this, "@builtin@/" + o.substring(3)); } IA.clearShiftControl(); IB.clearShiftControl(); } public ObjectConstructor ObjectConstructors[] = // constructors { new PointConstructor(), new BoundedPointConstructor(), new IntersectionConstructor(), new LineConstructor(), new RayConstructor(), new SegmentConstructor(), new SegmentConstructor(true), new CircleConstructor(), new Circle3Constructor(), new CircleConstructor(true), new ParallelConstructor(), new PlumbConstructor(), new MidpointConstructor(), new AngleConstructor(), new AngleConstructor(true), new MoverTool(), new Tracker(), new ObjectTracker(), new AnimatorTool(), new ExpressionConstructor(), new AreaConstructor(), new QuadricConstructor(), new ImageConstructor(), new TextConstructor(), new HiderTool(), new JLocusObjectTracker(), new MacroRunner(), new EditTool(), new SetParameterTool(), new SetTargetsTool(), new SaveJob(), new DeleteTool(), new ReorderTool(), new DrawerTool(), new RenamerTool(), new ZoomerTool(), new BreakpointAnimator() }; public void settool(final int i) { if (IM != null) IM.deselectAll(); ZC.setTool(ObjectConstructors[i]); CurrentTool = i; if (i < ZirkelFrame.IconNumber && IB.have(ZirkelFrame.ObjectStrings[i])) IB.toggle(ZirkelFrame.ObjectStrings[i]); else IB.unselect(FirstConstructor); ObjectConstructors[i].resetFirstTime(ZC); if (i == ZirkelFrame.NTargets) IA.setMultipleState("macro", 2); else if (i == ZirkelFrame.NParameters) IA.setMultipleState("macro", 1); else { IA.setMultipleState("macro", 0); IA.setState("macro", false); } IA.setState("delete", i == ZirkelFrame.NDelete); IA.setState("edit", i == ZirkelFrame.NEdit); IA.setState("draw", i == ZirkelFrame.NDraw); IA.setState("rename", i == ZirkelFrame.NRename); IA.setState("zoom", i == ZirkelFrame.NZoom); } public void setcolor(final int c) { IA.setMultipleState("color", c); ZC.setDefaultColor(c); } public void settype(final int c) { IA.setMultipleState("type", c); ZC.setDefaultType(c); } public void setcolortype(final int c) { IA.setMultipleState("thickness", c); ZC.setDefaultColorType(c); } @Override public void showStatus(final String s) { super.showStatus(s); if (Status != null) Status.setText(s); } public void keyPressed(final KeyEvent e) { } public void keyReleased(final KeyEvent e) { final int code = e.getKeyCode(); int i; final boolean Shift = e.isShiftDown(), Control = e.isControlDown(), Alt = e .isAltDown(); if (Control) { if (Options.indexOf("type") > 0) for (i = 0; i < ZirkelFrame.PointKeys.length; i++) { if (ZirkelFrame.PointKeys[i] == code) { settype(i); return; } } if (Options.indexOf("color") > 0) for (i = 0; i < ZirkelFrame.ColorKeys.length; i++) { if (ZirkelFrame.ColorKeys[i] == code) { setcolor(i); return; } } } else if (Alt) { if (Options.indexOf("showcolor") > 0) for (i = 0; i < ZirkelFrame.ColorKeys.length; i++) { if (ZirkelFrame.ColorKeys[i] == code) { showcolor(i); return; } } if (Options.indexOf("thickness") > 0) for (i = 0; i < ZirkelFrame.ColorTypeKeys.length; i++) { if (ZirkelFrame.ColorTypeKeys[i] == code) { setcolortype(i); return; } } } else { switch (code) { case KeyEvent.VK_ESCAPE: if (ZC.getCurrentTool() instanceof DrawerTool) ZC.clearDrawings(); else ZC.reset(); break; } } if (!e.isActionKey()) return; switch (code) { case KeyEvent.VK_F1: showVersion(); break; case KeyEvent.VK_F7: if (Shift || Control) { setShowNames(!IA.getState("showname")); } break; case KeyEvent.VK_F8: if (Shift || Control) { setLongNames(!IA.getState("longnames")); } break; case KeyEvent.VK_F9: if (Shift || Control) { IA.setState("partial", !IA.getState("partial")); ZC.setPartial(IA.getState("partial")); } else { if (Options.indexOf("hidden") < 0) break; IA.setState("hidden", !IA.getState("hidden")); ZC.setShowHidden(IA.getState("hidden")); } break; case KeyEvent.VK_F10: if (Shift || Control) { IA.setState("plines", !IA.getState("plines")); ZC.setPartial(IA.getState("plines")); } else showcomment(); break; case KeyEvent.VK_F11: if (Shift || Control) { IA.setState("arrow", !IA.getState("arrow")); ZC.setPartial(IA.getState("arrow")); } else showconstruction(); break; case KeyEvent.VK_F12: if (Shift || Control) { IA.setState("obtuse", !IA.getState("obtuse")); ZC.setObtuse(IA.getState("obtuse")); } else toggleGrid(); break; case KeyEvent.VK_LEFT: if (Shift && ZC.getCurrentTool() instanceof ObjectTracker) ((ObjectTracker) ZC.getCurrentTool()).increaseOmit(); else if (Shift && ZC.getCurrentTool() instanceof BreakpointAnimator) ((BreakpointAnimator) ZC.getCurrentTool()).decreaseSpeed(); else if (Shift && ZC.getCurrentTool() instanceof AnimatorTool) ((AnimatorTool) ZC.getCurrentTool()).decreaseSpeed(); else ZC.shift(-0.2, 0); break; case KeyEvent.VK_RIGHT: if (Shift && ZC.getCurrentTool() instanceof ObjectTracker) ((ObjectTracker) ZC.getCurrentTool()).decreaseOmit(); else if (Shift && ZC.getCurrentTool() instanceof BreakpointAnimator) ((BreakpointAnimator) ZC.getCurrentTool()).increaseSpeed(); else if (Shift && ZC.getCurrentTool() instanceof AnimatorTool) ((AnimatorTool) ZC.getCurrentTool()).increaseSpeed(); else ZC.shift(0.2, 0); break; case KeyEvent.VK_UP: ZC.shift(0, 0.2); break; case KeyEvent.VK_DOWN: ZC.shift(0, -0.2); break; } } public void keyTyped(final KeyEvent e) { final char c = e.getKeyChar(); if (e.isControlDown() || e.isAltDown()) return; int i; for (i = 0; i < ZirkelFrame.ObjectKeys.length; i++) { if (c == ZirkelFrame.ObjectKeys[i]) { if (Tools.indexOf(ZirkelFrame.ObjectStrings[i]) >= 0) settool(i); return; } } switch (c) { case KeyEvent.VK_BACK_SPACE: ZC.undo(); ZC.repaint(); return; case '+': ZC.magnify(1 / Math.sqrt(Math.sqrt(2))); break; case '-': ZC.magnify(Math.sqrt(Math.sqrt(2))); break; } } public void initLightColors() { final int n = ZirkelFrame.Colors.length; ZirkelFrame.LightColors = new Color[n]; final Color back = C; final int red = back.getRed(), green = back.getGreen(), blue = back .getBlue(); final double lambda = 0.4; for (int i = 0; i < n; i++) { final int r = (int) (red * (1 - lambda) + ZirkelFrame.Colors[i] .getRed() * lambda); final int g = (int) (green * (1 - lambda) + ZirkelFrame.Colors[i] .getGreen() * lambda); final int b = (int) (blue * (1 - lambda) + ZirkelFrame.Colors[i] .getBlue() * lambda); ZirkelFrame.LightColors[i] = new Color(r, g, b); } } public void initObjectKeys() { ZirkelFrame.ObjectKeys = new char[ZirkelFrame.ObjectStrings.length]; for (int i = 0; i < ZirkelFrame.ObjectStrings.length; i++) { final String shortcut = Zirkel.name("shortcuts." + ZirkelFrame.ObjectStrings[i]); if (shortcut.length() > 0) ZirkelFrame.ObjectKeys[i] = shortcut.charAt(0); } } public void notifyDone() { repaint(); try { Thread.sleep(500); } catch (final Exception e) { } if (Global.getParameter("confirmation", true)) { final Warning w = new Warning(F, Zirkel.name("done"), Zirkel .name("message"), true); w.center(F); w.setVisible(true); } final String sol = getParameter("solution"); if (sol != null) { try { final AppletContext ac = getAppletContext(); ac.showDocument(new URL(getCodeBase(), FileName.toURL(sol))); } catch (final Exception e) { System.out.println(e); e.printStackTrace(); } } } public void showcolor(final int c) { ZC.setShowColor(c); } public void showcomment() { if (F == null) return; final CommentDialog d = new CommentDialog(F, ZC.getComment(), Zirkel .name("comment.title"), ZC.displayJob()); ZC.setComment(d.getText()); } public void showconstruction() { if (F == null) return; } public void toggleGrid() { ZC.toggleShowGrid(); } void definemacro() { if (!ZC.defineMacro()) return; if (ZC.getOC() instanceof SetTargetsTool) settool(ZirkelFrame.NParameters); else ZC.getOC().reset(ZC); } String OldMacro = null; public void runmacro(final boolean shift) { Macro m = null; if (OldMacro == null && ZC.getMacros().size() == 1) m = ((MacroItem) ZC.getMacros().elementAt(0)).M; else { m = ZC.chooseMacro(OldMacro); if (!shift || m == null) m = ZC.chooseMacro(); } if (m == null) { settool(CurrentTool); return; } runMacro(m); } public void runMacro(final Macro m) { ((MacroRunner) ObjectConstructors[ZirkelFrame.NMacro]).setMacro(m, ZC); settool(ZirkelFrame.NMacro); if (IM != null) IM.select(m); IB.setMultipleState("macro", 0); OldMacro = m.getName(); } public void setShowNames(final boolean flag) { if (IA != null) IA.setState("showname", flag); Global.setParameter("options.point.shownames", flag); ZC.setShowNames(flag); } public void setObtuse(final boolean flag) { IA.setState("obtuse", flag); Global.setParameter("options.obtuse", flag); ZC.setObtuse(flag); } public void setSolid(final boolean flag) { IA.setState("solid", flag); Global.setParameter("options.solid", flag); ZC.setSolid(flag); } public void setShowValues(final boolean flag) { IA.setState("showvalue", flag); Global.setParameter("options.showvalue", flag); ZC.setShowValues(flag); } public void setLongNames(final boolean flag) { IA.setState("longnames", flag); Global.setParameter("options.longnames", flag); ZC.setLongNames(flag); } public void toggleGrid(final boolean grid) { ZC.setShowGrid(grid); if (IA != null) IA.setState("grid", grid); } public void loadsettings() { setcolor(ZC.getDefaultColor()); settype(ZC.getDefaultType()); setcolortype(ZC.getDefaultColorType()); IA.setState("partial", ZC.getPartial()); IA.setState("plines", ZC.getPartialLines()); IA.setState("arrow", ZC.getVectors()); ZC.setHidden(false); } public void doAction(final String o) { if (o.equals("Input")) { try { ZC.getConstruction().interpret(ZC, Input.getText(), ""); Input.remember(); Input.setText(""); loadsettings(); ZC.validate(); ZC.getConstruction().updateCircleDep(); } catch (final ConstructionException e) { ZC.warning(e.getDescription()); } } } public void itemAction(final String o, final boolean flag) { } AnimatorTool A = null; @Override public void start() { if (getParameter("demo") != null) { DR = new DemoRunner(ZC, this, getParameter("demo"), Status); return; } final Construction C = ZC.getConstruction(); ZC.paint(ZC.getGraphics()); ZC.allowRightMouse(true); if (C.TrackP != null) { try { final ConstructionObject P = C.find(C.TrackP); if (!((P instanceof PointObject) || (P instanceof PrimitiveLineObject))) throw new ConstructionException(""); final ConstructionObject po[] = new ConstructionObject[C.TrackPO .size()]; for (int i = 0; i < po.length; i++) { final ConstructionObject o = C.find((String) C.TrackPO .elementAt(i)); if (o == null || !((o instanceof PointObject) || (o instanceof PrimitiveLineObject))) throw new ConstructionException(""); po[i] = o; } PointObject PM = null; if (C.TrackPM != null) PM = (PointObject) C.find(C.TrackPM); if (C.TrackO != null) { final ConstructionObject O = C.find(C.TrackO); if (P == null || (PM == null && (O instanceof ExpressionObject)) || O == null) throw new ConstructionException(""); final ObjectTracker ot = new ObjectTracker(P, PM, O, ZC, C.Animate, C.Paint, po); if (C.Animate) ot.Interactive = false; ot.setOmit(C.Omit); ZC.setTool(ot); if (!edit) ZC.allowRightMouse(false); ZC.validate(); ZC.repaint(); } else { if (P == null) throw new ConstructionException(""); ZC.setTool(new Tracker(P, po)); if (PM != null) PM.setSelected(true); ZC.validate(); ZC.repaint(); } } catch (final Exception e) { } } else if (C.AnimateP != null) { try { final PointObject P = (PointObject) C.find(C.AnimateP); if (P == null || !P.moveable()) throw new ConstructionException(""); final Enumeration e = C.AnimateV.elements(); while (e.hasMoreElements()) { final String s = (String) e.nextElement(); final ConstructionObject o = C.find(s); if (o == null || !(o instanceof SegmentObject || o instanceof PrimitiveCircleObject || o instanceof PointObject)) throw new ConstructionException(""); } ZC.setTool(A = new AnimatorTool(P, C.AnimateV, ZC, C.AnimateNegative, C.AnimateOriginal, C.AnimateDelay)); ZC.allowRightMouse(false); A.setInteractive(false); } catch (final Exception e) { // e.printStackTrace(); } } else if (C.AnimateBreakpoints) { final BreakpointAnimator bp = new BreakpointAnimator(); bp.setLoop(C.AnimateLoop); bp.setSpeed(C.AnimateTime); ZC.allowRightMouse(false); ZC.setTool(bp); bp.reset(ZC); } else if (jumptostart) { System.out.println("here"); iconPressed("allback"); } } public void showVersion() { showStatus(Zirkel.name("program.name") + " " + Zirkel.name("program.version") + " " + Zirkel.name("program.date")); } @Override public void stop() { ZC.invalidate(); if (DR != null) DR.stop(); } @Override public void destroy() { ZC.invalidate(); if (DR != null) DR.stop(); } public void replay() { if (RD != null) return; RD = new Replay(F, ZC) { /** * */ private static final long serialVersionUID = 1L; @Override public void doclose() { RD = null; super.doclose(); } }; final Dimension d = getToolkit().getScreenSize(); RD.setLocation(d.width - 100 - RD.getSize().width, 100); ZC.OC.invalidate(ZC); RD.setVisible(true); } public void replayChosen() { replay(); } public boolean enabled(final String function) { if (Tools.indexOf("all") >= 0) return true; return Tools.indexOf(function) >= 0; } public boolean haveBreaks() { final Enumeration e = ZC.getConstruction().elements(); while (e.hasMoreElements()) { if (((ConstructionObject) e.nextElement()).isBreak()) return true; } return false; } public String loadImage() { return null; } public Image doLoadImage(final String filename) { Image i; try { i = getToolkit().getImage(new URL(getCodeBase(), filename)); final MediaTracker mt = new MediaTracker(this); mt.addImage(i, 0); mt.waitForID(0); if (mt.checkID(0) && !mt.isErrorAny()) { return i; } } catch (final Exception e) { showStatus(e.toString()); } return null; } /** * For external scripting: Interprets a command s using the internal * construction language. (Expl: "A=point()") * * @param s * @return Command executed or not */ public boolean interpret(final String s) { try { ZC.getConstruction().interpret(ZC, s); ZC.repaint(); return true; } catch (final ConstructionException e) { return false; } } /** * For external scripting: Gets the construction as an XML stream contained * in a string. * * @return Construction. */ public String getConstruction() { final ByteArrayOutputStream out = new ByteArrayOutputStream(); try { ZC.save(out, true, true, false, ZC.getMacros(), ""); return out.toString("utf-8"); } catch (final Exception e) { return "Error"; } } /** * For external scripting: Receives the construction as an XML stream, * contained in a string. * * @param s * @return Success */ public boolean putConstruction(final String s) { try { final ByteArrayOutputStream bout = new ByteArrayOutputStream(); final PrintWriter out = new PrintWriter(new OutputStreamWriter( bout, "utf-8")); out.print(s); out.close(); final byte b[] = bout.toByteArray(); final InputStream in = new ByteArrayInputStream(b); ZC.load(in, true, true); return true; } catch (final Exception e) { e.printStackTrace(); return false; } } } ./src/rene/zirkel/CVS/Root0000644000175000017500000000007411132354034014267 0ustar yvesyves:ext:erichake@carmetal.cvs.sourceforge.net:/cvsroot/carmetal./src/rene/zirkel/structures/0000755000175000017500000000000011132354034015210 5ustar yvesyves./src/rene/zirkel/structures/MagnetObj.java0000640000175000017500000000350511133127260017720 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.structures; import rene.zirkel.expression.Expression; import rene.zirkel.objects.ConstructionObject; /** * * @author erichake */ public class MagnetObj { private final ConstructionObject obj; // private int ray = -1; private Expression rayexp = null; // public MagnetObj(ConstructionObject o, int i) { // obj = o; // ray = i; // rayexp=new Expression(""+i, o.getConstruction(), o); // } public MagnetObj(final ConstructionObject o, final String s) { obj = o; rayexp = new Expression(s, o.getConstruction(), o); } public void setSelected(final boolean b) { obj.setSelected(b); } public void setStrongSelected(final boolean b) { obj.setStrongSelected(b); } public boolean isInConstruction() { return obj.isInConstruction(); } public ConstructionObject obj() { return obj; } public String name() { return obj.getName(); } public String rayexp() { return rayexp.toString(); } public void translate() { rayexp.translate(); } public int ray() { int i = Integer.MIN_VALUE; try { i = (int) Math.round(rayexp.getValue()); } catch (final Exception ex) { } return i; } } ./src/rene/zirkel/structures/CVS/0000755000175000017500000000000011133127744015652 5ustar yvesyves./src/rene/zirkel/structures/CVS/Repository0000644000175000017500000000003711132354034017745 0ustar yvesyvescarmetal/rene/zirkel/structures./src/rene/zirkel/structures/CVS/Entries0000644000175000017500000000023411133127744017205 0ustar yvesyves/Coordinates.java/1.3/Tue Jan 13 15:09:34 2009/-ko/ /CoordinatesXY.java/1.3/Tue Jan 13 15:09:34 2009/-ko/ /MagnetObj.java/1.3/Tue Jan 13 15:09:36 2009/-ko/ ./src/rene/zirkel/structures/CVS/Root0000644000175000017500000000007411132354034016512 0ustar yvesyves:ext:erichake@carmetal.cvs.sourceforge.net:/cvsroot/carmetal./src/rene/zirkel/structures/Coordinates.java0000640000175000017500000000242711133127256020333 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.structures; // file: Coordinates.java public class Coordinates { public double X, Y, X1, Y1; public boolean join = true; public boolean flag = true; public int Color = -1, Thickness = -1; public Coordinates(final double x, final double y, final boolean j) { X = x; Y = y; join = j; } public Coordinates(final double x, final double y) { X = x; Y = y; } public Coordinates(final double x, final double y, final double x1, final double y1) { X = x; Y = y; X1 = x1; Y1 = y1; } public Coordinates() { X = Double.NaN; Y = Double.NaN; } } ./src/rene/zirkel/structures/CoordinatesXY.java0000640000175000017500000000160311133127256020607 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.structures; // file: CoordinatesXY.java public class CoordinatesXY { public double X, Y; public CoordinatesXY(final double x, final double y) { X = x; Y = y; } } ./src/rene/zirkel/docs/0000755000175000017500000000000011132354034013715 5ustar yvesyves./src/rene/zirkel/docs/ZirkelProperties_br.properties0000770000175000017500000011126610655647770022067 0ustar yvesyveslanguage=br_ version=Verso homefile=index.html homepage=http://www.professores.uff.br/hjbortol/car/ about.title=Sobre este programa about.name=Geometria Escolar about.programmed=Programado por title=Geometria Escolar close=Fechar ok=OK cancel=Cancelar done=Meus parabns! Voc completou o exerccio! message=Mensagem yes=Sim no=No abort=Cancelar true=verdadeiro false=falso warning.nojob=Isto no um Exerccio! warning.print=No foi possvel imprimir! warning.reset=Esta opo estar disponvel ao se reiniciar o programa! question.title=Pergunta question.intersection=Criar esta interseo? question.pointon=Criar um ponto neste objeto? colors.black=Preto colors.blue=Azul colors.green=Verde colors.brown=Marrom colors.cyan=Turquesa colors.yellow=Vermelho objects.point=Ponto objects.segment=Segmento objects.line=Reta objects.ray=Semi-reta objects.circle=Circunferncia objects.intersection=Interseo objects.move=Mover Ponto objects.hide=Esconder Objeto objects.edit=Editar Ponto objects.tracker=Rastrear Ponto ou Reta objects.objecttracker=Rastrear Ponto ou Reta sobre Objeto objects.parallel=Reta Paralela objects.plumb=Reta Perpendicular objects.circle3=Compasso objects.midpoint=Ponto Mdio objects.quadric=Cnica objects.angle=ngulo objects.boundedpoint=Ponto sobre Objeto objects.parameter=Definir Objetos Iniciais da Macro objects.targets=Definir Objetos Finais da Macro objects.definejob=Definir Exerccio objects.runmacro=Executar uma Macro objects.delete=Apagar Objetos e seus Descendentes objects.reorder=Enviar Objetos para o Fundo objects.animate=Animao objects.expression=Expresso Aritmtica objects.area=Polgono objects.text=Texto objects.fixedcircle=Circunferncia com Raio Fixo objects.fixedangle=ngulo de Amplitude Fixa objects.fixedsegment=Segmento com Comprimento Fixo iconhelp.point=Ponto (p) iconhelp.segment=Segmento (s) iconhelp.line=Reta (g) iconhelp.ray=Semi-reta (r) iconhelp.circle=Circunferncia (c) iconhelp.intersection=Interseo (i) iconhelp.move=Mover Ponto (m) iconhelp.hide=Esconder Objetos (h) iconhelp.edit=Editar Objetos (e) iconhelp.tracker=Rastrear Ponto ou Reta (t) iconhelp.objecttracker=Rastrear Automaticamente Ponto ou Reta (o) iconhelp.parallel=Reta Paralela (1) iconhelp.plumb=Reta Perpendicular (2) iconhelp.circle3=Compasso (3) iconhelp.midpoint=Ponto Mdio (4) iconhelp.quadric=Cnica passando por 5 Pontos ($) iconhelp.angle=ngulo (a) iconhelp.boundedpoint=Criar Ponto sobre Objeto (5) iconhelp.hidden=Mostrar ou Esconder Objetos (F9) iconhelp.color=Cor Padro do Objeto (Ctrl-1,2,3,4) iconhelp.type=Tipo Padro do Ponto (Ctrl-5,6,7,8,9,0) iconhelp.type0=Tipo Padro do Ponto iconhelp.thickness=Espessura Padro do Objeto (Alt-5,6,7) iconhelp.back=Apagar ltimo Objeto (<-) iconhelp.thickness0=Espessura Padro do Objeto iconhelp.partial=Circunferncias Parciais (Ctrl-F9) iconhelp.plines=Linhas Parciais (Ctrl-F10) iconhelp.arrow=Segmentos como Vetores (Ctrl-F11) iconhelp.showcolor=Mostrar Cores Selecionadas (Alt-1,2,3,4) iconhelp.runmacro=Executar Macro (9) iconhelp.macro=Objetos Iniciais/Objetos Finais/Definir Macro (7,8,Ctrl-5) iconhelp.expression=Expresso Aritmtica (x) iconhelp.showvalue=Mostrar Valores dos Objetos (Ctrl-F7) iconhelp.showname=Mostrar Nomes dos Objetos (Ctrl-F6) iconhelp.obtuse=Usar ngulos Obtusos (Ctrl-F12) iconhelp.solid=No usar transparncia iconhelp.longnames=Nomes Extensos para Objetos (Ctrl-F8) iconhelp.grid=Mostrar Grade (F12) iconhelp.comment=Mostrar e Editar Comentrio (F10) iconhelp.defaults=Configurao Padro iconhelp.macro0=Objetos Iniciais/Objetos Finais/Definir Macro iconhelp.visual=Construo Visual iconhelp.replay=Revisar Construo iconhelp.oneforward=Avanar iconhelp.fastforward=Avanar vrios Passos iconhelp.allforward=Avanar Tudo iconhelp.oneback=Voltar iconhelp.fastback=Voltar vrios Passos iconhelp.allback=Voltar Tudo iconhelp.close=Fechar iconhelp.area=Polgono (0) iconhelp.text=Texto (b) iconhelp.fixedcircle=Circunferncia com Raio Fixo (,) iconhelp.fixedangle=ngulo de Amplitude Fixa (.) iconhelp.fixedsegment=Segmento com Comprimento Fixo (#) iconhelp.animate=Animao de um Ponto (") iconhelp.delete=Apagar Objeto e seus Descendentes (Del) iconhelp.undo=Desfazer ltimas Remoes (Ctrl-z) iconhelp.nextbreak=Prximo Ponto de Parada iconhelp.setbreak=Marcar/Desmarcar Ponto de Parada iconhelp.zoom=Zoom com o mouse (%) shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-0) shortcuts.color.1=(Ctrl-1) shortcuts.color.2=(Ctrl-2) shortcuts.color.3=(Ctrl-3) shortcuts.showcolor.0=(Alt-0) shortcuts.showcolor.1=(Alt-1) shortcuts.showcolor.2=(Alt-2) shortcuts.showcolor.3=(Alt-3) shortcuts.showcolor.4= shortcuts.showcolor.5= shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) menu.file=Arquivo menu.file.clearmacros=Apagar todas as Macros menu.file.load=Abrir Construo ... (Ctrl-o) menu.file.loadjob=Abrir Exerccio ... (Ctrl-j) menu.file.savejob=Salvar Exerccio como ... (Ctrl-k) menu.file.save=Salvar Construo (Ctrl-s) menu.file.saveas=Salvar Construo como ... (Ctrl-a) menu.file.includemacros=Incluir Todas as Macros menu.file.exit=Sair (Alt-F4) menu.file.print=Imprimir ... menu.file.print.isoscale=Escala 1:1 em cm menu.file.savebmp=Salvar Figura (como BMP) ... menu.file.savefig=Salvar Figura (como FIG) ... menu.file.loadrun=Abrir Construo Descritiva (Ctrl-r) menu.file.editrun=Editar Construo Descritiva (Ctrl-x) menu.actions=Editar menu.actions.elementary=Ferramentas Bsicas menu.actions.complex=Ferramentas Avanadas menu.actions.move=Ferramentas de Movimentao menu.actions.decorative=Objetos Decorativos menu.options=Opes menu.options.visual=Modo Visual (Ctrl-F6) menu.options.hidden=Mostrar Objetos Ocultos (F9) menu.options.comment=Editar Comentrio (F10) menu.options.constructiondisplay=Mostrar Descrio (F11) menu.options.grid=Mostrar Grade (F12) menu.options.setgrid=Modificar Largura da Grade ... menu.options.showcolor=Mostrar Cor menu.options.defaultcolor=Cor Padro menu.options.defaultthickness=Espessura Padro menu.options.defaulttype=Tipo de Ponto Padro menu.options.all=Tudo menu.options.setdigits=Nmero de Dgitos menu.options.shownames=Mostrar Nomes dos Objetos (Ctrl-F6) menu.options.longnames=Usar Nomes Extensos para Objetos (Ctrl-F7) menu.options.obtuse=Usar ngulos Obtusos (Ctrl-F12) menu.options.solid=No Usar Transparncia menu.options.showvalues=Mostrar Valores dos Objetos (Ctrl-F8) menu.options.partial=Circunferncias Parciais (Ctrl-F9) menu.options.plines=Retas Parciais (Ctrl-F10) menu.options.arrow=Vetor (Ctrl-F11) menu.options.editicons=Editar Caixa de Ferramentas menu.options.back=Apagar o ltimo Objeto (<-) menu.options.undo=Desfazer a ltima Remoo (Ctrl-z) menu.zoom=Zoom menu.zoom.in=Ampliar (+) menu.zoom.out=Reduzir (-) menu.zoom.left=Esquerda (seta para a esquerda) menu.zoom.right=Direita (seta para a direita) menu.zoom.up=Acima (seta para cima) menu.zoom.down=Abaixo (seta para baixo) menu.macros=Macros menu.special.definemacro=Definir Macro (Ctrl-F5) menu.special.runmacro=Executar Macro ... (F5) menu.special.savemacros=Salvar Todas as Macros ... menu.special.loadmacros=Abrir Macro ... menu.special.deletemacros=Apagar Macros ... menu.special=Especial menu.special.testjob=Testar Exerccio (Ctrl-F1) menu.special.jobcomment=Texto do Exerccio ... (F8) menu.special.export=Exportar como HTML ... (Ctrl-e) menu.special.replay=Revisar Construo menu.help=Ajuda menu.help.about=Sobre este Programa menu.help.browser=Explorar Ajuda e Demos menu.help.text=Ajuda Simples menu.help.configure=Configurar Navegador menu.help.help=Ajuda (F1) menu.help.macros=Como Criar e Usar Macros menu.help.tools=Sobre as Ferramentas menu.help.gui=Sobre a Interface com o Usurio menu.help.interactive=Sobre Construes Descritivas menu.help.tips=Dicas menu.settings=Preferncias menu.settings.fullicons=Duas Barras de cones menu.settings.utf=Usar Codificao UTF-8 menu.settings.autohide=Esconder o Segundo Ponto de Interseo menu.settings.iconbartop=Barra de cones Acima da rea de Construo menu.settings.showtips=Mostrar Nome das Ferramentas menu.settings.simplegraphics=Usar Sempre Grficos Simples menu.settings.sure=Confirmar antes de Abrir e Fechar Arquivos menu.settings.pointon=Confirmar antes de Criar um Ponto sobre um Objeto menu.settings.intersection=Confirmar antes de Criar uma Interseo menu.settings.choice=Mostrar Caixa de Dilogos para Selecionar Objetos menu.settings.movename=Mostrar Valores dos Objetos durante Movimentao menu.settings.movefixname=Mostrar Valores dos Objetos Fixos durante Movimentao menu.settings.restricted=Modo Aprendizagem menu.colors=Definir Cores colors.default=Usar Cores Padres colors.color0=Cor 1 (Preto) colors.color1=Cor 2 (Verde) colors.color2=Cor 3 (Azul) colors.color3=Cor 4 (Marrom) colors.color4=Cor 5 (Turquesa) colors.color5=Cor 6 (Amarelo) colors.background=Cor de Fundo colors.select=Objeto selecionado colors.target=Objeto final myfiledialog.dir=Diretrio myfiledialog.file=Arquivo myfiledialog.pattern=Tipo de Arquivo (Filtro) filedialog.open=Abrir filedialog.saveas=Salvar como ... filedialog.open.action=Abrir filedialog.saveas.action=Salvar filedialog.htmlsave=Salvar como HTML filedialog.htmlsave.action=Salvar pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Salvar load=Abrir abort=Cancelar bound.release=Tornar Ponto Livre bound.bind=Colocar Ponto sobre Objeto bound.error=Objeto no encontrado! constructiondisplay.edit=Editar Objeto constructiondisplay.copy=Copiar para a rea de Transferncia edit.Title=Propriedades edit.name=Nome edit.hidden=Escondido edit.text=Texto edit.fixed=Fixo edit.color=Cor edit.ok=OK edit.cancel=Cancelar edit.showname=Mostrar Nome edit.point.title=Editar Ponto edit.point.type=Tipo edit.point.x=X edit.point.y=Y edit.point.intersection=Diferente de edit.point.showvalue=Mostrar Coordenadas edit.point.colortype=Espessura edit.point.bound=Colocar sobre Objeto edit.point.away=Longe de edit.point.close=Perto de edit.point.free=Livre edit.line.title=Editar Reta, Semi-reta, Segmento edit.line.normal=Normal edit.line.thick=Grosso edit.line.thin=Pontilhado edit.line.type=Tipo edit.segment.length=Comprimento edit.segment.showvalue=Mostrar Comprimento edit.circle.title=Editar Circunferncia edit.circle.length=Raio edit.circle.partial=Circunferncia Parcial edit.circle.range=Definir Arco edit.circle.killrange=Apagar Arco edit.plumb.restricted=Restrito (ao segmento ou semi-reta) edit.angle.title=Editar ngulo edit.angle.length=Amplitude do ngulo edit.angle.displaysize=Mostrar Amplitude do ngulo edit.angle.normal=Normal edit.angle.small=Pequeno edit.angle.large=Grande edit.expression.title=Editar Expresso edit.expression=Expresso Aritmtica edit.expression.prompt=Explicao edit.area.title=Editar Polgono edit.area.back=Colocar no Fundo export.title=Exportar como HTML export.pagetitle=Ttulo da Pgina export.width=Largura export.height=Altura export.jar=Arquivo JAR export.comment=Salvar Comentrio export.file=Arquivo de Construo export.job=Mostrar como Exerccio export.color=Cor export.backgroundcolor=Usar como cor de fundo da pgina export.appletcolor=Usar como cor de fundo do applet export.plain=Simples export.3D=Borda export.breaks=Revisar Construo com Pontos de Parada export.icons=Borda e cones export.full=Borda, cones e Barra de Mensagem export.nonvisual=Borda, cones e Barra de Entrada export.style=Estilo do Applet export.setcolor=Escolher a Cor export.savefirst=O arquivo no foi salvo! export.soltext=Soluo export.stylesheet=Arquivo de Estilo CSS export.solution=Arquivo da Soluo export.jumpsol=Ir para a Soluo export.linksol=Link para a Soluo export.savesol=Salvar Arquivo da Soluo export.track=Rastrear Ponto export.digits=Salvar Nmero de Dgitos export.setsize=Definir Tamanho export.signature=Criado com R.e.C. export.colors=Salvar Cores Definidas export.background=Salvar Fundo Definido help.title=Ajuda help.error=O arquivo de ajuda no pde ser aberto! help.file=br_schoolgeometry.txt coloreditor.title=Editar as Cores coloreditor.red=Vermelho coloreditor.green=Verde coloreditor.blue=Azul coloreditor.color=Sua Cor Personalizada comment.title=Comentrio da Construo comment.set=Definir comment.cancel=Cancelar comment.close=Fechar iconedit.title=Editar Barra de cones iconedit.twobars=Caixa de cones tem duas linhas jobcomment.title=Exerccio select.title=Escolha select.ok=OK select.cancel=Cancelar select.comment=Mostrar Comentrio select.all=Tudo message.circle.midpoint=Circunferncia: de centro em qual ponto? message.circle.radius=Circunferncia: passando por qual ponto (shift: raio fixo)? message.fixedcircle.midpoint=Circunferncia de raio fixo: de centro em qual ponto? message.fixedcircle.radius=Circunferncia de raio fixo: passando por qual ponto? message.edit=Editar: qual objeto? message.line.first=Reta: passando por qual ponto? message.line.second=Reta: passando por qual outro ponto? message.ray.first=Semi-reta: passando por qual ponto? message.ray.second=Semi-reta: passando por qual outro ponto? message.move.select=Mover: qual ponto? message.move.move=Mover: mova o ponto! message.point=Ponto: defina um ponto! message.segment.first=Segmento: passando por qual ponto? message.segment.second=Segmento: passando por qual outro ponto (shift: comprimento fixo)? message.fixedsegment.first=Segmento com comprimento fixo: passando por qual ponto? message.fixedsegment.second=Segmento com comprimento fixo: passando por qual outro ponto? message.intersection.first=Interseo: de qual objeto (ou selecione diretamente o ponto de interseo)? message.intersection.second=Interseo: com qual objeto? message.hide=Esconder/Mostrar: qual objeto? message.tracker.select=Rastrear: qual ponto ou reta? message.tracker.selectpoint=Rastrear: qual ponto mover? message.tracker.move=Rastrear: mova o ponto! message.objecttracker.select=Rastrear automaticamente: qual ponto (shift: seleciona mais pontos)? message.objecttracker.object=Rastrear automaticamente: qual reta, semi-reta, segmento ou circunferncia? message.objecttracker.selectpoint=Rastrear automaticamente: qual ponto mover? message.objecttracker.selectanypoint=Rastrear automaticamente: outros pontos para mover? message.objecttracker.move=Rastrear automaticamente: mova o ponto! message.objecttracker.start=Rastrear automaticamente: iniciar a animao! message.parallel.first=Reta Paralela: a qual reta, semi-reta ou segmento? message.parallel.second=Reta Paralela: por qual ponto? message.plumb.first=Reta Perpendicular: a qual reta, semi-reta ou segmento? message.plumb.second=Reta Perpendicular: por qual ponto? message.circle3.first=Compasso: selecione o primeiro ponto do raio! message.circle3.second=Compasso: selecione o segundo ponto do raio! message.circle3.midpoint=Compasso: selecione o centro! message.midpoint.first=Ponto Mdio: entre qual ponto? message.midpoint.second=Ponto Mdio: e qual outro ponto? message.quadric=Cnica: selecione o ponto de nmero message.angle.first=ngulo: selecione o primeiro ponto! message.angle.root=ngulo: selecione o vrtice! message.angle.second=ngulo: selecione o terceiro ponto (shift: amplitude fixa)! message.fixedangle.first=ngulo de amplitude fixa: selecione o primeiro ponto! message.fixedangle.root=ngulo de amplitude fixa: selecione o vrtice! message.fixedangle.second=ngulo de amplitude fixa: selecione o terceiro ponto! message.label.select=Mover Rtulo: selecione um rtulo! message.label.move=Mover Rtulo: mova o rtulo! message.boundedpoint=Ponto sobre Objeto: sobre qual circunferncia, reta, semi-reta ou segmento? message.parameters=Macro: selecione os objetos iniciais! message.targets=Macro: selecione os objetos finais! message.savejob.first=Definir Exerccio: selecione o ltimo objeto do enunciado! message.savejob.second=Definir Exerccio: selecione o objeto a se construir (shift: no verifica)! message.savejob.third=Definir Exerccio: selecione outros objetos a serem desenhados! message.runmacro=Macro %: %. (Entre %) % message.runmacro.return=(Barra de espao: escolhe %) message.runmacro.fixes=(Shift: corrige seleo) message.delete=Apagar: qual objeto? message.reorder=Reordenar: qual objeto? message.expression=Expresso Aritmtica: onde colocar? message.area=Polgono Hachurado: selecion um vrtice do polgono! message.text=Texto: onde colocar? message.animator.point=Animao: qual ponto animar? message.animator.segment=Animao: sobre qual objeto? (segmento ou circunferncia) message.animator.running=Animao: em curso (clique para parar)! message.range.first=Arco deste ponto ... message.range.second=... at este ponto! message.setaway.away=Longe deste ponto! message.setaway.close=Perto deste ponto! objectsedit.title=Editar Propriedades point.type.square=Quadrado point.type.diamond=Diamante point.type.circle=Circunferncia point.type.dot=Ponto color.type.normal=Normal color.type.thick=Grosso color.type.thin=Fino text.point=Ponto em (%, %) text.line=Reta passando por % e % text.segment=Segmento entre % e % text.segment.fixed=Segmento entre % e % com comprimento % text.ray=Semi-reta de origem % e passando por % text.intersection=Interseo entre % e % text.circle=Circunferncia de centro em % passando por % text.circle.fixed=Circunferncia de centro em % passando por % e com raio % text.fixedcircle=Circunferncia de centro em % com raio % text.circle3=Circunferncia com centro em % e com raio determinado pelo segmento entre % e % text.parallel=Reta passando por % e paralela a % text.midpoint=Ponto Mdio entre % e % text.quadric=Cnica passando por % text.plumb=Reta passando por % e perpendicular a % text.angle=ngulo % - % - % text.angle.fixed=ngulo % - % - % de amplitude % text.boundedpoint=Ponto sobre % text.expression=Expresso "%" em (%, %) text.area=Polgono text.fixedangle=ngulo % - % de amplitude % name.Point=Ponto name.Intersection=Interseo name.OtherIntersection=Interseo name.Circle=Circunferncia name.Circle3=Circunferncia name.Segment=Segmento name.Ray=Semi-reta name.Line=Reta name.TwoPointLine=Reta passando por dois pontos name.Parallel=Reta paralela name.Midpoint=Ponto mdio name.Quadric=Cnica name.Plumb=Reta perpendicular name.Angle=ngulo name.PointOn=Ponto sobre objeto name.Expression=Expresso name.Polygon=Polgono prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.angle==a(,,) prompt.area=A(,,) prompt.quadric=quadric(,,,,) prompt.function=function(,,,,,) name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=sr name.short.Line=r name.short.Parallel=par name.short.Midpoint=M name.short.Quadric=con name.short.Plumb=per name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=pol name.short.Function=f popup.hidden=Mostrar objetos escondidos popup.replay=Revisar construo popup.empty=--- Macros --- replay.title=Revisar Construo reorder.title=Reordenar os objetos reorder.message=incluir depois de reorder.notfound=Objeto no encontrado! reorder.warning=No pode ser feito! setgrid.title=Largura da Grade setgrid.prompt=Entre com a nova largura da grade setgrid.set=OK definemacro.title=Definir uma Macro definemacro.name=Nome definemacro.comment=Comentrio da macro definemacro.noparams=Faltam os parmetros iniciais da macro! definemacro.nomacro=No existem macros definidas! definemacro.targetsonly=Mostrar apenas os objetos finais definemacro.invisible=No incluir construes intermedirias definemacro.promptfor=Solicitao para macro.replace.title=Substituir uma Macro macro.replace=Substituir Macro: macro.replace.all=Tudo macro.usage=Uso incorreto da macro (veja as indicaes)! macro.prompt.title=Solicitao de Parmetros macro.prompt.prompt=Entre com um valor para o parmetro macro.prompt.illegal=Valor invlido! digits.title=Definir Nmero de Dgitos digits.edit=Editar digits.lengths=Mostrar digits.angles=ngulos editrun.title=Editar Construo Descritiva editrun.run=Salvar e Executar editrun.load=Outra Descrio sure.title=Tem certeza? sure.macros=Apagar todas as macros? sure.delete=Ignorar as ltimas modificaes? close.title=Fim close.prompt=Fechar o programa? file.exists.title=Arquivo Existente file.exists.overwrite=O arquivo j existe! Substituir? exception.nparams=Nmero de Parmetros Invlido! exception.notfound=O objeto no foi encontrado ou ele foi definido aps a expresso! exception.type=Tipo de Objeto Invlido! exception.expression=Expresso Invlida! exception.canfix=O objeto no pode ser corrigido! exception.fix=Valor invlido! exception.novalue=Valor invlido! exception.elementary=Elemento invlido na expresso! exception.bracket=Faltam parnteses! exception.quotes=Faltam aspas! exception.dot=O nmero tem dois ou mais pontos decimais! exception.nodigit=O nmero no tem algarismos! exception.function=Funo desconhecida! exception.parameter=Parmetro de funo invlido! exception.macro=Parmetro de macro invlido! exception.name=Escreva um nome! exception.job=Parmetros de exerccio invlidos! exception.track=Parmetros de rastreio invlidos! exception.animate=Parmetros de animao invlidos! exception.boolean=Valor booleano deve ser verdadeiro ou falso! exception.value=Valor Invlido! exception.color=Cor Invlida! exception.colortype=Espessura Invlida! exception.type=Tipo de Ponto Invlido! exception.macroparameter=Objeto Inicial da Macro Invlido! exception.macrotarget=Objeto Final da Macro Invlido! exception.prompt=Nome do Objeto Invlido! exception.prompt.parameter=O nome do objeto no pode ser um parmetro! exception.parameters=Parmetro Invlido! exception.brackets=Parnteses Invlidos! exception.double=Este nome j existe! error.setaway=Este ponto no est definido antes da interseo! error.objecttracker.depends=Este ponto depende de outro objeto! constructiondisplay.title=Construo function.hide=Esconder function.hide.short=esconder function.rename=Nome function.rename.short=nome function.value=Valor function.value.short=valor function.window=Janela function.window.short=Jan function.color=Cor function.color.short=cor function.thickness=Espessura function.thickness.short=esp function.type=Tipo function.type.short=tipo function.partial=Parcial function.partial.short=parc function.fill=Preencher function.fill.short=preencher function.back=Fundo function.back.short=fundo function.acute=Agudo function.acute.short=agudo function.obtuse=Obtuso function.obtuse.short=obtuso function.solid=Opaco function.solid.short=opaco function restrict=Restrito function restrict.short=restrito expression.value=Valor configure.title=Escolher Navegador configure.prompt=Comando do Navegador # New Resources: background.error=No foi possvel abrir a imagem (GIF or JPG)! menu.background=Imagem de fundo menu.background.grab=Usar a construo atual como imagem de fundo menu.background.clear=Apagar a imagem de fundo menu.background.load=Abrir imagem de fundo ... menu.background.usesize=Redimensionar a imagem de fundo menu.background.tile=Ladrilhar imagem de fundo menu.background.center=Centralizar imagem de fundo iconhelp.grab=Criar ou apagar a imagem de fundo filedialog.backgroundload=Abrir imagem de fundo filedialog.backgroundload.action=Abrir # New Resources in Version 2.14 menu.file.compress=Compactar sempre menu.file.savesvg=Salvar figura (como SVG) ... # Version 2.15 loading=Carregando (por favor, aguarde) ... # Version 2.18 and 2.19 menu.settings.font.default=Fonte padro menu.settings.font.bold=Negrito menu.settings.font.large=Fonte Maior menu.file.saveeps=Salvar figura (como EPS) ... menu.fonts=Fonte # Version 2.20 bmpscaler.title=Dimenses do Arquivo (bitmap) bmpscaler.width=Largura bmpscaler.height=Altura bmpscaler.scale=Fator (pressione a tecla Enter) bmpscaler.illegal=Valor invlido! # Version 2.21 renamemacro.title=Substituir uma Macro renamemacro.name=Novo nome da macro menu.special.renamemacro=Substituir Macro ... # Version 2.23 savequestion.title=Salvar Construo savequestion.qsave=Salvar as Modificaes? # Version 2.25 exception.printsize=Pgina muito pequena para esta construo! iconhelp.nohelp=Ajuda no disponvel iconhelp.type?=Tipo de ponto iconhelp.thickness?=Espessura iconhelp.color?=Cor iconhelp.filled=Objeto Opaco iconhelp.isback=Desenhar no fundo iconhelp.inverse=ngulo oposto iconhelp.angle?=Amplitude # Version 2.28 message.objecttracker.stop=Rastrear automaticamente: clique para parar (shift da esquerda/shift da direita: altera a velocidade)! # Version 2.31 menu.settings.indicate=Visualizar objetos criados menu.options.other=Preferncias menu.help.welcome=Novidades desta verso iconhelp.twolines=cones em duas linhas iconhelp.qintersection=Confirmar antes de Criar Intersees iconhelp.qchoice=Mostrar Caixa de Dilogos para Selecionar Objetos iconhelp.qpointon=Confirmar antes de Criar um Ponto sobre um Objeto iconhelp.noindicate=No indicar objetos com a passagem do mouse # Version 2.33 menu.file.new=Nova Construo (Ctrl-n) # Version 2.34 edit.text.title=Configuraes de Texto edit.text.settings=Preferncias menu.settings.filedialog=Substituir Arquivo do Sistema # Version 2.35 menu.settings.bitmapbackground=Incluir Cor de Fundo em Bitmaps # Version 2.36 menu.file.savegraphics=Salvar Figura como ... menu.file.savepng=Salvar Figura (como PNG) bmpscaler.title=Escala da Figura # Version 2.37 menu.file.savepdf=Salvar Figura (como PDF) iconhelp.chord=Representar como segmento # Version 2.39 message.setfixedangle.first=Definir ngulo de amplitude fixa: selecione o primeiro ponto! message.setfixedangle.root=Definir ngulo de amplitude fixa: selecione o vrtice! message.setfixedangle.second=Definir ngulo de amplitude fixa: selecione o terceiro ponto! edit.fixedangle.set=Fixar amplitude ... message.setfixedcircle.midpoint=Definir circunferncia de raio fixo: de centro em qual ponto? message.setfixedcircle.radius=Definir circunferncia de raio fixo: passando por qual ponto? edit.fixedcircle.set=Fixar raio ... # Version 2.40 minpointsize.title=Definir Tamanho Mnimo do Ponto minpointsize.prompt=Tamanho mnimo do ponto (valor padro: 3) menu.settings.font.minpointsize=Tamanho Mnimo do Ponto ... # Version 2.41 name.short.Track=Tr text.track=Rastrear % enquanto % se move sobre % trackquestion.keep=Manter Trao na Construo? trackquestion.title=Manter Trao menu.options.track=Manter Trao (Shift-Enter) iconhelp.indicate=Visualizao dos resultados da construo iconhelp.nohelp=Ajuda no disponvel! # Version 2.42 objects.draw=Desenhar com o Mouse menu.options.cleardraw=Apagar Desenho (Esc) iconhelp.draw=Desenhar com o Mouse message.draw=Desenhar com o Mouse (ESC para apagar) shortcuts.draw=; # Version 2.43 message.move.select=Mover: selecione um ponto (shift: mostra posio antiga)! message.rename=Renomear (A,B,C,...): selecione os objetos! iconhelp.rename=Renomear (A,B,C,...) objects.rename=Renomear (A,B,C,...) shortcuts.rename=: iconhelp.anglereduce=No mostrar as semi-retas do ngulo # Version 2.45 menu.settings.smartboard=Modo Smartboard shortcuts.zoom=% objects.zoom=Zoom com o Mouse message.zoom=Arraste o centro, amplie ou reduza # Version 2.46 menu.special.restricticons=Grupo de cones Restritos # Version 2.47 menu.settings.indicate.simple=Indicar Pontos Apenas menu.settings.beginner=Modo Iniciante question.again=Sempre fazer esta pergunta. # Version 2.49 definemacro.parameters=Solicitao de Parmetros ("=nome" fixa o valor do parmetro) # Version 2.53 menu.actions.angles=ngulos menu.actions.circles=Circunferncias menu.actions.lines=Retas menu.actions.points=Pontos # Version 3.00 info.title=Ajuda Contextualizada info.related=Tpicos Relacionados info.notfound=Tpico no encontrado! info.noresults=Palavra no encontrada! info.searchresults=- Resultados da Busca - info.select=- Escolha - info.search=Procurar info.back=Voltar info.start=Iniciar iconhelp.info=Ajuda contextualizada menu.help.info=Ajuda contextualizada myfiledialog.homedir=Arquivos ReC myfiledialog.windowshome=Meus Documentos myfiledialog.mkdir=Criar Diretrio myfiledialog.back=Voltar menu.file.alwaysclearmacros=Apagar Macros antes de Carregar about.language=Idioma bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Cpias de Segurana # Version 3.02 menu.options.hideduplicates=Esconder Itens Duplicados # Version 3.03 menu.options.function=Criar uma Funo text.function=Funo ( % , % ) function.varmin=De function.varmax=at function.dvar=Passo function.var=Varivel function.x=X function.y=Y iconhelp.function=Criar uma Funo menu.options.editlast=Editar o ltimo Objeto iconhelp.control.edit=Editar o ltimo Objeto iconhelp.control.hide=Esconder Itens Duplicados edit.function.title=Funo ou Curva iconhelp.control.runmacro=Executar a ltima macro novamente # Version 3.05 point.type.cross=Cruz point.type.dcross=Xis shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Unidade menu.special.break=Pontos de Parada menu.bp.setbreak=Definir Pontos de Parada menu.bp.clearbreak=Apagar Pontos de Parada menu.bp.sethidingbreak=Definir Pontos de Parada Ocultos menu.bp.animatebreak=Animar Pontos de Parada iconhelp.animatebreak=Animar Pontos de Parada message.animatebreak=Animar Pontos de Parada: clique para parar (shift da esquerda/shift da direita: altera a velocidade)! menu.special.exporttemplate=Exportar arquivo HTML como Modelo templateload.open=Carregar Modelo templateload.open.action=Abrir menu.settings.doubleclick=Clique Duplo para Macros export.codebase=Codebase # Version 3.12 edit.equation=Equao # Version 3.23 menu.settings.squarepoints=Desenhar pontos sempre como quadrados # Version 3.37 menu.options.export=Configurar Sada Grfica menu.settings.minwidth=Espessura mnima da reta 1 menu.settings.minpointsize=Respeitar o tamanho mnimo do ponto menu.settings.minfontsize=Respeitar o tamanho mnimo da fonte minfontsize.title=Definir o tamanho mnimo da fonte minfontsize.prompt=Tamanho mnimo da fonte (padro: 12) menu.options.minpointsize=Tamanho Mnimo do Ponto menu.options.minfontsize=Tamanho Mnimo da Fonte # Version 3.38 menu.settings.scalepdf=Redimensional PDF e EPS na proporo 1:1 # Version 3.41 menu.file.clip=Corte da Sada Grfica clip.title=Definir rea de Corte clip.width=Comprimento clip.height=Altura clip.screen=Sem rea de Corte # Version 3.42 menu.options.arrowsize=Tamanho da seta ... arrowsize.title=Tamanho da Seta # Version 3.44 iconhelp.large=Usar fontes grandes iconhelp.bold=Usar fontes em negrito menu.options.largefont=Fonte grande menu.options.boldfont=Fonte em negrito warning.previewframe=rea maior do que a janela! message.move.select=Mover: Selecionar um ponto (shift: mais pontos, ctrl: exibe configurao anterior)! # Version 3.46 iconbar.showseparators=Exibir Separadores # Version 3.48 menu.sizes=Definir tamanhos menu.options.minlinesize=Espessura Mnima da Reta ... minlinesize.title=Espessura Mnima da Reta minlinesize.prompt=Espessura Mnima da Reta (Padro 1) arrowsize.prompt=Definir Tamanho da Seta (Padro: 10) menu.options.printscaler=Definir Escala ... menu.options.exportsettings=Configuraes Especiais ... printscaler.title=Definir Janela printscaler.width=Comprimento (em cm) printscaler.height=Altura (em cm) printscaler.dpi=Resoluo (em dpi, padro 300) printscaler.linewidth=Espessura da Reta (em cm, padro 0.02) printscaler.pointsize=Tamanho do Ponto (em cm, padro 0.07) printscaler.textsize=Tamanho do Texto (em cm, padro 0.3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=Comprimento (em pixels) printscaler.h=Altura (em pixels) printscaler.scale=Escala (relativa janela) printscaler.middle=Cortar (sem redimensionamento) printscaler.sizes=Redimensionar retas, fontes e pontos menu.file.savepng=Salvar Figura como PNG warning.preview=Visualizao pode no funcionar com Java 1.1 iconedit.showseparators=Exibir Separadores printscaler.aspect=Manter as Propores printscaler.presets=Configuraes printscaler.preset=Selecione printscaler.preset.300dpi=Redimensionar com 300 DPI printscaler.preset.300dpi6=6 cm de comprimento com 300 DPI printscaler.preset.300dpi16=16 cm de comprimento com 300 DPI printscaler.preset.window=Tamanho da Janela printscaler.preset.clip50=Reduzir Janela em 50% message.saving=Por favor, espere! menu.options.printscalepreview=Visualizar (Ctrl-F3) date=Compilado # Version 3.51 help=Ajuda # Version 3.61 editconditionals.title=Editar Condicionais editconditionals.hidden=Escondido editconditionals.superhidden=Completamente Escondido editconditionals.visible=Normal editconditionals.showname=Exibir Nome editconditionals.showvalue=Exibir Valor editconditionals.background=Fundo editconditionals.solid=No Transparente exception.superfluous=Texto Suprfluo na Expresso # Version 3.62 menu.options.selectionsize=Configurar Tamanho selectionsize.title=Tamanho selectionsize.prompt=Tamanho (padro 1.5) # Version 3.63 select.comment.title=Comentrio da Macro # Version 3.68 edit.area.area=rea # Version 3.73 myfiledialog.oldfiles=Arquivos Antigos # Version 3.74 iconhelp.load=Carregar Construo (Ctrl-o) iconhelp.save=Salvar Construo (Ctrl-s) iconhelp.new=Nova Construo (Ctrl-n) # Version 3.81 warning.loadbackground=Erro ao abrir a figura de fundo # Version 3.9 function.x=Expresso para X (vazio para funes) # Version 3.91 constructiondisplay.select=Selecionar constructiondisplay.all=Todos os Objetos constructiondisplay.visible=Objetos Visveis constructiondisplay.points=Pontos constructiondisplay.lines=Retas constructiondisplay.circles=Crculos constructiondisplay.angles=ngulos constructiondisplay.other=Outros objetos menu.file.copypng=Copiar para o Clipboard exception.clipboardcopy=No foi possvel copiar! menu.options.finegrid=Somente os Eixos # Vesion 3.93 edit.function.center=Definir Centro edit.function.free=Liberar Centro message.setcenter=Escolher o ponto central! # Vesion 3.94 message.edit=Editar: Objeto (shift: mais objetos, ctrl: condicionais)? # Version 3.95 edit.function.special=Somente os Pontos # Version 3.97 error.image=Erro ao abrir uma imagem! filedialog.imageload=Abrir imagem filedialog.imageload.action=Abrir prompt.image=imagem(,,,) objects.image=imagem shortcuts.image=_ # Version 3.98 exception.depends=Objeto % depende do objeto atual. error.depends=Objeto % depende do objeto atual. constructiondisplay.sorted=Ordenado por Ordem de Construo # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Expresses # Version 4.00 iconhelp.image=Abrir Imagem(_) message.image=Ponto ncora da imagem % message.image.last=Last image anchor point (or choose selected point) message.image.last=ltimo ponto ncora da imagem (ou escolha um ponto selecionado) editconditionals.z=Valor do Z-Buffer # Version 4.01 name.FixedAngle=ngulo fixo # Version 4.04 menu.moresettings=Configuraes menu.settings.language=Configurar Idioma language.title=Configurar Idioma language.prompt=Idioma para a prxima sesso do programa # Version 4.05 constructiondisplay.invalid=Objetos Invlidos # Version 4.08 menu.settings.constructiondisplay=Tela de Construes Permanentes (F11) # Version 4.09 constructiondisplay.editconditions=Editar Condicionais constructiondisplay.delete=Apagar Objetos selecionados constructiondisplay.hide=Esconder ou Exibir constructiondisplay.superhide=Esconder (super) ./src/rene/zirkel/docs/ZirkelProperties_sk.properties0000770000175000017500000013171710655647770022104 0ustar yvesyveslanguage=sk_ version=Verzia homefile=index.html homepage=http://www.z-u-l.de/ codepage.help=CP1250 about.title=O tomto programe about.name=\u0160kolsk\u00e1 geometria about.programmed=Autor programu title=\u0160kolsk\u00e1 geometria close=Zatvori\u0165 ok=OK cancel=Zru\u0161i\u0165 done=Dobr\u00e1 pr\u00e1ca! message=Spr\u00e1va yes=\u00c1no no=Nie abort=Preru\u0161i\u0165 true=pravda false=nepravda warning.nojob=Toto nie je zadanie! warning.print=Tla\u010d zlyhala! warning.reset=T\u00e1to vo\u013eba bude zapnut\u00e1 potom, \u010do ukon\u010d\u00edte a znovu na\u0161tartujete C.a.R.! question.title=Ot\u00e1zka question.intersection=Vytvori\u0165 tento priese\u010dn\u00edk? question.pointon=Vytvori\u0165 bod na tomto objekte? colors.black=\u010cierna colors.blue=Modr\u00e1 colors.green=Zelen\u00e1 colors.brown=Hned\u00e1 colors.cyan=Svetlo modr\u00e1 colors.red=\u010cerven\u00e1 objects.point=Bod objects.segment=\u00dase\u010dka objects.line=Priamka objects.ray=Polpriamka objects.circle=Kru\u017enica objects.intersection=Priese\u010dn\u00edk objects.move=Pohybova\u0165 bodom objects.hide=Skry\u0165 objekt objects.edit=Upravi\u0165 bod objects.tracker=Sledova\u0165 bod alebo priamku objects.objecttracker=Sledova\u0165 bod alebo priamku na objekte objects.parallel=Rovnobe\u017eka objects.plumb=Kolmica objects.circle3=Kru\u017enica ur\u010den\u00e1 troma bodmi objects.midpoint=Stred objects.quadric=Ku\u017ee\u013eose\u010dka objects.angle=Uhol objects.boundedpoint=Bod na objekte objects.parameter=Nastavi\u0165 parametre makra objects.targets=Nastavi\u0165 cie\u013eov\u00e9 objekty makra objects.definejob=Definova\u0165 zadanie objects.runmacro=Spusti\u0165 makro objects.delete=Zmaza\u0165 objekty a ich dc\u00e9rske objekty objects.reorder=Potla\u010di\u0165 objekty do pozadia objects.animate=Anim\u00e1cia objects.expression=Aritmetick\u00fd v\u00fdraz objects.area=Mnohouholn\u00edk objects.text=Text objects.fixedcircle=Kru\u017enica s fixnou ve\u013ekos\u0165ou objects.fixedangle=Fixn\u00fd uhol objects.fixedsegment=\u00dase\u010dka s fixnou d\u013a\u017ekou iconhelp.point=Bod (p) iconhelp.segment=\u00dase\u010dka (s) iconhelp.line=Priamka (g) iconhelp.ray=Polpriamka (r) iconhelp.circle=Kru\u017enica (c) iconhelp.intersection=Priese\u010dn\u00edk (i) iconhelp.move=Posun\u00fa\u0165 bodom (m)+Ctrl (Body): Zobrazova\u0165 star\u00fa kon\u0161trukciu+Ctrl: Pos\u00fava\u0165 fixn\u00fdmi objektami+Shift: Pos\u00fava\u0165 viac ako jeden objekt iconhelp.hide=Skry\u0165 objekty (h)+Shift: Skry\u0165 \u00faplne iconhelp.edit=Upravi\u0165 objekty (e)+Shift: Upravi\u0165 viac objektov+Ctrl: Upravi\u0165 posledn\u00fd objekt iconhelp.tracker=Sledova\u0165 stopu bodu alebo priamky (t) iconhelp.objecttracker=Automatick\u00e9 sledovanie stopy bodu alebo priamky (o)+Ctrl: Ponecha\u0165 stopu (Shift-Enter) iconhelp.parallel=Rovnobe\u017eka (1) iconhelp.plumb=Kolmica (2) iconhelp.circle3=Kru\u017enica ur\u010den\u00e1 troma bodmi (3) iconhelp.midpoint=Stred (4) iconhelp.quadric=Ku\u017ee\u013eose\u010dka prech\u00e1dzaj\u00faca cez 5 bodov ($) iconhelp.angle=Uhol (a) iconhelp.boundedpoint=Vytvori\u0165 bod na objekte (5)+Shift: Nie prichyten\u00fd k objektu iconhelp.hidden=Uk\u00e1za\u0165 alebo skry\u0165 skryt\u00e9 objekty (F9) iconhelp.color=Nastavi\u0165 predvolen\u00fa farbu objektu (Ctrl-1,2,3,4) iconhelp.type=Typ bodu (Ctrl-5,6,7,8,9,0) iconhelp.type0=Typ bodu iconhelp.thickness=Hr\u00fabka objektu (Alt-5,6,7) iconhelp.back=Zmaza\u0165 posledn\u00fd objekt (<-) iconhelp.thickness0=Hr\u00fabka objektu iconhelp.partial=Nevykres\u013eova\u0165 cel\u00fa kru\u017enicu (Ctrl-F9) iconhelp.plines=Nevykres\u013eova\u0165 cel\u00e9 priamoky (Ctrl-F10) iconhelp.arrow=\u00dase\u010dky vytv\u00e1ra\u0165 ako vektory (Ctrl-F11) iconhelp.showcolor=Zobrazova\u0165 iba vybran\u00e9 farby (Alt-1,2,3,4) iconhelp.runmacro=Spusti\u0165 makro (9)+Ctrl: Spusti\u0165 posledn\u00e9 makro iconhelp.macro=Nastavi\u0165 parametre, cie\u013eov\u00e9 objekty a defin\u00edciu makra (7,8,Ctrl-5) iconhelp.expression=Aritmetick\u00fd v\u00fdraz (x) iconhelp.showvalue=Zobrazi\u0165 hodnotu objektu (Ctrl-F7) iconhelp.showname=Zobrazi\u0165 meno objektu (Ctrl-F6) iconhelp.obtuse=Vytv\u00e1ra\u0165 uhly v\u00e4\u010d\u0161ie ako 180 stup\u0148ov (Ctrl-F12) iconhelp.solid=Nepou\u017e\u00edva\u0165 prieh\u013eadnos\u0165 iconhelp.longnames=Pou\u017e\u00edva\u0165 dlh\u00e9 men\u00e1 objektov (Ctrl-F8) iconhelp.grid=Zobrazi\u0165 mrie\u017eku (F12) iconhelp.comment=Zobrazi\u0165 a upravi\u0165 koment\u00e1r (F10) iconhelp.defaults=Predvolen\u00e9 nastavenia iconhelp.macro0=Nastavi\u0165 parametre, cie\u013eov\u00e9 objekty a defin\u00edciu makra iconhelp.visual=Prep\u00edna\u0165 vizu\u00e1lny m\u00f3d kon\u0161trukcie iconhelp.replay=Prehra\u0165 kon\u0161trukciu iconhelp.oneforward=Dopredu iconhelp.fastforward=Zr\u00fdchlene dopredu iconhelp.allforward=Na koniec iconhelp.oneback=Sp\u00e4\u0165 iconhelp.fastback=Zr\u00fdchlene sp\u00e4\u0165 iconhelp.allback=Na za\u010diatok iconhelp.close=Zatvori\u0165 iconhelp.area=Mnohouholn\u00edk (0) iconhelp.text=Text na nieko\u013eko riadkov (b) iconhelp.fixedcircle=Kru\u017enica s fixn\u00fdm polomerom (,) iconhelp.fixedangle=Uhol s fixnou ve\u013ekos\u0165ou (.) iconhelp.fixedsegment=\u00dase\u010dka s fixnou d\u013a\u017ekou (#) iconhelp.animate=Anim\u00e1cia bodu (") iconhelp.delete=Zmaza\u0165 objekty a ich dc\u00e9rske objekty (Del) iconhelp.undo=Vr\u00e1ti\u0165 sp\u00e4\u0165 naposledy vymazan\u00e9 objekty (Ctrl-z) iconhelp.nextbreak=Sko\u010di\u0165 na nasleduj\u00face preru\u0161enie iconhelp.setbreak=Prep\u00edna\u0165 preru\u0161enie+Shift: Ukryt\u00e9 preru\u0161enie iconhelp.zoom=Pribli\u017eova\u0165 a vz\u010fa\u013eova\u0165 my\u0161ou (%) shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.showcolor.4= shortcuts.showcolor.5= shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) menu.file=S\u00fabor menu.file.clearmacros=Zmaza\u0165 pou\u017e\u00edvate\u013esk\u00e9 makr\u00e1 menu.file.load=Na\u010d\u00edta\u0165 kon\u0161trukciu ... (Ctrl-o) menu.file.loadjob=Na\u010d\u00edta\u0165 zadanie ... (Ctrl-j) menu.file.savejob=Ulo\u017ei\u0165 ako zadanie ... (Ctrl-k) menu.file.save=Ulo\u017ei\u0165 t\u00fato kon\u0161trukciu (Ctrl-s) menu.file.saveas=Ulo\u017ei\u0165 t\u00fato kon\u0161trukciu do ... (Ctrl-a) menu.file.includemacros=Zahrn\u00fa\u0165 v\u0161etky makr\u00e1 menu.file.exit=Koniec (Alt-F4) menu.file.print=Tla\u010di\u0165 ... menu.file.print.isoscale=Mierka 1:1 v cm menu.file.savebmp=Ulo\u017ei\u0165 obr\u00e1zok (ako BMP) ... menu.file.savefig=Ulo\u017ei\u0165 obr\u00e1zok (ako FIG) ... menu.file.loadrun=Na\u010d\u00edta\u0165 popisn\u00fa kon\u0161trukciu ... (Ctrl-r) menu.file.editrun=Upravi\u0165 popisn\u00fa kon\u0161trukciu ... (Ctrl-x) menu.actions=Upravi\u0165 menu.actions.elementary=Element\u00e1rne n\u00e1stroje menu.actions.complex=Zlo\u017eitej\u0161ie n\u00e1stroje menu.actions.move=N\u00e1stroje pohybu menu.actions.decorative=\u010eal\u0161ie objekty menu.options=Mo\u017enosti menu.options.visual=Prep\u00edna\u0165 vizu\u00e1lny m\u00f3d (Ctrl-F6) menu.options.hidden=Zobrazi\u0165 skryt\u00e9 objekty (F9) menu.options.comment=Upravi\u0165 koment\u00e1r (F10) menu.options.constructiondisplay=Zobrazi\u0165 popis menu.options.grid=Zobrazi\u0165 mrie\u017eku (F12) menu.options.setgrid=Nastavi\u0165 \u0161\u00edrku mrie\u017eky ... menu.options.showcolor=Zobrazi\u0165 farbu menu.options.defaultcolor=Predvolen\u00e1 farba menu.options.defaultthickness=Predvolen\u00e1 hr\u00fabka menu.options.defaulttype=Predvolen\u00fd typ bodu menu.options.all=V\u0161etko menu.options.setdigits=Nastavi\u0165 \u010d\u00edslice menu.options.shownames=Zobrazi\u0165 men\u00e1 objektov (Ctrl-F6) menu.options.longnames=Dlh\u00e9 men\u00e1 objektov (Ctrl-F8) menu.options.obtuse=Pou\u017ei\u0165 uhly v\u00e4\u010d\u0161ie ako 180 stup\u0148ov (Ctrl-F12) menu.options.solid=Nepou\u017e\u00edva\u0165 prieh\u013eadnos\u0165 menu.options.showvalues=Zobrazi\u0165 hodnoty objektov (Ctrl-F7) menu.options.partial=Nekresli\u0165 cel\u00e9 kru\u017enice (Ctrl-F9) menu.options.plines=Nekresli\u0165 cel\u00e9 priamky (Ctrl-F10) menu.options.arrow=\u0160\u00edpky (Ctrl-F11) menu.options.editicons=Upravi\u0165 panel n\u00e1strojov menu.options.back=Zmaza\u0165 posledn\u00fd objekt (<-) menu.options.undo=Zru\u0161i\u0165 zmazanie (Ctrl-z) menu.zoom=Poh\u013ead menu.zoom.in=z bli\u017e\u0161ia (+) menu.zoom.out=z v\u00e4\u010d\u0161ej vzdialenosti (-) menu.zoom.left=V\u013eavo (\u0160\u00edpka do\u013eava) menu.zoom.right=Vpravo (\u0160\u00edpka doprava) menu.zoom.up=Hore (\u0160\u00edpka hore) menu.zoom.down=Dole (\u0160\u00edpka dole) menu.macros=Makr\u00e1 menu.special.definemacro=Definova\u0165 makro (Ctrl-F5) menu.special.runmacro=Spusti\u0165 makro ... (F5) menu.special.savemacros=Ulo\u017ei\u0165 makro ... menu.special.loadmacros=Na\u010d\u00edta\u0165 makr\u00e1 ... menu.special.deletemacros=Zmaza\u0165 makr\u00e1 ... menu.special=\u0160peci\u00e1lne menu.special.testjob=Odsk\u00fa\u0161a\u0165 toto zadanie (Ctrl-F1) menu.special.jobcomment=Nastavi\u0165 text zadania ... (F8) menu.special.export=Vytvori\u0165 HTML str\u00e1nku ... (Ctrl-e) menu.special.replay=Prehra\u0165 t\u00fato kon\u0161trukciu menu.help=Pomoc menu.help.about=O tomto programe menu.help.browser=Presk\u00fama\u0165 Pomoc a Uk\u00e1\u017eky menu.help.text=Jednoduch\u00e1 Pomoc menu.help.configure=Nastavi\u0165 prehliada\u010d str\u00e1nok menu.help.help=Pomoc (F1) menu.help.macros=O makr\u00e1ch menu.help.tools=N\u00e1stroje menu.help.gui=Pou\u017e\u00edvate\u013esk\u00e9 rozhranie menu.help.interactive=Popisn\u00e9 kon\u0161trukcie menu.help.tips=Nieko\u013eko dobr\u00fdch r\u00e1d menu.settings=\u0160peci\u00e1lne nastavenia menu.settings.fullicons=Pou\u017eite dva pln\u00e9 panely n\u00e1strojov menu.settings.utf=Pou\u017ei\u0165 UTF-8 k\u00f3dovanie menu.settings.autohide=Skry\u0165 druh\u00fd priese\u010dn\u00edk menu.settings.iconbartop=Panel n\u00e1strojov nad kon\u0161trukciou menu.settings.showtips=Zobrazova\u0165 dobr\u00e9 rady menu.settings.simplegraphics=Pou\u017ei\u0165 jednoduch\u0161iu grafiku menu.settings.sure=Potvrdi\u0165 pred na\u010d\u00edtan\u00edm a zatvoren\u00edm menu.settings.pointon=Op\u00fdta\u0165 sa predt\u00fdm ako sa vytvor\u00ed bod na objekte menu.settings.intersection=Op\u00fdta\u0165 sa predt\u00fdm ako sa vytvor\u00ed priese\u010dn\u00edk menu.settings.choice=Zobrazi\u0165 dial\u00f3gov\u00e9 okno v\u00fdberu objektov menu.settings.movename=Zobrazova\u0165 hodnoty objektov pri pohybe menu.settings.movefixname=Zobrazova\u0165 hodnoty fixn\u00fdch objektov pri pohybe menu.settings.restricted=\u0160kolsk\u00fd m\u00f3d menu.colors=Nastavenie farieb colors.default=Pou\u017ei\u0165 predvolen\u00e9 farby colors.color0=Farba 1 (\u010cierna) colors.color1=Farba 2 (Zelen\u00e1) colors.color2=Farba 3 (Modr\u00e1) colors.color3=Farba 4 (Hned\u00e1) colors.color4=Farba 5 (Svetlo modr\u00e1) colors.color5=Farba 6 (\u010cerven\u00e1) colors.background=Pozadie colors.select=Vybran\u00fd objekt colors.target=Cie\u013eov\u00fd objekt myfiledialog.dir=Prie\u010dinok myfiledialog.file=S\u00fabor myfiledialog.pattern=Pr\u00edpony filedialog.open=Otvori\u0165 filedialog.saveas=Ulo\u017ei\u0165 ako ... filedialog.open.action=Otvori\u0165 filedialog.saveas.action=Ulo\u017ei\u0165 filedialog.htmlsave=Ulo\u017ei\u0165 HTML filedialog.htmlsave.action=Ulo\u017ei\u0165 pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Ulo\u017ei\u0165 load=Na\u010d\u00edta\u0165 abort=Preru\u0161i\u0165 bound.release=Zru\u0161i\u0165 v\u00e4zbu bodu bound.bind=Viaza\u0165 na objekt bound.error=Object not found before intersection! constructiondisplay.edit=Upravi\u0165 objekt constructiondisplay.copy=Kop\u00edrova\u0165 do schr\u00e1nky (do clipboardu) edit.Title=Vlastnosti edit.name=Meno edit.hidden=Skryt\u00fd edit.text=Text edit.fixed=Fixovan\u00fd/\u00e1 edit.color=Farba edit.ok=OK edit.cancel=Zru\u0161i\u0165 edit.showname=Zobrazi\u0165 meno edit.point.title=Upravi\u0165 bod edit.point.type=Zna\u010dka edit.point.x=X edit.point.y=Y edit.point.intersection=R\u00f4zny od edit.point.showvalue=Zobrazi\u0165 s\u00faradnice edit.point.colortype=Hr\u00fabka edit.point.bound=Viazan\u00fd edit.point.away=\u010co naj\u010falej od edit.point.close=\u010co najbli\u017e\u0161ie ku edit.point.free=Vo\u013en\u00fd edit.line.title=Upravi\u0165 priamku, polpriamku, \u00fase\u010dku edit.line.normal=Norm\u00e1lna edit.line.thick=Hrub\u00e1 edit.line.thin=Tenk\u00e1 edit.line.invisible=Nevidite\u013en\u00e1 edit.line.type=Typ edit.segment.length=D\u013a\u017eka edit.segment.showvalue=Zobrazi\u0165 d\u013a\u017eku edit.circle.title=Upravi\u0165 kru\u017enicu edit.circle.length=Polomer edit.circle.partial=Zobrazova\u0165 len \u010das\u0165 edit.plumb.restricted=Obmedzen\u00e1/\u00fd edit.angle.title=Upravi\u0165 uhol edit.angle.length=Ve\u013ekos\u0165 edit.angle.displaysize=Zobrazova\u0165 ve\u013ekos\u0165 edit.angle.normal=Norm\u00e1lna edit.angle.small=Mal\u00e1 edit.angle.large=Ve\u013ek\u00e1 edit.expression.title=Upravi\u0165 v\u00fdraz edit.expression=Aritmetick\u00fd v\u00fdraz edit.expression.prompt=Vysvetlenie edit.area.title=Upravi\u0165 mnohouholn\u00edk edit.area.back=V pozad\u00ed export.title=Export do HTML export.pagetitle=N\u00e1vov str\u00e1nky export.width=\u0160\u00edrka export.height=V\u00fd\u0161ka export.jar=S\u00fabor jar export.comment=Ulo\u017ei\u0165 koment\u00e1r export.file=S\u00fabor kon\u0161trukcie export.job=Zobrazi\u0165 ako zadanie export.color=Farba export.backgroundcolor=Pou\u017ei\u0165 na pozadie str\u00e1nky export.appletcolor=Pou\u017ei\u0165 na pozadie appletu export.plain=Jednoduch\u00fd export.3D=Okraje export.breaks=Prehra\u0165 s bodmi preru\u0161enia export.icons=Okraje a ikony export.full=Okraje, ikony a stav export.nonvisual=Okraje, ikony a vstupn\u00fd riadok export.style=\u0160t\u00fdl appletu export.setcolor=Vyberte farbu export.savefirst=S\u00fabor sa neulo\u017eil! export.soltext=Rie\u0161enie export.stylesheet=S\u00fabor CSS \u0161t\u00fdlov export.solution=S\u00fabor s rie\u0161en\u00edm export.jumpsol=Presko\u010di\u0165 na rie\u0161enie export.linksol=Odkaz na rie\u0161enie export.savesol=Ulo\u017ei\u0165 s\u00fabor s rie\u0161en\u00edm export.track=Sledovan\u00fd bod export.digits=Ulo\u017ei\u0165 \u010d\u00edslice export.setsize=Ve\u013ekos\u0165 export.signature=Vytvoren\u00e9 pomocou C.a.R. od R. Grothmanna export.colors=Ulo\u017ei\u0165 definovan\u00e9 farby export.background=Ulo\u017ei\u0165 definovan\u00e9 pozadie help.title=Pomoc help.error=Nepodarilo sa otvori\u0165 s\u00fabor s pomocou! help.file=sk_info.txt coloreditor.title=Upravi\u0165 farbu coloreditor.red=\u010cerven\u00e1 coloreditor.green=Zelen\u00e1 coloreditor.blue=Modr\u00e1 coloreditor.color=Va\u0161a farba comment.title=Koment\u00e1r kon\u0161trukcie comment.set=Nastavi\u0165 comment.cancel=Zru\u0161i\u0165 comment.close=Zavrie\u0165 iconedit.title=Upravi\u0165 panel s ikonami iconedit.twobars=Panel n\u00e1strojov m\u00e1 dva riadky jobcomment.title=Zadanie select.title=V\u00fdber select.ok=OK select.cancel=Zru\u0161i\u0165 select.comment=Zobrazi\u0165 koment\u00e1r select.all=V\u0161etko message.circle.midpoint=Kru\u017enica: Stred? message.circle.radius=Kru\u017enica: Bod na kru\u017enici (shift: fixn\u00fd polomer)? message.fixedcircle.midpoint=Kru\u017enica s fixnou ve\u013ekos\u0165ou: Stred? message.fixedcircle.radius=Kru\u017enica s fixnou ve\u013ekos\u0165ou: Polomer? message.line.first=Priamka: Prv\u00fd bod? message.line.second=Priamka: Druh\u00fd bod? message.ray.first=Polpriamka: Za\u010diato\u010dn\u00fd bod? message.ray.second=Polpriamka: Druh\u00fd bod? message.move.select=Pos\u00fava\u0165: Vyberte objekt (shift: viac objektov)! message.move.move=Pos\u00fava\u0165: Posun\u00fa\u0165 bod? message.point=Bod: Nastavi\u0165 bod (shift: fixn\u00fd)! message.segment.first=\u00dase\u010dka: Za\u010diato\u010dn\u00fd bod? message.segment.second=\u00dase\u010dka: Koncov\u00fd bod (shift: fixn\u00e1 d\u013a\u017eka)? message.fixedsegment.first=\u00dase\u010dka s fixnou d\u013a\u017ekou: Za\u010diato\u010dn\u00fd bod? message.fixedsegment.second=\u00dase\u010dka s fixnou d\u013a\u017ekou: Klikite niekde! message.intersection.first=Priese\u010dn\u00edk: Prv\u00fd objekt na ktorom priese\u010dn\u00edk le\u017e\u00ed? message.intersection.second=Priese\u010dn\u00edk: Prv\u00fd objekt? message.hide=Skry\u0165/Uk\u00e1za\u0165: Vyberte objekt! message.tracker.select=Stopa: Bod alebo priamka, ktor\u00e1 sa bude sledova\u0165 (shift: viac)? message.tracker.selectpoint=Stopa: Bod, ktor\u00fdm sa pohybuje? message.tracker.move=Stopa: Pohybujte bodom! message.objecttracker.select=Automatick\u00e1 stopa: Bod alebo priamka, ktor\u00e1 sa bude sledova\u0165 (shift: viac)? message.objecttracker.object=Automatick\u00e1 stopa: Priamka alebo kru\u017enica, bod na objekte, posuvn\u00edk? message.objecttracker.selectpoint=Automatick\u00e1 stopa: Bod, ktor\u00fdm sa bude pohybova\u0165 na priamke alebo kru\u017enici? message.objecttracker.selectanypoint=Automatick\u00e1 stopa: Nejak\u00fd \u010fal\u0161\u00ed bod, ktor\u00fdm sa bude pohybova\u0165? message.objecttracker.move=Automatick\u00e1 stopa: Pohybujte bodom! message.objecttracker.start=Automatick\u00e1 stopa: Spustite anim\u00e1ciu! message.parallel.first=Rovnobe\u017eka: Na ktor\u00fa priamku? message.parallel.second=Rovnobe\u017eka: Ktor\u00fdm bodom? message.plumb.first=Kolmica: Na ktor\u00fa priamku? message.plumb.second=Kolmica: Ktor\u00fdm bodom? message.circle3.first=Kru\u017enica: Prv\u00fd bod polomeru? message.circle3.second=Kru\u017enica: Druh\u00fd bod polomeru? message.circle3.midpoint=Kru\u017enica: Stred? message.midpoint.first=Stred \u00fase\u010dky: Za\u010diato\u010dn\u00fd bod? message.midpoint.second=Stred \u00fase\u010dky: Koncov\u00fd bod? message.quadric=Ku\u017ee\u0161ose\u010dka: Bod \u010d\u00edslo message.angle.first=Uhol: Bod na prvom ramene uhla? message.angle.root=Uhol: Vrchol? message.angle.second=Uhol: Bod na druhom ramene uhla (shift: fixn\u00e1 ve\u013ekos\u0165)? message.fixedangle.first=Uhol s fixnou ve\u013ekos\u0165ou: Bod na ramene uhla? message.fixedangle.root=Uhol s fixnou ve\u013ekos\u0165ou: Vrchol? message.fixedangle.second=Uhol s fixnou ve\u013ekos\u0165ou: Kliknite niekde! message.label.select=Posun\u00fa\u0165 menovku: Vyberte menovku! message.label.move=Posun\u00fa\u0165 menovku: Posunte menovkou! message.boundedpoint=Bod na objekte: Kru\u017enica alebo priamka (shift: nefixova\u0165)? message.parameters=Parametre makra: Vstupn\u00e9 objekty? message.targets=Cie\u013eov\u00e9 objekty makra: V\u00fdstupn\u00e9 objekty? message.savejob.first=Definova\u0165 zadanie: Naposledy zobrazen\u00fd objekt? message.savejob.second=Definova\u0165 zadanie: Cie\u013eov\u00fd objekt (shift: neoverova\u0165)? message.savejob.third=Definova\u0165 zadanie: \u010eal\u0161ie objekty ktor\u00e9 sa bud\u00fa zobrazova\u0165? message.runmacro=Makro %: %. % - % message.runmacro.return=(MEDZEROVN\u00cdKOM mo\u017eno vybra\u0165 %) message.runmacro.fixes=(SHIFTOM mo\u017eno opravi\u0165 v\u00fdber) message.delete=Zmaza\u0165: Vyberte objekt! message.reorder=Preusporiada\u0165: Vyberte objekt! message.expression=Aritmetick\u00fd v\u00fdraz: Vyberte umiestnenie! message.area=Vyplnen\u00fd mnohouholn\u00edk: Vrchol? message.text=Text: Vyberte umiestnenie! message.animator.point=Anim\u00e1cia: Bod, ktor\u00fd sa m\u00e1 animova\u0165? message.animator.segment=Anim\u00e1cia: Kru\u017enica alebo \u00fase\u010dka? message.animator.running=Anim\u00e1cia: Be\u017e\u00ed (zastav\u00edte kliknut\u00edm)! message.range.first=Nastavi\u0165 rozsah: Kresli\u0165 kru\u017enicu z ktor\u00e9ho bodu ... message.range.second=Nastavi\u0165 rozsah: ... do ktor\u00e9ho bodu? message.setaway.away=Zabezpe\u010di\u0165, aby priese\u010dn\u00edk nesplynul s ktor\u00fdm bodom? message.setaway.close=Zabezpe\u010di\u0165, aby bol priese\u010dn\u00edk bl\u00edzko ku ktor\u00e9mu bodu? objectsedit.title=Upravi\u0165 vlastnosti point.type.square=\u0160tvor\u010dek point.type.diamond=Koso\u0161tvor\u010dek point.type.circle=Kr\u00fa\u017eok point.type.dot=Bodka color.type.normal=Norm\u00e1lna color.type.thick=Hrub\u00e1 color.type.thin=Tenk\u00e1 color.type.invisible=Nevidite\u013en\u00e1 text.point=Bod v %, % text.line=Priamka cez % a % text.segment=\u00dase\u010dka od % do % text.segment.fixed=\u00dase\u010dka od % do % s d\u013a\u017ekou % text.ray=Polpriamka od % smeruj\u00faca k % text.intersection=Priese\u010dn\u00edk % a % text.circle=Kru\u017enica so stredom % cez % text.circle.fixed=Kru\u017enica so stredom % cez % s polomerom % text.fixedcircle=Kru\u017enica so stredom % s polomerom % text.circle3=Kru\u017enica so stredom % s polomerom od % do % text.parallel=Rovnobe\u017eka prech\u00e1dzaj\u00faca cez % rovnobe\u017en\u00e1 s % text.midpoint=Stred medzi % a % text.quadric=Ku\u017ee\u013eose\u010dka cez % text.plumb=Kolmica prech\u00e1dzaj\u00faca cez % kolm\u00e1 na % text.angle=Uhol % - % - % text.angle.fixed=Uhol % - % - % s ve\u013ekos\u0165ou % text.boundedpoint=Bod na % text.expression=V\u00fdraz "%" v %, % text.area=Mnohouholn\u00edk text.fixedangle=Uhol % - % s ve\u013ekos\u0165ou % name.Point=Bod name.Intersection=Priese\u010dn\u00edk name.OtherIntersection=Priese\u010dn\u00edk name.Circle=Kru\u017enica name.Circle3=Kru\u017enica name.Segment=\u00dase\u010dka name.Ray=Polpriamka name.Line=Priamka name.TwoPointLine=Priamka dan\u00e1 dvoma bodmi name.Parallel=Rovnobe\u017eka name.Midpoint=Stred name.Quadric=Kvadratick\u00e1 krivka name.Plumb=Olovnica name.Angle=Uhol name.PointOn=BodObjektu name.Expression=V\u00fdraz name.Polygon=Mnohouholn\u00edk prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.angle==a(,,) prompt.area=A(,,) prompt.quadric=quadric(,,,,) prompt.function=function(,,,,,) name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=pl name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=p name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=poly name.short.Function=f popup.hidden=Zobrazi\u0165 skryt\u00e9 objekty popup.replay=Prehra\u0165 kon\u0161trukciu popup.empty=--- Makr\u00e1 --- replay.title=Prehra\u0165 reorder.title=Potla\u010di\u0165 objekty reorder.message=vlo\u017ei\u0165 za reorder.notfound=Objekt nebol n\u00e1jden\u00fd! reorder.warning=Toto sa ned\u00e1 urobi\u0165! setgrid.title=\u0160\u00edrka mrie\u017eky setgrid.prompt=Zadajte nov\u00fa \u0161\u00edrku mrie\u017eky setgrid.set=Nastavi\u0165 definemacro.title=Definova\u0165 makro definemacro.name=Meno definemacro.comment=Koment\u00e1r k makru definemacro.noparams=Je potrebn\u00e9 zada\u0165 parametre makra! definemacro.nomacro=Nejestvuje \u017eiadne makro, ktor\u00e9 by sa dalo spusti\u0165! definemacro.targetsonly=Skry\u0165 kon\u0161trukciu definemacro.invisible=Skry\u0165 \u00faplne definemacro.promptfor=V\u00fdzva pre macro.replace.title=Nahradenie makra macro.replace=Nahradi\u0165 makro: macro.replace.all=V\u0161etky macro.usage=Zl\u00e9 pou\u017eitie makra (vi\u010f dobr\u00e9 rady)! macro.prompt.title=V\u00fdzva pre parameter macro.prompt.prompt=Vlo\u017ete hodnotu parametra macro.prompt.illegal=Zak\u00e1zan\u00e1 hodnota! digits.title=Nastavi\u0165 \u010d\u00edslice digits.edit=Upravi\u0165 digits.lengths=Zobrazi\u0165 digits.angles=Uhly editrun.title=Upravi\u0165 popisn\u00fa kon\u0161trukciu editrun.run=Ulo\u017ei\u0165 a spusti\u0165 editrun.load=\u010eal\u0161\u00ed popis sure.title=Ste si ist\u00fd? sure.macros=Zmaza\u0165 v\u0161etky pou\u017e\u00edvate\u013esk\u00e9 makr\u00e1? sure.delete=Zabudn\u00fa\u0165 na teraj\u0161ie zmeny? close.title=Koniec close.prompt=Naozaj si prajete zavrie\u0165 program? file.exists.title=Tak\u00fd s\u00fabor existuje file.exists.overwrite=Tak\u00fd s\u00fabor existuje! M\u00e1m ho prep\u00edsa\u0165? exception.nparams=Nespr\u00e1vny po\u010det parametrov! exception.notfound=Objekt nebol n\u00e1jden\u00fd, alebo bol definovan\u00fd po v\u00fdraze! exception.type=NEspr\u00e1vny typ objektu! exception.expression=Nespr\u00e1vny v\u00fdraz! exception.canfix=Objekt nemo\u017eno fixova\u0165! exception.fix=Nespr\u00e1vna hodnota! exception.novalue=Nespr\u00e1vna hodnota! exception.elementary=Nespr\u00e1vny prvok vo v\u00fdraze! exception.bracket=Z\u00e1tvorka nebola uzavret\u00e1! exception.quotes=\u00davodzovky neboli ukon\u010den\u00e9! exception.dot=Dve bodky v \u010d\u00edsle! exception.nodigit=V \u010d\u00edsle nebola n\u00e1jden\u00e1 \u017eiadna \u010d\u00edslica! exception.function=Nezn\u00e1ma funkcia! exception.parameter=Nespr\u00e1vny parameter funkcie! exception.macro=Nespr\u00e1vny parameter makra! exception.name=Potrebujem meno! exception.job=Nespr\u00e1vne parametre \u00falohy! exception.track=Nespr\u00e1vne parametre stopy! exception.animate=Nespr\u00e1vne parametre anim\u00e1cie! exception.boolean=Pravdivostn\u00e1 hodnota mus\u00ed by\u0165 bu\u010f pravda alebo nepravda! exception.value=Nespr\u00e1vna hodnota! exception.color=Nespr\u00e1vna farba! exception.colortype=Nespr\u00e1vna hr\u00fabka! exception.type=Nespr\u00e1vny tvar bodu! exception.macroparameter=Nespr\u00e1vny parameter makra! exception.macrotarget=Nespr\u00e1vny cie\u013e makra! exception.prompt=Nespr\u00e1vny objekt v\u00fdzvy! exception.prompt.parameter=Objekt v\u00fdzvy nem\u00f4\u017ee by\u0165 parameter! exception.parameters=Nespr\u00e1vny parameter! exception.brackets=Nespr\u00e1vne z\u00e1tvorky! exception.double=Meno nie je jedine\u010dn\u00e9! error.setaway=Tento objekt nie je definovan\u00fd pred priese\u010dn\u00edkom! error.objecttracker.depends=Bod je viazan\u00fd na in\u00fd objekt! constructiondisplay.title=Kon\u0161trukcia function.hide=Skry\u0165 function.hide.short=skry\u0165 function.rename=Meno function.rename.short=meno function.value=Hodnota function.value.short=hodnota function.window=Okno function.window.short=W function.color=Farba function.color.short=far function.thickness=Hr\u00fabka function.thickness.short=hr function.type=Typ function.type.short=typ function.partial=\u010ciasto\u010dn\u00e9 function.partial.short=part function.fill=Vyplni\u0165 function.fill.short=vypl function.back=Pozadie function.back.short=pozad function.acute=Ostr\u00fd function.acute.short=ostr\u00fd function.obtuse=Tup\u00fd function.obtuse.short=tup\u00fd function.solid=Pln\u00e1 function.solid.short=pln\u00e1 function restrict=Ombedzi\u0165 function restrict.short=obmedzi\u0165 expression.value=Hodnota configure.title=Nastavi\u0165 prehliada\u010d str\u00e1nok configure.prompt=Zadajte pr\u00edkaz pre spustenie prehliada\u010da # New Resources: background.error=Nebolo mo\u017en\u00e9 na\u010d\u00edta\u0165 obr\u00e1zok (GIF alebo JPG!). menu.background=Pozadie menu.background.grab=Teraj\u0161ie ako pozadie menu.background.clear=Vymaza\u0165 pozadie menu.background.load=Na\u010d\u00edta\u0165 obr\u00e1zok do pozadia ... menu.background.usesize=Zmeni\u0165 rozmery na ve\u013ekos\u0165 obr\u00e1zka menu.background.tile=Nastavi\u0165 dl\u00e1\u017edice menu.background.center=Nastavi\u0165 pozadie na stred iconhelp.grab=Nastavi\u0165 alebo vymaza\u0165 pozadie filedialog.backgroundload=Na\u010d\u00edta\u0165 pozadie filedialog.backgroundload.action=Na\u010d\u00edta\u0165 # New Resources in Version 2.14 menu.file.compress=V\u017edy ulo\u017ei\u0165 komprimovan\u00e9 menu.file.savesvg=Ulo\u017ei\u0165 obr\u00e1zok (ako SVG) ... # Version 2.15 loading=Na\u010d\u00edtavam, pros\u00edm po\u010dkajte! # Version 2.18 and 2.19 menu.settings.font.default=Predvolen\u00fd typ p\u00edsma menu.settings.font.bold=Hrub\u00e9 p\u00edsmo menu.settings.font.large=Ve\u013ek\u00e9 p\u00edsmo menu.file.saveeps=Ulo\u017ei\u0165 obr\u00e1zok (ako EPS) ... menu.fonts=Typ p\u00edsma # Version 2.20 bmpscaler.title=Re\u0161k\u00e1lova\u0165 bitmapov\u00fd obr\u00e1zok bmpscaler.width=\u0160\u00edrka bmpscaler.height=V\u00fd\u0161ka bmpscaler.scale=Koeficient (stla\u010dte Return) bmpscaler.illegal=Nespr\u00e1vna hodnota # Version 2.21 renamemacro.title=Premenova\u0165 makro renamemacro.name=Nov\u00e9 meno makra menu.special.renamemacro=Premenova\u0165 makro ... # Version 2.23 savequestion.title=Ulo\u017ei\u0165 kon\u0161trukciu savequestion.qsave=Ulo\u017ei\u0165 zmeny? # Version 2.25 exception.printsize=Na t\u00fato kon\u0161trukciu je str\u00e1nka pr\u00edli\u0161 mal\u00e1! iconhelp.nohelp=Pomoc nie je k dispoz\u00edcii iconhelp.type?=Typ bodu iconhelp.thickness?=Hr\u00fabka iconhelp.color?=Farba iconhelp.filled=Vyplnen\u00fd objekt iconhelp.isback=Vykresli\u0165 v pozad\u00ed iconhelp.inverse=Odraz uhla iconhelp.angle?=Ve\u013ekos\u0165 # Version 2.28 message.objecttracker.stop=Automatick\u00e1 stopa: Zastav\u00edte kliknut\u00edm (shift \u0161\u00edpka v\u013eavo/vpravo pre nastavenie r\u00fdchlosti)! # Version 2.31 menu.settings.indicate=Zobrazi\u0165 dopredu vytv\u00e1ran\u00e9 objekty menu.options.other=Nastavenia menu.help.welcome=\u010co je nov\u00e9 v tejto verzii iconhelp.twolines=Ikony v dvoch riadkoch iconhelp.qintersection=Op\u00fdta\u0165 sa na priese\u010dn\u00edky iconhelp.qchoice=Zobrazi\u0165 dialo\u00f3g pre v\u00fdber objektu iconhelp.qpointon=Op\u00fdta\u0165 sa, \u010di vytvori\u0165 bod na objekte iconhelp.noindicate=Neozna\u010dova\u0165 objekty pod my\u0161ou # Version 2.33 menu.file.new=Nov\u00e1 kon\u0161trukcia (Ctrl-n) # Version 2.34 edit.text.title=Textov\u00e9 nastavenia edit.text.settings=\u010eal\u0161ie nastavenia menu.settings.filedialog=Syst\u00e9mov\u00fd dial\u00f3g pre nahradenie # Version 2.35 menu.settings.bitmapbackground=V bitmapov\u00fdch obr\u00e1zkoch pou\u017ei\u0165 farbu pozadia # Version 2.36 menu.file.savegraphics=Ulo\u017ei\u0165 obr\u00e1zok ako ... bmpscaler.title=Zmeni\u0165 ve\u013ekos\u0165 obr\u00e1zku # Version 2.37 menu.file.savepdf=Ulo\u017ei\u0165 obr\u00e1zok (ako PDF) iconhelp.chord=Zobrazi\u0165 ako \u010das\u0165 # Version 2.39 message.setfixedangle.first=Nastavi\u0165 fixn\u00fd uhol: Bod na prvom ramene? message.setfixedangle.second=Nastavi\u0165 fixn\u00fd uhol: Vrchol? message.setfixedangle.third=Nastavi\u0165 fixn\u00fd uhol: Tret\u00ed bod? edit.fixedangle.set=Nastavi\u0165 ve\u013ekos\u0165 ... message.setfixedcircle.first=Nastavi\u0165 fixn\u00fa kru\u017enicu: Prv\u00fd bod? message.setfixedcircle.second=Nastavi\u0165 fixn\u00fa kru\u017enicu: Druh\u00fd bod? edit.fixedcircle.set=Nastavi\u0165 ve\u013ekos\u0165 ... # Version 2.41 name.short.Track=Tr text.track=Stopa % ke\u010f sa % pohybuje po % trackquestion.keep=Ponecha\u0165 stopu v kon\u0161trukcii? trackquestion.title=Ponecha\u0165 stopu menu.options.track=Ponecha\u0165 stopu (Shift-Enter) iconhelp.indicate=Zobrazova\u0165 dopredu v\u00fdsledky kon\u0161trukcie iconhelp.nohelp=Pomoc nie je k dispoz\u00edcii! # Version 2.42 objects.draw=Ma\u013eovanie my\u0161ou menu.options.cleardraw=Vymaza\u0165 nama\u013eovan\u00e9 (Esc) iconhelp.draw=Ma\u013eovanie my\u0161ou message.draw=Ma\u013eova\u0165 my\u0161ou (ESC zma\u017ee nama\u013eovan\u00e9) shortcuts.draw=; # Version 2.43 message.rename=Premenova\u0165 na A,B,C,...: Vyberte objekty! iconhelp.rename=Premenova\u0165 na A,B,C,... objects.rename=Premenova\u0165 na A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Nezobrazova\u0165 druh\u00e9 rameno uhla # Version 2.45 menu.settings.smartboard=Inteligentn\u00fd m\u00f3d shortcuts.zoom=% objects.zoom=Pribl\u00ed\u017ei\u0165/oddiali\u0165 my\u0161ou message.zoom=\u0164ahajte stred, alebo pribl\u00ed\u017ete/vzdia\u013ete bod poh\u013eadu # Version 2.46 menu.special.restricticons=Obmedzen\u00fd s\u00fabor ikon # Version 2.47 menu.settings.indicate.simple=Vyzna\u010dova\u0165 iba body menu.settings.beginner=M\u00f3d pre za\u010diato\u010dn\u00edkov question.again=V\u017edy sa op\u00fdta\u0165 t\u00fato ot\u00e1zku. # Version 2.49 definemacro.parameters=V\u00fdzva(y) pre parameter(re) ("=meno" opravy) # Version 2.53 menu.actions.angles=Uhly menu.actions.circles=Kru\u017enice menu.actions.lines=Priamky a ich \u010dasti menu.actions.points=Body # Version 3.00 info.title=Kontextov\u00e1 pomoc info.related=S\u00favisiace t\u00e9my info.notfound=T\u00e9ma nebola n\u00e1jden\u00e1! info.noresults=Re\u0165azec sa nepodarilo n\u00e1js\u0165! info.searchresults=- V\u00fdsledky vyh\u013ead\u00e1vania - info.select=- V\u00fdber - info.search=Vyh\u013ead\u00e1va\u0165 info.back=Sp\u00e4\u0165 info.start=\u0160tart iconhelp.info=Kontextov\u00e1 pomoc menu.help.info=Kontextov\u00e1 pomoc myfiledialog.homedir=S\u00fabory CaR myfiledialog.windowshome=My Documents myfiledialog.mkdir=Make Directory myfiledialog.back=Sp\u00e4\u0165 menu.file.alwaysclearmacros=Vymaza\u0165 makr\u00e1 pred na\u010d\u00edtan\u00edm about.language=Jazyk bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Z\u00e1lohy # Version 3.02 menu.options.hideduplicates=Skry\u0165 duplik\u00e1ty # Version 3.03 menu.options.function=Vytvori\u0165 funkciu text.function=Funkcia ( % , % ) function.varmin=Od function.varmax=Do function.dvar=Krok function.var=Premenn\u00e1 function.y=V\u00fdraz pre Y iconhelp.function=Vytvori\u0165 funkciu menu.options.editlast=Upravi\u0165 posledn\u00fd objekt iconhelp.control.edit=Upravi\u0165 posledn\u00fd objekt iconhelp.control.hide=Skry\u0165 duplik\u00e1ty edit.function.title=Funkcia alebo krivka iconhelp.control.runmacro=Spusti\u0165 znovu naposledy spusten\u00e9 makro # Version 3.05 point.type.cross=Kr\u00ed\u017eik point.type.dcross=Uhloprie\u010dny kr\u00ed\u017eik shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Jednotka menu.special.break=Body preru\u0161enia menu.bp.setbreak=Nastavi\u0165 bod preru\u0161enia menu.bp.clearbreak=Zmaza\u0165 bod preru\u0161enia menu.bp.sethidingbreak=Nastavi\u0165 bod preru\u0161enia pre ukrytie menu.bp.animatebreak=Animova\u0165 body preru\u0161enia iconhelp.animatebreak=Animova\u0165 body preru\u0161enia message.animatebreak=animova\u0165 body preru\u0161enia: zastav\u00edte kliknut\u00edm (shift - \u0161\u00edpka do\u013eava/doprava pre zmenu r\u00fdchlosti)! menu.special.exporttemplate=Export do HTML so \u0161abl\u00f3nami templateload.open=Na\u010d\u00edta\u0165 \u0161abl\u00f3nu templateload.open.action=Otvori\u0165 menu.settings.doubleclick=Dvojklikn\u00fa\u0165 pre makr\u00e1 export.codebase=Codebase # Version 3.12 edit.equation=Equation # Version 3.23 menu.settings.squarepoints=Body vykres\u013eova\u0165 v\u017edy ako \u0161tvor\u010deky # Version 3.37 menu.options.export=Nastavenia exportovania obr\u00e1zkov menu.settings.minwidth=Minim\u00e1lna \u0161\u00edrka \u010diary je 1 menu.settings.minpointsize=Re\u0161pektova\u0165 minim\u00e1lnu ve\u013ekos\u0165 bodu menu.settings.minfontsize=Re\u0161pektova\u0165 minim\u00e1lnu ve\u013ekos\u0165 p\u00edsma menu.options.minpointsize=Minim\u00e1lna ve\u013ekos\u0165 bodu menu.options.minfontsize=Minim\u00e1lna ve\u013ekos\u0165 p\u00edsma # Version 3.38 menu.settings.scalepdf=\u0160k\u00e1lova\u0165 PDF a EPS v\u00fdstup 1:1 # Version 3.41 menu.file.clip=Vybra\u0165 v\u00fdrez pre grafick\u00fd v\u00fdstup ... clip.title=Nastavi\u0165 v\u00fdrez clip.width=\u0160\u00edrka clip.height=V\u00fd\u0161ka clip.screen=Nepou\u017ei\u0165 v\u00fdrez # Version 3.44 iconhelp.large=Pou\u017ei\u0165 ve\u013ek\u00fa ve\u013ekos\u0165 p\u00edsma iconhelp.bold=Pou\u017ei\u0165 hrub\u00e9 p\u00edsmo menu.options.largefont=Ve\u013ek\u00e1 ve\u013ekos\u0165 p\u00edsma menu.options.boldfont=Hrub\u00e9 p\u00edsmo warning.previewframe=R\u00e1m v\u00e4\u010d\u0161\u00ed ako okno! message.move.select=Posun\u00fa\u0165: Vyberte bod (shift: viac bodov, ctrl: zobrazova\u0165 star\u00fa polohu)! # Version 3.46 iconbar.showseparators=Zobrazi\u0165 odde\u013eova\u010de # Version 3.48 menu.options.printscaler=Nastavi\u0165 ve\u013ekos\u0165 exportu ... menu.options.exportsettings=\u0160peci\u00e1lne nastavenia exportu ... printscaler.title=Nastavi\u0165 ve\u013ekos\u0165 exportu printscaler.width=\u0160\u00edrka (v cm) printscaler.height=V\u00fd\u0161ka (v cm) printscaler.dpi=Rozl\u00ed\u0161enie (v dpi, predvolen\u00e1 hodnota 300) printscaler.linewidth=\u0160\u00edrka \u010diary (v cm, predvolen\u00e1 hodnota 0.02) printscaler.pointsize=Ve\u013ekos\u0165 bodu (v cm, predvolen\u00e1 hodnota 0.07) printscaler.textsize=Ve\u013ekos\u0165 p\u00edsma (v cm, predvolen\u00e1 hodnota 0.3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=\u0160\u00edrka (v pixeloch) printscaler.h=V\u00fd\u0161ka (v pixeloch) printscaler.scale=Zv\u00e4\u010d\u0161enie (relat\u00edvne vo\u010di obrazovke) printscaler.middle=Vyreza\u0165 z obrazovky printscaler.sizes=Pou\u017ei\u0165 hodnoty menu.file.savepng=Ulo\u017ei\u0165 obr\u00e1zok ako PNG warning.preview=N\u00e1h\u013ead nebude plne pracova\u0165 v Jave 1.1 iconedit.showseparators=Zobrazi\u0165 odde\u013eova\u010de printscaler.aspect=Rovnak\u00e1 mierka pre zvisl\u00fd a vodorovn\u00fd smer printscaler.presets=Prednastavenia printscaler.preset=Vyberte si printscaler.preset.300dpi=Presne \u0161k\u00e1lovan\u00e9 s 300 DPI printscaler.preset.300dpi6=\u0160\u00edrka 6 cm s 300 DPI printscaler.preset.300dpi16=\u0160\u00edrka 16 cm s 300 DPI printscaler.preset.window=Ve\u013ekos\u0165 okna printscaler.preset.clip50=V\u00fdrez 50% ve\u013ekosti okna message.saving=Pros\u00edm po\u010dkajte! menu.options.printscalepreview=N\u00e1h\u013ead exportu (Ctrl-F3) date=Build # Version 3.51 help=Pomoc # Version 3.61 editconditionals.title=Upravi\u0165 podmienky editconditionals.hidden=Skryt\u00e9 editconditionals.superhidden=\u00daplne skryt\u00e9 editconditionals.visible=Norm\u00e1lne editconditionals.showname=Zobrazi\u0165 meno editconditionals.showvalue=Zobrazi\u0165 hodnotu editconditionals.background=Pozadie editconditionals.solid=Nie prieh\u013eadn\u00e9 exception.superfluous=Zbyto\u010dn\u00fd text vo v\u00fdraze # Version 3.63 select.comment.title=Koment\u00e1r makra # Version 3.68 edit.area.area=Plocha # Version 3.73 myfiledialog.oldfiles=Star\u00e9 s\u00fabory # Version 3.74 iconhelp.load=Na\u010d\u00edta\u0165 kon\u0161trukciu (Ctrl-o) iconhelp.save=Ulo\u017ei\u0165 kon\u0161trukciu (Ctrl-s) iconhelp.new=Nov\u00e1 kon\u0161trukcia (Ctrl-n) # Version 3.81 warning.loadbackground=Chyba pri na\u010d\u00edtavan\u00ed pozadia # Version 3.9 function.x=V\u00fdraz pre X (nechajte pr\u00e1zdne v pr\u00edpade funkcie) # Version 3.91 constructiondisplay.select=Vybra\u0165 constructiondisplay.all=V\u0161etky objekty constructiondisplay.visible=Vidite\u013en\u00e9 objekty constructiondisplay.points=Body constructiondisplay.lines=Priamky a ich \u010dasti constructiondisplay.circles=Kru\u017enice constructiondisplay.angles=Uhly constructiondisplay.other=\u010eal\u0161ie objekty menu.file.copypng=Skop\u00edrova\u0165 do schr\u00e1nky (clipboardu) exception.clipboardcopy=Kop\u00edrovanie zlyhalo! menu.options.finegrid=Iba osi # Vesion 3.93 edit.function.center=Nastavi\u0165 stred edit.function.free=Uvo\u013eni\u0165 stred message.setcenter=Vyberte polohu stredu! # Vesion 3.94 message.edit=Upravi\u0165: Objekt (shift: viac objektov naraz, ctrl: podmienky)? # Version 3.97 error.image=S\u00fabor s obr\u00e1zkom nie je v tom istom prie\u010dinku ako s\u00fabor kon\u0161trukcie? filedialog.imageload=Na\u010d\u00edta\u0165 obr\u00e1zok filedialog.imageload.action=Na\u010d\u00edta\u0165 prompt.image=obr\u00e1zok(,,,) objects.image=Obr\u00e1zok shortcuts.image=_ # Version 3.98 exception.depends=Objekt % je z\u00e1visl\u00fd na tomto objekte object. error.depends=Objekt % je z\u00e1visl\u00fd na tomto objekte object. constructiondisplay.sorted=Usporiadan\u00e9 pod\u013ea kon\u0161truk\u010dn\u00e9ho postupu # Version 3.99 edit.alias=Druh\u00e9 meno constructiondisplay.expressions=V\u00fdrazy # Version 4.00 iconhelp.image=Na\u010d\u00edta\u0165 obr\u00e1zok (_) message.image=Bod ukotvenia obr\u00e1zku % message.image.last=Bod ukotvenia posledn\u00e9ho obr\u00e1zku (alebo vybra\u0165 ozna\u010den\u00fd bod) editconditionals.z=Hodnota Z-Buffera # Version 4.01 name.FixedAngle=Fixn\u00fd uhol # Version 4.04 menu.moresettings=Nastavenia menu.settings.language=Nastavi\u0165 jazyk language.title=Nastavi\u0165 jazyk language.prompt=Nastavenie jazyka sa prejav\u00ed pri \u010fal\u0161om spusten\u00ed programu # Version 4.05 constructiondisplay.invalid=Chybn\u00e9 objekty # Version 4.08 menu.settings.constructiondisplay=Trval\u00e9 zobrazenie kon\u0161trukcie (F11) # Version 4.09 constructiondisplay.editconditions=Upravi\u0165 podmienky constructiondisplay.delete=Zmaza\u0165 vyzna\u010den\u00e9 objekty constructiondisplay.hide=Skry\u0165 alebo uk\u00e1za\u0165 constructiondisplay.superhide=Super ukrytie # Version 4.2 edit.expression.slider=Zobrazi\u0165 ako posuvn\u00edk menu.grid.options=Mo\u017enosti mrie\u017eky menu.options.leftsnap=Prychyt\u00e1va\u0165 k mrie\u017eke pri \u0165ahan\u00ed my\u0161ou so stla\u010den\u00fdm \u013eav\u00fdm tla\u010d\u00edtkom menu.settings.boundingbox=Vytvori\u0165 (bb) s\u00fabor s ohrani\u010duj\u00facim r\u00e1mcom # Version 4.3 latexsettings.title=Nastavi\u0165 export do LaTeXu latexsettings.boundingbox=Vytvori\u0165 (bb) s\u00fabor s ohrani\u010duj\u00facim r\u00e1mcom latexsettings.latexinput=Vytvori\u0165 LaTeX-ovsk\u00fd idx-s\u00fabor latexsettings.doubledollar=LaTeX rob\u00ed $$...$$ latexsettings.dollar=LaTeX rob\u00ed $...$ latexsettings.nodollar=LaTeX rob\u00ed v\u0161etky \u010fal\u0161ie re\u0165azce latexsettings.fullpath=Pou\u017ei\u0165 cestu k s\u00faborom printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=12 cm \u0161\u00edrka s 300 DPI printscaler.latex=Ulo\u017ei\u0165 pre LaTeX menu.background.usewidth=Prisp\u00f4sobi\u0165 len v\u00fd\u0161ku # Version 4.4 menu.options.restricted=Obmedzi\u0165 priese\u010dn\u00edky menu.options.sizes=Nastavi\u0165 ve\u013ekosti ... sizesdialog.title=Ve\u013ekosti minlinesize.prompt=Minim\u00e1lna \u0161\u00edrka \u010diary (predvolen\u00e1: 1) minpointsize.prompt=Minim\u00e1lna ve\u013ekos\u0165 bodu (predvolen\u00e1: 3) minfontsize.prompt=Minim\u00e1lna ve\u013ekos\u0165 p\u00edsma (predvolen\u00e1: 12) arrowsize.prompt=Ve\u013ekos\u0165 \u0161\u00edpky (predvolen\u00e1: 10) selectionsize.prompt=Ve\u013ekos\u0165 v\u00fdberu (predvolen\u00e1: 1.5) warning.loadmacros=Chyba pri na\u010d\u00edtavan\u00ed makra! warning.macrodefinition=% sa pou\u017e\u00edva, ale nie je v makre! edit.circle.bounds=Zobrazi\u0165 ako obl\u00fak edit.circle.range=Nastavi\u0165 obl\u00fak ... # Version 4.5 edit.track.dmin=Minim\u00e1lny krok (predvolen\u00fd: 0.001) # Version 4.6 menu.settings.smallicons=Pou\u017ei\u0165 mal\u00e9 ikony menu.settings.oldicons=Pou\u017ei\u0165 star\u00e9 ikony # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof=Stopa % ke\u010f sa % men\u00ed # Version 5 # Fix error.image edit.discrete=Diskr\u00e9tna error.fixedsegment=Nedok\u00e1\u017eem fixova\u0165 t\u00fato \u00fase\u010dku! export.zoom=Pribli\u017eova\u0165/vz\u010fa\u013eova\u0165 my\u0161ou export.popup=Kontektov\u00e9 menu # Version 5.1 edit.intersection.alternate=Mo\u017eno strieda\u0165 export.restrictedmove=Obmedzi\u0165 pohyby ./src/rene/zirkel/docs/ZirkelProperties_ko.properties0000770000175000017500000014604410613653350022060 0ustar yvesyveslanguage=ko_ about.title=\uc774 \ud504\ub85c\uadf8\ub7a8\uc5d0 \ub300\ud558\uc5ec about.name=School Geometry about.programmed=\ub9cc\ub4e0\uc774 title=\ud559\uad50 \uae30\ud558\ud559(School Geometry) close=\ub2eb\uae30 ok=\ud655\uc778 cancel=\ucde8\uc18c done=\ucc38 \uc798\ud588\uc2b5\ub2c8\ub2e4! message=\uc54c\ub9bc yes=\uc608 no=\uc544\ub2c8\uc624 abort=\uc911\uc9c0 true=\ucc38 false=\uac70\uc9d3 warning.nojob=\uc774\uac83\uc740 \uacfc\uc81c \ud30c\uc77c\uc774 \uc544\ub2d9\ub2c8\ub2e4! warning.print=\uc778\uc1c4 \uc2e4\ud328! warning.reset=\uc774 \uc635\uc158\uc740 \ub2e4\uc74c \uc2e4\ud589\uc2dc \uc801\uc6a9\ub429\ub2c8\ub2e4. question.title=\uc9c8\ubb38 question.intersection=\uad50\uc810\uc744 \ub9cc\ub4dc\uc2dc\uaca0\uc2b5\ub2c8\uae4c? question.pointon=\uc774 \uac1c\uccb4 \uc704\uc5d0 \uc810\uc744 \ub9cc\ub4dc\uc2dc\uaca0\uc2b5\ub2c8\uae4c? colors.black=\uac80\uc815 colors.blue=\ud30c\ub791 colors.green=\ub179\uc0c9 colors.brown=\uac08\uc0c9 colors.cyan=\uccad\ub85d colors.red=\ube68\uac15 objects.point=\uc810 objects.segment=\uc120\ubd84 objects.line=\uc9c1\uc120 objects.ray=\ubc18\uc9c1\uc120 objects.circle=\uc6d0 objects.intersection=\uad50\uc810 objects.move=\uc810 \uc6c0\uc9c1\uc774\uae30 objects.hide=\uac1c\uccb4 \uc228\uae30\uae30 objects.edit=\uc810 \ud3b8\uc9d1 objects.tracker=\uc120\ubd84\uc774\ub098 \uc810\uc758 \uc790\ucde8 objects.objecttracker=\uac1c\uccb4 \uc704\uc758 \uc810\uc774\ub098 \uc120\ubd84\uc758 \uc790\ucde8 objects.parallel=\ud3c9\ud589\uc120 objects.plumb=\uc218\uc9c1\uc120 objects.circle3=\uc138 \uc810\uc73c\ub85c \ub9cc\ub4dc\ub294 \uc6d0 objects.midpoint=\uc911\uc810 objects.quadric=\uc6d0\ubfd4\uace1\uc120 objects.angle=\uac01 objects.boundedpoint=\uac1c\uccb4 \uc704\uc758 \uc810 objects.parameter=\ub9e4\ud06c\ub85c \uc2dc\uc791\uc810 \uc124\uc815 objects.targets=\ub9e4\ud06c\ub85c \uacb0\uacfc\ubb3c \uc124\uc815 objects.definejob=\uacfc\uc81c \uc815\uc758\ud558\uae30 objects.runmacro=\ub9e4\ud06c\ub85c \uc2e4\ud589\ud558\uae30 objects.delete=\uac1c\uccb4 \ubc0f \ud558\uc704 \uac1c\uccb4 \uc9c0\uc6b0\uae30 objects.reorder=\uac1c\uccb4\uc758 \uc21c\uc11c \ubc14\uafb8\uae30 objects.animate=\uc560\ub2c8\uba54\uc774\uc158 objects.expression=\uacc4\uc0b0\uc2dd objects.area=\ub2e4\uac01\ud615 objects.text=\uae00 objects.fixedcircle=\ubc18\uc9c0\ub984\uc774 \uc8fc\uc5b4\uc9c4 \uc6d0 objects.fixedangle=\uace0\uc815\ub41c \uac01 objects.fixedsegment=\uae38\uc774\uac00 \uc8fc\uc5b4\uc9c4 \uc120\ubd84 iconhelp.point=\uc810 (p) iconhelp.segment=\uc120\ubd84 (s) iconhelp.line=\uc9c1\uc120 (g) iconhelp.ray=\ubc18\uc9c1\uc120 (r) iconhelp.circle=\uc6d0 (c) iconhelp.intersection=\uad50\uc810 (i) iconhelp.move=\uc810 \uc6c0\uc9c1\uc774\uae30 (m)+Ctrl (Points): \uc774\uc804 \uc0c1\ud0dc \ubcf4\uc774\uae30+Ctrl: \uac12\uc774 \uace0\uc815\ub41c \uac1c\uccb4 \uc6c0\uc9c1\uc774\uae30 iconhelp.hide=\uac1c\uccb4 \uc228\uae30\uae30 (h)+Shift: \uc644\uc804\ud788 \uac10\ucd94\uae30+Ctrl: \uc911\ubcf5\ub41c \uac1c\uccb4 \uac10\ucd94\uae30 iconhelp.edit=\uac1c\uccb4 \ud3b8\uc9d1 (e)+Shift: \uc5ec\ub7ec \uac1c\uccb4\ub97c \ub3d9\uc2dc\uc5d0 \ud3b8\uc9d1+Ctrl: \uc870\uac74 \ud3b8\uc9d1 iconhelp.tracker=\uc810\uc774\ub098 \uc9c1\uc120\uc758 \uc790\ucde8 (t) iconhelp.objecttracker=\uc810\uc774\ub098 \uc9c1\uc120\uc758 \uc790\ub3d9 \uc790\ucde8 (o) iconhelp.parallel=\ud3c9\ud589\uc120 (1) iconhelp.plumb=\uc218\uc9c1\uc120 (2) iconhelp.circle3=\uc138 \uc810\uc73c\ub85c \ub9cc\ub4dc\ub294 \uc6d0 (3) iconhelp.midpoint=\uc911\uc810 (4) iconhelp.quadric= \ub2e4\uc12f \uc810\uc744 \uc9c0\ub098\ub294 \uc6d0\ubfd4 \uace1\uc120 ($) iconhelp.angle=\uac01 (a) iconhelp.boundedpoint=\uac1c\uccb4 \uc704\uc5d0 \uc810 \ub9cc\ub4e4\uae30 (5)+Shift: \uac1c\uccb4 \uc704\ub85c \uc81c\ud55c\ud558\uc9c0 \uc54a\uae30 iconhelp.hidden=\uc228\uaca8\uc9c4 \uac1c\uccb4\ub97c \ubcf4\uc774\uac70\ub098 \uc228\uae30\uae30 (F9) iconhelp.color=\uae30\ubcf8\uc0c9 (Ctrl-1,2,3,4) iconhelp.type=\uae30\ubcf8\uc810 \ubaa8\uc591 (Ctrl-5,6,7,8,9,0) iconhelp.type0=\uae30\ubcf8\uc810 \ubaa8\uc591 iconhelp.thickness=\uac1c\uccb4\uc758 \ub450\uaed8 (Alt-5,6,7) iconhelp.back=\uc774\uc804 \uac1c\uccb4 \uc9c0\uc6b0\uae30 (<-) iconhelp.thickness0=\uac1c\uccb4\uc758 \uae30\ubcf8 \ub450\uaed8 iconhelp.partial=\uc6d0\uc744 \ubd80\ubd84 \uc6d0\uc73c\ub85c (Ctrl-F9) iconhelp.plines=\uc9c1\uc120\uc744 \ubd80\ubd84 \uc9c1\uc120\uc73c\ub85c (Ctrl-F10) iconhelp.arrow=\uc120\ubd84\uc744 \ubca1\ud130\ub85c (Ctrl-F11) iconhelp.showcolor=\uc120\ud0dd\ub41c \uc0c9\ub9cc \ubcf4\uc774\uae30 (Alt-1,2,3,4) iconhelp.runmacro=\ub9e4\ud06c\ub85c \uc2e4\ud589 (9)+Ctrl: \ub9c8\uc9c0\ub9c9 \ub9e4\ud06c\ub85c \uc2e4\ud589 iconhelp.macro=\ub9e4\ud06c\ub85c \uc2dc\uc791\uc810, \uacb0\uacfc\ubb3c, \uc774\ub984 \uc124\uc815 (7,8,Ctrl-5) iconhelp.expression=\uacc4\uc0b0\uc2dd (x) iconhelp.showvalue=\uac1c\uccb4\uac12 \ubcf4\uc774\uae30 (Ctrl-F7) iconhelp.showname=\uac1c\uccb4\uc758 \uc774\ub984 \ubcf4\uc774\uae30 (Ctrl-F6) iconhelp.obtuse=180\u02da \ubcf4\ub2e4 \ud070 \uac01 \ub098\ud0c0\ub0b4\uae30 (Ctrl-F12) iconhelp.solid=\ubd88\ud22c\uba85\ud558\uac8c iconhelp.longnames=\uae34 \uac1c\uccb4\uc774\ub984 \uc0ac\uc6a9\ud558\uae30 (Ctrl-F8) iconhelp.grid=\uaca9\uc790 \ubcf4\uc774\uae30 (F12) iconhelp.comment=\uc8fc\uc11d \ud3b8\uc9d1 (F10) iconhelp.defaults=\uae30\ubcf8 \uc124\uc815 iconhelp.macro0=\ub9e4\ud06c\ub85c \uc2dc\uc791\uc810, \uacb0\uacfc\ubb3c, \uc774\ub984 \uc124\uc815 iconhelp.visual=\uc544\uc774\ucf58 \ubaa8\ub4dc \uc124\uc815/\ud574\uc81c iconhelp.replay=\uc791\ub3c4\uacfc\uc815 \ub2e4\uc2dc\ubcf4\uae30 iconhelp.oneforward=\uc55e\uc73c\ub85c iconhelp.fastforward=\uc55e\uc73c\ub85c \ube60\ub974\uac8c iconhelp.allforward=\ub05d\uc73c\ub85c iconhelp.oneback=\ub4a4\ub85c iconhelp.fastback=\ub4a4\ub85c \ube60\ub974\uac8c iconhelp.allback=\ucc98\uc74c\uc73c\ub85c iconhelp.close=\ub2eb\uae30 iconhelp.area=\ub2e4\uac01\ud615 (0) iconhelp.text=\uae00\uc0c1\uc790 (b) iconhelp.fixedcircle=\ubc18\uc9c0\ub984\uc774 \uc8fc\uc5b4\uc9c4 \uc6d0 (,) iconhelp.fixedangle=\ud06c\uae30\uac00 \uace0\uc815\ub41c \uac01 (.) iconhelp.fixedsegment=\uae38\uc774\uac00 \uc8fc\uc5b4\uc9c4 \uc120\ubd84 (#) iconhelp.animate=\uc810\uc758 \uc560\ub2c8\uba54\uc774\uc158 (") iconhelp.delete=\uac1c\uccb4 \ubc0f \ud558\uc704 \uac1c\uccb4 \uc9c0\uc6b0\uae30 (Del) iconhelp.undo=\ub9c8\uc9c0\ub9c9 \uc9c0\uc6b4\uac83 \ub418\uc0b4\ub9ac\uae30 (Ctrl-z) iconhelp.nextbreak=\ub2e4\uc74c \uc911\ub2e8\uc810\uc73c\ub85c \uc774\ub3d9 iconhelp.setbreak=\uc911\ub2e8\uc810 \uc124\uc815/\ucde8\uc18c+Shift: \uc911\ub2e8\uc810 \uac10\ucd94\uae30 iconhelp.zoom=\ub9c8\uc6b0\uc2a4\ub85c \ud655\ub300 \ucd95\uc18c (%) shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.showcolor.4= shortcuts.showcolor.5= shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) menu.file=\ud30c\uc77c menu.file.clearmacros=\uc0ac\uc6a9\uc790 \uc815\uc758 \ub9e4\ud06c\ub85c \uc9c0\uc6b0\uae30 menu.file.load=\ubd88\ub7ec\uc624\uae30 ... (Ctrl-o) menu.file.loadjob=\uacfc\uc81c \ubd88\ub7ec\uc624\uae30 ... (Ctrl-j) menu.file.savejob=\uacfc\uc81c \uc800\uc7a5\ud558\uae30 ... (Ctrl-k) menu.file.save=\uc800\uc7a5\ud558\uae30 ... (Ctrl-s) menu.file.saveas=\ub2e4\ub978 \uc774\ub984\uc73c\ub85c \uc800\uc7a5 ... (Ctrl-a) menu.file.includemacros=\ubaa8\ub4e0 \ub9e4\ud06c\ub85c \ud3ec\ud568\ud558\uc5ec \ubd88\ub7ec\uc624\uae30 menu.file.exit=\ub05d\ub0b4\uae30 (Alt-F4) menu.file.print=\uc778\uc1c4 ... menu.file.print.isoscale=1:1(cm)\uc758 \ube44\uc728\ub85c \uc778\uc1c4 menu.file.savebmp=BMP \ud30c\uc77c\ub85c \uc800\uc7a5\ud558\uae30 ... menu.file.savefig=FIG \ud30c\uc77c\ub85c \uc800\uc7a5\ud558\uae30 ... menu.file.loadrun=run \ud30c\uc77c \ubd88\ub7ec\uc624\uae30 ... (Ctrl-r) menu.file.editrun=run \ud30c\uc77c \ud3b8\uc9d1\ud558\uace0 \uc800\uc7a5\ud558\uae30... (Ctrl-x) menu.actions=\ud3b8\uc9d1 menu.actions.elementary=\uae30\ubcf8 \ub3c4\uad6c menu.actions.complex=\ubcf5\ud569 \ub3c4\uad6c menu.actions.move=\uc6c0\uc9c1\uc784 \ub3c4\uad6c menu.actions.decorative=\ubd80\uac00 \uae30\ub2a5 menu.options=\uc635\uc158 menu.options.visual=\uc544\uc774\ucf58 \ubaa8\ub4dc (Ctrl-F6) menu.options.hidden=\uc228\uaca8\uc9c4 \uac1c\uccb4 \ubcf4\uc774\uae30 (F9) menu.options.comment=\uc8fc\uc11d \ud3b8\uc9d1 (F10) menu.options.constructiondisplay=\ubaa8\ub4e0 \uc791\ub3c4\uc758 \uc2a4\ud06c\ub9bd\ud2b8 \ubcf4\uae30 menu.options.grid=\uaca9\uc790 \ubcf4\uc774\uae30 (F12) menu.options.setgrid=\uaca9\uc790\ud3ed \uc124\uc815 ... menu.options.showcolor=\uc0c9 \ubcf4\uc774\uae30 menu.options.defaultcolor=\uae30\ubcf8\uc0c9 menu.options.defaultthickness=\uae30\ubcf8 \ub450\uaed8 menu.options.defaulttype=\uae30\ubcf8\uc810 \ubaa8\uc591 menu.options.all=\ubaa8\ub450 menu.options.setdigits=\uc18c\uc218\uc810 \uc124\uc815 menu.options.shownames=\uac1c\uccb4 \uc774\ub984 \ubcf4\uc774\uae30 (Ctrl-F6) menu.options.longnames=\uac1c\uccb4\uc774\ub984 \uae38\uac8c \ubcf4\uc774\uae30 (Ctrl-F8) menu.options.obtuse=180\u02da\ubcf4\ub2e4 \ud070 \uac01 \uc0ac\uc6a9\ud558\uae30(Ctrl-F12) menu.options.solid=\ubd88\ud22c\uba85\ud558\uac8c menu.options.showvalues=\uac1c\uccb4\uac12 \ubcf4\uc774\uae30 (Ctrl-F7) menu.options.partial=\ubd80\ubd84 \ud638 (Ctrl-F9) menu.options.plines=\ubd80\ubd84 \uc120 (Ctrl-F10) menu.options.arrow=\ud654\uc0b4\ud45c (Ctrl-F11) menu.options.editicons=\ub3c4\uad6c\uc0c1\uc790 \ud3b8\uc9d1 menu.options.back=\ub9c8\uc9c0\ub9c9 \uac1c\uccb4 \uc9c0\uc6b0\uae30 (<-) menu.options.undo=\ub418\uc0b4\ub9ac\uae30 (Ctrl-z) menu.zoom=\ud655\ub300/\ucd95\uc18c menu.zoom.in=\ud655\ub300 (+) menu.zoom.out=\ucd95\uc18c (-) menu.zoom.left=\uc67c\ucabd\uc73c\ub85c (Cursor-Left) menu.zoom.right=\uc624\ub978\ucabd\uc73c\ub85c (Cursor-Right) menu.zoom.up=\uc704\ub85c (Cursor-Up) menu.zoom.down=\uc544\ub798\ub85c (Cursor-Down) menu.macros=\ub9e4\ud06c\ub85c menu.special.definemacro=\ub9e4\ud06c\ub85c \uc815\uc758 (Ctrl-F5) menu.special.runmacro=\ub9e4\ud06c\ub85c \uc2e4\ud589 ... (F5) menu.special.savemacros=\ubaa8\ub4e0 \ub9e4\ud06c\ub85c \uc800\uc7a5 ... menu.special.loadmacros=\ub9e4\ud06c\ub85c \ubd88\ub7ec\uc624\uae30 ... menu.special.deletemacros=\ub9e4\ud06c\ub85c \uc9c0\uc6b0\uae30 ... menu.special=\ud2b9\ubcc4\uba54\ub274 menu.special.testjob=\uacfc\uc81c \ud655\uc778 (Ctrl-F1) menu.special.jobcomment=\uacfc\uc81c\ub97c \uc124\uba85\ud558\ub294 \uc8fc\uc11d ... (F8) menu.special.export=HTML \ud30c\uc77c \ub9cc\ub4e4\uae30... (Ctrl-e) menu.special.replay=\uc791\ub3c4\uacfc\uc815 \ub2e4\uc2dc\ubcf4\uae30 menu.help=\ub3c4\uc6c0\ub9d0 menu.help.about=\uc774 \ud504\ub85c\uadf8\ub7a8\uc740 menu.help.browser=\ub3c4\uc6c0\ub9d0\uacfc \ub370\ubaa8 menu.help.text=\uac04\ub2e8\ud55c \ub3c4\uc6c0\ub9d0 menu.help.configure=\ube0c\ub77c\uc6b0\uc800 \uc124\uc815 menu.help.help=\ub3c4\uc6c0\ub9d0 (F1) menu.help.macros=\ub9e4\ud06c\ub85c \ub3c4\uc6c0\ub9d0 menu.help.tools=\ub3c4\uad6c \ub3c4\uc6c0\ub9d0 menu.help.gui=\uc0ac\uc6a9\uc790 \ud658\uacbd menu.help.interactive=\uc11c\uc220\uc801\uc778 \uc791\ub3c4(Descriptive Constructions) menu.help.tips=\uc0ac\uc6a9\uc790 \ud301 menu.settings=\ud2b9\ubcc4\ud55c \uc124\uc815 menu.settings.fullicons=\uc544\uc774\ucf58\ubc14 \ub450 \uc904\ub85c menu.settings.utf=UTF-8 Encoding \uc0ac\uc6a9 menu.settings.autohide=\ub450\ubc88\uc9f8 \uad50\uc810 \uc228\uae30\uae30 menu.settings.iconbartop=\uc544\uc774\ucf58 \ubc14\ub97c \uc791\uc5c5\ucc3d \uc704\ucabd\uc5d0 menu.settings.showtips=\ub3c4\uad6c \ud301 \ubcf4\uc774\uae30 menu.settings.simplegraphics=\uac04\ub2e8\ud55c \uadf8\ub798\ud53d menu.settings.sure=\uac00\uc838\uc624\uac70\ub098 \ub2eb\uae30 \uc804\uc5d0 \ud655\uc778 menu.settings.pointon=\uac1c\uccb4 \uc704\uc5d0 \uc810\uc744 \uc0dd\uc131\ud560\uc9c0 \ubb3b\uae30 menu.settings.intersection=\uad50\uc810 \ub9cc\ub4e4\uae30 \uc804\uc5d0 \ubb3b\uae30 menu.settings.choice=\uac1c\uccb4\uc758 \uc120\ud0dd\ucc3d \ubcf4\uc774\uae30 menu.settings.movename=\uc6c0\uc9c1\uc774\ub294 \ub3d9\uc548 \uac12 \ubcf4\uc5ec\uc8fc\uae30 menu.settings.movefixname=\uc6c0\uc9c1\uc774\ub294 \ub3d9\uc548 \uace0\uc815\ub41c \uac12 \ubcf4\uc774\uae30 menu.settings.restricted=\ud559\uad50 \ubaa8\ub4dc menu.colors=\uc0c9 \uc9c0\uc815 colors.default=\uae30\ubcf8\uc0c9 \uc0ac\uc6a9 colors.color0=\uc0c9\uae54 1 (\uac80\uc815) colors.color1=\uc0c9\uae54 2 (\ucd08\ub85d) colors.color2=\uc0c9\uae54 3 (\ud30c\ub791) colors.color3=\uc0c9\uae54 4 (\uac08\uc0c9) colors.color4=\uc0c9\uae54 5 (\uccad\ub85d) colors.color5=\uc0c9\uae54 6 (\ube68\uac15) colors.background=\ubc30\uacbd\uc0c9 colors.select=\uc120\ud0dd\ub41c \uac1c\uccb4\uc758 \uc0c9 colors.target=\ubaa9\ud45c\ub41c \uac1c\uccb4\uc758 \uc0c9 myfiledialog.dir=\ud3f4\ub354 myfiledialog.file=\ud30c\uc77c myfiledialog.pattern=\ud30c\uc77c\ud615\uc2dd filedialog.open=\ubd88\ub7ec\uc624\uae30 filedialog.saveas=\ub2e4\ub978\uc774\ub984\uc73c\ub85c \uc800\uc7a5\ud558\uae30 filedialog.open.action=\ubd88\ub7ec\uc624\uae30 filedialog.saveas.action=\uc800\uc7a5\ud558\uae30 filedialog.htmlsave=HTML\ub85c \uc800\uc7a5\ud558\uae30 filedialog.htmlsave.action=\uc800\uc7a5\ud558\uae30 pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=\uc800\uc7a5\ud558\uae30 load=\ubd88\ub7ec\uc624\uae30 abort=\uc911\ub2e8 OK=\ud655\uc778 bound.release=\uc810 \ubb36\uae30 \ud574\uc81c bound.bind=\uc810\uc744 \uac1c\uccb4 \uc704\ub85c \ubb36\uae30 bound.error=\uad50\uc810\uc744 \ucc3e\uae30 \uc704\ud55c \uac1c\uccb4\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc74c! constructiondisplay.edit=\uac1c\uccb4 \ud3b8\uc9d1 constructiondisplay.copy=\ud074\ub9bd\ubcf4\ub4dc\ub85c \ubcf5\uc0ac edit.Title=\ud2b9\uc131 edit.name=\uc774\ub984 edit.hidden=\uac10\ucd94\uae30 edit.text=\uc124\uba85 edit.fixed=\uace0\uc815 edit.color=\uc0c9\uae54 edit.ok=\ud655\uc778 edit.cancel=\ucde8\uc18c edit.showname=\uc774\ub984 \ubcf4\uc774\uae30 edit.point.title=\uc810 \ud3b8\uc9d1 edit.point.type=\uc720\ud615 edit.point.x=X edit.point.y=Y edit.point.intersection=\uc810\uc5d0\uc11c \uba40\ub9ac edit.point.showvalue=\uc88c\ud45c \ubcf4\uc774\uae30 edit.point.colortype=\ub450\uaed8 edit.point.bound=(\ubb36\uc778)\ubc94\uc704 edit.point.away=\uba40\ub9ac edit.point.close=\uac00\uae5d\uac8c edit.point.free=\uc870\uac74\ubb34\uc2dc edit.line.title=\uc9c1\uc120, \ubc18\uc9c1\uc120, \uc120\ubd84 \ud3b8\uc9d1 edit.line.normal=\ubcf4\ud1b5 edit.line.thick=\uad75\uac8c edit.line.thin=\uac00\ub298\uac8c(\uc810\uc120) edit.line.invisible=\ub208\uc5d0 \ubcf4\uc774\uc9c0 \uc54a\ub294 edit.line.type=\uc720\ud615 edit.segment.length=\uae38\uc774 edit.segment.showvalue=\uae38\uc774 \ubcf4\uc774\uae30 edit.circle.title=\uc6d0 \ud3b8\uc9d1 edit.circle.length=\ubc18\uc9c0\ub984 edit.circle.partial=\uc77c\ubd80\ubd84 \ubcf4\uc774\uae30 edit.circle.range=\ubc94\uc704 \uc124\uc815 edit.circle.killrange=\ubc94\uc704 \uc9c0\uc6b0\uae30 edit.plumb.restricted=\uc81c\ud55c(restricted) edit.angle.title=\uac01 \ud3b8\uc9d1 edit.angle.length=\ud06c\uae30 edit.angle.displaysize=\ud45c\uc2dc\ub418\ub294 \ud06c\uae30 edit.angle.normal=\ubcf4\ud1b5 edit.angle.small=\uc791\uac8c edit.angle.large=\ud06c\uac8c edit.expression.title=\uc2dd \ud3b8\uc9d1 edit.expression=\uacc4\uc0b0\uc2dd edit.expression.prompt=\uc124\uba85 edit.area.title=\ub2e4\uac01\ud615 \ud3b8\uc9d1 edit.area.back=\ub9e8 \ub4a4\ub85c export.title=HTML \ub0b4\ubcf4\ub0b4\uae30 export.pagetitle=\ud398\uc774\uc9c0 \uc81c\ubaa9 export.width=\ud3ed export.height=\ub192\uc774 export.jar=Jar \ud30c\uc77c export.comment=\uc8fc\uc11d \uc800\uc7a5 export.file=\uc791\ub3c4 \ud30c\uc77c export.job=\uacfc\uc81c \ubcf4\uc774\uae30 export.color=\uc120\ud0dd\ub41c \uc0c9 export.backgroundcolor=\ud398\uc774\uc9c0\uc5d0 \ubc30\uacbd\uc0c9 \uc0ac\uc6a9 export.appletcolor=\uc560\ud50c\ub9bf\uc5d0 \ubc30\uacbd\uc0c9 \uc0ac\uc6a9 export.plain=\uafb8\ubc08\uc5c6\uc774 export.3D=\ud14c\ub450\ub9ac export.breaks=\uc791\ub3c4\uacfc\uc815\ubcf4\uae30(\uc911\ub2e8\uc810) export.icons=\ud14c\ub450\ub9ac\uc640 \uc544\uc774\ucf58 export.full=\ud14c\ub450\ub9ac, \uc544\uc774\ucf58, \uc0c1\ud0dc\ubc14 export.nonvisual=\ud14c\ub450\ub9ac, \uc544\uc774\ucf58, \uba85\ub839 \uc785\ub825 \uc904 export.style=\uc560\ud50c\ub9bf \uc720\ud615 export.setcolor=\ubc30\uacbd\uc0c9 \uc120\ud0dd export.savefirst=\ud30c\uc77c\uc774 \uc800\uc7a5\ub418\uc9c0 \uc54a\uc558\uc74c! export.soltext=\ud574\ub2f5 export.stylesheet=CSS \uc720\ud615 \ud30c\uc77c export.solution=\ud574\ub2f5 \ud30c\uc77c export.jumpsol=\ud574\ub2f5\uc73c\ub85c \uc774\ub3d9 export.linksol=\ud574\ub2f5\uacfc \uc5f0\uacb0 export.savesol=\ud574\ub2f5 \ud30c\uc77c \uc800\uc7a5 export.track=\uc810\uc758 \uc790\ucde8 export.digits=\uc18c\uc218\uc810 \uc800\uc7a5 export.setsize=\ucc3d\ud06c\uae30 \uac00\uc838\uc624\uae30 export.signature=\ub9cc\ub4e0\uc774 export.colors=\uc9c0\uc815\ub41c \uc0c9 \uc800\uc7a5 export.background=\uc9c0\uc815\ub41c \ubc30\uacbd \uc800\uc7a5 help.title=\ub3c4\uc6c0\ub9d0 help.error=\ub3c4\uc6c0\ub9d0 \ud30c\uc77c\uc744 \uc5f4 \uc218 \uc5c6\uc74c! help.file=schoolgeometry.txt coloreditor.title=\uc0c9\uae54 \ud3b8\uc9d1 coloreditor.red=\ube68\uac15 coloreditor.green=\ucd08\ub85d coloreditor.blue=\ud30c\ub791 coloreditor.color=\uc120\ud0dd\ub41c \uc0c9 comment.title=\uc791\ub3c4 \uc8fc\uc11d(Construction Comment) comment.set=\uc124\uc815(Set) comment.cancel=\ucde8\uc18c comment.close=\ub2eb\uae30 iconedit.title=\uc544\uc774\ucf58 \ubc14 \ud3b8\uc9d1 iconedit.twobars=\uc544\uc774\ucf58 \ubc15\uc2a4 \ub450 \uc904\ub85c jobcomment.title=\uacfc\uc81c\ub0b4\uc6a9 select.title=\uc120\ud0dd select.ok=\ud655\uc778 select.cancel=\ucde8\uc18c select.comment=\uc8fc\uc11d \ubcf4\uc774\uae30 select.all=\ubaa8\ub450 message.circle.midpoint=\uc6d0: \uc911\uc2ec? message.circle.radius=\uc6d0: \uc6d0 \uc704\uc758 \ud55c \uc810 (shift: \ubc18\uc9c0\ub984 \uace0\uc815)? message.fixedcircle.midpoint=\ubc18\uc9c0\ub984\uc774 \uc8fc\uc5b4\uc9c4 \uc6d0: \uc911\uc2ec? message.fixedcircle.radius=\ubc18\uc9c0\ub984\uc774 \uc8fc\uc5b4\uc9c4 \uc6d0: \ubc18\uc9c0\ub984? message.line.first=\uc9c1\uc120: \uccab\ubc88\uc9f8 \uc810? message.line.second=\uc9c1\uc120: \ub450\ubc88\uc9f8 \uc810? message.ray.first=\ubc18\uc9c1\uc120: \ucd9c\ubc1c\uc810? message.ray.second=\ubc18\uc9c1\uc120: \ub450\ubc88\uc9f8 \uc810? message.move.select=\uc774\ub3d9: \uac1c\uccb4\ub97c \uc120\ud0dd\ud558\uc2dc\uc624! (shift: \ucd94\uac00) message.move.move=\uc774\ub3d9: \uc810 \uc774\ub3d9? message.point=\uc810: \uc810\uc744 \ucc0d\uc73c\uc2dc\uc624! (shift: \uace0\uc815) message.segment.first=\uc120\ubd84: \uccab\ubc88\uc9f8 \uc810? message.segment.second=\uc120\ubd84: \ub450 \ubc88\uc9f8 \uc810 (shift: \uae38\uc774 \uace0\uc815)? message.fixedsegment.first=\uae38\uc774\uac00 \uace0\uc815\ub41c \uc120\ubd84: \uccab\ubc88\uc9f8 \uc810? message.fixedsegment.second=\uae38\uc774\uac00 \uace0\uc815\ub41c \uc120\ubd84: \ub450\ubc88\uc9f8 \uc810! message.intersection.first=\uad50\uc810: \uccab\ubc88\uc9f8 \uac1c\uccb4 \ub610\ub294 \uad50\uc810? message.intersection.second=\uad50\uc810: \ub450\ubc88\uc9f8 \uac1c\uccb4? message.hide=\uac10\ucd94\uae30/\ubcf4\uc774\uae30: \uac1c\uccb4 \uc120\ud0dd! message.tracker.select=\uc790\ucde8: \uc790\ucde8\ub85c \ub0a8\uae38 \uc810\uc774\ub098 \uc120 \uc120\ud0dd (shift: \ucd94\uac00)? message.tracker.selectpoint=\uc790\ucde8: \uc6c0\uc9c1\uc77c \uc810? message.tracker.move=\uc790\ucde8: \uc810\uc744 \uc6c0\uc9c1\uc774\uc2dc\uc624! message.objecttracker.select=\uc790\ub3d9\uc790\ucde8: \uc790\ucde8\ub97c \ub0a8\uae38 \uc120 \ub610\ub294 \uc810 (shift: \ucd94\uac00)? message.objecttracker.object=\uc790\ub3d9\uc790\ucde8: \uacbd\ub85c\uac00 \ub420 \uc120\uc774\ub098 \uc6d0? message.objecttracker.selectpoint=\uc790\ub3d9\uc790\ucde8: \uc6c0\uc9c1\uc77c \uc810? message.objecttracker.selectanypoint=\uc790\ub3d9\uc790\ucde8: Any other point to move? message.objecttracker.move=\uc790\ub3d9\uc790\ucde8: Move the point! message.objecttracker.start=\uc790\ub3d9\uc790\ucde8: \ud074\ub9ad\ud558\uba74 \uc6c0\uc9c1\uc784! message.parallel.first=\ud3c9\ud589\uc120: \uc120? message.parallel.second=\ud3c9\ud589\uc120: \uc810? message.plumb.first=\uc218\uc9c1\uc120: \uc120? message.plumb.second=\uc218\uc9c1\uc120: \uc810? message.circle3.first=\uc6d0: \uccab\ubc88\uc9f8 \uc810(\ubc18\uc9c0\ub984)? message.circle3.second=\uc6d0: \ub450\ubc88\uc9f8 \uc810(\ubc18\uc9c0\ub984)? message.circle3.midpoint=\uc6d0: \uc911\uc2ec? message.midpoint.first=\uc911\uc810: \uccab\ubc88\uc9f8 \uc810? message.midpoint.second=\uc911\uc810: \ub450\ubc88\uc9f8 \uc810? message.quadric=\uc6d0\ubfd4\uace1\uc120: \uc810 \ubc88\ud638 message.angle.first=\uac01: \uccab\ubc88\uc9f8 \uc810? message.angle.root=\uac01: \uaf2d\uc9c0\uc810? message.angle.second=\uac01: \uc138\ubc88\uc9f8 \uc810 (shift: \ud06c\uae30 \uace0\uc815)? message.fixedangle.first=\ud06c\uae30\uac00 \uace0\uc815\ub41c \uac01: \uccab\ubc88\uc9f8 \uc810? message.fixedangle.root=\ud06c\uae30\uac00 \uace0\uc815\ub41c \uac01: \uaf2d\uc9c0\uc810? message.fixedangle.second=\ud06c\uae30\uac00 \uace0\uc815\ub41c \uac01: \uc544\ubb34\uacf3\uc774\ub098 \ud074\ub9ad! message.label.select=Move Label: Select a label! message.label.move=Move Label: Move the label! message.boundedpoint=\uac1c\uccb4 \uc704\uc758 \uc810: \uc6d0 \ub610\ub294 \uc120 (shift: don't fix)? message.parameters=\ub9e4\ud06c\ub85c \uc2dc\uc791\uc810: \uc870\uac74\uc73c\ub85c \uc8fc\uc5b4\uc9c8 \uac1c\uccb4\ub4e4? message.targets=\ub9e4\ud06c\ub85c \uacb0\uacfc\ubb3c: \ub9cc\ub4e4 \uac1c\uccb4\ub4e4? message.savejob.first=\uacfc\uc81c\uc815\uc758: \ubcf4\uc5ec\uc904 \ub9c8\uc9c0\ub9c9 \uac1c\uccb4? message.savejob.second=\uacfc\uc81c\uc815\uc758: \ub9cc\ub4e4\uc5b4\uc57c \ud560 \uac1c\uccb4 (shift: don't check)? message.savejob.third=\uacfc\uc81c\uc815\uc758: Further objects to be displayed? message.runmacro=\ub9e4\ud06c\ub85c %: %. % - % message.runmacro.return=(SPACE chooses %) message.runmacro.fixes=(SHIFT fixes selection) message.delete=\uc9c0\uc6b0\uae30: \uac1c\uccb4 \uc120\ud0dd! message.reorder=\uc21c\uc11c\ubc14\uafb8\uae30: \uac1c\uccb4 \uc120\ud0dd! message.expression=\uacc4\uc0b0\uc2dd: \uc704\uce58 \uc120\ud0dd! message.area=\ub2e4\uac01\ud615: \uaf2d\uc9c0\uc810? message.text=\uae00\uc0c1\uc790: \uc704\uce58 \uc120\ud0dd! message.animator.point=\uc560\ub2c8\uba54\uc774\uc158: \uc6c0\uc9c1\uc77c \uc810? message.animator.segment=\uc560\ub2c8\uba54\uc774\uc158: \uc6d0 \ub610\ub294 \uc120\ubd84? message.animator.running=\uc560\ub2c8\uba54\uc774\uc158: \ud074\ub9ad!(\uc6c0\uc9c1\uc784/\uba48\ucda4) message.range.first=\ubc94\uc704 \uc124\uc815: \ud638\uc758 \uc2dc\uc791 \uc704\uce58\ub97c \uc54c\ub824\uc8fc\ub294 \uc810 message.range.second=\ubc94\uc704 \uc124\uc815: \ub05d\uc744 \uc54c\ub824\uc8fc\ub294 \uc810 message.setaway.away=\uad50\uc810\uc774 \uc5b4\ub5a4 \uc810\uacfc \uba40\uac8c? message.setaway.close=\uad50\uc810\uc774 \uc5b4\ub5a4 \uc810\uacfc \uac00\uae5d\uac8c? objectsedit.title=\ud2b9\uc131 \ud3b8\uc9d1 point.type.square=\uc0ac\uac01\ud615 point.type.diamond=\ub2e4\uc774\uc544\ubaac\ub4dc point.type.circle=\uc6d0 point.type.dot=\uc810 color.type.normal=\ubcf4\ud1b5 color.type.thick=\uad75\uac8c color.type.thin=\uac00\ub298\uac8c color.type.invisible=\ubcf4\uc774\uc9c0 \uc54a\uac8c(Invisible) text.point=\uc88c\ud45c\uac00 ( %, % )\uc778 \uc810 text.line=\ub450 \uc810 %, %\uc744 \uc9c0\ub098\ub294 \uc9c1\uc120 text.segment=\uc810 %\uc5d0\uc11c \uc810 %\uc5d0 \uadf8\uc740 \uc120\ubd84 text.segment.fixed=Line segment from % to % with length % text.ray=\uc810 %\uc5d0\uc11c \uc810 %\uc744 \uc9c0\ub098\ub294 \ubc18\uc9c1\uc120 text.intersection=\ub450 \ub3c4\ud615 %, %\uc758 \uad50\uc810 text.circle=\uc911\uc2ec\uc774 %\uc774\uace0 %\uc744 \uc9c0\ub098\ub294 \uc6d0 text.circle.fixed=Circle around % through % with radius % text.fixedcircle=\uc911\uc2ec\uc774 %\uc774\uace0 \ubc18\uc9c0\ub984\uc774 %\uc778 \uc6d0 text.circle3=\uc911\uc2ec\uc774 %\uc774\uace0 \uc120\ubd84% %\uc744(\ub97c) \ubc18\uc9c0\ub984\uc73c\ub85c \ud558\ub294 \uc6d0 text.parallel=\uc810 %\uc744 \uc9c0\ub098\uace0 %\uc5d0 \ud3c9\ud589\ud55c \uc9c1\uc120 text.midpoint=\ub450 \uc810 %, %\uc758 \uc911\uc810 text.quadric=\uc810 %\uc744 \uc9c0\ub098\ub294 \uc6d0\ubfd4\uace1\uc120 text.plumb=\uc810 %\uc744 \uc9c0\ub098\uace0 %\uc5d0 \uc218\uc9c1\uc778 \uc9c1\uc120 text.angle=\uac01 % % % text.angle.fixed=Angle % - % - % with size % text.boundedpoint=% \uc704\uc758 \uc810 text.expression=\uc2dd " % " at %, % text.area=\ub2e4\uac01\ud615 text.fixedangle= \uc810 %\uc744 \uc9c0\ub098 \uaf2d\uc9c0\uc810\uc774 %\uc774\uace0 \ud06c\uae30 %\uc778 \uac01 name.Point=Point name.Intersection=Intersection name.OtherIntersection=Intersection name.Circle=Circle name.Circle3=Circle name.Segment=Segment name.Ray=Ray name.Line=Line name.TwoPointLine=Line with two Points name.Parallel=Parallel name.Midpoint=Midpoint name.Quadric=Quadric name.Plumb=Plumb name.Angle=Angle name.PointOn=ObjectPoint name.Expression=Expression name.Polygon=Polygon prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.angle==a(,,) prompt.area=A(,,) prompt.quadric=quadric(,,,,) prompt.function=function(,,,,,) name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=pl name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=p name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=poly name.short.Function=f popup.hidden=\uac10\ucdb0\uc9c4 \ub3c4\ud615 \ubcf4\uae30 popup.replay=\uc791\ub3c4\uacfc\uc815 \ub2e4\uc2dc\ubcf4\uae30 popup.empty=--- \ub9e4\ud06c\ub85c --- replay.title=\ub2e4\uc2dc\ubcf4\uae30 reorder.title=\uac1c\uccb4 \uc21c\uc11c \ubc14\uafb8\uae30 reorder.message=insert after reorder.notfound=\uac1c\uccb4\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc74c! reorder.warning=Could not do that! setgrid.title=\uaca9\uc790\uc758 \uac04\uaca9 setgrid.prompt=\uaca9\uc790\uc758 \uac04\uaca9 \uc785\ub825 setgrid.set=\uc9c0\uc815(Set) definemacro.title=\ub9e4\ud06c\ub85c \uc815\uc758 definemacro.name=\uc774\ub984 definemacro.comment=\ub9e4\ud06c\ub85c \uc8fc\uc11d definemacro.noparams=\ub9e4\ud06c\ub85c \uc2dc\uc791\uc810\uc774 \ud544\uc694\ud569\ub2c8\ub2e4! definemacro.nomacro=\uc774\uac83\uc740 \uc2e4\ud589 \uac00\ub2a5\ud55c \ub9e4\ud06c\ub85c\uac00 \uc544\ub2d9\ub2c8\ub2e4! definemacro.targetsonly=\uc791\ub3c4 \uac10\ucd94\uae30 definemacro.invisible=\uc644\uc804\ud788 \uac10\ucd94\uae30 definemacro.promptfor=\uc785\ub825\uac12(Prompt for) macro.replace.title=\ub9e4\ud06c\ub85c \uc7ac\uc124\uc815 macro.replace=\ub9e4\ud06c\ub85c \uc7ac\uc124\uc815: macro.replace.all=\ubaa8\ub450 macro.usage=\ub9e4\ud06c\ub85c \uc0ac\uc6a9 \uc624\ub958!(\uc0ac\uc6a9\uc790 \ud301\uc744 \ubcf4\uc2dc\uc624) macro.prompt.title=Parameter Prompt macro.prompt.prompt=Enter a value for the parameter macro.prompt.illegal=Illegal value! digits.title=\uc18c\uc218\uc810 \uc704\uce58 \uc124\uc815 digits.edit=\ud3b8\uc9d1 digits.lengths=\ud654\uba74 digits.angles=\uac01 editrun.title=run \ud30c\uc77c \ud3b8\uc9d1 editrun.run=\uc800\uc7a5\ud558\uace0 \uc2e4\ud589 editrun.load=\ub2e4\ub978 run \ud30c\uc77c sure.title=\ud655\uc2e4\ud569\ub2c8\uae4c? sure.macros=\ub2f9\uc2e0\uc774 \uc815\uc758\ud55c \ubaa8\ub4e0 \ub9e4\ud06c\ub85c\ub97c \uc9c0\uc6b0\uc2dc\uaca0\uc2b5\ub2c8\uae4c? sure.delete=Forget current changes? close.title=\ub05d close.prompt=\uc815\ub9d0 \ub05d\ub0b4\uc2dc\uaca0\uc2b5\ub2c8\uae4c? file.exists.title=\ud30c\uc77c \uc788\uc74c file.exists.overwrite=\ud30c\uc77c\uc774 \uc874\uc7ac\ud569\ub2c8\ub2e4. \ub36e\uc5b4\uc4f0\uaca0\uc2b5\ub2c8\uae4c? exception.nparams=Illegal number of Parameters! exception.notfound=\uac1c\uccb4\ub97c \ucc3e\uc744 \uc218 \uc5c6\uac70\ub098 \uacc4\uc0b0\uc2dd \uc774\ud6c4\uc5d0 \uc815\uc758 \ub418\uc5c8\uc74c! exception.type=Illegal Object Type! exception.expression=\uacc4\uc0b0\uc2dd \uc624\ub958! exception.canfix=Object cannot be fixed! exception.fix=Value invalid! exception.novalue=Value invalid! exception.elementary=Invalid element in expression! exception.bracket=Closing brackets missing! exception.quotes=Closing quotes missing! exception.dot=Two dots in number! exception.nodigit=No digit found in number! exception.function=Unknown function! exception.parameter=Illegal function parameter! exception.macro=Illegal macro parameter! exception.name=Need a Name! exception.job=Illegal Job Paramters! exception.track=Illegal Track Parameters! exception.animate=Illegal Animation Parameters! exception.boolean=Boolean Value must be true of false! exception.value=Illegal Value! exception.color=Illegal Color! exception.colortype=Illegal Thickness! exception.type=Illegal Point Type! exception.macroparameter=Illegal Macro Parameter! exception.macrotarget=Illegal Macro Target! exception.prompt=Illegal prompt oject! exception.prompt.parameter=Prompt object may not be a parameter! exception.parameters=Illegal Parameter! exception.brackets=Illegal Brackets! exception.double=\uc774\ub984\uc774 \uc720\uc77c\ud558\uc9c0 \uc54a\uc74c! error.setaway=This point is not defined before the intersection! error.objecttracker.depends=The point is bound to another object! constructiondisplay.title=Construction function.hide=Hide function.hide.short=hide function.rename=Name function.rename.short=name function.value=Value function.value.short=value function.window=Window function.window.short=W function.color=Color function.color.short=col function.thickness=Thickness function.thickness.short=th function.type=Type function.type.short=type function.partial=Partial function.partial.short=part function.fill=Fill function.fill.short=fill function.back=Background function.back.short=back function.acute=Acute function.acute.short=acute function.obtuse=Obtuse function.obtuse.short=obtuse function.solid=Solid function.solid.short=solid function restrict=Restrict function restrict.short=restrict expression.value=Value configure.title=\uc6f9 \ube0c\ub77c\uc6b0\uc800 \uc9c0\uc815 configure.prompt=\uc6f9 \ube0c\ub77c\uc6b0\uc800 \uba85\ub839\uc5b4 \uc785\ub825 # New Resources: background.error=\uadf8\ub9bc\uc744 \uac00\uc838\uc62c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4 (GIF or JPG!). menu.background=\ubc30\uacbd\ud654\uba74 menu.background.grab=\ud604\uc7ac \ud654\uba74\uc744 \ubc30\uacbd\ud654\uba74\uc73c\ub85c menu.background.clear=\ubc30\uacbd \uc9c0\uc6b0\uae30 menu.background.load=\ubc30\uacbd\uadf8\ub9bc \ubd88\ub7ec\uc624\uae30 ... menu.background.usesize=\uadf8\ub9bc \ud06c\uae30 \ubcc0\uacbd menu.background.tile=\ubc14\ub451\ud310 \ubaa8\uc591\uc73c\ub85c menu.background.center=\uac00\uc6b4\ub370 \ub9de\ucda4 iconhelp.grab=\ubc30\uacbd\uc124\uc815/\uc0ad\uc81c filedialog.backgroundload=\ubc30\uacbd \ubd88\ub7ec\uc624\uae30 filedialog.backgroundload.action=\ubd88\ub7ec\uc624\uae30 # New Resources in Version 2.14 menu.file.compress=\ud56d\uc0c1 \uc555\ucd95\ud558\uae30 menu.file.savesvg=SVG \ud30c\uc77c\ub85c \uc800\uc7a5\ud558\uae30 ... # Version 2.15 loading=\ubd88\ub7ec\uc624\ub294 \uc911\uc785\ub2c8\ub2e4. \uae30\ub2e4\ub824 \uc8fc\uc2ed\uc2dc\uc624! # Version 2.18 and 2.19 menu.settings.font.default=\uae30\ubcf8 \uae00\uaf34 menu.settings.font.bold=\uad75\uac8c menu.settings.font.large=\ud070 \uae00\uaf34 menu.file.saveeps=EPS \ud30c\uc77c\ub85c \uc800\uc7a5\ud558\uae30 menu.fonts=\uae00\uaf34 # Version 2.20 bmpscaler.title=Scale Bitmap bmpscaler.width=\ud3ed bmpscaler.height=\ub192\uc774 bmpscaler.scale=Factor (press Return) bmpscaler.illegal=Illegal Value # Version 2.21 renamemacro.title=\ub9e4\ud06c\ub85c \uc774\ub984 \ubc14\uafb8\uae30 renamemacro.name=\ub9e4\ud06c\ub85c \uc0c8\uc774\ub984 menu.special.renamemacro=\ub9e4\ud06c\ub85c \uc774\ub984 \ubc14\uafb8\uae30 ... # Version 2.23 savequestion.title=\uc800\uc7a5\ud558\uae30 savequestion.qsave=\ubcc0\uacbd\ub41c \ub0b4\uc6a9 \uc800\uc7a5? # Version 2.25 exception.printsize=Page too small for this construction! iconhelp.nohelp=\uad00\ub828 \ub3c4\uc6c0\ub9d0 \uc5c6\uc74c iconhelp.type?=\uc810 \uc720\ud615 iconhelp.thickness?=\ub450\uaed8 iconhelp.color?=\uc0c9\uae54 iconhelp.filled=\uac1c\uccb4\ub0b4\ubd80 \uc0c9\uce60\ud558\uae30 iconhelp.isback=\ub4a4\ub85c(\ubc30\uacbd\uc73c\ub85c \uadf8\ub9ac\uae30) iconhelp.inverse=\ubc18\uc0ac\ub41c \uac01 iconhelp.angle?=\ud06c\uae30 # Version 2.28 message.objecttracker.stop=\uc790\ub3d9\uc790\ucde8: \ud074\ub9ad!(\uc6c0\uc9c1\uc784/\uc790\ucde8\uac10\ucda4/\uba48\ucda4) (shift left/right \uc18d\ub3c4) # Version 2.31 menu.settings.indicate=\uc0c1\uc704\uac1c\uccb4 \ubcf4\uc774\uae30 menu.options.other=\uc124\uc815 menu.help.welcome=\uc774\ubc88 \ubc84\uc804\uc5d0 \ub300\ud558\uc5ec iconhelp.twolines=\uc544\uc774\ucf58 \ub450 \uc904\ub85c iconhelp.qintersection=\uad50\uc810\ub9cc\ub4e4\uc9c0 \ubb3b\uae30 iconhelp.qchoice=Show dialog for object selection iconhelp.qpointon=\uac1c\uccb4 \uc704\uc5d0 \uc810\uc744 \ub9cc\ub4e4\uc9c0 \ubb3b\uae30 iconhelp.noindicate=Do not indicate objects under mouse # Version 2.33 menu.file.new=\uc0c8\ub85c \ub9cc\ub4e4\uae30 (Ctrl-n) # Version 2.34 edit.text.title=\uae00\uc0c1\uc790 edit.text.settings=\uae00\uc0c1\uc790 \ud3b8\uc9d1 menu.settings.filedialog=\ub300\ud654\ucc3d \ubaa8\uc591 \ubc14\uafc8 # Version 2.35 menu.settings.bitmapbackground=\ube44\ud2b8\ub9f5\uc5d0\uc11c \ubc30\uacbd\uc0c9 \uc0ac\uc6a9\ud558\uae30 # Version 2.36 menu.file.savegraphics=\uadf8\ub9bc\ud30c\uc77c\ub85c \uc800\uc7a5\ud558\uae30 ... bmpscaler.title=\uadf8\ub9bc \ud06c\uae30 \uc870\uc815 # Version 2.37 menu.file.savepdf=PDF \ud30c\uc77c\ub85c \uc800\uc7a5\ud558\uae30 iconhelp.chord=Show as segment # Version 2.39 message.setfixedangle.first=\uac01 \uc9c0\uc815: \uccab\ubc88\uc9f8 \uc810? message.setfixedangle.second=\uac01 \uc9c0\uc815: \uaf2d\uc9c0\uc810? message.setfixedangle.third=\uac01 \uc9c0\uc815: \uc138\ubc88\uc9f8 \uc810? edit.fixedangle.set=\ud06c\uae30 \uc9c0\uc815 ... message.setfixedcircle.first=Set fixed circle: \uccab\ubc88\uc9f8 \uc810? message.setfixedcircle.second=Set fixed circle: \ub450\ubc88\uc9f8 \uc810? edit.fixedcircle.set=\ud06c\uae30 \uc9c0\uc815 ... # Version 2.40 minpointsize.title=\uc791\uc740 \uc810\uc758 \ud06c\uae30 \uc124\uc815 minpointsize.prompt=\uc791\uc740 \uc810\uc758 \ud06c\uae30 (\uae30\ubcf8 \uac12 : 3) menu.settings.font.minpointsize=\uc791\uc740 \uc810\uc758 \ud06c\uae30 ... # Version 2.41 name.short.Track=Tr text.track=%\uc758 \uc790\ucde8 < %\uc774(\uac00) % \uc704\ub97c \uc6c0\uc9c1\uc77c \ub54c > trackquestion.keep=\uc774 \uc791\ub3c4\uc758 \uc790\ucde8\ub97c \uc720\uc9c0\ud560\uae4c\uc694? trackquestion.title=\uc790\ucde8 \uc720\uc9c0 menu.options.track=\uc790\ucde8 \uc720\uc9c0 (Shift-Enter) iconhelp.indicate=\uc791\ub3c4 \uacb0\uacfc \ubbf8\ub9ac\ubcf4\uae30 iconhelp.nohelp=\uad00\ub828 \ub3c4\uc6c0\ub9d0 \uc5c6\uc74c # Version 2.42 objects.draw=\ub9c8\uc6b0\uc2a4\ub85c \uadf8\ub9ac\uae30 menu.options.cleardraw=\uadf8\ub9b0 \uadf8\ub9bc \uc9c0\uc6b0\uae30 (Esc) iconhelp.draw=\ub9c8\uc6b0\uc2a4\ub85c \uadf8\ub9ac\uae30 message.draw=\ub9c8\uc6b0\uc2a4\ub85c \uadf8\ub9ac\uae30 (ESC to clear) shortcuts.draw=; # Version 2.43 message.rename=\uc0c8 \uc774\ub984 A,B,C,...: \uac1c\uccb4 \uc120\ud0dd! iconhelp.rename=\uc0c8 \uc774\ub984 A,B,C,... objects.rename=\uc0c8 \uc774\ub984 A,B,C,... shortcuts.rename=: iconhelp.anglereduce=\uac01\uc744 \ub098\ud0c0\ub0b4\ub294 \ubc18\uc9c1\uc120 \uac10\ucd94\uae30 # Version 2.45 menu.settings.smartboard=Smartboard Mode shortcuts.zoom=% objects.zoom=\ub9c8\uc6b0\uc2a4\ub85c \ucd95\uc18c/\ud655\ub300 message.zoom=\uc911\uc2ec \ub04c\uae30 \ub610\ub294 \ud655\ub300/\ucd95\uc18c # Version 2.46 menu.special.restricticons=\uae30\ubcf8 \uc544\uc774\ucf58\ub9cc # Version 2.47 menu.settings.indicate.simple=Indicate Points only menu.settings.beginner=\ucd08\ubcf4\uc790 \ubaa8\ub4dc question.again=\ud56d\uc0c1 \uc774 \uc9c8\ubb38\uc744 \ud568. # Version 2.49 definemacro.parameters=Parameter Prompt(s) ("=name" fixes) # Version 2.53 menu.actions.angles=\uac01 menu.actions.circles=\uc6d0 menu.actions.lines=\uc9c1\uc120 menu.actions.points=\uc810 # Version 3.00 info.title=\uad00\ub828 \ub3c4\uc6c0\ub9d0 info.related=\uad00\ub828\ub41c \uc8fc\uc81c info.notfound=Topic not found! info.noresults=\uc5f0\uacb0\ub41c \ub0b4\uc6a9 \uc5c6\uc74c! info.searchresults=- \uac80\uc0c9\uacb0\uacfc - info.select=- \uc120\ud0dd - info.search=\uac80\uc0c9 info.back=\ub4a4\ub85c info.start=\ucc98\uc74c\uc73c\ub85c iconhelp.info=\uc9c4\ud589\uc911\uc778 \uc791\ub3c4\uad00\ub828 \ub3c4\uc6c0\ub9d0 menu.help.info=\uc9c4\ud589\uc911\uc778 \uc791\ub3c4\uad00\ub828 \ub3c4\uc6c0\ub9d0 myfiledialog.homedir=CaR Files myfiledialog.windowshome=My Documents myfiledialog.mkdir=\ud3f4\ub354 \ub9cc\ub4e4\uae30 myfiledialog.back=\ub4a4\ub85c myfiledialog.home=\uae30\ubcf8\ud3f4\ub354 menu.file.alwaysclearmacros=\ubd88\ub7ec\uc624\uae30 \uc804\uc5d0 \ub9e4\ud06c\ub85c \uc9c0\uc6b0\uae30 about.language=\uc5b8\uc5b4 bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=\ubc31\uc5c5 \ud30c\uc77c \uc0dd\uc131 # Version 3.02 menu.options.hideduplicates=\uc911\ubcf5\ub41c \uac1c\uccb4 \uac10\ucd94\uae30 # Version 3.03 menu.options.function=\ud568\uc218 \ub610\ub294 \uace1\uc120 text.function=Function ( % , % ) function.varmin=\ubd80\ud130 function.varmax=\uae4c\uc9c0 function.dvar=\uac04\uaca9 function.var=\ubcc0\uc218 function.y=y\uc88c\ud45c\ub97c \ub098\ud0c0\ub0b4\ub294 \uc2dd iconhelp.function=\ud568\uc218/\uace1\uc120 menu.options.editlast=\ub9c8\uc9c0\ub9c9 \uac1c\uccb4 \ud3b8\uc9d1 iconhelp.control.edit=\uc870\uac74 \ud3b8\uc9d1 iconhelp.control.hide=\uc911\ubcf5\ub41c \uac1c\uccb4 \uac10\ucd94\uae30 edit.function.title=\ud568\uc218 \ub610\ub294 \uace1\uc120 iconhelp.control.runmacro=\ub9e4\ud06c\ub85c \ub2e4\uc2dc \uc2e4\ud589 # Version 3.05 point.type.cross=\uc2ed\uc790\ud615 point.type.dcross=X\uc790\ud615 shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=\ub2e8\uc704 menu.special.break=\uc911\ub2e8\uc810 menu.bp.setbreak=\uc911\ub2e8\uc810 \uc124\uc815 menu.bp.clearbreak=\uc911\ub2e8\uc810 \uc9c0\uc6b0\uae30 menu.bp.sethidingbreak=\uac10\ucdb0\uc9c4 \uc911\ub2e8\uc810 \uc124\uc815 menu.bp.animatebreak=\uc560\ub2c8\uba54\uc774\uc158 \uc911\ub2e8\uc810 iconhelp.animatebreak=\uc560\ub2c8\uba54\uc774\uc158 \uc911\ub2e8\uc810 message.animatebreak=\uc560\ub2c8\uba54\uc774\uc158 \uc911\ub2e8\uc810: \ud074\ub9ad\ud558\uba74 \uba48\ucda4! (shift left/right \uc18d\ub3c4) menu.special.exporttemplate=\uc900\ube44\ub41c \ud2c0\uc5d0 \ub9de\ucdb0 HTML \ud30c\uc77c \ub9cc\ub4e4\uae30 templateload.open=\ud2c0 \ubd88\ub7ec\uc624\uae30 templateload.open.action=\uc5f4\uae30 menu.settings.doubleclick=\ub354\ube14\ud074\ub9ad\uc73c\ub85c \ub9e4\ud06c\ub85c \uc2e4\ud589 export.codebase=Codebase # Version 3.12 edit.equation=\ubc29\uc815\uc2dd # Version 3.23 menu.settings.squarepoints=\ud56d\uc0c1 \uc0ac\uac01\ud615 \ubaa8\uc591\uc758 \uc810 \uc0ac\uc6a9 # Version 3.37 menu.options.export=\uadf8\ub9bc\ud30c\uc77c \ub0b4\ubcf4\ub0b4\uae30 \uc124\uc815 menu.settings.minwidth=\uac00\uc7a5 \uc791\uc740 \uc120\uc758 \uad75\uae30\ub294 1 menu.settings.minpointsize=\uc81c\ud55c\ub41c \uc791\uc740 \uc810 \ud06c\uae30 menu.settings.minfontsize=\uc81c\ud55c\ub41c \uc791\uc740 \uae00\uaf34 \ud06c\uae30 minfontsize.title=\uc791\uc740 \uae00\uaf34\uc758 \ud06c\uae30 minfontsize.prompt=\uc791\uc740 \uae00\uaf34 (\uae30\ubcf8\uac12: 12) menu.options.minpointsize=\uc791\uc740 \uc810\uc758 \ud06c\uae30 menu.options.minfontsize=\uc791\uc740 \uae00\uaf34\uc758 \ud06c\uae30 # Version 3.38 menu.settings.scalepdf=Scale PDF and EPS output 1:1 # Version 3.41 menu.file.clip=Clip for Graphics Output ... clip.title=Set Clipping clip.width=\uac00\ub85c clip.height=\uc138\ub85c clip.screen=No Clipping # Version 3.42 menu.options.arrowsize=\ud654\uc0b4\ud45c\uc758 \ud06c\uae30 ... arrowsize.title=\ud654\uc0b4\ud45c\uc758 \ud06c\uae30 # Version 3.44 iconhelp.large=\ud070 \uae00\uaf34 \uc0ac\uc6a9 iconhelp.bold=\uad75\uc740 \uae00\uaf34 \uc0ac\uc6a9 menu.options.largefont=\ud070 \uae00\uaf34 menu.options.boldfont=\uad75\uc740 \uae00\uaf34 warning.previewframe=Frame larger than window! message.move.select=\uc774\ub3d9: \uc810 \uc120\ud0dd (shift: \ucd94\uac00, ctrl: \uc774\uc804 \uc0c1\ud0dc \ubcf4\uc774\uae30) # Version 3.46 iconbar.showseparators=\uad6c\ubd84\uae30\ud638 \ubcf4\uc774\uae30 # Version 3.48 menu.sizes=\ud06c\uae30 \uc124\uc815 menu.options.minlinesize=\uac00\ub294\uc120\uc758 \ub450\uaed8 ... minlinesize.title=\uac00\ub294 \uc120\uc758 \ub450\uaed8 minlinesize.prompt=\uac00\ub294\uc120\uc758 \ub450\uaed8 (\uae30\ubcf8\uac12: 1) arrowsize.prompt=\ud654\uc0b4\ud45c\uc758 \ud06c\uae30 \uc124\uc815 (\uae30\ubcf8\uac12: 10) menu.options.printscaler=\ub0b4\ubcf4\ub0bc \ud06c\uae30 ... menu.options.exportsettings=\uadf8\ub9bc\ud30c\uc77c \ub0b4\ubcf4\ub0b4\uae30 \uc124\uc815 ... printscaler.title=\ub0b4\ubcf4\ub0bc \ud06c\uae30 printscaler.width=\uac00\ub85c (cm) printscaler.height=\uc138\ub85c (cm) printscaler.dpi=\ud574\uc0c1\ub3c4 (dpi, \uae30\ubcf8\uac12 300) printscaler.linewidth=\uc120 \ub450\uaed8 (cm, \uae30\ubcf8\uac12 0.02) printscaler.pointsize=\uc810 \ud06c\uae30 (cm, \uae30\ubcf8\uac12 0.07) printscaler.textsize=\uae00\uc790 \ud06c\uae30 (cm, \uae30\ubcf8\uac12 0.3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=\uac00\ub85c (pixel) printscaler.h=\uc138\ub85c (pixel) printscaler.scale=\ud654\uba74\uacfc\uc758 \ube44\uc728 printscaler.middle=Cut out (do not rescale) printscaler.sizes=Scale lines, fonts, and points menu.file.savepng=PNG(\uadf8\ub9bc\ud30c\uc77c)\ub85c \uc800\uc7a5\ud558\uae30 warning.preview=Java 1.1\uc5d0\uc11c\ub294 \ubbf8\ub77c\ubcf4\uae30\uac00 \uc644\ubcbd\ud558\uae30 \uc2e4\ud589\ub418\uc9c0 \uc54a\ub294\ub2e4. iconedit.showseparators=\uad6c\ubd84\uae30\ud638 \ubcf4\uc774\uae30 printscaler.aspect=Keep Aspect Ratio printscaler.presets=Presets printscaler.preset=Make a Choice printscaler.preset.300dpi=Exactly scaled with 300 DPI printscaler.preset.300dpi6=6 cm Width with 300 DPI printscaler.preset.300dpi16=16 cm Width with 300 DPI printscaler.preset.window=\ucc3d\ud06c\uae30 printscaler.preset.clip50=Window Size Clipped 50% message.saving=\uc7a0\uc2dc\ub9cc \uae30\ub2e4\ub824 \uc8fc\uc2ed\uc2dc\uc624! menu.options.printscalepreview=\ubbf8\ub9ac\ubcf4\uae30 (Ctrl-F3) date=\ub9cc\ub4e0 \ub0a0 # Version 3.51 help=\ub3c4\uc6c0\ub9d0 # Version 3.61 editconditionals.title=\uc870\uac74 \ud3b8\uc9d1 editconditionals.hidden=\uac10\ucd94\uae30 editconditionals.superhidden=\uc644\uc804\ud788 \uac10\ucd94\uae30 editconditionals.visible=\ubcf4\ud1b5 editconditionals.showname=\uc774\ub984 \ubcf4\uc774\uae30 editconditionals.showvalue=\uac12 \ubcf4\uc774\uae30 editconditionals.background=\ub4a4\ub85c(\ubc30\uacbd\uc73c\ub85c) editconditionals.solid=\ubd88\ud22c\uba85\ud558\uac8c exception.superfluous=\uacc4\uc0b0\uc2dd\uc5d0 \ubd88\ud544\uc694\ud55c \ubb38\uc7a5\uc774 \uc788\uc74c. # Version 3.62 menu.options.selectionsize=\uc120\ud0dd\ub41c \uac1c\uccb4\uc758 \ud06c\uae30 selectionsize.title=\uc120\ud0dd\ub41c \uac1c\uccb4\uc758 \ud06c\uae30 selectionsize.prompt=\uc120\ud0dd\ub41c \uac1c\uccb4\uc758 \ud06c\uae30 (\uae30\ubcf8\uac12 1.5) # Version 3.63 select.comment.title=\ub9e4\ud06c\ub85c \uc8fc\uc11d # Version 3.68 edit.area.area=\ub113\uc774(\uc2dc\uacc4\ubc29\ud5a5:\uc591\uc218) # Version 3.73 myfiledialog.oldfiles=\ucd5c\uadfc \ubb38\uc11c myfiledialog.olddirs=\ucd5c\uadfc \ud3f4\ub354 # Version 3.74 iconhelp.load=\ubd88\ub7ec\uc624\uae30 (Ctrl-o) iconhelp.save=\uc800\uc7a5\ud558\uae30 (Ctrl-s) iconhelp.new=\uc0c8\ub85c \ub9cc\ub4e4\uae30 (Ctrl-n) # Version 3.81 warning.loadbackground=\ubc30\uacbd\ud654\uba74 \ubd88\ub7ec\uc624\uae30 \uc624\ub958 # Version 3.9 function.x=x\uc88c\ud45c\ub97c \ub098\ud0c0\ub0b4\ub294 \uc2dd(\ud568\uc218 \uc77c\ub54c\ub294 \uacf5\ub780) # Version 3.91 constructiondisplay.select=\uc120\ud0dd constructiondisplay.all=\ubaa8\ub4e0 \uac1c\uccb4 constructiondisplay.visible=\ubcf4\uc774\ub294 \uac1c\uccb4 constructiondisplay.points=\uc810 constructiondisplay.lines=\uc120 constructiondisplay.circles=\uc6d0 constructiondisplay.angles=\uac01 constructiondisplay.other=\ub2e4\ub978 \uac1c\uccb4 menu.file.copypng=\ud074\ub9bd\ubcf4\ub4dc\uc5d0 \ubcf5\uc0ac\ud558\uae30 exception.clipboardcopy=\ubcf5\uc0ac \uc2e4\ud328! menu.options.finegrid=\uc88c\ud45c\ucd95\ub9cc \ubcf4\uc774\uae30 # Vesion 3.93 edit.function.center=\uc911\uc559 \uc124\uc815 edit.function.free=\uc911\uc559 \ud574\uc81c message.setcenter=\uc911\uc559\uc810\uc744 \uc120\ud0dd! # Vesion 3.94 message.edit=\ud3b8\uc9d1: \uac1d\uccb4 (shift: \ucd94\uac00, ctrl: \uc870\uac74 \ud3b8\uc9d1)? # Version 3.95 edit.function.special=\uc810\uc73c\ub85c \ud45c\uc2dc\ud558\uae30 # Version 3.97 error.image=\uadf8\ub9bc\uacfc \uc791\ub3c4\ubb3c\uc774 \ub2e4\ub978 \ud3f4\ub354\uc5d0 \uc788\uc74c! filedialog.imageload=\uadf8\ub9bc \ubd88\ub7ec\uc624\uae30 filedialog.imageload.action=\ubd88\ub7ec\uc624\uae30 prompt.image=image(,,,) objects.image=\uadf8\ub9bc shortcuts.image=_ # Version 3.98 exception.depends=\uac1c\uccb4( % )\ub294 \ud604\uc7ac \uac1c\uccb4\uc5d0 \uc885\uc18d\ub418\uc5c8\ub2e4. error.depends=\uac1c\uccb4( % )\ub294 \ud604\uc7ac \uac1c\uccb4\uc5d0 \uc885\uc18d\ub418\uc5c8\ub2e4. constructiondisplay.sorted=\uc791\ub3c4\ub41c \uc21c\uc11c\ub300\ub85c # Version 3.99 edit.alias=\ubcc4\uce6d constructiondisplay.expressions=\uacc4\uc0b0\uc2dd # Version 4.00 iconhelp.image=\uadf8\ub9bc \ubd88\ub7ec\uc624\uae30 (_) message.image=\uadf8\ub9bc \uace0\uc815\uc744 \uc704\ud55c %\ubc88\uc9f8 \uc810 message.image.last=\uadf8\ub9bc\uc744 \uace0\uc815\ud558\uae30 \uc704\ud55c \ub9c8\uc9c0\ub9c9 \uc810 (\ub610\ub294 \uc774\ubbf8 \uc120\ud0dd\ub41c \uc810) editconditionals.z=\uacb9\uce58\ub294 \uc21c\uc11c # Version 4.01 name.FixedAngle=\uace0\uc815\uac01 # Version 4.04 menu.moresettings=\uc124\uc815 menu.settings.language=\uc5b8\uc5b4\uc124\uc815 language.title=\uc5b8\uc5b4\uc124\uc815 language.prompt=\ub2e4\uc74c \uc2e4\ud589\uc2dc \uc0ac\uc6a9\ud560 \uc5b8\uc5b4 # Version 4.05 constructiondisplay.invalid=\uc624\ub958\uac00 \uc788\ub294 \uac1c\uccb4 # Version 4.08 menu.settings.constructiondisplay=\uc2a4\ud06c\ub9bd\ud2b8 \ucc3d \uc5f4\uae30(F11) # Version 4.09 constructiondisplay.editconditions=\uc870\uac74 \ud3b8\uc9d1 constructiondisplay.delete=\uc120\ud0dd\ub41c \uac1c\uccb4 \uc9c0\uc6b0\uae30 constructiondisplay.hide=\ubcf4\uc774\uae30/\uac10\ucd94\uae30 constructiondisplay.superhide=\uac15\ub825\ud55c \uac10\ucd94\uae30 # Version 4.2 edit.expression.slider=\uc2ac\ub77c\uc774\ub354 \ubcf4\uc774\uae30 menu.grid.options=\uaca9\uc790 \uc120\ud0dd\uc0ac\ud56d menu.options.leftsnap=\uaca9\uc790\uc758 1/2 \uac04\uaca9\uc73c\ub85c \uc6c0\uc9c1\uc774\uae30 menu.settings.boundingbox=Create Bounding Box (bb) file # Version 4.3 latexsettings.title=Setup LaTeX export latexsettings.boundingbox=Create Bbunding box bb-file latexsettings.latexinput=Create LaTeX idx-file latexsettings.doubledollar=LaTeX does $$...$$ latexsettings.dollar=LaTeX does $...$ latexsettings.nodollar=LaTeX does all other strings latexsettings.fullpath=Use file path printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=12 cm width with 300 DPI printscaler.latex=LaTeX\ub85c \uc800\uc7a5\ud558\uae30 menu.background.usewidth=Adjust height only # Version 4.4 menu.options.restricted=Restrict Intersections menu.options.sizes=\ud06c\uae30 \uc124\uc815 ... sizesdialog.title=\ud06c\uae30 minlinesize.prompt=\uc120\uc758 \ucd5c\uc18c \ub450\uaed8 (\uae30\ubcf8\uac12: 1) minpointsize.prompt=\uc810\uc758 \ucd5c\uc18c \ud06c\uae30 (\uae30\ubcf8\uac12: 3) minfontsize.prompt=\uae00\uc790\uc758 \ucd5c\uc18c \ud06c\uae30 (\uae30\ubcf8\uac12: 12) arrowsize.prompt=\ud654\uc0b4\ud45c\uc758 \ud06c\uae30 (\uae30\ubcf8\uac12: 10) selectionsize.prompt=\uc120\ud0dd\ub41c \uac1c\uccb4\uc758 \ud06c\uae30 (\uae30\ubcf8\uac12: 1.5) warning.loadmacros=\ub9e4\ud06c\ub85c\ub97c \ubd88\ub7ec\uc624\ub294 \uc911 \uc624\ub958 \ubc1c\uc0dd! warning.macrodefinition=% \uc774 \uc0ac\uc6a9\ub418\uc5c8\uc73c\ub098 \ub9e4\ud06c\ub85c\uc5d0 \ud3ec\ud568\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc74c! edit.circle.bounds=\ud638\ub85c \ud45c\uc2dc edit.circle.range=\ud638 \uc124\uc815 ... # Version 4.5 edit.track.dmin=\ucd5c\uc18c \uac04\uaca9 (\uae30\ubcf8\uac12 0.001) # Version 4.6 menu.settings.smallicons=\uc791\uc740 \uc544\uc774\ucf58 \uc0ac\uc6a9 menu.settings.oldicons=\uc774\uc804 \uc544\uc774\ucf58 \uc0ac\uc6a9 # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof= %\uc758 \uc790\ucde8 (% \uc774 \ubcc0\ud560 \ub54c) # Version 5 # Fix error.image edit.discrete=\ubd88\uc5f0\uc18d \uc810\uc73c\ub85c error.fixedsegment=\uc774 \uc120\ubd84\uc740 \uace0\uc815\ud560 \uc218 \uc5c6\ub2e4! # Version 5.1 edit.intersection.alternate=Can alternate export.restrictedmove=Restrict Movements # Version 5.3 # Fix message.boundedpoint # Fix iconhelp.new message.bindpoint=\uc810\uc744 \uac1c\uccb4 \uc704\uc5d0 \ubb36\uae30 (Shift: continuous, Ctrl: \ub3c4\ud615 \ub0b4\ubd80) edit.point.inside=\ub3c4\ud615 \ub0b4\ubd80\uc758 \uc810 edit.point.increment=\uc99d\uac00\ub7c9 (0=free) edit.more=\uc870\uac74\ud3b8\uc9d1 menu.settings.more=Show button for conditional formats menu.file.loadexamples=\ubcf4\uae30 \ubd88\ub7ec\uc624\uae30 menu.options.editgrid=\uc88c\ud45c\ucd95 \ud3b8\uc9d1 # Version 6.1 constructiondisplay.description=\uc791\ub3c4 \ubcf4\uae30(Show Description) (Alt-Ctrl-1) constructiondisplay.size=\ud06c\uae30 \ub610\ub294 \uc88c\ud45c \ubcf4\uae30(Show Size or Coordinates) (Alt-Ctrl-2) constructiondisplay.formula=\uc2dd \ubcf4\uae30(Show Formula) (Alt-Ctrl-3) menu.settings.germanpoints=\uc0ac\uc6a9(Use) | in coordinates ./src/rene/zirkel/docs/ZirkelProperties_vi.properties0000770000175000017500000010457410620352224022061 0ustar yvesyves abort=Huy bo about.language=Ngon ngu about.name=School Geometry about.programmed=Lap trinh boi about.title=Thong tin chuong trinh arrowsize.prompt=Kich thuoc dang mui ten (mac dinh: 10) background.error=Khong the mo tap tin anh (.GIF hoac .JPG). bmpscaler.300dpi=300 dpi bmpscaler.72dpi=72 dpi bmpscaler.height=Chieu cao bmpscaler.illegal=Gia tri khong hop le bmpscaler.scale=Thua so bmpscaler.title=Co gian anh bmpscaler.width=Chieu rong bound.bind=Lien ket den doi tuong bound.error=Doi tuong khong the thiet lap! bound.release=Giai phong diem cancel=Huy bo clip.height=Chieu cao clip.screen=No Clipping clip.title=Set Clipping clip.width=Chieu rong close=Dong close.prompt=Ban co that su muon thoat khoi chuong trinh? close.title=Ket thuc color.type.invisible=An color.type.normal=Binh thuong color.type.thick=Day color.type.thin=Mong coloreditor.blue=Xanh duong coloreditor.color=Mau sac coloreditor.green=Xanh la cay coloreditor.red=Do coloreditor.title=Chinh sua mau sac colors.background=Mau nen colors.black=Den colors.blue=Xanh duong colors.brown=Nau colors.color0=Mau 1 (Den) colors.color1=Mau 2 (Xanh la cay) colors.color2=Mau 3 (Xanh duong) colors.color3=Mau 4 (Nau) colors.color4=Mau 5 (Xanh lam) colors.color5=Mau 6 (Do) colors.cyan=Xanh lam colors.default=Su dung mau mac dinh colors.green=Xanh la cay colors.red=Do colors.select=Tuy chon colors.target=Target comment.cancel=Huy bo comment.close=Dong comment.set=Thiet lap comment.title=Ghi chu configure.prompt=Nhap vao ten trinh duyet Web va dia chi trang web cua chuong trinh configure.title=Thiet lap trinh duyet Web constructiondisplay.all=Tat ca doi tuong constructiondisplay.angles=Goc constructiondisplay.circles=Hinh tron constructiondisplay.copy=Sao chep toi bo nho tam constructiondisplay.delete=Xoa doi tuong constructiondisplay.edit=Chinh sua doi tuong constructiondisplay.editconditions=Chinh sua co dieu kien constructiondisplay.expressions=Bieu thuc constructiondisplay.hide=An/Hien doi tuong constructiondisplay.invalid=Doi tuong khong hop le constructiondisplay.lines=Duong thang constructiondisplay.other=Nhung doi tuong khac constructiondisplay.points=Diem constructiondisplay.select=Tuy chon constructiondisplay.sorted=Sap xep doi tuong theo thu tu dung hinh constructiondisplay.superhide=Sieu an constructiondisplay.title=Dung hinh constructiondisplay.visible=Khong hien thi doi tuong an date=Build definemacro.comment=Ghi chu trong Macro definemacro.invisible=An thanh cong definemacro.name=Ten definemacro.nomacro=Khong the chay Macro! definemacro.noparams=Tham so can thiet cho Macro! definemacro.parameters=Dau nhac tham so("=ten") definemacro.promptfor=Dau nhac thay the cho definemacro.targetsonly=An su dung hinh definemacro.title=Dinh nghia Macro digits.angles=Goc digits.edit=Chinh sua digits.lengths=Hien thi digits.title=Thiet lap hien thi phan thap phan done=Dung! edit.Title=Thuoc tinh edit.alias=Ten hieu edit.angle.displaysize=Hien thi do lon edit.angle.large=Lon edit.angle.length=Do lon edit.angle.normal=Trung binh edit.angle.small=Nho edit.angle.title=Chinh sua goc edit.area.area=Pham vi edit.area.back=Trong hinh nen edit.area.title=Chinh sua hinh da giac edit.cancel=Huy bo edit.circle.bounds=Hien thi cung edit.circle.length=Ban kinh edit.circle.partial=Hien thi edit.circle.range=Thiet lap cung... edit.circle.title=Chinh sua hinh tron edit.color=Mau sac edit.discrete=Roi rac edit.equation=Phuong trinh edit.expression=Bieu thuc edit.expression.prompt=Loi giai thich edit.expression.slider=Hien thi con truot edit.expression.title=Chinh sua bieu thuc edit.fixed=Co dinh vi tri edit.fixedangle.set=Thiet lap kich thuoc edit.fixedcircle.set=Thiet lap do lon edit.function.center=Ham so trung voi truc x edit.function.free=Release Center edit.function.title=Ham so hoac duong cong edit.hidden=An edit.intersection.alternate=Co the luan phien edit.line.invisible=An edit.line.normal=Binh thuong edit.line.thick=Day edit.line.thin=Mong edit.line.title=Chinh sua edit.line.type=Kieu edit.name=Ten edit.ok=Dong y edit.plumb.restricted=Gioi han edit.point.away=Xa edit.point.bound=Thuoc doi tuong edit.point.close=Close to edit.point.colortype=Day edit.point.free=Free edit.point.intersection=Tach ra tu` edit.point.showvalue=Hien thi toa do edit.point.title=Chinh sua diem edit.point.type=Kieu edit.point.x=x edit.point.y=y edit.segment.length=Do dai edit.segment.showvalue=Hien thi do dai edit.showname=Hien thi ten edit.text=Ghi chu edit.text.settings=Tuy chon edit.text.title=Thiet lap ghi chu edit.track.dmin=Minimal step (default 0.001) edit.unit=Don vi editconditionals.background=Hinh nen editconditionals.hidden=An editconditionals.showname=Hien thi ten editconditionals.showvalue=Hien thi gia tri editconditionals.solid=Not Transparent editconditionals.superhidden=An thanh cong editconditionals.title=Chinh sua co dieu kien editconditionals.visible=Binh thuong editconditionals.z=Z-Buffer Value editrun.load=Mieu ta khac editrun.run=Luu va chay editrun.title=Chinh sua mieu ta cach dung hinh error.depends=Doi tuong % phu thuoc vao doi tuong hien hanh error.fixedsegment=Khong the co dinh doan thang nay! error.image=Image not in same folder as construction? error.objecttracker.depends=The point is bound to another object! error.setaway=This point is not defined before the intersection! exception.animate=Thong so chay hieu ung khong hop le! exception.boolean=Boolean Value must be true of false! exception.bracket=Thieu dau dong ngoac! exception.brackets=Dau ngoac khong hop le! exception.canfix=Doi tuong nay khong the co dinh! exception.clipboardcopy=Sao chep khong thanh cong! exception.color=Mau sac khong hop le! exception.colortype=Do day khong hop le! exception.depends=Doi tuong % phu thuoc vao doi tuong hien hanh exception.dot=Two dots in number! exception.double=Name is not unique! exception.elementary=Phan tu khong hop le trong bieu thuc! exception.expression=Bieu thuc khong hop le! exception.fix=Gia tri khong hop le! exception.function=Ham so khong hop le! exception.job=Thong so tinh toan khong hop le! exception.macro=Thong so macro khong hop le! exception.macroparameter=Thong so Macro khong hop le! exception.macrotarget=Illegal Macro Target! exception.name=Thieu ten! exception.nodigit=No digit found in number! exception.notfound=Doi tuong khong the thiet lap hoac chua duoc dinh nghia! exception.novalue=Gia tri khong hop le! exception.nparams=Thong so khong hop le cua tham so! exception.parameter=Thong so cua ham khong hop le! exception.parameters=Thong so khong hop le! exception.printsize=Trang giay nay qua nho de dung hinh! exception.prompt=Illegal prompt oject! exception.prompt.parameter=Prompt object may not be a parameter! exception.quotes=Closing quotes missing! exception.superfluous=Bieu thuc khong hop le! exception.track=Illegal Track Parameters! exception.type=Kieu hien thi diem khong hop le! exception.value=Gia tri khong hop le! export.3D=Duong vien export.appletcolor=Use for applet background export.background=Save defined Background export.backgroundcolor=Use for page background export.breaks=Xem lai tai nhung diem dung export.codebase=Codebase export.color=Mau sac export.colors=Luu mau sac dinh nghia export.comment=Luu ghi chu export.digits=Luu ky so export.file=Construction File export.full=Duong vien, bieu tuong va trang thai export.height=Chieu cao export.icons=Duong vien va bieu tuong export.jar=Tap tin Jar export.job=Display as Assignment export.jumpsol=Jump to Solution export.linksol=Link to Solution export.nonvisual=Duong vien, Icons va Duong thang bat dau export.pagetitle=Tieu de cua trang export.plain=Don gian export.popup=Hien thi thanh Menu export.restrictedmove=Han che su di chuyen export.savefirst=Tap tin nay khong the luu! export.savesol=Save Solution File export.setcolor=Chon mau sac export.setsize=Get Size export.signature=Created with C.a.R. by R. Grothmann export.soltext=Solution export.solution=Solution File export.style=Applet Style export.stylesheet=Tap tin kieu CSS export.title=Xuat ra thanh dang tap tin HTML export.track=Track Point export.width=Chieu rong export.zoom=Phong to / thu nho voi chuot expression.value=Gia tri false=Sai file.exists.overwrite=Tap tin dang ton tai! Ban co muon thay doi tren tap tin nay? file.exists.title=Tap tin dang ton tai filedialog.backgroundload=Tai hinh nen filedialog.backgroundload.action=Tai filedialog.htmlsave=Luu thanh dang HTML filedialog.htmlsave.action=Luu filedialog.imageload=Tai hinh filedialog.imageload.action=Tai filedialog.open=Mo filedialog.open.action=Mo filedialog.saveas=Luu voi ten khac... filedialog.saveas.action=Luu function=restrict.short=restrict function.acute=Goc nhon function.acute.short=Goc nhon function.back=Hinh nen function.back.short=Quay lai function.color=Mau sac function.color.short=Mau sac function.dvar=Step function.fill=Fill function.fill.short=fill function.hide=An function.hide.short=An function.obtuse=Goc tu function.obtuse.short=Goc tu function.partial=Partial function.partial.short=part function.rename=Ten function.rename.short=Ten function.solid=Solid function.solid.short=solid function.thickness=Day function.thickness.short=Day function.type=Kieu function.type.short=Kieu function.value=Gia tri function.value.short=Gia tri function.var=Bien so function.varmax=Den function.varmin=Tu function.window=Cua so function.window.short=Cua so function.x=Gia tri cua x function.y=Gia tri cua y help=Tro giup help.error=Khong the mo tap tin tro giup! help.file=schoolgeometry.txt help.title=Tro giup homefile=index.html homepage=http://www.z-u-l.de/ iconbar.showseparators=Hien thi dang phan cat iconedit.showseparators=Hien thi dang phan cat iconedit.title=Chinh sua thanh cong cu iconedit.twobars=Hien thi day du thanh cong cu iconhelp.allback=To the start iconhelp.allforward=To the end iconhelp.angle=Goc (a) iconhelp.angle?=Do lon iconhelp.anglereduce=Don't show angle ray iconhelp.animate=Hieu ung (") iconhelp.animatebreak=Animate breakpoints iconhelp.area=Hinh da giac (0) iconhelp.arrow=Tao doan thang theo dang hinh mui ten (Ctrl-F11) iconhelp.back=Xoa doi tuong cuoi (<-) iconhelp.bold=Hien thi font chu dam iconhelp.boundedpoint=Diem thuoc doi tuong (5)+Shift: Khong co dinh doi tuong iconhelp.chord=Hien thi doan thang iconhelp.circle=Hinh tron (c) iconhelp.circle3=Hinh tron tu 3 diem (3) iconhelp.close=Dong iconhelp.color=Thiet lap mau sac mac dinh cua doi tuong (Ctrl-1,2,3,4) iconhelp.color?=Mau sac iconhelp.comment=Hien thi va chinh sua ghi chu (F10) iconhelp.control.edit=Chinh sua doi tuong cuoi iconhelp.control.hide=An ban sao iconhelp.control.runmacro=Chay lai Macro cuoi iconhelp.defaults=Thiet lap mac dinh iconhelp.delete=Xoa doi tuong va doi tuong con cua no (Del) iconhelp.draw=Ve voi chuot iconhelp.edit=Chinh sua doi tuong (e)+Shift: Chinh sua nhieu doi tuong+Ctrl: Chinh sua doi tuong cuoi iconhelp.expression=Bieu thuc so hoc (x) iconhelp.fastback=Quay lai nhanh iconhelp.fastforward=Tien toi nhanh iconhelp.filled=Filled object iconhelp.fixedangle=Goc voi do lon co dinh (.) iconhelp.fixedcircle=Hinh tron voi ban kinh co dinh (,) iconhelp.fixedsegment=Doan thang voi do dai co dinh (#) iconhelp.function=Tao ham so iconhelp.grab=Huy bo hinh nen iconhelp.grid=Hien thi he truc toa do - dang luoi (F12) iconhelp.hidden=Hien / An doi tuong (F9) iconhelp.hide=An doi tuong (h) iconhelp.image=Tai hinh (_) iconhelp.indicate=Xem truoc ket qua dung hinh iconhelp.info=Noi dung tro giup iconhelp.intersection=Giao diem (i) iconhelp.inverse=Goc doi xung iconhelp.isback=Draws in background iconhelp.large=Hien thi font chu lon iconhelp.line=Duong thang (g) iconhelp.load=Mo tap tin... (Ctrl-o) iconhelp.longnames=Hien thi ten day du cua doi tuong (Ctrl-F8) iconhelp.macro=Thiet lap thong so Macro, muc dich va dinh nghia (7,8,Ctrl-5) iconhelp.macro0=Thiet lap thong so Macro, muc dich va dinh nghia iconhelp.midpoint=Trung diem (4) iconhelp.move=Di chuyen diem (m)+Ctrl(Diem): Hien thi vi tri ban dau cua diem+Ctrl: Di chuyen doi tuong co dinh+Shift: Di chuyen nhieu doi tuong iconhelp.new=Tao moi (Ctrl-n) iconhelp.nextbreak=Jump to next break iconhelp.nohelp=Phan nay khong co trong tro giup! iconhelp.noindicate=Do not indicate objects under mouse iconhelp.objecttracker=Automatic track of a point or a line (o)+Strg: Keep Track (Shift-Enter) iconhelp.obtuse=Tao goc lon hon 1800 (Ctrl-F12) iconhelp.oneback=Quay lai iconhelp.oneforward=Tien toi iconhelp.parallel=Duong thang song song (1) iconhelp.partial=Hien thi mac dinh 1 phan hinh tron (Ctrl-F9) iconhelp.plines=Hien thi mac dinh 1 phan duong thang (Ctrl-F10) iconhelp.plumb=Duong thang vuong goc (2) iconhelp.point=Diem (p) iconhelp.qchoice=Show dialog for object selection iconhelp.qintersection=Ask for intersections iconhelp.qpointon=Ask to create point on object iconhelp.quadric=Duong Conic di qua 5 diem ($) iconhelp.ray=Tia (r) iconhelp.rename=Doi ten moi A,B,C,... iconhelp.replay=Xem lai viec dung hinh iconhelp.runmacro=Chay Macro (9)+Ctrl: Chay Macro cuoi iconhelp.save=Luu tap tin (Ctrl-s) iconhelp.segment=Doan thang (s) iconhelp.setbreak=Toggle break+Shift: Hidden breakpoint iconhelp.showcolor=Mau sac doi tuong (Alt-1,2,3,4) iconhelp.showname=Hien thi ten mac dinh cua doi tuong (Ctrl-F6) iconhelp.showvalue=Hien thi toa do cua doi tuong (Ctrl-F7) iconhelp.solid=Do not use transparency by default iconhelp.text=Ghi chu tren nhieu dong (b) iconhelp.thickness=Thiet lap muc do day mong cho doi tuong (Alt-5,6,7) iconhelp.thickness0=Mong iconhelp.thickness?=Day iconhelp.tracker=Track a point or a line (t) iconhelp.twolines=Hien thi day du thanh cong cu iconhelp.type=Thiet lap kieu hien thi diem (Ctrl-5,6,7,8,9,0) iconhelp.type0=Thiet lap kieu hien thi diem iconhelp.type?=Kieu diem iconhelp.undo=Huy bo thao tac cuoi vua thuc hien (Ctrl-z) iconhelp.visual=Toggle visual construction mode iconhelp.zoom=Phong to / thu nho voi chuot (%) info.back=Quay lai info.noresults=Chuoi khong the thiet lap! info.notfound=Chu de khong the thiet lap! info.related=Nhung chu de co lien quan info.search=Tim kiem info.searchresults=- Ket qua tim kiem - info.select=- Tuy chon - info.start=Bat dau info.title=Noi dung tro giup jobcomment.title=Assignment language.prompt=Ngon ngu bat dau khi chay chuong tring language.title=Thiet lap ngon ngu latexsettings.boundingbox=Create Bounding box bb-file latexsettings.dollar=LaTeX does $...$ latexsettings.doubledollar=LaTeX does $$...$$ latexsettings.fullpath=Duong dan cua tap tin latexsettings.latexinput=Tao tap tin LaTeX latexsettings.nodollar=LaTeX does all other strings latexsettings.title=Setup LaTeX export load=Tai loading=Dang tai, vui long cho! macro.prompt.illegal=Gia tri khong hop le! macro.prompt.prompt=Nh\u1eadp 1 gia tri v`o tham so macro.prompt.title=Parameter Prompt macro.replace=Thay the Macro: macro.replace.all=Tat ca macro.replace.title=Macro duoc thay the macro.usage=Wrong use of macro (see tips)! menu.actions=Chinh sua menu.actions.angles=Goc menu.actions.circles=Hinh tron menu.actions.complex=Nhung cong cu nang cao menu.actions.decorative=Nhung doi tuong phu menu.actions.elementary=Nhung cong cu co ban menu.actions.lines=Duong thang menu.actions.move=Di chuyen menu.actions.points=Diem menu.background=Hinh nen menu.background.center=Canh giua hinh nen menu.background.clear=Xoa bo hinh nen menu.background.grab=Hinh nen hien tai menu.background.load=Tai hinh nen... menu.background.tile=Hien thi dang xep ke nhau menu.background.usesize=Tro lai kich thuoc ban dau cua hinh menu.background.usewidth=Dieu chinh chieu cao thich hop menu.bp.animatebreak=Animate Breakpoints menu.bp.clearbreak=Xoa tat ca diem ngat menu.bp.setbreak=Thiet lap diem ngat menu.bp.sethidingbreak=Thiet lap an diem ngat menu.colors=Thiet lap mau sac menu.file=Tap tin menu.file.alwaysclearmacros=Clear Macros before Loading menu.file.clearmacros=Xoa tat ca Macro menu.file.clip=Clip for Graphics Output... menu.file.compress=Nen tap tin khi luu menu.file.copypng=Luu vao bo nho tam menu.file.editrun=Chinh sua tap tin *.run (Ctrl-x) menu.file.exit=Thoat (Alt-F4) menu.file.includemacros=Tat ca Macro menu.file.load=Mo tap tin... (Ctrl-o) menu.file.loadjob=Mo tap tin *.job,*.jobz... (Ctrl-j) menu.file.loadrun=Mo tap tin *.run... (Ctrl-r) menu.file.new=Tao moi (Ctrl-n) menu.file.print=In... menu.file.print.isoscale=Co dan 1:1 theo cm menu.file.save=Luu tap tin (Ctrl-s) menu.file.saveas=Luu voi ten moi... (Ctrl-a) menu.file.savebmp=Luu thanh dang BMP... menu.file.saveeps=Luu thanh dang EPS... menu.file.savefig=Luu thanh dang FIG... menu.file.savegraphics=Luu tap tin thanh dang... menu.file.savejob=Save as Assignment... (Ctrl-k) menu.file.savepdf=Luu thanh dang PDF menu.file.savepng=Luu tap tin thanh dang PNG menu.file.savesvg=Luu thanh dang SVG... menu.fonts=Font chu menu.grid.options=Tuy chon hien thi dang luoi menu.help=Tro giup menu.help.about=Thong tin chuong trinh menu.help.browser=Xem tro giup va demo tren trang web menu.help.configure=Configure the Browser menu.help.gui=Giao dien nguoi dung menu.help.help=Tro giup (F1) menu.help.info=Muc luc tro giup menu.help.interactive=Descriptive Constructions menu.help.macros=About Macros menu.help.text=Tro giup nhanh menu.help.tips=Mot vai thu thuat menu.help.tools=The Tools menu.help.welcome=Thong tin ve phien ban hien hanh menu.macros=Macro menu.moresettings=Thiet lap menu.options=Tuy chon menu.options.all=Tat ca menu.options.arrow=Tao doan thang theo dang hinh mui ten (Ctrl-F11) menu.options.back=Xoa doi tuong cuoi (<-) menu.options.boldfont=Font chu dam menu.options.cleardraw=Huy bo thao tac ve (Esc) menu.options.comment=Chinh sua ghi cu (F10) menu.options.constructiondisplay=Hien thi mo ta menu.options.defaultcolor=Mau sac mac dinh menu.options.defaultthickness=Do day mac dinh menu.options.defaulttype=Kieu diem mac dinh menu.options.editicons=Chinh sua thanh cong cu menu.options.editlast=Chinh sua doi tuong cuoi menu.options.export=Thiet lap hien thi menu.options.exportsettings=Nhung thiet lap danh rieng... menu.options.finegrid=Hien thi he truc toa do menu.options.function=Tao ham so menu.options.grid=Hien thi he truc toa do - dang luoi (F12) menu.options.hidden=Hien / An nhung doi tuong an menu.options.hideduplicates=An ban sao cua doi tuong menu.options.largefont=Kich thuoc font lon menu.options.leftsnap=Snap with Left Button Drag menu.options.longnames=Hien thi ten day du cua doi tuong menu.options.minfontsize=Kich thuoc font nho menu.options.minpointsize=Kich thuoc diem nho menu.options.obtuse=Tao goc lon hon 1800 (Ctrl-F12) menu.options.other=Thiet lap menu.options.partial=Tao hinh tron mac dinh hien thi 1 phan (Ctrl-F9) menu.options.plines=Tao duong thang mac dinh hien thi 1 phan (Ctrl-F10) menu.options.printscalepreview=Xem truoc khi in (Ctrl-F3) menu.options.printscaler=Thiet lap kich thuoc... menu.options.restricted=Gioi han giao diem menu.options.setdigits=Thiet lap hien thi phan thap phan menu.options.setgrid=Set Grid Width... menu.options.showcolor=Hien thi mau sac menu.options.shownames=Hien thi ten doi tuong (Ctrl-F6) menu.options.showvalues=Hien thi gia tri doi tuong (Ctrl-F7) menu.options.sizes=Thiet lap kich thuoc... menu.options.solid=Do not use Transparency menu.options.track=Keep Track (Shift-Enter) menu.options.undo=Huy bo thao tac xoa vua thuc hien (Ctrl-z) menu.options.visual=Chuc nang tao doi tuong bang chuot menu.settings=Nhung thiet lap danh rieng menu.settings.autohide=Hide second Intersection Point menu.settings.backups=Luu tru du phong menu.settings.beginner=Giao dien mac dinh menu.settings.bitmapbackground=Su dung mau nen trong Bitmaps menu.settings.boundingbox=Create Bounding Box (bb) file menu.settings.choice=Show selection Dialog for Objects menu.settings.constructiondisplay=Hien thi dang sach doi tuong (F11) menu.settings.doubleclick=Nhap 2 lan phai chuot de tao Macro menu.settings.filedialog=Replace system file dialog menu.settings.font.bold=Font chu dam menu.settings.font.default=Font chu mac dinh menu.settings.font.large=Font chu lon menu.settings.fullicons=Use two full Icon Bars menu.settings.iconbartop=Hien thi thanh cong cu nam phia tren menu.settings.indicate=Hien thi nhung doi tuong tu dong phat sinh menu.settings.indicate.simple=Khong hien thi truoc ket qua hinh ve menu.settings.intersection=Ask before creating an Intersection menu.settings.language=Thiet lap ngon ngu menu.settings.minfontsize=Kich thuoc font chu toi thieu menu.settings.minpointsize=Kich thuoc diem toi thieu menu.settings.minwidth=Do day duong thang la 1 menu.settings.movefixname=Hien thi gia tri doi tuong co dinh khi di chuyen menu.settings.movename=Hien thi gia tri doi tuong khi di chuyen menu.settings.oldicons=Hien thi dang bieu tuong cu menu.settings.pointon=Ask before creating a Point on an Object menu.settings.restricted=Nhung chuc nang don gian menu.settings.scalepdf=Scale PDF and EPS output 1:1 menu.settings.showtips=Hien thi chu thich cong cu menu.settings.simplegraphics=Giam do min cho hinh ve menu.settings.smallicons=Hien thi dang bieu tuong nho menu.settings.smartboard=Smartboard Mode menu.settings.squarepoints=Draw points always as squares menu.settings.sure=Confirm before Loading and Closing menu.settings.utf=Su dung ma UTF-8 menu.special=Special menu.special.break=Diem ngat menu.special.definemacro=Dinh nghia 1 Macro (Ctrl-F5) menu.special.deletemacros=Xoa Macro... menu.special.export=Luu tap tin thanh dang HTML... (Ctrl-e) menu.special.exporttemplate=Xuat tap tin HTML thanh dang mau menu.special.jobcomment=Set Assignment Text... (F8) menu.special.loadmacros=Tai Macro... menu.special.renamemacro=Doi ten Macro... menu.special.replay=Xem lai cach dung hinh do menu.special.restricticons=Gioi han thanh cong cu menu.special.runmacro=Chay 1 Macro... (F5) menu.special.savemacros=Luu Macro... menu.special.testjob=Test this Assignment (Ctrl-F1) menu.zoom=Phong to / Thu nho menu.zoom.down=Di chuyen xuong duoi (Nut di chuyen xuong) menu.zoom.in=Phong to (+) menu.zoom.left=Di chuyen qua ben trai (Nut di chuyen qua trai ) menu.zoom.out=Thu nho (-) menu.zoom.right=Di chuyen qua ben phai (Nut di chuyen qua phai) menu.zoom.up=Di chuyen len tren (Nut di chuyen len tren) message=Thong bao message.angle.first=Goc: Diem thu nhat? message.angle.root=Goc: Dinh goc ? message.angle.second=Goc: Diem thu hai (Shift: Co dinh kich thuoc)? message.animatebreak=Animate breakpoints: click to stop (shift left/right for speed)! message.animator.point=Hieu ung: Diem muon chay hieu ung? message.animator.running=Hieu ung: Chay hieu ung (click to stop)! message.animator.segment=Hieu ung: Chon hinh tron hoac doan thang? message.area=Hinh da giac: Dinh? message.boundedpoint=Diem thuoc doi tuong: Chon doi tuong ma diem thuoc (hinh tron hoac duong thang) (Shift: Khong co dinh diem khi di chuyen doi tuong)? message.circle.midpoint=Hinh tron: Tam? message.circle.radius=Hinh tron: Diem thuoc hinh tron (Shift: Co dinh ban kinh)? message.circle3.first=Hinh tron: Ban kinh thu nhat? message.circle3.midpoint=Hinh tron: Tam? message.circle3.second=Hinh tron: Ban kinh thu hai? message.delete=Xoa: Chon doi tuong can xoa! message.draw=Ve bang chuot (Nhan ESC de xoa thao tac ve) message.edit=Chinh sua doi tuong: Chon doi tuong can chinh sua (shift: Chinh sua nhieu doi tuong, ctrl: Chinh sua co dieu kien)? message.expression=Arithmetic Expression: Select a place! message.fixedangle.first=Goc voi do lon co dinh: Diem thu nhat? message.fixedangle.root=Goc voi do lon co dinh: Dinh? message.fixedangle.second=Goc voi do lon co dinh: Diem thu hai? message.fixedcircle.midpoint=Hinh tron voi do lon co dinh: Tam? message.fixedcircle.radius=Hinh tron voi do lon co dinh: Ban kinh? message.fixedsegment.first=Doan thang voi do dai co dinh: Diem thu nhat? message.fixedsegment.second=Doan thang voi do dai co dinh: Diem thu hai? message.hide=An / Hien: Chon doi tuong can an / hien! message.image=Image anchor point % message.image.last=Last image anchor point (or choose selected point) message.intersection.first=Giao diem: Doi tuong thu nhat? message.intersection.second=Giao diem: Doi tuong thu hai? message.label.move=Di chuyen nhan ten: Nhan ten can di chuyen! message.label.select=Di chuyen nhan ten: Chon nhan ten ma ban muon di chuyen! message.line.first=Duong thang: Diem thu nhat? message.line.second=Duong thang: Diem thu hai? message.midpoint.first=Trung diem: Diem thu nhat? message.midpoint.second=Trung diem: Diem thu hai? message.move.move=Di chuyen: Di chuyen diem\ message.move.select=Di chuyen(m)): Chon diem can di chuyen (Shift: Di chuyen nhieu doi tuong. / Ctrl+(Diem): Hien thi vi tri ban dau cua doi tuong / Ctrl: Di chuyen hinh tron co dinh) message.objecttracker.move=Autotrack: Move the point! message.objecttracker.object=Autotrack: Line or circle, point on object, slider? message.objecttracker.select=Autotrack: Point or line to track (shift: more)? message.objecttracker.selectanypoint=Autotrack: Any other point to move? message.objecttracker.selectpoint=Autotrack: Point to be moved on line or circle? message.objecttracker.start=Autotrack: Bat dau chay hieu ung! message.objecttracker.stop=Autotrack: Click to stop (shift left/right for speed)! message.parallel.first=Song song: Doi tuong can lay song song? message.parallel.second=Song song: Diem thuoc duong thang song song voi doi tuong cho truoc? message.parameters=Thong so Macro: Nhung doi tuong can lay thong so? message.plumb.first=Vuong goc: Doi tuong can lay vuong goc? message.plumb.second=Vuong goc: Diem thuoc duong thang vuong goc voi doi tuong cho truoc? message.point=Diem: Chon 1 diem (Shift: Co dinh diem)! message.quadric=Duong Conic: Diem thu message.range.first=Set range: Draw the circle from which point... message.range.second=Set range: ...to which point? message.ray.first=Tia: Diem goc? message.ray.second=Tia: Diem thu hai thuoc tia? message.rename=Chon doi tuong can thay doi ten ! message.reorder=Sap xep doi tuong: Chon doi tuong sap xep! message.runmacro=Macro %: %. % - % message.runmacro.fixes=(Shift: De co dinh) message.runmacro.return=(Nhan SPACE tuy chon %) message.savejob.first=Define Assignment: Last displayed object? message.savejob.second=Define Assignment: Target object (shift: don't check)? message.savejob.third=Define Assignment: Further objects to be displayed? message.saving=Vui long cho! message.segment.first=Doan thang: Diem thu nhat? message.segment.second=Doan thang: Diem thu hai (Shift: Co dinh chieu dai doan thang)? message.setaway.away=Keep the intersection away from which point? message.setaway.close=Keep the intersection close to which point? message.setcenter=Chon diem nam giua! message.setfixedangle.first=Thiet lap goc co dinh: Diem thu nhat? message.setfixedangle.second=Thiet lap goc co dinh: Diem thu hai? message.setfixedangle.third=Thiet lap goc co dinh: Diem thu ba? message.setfixedcircle.first=Thiet lap hinh tron co dinh: Diem thu nhat? message.setfixedcircle.second=Thiet lap hinh tron co dinh: Diem thu hai? message.targets=Macro Targets: Target objects? message.text=Ghi chu: Chon vi tri dat ghi chu! message.tracker.move=Track: Move the point! message.tracker.select=Track: Point or line to track (shift: more)? message.tracker.selectpoint=Track: Point to move? message.zoom=Di chuyen nut cuon tren chuot de phong to / thu nho minfontsize.prompt=Kich thuoc font nho nhat (Mac dinh: 12) minlinesize.prompt=Do day nho nhat cua duong thang (Mac dinh: 1) minpointsize.prompt=Kich thuoc nho nhat cua diem (Mac dinh: 3) myfiledialog.back=Quay lai myfiledialog.dir=Muc luc myfiledialog.file=Tap tin myfiledialog.homedir=Tap tin CaR myfiledialog.mkdir=Soan thao muc luc myfiledialog.oldfiles=Tap tin cu myfiledialog.pattern=Extensions myfiledialog.windowshome=My Documents name.Angle=Goc name.Circle=Hinh tron name.Circle3=Hinh tron name.Expression=Bieu thuc name.FixedAngle=Goc co dinh name.Intersection=Giao diem name.Line=Duong thang name.Midpoint=Trung diem name.OtherIntersection=Giao diem name.Parallel=Duong thang song song name.Plumb=Duong thang vuong goc name.Point=Diem name.PointOn=Doi tuong diem name.Polygon=Hinh da giac name.Quadric=Duong Conic name.Ray=Tia name.Segment=Doan thang name.TwoPointLine=Duong thang di qua 2 diem name.short.Angle=a name.short.Circle=c name.short.Circle3=c name.short.Expression=E name.short.Function=f name.short.Intersection=I name.short.Line=l name.short.Midpoint=M name.short.OtherIntersection=I name.short.Parallel=pl name.short.Plumb=p name.short.Point=P name.short.PointOn=OP name.short.Polygon=poly name.short.Quadric=Q name.short.Ray=r name.short.Segment=s name.short.Track=Tr no=Khong objects.angle=Goc objects.animate=Hieu ung objects.area=Hinh da giac objects.boundedpoint=Diem thuoc doi tuong objects.circle=Hinh tron objects.circle3=Hinh tron qua 3 diem objects.definejob=Define an Assignment objects.delete=Xoa doi tuong va doi tuong con cua no objects.draw=Ve voi chuot objects.edit=Chinh sua diem objects.expression=Arithmetic Expression objects.fixedangle=Goc co dinh objects.fixedcircle=Hinh tron voi kich thuoc co dinh objects.fixedsegment=Doan thang voi do dai co dinh objects.hide=An doi tuong objects.image=Tai hinh (_) objects.intersection=Giao diem objects.line=Duong thang objects.midpoint=Trung diem objects.move=Di chuyen diem objects.objecttracker=Track a Point or a Line on an Object objects.parallel=Duong thang song song objects.parameter=Thiet lap thong so Macro objects.plumb=Duong thang vuong goc objects.point=Diem objects.quadric=Duong Conic objects.ray=Tia objects.rename=Thay doi ten... objects.reorder=Sap xep doi tuong objects.runmacro=Chay Macro objects.segment=Doan thang objects.targets=Set Macro Targets objects.text=Ghi chu objects.tracker=Track a Point or a Line objects.zoom=Phong to / Thu nho bang chuot objectsedit.title=Chinh sua thuoc tinh ok=Dong y pattern=*.zir *.job *.xml pattern.bitmap=*.bmp pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.macro=*.mcr pattern.run=*.run point.type.circle=Hinh tron point.type.cross=Dang dau + point.type.dcross=Dang dau x point.type.diamond=Hinh thoi point.type.dot=Dang dau . point.type.square=Hinh vuong popup.empty=--- Macros --- popup.hidden=Hien thi doi tuong an popup.replay=Xem lai cach dung hinh printscaler.aspect=Keep Aspect Ratio printscaler.dpi=Resolution (in dpi, default 300) printscaler.h=Chieu cao (theo pixel) printscaler.height=Chieu cao (theo cm) printscaler.latex=Luu dang LaTeX printscaler.linewidth=Do day duong thang (theo cm , mac dinh 0.02) printscaler.middle=Cut out from screen printscaler.pointsize=Kich thuoc diem (theo cm, mac dinh 0.07) printscaler.preset=Make a Choice printscaler.preset.300dpi=Co gian ra 300DPI printscaler.preset.300dpi12=12 cm width with 300 DPI printscaler.preset.300dpi16=16 cm Width with 300 DPI printscaler.preset.300dpi6=6 cm Width with 300 DPI printscaler.preset.clip50=Window Size Clipped 50% printscaler.preset.latex10=LaTeX 10pt printscaler.preset.window=Kich thuoc cua so printscaler.presets=Thiet lap so bo printscaler.scale=Scale (relativ to screen) printscaler.screen=300 DPI printscaler.sizes=Nhap gia tri printscaler.textsize=Kich thuoc (theo cm, mac dinh 0.3) printscaler.title=Thiet lap kich thuoc printscaler.w=Chieu rong (theo pixel) printscaler.width=Chieu rong (theo cm) program.date=2006-11 program.name=C.a.R program.version=5.2 prompt.angle==a(,,) prompt.area=A(,,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.function=function(,,,,,) prompt.image=image(,,,) prompt.intersection==I(,) prompt.line==l(,) prompt.midpoint==M(,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.point==P prompt.pointon==P() prompt.quadric=quadric(,,,,) prompt.ray==r(,) prompt.segment==s(,) question.again=HOi lai lan sau. question.intersection=Tao giao diem? question.pointon=Tao diem thuoc doi tuong do? question.title=Cau hoi renamemacro.name=Ten moi cua Macro renamemacro.title=Doi ten Macro reorder.message=Chen vao phia sau reorder.notfound=Doi tuong khong hop le! reorder.title=Push objects reorder.warning=Could not do that! replay.title=Xem lai save=Luu savequestion.qsave=Ban co muon luu tap tin? savequestion.title=Luu select.all=Tat ca select.cancel=Huy bo select.comment=Hien thi ghi chu select.comment.title=Ghi chu Macro select.ok=Dong y select.title=Tuy chon selectionsize.prompt=Tuy chon kich thuoc (mac dinh: 1.5) setgrid.prompt=Nhap vao chieu rong cua luoi setgrid.set=Thiet lap setgrid.title=Grid Width shortcuts.angle=a shortcuts.animate=" shortcuts.area=0 shortcuts.boundedpoint=5 shortcuts.circle=c shortcuts.circle3=3 shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.definejob=6 shortcuts.delete=Del shortcuts.draw=; shortcuts.edit=e shortcuts.expression=x shortcuts.fixedangle=. shortcuts.fixedcircle=, shortcuts.fixedsegment=# shortcuts.hide=h shortcuts.image=_ shortcuts.intersection=i shortcuts.line=g shortcuts.midpoint=4 shortcuts.move=m shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.parameter=7 shortcuts.plumb=2 shortcuts.point=p shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) shortcuts.quadric=$ shortcuts.ray=r shortcuts.rename=: shortcuts.reorder=! shortcuts.runmacro=9 shortcuts.segment=s shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.targets=8 shortcuts.text=b shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) shortcuts.tracker=t shortcuts.zoom=% sizesdialog.title=Kich thuoc sure.delete=Khong luu cac thay doi? sure.macros=Xoa tat ca cac Macro da dinh nghia? sure.title=Are you sure? templateload.open=Load Template templateload.open.action=Mo text.angle=Goc % - % - % text.angle.fixed=Goc % - % - % voi do lon % text.area=Hinh da giac text.boundedpoint=Diem % text.circle=Hinh tron tam % qua % text.circle.fixed=Hinh tron tam % qua % , co ban kinh % text.circle3=Hinh tron tam % voi ban kinh tu % den % text.expression=Bieu thuc "%" tai %, % text.fixedangle=Goc % - % voi do lon % text.fixedcircle=Hinh tron tam %, ban kinh % text.function=Ham so (%,%) text.intersection=Giao diem cua % va % text.line=Duong thang qua % va % text.midpoint=Trung diem cua % va % text.parallel=Duong thang qua % va song song voi % text.plumb=Duong thang qua % va vuong goc voi % text.point= (%,%) text.quadric=Duong Conic qua % text.ray=Tia tu % qua % text.segment=Doan thang tu % den % text.segment.fixed=Doan thang tu % den % va co do dai % text.track=Track of % when % moves on % text.trackof=Track of % when % changes title=School Geometry trackquestion.keep=Keep Track in Construction? trackquestion.title=Keep Track true=Dung version=Phien ban warning.loadbackground=Loi! Khong the tai hinh nen warning.loadmacros=Loi! Khong the tai 1 Macro rong warning.macrodefinition=% dang duoc su dung , nhung no khong co trong Macro warning.nojob=This isn't an Assignment! warning.preview=Khong chay duoc tren Java 1.1 warning.previewframe=Frame larger than window! warning.print=In bi loi! warning.reset=Chuc nang nay se duoc thiet lap sau lan mo chuong trinh ke tiep! yes=Dong y ./src/rene/zirkel/docs/ZirkelProperties_it.properties0000770000175000017500000011206310571557124022062 0ustar yvesyveslanguage=it_ version=Versione homefile=index.html homepage=http://www.z-u-l.de/ about.title=Informazioni sul programma about.name=Geometria per la scuola about.programmed=Programmato da title=Geometria per la scuola close=Chiudi ok=OK cancel=Cancella done=Ben Fatto! message=Messaggio yes=Si no=No abort=Annulla true=vero false=falso warning.nojob=Questo non un problema! warning.print=Stampa fallita! warning.reset=Questa opzione sar abilitata al prossimo avvio di C.a.R.! question.title=Domanda question.intersection=Creare questa intersezione? question.pointon=Creare un punto su questo oggetto? colors.black=Nero colors.blue=Blu colors.green=Verde colors.brown=Marrone colors.cyan=Azzurro colors.red=Giallo objects.point=Punto objects.segment=Segmento objects.line=Retta objects.ray=Semiretta objects.circle=Circonferenza objects.intersection=Intersezione objects.move=Muovi punto objects.hide=Mostra/Nascondi oggetto objects.edit=Edita Punto objects.tracker=Traccia Punto o Retta objects.objecttracker=Traccia Punto o Retta su un oggetto objects.parallel=Retta Parallela objects.plumb=Retta Perpendicolare objects.circle3=Circonferenza da 3 punti objects.midpoint=Punto medio objects.quadric=Conica per 5 punti objects.angle=Angolo objects.boundedpoint=Punto su un oggetto objects.parameter=Imposta oggetti iniziali objects.targets=Imposta oggetti finali objects.definejob=Definisci un problema objects.runmacro=Esegui Macro objects.delete=Cancella oggetto e dipendenti objects.reorder=Porta oggetto sullo Sfondo objects.animate=Animazione objects.expression=Espressione Aritmetica objects.area=Poligono objects.text=Testo objects.fixedcircle=Circonferenza di raggio fissato objects.fixedangle=Angolo di misura fissata objects.fixedsegment=Segmento di lunghezza fissata iconhelp.point=Punto (p) iconhelp.segment=Segmento (s) iconhelp.line=Retta (g) iconhelp.ray=Semiretta (r) iconhelp.circle=Circonferenza (c) iconhelp.intersection=Intersezione (i) iconhelp.move=Muovi un punto (m)+Ctrl (Points): Mostra la vecchia costruzione+Ctrl: Muovi oggetti fissati iconhelp.hide=Mostra/Nascondi oggetto (h)+Shift: Nascondi completamente iconhelp.edit=Edita oggetti (e)+Shift: Edita pi oggetti+Ctrl: Edita ultimo oggetto iconhelp.tracker=Traccia di un punto o di una retta (t) iconhelp.objecttracker=Traccia automatica di un punto o di una retta (o) iconhelp.parallel=Retta parallela (1) iconhelp.plumb=Retta perpendicolare (2) iconhelp.circle3=Circonferenza da 3 Punti (3) iconhelp.midpoint=Punto medio (4) iconhelp.quadric=Conica per 5 punti ($) iconhelp.angle=Angolo (a) iconhelp.boundedpoint=Crea un punto su un oggetto (5)+Shift: Non fissato sull'oggetto iconhelp.hidden=Mostra oggetti nascosti (F9) iconhelp.color=Imposta il colore degli oggetti (Ctrl-1,2,3,4) iconhelp.type=Imposta stile punto (Ctrl-5,6,7,8,9,0) iconhelp.type0=Imposta stile punto iconhelp.thickness=Imposta lo spessore degli oggetti (Alt-5,6,7) iconhelp.back=Cancella ultimo oggetto (<-) iconhelp.thickness0=Spessore iconhelp.partial=Circonferenze parziali (Ctrl-F9) iconhelp.plines=Rette parziali (Ctrl-F10) iconhelp.arrow=Disegna vettore per segmento (Ctrl-F11) iconhelp.showcolor=Mostra solo i colori selezionati (Alt-1,2,3,4) iconhelp.runmacro=Esegui Macro (9)+Ctrl: Esegui ultima Macro iconhelp.macro=Imposta oggetti iniziali, oggetti finali e definizione di una macro (7,8,Ctrl-F5) iconhelp.expression=Espressione aritmetica (x) iconhelp.showvalue=Mostra il valore degli oggetti (Ctrl-F7) iconhelp.showname=Mostra il nome degli oggetti (Ctrl-F6) iconhelp.obtuse=Usa angoli concavi(Ctrl-F12) iconhelp.solid=Disabilita trasparenza iconhelp.longnames=Nomi estesi per gli oggetti (Ctrl-F8) iconhelp.grid=Mostra la griglia (F12) iconhelp.comment=Edita commento (F10) iconhelp.defaults=Impostazioni predefinite iconhelp.macro0=Imposta punti iniziali, punti finali e definizione di una macro iconhelp.visual=Modalit visuale di costruzione iconhelp.replay=Riproduci costruzione iconhelp.oneforward=Avanti iconhelp.fastforward=Avanti veloce iconhelp.allforward=Alla fine iconhelp.oneback=Indietro iconhelp.fastback=Indietro veloce iconhelp.allback=All'inizio iconhelp.close=Chiudi iconhelp.area=Poligono (0) iconhelp.text=Testo multilinea (b) iconhelp.fixedcircle=Circonferenza di raggio fissato (,) iconhelp.fixedangle=Angolo di misura fissata (.) iconhelp.fixedsegment=Segmento di lunghezza fissata (#) iconhelp.animate=Animazione di un punto (") iconhelp.delete=Cancella oggetto e dipendenti (Del) iconhelp.undo=Annulla cancella (Ctrl-z) iconhelp.nextbreak=Salta alla prossima interruzione iconhelp.setbreak=Imposta interruzione+Shift: Cancella interruzione iconhelp.zoom=Zoom con il mouse (%) shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.showcolor.4= shortcuts.showcolor.5= shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) menu.file=File menu.file.clearmacros=Cancella Macro personali menu.file.load=Apri ... (Ctrl-o) menu.file.loadjob=Apri Problema ... (Ctrl-j) menu.file.savejob=Salva Problema ... (Ctrl-k) menu.file.save=Salva Costruzione (Ctrl-s) menu.file.saveas=Salva Costruzione con nome ... (Ctrl-a) menu.file.includemacros=Includi tutte le Macro menu.file.exit=Esci (Alt-F4) menu.file.print=Stampa ... menu.file.print.isoscale=Scala 1:1 in cm menu.file.savebmp=Salva grafico come BMP ... menu.file.savefig=Salva grafico come FIG ... menu.file.loadrun=Apri Costruzione Descrittiva ... (Ctrl-r) menu.file.editrun=Modifica Costruzione Descrittiva ... (Ctrl-x) menu.actions=Azioni menu.actions.elementary=Strumenti elementari menu.actions.complex=Strumenti complessi menu.actions.move=Strumenti per il movimento menu.actions.decorative=Oggetti decorativi menu.options=Opzioni menu.options.visual=Modalit visuale di costruzione menu.options.hidden=Mostra oggetti nascosti (F9) menu.options.comment=Edita commento (F10) menu.options.constructiondisplay=Mostra lista oggetti menu.options.grid=Mostra griglia (F12) menu.options.setgrid=Imposta larghezza griglia ... menu.options.showcolor=Mostra oggetti di colore menu.options.defaultcolor=Colore menu.options.defaultthickness=Spessore menu.options.defaulttype=Stile punto menu.options.all=Tutti menu.options.setdigits=Imposta cifre menu.options.shownames=Mostra il nome degli oggetti (Ctrl-F6) menu.options.longnames=Nomi estesi per gli oggetti(Ctrl-F8) menu.options.obtuse=Usa angoli concavi(Ctrl-F12) menu.options.solid=Disabilita trasparenza menu.options.showvalues=Mostra il valore degli oggetti (Ctrl-F7) menu.options.partial=Circonferenze parziali (Ctrl-F9) menu.options.plines=Rette parziali (Ctrl-F10) menu.options.arrow=Disegna vettore per segmento (Ctrl-F11) menu.options.editicons=Personalizza Barra Icone menu.options.back=Cancella ultimo oggetto (<-) menu.options.undo=Annulla cancella (Ctrl-z) menu.zoom=Zoom menu.zoom.in=In (+) menu.zoom.out=Out (-) menu.zoom.left=Sinistra (Freccia-Sinistra) menu.zoom.right=Right (Freccia-Destra) menu.zoom.up=Alto (Freccia-Su) menu.zoom.down=Basso (Freccia-Gi) menu.macros=Macro menu.special.definemacro=Definisci Macro (Ctrl-F5) menu.special.runmacro=Esegui Macro ... (F5) menu.special.savemacros=Salva Macro ... menu.special.loadmacros=Carica Macro ... menu.special.deletemacros=Cancella Macro ... menu.special=Speciale menu.special.testjob=Testa Problema (Ctrl-F1) menu.special.jobcomment=Imposta testo Problema ... (F8) menu.special.export=Crea un file HTML ... (Ctrl-e) menu.special.replay=Riproduci costruzione menu.help=Guida menu.help.about=Informazioni sul programma menu.help.browser=Esempi e Documentazione menu.help.text=Guida veloce menu.help.configure=Imposta il Browser menu.help.help=Guida (F1) menu.help.macros=Macro menu.help.tools=Strumenti menu.help.gui=Interfaccia utente menu.help.interactive=Costruzioni Descrittive menu.help.tips=Alcuni suggerimenti menu.settings=Impostazioni avanzate menu.settings.fullicons=Usa Barre Icone complete menu.settings.utf=Usa codifica UTF-8 menu.settings.autohide=Nascondi il secondo punto di intersezione menu.settings.iconbartop=Barra delle icone sopra la costruzione menu.settings.showtips=Mostra descrizione strumenti menu.settings.simplegraphics=Usa Grafici pi semplici menu.settings.sure=Chiedi conferma prima di aprire o chiudere menu.settings.pointon=Chiedi prima di creare un punto su un oggetto menu.settings.intersection=Chiedi prima di creare una intersezione menu.settings.choice=Mostra la finestra di dialogo per la selezione menu.settings.movename=Mostra il valore degli oggetti durante il trascinamento menu.settings.movefixname=Mostra il valore fissato degli oggetti durante il trascinamento menu.settings.restricted=Modalit scolastica menu.colors=Colori colors.default=Usa colori predefiniti colors.color0=Colore 1 (Bianco) colors.color1=Colore 2 (Verde) colors.color2=Colore 3 (Blu) colors.color3=Colore 4 (Marrone) colors.color4=Colore 5 (Azzurro) colors.color5=Colore 6 (Rosso) colors.background=Sfondo colors.select=Seleziona colors.target=Target myfiledialog.dir=Cartella myfiledialog.file=File myfiledialog.pattern=Estensione filedialog.open=Apri filedialog.saveas=Salva con nome ... filedialog.open.action=Apri filedialog.saveas.action=Salva filedialog.htmlsave=Salva HTML filedialog.htmlsave.action=Salva pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Salva load=Apri abort=Annulla bound.release=Rilascia punto bound.bind=Vincola all'oggetto bound.error=Oggetto non trovato, intersecare prima! constructiondisplay.edit=Edita oggetto constructiondisplay.copy=Copia negli appunti # FINESTRE DI DIALOGO EDITA OGGETTI edit.Title=Propriet edit.name=Nome edit.hidden=Nascosto edit.text=Descrizione edit.fixed=Fissato edit.color=Colore edit.ok=OK edit.cancel=Cancella edit.showname=Mostra nome edit.point.title=Edita Punto edit.point.type=Stile edit.point.x=X edit.point.y=Y edit.point.intersection=Diverso da edit.point.showvalue=Mostra coordinate edit.point.colortype=Spessore edit.point.bound=Vincolato a edit.point.away=Lontano da edit.point.close=Vicino a edit.point.free=Free edit.line.title=Edita Retta, Semiretta, Segmento edit.line.normal=Normale edit.line.thick=Spesso edit.line.thin=Sottile edit.line.invisible=Invisibile edit.line.type=Stile edit.segment.length=Lunghezza edit.segment.showvalue=Mostra lunghezza edit.circle.title=Edita Circonferenza edit.circle.length=Raggio edit.circle.partial=Mostra parziale edit.plumb.restricted=Restrizione edit.angle.title=Edita Angolo edit.angle.length=Misura edit.angle.displaysize=Mostra misura edit.angle.normal=Normale edit.angle.small=Piccolo edit.angle.large=Grande edit.expression.title=Edita Espressione edit.expression=Espressione aritmetica edit.expression.prompt=Spiegazione edit.area.title=Edita Poligono edit.area.back=Sullo sfondo # FINESTRA DI DIALOGO ESPORTA HTML export.title=Esporta HTML export.pagetitle=Titolo della pagina export.width=Larghezza export.height=Altezza export.jar=File Jar export.comment=Mostra commento export.file=File con la costruzione export.job=Mostra come Problema export.color=Colore export.backgroundcolor=Usa per lo sfondo della pagina export.appletcolor=Usa per lo sfondo dell'applet export.plain=Piatto export.3D=Bordo export.breaks=Riproduci con i punti di interruzione export.icons=Bordo e Icone export.full=Bordo, Icone e Stato export.nonvisual=Bordo, Icone e Riga di input export.style=Stile applet export.setcolor=Scegli colore export.savefirst=Il file non stato salvato! export.soltext=Soluzione export.stylesheet=File di stile CSS export.solution=File con la soluzione export.jumpsol=Salta alla soluzione export.linksol=Collega alla soluzione export.savesol=Salva il file soluzione export.track=Traccia Punto export.digits=Salva cifre export.setsize=Fissa dimensione export.signature=Creato con C.a.R. export.colors=Salva colori definiti export.background=Salva sfondo definito help.title=Guida help.error=Non possibile aprire la guida! help.file=schoolgeometry.txt # FINESTRA DI DIALOGO COLORE coloreditor.title=Modifica colore coloreditor.red=Rosso coloreditor.green=Verde coloreditor.blue=Blu coloreditor.color=Colore # FINESTRA DI DIALOGO EDITA COMMENTO comment.title=Commento alla costruzione comment.set=Imposta comment.cancel=Cancella comment.close=Chiudi # FINESTRA DI DIALOGO PERSONALIZZA BARRA ICONE iconedit.title=Modifica Barra Icone iconedit.twobars=Barra delle icone su due righe jobcomment.title=Problema select.title=Selezione select.ok=OK select.cancel=Cancella select.comment=Mostra commento select.all=Tutto #RIGA DI STATO message.circle.midpoint=Circonferenza: centro? message.circle.radius=Circonferenza: punto sulla circonferenza (Shift: raggio fissato)? message.fixedcircle.midpoint=Circonferenza di raggio fissato: centro? message.fixedcircle.radius=Circonferenza di raggio fissato: raggio? message.line.first=Retta: primo punto? message.line.second=Retta: secondo punto? message.ray.first=Semiretta: origine? message.ray.second=Semiretta: secondo punto? message.move.select=Muovi: seleziona un oggetto(Shift: selezione multipla)! message.move.move=Muovi: muovi il punto? message.point=Punto: imposta un punto(Shift: fisso)! message.segment.first=Segmento: primo punto? message.segment.second=Segmento: secondo punto (Shift: lunghezza fissata)? message.fixedsegment.first=Segmento di lunghezza fissata: primo punto? message.fixedsegment.second=Segmento di lunghezza fissata: clicca dove vuoi! message.intersection.first=Intersezione: primo oggetto o intersezione? message.intersection.second=Intersezione: secondo oggetto? message.hide=Mostra/Nascondi: seleziona un oggetto(Shift: nascondi completamente)! message.tracker.select=Traccia: punto o retta traccianti (Shift: selezione multipla)? message.tracker.selectpoint=Traccia: punto da muovere? message.tracker.move=Traccia: muovi il punto! message.objecttracker.select=Traccia automatica: punto o retta traccianti (Shift: selezione multipla)? message.objecttracker.object=Traccia automatica: su quale retta o cerchio il punto da muovere? message.objecttracker.selectpoint=Traccia automatica: punto da muovere? message.objecttracker.selectanypoint=Traccia automatica: un altro punto da muovere? message.objecttracker.move=Traccia automatica: muovi il punto! message.objecttracker.start=Traccia automatica: inizia l'animazione! message.parallel.first=Parallela: retta? message.parallel.second=Parallela: punto? message.plumb.first=Perpendicolare: retta? message.plumb.second=Perpendicolare: punto? message.circle3.first=Circonferenza: primo punto del raggio? message.circle3.second=Circonferenza: secondo punto del raggio? message.circle3.midpoint=Circonferenza: centro? message.midpoint.first=Punto medio: primo punto? message.midpoint.second=Punto medio: secondo punto? message.quadric=Conica: punto numero message.angle.first=Angolo: primo punto? message.angle.root=Angolo: vertice? message.angle.second=Angolo: secondo punto (Shift: misura fissata)? message.fixedangle.first=Angolo di misura fissata: primo punto? message.fixedangle.root=Angolo di misura fissata: vertice? message.fixedangle.second=Angolo di misura fissata: clicca dove vuoi! message.label.select=Muovi etichetta: seleziona etichetta! message.label.move=Muovi etichetta: muovi etichetta! message.boundedpoint=Punto su oggetto: Circonferenza o retta (Shift: non fissato)? message.parameters=Oggetti iniziali macro: oggetti iniziali? message.targets=Oggetti finali macro: oggetti finali? message.savejob.first=Definisci Problema: ultimo oggetto della figura data? message.savejob.second=Definisci Problema: oggetto da costruire (Shift: non controllare)? message.savejob.third=Definisci Problema: ulteriori oggetti da mostrare? message.runmacro=Macro %: %. % - % message.runmacro.return=(SPACE seleziona %) message.runmacro.fixes=(Shift fissa selezione) message.delete=Cancella: seleziona un oggetto! message.reorder=Porta oggetto sullo sfondo: seleziona un oggetto! message.expression=Espressione aritmetica: seleziona una posizione! message.area=Poligono pieno: Punto? message.text=Testo: seleziona una posizione! message.animator.point=Animazione: punto da animare? message.animator.segment=Animazione: Circonferenza o segmento? message.animator.running=Animazione: Esegui (click per fermare)! message.range.first=Imposta range: Traccia un arco da questo punto ... message.range.second=Imposta range: ... a questo punto? message.setaway.away=Mantieni l'intersezione lontano da questo punto? message.setaway.close=Mantieni l'intersezione vicino a questo punto? objectsedit.title=Edita propriet point.type.square=Quadrato point.type.diamond=Rombo point.type.circle=Circolo point.type.dot=Punto color.type.normal=Normale color.type.thick=Spesso color.type.thin=Sottile color.type.invisible=Invisibile # DESCRIZIONE OGGETTI NELLA FINESTRA COSTRUZIONE text.point=Punto in %, % text.line=Retta per % e % text.segment=Segmento da % a % text.segment.fixed=Segmento da % a % di lunghezza % text.ray=Semiretta da % puntando a % text.intersection=Intersezione tra % e % text.circle=Circonferenza di centro % per % text.circle.fixed=Circonferenza di centro % per % di raggio % text.fixedcircle=Circonferenza di centro % e raggio % text.circle3=Circonferenza di centro % di raggio da % a % text.parallel=Retta parallela per % a % text.midpoint=Punto medio tra % e % text.quadric=Conica per % text.plumb=Retta perpendicolare per % a % text.angle=Angolo % - % - % text.angle.fixed=Angolo % - % - % di misura % text.boundedpoint=Punto su % text.expression=Espressione "%" in %, % text.area=Poligono text.fixedangle=Angolo % - % di musura % # NOMI OGGETTI NELLA FINESTRA COSTRUZIONE name.Point=Punto name.Intersection=Intersezione name.OtherIntersection=Intersezione name.Circle=Circonferenza name.Circle3=Circonferenza name.Segment=Segmento name.Ray=Semiretta name.Line=Retta name.TwoPointLine=Retta per due punti name.Parallel=Parallela name.Midpoint=Medio name.Quadric=Conica name.Plumb=Perpendicolare name.Angle=Angolo name.PointOn=PuntoSuOggetto name.Expression=Espressione name.Polygon=Poligono # RIGA DI COMANDO prompt.point=P prompt.pointon=P() prompt.line=l(,) prompt.segment=s(,) prompt.ray=r(,) prompt.circle=c(,) prompt.circle3=c(,,) prompt.intersection=I(,) prompt.midpoint=M(,) prompt.quadric=Q(,,,,) prompt.parallel=pl(,) prompt.plumb=p(,) prompt.angle=a(,,) prompt.area=A(,,) prompt.quadric=conica(,,,,) prompt.function=funzione(,,,,,) name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=pl name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=p name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=pol name.short.Function=f popup.hidden=Mostra oggetti popup.replay=Riproduci costruzione popup.empty=--- Macro --- replay.title=Riproduci reorder.title=Porta oggetto sullo sfondo reorder.message=Davanti all'oggetto reorder.notfound=Oggetto non trovato! reorder.warning=Operazione non valida! setgrid.title=Larghezza griglia setgrid.prompt=Inserisci larghezza griglia setgrid.set=Imposta definemacro.title=Definisci Macro definemacro.name=Nome definemacro.comment=Commento alla macro definemacro.noparams=Sono necessari i punti iniziali per la macro! definemacro.nomacro=Non ci sono macro da eseguire! definemacro.targetsonly=Nascondi costruzione definemacro.invisible=Nascondi completamente definemacro.promptfor=Prompt per macro.replace.title=Sostituzione macro macro.replace=Sostituire macro: macro.replace.all=Tutto macro.usage=Uso errato della macro (vedi suggerimenti)! macro.prompt.title=Parametri al prompt macro.prompt.prompt=Inserisci un valore per il parametro! macro.prompt.illegal=Valore non valido! digits.title=Imposta cifre digits.edit=Edita digits.lengths=Mostra digits.angles=Angoli editrun.title=Edita costruzione descrittiva editrun.run=Salva ed esegui editrun.load=Ulteriore Descrizione sure.title=Sei sicuro? sure.macros=Cancellare tutte le macro dell'utente? sure.delete=Annullare i cambiamenti? close.title=Esci close.prompt=Vuoi veramente chiudere il programma? file.exists.title=File esistente file.exists.overwrite=File esistente! Sovrascrivere? exception.nparams=Numero di parametri non valido! exception.notfound=Oggetto non trovato o definito dopo l'espressione! exception.type=Tipo di oggetto non valido! exception.expression=Espressione non valida! exception.canfix=L'oggetto non pu essere fissato! exception.fix=Valore non valido! exception.novalue=Valore non valido! exception.elementary=Elemento non valido nell'espressione! exception.bracket=Mancano parentesi! exception.quotes=Mancano virgolette! exception.dot=Due virgole nel numero! exception.nodigit=Non ci sono cifre nel numero! exception.function=Funzione sconosciuta! exception.parameter=Parametri funzione non validi! exception.macro=Parametri macro non validi! exception.name=Si richiede un nome! exception.job=Parametri problema non validi! exception.track=Parametri traccia non validi! exception.animate=Parametri animazione non validi! exception.boolean=Un valore booleano deve essere true o false! exception.value=Valore non valido! exception.color=Colore non valido! exception.colortype=Spessore non valido! exception.type=Stile punto non valido! exception.macroparameter=Punti iniziali Macro non validi! exception.macrotarget=Punti finali macro non validi! exception.prompt=Oggetto prompt non valido! exception.prompt.parameter=L'oggetto prompt non deve essere un parametro! exception.parameters=Parametro non valido! exception.brackets=Parentesi non valide! exception.double=Il nome ripetuto! error.setaway=Questo punto non definito prima dell'intersezione! error.objecttracker.depends=Il punto legato a un altro oggetto! constructiondisplay.title=Lista oggetti #COMANDI PER COSTRUZIONE DESRITTIVA function.hide=Nascondi function.hide.short=nascondi function.rename=Nome function.rename.short=nome function.value=Valore function.value.short=valore function.window=Finestra function.window.short=F function.color=Colore function.color.short=col function.thickness=Spessore function.thickness.short=sp function.type=Stile function.type.short=stile function.partial=Parziale function.partial.short=parz function.fill=Pieno function.fill.short=pieno function.back=Sfondo function.back.short=sfondo function.acute=Acuto function.acute.short=acuto function.obtuse=Concavo function.obtuse.short=concavo function.solid=Solido function.solid.short=solido function.restrict=Arco function.restrict.short=arco function.away=Lontano function.away.short=lontano expression.value=Valore configure.title=Imposta Browser configure.prompt=Inserisci comando Browser # New Resources: background.error=Non possibile aprire l'immagine (GIF o JPG!). menu.background=Sfondo menu.background.grab=Attuale come Background menu.background.clear=Pulisci sfondo menu.background.load=Carica immagine di sfondo ... menu.background.usesize=Ridimensiona all'immagine menu.background.tile=Rivesti sfondo menu.background.center=Centra sfondo iconhelp.grab=Imposta o pulisci sfondo filedialog.backgroundload=Apri sfondo filedialog.backgroundload.action=Apri # New Resources in Version 2.14 menu.file.compress=Comprimi sempre menu.file.savesvg=Salva Grafico(come SVG) ... # Version 2.15 loading=Caricamento, per favore attendere! # Version 2.18 and 2.19 menu.settings.font.default=Carattere predefinito menu.settings.font.bold=Carattere grassetto menu.settings.font.large=Dimensione carattere grande menu.file.saveeps=Salva grafico (come EPS) ... menu.fonts=Carattere # Version 2.20 bmpscaler.title=Scala Bitmap bmpscaler.width=Larghezza bmpscaler.height=Altezza bmpscaler.scale=Fattore (premi Invio) bmpscaler.illegal=Valore non valido # Version 2.21 renamemacro.title=Rinomina macro renamemacro.name=Nuovo nome macro menu.special.renamemacro=Rinomina Macro ... # Version 2.23 savequestion.title=Salva costruzione savequestion.qsave=Salvare i cambiamenti? # Version 2.25 exception.printsize=Pagina troppo piccola per questa costruzione! iconhelp.nohelp=Guida non disponibile iconhelp.type?=Stile punto iconhelp.thickness?=Spessore iconhelp.color?=Colore iconhelp.filled=Oggetto pieno iconhelp.isback=Disegna sullo sfondo iconhelp.inverse=Angolo riflesso iconhelp.angle?=Dimensione # Version 2.28 message.objecttracker.stop=Traccia automatica: clicca per fermare (Shift+freccia sinistra/destra per regolare velocit)! # Version 2.31 menu.settings.indicate=Anteprima oggetti generati menu.options.other=Impostazioni menu.help.welcome=Novit della versione corrente iconhelp.twolines=Icone su due righe iconhelp.qintersection=Chiedi conferma per intersezione iconhelp.qchoice=Mostra finestra di dialogo di selezione iconhelp.qpointon=Chiedi conferma per creare punto su oggetto iconhelp.noindicate=Non indicare oggetti sotto il mouse # Version 2.33 menu.file.new=Nuova costruzione (Ctrl-n) # Version 2.34 edit.text.title=Impostazioni testo edit.text.settings=Impostazioni ulteriori menu.settings.filedialog=Rimpiazza finestre di dialogo di sistema # Version 2.35 menu.settings.bitmapbackground=Usa colore di sfondo nelle Bitmap # Version 2.36 menu.file.savegraphics=Salva Grafico con nome ... bmpscaler.title=Scala Grafico # Version 2.37 menu.file.savepdf=Salva Grafico (come PDF) iconhelp.chord=Mostra come segmento # Version 2.39 message.setfixedangle.first=Angolo fissato: primo punto? message.setfixedangle.second=Angolo fissato: vertice? message.setfixedangle.third=Angolo fissato: terzo punto? edit.fixedangle.set=Imposta misura ... message.setfixedcircle.first=Circonferenza fissata: primo punto? message.setfixedcircle.second=Circonferenza fissata: secondo punto? edit.fixedcircle.set=Imposta raggio ... # Version 2.41 name.short.Track=Tr text.track=Traccia di % quando % varia su % trackquestion.keep=Mantenere traccia nella costruzione? trackquestion.title=Mantieni traccia menu.options.track=Mantieni traccia (Shift-Invio) iconhelp.indicate=Anteprima dei risultati della costruzione iconhelp.nohelp=Guida non disponibile! # Version 2.42 objects.draw=Disegna col mouse menu.options.cleardraw=Pulisci disegno(Esc) iconhelp.draw=Disegna col mouse message.draw=Disegna col mouse (ESC per pulire) shortcuts.draw=; # Version 2.43 message.rename=Rinomina A,B,C,...: seleziona oggetti! iconhelp.rename=Rinomina A,B,C,... objects.rename=Rinomina A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Non mostrare i lati dell'angolo # Version 2.45 menu.settings.smartboard=Modalit Smartboard shortcuts.zoom=% objects.zoom=Zoom con il mouse message.zoom=Trascina centro, o zoom in e out # Version 2.46 menu.special.restricticons=Barra icone ristretta # Version 2.47 menu.settings.indicate.simple=Indica solo punti menu.settings.beginner=Modalit principiante question.again=Poni sempre questa domanda. # Version 2.49 definemacro.parameters=Parametri Prompt(s) ("=nome" fissato) # Version 2.53 menu.actions.angles=Angoli menu.actions.circles=Circonferenze menu.actions.lines=Rette menu.actions.points=Punti # Version 3.00 info.title=Guida attiva info.related=Argomenti correlati info.notfound=Argomento non trovato! info.noresults=Stringa non trovata! info.searchresults=- Risultati ricerca - info.select=- Seleziona - info.search=Ricerca info.back=Indietro info.start=Inizio iconhelp.info=Guida attiva menu.help.info=Guida attiva myfiledialog.homedir=File CaR myfiledialog.windowshome=Documenti myfiledialog.mkdir=Nuova Cartella myfiledialog.back=Indietro menu.file.alwaysclearmacros=Cancella macro prima di aprire about.language=Lingua bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Backup # Version 3.02 menu.options.hideduplicates=Nascondi duplicati # Version 3.03 menu.options.function=Definisci funzione text.function=Funzione ( % , % ) function.varmin=Da function.varmax=A function.dvar=Passo function.var=Variabile function.y=Espressione per Y iconhelp.function=Definisci funzione menu.options.editlast=Edita ultimo oggetto iconhelp.control.edit=Edita ultimo oggetto iconhelp.control.hide=Nascondi duplicati edit.function.title=Funzione o curva iconhelp.control.runmacro=esegui ultima macro # Version 3.05 point.type.cross=Croce point.type.dcross=Croce diagonale shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Unit menu.special.break=Punti di interruzione menu.bp.setbreak=Imposta punti di interruzione menu.bp.clearbreak=Elimina punti di interruzione menu.bp.sethidingbreak=Imposta punti di interruzione nascosti menu.bp.animatebreak=Anima punti di interruzione iconhelp.animatebreak=Anima punti di interruzione message.animatebreak=Anima punti di interruzione: clicca per fermare (Shift+freccia sinistra/destra per regolare velocit)! menu.special.exporttemplate=Esportazione HTML con modello templateload.open=Apri modello templateload.open.action=Apri menu.settings.doubleclick=Doppio clic per le macro export.codebase=Codebase # Version 3.12 edit.equation=Equazione # Version 3.23 menu.settings.squarepoints=Disegna punti sempre come quadrati # Version 3.37 menu.options.export=Impostazioni esportazione Grafico menu.settings.minwidth=Lo spessore minimo per le linee 1 menu.settings.minpointsize=Rispetta dimensione minima punto menu.settings.minfontsize=Rispetta dimensione minima carattere menu.options.minpointsize=Dimensione minima punto menu.options.minfontsize=Dimensione minima carattere # Version 3.38 menu.settings.scalepdf=Scala output per PDF e EPS 1:1 # Version 3.41 menu.file.clip=Clip per output grafici ... clip.title=Imposta Clipping clip.width=Larghezza clip.height=Altezza clip.screen=No Clipping # Version 3.44 iconhelp.large=Dimensione carattere grande iconhelp.bold=Carattere grassetto menu.options.largefont=Dimensione carattere grande menu.options.boldfont=Carattere grassetto warning.previewframe=Frame grande come la finestra! message.move.select=Muovi: Seleziona un punto (Shift: selezione multipla, Ctrl: mostra lo stato iniziale) # Version 3.46 iconbar.showseparators=Mostra Separatori # Version 3.48 menu.options.printscaler=Impostazione dimensioni esportazione ... menu.options.exportsettings=Impostazioni avanzate di esportazione ... printscaler.title=Impostazione Dimensioni esportazione printscaler.width=Larghezza (in cm) printscaler.height=Altezza (in cm) printscaler.dpi=Risoluzione (in dpi, default 300) printscaler.linewidth=Spessore linea (in cm, default 0.02) printscaler.pointsize=Dimensione punto (in cm, default 0.07) printscaler.textsize=Dimensione testo (in cm, default 0.3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=Larghezza (in pixel) printscaler.h=Altezza (in pixel) printscaler.scale=Scala (relativa allo schermo) printscaler.middle=Ritaglia (non riscalare) printscaler.sizes=Usa valori menu.file.savepng=Salva Grafico come PNG warning.preview=L'anteprima non funziona completamente con Java 1.1 iconedit.showseparators=Mostra separatori printscaler.aspect=Mantieni proporzioni printscaler.presets=Formato printscaler.preset=Utente printscaler.preset.300dpi=Scalato a 300 DPI printscaler.preset.300dpi6=Larghezza 6 cm Definizione 300 DPI printscaler.preset.300dpi16=Larghezza 6 cm Definizione 300 DPI printscaler.preset.window=Dimensioni finestra printscaler.preset.clip50=Riduzione 50% Dimensioni finestra message.saving=Per favore attendere! menu.options.printscalepreview=Anteprima esportazione (Ctrl-F3) date=Build # Version 3.51 help=Guida # Version 3.61 editconditionals.title=Edita propriet condizionate editconditionals.hidden=Nascosto editconditionals.superhidden=Nascosto completamente editconditionals.visible=Normale editconditionals.showname=Mostra nome editconditionals.showvalue=Mostra valore editconditionals.background=sfondo editconditionals.solid=Non trasparente exception.superfluous=Testo sconosciuto nell'espressione # Version 3.63 select.comment.title=Commento alla Macro # Version 3.68 edit.area.area=Area # Version 3.73 myfiledialog.oldfiles=Vecchi file # Version 3.74 iconhelp.load=Apri costruzione (Ctrl-o) iconhelp.save=Salva costruzione (Ctrl-s) iconhelp.new=Nuova costruzione (Ctrl-n) # Version 3.81 warning.loadbackground=Errore caricamento sfondo # Version 3.9 function.x=Espression per X (vuoto per le funzioni) # Version 3.91 constructiondisplay.select=Seleziona constructiondisplay.all=Tutti gli oggetti constructiondisplay.visible=Oggetti visibili constructiondisplay.points=Punti constructiondisplay.lines=Rette constructiondisplay.circles=Circonferenze constructiondisplay.angles=Angoli constructiondisplay.other=Altri oggetti menu.file.copypng=Copia negli appunti exception.clipboardcopy=Copia fallita! menu.options.finegrid=Solo assi # Vesion 3.93 edit.function.center=Seleziona centro edit.function.free=Rilascia centro message.setcenter=Seleziona punto per il centro! # Vesion 3.94 message.edit=Edita: oggetto (Shift: selezione multipla, Ctrl: conditionata)? # Version 3.95 edit.function.special=Solo punti # Version 3.97 error.image=Errore nel caricamento dell'immagine! filedialog.imageload=Apri Immagine filedialog.imageload.action=Apri prompt.image=immagine(,,,) objects.image=Immagine shortcuts.image=_ # Version 3.98 exception.depends=L'oggetto % dipende dall'oggetto corrente. error.depends=L'oggetto % dipende dall'oggetto corrente. constructiondisplay.sorted=Disponi in ordine di costruzione # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Espressioni # Version 4.00 iconhelp.image=Apri immagine(_) message.image=Punto di ancoraggio immagine % message.image.last=Ultimo punto ancoraggio immagine (o scegli punto selezionato) editconditionals.z=Z-Valore Buffer # Version 4.01 name.FixedAngle=Angolo fissato # Version 4.04 menu.moresettings=Impostazioni menu.settings.language=Imposta Lingua language.title=Imposta Lingua language.prompt=Lingua per il prossimo avvio del programma # Version 4.05 constructiondisplay.invalid=Oggetti non validi # Version 4.08 menu.settings.constructiondisplay=Mostra lista oggetti permanente (F11) # Version 4.09 constructiondisplay.editconditions=Edita condizioni constructiondisplay.delete=Cancella oggetti selezionati constructiondisplay.hide=Mostra o nascondi constructiondisplay.superhide=Nascondi Super # Version 4.2 edit.expression.slider=Mostra come slider menu.grid.options=Opzioni griglia menu.options.leftsnap=Aggancia con trascinamento menu.settings.boundingbox=Crea Bounding Box (bb) file # Version 4.3 latexsettings.title=Imposta esportazione LaTeX latexsettings.boundingbox=Crea Bounding box bb-file latexsettings.latexinput=Crea LaTeX idx-file latexsettings.doubledollar=LaTeX produce $$...$$ latexsettings.dollar=LaTeX produce $...$ latexsettings.nodollar=LaTeX produce tutte le altre stringhe latexsettings.fullpath=Usa percorso file printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=larghezza 12 cm definizione 300 DPI printscaler.latex=Salva per LaTeX menu.background.usewidth=Dimensiona solo altezza # Version 4.4 menu.options.restricted=Intersezioni ristrette menu.options.sizes=Imposta dimensioni ... sizesdialog.title=Dimensioni minlinesize.prompt=Spessore minimo linea (default: 1) minpointsize.prompt=Dimensioni minime punto (default: 3) minfontsize.prompt=Dimensioni minime carattere (default: 12) arrowsize.prompt=Dimensioni freccia vettore (default: 10) selectionsize.prompt=Dimensione selezione (default: 1.5) warning.loadmacros=Errore nel caricamento della macro! warning.macrodefinition=Scelto %, ma non una macro! edit.circle.bounds=Mostra come arco edit.circle.range=Imposta arco ... # Version 4.5 edit.track.dmin=Passo minimo (default 0.001) # Version 4.6 menu.settings.smallicons=Usa icone piccole menu.settings.oldicons=Usa vecchie icone./src/rene/zirkel/docs/ZirkelProperties_pt.properties0000770000175000017500000010775410655647770022116 0ustar yvesyveslanguage=pt_ version=Verso homefile=index.html homepage=http://www.ntegravatai.relrs.g12.br/progr/ReC/ about.title=Sobre o R&C about.name=Geometria Escolar about.programmed=Programado por title=Geometria Escolar close=Fechar ok=OK cancel=Cancelar done=Feito! message=Mensagem yes=Sim no=No abort=Cancela true=verdadeiro false=falso warning.nojob=Isto no um exerccio! warning.print=Falha na impresso! warning.reset=Opo vlida ao reiniciar o programa! question.title=Pergunta question.intersection=Criar essa interseco? question.pointon=Criar ponto neste objeto? colors.black=Preto colors.blue=Azul colors.green=Verde colors.brown=Marrom colors.cyan=Ciano colors.red=Vermelho objects.point=Ponto objects.segment=Segmento objects.line=Reta objects.ray=Semi-Reta objects.circle=Crculo objects.intersection=Interseco objects.move=Mover Ponto objects.hide=Ocultar Objeto objects.edit=Editar Ponto objects.tracker=Rastrear Ponto ou Reta objects.objecttracker=Rastrear Ponto ou Reta sobre Objeto objects.parallel=Reta Paralela objects.plumb=Reta Perpendicular objects.circle3=Compasso objects.midpoint=Ponto Mdio objects.quadric=Cnica objects.angle=ngulo objects.boundedpoint=Ponto sobre Objeto objects.parameter=Definir Parmetros de Macro objects.targets=Definir Alvos de Macro objects.definejob=Definir Exerccios objects.runmacro=Rodar uma Macro objects.delete=Eliminar Objetos objects.reorder=Enviar Objetos Para Trs objects.animate=Animao objects.expression=Expresso Aritmtica objects.area=Polgono objects.text=Texto objects.fixedcircle=Crculo com Lado Definido objects.fixedangle=ngulo Definido objects.fixedsegment=Segmento com Lado Definido iconhelp.point=Ponto iconhelp.segment=Segmento iconhelp.line=Reta iconhelp.ray=Semi-Reta iconhelp.circle=Crculo iconhelp.intersection=Interseco iconhelp.move=Mover Ponto iconhelp.hide=Ocultar Objeto iconhelp.edit=Editar Objeto iconhelp.tracker=Rastrear Ponto ou Reta iconhelp.objecttracker=Rastreio Automtico de Ponto ou Reta iconhelp.parallel=Paralela iconhelp.plumb=Perpendicular iconhelp.circle3=Compasso iconhelp.midpoint=Ponto Mdio iconhelp.quadric=Seco Cnica passando por 5 Pontos iconhelp.angle=ngulo iconhelp.boundedpoint=Ponto sobre Objeto iconhelp.hidden=Exibir Objetos Ocultos iconhelp.color=Cor Padro do Objeto iconhelp.type=Tipo Padro do Ponto iconhelp.thickness=Espessura Padro do Objeto iconhelp.back=Eliminar ltimo Objeto iconhelp.type0=Tipo Padro do Ponto iconhelp.thickness0=Espessura Padro do Objeto iconhelp.partial=Crculos Parciais iconhelp.plines=Linhas Parciais iconhelp.arrow=Segmentos como Vetores iconhelp.showcolor=Exibir Cores Selecionadas iconhelp.runmacro=Rodar Macro iconhelp.macro=Parmetros de Macro/Objetos/Definies iconhelp.expression=Expresso Aritmtica iconhelp.showvalue=Mostar Valores dos Objetos iconhelp.showname=Exibir Nomes dos Objetos iconhelp.obtuse=Usar ngulos > 180 iconhelp.solid=Sem transparncia iconhelp.longnames=Nomes Extensos para Objetos iconhelp.grid=Exibir Grade iconhelp.comment=Exibir Comentrio iconhelp.defaults=Configurao Padro iconhelp.macro0=Parmetros de Macro/Objetos/Definies iconhelp.visual=Construo Visual iconhelp.replay=Repetir Construo iconhelp.oneforward=Avanar iconhelp.fastforward=Avanar Vrios Passos iconhelp.allforward=Avanar Tudo iconhelp.oneback=Voltar iconhelp.fastback=Voltar Vrios Passos iconhelp.allback=Voltar Tudo iconhelp.close=Fechar iconhelp.area=Polgono iconhelp.text=Texto iconhelp.fixedcircle=Crculo com Raio Fixo iconhelp.fixedangle=ngulo de Amplitude Fixa iconhelp.fixedsegment=Segmento com Comprimento Fixo iconhelp.animate=Animar um Ponto iconhelp.delete=Eliminar Objeto iconhelp.undo=Desfazer ltimas Remoes iconhelp.nextbreak=Prximo Ponto de Parada iconhelp.setbreak=Marcar/Desmarcar Ponto de Parada iconhelp.zoom=Zoom com mouse (%) shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shurtcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.polygon=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) menu.file=Arquivo menu.file.new=Nova Construo menu.file.clearmacros=Apagar Todas as Macros menu.file.load=Carregar Construo... (Ctrl-o) menu.file.loadjob=Carregar Exerccio... (Ctrl-j) menu.file.savejob=Guardar Exerccio como... (Ctrl-k) menu.file.save=Guardar Construo (Ctrl-s) menu.file.saveas=Guardar Construo como... (Ctrl-a) menu.file.includemacros=Incluir Macros menu.file.exit=Sair (Alt-F4) menu.file.print=Imprimir... menu.file.print.isoscale=Escala 1:1 em cm menu.file.savebmp=figura BMP menu.file.savefig=figura FIG menu.file.loadrun=Carregar Construo Descritiva (Ctrl-r) menu.file.editrun=Editar Construo Descritiva (Ctrl-x) menu.actions=Aes menu.actions.elementary=Ferramentas Bsicas menu.actions.complex=Ferramentas Avanadas menu.actions.fixed=Objetos Fixos menu.actions.move=Ferramentas de Movimento menu.actions.decorative=Objetos Decorativos menu.options=Opes menu.options.visual=Modo Visual menu.options.hidden=Exibir Objetos Ocultos (F9) menu.options.comment=Comentrio (F10) menu.options.constructiondisplay=Descrio menu.options.grid=Exibir Grade (F12) menu.options.setgrid=Alterar Largura da Grade menu.options.showcolor=Exibir Cor menu.options.defaultcolor=Cor Padro menu.options.defaultthickness=Espessura Padro menu.options.defaulttype=Estilo de Ponto menu.options.all=Tudo menu.options.setdigits=Alterar Algarismos Decimais menu.options.shownames=Exibir Nomes de Objetos (Ctrl-F6) menu.options.longnames=No Abreviar Nomes de Objetos (Ctrl-F8) menu.options.obtuse=Usar ngulos > 180 (Ctrl-F12) menu.options.solid=No Usar Transparncia menu.options.showvalues=Exibir Valores de Objetos (Ctrl-F7) menu.options.partial=Crculos Parciais (Ctrl-F9) menu.options.plines=Retas Parciais (Ctrl-F10) menu.options.arrow=Vetores (Ctrl-F11) menu.options.editicons=Editar Barra de cones menu.options.back=Eliminar ltimo Objeto (<-) menu.options.undo=Desfazer ltima Remoo (Ctrl-z) menu.zoom=Campo de Visualizao menu.zoom.in=Aproximar (+) menu.zoom.out=Afastar (-) menu.zoom.left=Esquerda (seta para esquerda) menu.zoom.right=Direita (seta para direita) menu.zoom.up=Acima (seta para cima) menu.zoom.down=Abaixo (seta para baixo) menu.macros=Macros menu.special.definemacro=Definir Macro (Ctrl-F5) menu.special.runmacro=Rodar Macro (F5) menu.special.savemacros=Guardar Macros menu.special.loadmacros=Carregar Macros menu.special.deletemacros=Eliminar Macros menu.special=Especial menu.special.testjob=Testar Exerccios (Ctrl-F1) menu.special.jobcomment=Texto do Exerccio (F8) menu.special.export=Exportar para HTML (Ctrl-e) menu.special.replay=Repetir Construo menu.help=Ajuda menu.help.about=Sobre o programa menu.help.browser=Ajuda e Demos menu.help.text=Ajuda Simples menu.help.configure=Configurar Browser (Atalho na Internet) menu.help.help=Ajuda (F1) menu.help.macros=Como Criar e Usar Macros menu.help.tools=Sobre as Ferramentas menu.help.gui=Sobre a Interface com o Usurio menu.help.interactive=Sobre Construes Descritivas menu.help.tips=Algumas Dicas menu.settings=Configuraes Especiais menu.settings.fullicons=Duas Barras de cones menu.settings.utf=Usar Codificao UTF-8 menu.settings.autohide=Ocultar o Segundo Ponto de Interseco menu.settings.iconbartop=Barra de cones Acima da rea de Construo menu.settings.showtips=Exibir Nome das Ferramentas menu.settings.simplegraphics=Sempre Usar Grficos Simples menu.settings.sure=Confirmar antes de Abrir e Fechar Arquivos menu.settings.pointon=Alertar ao criar um Ponto sobre Objeto menu.settings.intersection=Alertar ao criar uma Interseco menu.settings.choice=Exibir seleo Dilogo para Objetos menu.settings.movename=Exibir Valores dos Objetos ao Mov-los menu.settings.movefixname=Ajustar Valores dos Objetos ao Mov-los menu.settings.restricted=Modo Escola menu.colors=Modificar as Cores colors.default=Usar Padres colors.color0=Cor 1 (Preto) colors.color1=Cor 2 (Verde) colors.color2=Cor 3 (Azul) colors.color3=Cor 4 (Marrom) colors.color4=Cor 5 (Ciano) colors.color5=Cor 6 (Vermelho) colors.background=Cor de Fundo colors.select=Escolher colors.target=Objeto myfiledialog.dir=Diretrio myfiledialog.file=Nome do Arquivo myfiledialog.pattern=Padro filedialog.open=Abrir filedialog.saveas=Guardar como... filedialog.open.action=Abrir filedialog.saveas.action=Guardar filedialog.htmlsave=Criar pgina HTML filedialog.htmlsave.action=Guardar pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Guardar load=Abrir abort=Cancela bound.release=Tornar Ponto Livre bound.bind=Colocar Ponto sobre Objeto bound.error=Objeto no encontrado! constructiondisplay.edit=Editar Objeto constructiondisplay.copy=Copiar para rea de Transferncia (Clipboard) edit.Title=Propriedades edit.name=Nome edit.hidden=Oculto edit.text=Texto edit.fixed=Fixo edit.color=Cor edit.ok=OK edit.cancel=Cancelar edit.showname=Exibir Nome edit.point.title=Editar Ponto edit.point.type=Tipo edit.point.x=X edit.point.y=Y edit.point.intersection=Diferente de edit.point.showvalue=Exibir Coordenadas edit.point.colortype=Espessura edit.point.bound=Colocar sobre Objeto edit.point.away=Longe de edit.point.close=Perto de edit.point.free=Livre edit.line.title=Editar Reta, Semi-Reta, Segmento edit.line.normal=Normal edit.line.thick=Grosso edit.line.thin=Fino edit.line.invisible=Invisvel edit.line.type=Tipo edit.segment.length=Comprimento edit.segment.showvalue=Exibir Comprimento edit.circle.title=Editar Crculo edit.circle.length=Raio edit.circle.partial=Crculo Parcial edit.circle.range=Definir Intervalo edit.circle.killrange=Apagar Intervalo edit.plumb.restricted=Restrito edit.angle.title=Editar ngulo edit.angle.length=Tamanho edit.angle.displaysize=Exibir Tamanho edit.angle.normal=Normal edit.angle.small=Pequeno edit.angle.large=Grande edit.expression.title=Editar Expresso edit.expression=Expresso Aritmtica edit.expression.prompt=Explanao edit.area.title=Editar Polgono edit.area.back=No Fundo export.title=Exportar HTML export.pagetitle=Ttulo da Pgina export.width=Largura export.height=Altura export.jar=Arquivo Jar export.comment=Com Comentrio export.file=Arquivo de Construo export.job=Exibir como Exerccio export.color=Cor de Fundo da Pgina export.backgroundcolor=Usar como fundo de pgina export.appletcolor=Usar como fundo de applet export.plain=Plano export.3D=Borda export.breaks=Repetir com Quebras export.icons=Borda e cones export.full=Borda, cones e Status export.nonvisual=Borda, cones e Linha de Entrada export.style=Estilo de Applet export.setcolor=Escolher Cor export.savefirst=Arquivo no foi salvo! export.soltext=Soluo export.stylesheet=Folha de estilo CSS export.solution=Arquivo Soluo export.jumpsol=Pular para Soluo export.linksol=Link para Soluo export.savesol=Guardar Arquivo Soluo export.track=Rastrear Ponto export.digits=Com Algarismos export.setsize=Pegar Tamanho export.signature=Criado com R&C export.colors=Com Cores Escolhidas export.background=Com Fundo Escolhido help.title=Ajuda help.error=O arquivo Ajuda no pde ser aberto! help.file=schoolgeometry.txt coloreditor.title=Editar Cor coloreditor.red=Vermelho coloreditor.green=Verde coloreditor.blue=Azul coloreditor.color=Sua Cor comment.title=Comentrio da Construo comment.set=Definir comment.cancel=Cancelar comment.close=Fechar iconedit.title=Editar Barra de cones iconedit.twobars=Barra de cones tem 2 linhas jobcomment.title=Exerccio select.title=Escolha select.ok=OK select.cancel=Cancela select.comment=Exibir Comentrio select.all=Tudo message.circle.midpoint=Crculo: Escolha o centro! message.circle.radius=Crculo: Passa em que ponto? (Shift: para raio fixo) message.fixedcircle.midpoint=Crculo de raio fixo: Escolha o centro! message.fixedcircle.radius=Crculo de lado definido: Clique em algum lugar! message.edit=Editar: Escolha um objeto! message.line.first=Reta: Escolha o primeiro ponto! message.line.second=Reta: Escolha o segundo ponto! message.ray.first=Semi-Reta: Escolha o primeiro ponto! message.ray.second=Semi-Reta: Escolha o segundo ponto! message.move.select=Mover: Escolha um ponto! message.move.move=Mover: Mova o ponto! message.point=Ponto: Defina um ponto! message.segment.first=Segmento: Escolha o primeiro ponto! message.segment.second=Segmento: Segundo ponto (use shift para definir comprimento)! message.fixedsegment.first=Segmento com comprimento fixo: Primeiro ponto! message.fixedsegment.second=Segmento com comprimento fixo: Clique em algum lugar! message.intersection.first=Interseco: Escolha o primeiro objeto ou a interseco! message.intersection.second=Interseco: Com que objeto? message.hide=Ocultar/Exibir: Escolha um objeto! message.tracker.select=Trilha: Escolha o ponto ou reta! message.tracker.selectpoint=Trilha: Mover que ponto? message.tracker.move=Trilha: Mova o ponto! message.objecttracker.select=Rastrear automaticamente: Escolha um ponto a trilhar! (Shift: seleciona mais pontos) message.objecttracker.object=Rastrear automaticamente: Escolha uma linha ou crculo! message.objecttracker.selectpoint=Rastrear automaticamente: Que ponto mover? message.objecttracker.selectanypoint=Rastrear automaticamente: Escolha outros ponto a mover! message.objecttracker.move=Rastrear automaticamente: Mova o ponto! message.objecttracker.start=Rastrear automaticamente: Iniciar Animao! message.objecttracker.stop=Rastrear automaticamente: Parar Animao! message.parallel.first=Reta Paralela: A quem? (reta, semi-reta ou segmento) message.parallel.second=Reta Paralela: Escolha um ponto! message.plumb.first=Reta Perpendicular: A quem? (reta, semi-reta ou segmento) message.plumb.second=Reta Perpendicular: Escolha um ponto! message.circle3.first=Compasso: Escolha o primeiro ponto do raio! message.circle3.second=Compasso: Escolha o segundo ponto do raio! message.circle3.midpoint=Compasso: Escolha o centro! message.midpoint.first=Ponto Mdio: Escolha o primeiro ponto! message.midpoint.second=Ponto Mdio: Escolha o segundo ponto! message.quadric=Seco Cnica: Escolha o ponto de nmero message.angle.first=ngulo: Escolha o primeiro ponto! message.angle.root=ngulo: Escolha o vrtice! message.angle.second=ngulo: Escolha o segundo ponto (shift: fixa amplitude)! message.fixedangle.first=ngulo de amplitude fixa: Escolha o primeiro ponto! message.fixedangle.root=ngulo de amplitude fixa: Escolha o vrtice! message.fixedangle.second=ngulo de amplitude fixa: Escolha o segundo ponto! message.label.select=Mover Etiqueta: Escolha uma etiqueta! message.label.move=Mover Etiqueta: Mova a etiqueta! message.boundedpoint=Ponto sobre Objeto: Escolha um crculo ou uma linha! message.parameters=Parmetros de Macro: Escolha objetos! message.targets=Alvos de Macro: Escolha objetos! message.savejob.first=Definir Atributos: Escolha ltimo objeto exibido! message.savejob.second=Definir Atributos: Escolha um objeto alvo! message.savejob.third=Definir Atributos: Escolha mais objetos a serem exibidos! message.runmacro=Macro %: %. (Entre %) % message.runmacro.return=(BARRA DE ESPAO escolhe %) message.runmacro.fixes=(SHIFT corrige seleo) message.delete=Eliminar: Qual objeto? message.reorder=Reordenar: Qual objeto? message.expression=Expresso Aritmtica: Onde colocar? message.area=Polgono Preenchido: Escolha um vrtice do polgono! message.text=Texto: Onde colocar? message.animator.point=Animao: Que ponto animar? message.animator.segment=Animao: Sobre qual objeto? (crculo ou segmento!) message.animator.running=Animao: Rodando (clique para parar)! message.range.first=Arco desse ponto... message.range.second=... at que ponto? message.setaway.away=Afastada de que ponto? message.setaway.close=Prxima a que ponto? objectsedit.title=Editar Propriedades point.type.square=Quadrado point.type.diamond=Diamante point.type.circle=Crculo point.type.dot=Ponto color.type.normal=Normal color.type.thick=Grosso color.type.thin=Fino color.type.invisible=Invisvel text.point=Ponto em %, % text.line=Reta passando por % e % text.segment=Segmento entre % e % text.segment.fixed=Segmento entre % e % com comprimento % text.ray=Semi-Reta de % passando por % text.intersection=Interseco entre % e % text.circle=Crculo de centro em % passando por % text.circle.fixed=Crculo de centro em % passando por % com raio % text.fixedcircle=Crculo ao redor de % com raio % text.circle3=Crculo com centro em % com raio determinado pelo segmento entre % e % text.parallel=Reta passando por % e paralela a % text.midpoint=Ponto Mdio entre % e % text.quadric=Seo Cnica passando por % text.plumb=Reta passando por % e perpendicular a % text.angle=ngulo % - % - % text.angle.fixed=ngulo % - % - % de valor % text.boundedpoint=Ponto sobre % text.expression=Expresso "%" em %, % text.area=Polgono text.fixedangle=ngulo % - % de valor % name.Point=Ponto name.Intersection=Interseco name.OtherIntersection=Interseco name.Circle=Crculo name.Circle3=Crculo name.Segment=Segmento name.Ray=Semi-Reta name.Line=Reta name.TwoPointLine=Reta passando por dois Pontos name.Parallel=Reta Paralela name.Midpoint=Ponto Mdio name.Quadric=Cnica name.Plumb=Reta Perpendicular name.Angle=ngulo name.PointOn=Ponto sobre Objeto name.Expression=Expresso name.Polygon=Polgono name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=p name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=pl name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=poli name.short.Function=f prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.angle==a(,,) prompt.area=A(,,) prompt.quadric=quadric(,,,,) prompt.function=funo(,,,,,) popup.hidden=Mostra objetos ocultos popup.replay=Repetir construo popup.empty=--- Macros --- replay.title=Repete reorder.title=Enviar para trs reorder.message=Inserir depois de reorder.notfound=Objeto no encontrado! reorder.warning=No pde ser feito! setgrid.title=Largura da Grade setgrid.prompt=Nova largura de grade setgrid.set=Definir definemacro.title=Definir Macro definemacro.name=Nome definemacro.comment=Comentrio de Macro definemacro.parameters=Mensagem de solicitao (Prompt) definemacro.noparams=Faltam os parmetros da macro! definemacro.nomacro=No h macro definida! definemacro.targetsonly=Exibir apenas os objetos finais definemacro.invisible=No incluir construes intermedirias definemacro.promptfor=Solicitao para macro.replace.title=Substituio de Macro macro.replace=Substituir Macro: macro.replace.all=Tudo macro.usage=Uso incorreto de macro (Ver dicas)! macro.prompt.title=Solicitao de Parmetro macro.prompt.prompt=Escreva um valor para o parmetro macro.prompt.illegal=Valor invlido! digits.title=Quantos algarismos aps a vrgula? digits.edit=Editar digits.lengths=Exibir digits.angles=ngulos editrun.title=Editar Construo Descritiva editrun.run=Guardar e Rodar editrun.load=Outra Descrio sure.title=Tem certeza? sure.macros=Apagar todas as macros? sure.delete=Ignorar modificaes? close.title=Fim close.prompt=Fechar o programa? file.exists.title=Arquivo existente file.exists.overwrite=Arquivo j existe! Substitu-lo? exception.nparams=Nmero Invlido de Parmetros! exception.notfound=Objeto no foi encontrado, ou foi definido aps expresso! exception.type=Tipo Invlido de Objeto! exception.expression=Expresso Invlida! exception.canfix=Objeto no pode ser corrigido! exception.fix=Valor invlido! exception.novalue=Valor invlido! exception.elementary=Elemento invlido na expresso! exception.bracket=Faltam parnteses! exception.quotes=Faltam aspas! exception.dot=O nmero tem dois ou mais pontos decimais! exception.nodigit=No encontrado algarismo no nmero! exception.function=Funo desconhecida! exception.parameter=Parmetro de funo invlido! exception.macro=Parmetro de macro invlido! exception.name=Escreva um Nome! exception.job=Parmetros Invlidos de Exerccio! exception.track=Intervalo de Parmetros Invlido! exception.animate=Parmetros Invlidos de Animao! exception.boolean=Valor Booleano deve ser verdadeiro ou falso! exception.value=Valor Ilegal! exception.color=Cor Ilegal! exception.colortype=Espessura Ilegal! exception.type=Tipo de Ponto Ilegal! exception.macroparameter=Parmetro Ilegal de Macro! exception.macrotarget=Objeto Final da Macro Invlido! exception.prompt=Nome de Objeto Invlido! exception.prompt.parameter=O nome do objeto no pode ser um parmetro! exception.parameters=Parmetro Invlido! exception.brackets=Parnteses Invlidos! exception.double=Este nome j existe! error.setaway=Este ponto no est definido antes da interseco! error.objecttracker.depends=O ponto est ligado a outro objeto! constructiondisplay.title=Construo function.hide=Ocultar function.hide.short=ocultar function.rename=Nome function.rename.short=nome function.value=Valor function.value.short=valor function.window=Janela function.window.short=J function.color=Cor function.color.short=cor function.thickness=Espessura function.thickness.short=esp function.type=Tipo function.type.short=tipo function.partial=Parcial function.partial.short=parc function.fill=Preencher function.fill.short=cheio function.back=Fundo function.back.short=fundo function.acute=Convexo function.acute.short=convexo function.obtuse=Cncavo function.obtuse.short=concavo function.solid=Opaco function.solid.short=opaco function restrict=Restrito function restrict.short=restr expression.value=Valor configure.title=Escolher Navegador (Browser) configure.prompt=Comando do Navegador (Browser) # New Resources: background.error=No foi possvel carregar a imagem (GIF ou JPG!). menu.background=Imagem de Fundo menu.background.grab=Construo atual como imagem de fundo menu.background.clear=Apagar imagem de fundo menu.background.load=Escolher imagem de fundo menu.background.usesize=Ajustar janela imagem de fundo menu.background.tile=Lado a Lado (ladrilhar) menu.background.center=Centralizar imagem de fundo iconhelp.grab=Definir imagem de fundo filedialog.backgroundload=Carregar Imagem de Fundo filedialog.backgroundload.action=Carregar # New Resources (Ver. 2.14 a 2.19) menu.file.compress=Sempre Comprimir menu.file.savesvg=figura SVG loading=A carregar... Aguarde, por favor! menu.settings.font.default=Fonte Normal menu.settings.font.bold=Negrito menu.settings.font.large=Grande menu.file.saveeps=figura EPS menu.fonts=Fonte # Ver. 2.20 a 2.23 bmpscaler.title=Escala Bitmap bmpscaler.width=Largura bmpscaler.height=Altura bmpscaler.scale=Fator (pressione Enter) bmpscaler.illegal=Valor invlido renamemacro.title=Renomear Macro renamemacro.name=Novo nome da macro menu.special.renamemacro=Renomear Macro... savequestion.title=Construo savequestion.qsave=Guardar alteraes? # Ver. 2.25 exception.printsize=Pgina muito pequena para essa construo! iconhelp.nohelp=Sem ajuda disponvel iconhelp.type?=Tipo de ponto iconhelp.thickness?=Espessura iconhelp.color?=Cor iconhelp.filled=Objeto preenchido iconhelp.isback=Desenhar no fundo iconhelp.inverse=ngulo refletido iconhelp.angle?=Tamanho # Ver. 2.31 a 2.34 menu.settings.indicate=Visualizar objetos criados menu.options.other=Configuraes menu.help.welcome=Novidades desta verso iconhelp.twolines=cones em duas linhas iconhelp.qintersection=Avisar se deseja criar interseco iconhelp.qchoice=Exibir dilogo para seleo de objeto iconhelp.qpointon=Perguntar ao criar ponto sobre objeto iconhelp.noindicate=No indicar objetos sob o mouse (rato) menu.file.new=Nova Construo (Ctrl-n) edit.text.title=Configuraes de Texto edit.text.settings=Outras Configuraes menu.settings.filedialog=Substituir dilogo do arquivo de sistema # Ver. 2.35 a 2.39 menu.settings.bitmapbackground=Colorir Fundo ao Exportar como BMP menu.file.savegraphics=Exportar Imagem como ... bmpscaler.title=Escala de Imagem menu.file.savepdf=Arquivo PDF iconhelp.chord=Exibir como segmento message.setfixedangle.first=Definir ngulo fixo: Primeiro ponto? message.setfixedangle.second=Definir ngulo fixo: Ponto base? message.setfixedangle.third=Definir ngulo fixo: Terceiro ponto? edit.fixedangle.set=Definir tamanho ... message.setfixedcircle.first=Definir circulo fixo: Primeiro ponto? message.setfixedcircle.second=Definir circulo fixo: Segundo ponto? edit.fixedcircle.set=Definir tamanho ... # Ver. 2.40 a 2.47 minpointsize.title=Definir Tamanho do Ponto Mnimo minpointsize.prompt=Tamanho do ponto mnimo (padro: 3) menu.settings.font.minpointsize=Tamanho do Ponto Mnimo ... name.short.Track=Tr text.track=Traar de % enquanto % mover sobre % trackquestion.keep=Manter Trao na Construo? trackquestion.title=Manter Trao menu.options.track=Manter Trao (Shift-Enter) iconhelp.indicate=Visualizar finalizao da construo iconhelp.nohelp=Sem ajuda disponvel! objects.draw=Desenhar com Mouse menu.options.cleardraw=Apagar Rabisco (Esc) iconhelp.draw=Desenhar com Mouse message.draw=Desenhar com Mouse (ESC para apagar) shortcuts.draw=; message.move.select=Mover: Selecione um ponto (shift: exibe estado anterior)! message.rename=Renomear A,B,C,...: Selecione objetos! iconhelp.rename=Renomear A,B,C,... objects.rename=Renomear A,B,C,... shortcuts.rename=: iconhelp.anglereduce=No exibir raio do ngulo menu.settings.smartboard=Modo Smartboard shortcuts.zoom=% objects.zoom=Ampliar com Mouse message.zoom=Arrastar centro ou ampliar e reduzir menu.special.restricticons=Barra de cones Simples menu.settings.indicate.simple=Indicar Somente Pontos menu.settings.beginner=Modo Novato question.again=Sempre fazer essa pergunta. # Version 2.49 e 2.53 definemacro.parameters=Prompt(s) de Parmetro ("=nome" fixos) menu.actions.angles=ngulos menu.actions.circles=Crculos menu.actions.lines=Linhas menu.actions.points=Pontos # Version 3.00 info.title=Ajuda Contextual info.related=Tpicos Relacionados info.notfound=Tpico no encontrado! info.noresults=No encontrado! info.searchresults=- Resultados da Busca - info.select=- Selecione - info.search=Busca info.back=Voltar info.start=Iniciar iconhelp.info=Ajuda contextual menu.help.info=Ajuda contextual myfiledialog.homedir=Arquivos R&C myfiledialog.windowshome=Meus Documentos myfiledialog.mkdir=Criar Diretrio myfiledialog.back=Voltar menu.file.alwaysclearmacros=Apagar Macros antes de Carregar about.language=Portugus bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 a 3.03 menu.settings.backups=Backups menu.options.hideduplicates=Ocultar Cpias menu.options.function=Criar Funo text.function=Funo ( % , % ) function.varmin=De function.varmax=a function.dvar=Passo function.var=Varivel function.x=X function.y=Y iconhelp.function=Criar uma Funo menu.options.editlast=Editar ltimo Objeto iconhelp.control.edit=Editar ltimo Objeto iconhelp.control.hide=Ocultar Cpias edit.function.title=Funo ou Curva iconhelp.control.runmacro=Rodar ltima macro de novo # Version 3.05 point.type.cross=Cruz point.type.dcross=Cruz deitada shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Unidade menu.special.break=Pontos de Parada menu.bp.setbreak=Definir Ponto de Parada menu.bp.clearbreak=Apagar Ponto de Parada menu.bp.sethidingbreak=Definir Ponto de Parada Oculto menu.bp.animatebreak=Animar Pontos de Parada iconhelp.animatebreak=Animar Ponto de Parada message.animatebreak=Animar Pontos de Parada: clique para parar (use setas esquerda/direita para rapidez)! menu.special.exporttemplate=Exportar HTML com Modelos templateload.open=Usar Modelos templateload.open.action=Abrir menu.settings.doubleclick=Duplo Clique para Macros export.codebase=Codebase # Version 3.12 e 3.23 edit.equation=Equao menu.settings.squarepoints=Desenhar pontos como quadrados # Version 3.37 menu.options.export=Exportar imagens (Config.) menu.settings.minwidth=Menor largura 1 menu.settings.minpointsize=Tamanho do menor ponto menu.settings.minfontsize=Tamanho da menor fonte minfontsize.title=Definir menor tamanho de fonte minfontsize.prompt=Menor fonte (padro: 12) menu.options.minpointsize=Menor Ponto menu.options.minfontsize=Menor Fonte # Version 3.38 a 3.42 menu.settings.scalepdf=Escala 1:1 para PDF e EPS menu.file.clip=Ajustes para Imagens ... clip.title=Definir Ajustes clip.width=Largura clip.height=Altura clip.screen=Sem Ajustes menu.options.arrowsize=Setas (tamanho) ... arrowsize.title=Tamanho das Setas # Version 3.44 e 3.46 iconhelp.large=Use fontes grandes iconhelp.bold=Use negrito menu.options.largefont=Tamanho da Fonte menu.options.boldfont=Fonte Negrito warning.previewframe=Quadro maior que janela! message.move.select=Move: Selecione ponto (shift: mais pontos, ctrl: estado anterior)! iconbar.showseparators=Ver Separadores # Version 3.48 menu.sizes=Tamanhos menu.options.minlinesize=Linha (menor largura) minlinesize.title=Largura Mnima minlinesize.prompt=Largura Mnima (Padro 1) arrowsize.prompt=Largura de Seta (Padro: 10) menu.options.printscaler=Tamanho ao exportar ... menu.options.exportsettings=Exportar (Def. Especiais) ... printscaler.title=Def. Tamanho (Exp.) printscaler.width=Largura (cm) printscaler.height=Altura (cm) printscaler.dpi=Resoluo (dpi, padro 300) printscaler.linewidth=Largura de Linha (cm, padro 0.02) printscaler.pointsize=Tamanho do Ponto (cm, padro 0.07) printscaler.textsize=Tamanho do Texto (cm, padro 3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=Largura (em pixel) printscaler.h=Altura (em pixel) printscaler.scale=Escala (proporcional tela) printscaler.middle=Manter (no redimensionar) printscaler.sizes=Escalar linhas, fonte e pontos menu.file.savepng=Salvar como PNG warning.preview=Visualizao no funcionar bem com Java 1.1 iconedit.showseparators=Exibir separadores printscaler.aspect=Manter Proporo printscaler.presets=Definies printscaler.preset=Escolha! printscaler.preset.300dpi=Ajusta para 300 DPI printscaler.preset.300dpi6=6 cm Largura para 300 DPI printscaler.preset.300dpi16=16 cm Largura para 300 DPI printscaler.preset.window=Tamanho da Janela printscaler.preset.clip50=Tamanho da Janela em 50% message.saving=Aguarde! menu.options.printscalepreview=Previsualizao (Ctrl-F3) date=Criado em # Version 3.51 help=Ajuda # Version 3.61 editconditionals.title=Editar Condicionais editconditionals.hidden=Oculto editconditionals.superhidden=Completamente Oculto editconditionals.visible=Normal editconditionals.showname=Exibir Nome editconditionals.showvalue=Exibir Valor editconditionals.background=Fundo editconditionals.solid=No Transparente exception.superfluous=Texto Suprfluo na Expresso # Version 3.62 e 3.63 menu.options.selectionsize=Mudar Tamanho da Seleo selectionsize.title=Tamanho da Seleo selectionsize.prompt=Tamanho da Seleo (padro 1.5) select.comment.title=Comentrio de Macro # Version 3.68 edit.area.area=rea # Version 3.73 myfiledialog.oldfiles=Histrico # Version 3.74 iconhelp.load=Carregar Construo (Ctrl-o) iconhelp.save=Guardar Construo (Ctrl-s) iconhelp.new=Nova Construo (Ctrl-n) # Version 3.81 warning.loadbackground=Erro ao carregar fundo # Version 3.9 function.x=Expresso para X (vazio para funes) # Version 3.91 constructiondisplay.select=Selecionar constructiondisplay.all=Todos os Objetos constructiondisplay.visible=Objetos Visveis constructiondisplay.points=Pontos constructiondisplay.lines=Linhas constructiondisplay.circles=Crculos constructiondisplay.angles=ngulos constructiondisplay.other=Outros Objetos menu.file.copypng=Copiar para Clipboard exception.clipboardcopy=Falhou ao copiar! menu.options.finegrid=Somente eixos # Vesion 3.93 edit.function.center=Definir Centro edit.function.free=Liberar Centro message.setcenter=Selecionar o ponto central! # Vesion 3.94 message.edit=Editar: Objeto (shift: mais objetos, ctrl: condicionais)? # Version 3.95 edit.function.special=Pontos somente # Version 3.97 error.image=Erro ao carregar uma imagem! filedialog.imageload=Carregar Imagem filedialog.imageload.action=Carregar prompt.image=imagem(,,,) objects.image=Imagem shortcuts.image=_ # Version 3.98 exception.depends=Objeto % depende do objeto corrente. error.depends=Objeto % depende do objeto corrente. constructiondisplay.sorted=Classificado por generao # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Expresses # Version 4.00 iconhelp.image=Carregar Imagem (_) message.image=Ponto-ncora da imagem % message.image.last=ltimo ponto-ncora da imagem (ou escolha ponto selecionado) editconditionals.z=Valor Z-Buffer # Version 4.01 name.FixedAngle=ngulo Fixo # Version 4.04 menu.moresettings=Configuraes menu.settings.language=Mudar Idioma language.title=Use cdigo de duas letras language.prompt=Para ter efeito, reinicie o R&C! # Version 4.05 constructiondisplay.invalid=Objetos Invlidos # Version 4.08 menu.settings.constructiondisplay=Lista de Objetos (F11) # Version 4.09 constructiondisplay.editconditions=Editar Condies constructiondisplay.delete=Deletar Objetos Selecionados constructiondisplay.hide=Ocultar/Exibir constructiondisplay.superhide=Super Ocultar # Version 4.2 edit.expression.slider=Usar como Slider (boto deslizante) menu.grid.options=Opes de Grade menu.options.leftsnap=Snap with Left Button Drag menu.settings.boundingbox=Criar arquivo Bounding Box (bb) # Version 4.3 latexsettings.title=Definir exportao LaTeX latexsettings.boundingbox=Criar arquivo-bb Bounding box latexsettings.latexinput=Criar arquivo-idx LaTeX latexsettings.doubledollar=LaTeX faz $$...$$ latexsettings.dollar=LaTeX faz $...$ latexsettings.nodollar=LaTeX faz todas as outras strings latexsettings.fullpath=Usar caminho de arquivo printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=12 cm de largura com 300 DPI printscaler.latex=Guardar como LaTeX menu.background.usewidth=Ajustar apenas altura # Version 4.4 menu.options.restricted=Interseces Restritas menu.options.sizes=Definir Tamanhos ... sizesdialog.title=Tamanhos minlinesize.prompt=Largura mnima da linha (padro: 1) minpointsize.prompt=Tamanho mnimo do ponto (padro: 3) minfontsize.prompt=Tamanho mnimo da fonte (padro: 12) arrowsize.prompt=Tamanho da seta (padro: 10) selectionsize.prompt=Tamanho da seleo (padro: 1.5) warning.loadmacros=Erro ao carregar uma macro! warning.macrodefinition=% usado, mas no em macro! edit.circle.bounds=Exibir como Arco edit.circle.range=Definir Arco ... # Version 4.5 edit.track.dmin=Passo mnimo (padro 0.001) # Version 4.6 menu.settings.smallicons=cones pequenos menu.settings.oldicons=cones antigos./src/rene/zirkel/docs/CVS/0000755000175000017500000000000011276460321014356 5ustar yvesyves./src/rene/zirkel/docs/CVS/Repository0000644000175000017500000000003111132354034016444 0ustar yvesyvescarmetal/rene/zirkel/docs./src/rene/zirkel/docs/CVS/Entries0000644000175000017500000000213711276460321015715 0ustar yvesyves/ZirkelProperties.properties/1.6/Sat Oct 03 15:21:30 2009/-ko/ /ZirkelProperties_ar.properties/1.1/Mon Aug 06 16:44:40 2007/-ko/ /ZirkelProperties_br.properties/1.1/Mon Aug 06 16:44:40 2007/-ko/ /ZirkelProperties_da.properties/1.1/Mon Aug 06 16:44:40 2007/-ko/ /ZirkelProperties_de.properties/1.1/Mon Aug 06 16:44:40 2007/-ko/ /ZirkelProperties_es.properties/1.1/Mon Aug 06 16:44:40 2007/-ko/ /ZirkelProperties_fr.properties/1.1/Tue Aug 19 15:03:52 2008/-ko/ /ZirkelProperties_it.properties/1.1/Thu Mar 01 14:08:20 2007/-ko/ /ZirkelProperties_ko.properties/1.1/Wed Apr 25 13:26:00 2007/-ko/ /ZirkelProperties_nl.properties/1.1/Mon Aug 06 16:44:40 2007/-ko/ /ZirkelProperties_no.properties/1.1/Mon Aug 06 16:44:40 2007/-ko/ /ZirkelProperties_pl.properties/1.1/Mon Aug 06 16:44:40 2007/-ko/ /ZirkelProperties_pt.properties/1.1/Mon Aug 06 16:44:40 2007/-ko/ /ZirkelProperties_ru.properties/1.1/Mon Aug 06 16:44:40 2007/-ko/ /ZirkelProperties_sk.properties/1.1/Mon Aug 06 16:44:40 2007/-ko/ /ZirkelProperties_sl.properties/1.1/Mon Aug 06 16:44:40 2007/-ko/ /ZirkelProperties_vi.properties/1.1/Wed May 09 14:03:00 2007/-ko/ ./src/rene/zirkel/docs/CVS/RevisionCache/0000755000175000017500000000000011315675452017107 5ustar yvesyves./src/rene/zirkel/docs/CVS/RevisionCache/ZirkelProperties_fr.properties#1.10000644000175000017500000011600311144764476025522 0ustar yvesyveslanguage=fr_ version=Version homefile=index.html homepage=http://www.z-u-l.de/ about.title=\u00C0 propos de ce programme about.name=G\u00E9om\u00E9trie \u00E9l\u00E9mentaire about.programmed=programm\u00E9 par title=G\u00E9om\u00E9trie \u00E9l\u00E9mentaire close=Fermer ok=OK cancel=Annuler done=Bravo! message=Message yes=Oui no=Non abort=Annuler true=vrai false=faux warning.nojob=Ce n'est pas un exercice! warning.print=L'impression a \u00E9chou\u00E9 warning.reset=L'option prendra effet au prochain d\u00E9marrage question.title=Question question.intersection=Cr\u00E9er cette intersection? question.pointon=Cr\u00E9er un point sur cet objet? colors.black=Noir colors.blue=Bleu colors.green=Vert colors.brown=Brun colors.cyan=Cyan colors.red=Rouge objects.point=Point objects.segment=Segment objects.line=Droite objects.ray=Demi-droite objects.circle=Cercle objects.intersection=Intersection objects.move=D\u00E9placer le point objects.hide=Cacher un objet objects.edit=Modifier objects.tracker=Trace (point ou droite) objects.objecttracker=Trace (point ou droite sur un objet) objects.parallel=Parall\u00E8le objects.plumb=Perpendiculaire objects.circle3=Cercle d\u00E9fini par rayon et centre (compas) objects.midpoint=Milieu objects.quadric=Conique objects.angle=Angle objects.boundedpoint=Point sur un objet objects.parameter=Objets initiaux objects.targets=Objets finaux objects.definejob=D\u00E9finir un exercice objects.runmacro=Ex\u00E9cuter une macro objects.delete=Supprimer des objets et ceux qui en d\u00E9pendent objects.reorder=Mettre les objets en arri\u00E8re-plan objects.animate=Animation objects.expression=Expression arithm\u00E9tique objects.area=Polygone objects.text=Texte objects.fixedcircle=Cercle de rayon fixe objects.fixedangle=Angle de mesure fixe objects.fixedsegment=Segment de longueur fixe iconhelp.point=Point iconhelp.segment=Segment iconhelp.line=Droite iconhelp.ray=Demi-droite iconhelp.circle=Cercle iconhelp.intersection=Intersection iconhelp.move=D\u00E9placer un point+Ctrl (points): montrer anciennes constructions+Ctrl: d\u00E9placer objets fixes+Maj: d\u00E9placer plus qu'un objet iconhelp.hide=Cacher un objet+Maj: cacher compl\u00E8tement iconhelp.edit=Modifier un objet+Maj: modifier plus d'objets+Ctrl: modifier dernier objet iconhelp.tracker=Trace (point ou droite) (t) iconhelp.objecttracker=Trace automatique (point ou droite)+Strg: conserver trace (Maj-Enter) iconhelp.parallel=Parall\u00E8le iconhelp.plumb=Perpendiculaire iconhelp.circle3=Cercle d\u00E9fini par rayon et centre iconhelp.midpoint=Milieu iconhelp.quadric=Conique passant par 5 points iconhelp.angle=Angle iconhelp.boundedpoint=Point sur un objet+Maj: non fixe sur objet iconhelp.hidden=Afficher/Masquer les objets cach\u00E9s (F9) iconhelp.color=Couleur par d\u00E9faut (Ctrl-1,2,3,4) iconhelp.type=Prendre ce style de point par d\u00E9faut iconhelp.type0=Carr\u00E9 iconhelp.type1=Losange iconhelp.type2=Disque iconhelp.type3=Petit carr\u00E9 iconhelp.type4=Plus iconhelp.type5=Croix iconhelp.thickness=Prendre cette \u00E9paisseur par d\u00E9faut (Alt-5,6,7) iconhelp.thickness0=Trait r\u00E9gulier iconhelp.thickness1=Trait \u00E9pais iconhelp.thickness2=Trait pointill\u00E9 iconhelp.back=Supprimer le dernier objet cr\u00E9\u00E9 iconhelp.partial=Cr\u00E9er cercles incomplets+par d\u00E9faut (Ctrl-F9) iconhelp.plines=Cr\u00E9er droites incompl\u00E8tes+par d\u00E9faut (Ctrl-F10) iconhelp.arrow=Repr\u00E9senter les segments comme des vecteurs (Ctrl-F11) iconhelp.showcolor=Ne montrer que les couleurs choisies (Alt-1,2,3,4) iconhelp.runmacro=Ex\u00E9cuter une macro (9)+Ctrl: Lancer derni\u00E8re macro iconhelp.macro=Macro: Objets initiaux/Objets finaux/D\u00E9finition (7,8,Ctrl-5) iconhelp.expression=Cr\u00E9er une expression arithm\u00E9tique iconhelp.showvalue=Afficher les valeurs des objets (Ctrl-F7) iconhelp.showname=Afficher les noms des objets (Ctrl-F6) iconhelp.obtuse=Utiliser les angles sup\u00E9rieurs \u00E0 180\u00B0 (Ctrl-F12) iconhelp.solid=Ne pas utiliser la transparence iconhelp.longnames=Utiliser les noms longs (Ctrl-F8) iconhelp.grid=Afficher la grille (F12) iconhelp.comment=Afficher le commentaire (F10) iconhelp.defaults=Param\u00E8tres par d\u00E9faut iconhelp.macro0=Macro: objets initiaux/Objets finaux/D\u00E9finition iconhelp.visual=Mode visuel iconhelp.replay=Revoir la construction iconhelp.oneforward=Avance iconhelp.fastforward=Avance rapide iconhelp.allforward=Fin iconhelp.oneback=Retour iconhelp.fastback=Retour rapide iconhelp.allback=D\u00E9but iconhelp.close=Fermer iconhelp.area=Polygone iconhelp.text=Texte sur plusieurs lignes iconhelp.fixedcircle=Cercle de rayon fixe iconhelp.fixedangle=Angle de mesure fixe iconhelp.fixedsegment=Segment de longueur fixe iconhelp.animate=Animer un point iconhelp.delete=Supprimer un objet et ceux qui en d\u00E9pendent iconhelp.undo=Annuler les derni\u00E8res suppressions iconhelp.nextbreak=Aller au point d'arr\u00EAt suivant iconhelp.setbreak=Introduire/Supprimer un point d'arr\u00EAt iconhelp.zoom=Zoomer avec souris shortcuts.point=p shortcuts.segment=s shortcuts.line=l shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Supp shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.showcolor.4= shortcuts.showcolor.5= shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) menu.file=Fichier menu.file.clearmacros=Supprimer toutes les macros menu.file.load=Ouvrir une figure (Ctrl-O) menu.file.loadjob=Ouvrir un exercice (Ctrl-J) menu.file.savejob=Enregistrer en tant qu'exercice (Ctrl-K) menu.file.save=Enregistrer la figure (Ctrl-S) menu.file.saveas=Enregistrer la figure sous... (Ctrl-A) menu.file.includemacros=Inclure toutes les macros menu.file.exit=Quitter (Alt-F4) menu.file.print=Imprimer menu.file.print.isoscale=\u00C9chelle 1:1 menu.file.savebmp=Exporter la figure (BMP) menu.file.savefig=Exporter la figure (FIG) menu.file.loadrun=Ouvrir une construction (Ctrl-R) menu.file.editrun=\u00C9diter une construction (Ctrl-X) menu.actions=\u00C9dition menu.actions.elementary=Outils de base menu.actions.complex=Autres outils menu.actions.move=Outils de d\u00E9placement menu.actions.decorative=Objets d\u00E9coratifs menu.options=Options menu.options.visual=Mode visuel (Ctrl-F6) menu.options.hidden=Montrer les objets cach\u00E9s (F9) menu.options.comment=\u00C9diter le commentaire (F10) menu.options.constructiondisplay=Afficher l'historique menu.options.grid=Afficher la grille (F12) menu.options.setgrid=\u00C9diter la largeur de la grille menu.options.showcolor=Montrer la couleur : menu.options.defaultcolor=Couleur par d\u00E9faut menu.options.defaultthickness=Epaisseur par d\u00E9faut menu.options.defaulttype=Style de point par d\u00E9faut menu.options.all=Toutes menu.options.setdigits=Pr\u00E9cision de l'affichage menu.options.shownames=Afficher le nom des objets(Ctrl-F6) menu.options.longnames=Utiliser les noms d'objets longs (Ctrl-F8) menu.options.obtuse=Utiliser les angles sup\u00E9rieurs \u00E0 180\u00B0 (Ctrl-F12) menu.options.solid=Ne pas utiliser la transparence menu.options.showvalues=Afficher les valeurs des objets (Ctrl-F7) menu.options.partial=Cercles incomplets(Ctrl-F9) menu.options.plines=Droites incompl\u00E8tes (Ctrl-F10) menu.options.arrow=Repr\u00E9senter les segments comme des vecteurs (Ctrl-F11) menu.options.editicons=Personnaliser la barre d'outils menu.options.back=Supprimer le dernier objet cr\u00E9\u00E9 menu.options.undo=Annuler Supprimer (Ctrl-Z) menu.zoom=Zoom menu.zoom.in=+ (+) menu.zoom.out=- (-) menu.zoom.left=Vers la gauche (fl\u00E8che-gauche) menu.zoom.right=Vers la droite (fl\u00E8che-droite) menu.zoom.up=Vers le haut (fl\u00E8che-haut) menu.zoom.down=Vers le bas (fl\u00E8che-bas) menu.macros=Macros menu.special.definemacro=D\u00E9finir une macro (Ctrl-F5) menu.special.runmacro=Ex\u00E9cuter une macro (F5) menu.special.savemacros=Enregistrer des macros... menu.special.loadmacros=Charger des macros... menu.special.deletemacros=Supprimer des macros... menu.special=Sp\u00E9cial menu.special.testjob=Tester cet exercice (Ctrl-F1) menu.special.jobcomment=Texte de l'exercice (F8) menu.special.export=Cr\u00E9er un fichier HTML... (Ctrl-E) menu.special.replay=Rejouer la construction menu.help=Aide menu.help.about=\u00C0 propos de ce programme menu.help.browser=Explorer l'aide et les d\u00E9mos menu.help.text=Aide simple menu.help.configure=Configurer le navigateur menu.help.help=Aide (F1) menu.help.macros=\u00C0 propos des macros menu.help.tools=Les outils menu.help.gui=Interface utilisateur menu.help.interactive=Mode descriptif menu.help.tips=Astuces menu.settings=Pr\u00E9f\u00E9rences menu.settings.fullicons=Utiliser deux barres d'ic\u00F4nes menu.settings.utf=Utiliser le codage UTF-8 menu.settings.autohide=Cacher le deuxi\u00E8me point d'intersection menu.settings.iconbartop=Barre d'ic\u00F4nes au-dessus de la figure menu.settings.showtips=Afficher les bulles d'aide menu.settings.simplegraphics=Utiliser le graphisme simplifi\u00E9 menu.settings.sure=Demander confirmation avant ouverture et fermeture menu.settings.pointon=Demander avant de cr\u00E9er un point sur un objet menu.settings.intersection=Demander avant de cr\u00E9er une intersection menu.settings.choice=Afficher une bo\u00EEte de dialogue pour les objets menu.settings.movename=Afficher la valeur des objets lors du d\u00E9placement menu.settings.movefixname=Afficher les valeurs des objets fixes lors du d\u00E9placement menu.settings.restricted=Mode \u00E9l\u00E8ve menu.colors=\u00C9diter les couleurs colors.d\u00E9faut=Prendre les couleurs par d\u00E9faut colors.color0=Couleur 1 (noir) colors.color1=Couleur 2 (vert) colors.color2=Couleur 3 (bleu) colors.color3=Couleur 4 (brun) colors.color4=Couleur 5 (cyan) colors.color5=Couleur 6 (rouge) colors.background=Arri\u00E8re-plan colors.select=Objet s\u00E9lectionn\u00E9 colors.target=Cible myfiledialog.dir=R\u00E9pertoire myfiledialog.file=Fichier myfiledialog.pattern=Filtre filedialog.open=Ouvrir filedialog.saveas=Enregistrer sous... filedialog.open.action=Ouvrir filedialog.saveas.action=Enregistrer filedialog.htmlsave=Enregistrer HTML filedialog.htmlsave.action=Enregistrer HTML pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Enregistrer load=Ouvrir abort=Annuler bound.release=D\u00E9tacher le point bound.bind=Lier \u00E0 un objet bound.error=Objet non trouv\u00E9 avant l'intersection! constructiondisplay.edit=Modifier l'objet constructiondisplay.copy=Copier dans le presse-papier edit.Title=Propri\u00E9t\u00E9s edit.name=Nom edit.hidden=Cach\u00E9 edit.text=Texte edit.fixed=Fixe edit.color=Couleur edit.ok=OK edit.cancel=Annuler edit.showname=Afficher le nom edit.point.title=\u00C9diter: point edit.point.type=Type edit.point.x=X edit.point.y=Y edit.point.intersection=Diff\u00E9rent de edit.point.showvalue=Afficher les coordonn\u00E9es edit.point.colortype=\u00C9paisseur edit.point.bound=Li\u00E9 edit.point.away=Loin de edit.point.close=Pr\u00E8s de edit.point.free=Libre edit.line.title=\u00C9diter: droite, demi-droite, segment edit.line.normal=Normal edit.line.thick=\u00C9pais edit.line.thin=Pointill\u00E9 edit.line.invisible=Invisible edit.line.type=Type edit.segment.length=Longueur edit.segment.showvalue=Afficher la longueur edit.circle.title=\u00C9diter: cercle edit.circle.length=Rayon edit.circle.partial=Partiel edit.circle.range=Arc edit.circle.killrange=Annuler Arc edit.plumb.restricted=Restreindre (au segment ou \u00E0 la demi-droite) edit.angle.title=\u00C9diter: angle edit.angle.length=Mesure edit.angle.displaysize=Afficher la mesure edit.angle.normal=Normale edit.angle.small=Petite edit.angle.large=Grande edit.expression.title=\u00C9diter: expression edit.expression=Expression arithm\u00E9tique edit.expression.prompt=Explication edit.area.title=\u00C9diter: polygone edit.area.back=En arri\u00E8re-plan export.title=Exporter en HTML export.pagetitle=Titre de la page export.width=Largeur export.height=Hauteur export.jar=Fichier jar export.comment=Enregistrer le commentaire export.file=Fichier de construction export.job=Afficher comme exercice export.color=Couleur export.backgroundcolor=Utiliser comme arri\u00E8re-plan de la page export.appletcolor=Utiliser comme arri\u00E8re-plan de l'applet export.plain=Simple export.3D=Bordure export.breaks=Revoir la construction avec des points d'arr\u00EAt export.icons=Bordure et ic\u00F4nes export.full=Bordure, ic\u00F4nes et ligne d'\u00E9tat export.nonvisual=Bordure, ic\u00F4nes et ligne de commande export.style=Style de l'applet export.setcolor=Choisir la couleur export.savefirst=Le fichier n'est pas enregistr\u00E9! export.soltext=Solution export.stylesheet=Feuille de style CSS export.solution=Fichier de la solution export.jumpsol=Aller \u00E0 la solution export.linksol=Lier \u00E0 la solution export.savesol=Enregistrer le fichier solution export.track=Trace (point) export.digits=Enregistrer la pr\u00E9cision d'affichage export.setsize=Taille export.signature=Cr\u00E9\u00E9 avec C.a.R. par R. Grothmann export.colors=Enregistrer les couleurs export.background=Enregistrer l'arri\u00E8re-plan help.title=Aide help.error=Impossible d'ouvrir le fichier d'aide! help.file=fr_schoolgeometry.txt coloreditor.title=\u00C9diter les couleurs coloreditor.red=Rouge coloreditor.green=Vert coloreditor.blue=Bleu coloreditor.color=Votre couleur comment.title=Commentaire de la figure comment.set=OK comment.cancel=Annuler comment.close=Fermer iconedit.title=\u00C9diter la barre d'ic\u00F4nes iconedit.twobars=Barre d'ic\u00F4nes \u00E0 deux lignes jobcomment.title=Description de l'exercice select.title=S\u00E9lection select.ok=OK select.cancel=Annuler select.comment=Afficher le commentaire select.all=Toutes message.circle.midpoint=Cercle: centre? message.circle.radius=Cercle: point sur le cercle (Maj: rayon fix\u00E9)? message.fixedcircle.midpoint=Cercle de rayon fixe: centre? message.fixedcircle.radius=Cercle de rayon fixe: rayon? message.edit=Editer: objet? message.line.first=Droite: premier point? message.line.second=Droite: deuxi\u00E8me point? message.ray.first=Demi-droite: origine? message.ray.second=Demi-droite: deuxi\u00E8me point? message.move.select=D\u00E9placer: choisir un point message.move.move=D\u00E9placer: d\u00E9placer le point? message.point=Point: choisir un point (Maj: fixe) message.segment.first=Segment: premier point? message.segment.second=Segment: deuxi\u00E8me point (Maj: longueur fixe)? message.fixedsegment.first=Segment de longueur fixe: premier point? message.fixedsegment.second=Segment de longueur fixe: cliquer quelque part message.intersection.first=Intersection: premier objet ou intersection? message.intersection.second=Intersection: second objet? message.hide=Cacher/montrer: choisir un objet message.tracker.select=Trace: Point ou droite (Maj: choisir un autre objet)? message.tracker.selectpoint=Trace: point \u00E0 d\u00E9placer? message.tracker.move=Trace: d\u00E9placer le point message.objecttracker.select=Trace automatique: point ou droite (Maj: choisir un autre objet)? message.objecttracker.object=Trace automatique: sur quelle droite ou cercle? message.objecttracker.selectpoint=Trace automatique: point \u00E0 d\u00E9placer? message.objecttracker.selectanypoint=Trace automatique: autre point \u00E0 d\u00E9placer? message.objecttracker.move=Trace automatique: d\u00E9placer le point message.objecttracker.start=Trace automatique: d\u00E9marrer l'animation message.parallel.first=Parall\u00E8le: droite? message.parallel.second=Parall\u00E8le: point? message.plumb.first=Perpendiculaire: droite? message.plumb.second=Perpendiculaire: point? message.circle3.first=Cercle: rayon: premier point? message.circle3.second=Cercle: rayon: deuxi\u00E8me point? message.circle3.midpoint=Cercle: centre? message.midpoint.first=Milieu: premier point? message.midpoint.second=Milieu: deuxi\u00E8me point? message.quadric=Conique: point num\u00E9ro message.angle.first=Angle: premier point? message.angle.root=Angle: sommet? message.angle.second=Angle: dernier point (Maj: mesure fixe)? message.fixedangle.first=Angle de mesure fixe: premier point? message.fixedangle.root=Angle de mesure fixe: sommet? message.fixedangle.second=Angle de mesure fixe: cliquer quelque part message.label.select=D\u00E9placer un nom: choisir un nom message.label.move=D\u00E9placer un nom: d\u00E9placer le nom message.boundedpoint=Point sur un objet: cercle or droite (Maj: ne pas fixer)? message.parameters=Macro: objets initiaux? message.targets=Macro: objets finaux? message.savejob.first=D\u00E9finir un exercice: dernier objet de l'\u00E9nonc\u00E9? message.savejob.second=D\u00E9finir un exercice: objet cible (Maj: ne pas v\u00E9rifier)? message.savejob.third=D\u00E9finir un exercice: autres objets \u00E0 afficher? message.runmacro=Macro %: %. % - % message.runmacro.return=(la barre d'espace choisit %) message.runmacro.fixes=(Maj fixe la s\u00E9lection) message.delete=Supprimer: choisir un objet message.reorder=R\u00E9ordonner: choisir un objet message.expression=Expression arithm\u00E9tique: choisir un emplacement message.area=Polygone plein: sommet? message.text=Texte: choisir un emplacement message.animator.point=Animation: point \u00E0 animer? message.animator.segment=Animation: cercle ou segment? message.animator.running=Animation: en cours (cliquer pour arr\u00EAter) message.range.first=Arc: dessiner le cercle \u00E0 partir de... message.range.second=Arc: ... jusqu'\u00E0? message.setaway.away=Garder l'intersection loin de quel point? message.setaway.close=Garder l'intersection pr\u00E8s de quel point? objectsedit.title=\u00C9diter les propri\u00E9t\u00E9s point.type.square=carr\u00E9 point.type.diamond=losange point.type.circle=cercle point.type.dot=point color.type.normal=normal color.type.thick=\u00E9pais color.type.thin=pointill\u00E9 color.type.invisible=invisible text.point=Point \u00E0 %, % text.line=Droite passant par % et % text.segment=Segment de % \u00E0 % text.segment.fixed=Segment de % \u00E0 % de longueur % text.ray=Demi-droite d'origine % vers % text.intersection=Intersection entre % et % text.circle=Cercle de centre % passant par % text.circle.fixed=Cercle de centre % passant par % de rayon % text.fixedcircle=Cercle de centre % de rayon % text.circle3=Arc de cercle de centre % de rayon allant de % \u00E0 % text.parallel=Parall\u00E8le passant par % \u00E0 % text.midpoint=Milieu de % et % text.quadric=Conique passant par % text.plumb=Perpendiculaire passant par % \u00E0 % text.angle=Angle % - % - % text.angle.fixed=Angle % - % - % de mesure % text.boundedpoint=Point sur % text.expression=Expression "%" \u00E0 %, % text.area=Polygone text.fixedangle=Angle % - % de mesure % name.Point=Point name.Intersection=Intersection name.OtherIntersection=Intersection name.Circle=Cercle name.Circle3=Cercle name.Segment=Segment name.Ray=Demi-droite name.Line=Droite name.TwoPointLine=Droite par deux points name.Parallel=Parall\u00E8le name.Midpoint=Milieu name.Quadric=Quadrique name.Plumb=Perpendiculaire name.Angle=Angle name.PointOn=PointSur name.Expression=Expression name.Polygon=Polygone name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=par name.short.Midpoint=M name.short.Quadric=quad name.short.Plumb=perp name.short.Angle=a name.short.PointOn=po name.short.Expression=E name.short.Polygon=poly prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray=r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==quad(,,,,) prompt.parallel==par(,) prompt.plumb==perp(,) prompt.angle==a(,,) prompt.area=poly(,,) prompt.quadric=quadrique(,,,,) prompt.function=fonction(,,,,,) popup.hidden=Afficher les objets cach\u00E9s popup.replay=Revoir la construction popup.empty=--- Macros --- replay.title=Revoir reorder.title=R\u00E9ordonner les objets reorder.message=Ins\u00E9rer apr\u00E8s reorder.notfound=Objet non trouv\u00E9! reorder.warning=Impossible! setgrid.title=Largeur de la grille setgrid.prompt=Entrer la nouvelle largeur de la grille setgrid.set=OK definemacro.title=D\u00E9finir une macro definemacro.name=Nom definemacro.comment=Commentaire de la macro definemacro.noparams=Objets initiaux de la macro! definemacro.nomacro=Il n'y a pas de macro disponible! definemacro.targetsonly=Cacher la construction definemacro.invisible=Cacher compl\u00E8tement definemacro.promptfor=Demander la valeur de macro.replace.title=Renommer une macro macro.replace=Renommer la macro: macro.replace.all=Toutes macro.usage=Mauvais usage de la macro (voir les indications)! macro.prompt.title=Param\u00E8tres macro.prompt.prompt=Entrer une valeur pour le param\u00E8tre macro.prompt.illegal=Valeur ill\u00E9gale! digits.title=Pr\u00E9cision de l'affichage (nombre de chiffres) digits.edit=Modifier digits.lengths=Montrer digits.angles=Angles editrun.title=\u00C9diter une construction editrun.run=Enregistrer et ex\u00E9cuter editrun.load=Autre construction sure.title=\u00CAtes-vous s\u00FBr? sure.macros=Supprimer toutes les macros? sure.delete=Ne pas enregistrer les changements courants? close.title=Fin close.prompt=Voulez-vous vraiment quitter ce programme? file.exists.title=Le fichier existe d\u00E9j\u00E0 file.exists.overwrite=Le fichier existe d\u00E9j\u00E0! L'\u00E9craser? exception.nparams=Nombre ill\u00E9gal de param\u00E8tres! exception.notfound=Objet non trouv\u00E9, ou d\u00E9fini apr\u00E8s l'expression! exception.type=Type ill\u00E9gal d'objet! exception.expression=Expression non valide! exception.canfix=L'objet ne peut \u00EAtre fix\u00E9! exception.fix=Valeur non valide! exception.novalue=Valeur non valide! exception.elementary=\u00C9lement non valide dans l'expression! exception.bracket=Il manque une parenth\u00E8se fermante! exception.quotes=Il manque des guillemets! exception.dot=Deux points dans un nombre! exception.nodigit=Pas de chiffre dans ce nombre! exception.function=Fonction inconnue! exception.parameter=Param\u00E8tre ill\u00E9gal! exception.macro=Objet initial ill\u00E9gal! exception.name=Il faut un nom! exception.job=Param\u00E8tres ill\u00E9gaux! exception.track=Trace: param\u00E8tres ill\u00E9gaux! exception.animate=Animation: param\u00E8tres ill\u00E9gaux! exception.boolean=Une valeur bool\u00E9enne doit \u00EAtre vrai ou faux! exception.value=Valeur ill\u00E9gale! exception.color=Couleur ill\u00E9gale! exception.colortype=\u00C9paisseur ill\u00E9gale! exception.type=Type de point ill\u00E9gal! exception.macroparameter=Objet initial ill\u00E9gal! exception.macrotarget=Objet final ill\u00E9gal! exception.prompt=Requ\u00EAte d'objet ill\u00E9gale! exception.prompt.parameter=Requ\u00EAte ill\u00E9gale! exception.parameters=Param\u00E8tre ill\u00E9gal! exception.brackets=Erreur de parenth\u00E9sage! exception.double=Le nom n'est pas unique! error.setaway=Ce point n'est pas d\u00E9fini avant l'intersection! error.objecttracker.depends=Le point est li\u00E9 \u00E0 un autre objet! constructiondisplay.title=figure function.hide=Cacher function.hide.short=cacher function.rename=Nom function.rename.short=nom function.value=Valeur function.value.short=valeur function.window=Fen\u00EAtre function.window.short=fen\u00EAtre function.color=couleur function.color.short=couleur function.thickness=\u00C9paisseur function.thickness.short=th function.type=Type function.type.short=type function.partial=partiel function.partial.short=partiel function.fill=Remplir function.fill.short=remplir function.back=Revenir function.back.short=revenir function.acute=Aigu function.acute.short=aigu function.obtuse=Obtus function.obtuse.short=obtus function.solid=Solide function.solid.short=solide function restrict=Restreindre function restrict.short=restreindre expression.value=Valeur configure.title=Configurer le navigateur configure.prompt=Entrer la ligne de commande du navigateur # New Resources: background.error=Impossible d'ouvrir la figure (GIF ou JPG) menu.background=Arri\u00E8re-plan menu.background.grab=Enregistrer la figure actuelle comme arri\u00E8re-plan menu.background.clear=Effacer l'arri\u00E8re-plan menu.background.load=Ouvrir une image d'arri\u00E8re-plan... menu.background.usesize=Mettre \u00E0 l'\u00E9chelle menu.background.tile=Papier peint menu.background.centre=Centrer l'arri\u00E8re-plan iconhelp.grab=Enregistrer/effacer l'arri\u00E8re-plan filedialog.backgroundload=Charger une image d'arri\u00E8re-plan filedialog.backgroundload.action=Ouvrir # New Resources in Version 2.14 menu.file.compress=Toujours compresser menu.file.savesvg=Exporter la figure (SVG) # Version 2.15 loading=Chargement en cours, patientez... # Version 2.18 and 2.19 menu.settings.font.d\u00E9faut=Police par d\u00E9faut menu.settings.font.bold=Gras menu.settings.font.large=Grande menu.file.saveeps=Exporter la figure (EPS) menu.fonts=Police # Version 2.20 bmpscaler.title=Mettre \u00E0 l'\u00E9chelle (bitmap) bmpscaler.width=Largeur bmpscaler.height=Hauteur bmpscaler.scale=\u00C9chelle (presser la touche Retour) bmpscaler.illegal=Valeur ill\u00E9gale # Version 2.21 renamemacro.title=Renommer une macro renamemacro.name=Macro: nouveau nom menu.special.renamemacro=Renommer une macro # Version 2.23 savequestion.title=Enregistrer la figure savequestion.qsave=Enregistrer les changements? # Version 2.25 exception.printsize=La page est trop petite pour cette figure! iconhelp.nohelp=Pas d'aide disponible iconhelp.type?=Point type iconhelp.thickness?=\u00C9paisseur iconhelp.color?=Couleur iconhelp.filled=Objet plein iconhelp.isback=Dessiner en arri\u00E8re-plan iconhelp.inverse=Angle oppos\u00E9 iconhelp.angle?=Taille # Version 2.28 message.objecttracker.stop=Trace automatique: arr\u00EAter l'animation (Maj+gauche/droite pour r\u00E9gler la vitesse)! # Version 2.31 menu.settings.indicate=Aper\u00E7u des objets menu.options.other=Pr\u00E9f\u00E9rences menu.help.welcome=Information sur la version courante iconhelp.twolines=Ic\u00F4nes sur deux lignes iconhelp.qintersection=Demander avant de cr\u00E9er les intersections iconhelp.qchoice=Afficher une bo\u00EEte de dialogue pour la s\u00E9lection d'objets iconhelp.qpointon=Demander avant de cr\u00E9er un point sur un objet iconhelp.noindicate=Ne pas surligner les objets au passage de la souris # Version 2.33 menu.file.new=Nouvelle figure (Ctrl-N) # Version 2.34 edit.text.title=\u00C9diter le texte edit.text.settings=Configurer menu.settings.filedialog=Remplacer les bo\u00EEtes de dialogue syst\u00E8me # Version 2.35 menu.settings.bitmapbackground=Inclure l'image de fond dans les bitmaps # Version 2.36 menu.file.savegraphics=Exporter la figure ... menu.file.savepng=Exporter la figure (PNG) bmpscaler.title=\u00C9chelle # Version 2.37 menu.file.savepdf=Exporter la figure (PDF) iconhelp.chord=Repr\u00E9senter comme segment # Version 2.39 message.setfixedangle.first=Fixer la mesure: premier point? message.setfixedangle.second=Fixer la mesure: sommet? message.setfixedangle.third=Fixer la mesure: dernier point? edit.fixedangle.set=Fixer la mesure... message.setfixedcircle.first=Fixer le rayon: premier point? message.setfixedcircle.second=Fixer le rayon: deuxi\u00E8me point? edit.fixedcircle.set=Fixer le rayon... # Version 2.40 minpointsize.title=Fixer la taille minimale du point minpointsize.prompt=Taille minimale du point (d\u00E9faut: 3) menu.settings.font.minpointsize=Taille minimale du point # Version 2.41 name.short.Track=Tr text.track=Trace de % quand % se d\u00E9place sur % trackquestion.keep=Garder la trace dans la figure? trackquestion.title=Garder la trace menu.options.track=Garder la trace (Maj-Enter) iconhelp.indicate=Aper\u00E7u des r\u00E9sultats de la figure iconhelp.nohelp=Pas d'aide disponible! # Version 2.42 objects.draw=Dessiner avec la souris menu.options.cleardraw=Effacer le dessin (Esc) iconhelp.draw=Dessiner avec la souris message.draw=Dessiner avec la souris (Esc pour effacer) shortcuts.draw=; # Version 2.43 message.move.select=D\u00E9placer: choisir un point (Maj: montrer l'\u00E9tat ant\u00E9rieur) message.rename=Renommer (A,B,C,...): choisir les objets iconhelp.rename=Renommer (A,B,C,...) objects.rename=Renommer (A,B,C,...) shortcuts.rename=: iconhelp.anglereduce=Ne pas montrer le c\u00F4t\u00E9 de l'angle # Version 2.45 menu.settings.smartboard=Mode smartboard shortcuts.zoom=% objects.zoom=Zoomer avec la souris message.zoom=D\u00E9placer le centre, ou zoomer # Version 2.46 menu.special.restricticons=Barre d'ic\u00F4nes restreinte # Version 2.47 menu.settings.indicate.simple=Ne montrer que les points lors de la cr\u00E9ation menu.settings.beginner=Mode d\u00E9butant question.again=Toujours poser la question # Version 2.49 definemacro.parameters=Param\u00E8tres ("=nom": fixe la valeur du param\u00E8tre) # Version 2.53 menu.actions.angles=Angles menu.actions.circles=Cercles menu.actions.lines=Droites menu.actions.points=Points # Version 3.00 info.title=Aide contextuelle info.related=Sujets li\u00E9s info.notfound=Sujet non trouv\u00E9! info.noresults=Cha\u00EEne de caract\u00E8res non trouv\u00E9e! info.searchresults=- R\u00E9sultats de la recherche - info.select=- Selection - info.search=Rechercher info.back=Revenir info.start=Aller iconhelp.info=Aide contextuelle menu.help.info=Aide contextuelle myfiledialog.homedir=Fichier CaR myfiledialog.windowshome=Mes Documents myfiledialog.mkdir=Cr\u00E9er r\u00E9pertoire myfiledialog.back=Revenir menu.file.alwaysclearmacros=Effacer macros avant chargement about.language=Langage bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Sauvegardes # Version 3.02 menu.options.hideduplicates=Cacher doublons # Version 3.03 menu.options.function=Cr\u00E9er une fonction text.function=Fonction ( % , % ) function.varmin=De function.varmax=\u00C0 function.dvar=Pas function.var=Variable function.y=Expression pour Y iconhelp.function=Cr\u00E9er une fonction menu.options.editlast=Modifier dernier objet iconhelp.control.edit=Modifier dernier objet iconhelp.control.hide=Cacher doublons edit.function.title=Fonction ou Courbe iconhelp.control.runmacro=Relancer derni\u00E8re macro # Version 3.05 point.type.cross=Croix point.type.dcross=Croix diagonale shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Unit\u00E9 menu.special.break=Breakpoints menu.bp.setbreak=Ins\u00E9rer un breakpoint menu.bp.clearbreak=Effacer un breakpoint menu.bp.sethidingbreak=Configurer des breakpoints cach\u00E9s menu.bp.animatebreak=Animer des breakpoints iconhelp.animatebreak=Animer des breakpoints message.animatebreak=Animer des breakpoints: clicquer pour arr\u00EAter (Maj gauche/droit pour vitesse)! menu.special.exporttemplate=Exporter en HTML avec mod\u00E8les templateload.open=Charger mod\u00E8le templateload.open.action=Ouvrir mod\u00E8le menu.settings.doubleclick=Double clic pour macros export.codebase=Code de base # Version 3.12 edit.equation=\u00C9quation # Version 3.23 menu.settings.squarepoints=Toujours tracer points en carr\u00E9 # Version 3.37 menu.options.export=Param\u00E8tres d'export pour graphiques menu.settings.minwidth=Longueur minimale de la droite est 1 menu.settings.minpointsize=Respecter taille de point minimale menu.settings.minfontsize=Respecter taille de police minimale menu.options.minpointsize=Taille de point minimale menu.options.minfontsize=Taille de police minimale # Version 3.38 menu.settings.scalepdf=\u00C9chelle PDF et EPS en sortie : 1:1 # Version 3.41 menu.file.clip=Coupe pour sortie graphique... clip.title=Param\u00E9trer la coupe clip.width=Largeur clip.height=Hauteur clip.screen=Pas de coupe # Version 3.44 iconhelp.large=Grossir taille des caract\u00E8res iconhelp.bold=Mettre en caract\u00E8res gras menu.options.largefont=Mettre en caract\u00E8res grande taille menu.options.boldfont=Caract\u00E8res en gras warning.previewframe=Cadre plus grand que la fen\u00EAtre! message.move.select=D\u00E9placer: choisir un point+Maj: plus de points, +Ctrl: montrer anciens \u00E9tats # Version 3.46 iconbar.showseparators=Montrer s\u00E9parateurs # Version 3.48 menu.options.printscaler=Param\u00E9trer taille export... menu.options.exportsettings=Param\u00E8tres export sp\u00E9ciaux... printscaler.title=Param\u00E9trer taille export printscaler.width=Largeur (en cm) printscaler.height=Hauteur (en cm) printscaler.dpi=R\u00E9solution (en dpi, d\u00E9faut 300) printscaler.linewidth=\u00C9paisseur lignes (en cm, d\u00E9faut 0.02) printscaler.pointsize=Taille points (en cm, d\u00E9faut 0.07) printscaler.textsize=Taille texte (en cm, d\u00E9faut 0.3) # Version 3.49 printscaler.screen=300 dpi printscaler.w=Largeur (en pixel) printscaler.h=Hauteur (en pixel) printscaler.scale=\u00C9chelle (relative \u00E0 l'\u00E9cran) printscaler.middle=Cut out de l'\u00E9cran printscaler.sizes=Utiliser valeurs menu.file.savepng=Sauvegarder graphiques en PNG warning.preview=La pr\u00E9visualisation ne fonctionne pas bien avec Java 1.1. iconedit.showseparators=Montrer s\u00E9parateurs printscaler.aspect=Conserver les rapports printscaler.presets=Presets printscaler.preset=Choisir printscaler.preset.300dpi=\u00C9chelle exacte \u00E0 300 dpi printscaler.preset.300dpi6=Largeur de 6 cm avec 300 dpi printscaler.preset.300dpi16=Largeur de 16 cm avec 300 dpi printscaler.preset.window=Taille de la fen\u00EAtre printscaler.preset.clip50=Taille de la fen\u00EAtre coup\u00E9e de 50% message.saving=Pri\u00E8re d'attendre menu.options.printscalepreview=Pr\u00E9visualiser l'export (Ctrl-F3) date=Construire # Version 3.51 help=Aide # Version 3.61 editconditionals.title=Modifier les conditionnels editconditionals.hidden=Cach\u00E9 editconditionals.superhidden=Compl\u00E8tement cach\u00E9 editconditionals.visible=Normal editconditionals.showname=Montrer nom editconditionals.showvalue=Montrer valeur editconditionals.background=Arri\u00E8re-plan editconditionals.solid=Opaque exception.superfluous=Texte superflu dans l'expression # Version 3.63 select.comment.title=Commentaire de la macro # Version 3.68 edit.area.area=Aire # Version 3.73 myfiledialog.oldfiles=Anciens fichiers # Version 3.74 iconhelp.load=Ouvrir construction (Ctrl-O) iconhelp.save=Sauvegarder construction (Ctrl-S) iconhelp.new=Cr\u00E9er construction (Ctrl-N) # Version 3.81 warning.loadbackground=Erreur lors chargement arri\u00E8re-plan # Version 3.9 function.x=Expression pour X (vide pour fonctions) # Version 3.91 constructiondisplay.select=Selection constructiondisplay.all=Tous les objets constructiondisplay.visible=Objets visibles constructiondisplay.points=Points constructiondisplay.lines=Lignes constructiondisplay.circles=Cercles constructiondisplay.angles=Angles constructiondisplay.other=Autres objets menu.file.copypng=Copier dans presse-papier exception.clipboardcopy=Ne peut copier! menu.options.finegrid=Axes seulement # Vesion 3.93 edit.function.centre=S\u00E9lectionner le centre edit.function.free=Rel\u00E2cher le centre message.setcenter=S\u00E9lectionner le point central! # Vesion 3.94 message.edit=Modifier: Objet (Maj: plus d'objets, Ctrl: conditionnels)? # Version 3.97 error.image=Image n'est pas dans le m\u00EAme r\u00E9pertoire que la construction? filedialog.imageload=Charger image filedialog.imageload.action=Charger prompt.image=image(,,,) objects.image=Image shortcuts.image=_ # Version 3.98 exception.depends=Objet % depend de l'objet courant error.depends=Objet % depend de l'objet courant constructiondisplay.sorted=Tri par ordre de construction # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Expressions # Version 4.00 iconhelp.image=Charger image (_) message.image=Point d'ancrage de l'image % message.image.last=Point d'ancrage de la derni\u00E8re image (ou choisir un point) editconditionals.z=Valeur du Z-Buffer # Version 4.01 name.FixedAngle=Angle fix\u00E9 # Version 4.04 menu.moresettings=Pr\u00E9f\u00E9rences menu.settings.language=Choisir langue language.title=Choisir langue language.prompt=Langue au prochain d\u00E9marrage # Version 4.05 constructiondisplay.invalid=Objets invalides # Version 4.08 menu.settings.constructiondisplay=Afficher l'historique (F11) # Version 4.09 constructiondisplay.editconditions=Modifier les conditionnels constructiondisplay.delete=Effacer objets s\u00E9lectionn\u00E9s constructiondisplay.hide=Cacher ou montrer constructiondisplay.superhide=Super cacher # Version 4.2 edit.expression.slider=Montrer comme curseur menu.grid.options=Options grille menu.options.leftsnap=Coller en draguant avec le bouton gauche menu.settings.boundingbox=Cr\u00E9er fichier bb-file # Version 4.3 latexsettings.title=Param\u00E9trer l'export vers LaTeX latexsettings.boundingbox=Cr\u00E9er fichier bb-file pour bo\u00EEte ferm\u00E9e latexsettings.latexinput=Cr\u00E9er fichier LaTeX idx-file latexsettings.doubledollar=LaTeX ins\u00E8re $$...$$ latexsettings.dollar=LaTeX ins\u00E8re $...$ latexsettings.nodollar=LaTeX ins\u00E8re les autres cha\u00EEnes de caract\u00E8res latexsettings.fullpath=Utiliser chemin du fichier printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=Largeur de 12 cm avec 300 dpi printscaler.latex=Sauvegarder en LaTeX menu.background.usewidth=Ajuster hauteur seulement # Version 4.4 menu.options.restricted=Restreindre intersections menu.options.sizes=Param\u00E9trer tailles... sizesdialog.title=Tailles minlinesize.prompt=Longueur minimale de la droite (d\u00E9faut: 1) minpointsize.prompt=Taille point minimale (d\u00E9faut: 3) minfontsize.prompt=Taille police minimale (d\u00E9faut: 12) arrowsize.prompt=Taille fl\u00E8che (d\u00E9faut: 10) selectionsize.prompt=S\u00E9lectionner taille (d\u00E9faut: 1.5) warning.loadmacros=Erreur pendant chargement de la macro! warning.macrodefinition=% est utilis\u00E9, mais n'est pas dans la macro! edit.circle.bounds=Montrer comme arc edit.circle.range=Param\u00E9trer l'arc... # Version 4.5 edit.track.dmin=Pas minimal (d\u00E9faut: 0.001) # Version 4.6 menu.settings.smallicons=Utiliser petites ic\u00F4nes menu.settings.oldicons=Utiliser anciennes ic\u00F4nes # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof=Trace de % quand % de changement # Version 5 # Fix error.image edit.discrete=Discr\u00E8t error.fixedsegment=Ne peut r\u00E9parer ce segment! export.zoom=Zoom avec la souris export.popup=Afficher menu # Version 5.1 edit.intersection.alternate=Peut alterner export.restrictedmove=Restreindre mouvements # Version 5.3 # Fix message.boundedpoint message.bindpoint=Lier point \u00E0 l'objet (Maj: continu, Ctrl: dans l'objet) edit.point.inside=Dans l'objet edit.point.increment=Incr\u00E9ment de la grille (0=libre) edit.more=Plus... menu.settings.more=Afficher bouton pour formats conditionnels menu.file.loadexamples=Charger un exemple... ./src/rene/zirkel/docs/CVS/RevisionCache/ZirkelProperties_sk.properties#1.10000644000175000017500000013171711144764476025541 0ustar yvesyveslanguage=sk_ version=Verzia homefile=index.html homepage=http://www.z-u-l.de/ codepage.help=CP1250 about.title=O tomto programe about.name=\u0160kolsk\u00e1 geometria about.programmed=Autor programu title=\u0160kolsk\u00e1 geometria close=Zatvori\u0165 ok=OK cancel=Zru\u0161i\u0165 done=Dobr\u00e1 pr\u00e1ca! message=Spr\u00e1va yes=\u00c1no no=Nie abort=Preru\u0161i\u0165 true=pravda false=nepravda warning.nojob=Toto nie je zadanie! warning.print=Tla\u010d zlyhala! warning.reset=T\u00e1to vo\u013eba bude zapnut\u00e1 potom, \u010do ukon\u010d\u00edte a znovu na\u0161tartujete C.a.R.! question.title=Ot\u00e1zka question.intersection=Vytvori\u0165 tento priese\u010dn\u00edk? question.pointon=Vytvori\u0165 bod na tomto objekte? colors.black=\u010cierna colors.blue=Modr\u00e1 colors.green=Zelen\u00e1 colors.brown=Hned\u00e1 colors.cyan=Svetlo modr\u00e1 colors.red=\u010cerven\u00e1 objects.point=Bod objects.segment=\u00dase\u010dka objects.line=Priamka objects.ray=Polpriamka objects.circle=Kru\u017enica objects.intersection=Priese\u010dn\u00edk objects.move=Pohybova\u0165 bodom objects.hide=Skry\u0165 objekt objects.edit=Upravi\u0165 bod objects.tracker=Sledova\u0165 bod alebo priamku objects.objecttracker=Sledova\u0165 bod alebo priamku na objekte objects.parallel=Rovnobe\u017eka objects.plumb=Kolmica objects.circle3=Kru\u017enica ur\u010den\u00e1 troma bodmi objects.midpoint=Stred objects.quadric=Ku\u017ee\u013eose\u010dka objects.angle=Uhol objects.boundedpoint=Bod na objekte objects.parameter=Nastavi\u0165 parametre makra objects.targets=Nastavi\u0165 cie\u013eov\u00e9 objekty makra objects.definejob=Definova\u0165 zadanie objects.runmacro=Spusti\u0165 makro objects.delete=Zmaza\u0165 objekty a ich dc\u00e9rske objekty objects.reorder=Potla\u010di\u0165 objekty do pozadia objects.animate=Anim\u00e1cia objects.expression=Aritmetick\u00fd v\u00fdraz objects.area=Mnohouholn\u00edk objects.text=Text objects.fixedcircle=Kru\u017enica s fixnou ve\u013ekos\u0165ou objects.fixedangle=Fixn\u00fd uhol objects.fixedsegment=\u00dase\u010dka s fixnou d\u013a\u017ekou iconhelp.point=Bod (p) iconhelp.segment=\u00dase\u010dka (s) iconhelp.line=Priamka (g) iconhelp.ray=Polpriamka (r) iconhelp.circle=Kru\u017enica (c) iconhelp.intersection=Priese\u010dn\u00edk (i) iconhelp.move=Posun\u00fa\u0165 bodom (m)+Ctrl (Body): Zobrazova\u0165 star\u00fa kon\u0161trukciu+Ctrl: Pos\u00fava\u0165 fixn\u00fdmi objektami+Shift: Pos\u00fava\u0165 viac ako jeden objekt iconhelp.hide=Skry\u0165 objekty (h)+Shift: Skry\u0165 \u00faplne iconhelp.edit=Upravi\u0165 objekty (e)+Shift: Upravi\u0165 viac objektov+Ctrl: Upravi\u0165 posledn\u00fd objekt iconhelp.tracker=Sledova\u0165 stopu bodu alebo priamky (t) iconhelp.objecttracker=Automatick\u00e9 sledovanie stopy bodu alebo priamky (o)+Ctrl: Ponecha\u0165 stopu (Shift-Enter) iconhelp.parallel=Rovnobe\u017eka (1) iconhelp.plumb=Kolmica (2) iconhelp.circle3=Kru\u017enica ur\u010den\u00e1 troma bodmi (3) iconhelp.midpoint=Stred (4) iconhelp.quadric=Ku\u017ee\u013eose\u010dka prech\u00e1dzaj\u00faca cez 5 bodov ($) iconhelp.angle=Uhol (a) iconhelp.boundedpoint=Vytvori\u0165 bod na objekte (5)+Shift: Nie prichyten\u00fd k objektu iconhelp.hidden=Uk\u00e1za\u0165 alebo skry\u0165 skryt\u00e9 objekty (F9) iconhelp.color=Nastavi\u0165 predvolen\u00fa farbu objektu (Ctrl-1,2,3,4) iconhelp.type=Typ bodu (Ctrl-5,6,7,8,9,0) iconhelp.type0=Typ bodu iconhelp.thickness=Hr\u00fabka objektu (Alt-5,6,7) iconhelp.back=Zmaza\u0165 posledn\u00fd objekt (<-) iconhelp.thickness0=Hr\u00fabka objektu iconhelp.partial=Nevykres\u013eova\u0165 cel\u00fa kru\u017enicu (Ctrl-F9) iconhelp.plines=Nevykres\u013eova\u0165 cel\u00e9 priamoky (Ctrl-F10) iconhelp.arrow=\u00dase\u010dky vytv\u00e1ra\u0165 ako vektory (Ctrl-F11) iconhelp.showcolor=Zobrazova\u0165 iba vybran\u00e9 farby (Alt-1,2,3,4) iconhelp.runmacro=Spusti\u0165 makro (9)+Ctrl: Spusti\u0165 posledn\u00e9 makro iconhelp.macro=Nastavi\u0165 parametre, cie\u013eov\u00e9 objekty a defin\u00edciu makra (7,8,Ctrl-5) iconhelp.expression=Aritmetick\u00fd v\u00fdraz (x) iconhelp.showvalue=Zobrazi\u0165 hodnotu objektu (Ctrl-F7) iconhelp.showname=Zobrazi\u0165 meno objektu (Ctrl-F6) iconhelp.obtuse=Vytv\u00e1ra\u0165 uhly v\u00e4\u010d\u0161ie ako 180 stup\u0148ov (Ctrl-F12) iconhelp.solid=Nepou\u017e\u00edva\u0165 prieh\u013eadnos\u0165 iconhelp.longnames=Pou\u017e\u00edva\u0165 dlh\u00e9 men\u00e1 objektov (Ctrl-F8) iconhelp.grid=Zobrazi\u0165 mrie\u017eku (F12) iconhelp.comment=Zobrazi\u0165 a upravi\u0165 koment\u00e1r (F10) iconhelp.defaults=Predvolen\u00e9 nastavenia iconhelp.macro0=Nastavi\u0165 parametre, cie\u013eov\u00e9 objekty a defin\u00edciu makra iconhelp.visual=Prep\u00edna\u0165 vizu\u00e1lny m\u00f3d kon\u0161trukcie iconhelp.replay=Prehra\u0165 kon\u0161trukciu iconhelp.oneforward=Dopredu iconhelp.fastforward=Zr\u00fdchlene dopredu iconhelp.allforward=Na koniec iconhelp.oneback=Sp\u00e4\u0165 iconhelp.fastback=Zr\u00fdchlene sp\u00e4\u0165 iconhelp.allback=Na za\u010diatok iconhelp.close=Zatvori\u0165 iconhelp.area=Mnohouholn\u00edk (0) iconhelp.text=Text na nieko\u013eko riadkov (b) iconhelp.fixedcircle=Kru\u017enica s fixn\u00fdm polomerom (,) iconhelp.fixedangle=Uhol s fixnou ve\u013ekos\u0165ou (.) iconhelp.fixedsegment=\u00dase\u010dka s fixnou d\u013a\u017ekou (#) iconhelp.animate=Anim\u00e1cia bodu (") iconhelp.delete=Zmaza\u0165 objekty a ich dc\u00e9rske objekty (Del) iconhelp.undo=Vr\u00e1ti\u0165 sp\u00e4\u0165 naposledy vymazan\u00e9 objekty (Ctrl-z) iconhelp.nextbreak=Sko\u010di\u0165 na nasleduj\u00face preru\u0161enie iconhelp.setbreak=Prep\u00edna\u0165 preru\u0161enie+Shift: Ukryt\u00e9 preru\u0161enie iconhelp.zoom=Pribli\u017eova\u0165 a vz\u010fa\u013eova\u0165 my\u0161ou (%) shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.showcolor.4= shortcuts.showcolor.5= shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) menu.file=S\u00fabor menu.file.clearmacros=Zmaza\u0165 pou\u017e\u00edvate\u013esk\u00e9 makr\u00e1 menu.file.load=Na\u010d\u00edta\u0165 kon\u0161trukciu ... (Ctrl-o) menu.file.loadjob=Na\u010d\u00edta\u0165 zadanie ... (Ctrl-j) menu.file.savejob=Ulo\u017ei\u0165 ako zadanie ... (Ctrl-k) menu.file.save=Ulo\u017ei\u0165 t\u00fato kon\u0161trukciu (Ctrl-s) menu.file.saveas=Ulo\u017ei\u0165 t\u00fato kon\u0161trukciu do ... (Ctrl-a) menu.file.includemacros=Zahrn\u00fa\u0165 v\u0161etky makr\u00e1 menu.file.exit=Koniec (Alt-F4) menu.file.print=Tla\u010di\u0165 ... menu.file.print.isoscale=Mierka 1:1 v cm menu.file.savebmp=Ulo\u017ei\u0165 obr\u00e1zok (ako BMP) ... menu.file.savefig=Ulo\u017ei\u0165 obr\u00e1zok (ako FIG) ... menu.file.loadrun=Na\u010d\u00edta\u0165 popisn\u00fa kon\u0161trukciu ... (Ctrl-r) menu.file.editrun=Upravi\u0165 popisn\u00fa kon\u0161trukciu ... (Ctrl-x) menu.actions=Upravi\u0165 menu.actions.elementary=Element\u00e1rne n\u00e1stroje menu.actions.complex=Zlo\u017eitej\u0161ie n\u00e1stroje menu.actions.move=N\u00e1stroje pohybu menu.actions.decorative=\u010eal\u0161ie objekty menu.options=Mo\u017enosti menu.options.visual=Prep\u00edna\u0165 vizu\u00e1lny m\u00f3d (Ctrl-F6) menu.options.hidden=Zobrazi\u0165 skryt\u00e9 objekty (F9) menu.options.comment=Upravi\u0165 koment\u00e1r (F10) menu.options.constructiondisplay=Zobrazi\u0165 popis menu.options.grid=Zobrazi\u0165 mrie\u017eku (F12) menu.options.setgrid=Nastavi\u0165 \u0161\u00edrku mrie\u017eky ... menu.options.showcolor=Zobrazi\u0165 farbu menu.options.defaultcolor=Predvolen\u00e1 farba menu.options.defaultthickness=Predvolen\u00e1 hr\u00fabka menu.options.defaulttype=Predvolen\u00fd typ bodu menu.options.all=V\u0161etko menu.options.setdigits=Nastavi\u0165 \u010d\u00edslice menu.options.shownames=Zobrazi\u0165 men\u00e1 objektov (Ctrl-F6) menu.options.longnames=Dlh\u00e9 men\u00e1 objektov (Ctrl-F8) menu.options.obtuse=Pou\u017ei\u0165 uhly v\u00e4\u010d\u0161ie ako 180 stup\u0148ov (Ctrl-F12) menu.options.solid=Nepou\u017e\u00edva\u0165 prieh\u013eadnos\u0165 menu.options.showvalues=Zobrazi\u0165 hodnoty objektov (Ctrl-F7) menu.options.partial=Nekresli\u0165 cel\u00e9 kru\u017enice (Ctrl-F9) menu.options.plines=Nekresli\u0165 cel\u00e9 priamky (Ctrl-F10) menu.options.arrow=\u0160\u00edpky (Ctrl-F11) menu.options.editicons=Upravi\u0165 panel n\u00e1strojov menu.options.back=Zmaza\u0165 posledn\u00fd objekt (<-) menu.options.undo=Zru\u0161i\u0165 zmazanie (Ctrl-z) menu.zoom=Poh\u013ead menu.zoom.in=z bli\u017e\u0161ia (+) menu.zoom.out=z v\u00e4\u010d\u0161ej vzdialenosti (-) menu.zoom.left=V\u013eavo (\u0160\u00edpka do\u013eava) menu.zoom.right=Vpravo (\u0160\u00edpka doprava) menu.zoom.up=Hore (\u0160\u00edpka hore) menu.zoom.down=Dole (\u0160\u00edpka dole) menu.macros=Makr\u00e1 menu.special.definemacro=Definova\u0165 makro (Ctrl-F5) menu.special.runmacro=Spusti\u0165 makro ... (F5) menu.special.savemacros=Ulo\u017ei\u0165 makro ... menu.special.loadmacros=Na\u010d\u00edta\u0165 makr\u00e1 ... menu.special.deletemacros=Zmaza\u0165 makr\u00e1 ... menu.special=\u0160peci\u00e1lne menu.special.testjob=Odsk\u00fa\u0161a\u0165 toto zadanie (Ctrl-F1) menu.special.jobcomment=Nastavi\u0165 text zadania ... (F8) menu.special.export=Vytvori\u0165 HTML str\u00e1nku ... (Ctrl-e) menu.special.replay=Prehra\u0165 t\u00fato kon\u0161trukciu menu.help=Pomoc menu.help.about=O tomto programe menu.help.browser=Presk\u00fama\u0165 Pomoc a Uk\u00e1\u017eky menu.help.text=Jednoduch\u00e1 Pomoc menu.help.configure=Nastavi\u0165 prehliada\u010d str\u00e1nok menu.help.help=Pomoc (F1) menu.help.macros=O makr\u00e1ch menu.help.tools=N\u00e1stroje menu.help.gui=Pou\u017e\u00edvate\u013esk\u00e9 rozhranie menu.help.interactive=Popisn\u00e9 kon\u0161trukcie menu.help.tips=Nieko\u013eko dobr\u00fdch r\u00e1d menu.settings=\u0160peci\u00e1lne nastavenia menu.settings.fullicons=Pou\u017eite dva pln\u00e9 panely n\u00e1strojov menu.settings.utf=Pou\u017ei\u0165 UTF-8 k\u00f3dovanie menu.settings.autohide=Skry\u0165 druh\u00fd priese\u010dn\u00edk menu.settings.iconbartop=Panel n\u00e1strojov nad kon\u0161trukciou menu.settings.showtips=Zobrazova\u0165 dobr\u00e9 rady menu.settings.simplegraphics=Pou\u017ei\u0165 jednoduch\u0161iu grafiku menu.settings.sure=Potvrdi\u0165 pred na\u010d\u00edtan\u00edm a zatvoren\u00edm menu.settings.pointon=Op\u00fdta\u0165 sa predt\u00fdm ako sa vytvor\u00ed bod na objekte menu.settings.intersection=Op\u00fdta\u0165 sa predt\u00fdm ako sa vytvor\u00ed priese\u010dn\u00edk menu.settings.choice=Zobrazi\u0165 dial\u00f3gov\u00e9 okno v\u00fdberu objektov menu.settings.movename=Zobrazova\u0165 hodnoty objektov pri pohybe menu.settings.movefixname=Zobrazova\u0165 hodnoty fixn\u00fdch objektov pri pohybe menu.settings.restricted=\u0160kolsk\u00fd m\u00f3d menu.colors=Nastavenie farieb colors.default=Pou\u017ei\u0165 predvolen\u00e9 farby colors.color0=Farba 1 (\u010cierna) colors.color1=Farba 2 (Zelen\u00e1) colors.color2=Farba 3 (Modr\u00e1) colors.color3=Farba 4 (Hned\u00e1) colors.color4=Farba 5 (Svetlo modr\u00e1) colors.color5=Farba 6 (\u010cerven\u00e1) colors.background=Pozadie colors.select=Vybran\u00fd objekt colors.target=Cie\u013eov\u00fd objekt myfiledialog.dir=Prie\u010dinok myfiledialog.file=S\u00fabor myfiledialog.pattern=Pr\u00edpony filedialog.open=Otvori\u0165 filedialog.saveas=Ulo\u017ei\u0165 ako ... filedialog.open.action=Otvori\u0165 filedialog.saveas.action=Ulo\u017ei\u0165 filedialog.htmlsave=Ulo\u017ei\u0165 HTML filedialog.htmlsave.action=Ulo\u017ei\u0165 pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Ulo\u017ei\u0165 load=Na\u010d\u00edta\u0165 abort=Preru\u0161i\u0165 bound.release=Zru\u0161i\u0165 v\u00e4zbu bodu bound.bind=Viaza\u0165 na objekt bound.error=Object not found before intersection! constructiondisplay.edit=Upravi\u0165 objekt constructiondisplay.copy=Kop\u00edrova\u0165 do schr\u00e1nky (do clipboardu) edit.Title=Vlastnosti edit.name=Meno edit.hidden=Skryt\u00fd edit.text=Text edit.fixed=Fixovan\u00fd/\u00e1 edit.color=Farba edit.ok=OK edit.cancel=Zru\u0161i\u0165 edit.showname=Zobrazi\u0165 meno edit.point.title=Upravi\u0165 bod edit.point.type=Zna\u010dka edit.point.x=X edit.point.y=Y edit.point.intersection=R\u00f4zny od edit.point.showvalue=Zobrazi\u0165 s\u00faradnice edit.point.colortype=Hr\u00fabka edit.point.bound=Viazan\u00fd edit.point.away=\u010co naj\u010falej od edit.point.close=\u010co najbli\u017e\u0161ie ku edit.point.free=Vo\u013en\u00fd edit.line.title=Upravi\u0165 priamku, polpriamku, \u00fase\u010dku edit.line.normal=Norm\u00e1lna edit.line.thick=Hrub\u00e1 edit.line.thin=Tenk\u00e1 edit.line.invisible=Nevidite\u013en\u00e1 edit.line.type=Typ edit.segment.length=D\u013a\u017eka edit.segment.showvalue=Zobrazi\u0165 d\u013a\u017eku edit.circle.title=Upravi\u0165 kru\u017enicu edit.circle.length=Polomer edit.circle.partial=Zobrazova\u0165 len \u010das\u0165 edit.plumb.restricted=Obmedzen\u00e1/\u00fd edit.angle.title=Upravi\u0165 uhol edit.angle.length=Ve\u013ekos\u0165 edit.angle.displaysize=Zobrazova\u0165 ve\u013ekos\u0165 edit.angle.normal=Norm\u00e1lna edit.angle.small=Mal\u00e1 edit.angle.large=Ve\u013ek\u00e1 edit.expression.title=Upravi\u0165 v\u00fdraz edit.expression=Aritmetick\u00fd v\u00fdraz edit.expression.prompt=Vysvetlenie edit.area.title=Upravi\u0165 mnohouholn\u00edk edit.area.back=V pozad\u00ed export.title=Export do HTML export.pagetitle=N\u00e1vov str\u00e1nky export.width=\u0160\u00edrka export.height=V\u00fd\u0161ka export.jar=S\u00fabor jar export.comment=Ulo\u017ei\u0165 koment\u00e1r export.file=S\u00fabor kon\u0161trukcie export.job=Zobrazi\u0165 ako zadanie export.color=Farba export.backgroundcolor=Pou\u017ei\u0165 na pozadie str\u00e1nky export.appletcolor=Pou\u017ei\u0165 na pozadie appletu export.plain=Jednoduch\u00fd export.3D=Okraje export.breaks=Prehra\u0165 s bodmi preru\u0161enia export.icons=Okraje a ikony export.full=Okraje, ikony a stav export.nonvisual=Okraje, ikony a vstupn\u00fd riadok export.style=\u0160t\u00fdl appletu export.setcolor=Vyberte farbu export.savefirst=S\u00fabor sa neulo\u017eil! export.soltext=Rie\u0161enie export.stylesheet=S\u00fabor CSS \u0161t\u00fdlov export.solution=S\u00fabor s rie\u0161en\u00edm export.jumpsol=Presko\u010di\u0165 na rie\u0161enie export.linksol=Odkaz na rie\u0161enie export.savesol=Ulo\u017ei\u0165 s\u00fabor s rie\u0161en\u00edm export.track=Sledovan\u00fd bod export.digits=Ulo\u017ei\u0165 \u010d\u00edslice export.setsize=Ve\u013ekos\u0165 export.signature=Vytvoren\u00e9 pomocou C.a.R. od R. Grothmanna export.colors=Ulo\u017ei\u0165 definovan\u00e9 farby export.background=Ulo\u017ei\u0165 definovan\u00e9 pozadie help.title=Pomoc help.error=Nepodarilo sa otvori\u0165 s\u00fabor s pomocou! help.file=sk_info.txt coloreditor.title=Upravi\u0165 farbu coloreditor.red=\u010cerven\u00e1 coloreditor.green=Zelen\u00e1 coloreditor.blue=Modr\u00e1 coloreditor.color=Va\u0161a farba comment.title=Koment\u00e1r kon\u0161trukcie comment.set=Nastavi\u0165 comment.cancel=Zru\u0161i\u0165 comment.close=Zavrie\u0165 iconedit.title=Upravi\u0165 panel s ikonami iconedit.twobars=Panel n\u00e1strojov m\u00e1 dva riadky jobcomment.title=Zadanie select.title=V\u00fdber select.ok=OK select.cancel=Zru\u0161i\u0165 select.comment=Zobrazi\u0165 koment\u00e1r select.all=V\u0161etko message.circle.midpoint=Kru\u017enica: Stred? message.circle.radius=Kru\u017enica: Bod na kru\u017enici (shift: fixn\u00fd polomer)? message.fixedcircle.midpoint=Kru\u017enica s fixnou ve\u013ekos\u0165ou: Stred? message.fixedcircle.radius=Kru\u017enica s fixnou ve\u013ekos\u0165ou: Polomer? message.line.first=Priamka: Prv\u00fd bod? message.line.second=Priamka: Druh\u00fd bod? message.ray.first=Polpriamka: Za\u010diato\u010dn\u00fd bod? message.ray.second=Polpriamka: Druh\u00fd bod? message.move.select=Pos\u00fava\u0165: Vyberte objekt (shift: viac objektov)! message.move.move=Pos\u00fava\u0165: Posun\u00fa\u0165 bod? message.point=Bod: Nastavi\u0165 bod (shift: fixn\u00fd)! message.segment.first=\u00dase\u010dka: Za\u010diato\u010dn\u00fd bod? message.segment.second=\u00dase\u010dka: Koncov\u00fd bod (shift: fixn\u00e1 d\u013a\u017eka)? message.fixedsegment.first=\u00dase\u010dka s fixnou d\u013a\u017ekou: Za\u010diato\u010dn\u00fd bod? message.fixedsegment.second=\u00dase\u010dka s fixnou d\u013a\u017ekou: Klikite niekde! message.intersection.first=Priese\u010dn\u00edk: Prv\u00fd objekt na ktorom priese\u010dn\u00edk le\u017e\u00ed? message.intersection.second=Priese\u010dn\u00edk: Prv\u00fd objekt? message.hide=Skry\u0165/Uk\u00e1za\u0165: Vyberte objekt! message.tracker.select=Stopa: Bod alebo priamka, ktor\u00e1 sa bude sledova\u0165 (shift: viac)? message.tracker.selectpoint=Stopa: Bod, ktor\u00fdm sa pohybuje? message.tracker.move=Stopa: Pohybujte bodom! message.objecttracker.select=Automatick\u00e1 stopa: Bod alebo priamka, ktor\u00e1 sa bude sledova\u0165 (shift: viac)? message.objecttracker.object=Automatick\u00e1 stopa: Priamka alebo kru\u017enica, bod na objekte, posuvn\u00edk? message.objecttracker.selectpoint=Automatick\u00e1 stopa: Bod, ktor\u00fdm sa bude pohybova\u0165 na priamke alebo kru\u017enici? message.objecttracker.selectanypoint=Automatick\u00e1 stopa: Nejak\u00fd \u010fal\u0161\u00ed bod, ktor\u00fdm sa bude pohybova\u0165? message.objecttracker.move=Automatick\u00e1 stopa: Pohybujte bodom! message.objecttracker.start=Automatick\u00e1 stopa: Spustite anim\u00e1ciu! message.parallel.first=Rovnobe\u017eka: Na ktor\u00fa priamku? message.parallel.second=Rovnobe\u017eka: Ktor\u00fdm bodom? message.plumb.first=Kolmica: Na ktor\u00fa priamku? message.plumb.second=Kolmica: Ktor\u00fdm bodom? message.circle3.first=Kru\u017enica: Prv\u00fd bod polomeru? message.circle3.second=Kru\u017enica: Druh\u00fd bod polomeru? message.circle3.midpoint=Kru\u017enica: Stred? message.midpoint.first=Stred \u00fase\u010dky: Za\u010diato\u010dn\u00fd bod? message.midpoint.second=Stred \u00fase\u010dky: Koncov\u00fd bod? message.quadric=Ku\u017ee\u0161ose\u010dka: Bod \u010d\u00edslo message.angle.first=Uhol: Bod na prvom ramene uhla? message.angle.root=Uhol: Vrchol? message.angle.second=Uhol: Bod na druhom ramene uhla (shift: fixn\u00e1 ve\u013ekos\u0165)? message.fixedangle.first=Uhol s fixnou ve\u013ekos\u0165ou: Bod na ramene uhla? message.fixedangle.root=Uhol s fixnou ve\u013ekos\u0165ou: Vrchol? message.fixedangle.second=Uhol s fixnou ve\u013ekos\u0165ou: Kliknite niekde! message.label.select=Posun\u00fa\u0165 menovku: Vyberte menovku! message.label.move=Posun\u00fa\u0165 menovku: Posunte menovkou! message.boundedpoint=Bod na objekte: Kru\u017enica alebo priamka (shift: nefixova\u0165)? message.parameters=Parametre makra: Vstupn\u00e9 objekty? message.targets=Cie\u013eov\u00e9 objekty makra: V\u00fdstupn\u00e9 objekty? message.savejob.first=Definova\u0165 zadanie: Naposledy zobrazen\u00fd objekt? message.savejob.second=Definova\u0165 zadanie: Cie\u013eov\u00fd objekt (shift: neoverova\u0165)? message.savejob.third=Definova\u0165 zadanie: \u010eal\u0161ie objekty ktor\u00e9 sa bud\u00fa zobrazova\u0165? message.runmacro=Makro %: %. % - % message.runmacro.return=(MEDZEROVN\u00cdKOM mo\u017eno vybra\u0165 %) message.runmacro.fixes=(SHIFTOM mo\u017eno opravi\u0165 v\u00fdber) message.delete=Zmaza\u0165: Vyberte objekt! message.reorder=Preusporiada\u0165: Vyberte objekt! message.expression=Aritmetick\u00fd v\u00fdraz: Vyberte umiestnenie! message.area=Vyplnen\u00fd mnohouholn\u00edk: Vrchol? message.text=Text: Vyberte umiestnenie! message.animator.point=Anim\u00e1cia: Bod, ktor\u00fd sa m\u00e1 animova\u0165? message.animator.segment=Anim\u00e1cia: Kru\u017enica alebo \u00fase\u010dka? message.animator.running=Anim\u00e1cia: Be\u017e\u00ed (zastav\u00edte kliknut\u00edm)! message.range.first=Nastavi\u0165 rozsah: Kresli\u0165 kru\u017enicu z ktor\u00e9ho bodu ... message.range.second=Nastavi\u0165 rozsah: ... do ktor\u00e9ho bodu? message.setaway.away=Zabezpe\u010di\u0165, aby priese\u010dn\u00edk nesplynul s ktor\u00fdm bodom? message.setaway.close=Zabezpe\u010di\u0165, aby bol priese\u010dn\u00edk bl\u00edzko ku ktor\u00e9mu bodu? objectsedit.title=Upravi\u0165 vlastnosti point.type.square=\u0160tvor\u010dek point.type.diamond=Koso\u0161tvor\u010dek point.type.circle=Kr\u00fa\u017eok point.type.dot=Bodka color.type.normal=Norm\u00e1lna color.type.thick=Hrub\u00e1 color.type.thin=Tenk\u00e1 color.type.invisible=Nevidite\u013en\u00e1 text.point=Bod v %, % text.line=Priamka cez % a % text.segment=\u00dase\u010dka od % do % text.segment.fixed=\u00dase\u010dka od % do % s d\u013a\u017ekou % text.ray=Polpriamka od % smeruj\u00faca k % text.intersection=Priese\u010dn\u00edk % a % text.circle=Kru\u017enica so stredom % cez % text.circle.fixed=Kru\u017enica so stredom % cez % s polomerom % text.fixedcircle=Kru\u017enica so stredom % s polomerom % text.circle3=Kru\u017enica so stredom % s polomerom od % do % text.parallel=Rovnobe\u017eka prech\u00e1dzaj\u00faca cez % rovnobe\u017en\u00e1 s % text.midpoint=Stred medzi % a % text.quadric=Ku\u017ee\u013eose\u010dka cez % text.plumb=Kolmica prech\u00e1dzaj\u00faca cez % kolm\u00e1 na % text.angle=Uhol % - % - % text.angle.fixed=Uhol % - % - % s ve\u013ekos\u0165ou % text.boundedpoint=Bod na % text.expression=V\u00fdraz "%" v %, % text.area=Mnohouholn\u00edk text.fixedangle=Uhol % - % s ve\u013ekos\u0165ou % name.Point=Bod name.Intersection=Priese\u010dn\u00edk name.OtherIntersection=Priese\u010dn\u00edk name.Circle=Kru\u017enica name.Circle3=Kru\u017enica name.Segment=\u00dase\u010dka name.Ray=Polpriamka name.Line=Priamka name.TwoPointLine=Priamka dan\u00e1 dvoma bodmi name.Parallel=Rovnobe\u017eka name.Midpoint=Stred name.Quadric=Kvadratick\u00e1 krivka name.Plumb=Olovnica name.Angle=Uhol name.PointOn=BodObjektu name.Expression=V\u00fdraz name.Polygon=Mnohouholn\u00edk prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.angle==a(,,) prompt.area=A(,,) prompt.quadric=quadric(,,,,) prompt.function=function(,,,,,) name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=pl name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=p name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=poly name.short.Function=f popup.hidden=Zobrazi\u0165 skryt\u00e9 objekty popup.replay=Prehra\u0165 kon\u0161trukciu popup.empty=--- Makr\u00e1 --- replay.title=Prehra\u0165 reorder.title=Potla\u010di\u0165 objekty reorder.message=vlo\u017ei\u0165 za reorder.notfound=Objekt nebol n\u00e1jden\u00fd! reorder.warning=Toto sa ned\u00e1 urobi\u0165! setgrid.title=\u0160\u00edrka mrie\u017eky setgrid.prompt=Zadajte nov\u00fa \u0161\u00edrku mrie\u017eky setgrid.set=Nastavi\u0165 definemacro.title=Definova\u0165 makro definemacro.name=Meno definemacro.comment=Koment\u00e1r k makru definemacro.noparams=Je potrebn\u00e9 zada\u0165 parametre makra! definemacro.nomacro=Nejestvuje \u017eiadne makro, ktor\u00e9 by sa dalo spusti\u0165! definemacro.targetsonly=Skry\u0165 kon\u0161trukciu definemacro.invisible=Skry\u0165 \u00faplne definemacro.promptfor=V\u00fdzva pre macro.replace.title=Nahradenie makra macro.replace=Nahradi\u0165 makro: macro.replace.all=V\u0161etky macro.usage=Zl\u00e9 pou\u017eitie makra (vi\u010f dobr\u00e9 rady)! macro.prompt.title=V\u00fdzva pre parameter macro.prompt.prompt=Vlo\u017ete hodnotu parametra macro.prompt.illegal=Zak\u00e1zan\u00e1 hodnota! digits.title=Nastavi\u0165 \u010d\u00edslice digits.edit=Upravi\u0165 digits.lengths=Zobrazi\u0165 digits.angles=Uhly editrun.title=Upravi\u0165 popisn\u00fa kon\u0161trukciu editrun.run=Ulo\u017ei\u0165 a spusti\u0165 editrun.load=\u010eal\u0161\u00ed popis sure.title=Ste si ist\u00fd? sure.macros=Zmaza\u0165 v\u0161etky pou\u017e\u00edvate\u013esk\u00e9 makr\u00e1? sure.delete=Zabudn\u00fa\u0165 na teraj\u0161ie zmeny? close.title=Koniec close.prompt=Naozaj si prajete zavrie\u0165 program? file.exists.title=Tak\u00fd s\u00fabor existuje file.exists.overwrite=Tak\u00fd s\u00fabor existuje! M\u00e1m ho prep\u00edsa\u0165? exception.nparams=Nespr\u00e1vny po\u010det parametrov! exception.notfound=Objekt nebol n\u00e1jden\u00fd, alebo bol definovan\u00fd po v\u00fdraze! exception.type=NEspr\u00e1vny typ objektu! exception.expression=Nespr\u00e1vny v\u00fdraz! exception.canfix=Objekt nemo\u017eno fixova\u0165! exception.fix=Nespr\u00e1vna hodnota! exception.novalue=Nespr\u00e1vna hodnota! exception.elementary=Nespr\u00e1vny prvok vo v\u00fdraze! exception.bracket=Z\u00e1tvorka nebola uzavret\u00e1! exception.quotes=\u00davodzovky neboli ukon\u010den\u00e9! exception.dot=Dve bodky v \u010d\u00edsle! exception.nodigit=V \u010d\u00edsle nebola n\u00e1jden\u00e1 \u017eiadna \u010d\u00edslica! exception.function=Nezn\u00e1ma funkcia! exception.parameter=Nespr\u00e1vny parameter funkcie! exception.macro=Nespr\u00e1vny parameter makra! exception.name=Potrebujem meno! exception.job=Nespr\u00e1vne parametre \u00falohy! exception.track=Nespr\u00e1vne parametre stopy! exception.animate=Nespr\u00e1vne parametre anim\u00e1cie! exception.boolean=Pravdivostn\u00e1 hodnota mus\u00ed by\u0165 bu\u010f pravda alebo nepravda! exception.value=Nespr\u00e1vna hodnota! exception.color=Nespr\u00e1vna farba! exception.colortype=Nespr\u00e1vna hr\u00fabka! exception.type=Nespr\u00e1vny tvar bodu! exception.macroparameter=Nespr\u00e1vny parameter makra! exception.macrotarget=Nespr\u00e1vny cie\u013e makra! exception.prompt=Nespr\u00e1vny objekt v\u00fdzvy! exception.prompt.parameter=Objekt v\u00fdzvy nem\u00f4\u017ee by\u0165 parameter! exception.parameters=Nespr\u00e1vny parameter! exception.brackets=Nespr\u00e1vne z\u00e1tvorky! exception.double=Meno nie je jedine\u010dn\u00e9! error.setaway=Tento objekt nie je definovan\u00fd pred priese\u010dn\u00edkom! error.objecttracker.depends=Bod je viazan\u00fd na in\u00fd objekt! constructiondisplay.title=Kon\u0161trukcia function.hide=Skry\u0165 function.hide.short=skry\u0165 function.rename=Meno function.rename.short=meno function.value=Hodnota function.value.short=hodnota function.window=Okno function.window.short=W function.color=Farba function.color.short=far function.thickness=Hr\u00fabka function.thickness.short=hr function.type=Typ function.type.short=typ function.partial=\u010ciasto\u010dn\u00e9 function.partial.short=part function.fill=Vyplni\u0165 function.fill.short=vypl function.back=Pozadie function.back.short=pozad function.acute=Ostr\u00fd function.acute.short=ostr\u00fd function.obtuse=Tup\u00fd function.obtuse.short=tup\u00fd function.solid=Pln\u00e1 function.solid.short=pln\u00e1 function restrict=Ombedzi\u0165 function restrict.short=obmedzi\u0165 expression.value=Hodnota configure.title=Nastavi\u0165 prehliada\u010d str\u00e1nok configure.prompt=Zadajte pr\u00edkaz pre spustenie prehliada\u010da # New Resources: background.error=Nebolo mo\u017en\u00e9 na\u010d\u00edta\u0165 obr\u00e1zok (GIF alebo JPG!). menu.background=Pozadie menu.background.grab=Teraj\u0161ie ako pozadie menu.background.clear=Vymaza\u0165 pozadie menu.background.load=Na\u010d\u00edta\u0165 obr\u00e1zok do pozadia ... menu.background.usesize=Zmeni\u0165 rozmery na ve\u013ekos\u0165 obr\u00e1zka menu.background.tile=Nastavi\u0165 dl\u00e1\u017edice menu.background.center=Nastavi\u0165 pozadie na stred iconhelp.grab=Nastavi\u0165 alebo vymaza\u0165 pozadie filedialog.backgroundload=Na\u010d\u00edta\u0165 pozadie filedialog.backgroundload.action=Na\u010d\u00edta\u0165 # New Resources in Version 2.14 menu.file.compress=V\u017edy ulo\u017ei\u0165 komprimovan\u00e9 menu.file.savesvg=Ulo\u017ei\u0165 obr\u00e1zok (ako SVG) ... # Version 2.15 loading=Na\u010d\u00edtavam, pros\u00edm po\u010dkajte! # Version 2.18 and 2.19 menu.settings.font.default=Predvolen\u00fd typ p\u00edsma menu.settings.font.bold=Hrub\u00e9 p\u00edsmo menu.settings.font.large=Ve\u013ek\u00e9 p\u00edsmo menu.file.saveeps=Ulo\u017ei\u0165 obr\u00e1zok (ako EPS) ... menu.fonts=Typ p\u00edsma # Version 2.20 bmpscaler.title=Re\u0161k\u00e1lova\u0165 bitmapov\u00fd obr\u00e1zok bmpscaler.width=\u0160\u00edrka bmpscaler.height=V\u00fd\u0161ka bmpscaler.scale=Koeficient (stla\u010dte Return) bmpscaler.illegal=Nespr\u00e1vna hodnota # Version 2.21 renamemacro.title=Premenova\u0165 makro renamemacro.name=Nov\u00e9 meno makra menu.special.renamemacro=Premenova\u0165 makro ... # Version 2.23 savequestion.title=Ulo\u017ei\u0165 kon\u0161trukciu savequestion.qsave=Ulo\u017ei\u0165 zmeny? # Version 2.25 exception.printsize=Na t\u00fato kon\u0161trukciu je str\u00e1nka pr\u00edli\u0161 mal\u00e1! iconhelp.nohelp=Pomoc nie je k dispoz\u00edcii iconhelp.type?=Typ bodu iconhelp.thickness?=Hr\u00fabka iconhelp.color?=Farba iconhelp.filled=Vyplnen\u00fd objekt iconhelp.isback=Vykresli\u0165 v pozad\u00ed iconhelp.inverse=Odraz uhla iconhelp.angle?=Ve\u013ekos\u0165 # Version 2.28 message.objecttracker.stop=Automatick\u00e1 stopa: Zastav\u00edte kliknut\u00edm (shift \u0161\u00edpka v\u013eavo/vpravo pre nastavenie r\u00fdchlosti)! # Version 2.31 menu.settings.indicate=Zobrazi\u0165 dopredu vytv\u00e1ran\u00e9 objekty menu.options.other=Nastavenia menu.help.welcome=\u010co je nov\u00e9 v tejto verzii iconhelp.twolines=Ikony v dvoch riadkoch iconhelp.qintersection=Op\u00fdta\u0165 sa na priese\u010dn\u00edky iconhelp.qchoice=Zobrazi\u0165 dialo\u00f3g pre v\u00fdber objektu iconhelp.qpointon=Op\u00fdta\u0165 sa, \u010di vytvori\u0165 bod na objekte iconhelp.noindicate=Neozna\u010dova\u0165 objekty pod my\u0161ou # Version 2.33 menu.file.new=Nov\u00e1 kon\u0161trukcia (Ctrl-n) # Version 2.34 edit.text.title=Textov\u00e9 nastavenia edit.text.settings=\u010eal\u0161ie nastavenia menu.settings.filedialog=Syst\u00e9mov\u00fd dial\u00f3g pre nahradenie # Version 2.35 menu.settings.bitmapbackground=V bitmapov\u00fdch obr\u00e1zkoch pou\u017ei\u0165 farbu pozadia # Version 2.36 menu.file.savegraphics=Ulo\u017ei\u0165 obr\u00e1zok ako ... bmpscaler.title=Zmeni\u0165 ve\u013ekos\u0165 obr\u00e1zku # Version 2.37 menu.file.savepdf=Ulo\u017ei\u0165 obr\u00e1zok (ako PDF) iconhelp.chord=Zobrazi\u0165 ako \u010das\u0165 # Version 2.39 message.setfixedangle.first=Nastavi\u0165 fixn\u00fd uhol: Bod na prvom ramene? message.setfixedangle.second=Nastavi\u0165 fixn\u00fd uhol: Vrchol? message.setfixedangle.third=Nastavi\u0165 fixn\u00fd uhol: Tret\u00ed bod? edit.fixedangle.set=Nastavi\u0165 ve\u013ekos\u0165 ... message.setfixedcircle.first=Nastavi\u0165 fixn\u00fa kru\u017enicu: Prv\u00fd bod? message.setfixedcircle.second=Nastavi\u0165 fixn\u00fa kru\u017enicu: Druh\u00fd bod? edit.fixedcircle.set=Nastavi\u0165 ve\u013ekos\u0165 ... # Version 2.41 name.short.Track=Tr text.track=Stopa % ke\u010f sa % pohybuje po % trackquestion.keep=Ponecha\u0165 stopu v kon\u0161trukcii? trackquestion.title=Ponecha\u0165 stopu menu.options.track=Ponecha\u0165 stopu (Shift-Enter) iconhelp.indicate=Zobrazova\u0165 dopredu v\u00fdsledky kon\u0161trukcie iconhelp.nohelp=Pomoc nie je k dispoz\u00edcii! # Version 2.42 objects.draw=Ma\u013eovanie my\u0161ou menu.options.cleardraw=Vymaza\u0165 nama\u013eovan\u00e9 (Esc) iconhelp.draw=Ma\u013eovanie my\u0161ou message.draw=Ma\u013eova\u0165 my\u0161ou (ESC zma\u017ee nama\u013eovan\u00e9) shortcuts.draw=; # Version 2.43 message.rename=Premenova\u0165 na A,B,C,...: Vyberte objekty! iconhelp.rename=Premenova\u0165 na A,B,C,... objects.rename=Premenova\u0165 na A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Nezobrazova\u0165 druh\u00e9 rameno uhla # Version 2.45 menu.settings.smartboard=Inteligentn\u00fd m\u00f3d shortcuts.zoom=% objects.zoom=Pribl\u00ed\u017ei\u0165/oddiali\u0165 my\u0161ou message.zoom=\u0164ahajte stred, alebo pribl\u00ed\u017ete/vzdia\u013ete bod poh\u013eadu # Version 2.46 menu.special.restricticons=Obmedzen\u00fd s\u00fabor ikon # Version 2.47 menu.settings.indicate.simple=Vyzna\u010dova\u0165 iba body menu.settings.beginner=M\u00f3d pre za\u010diato\u010dn\u00edkov question.again=V\u017edy sa op\u00fdta\u0165 t\u00fato ot\u00e1zku. # Version 2.49 definemacro.parameters=V\u00fdzva(y) pre parameter(re) ("=meno" opravy) # Version 2.53 menu.actions.angles=Uhly menu.actions.circles=Kru\u017enice menu.actions.lines=Priamky a ich \u010dasti menu.actions.points=Body # Version 3.00 info.title=Kontextov\u00e1 pomoc info.related=S\u00favisiace t\u00e9my info.notfound=T\u00e9ma nebola n\u00e1jden\u00e1! info.noresults=Re\u0165azec sa nepodarilo n\u00e1js\u0165! info.searchresults=- V\u00fdsledky vyh\u013ead\u00e1vania - info.select=- V\u00fdber - info.search=Vyh\u013ead\u00e1va\u0165 info.back=Sp\u00e4\u0165 info.start=\u0160tart iconhelp.info=Kontextov\u00e1 pomoc menu.help.info=Kontextov\u00e1 pomoc myfiledialog.homedir=S\u00fabory CaR myfiledialog.windowshome=My Documents myfiledialog.mkdir=Make Directory myfiledialog.back=Sp\u00e4\u0165 menu.file.alwaysclearmacros=Vymaza\u0165 makr\u00e1 pred na\u010d\u00edtan\u00edm about.language=Jazyk bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Z\u00e1lohy # Version 3.02 menu.options.hideduplicates=Skry\u0165 duplik\u00e1ty # Version 3.03 menu.options.function=Vytvori\u0165 funkciu text.function=Funkcia ( % , % ) function.varmin=Od function.varmax=Do function.dvar=Krok function.var=Premenn\u00e1 function.y=V\u00fdraz pre Y iconhelp.function=Vytvori\u0165 funkciu menu.options.editlast=Upravi\u0165 posledn\u00fd objekt iconhelp.control.edit=Upravi\u0165 posledn\u00fd objekt iconhelp.control.hide=Skry\u0165 duplik\u00e1ty edit.function.title=Funkcia alebo krivka iconhelp.control.runmacro=Spusti\u0165 znovu naposledy spusten\u00e9 makro # Version 3.05 point.type.cross=Kr\u00ed\u017eik point.type.dcross=Uhloprie\u010dny kr\u00ed\u017eik shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Jednotka menu.special.break=Body preru\u0161enia menu.bp.setbreak=Nastavi\u0165 bod preru\u0161enia menu.bp.clearbreak=Zmaza\u0165 bod preru\u0161enia menu.bp.sethidingbreak=Nastavi\u0165 bod preru\u0161enia pre ukrytie menu.bp.animatebreak=Animova\u0165 body preru\u0161enia iconhelp.animatebreak=Animova\u0165 body preru\u0161enia message.animatebreak=animova\u0165 body preru\u0161enia: zastav\u00edte kliknut\u00edm (shift - \u0161\u00edpka do\u013eava/doprava pre zmenu r\u00fdchlosti)! menu.special.exporttemplate=Export do HTML so \u0161abl\u00f3nami templateload.open=Na\u010d\u00edta\u0165 \u0161abl\u00f3nu templateload.open.action=Otvori\u0165 menu.settings.doubleclick=Dvojklikn\u00fa\u0165 pre makr\u00e1 export.codebase=Codebase # Version 3.12 edit.equation=Equation # Version 3.23 menu.settings.squarepoints=Body vykres\u013eova\u0165 v\u017edy ako \u0161tvor\u010deky # Version 3.37 menu.options.export=Nastavenia exportovania obr\u00e1zkov menu.settings.minwidth=Minim\u00e1lna \u0161\u00edrka \u010diary je 1 menu.settings.minpointsize=Re\u0161pektova\u0165 minim\u00e1lnu ve\u013ekos\u0165 bodu menu.settings.minfontsize=Re\u0161pektova\u0165 minim\u00e1lnu ve\u013ekos\u0165 p\u00edsma menu.options.minpointsize=Minim\u00e1lna ve\u013ekos\u0165 bodu menu.options.minfontsize=Minim\u00e1lna ve\u013ekos\u0165 p\u00edsma # Version 3.38 menu.settings.scalepdf=\u0160k\u00e1lova\u0165 PDF a EPS v\u00fdstup 1:1 # Version 3.41 menu.file.clip=Vybra\u0165 v\u00fdrez pre grafick\u00fd v\u00fdstup ... clip.title=Nastavi\u0165 v\u00fdrez clip.width=\u0160\u00edrka clip.height=V\u00fd\u0161ka clip.screen=Nepou\u017ei\u0165 v\u00fdrez # Version 3.44 iconhelp.large=Pou\u017ei\u0165 ve\u013ek\u00fa ve\u013ekos\u0165 p\u00edsma iconhelp.bold=Pou\u017ei\u0165 hrub\u00e9 p\u00edsmo menu.options.largefont=Ve\u013ek\u00e1 ve\u013ekos\u0165 p\u00edsma menu.options.boldfont=Hrub\u00e9 p\u00edsmo warning.previewframe=R\u00e1m v\u00e4\u010d\u0161\u00ed ako okno! message.move.select=Posun\u00fa\u0165: Vyberte bod (shift: viac bodov, ctrl: zobrazova\u0165 star\u00fa polohu)! # Version 3.46 iconbar.showseparators=Zobrazi\u0165 odde\u013eova\u010de # Version 3.48 menu.options.printscaler=Nastavi\u0165 ve\u013ekos\u0165 exportu ... menu.options.exportsettings=\u0160peci\u00e1lne nastavenia exportu ... printscaler.title=Nastavi\u0165 ve\u013ekos\u0165 exportu printscaler.width=\u0160\u00edrka (v cm) printscaler.height=V\u00fd\u0161ka (v cm) printscaler.dpi=Rozl\u00ed\u0161enie (v dpi, predvolen\u00e1 hodnota 300) printscaler.linewidth=\u0160\u00edrka \u010diary (v cm, predvolen\u00e1 hodnota 0.02) printscaler.pointsize=Ve\u013ekos\u0165 bodu (v cm, predvolen\u00e1 hodnota 0.07) printscaler.textsize=Ve\u013ekos\u0165 p\u00edsma (v cm, predvolen\u00e1 hodnota 0.3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=\u0160\u00edrka (v pixeloch) printscaler.h=V\u00fd\u0161ka (v pixeloch) printscaler.scale=Zv\u00e4\u010d\u0161enie (relat\u00edvne vo\u010di obrazovke) printscaler.middle=Vyreza\u0165 z obrazovky printscaler.sizes=Pou\u017ei\u0165 hodnoty menu.file.savepng=Ulo\u017ei\u0165 obr\u00e1zok ako PNG warning.preview=N\u00e1h\u013ead nebude plne pracova\u0165 v Jave 1.1 iconedit.showseparators=Zobrazi\u0165 odde\u013eova\u010de printscaler.aspect=Rovnak\u00e1 mierka pre zvisl\u00fd a vodorovn\u00fd smer printscaler.presets=Prednastavenia printscaler.preset=Vyberte si printscaler.preset.300dpi=Presne \u0161k\u00e1lovan\u00e9 s 300 DPI printscaler.preset.300dpi6=\u0160\u00edrka 6 cm s 300 DPI printscaler.preset.300dpi16=\u0160\u00edrka 16 cm s 300 DPI printscaler.preset.window=Ve\u013ekos\u0165 okna printscaler.preset.clip50=V\u00fdrez 50% ve\u013ekosti okna message.saving=Pros\u00edm po\u010dkajte! menu.options.printscalepreview=N\u00e1h\u013ead exportu (Ctrl-F3) date=Build # Version 3.51 help=Pomoc # Version 3.61 editconditionals.title=Upravi\u0165 podmienky editconditionals.hidden=Skryt\u00e9 editconditionals.superhidden=\u00daplne skryt\u00e9 editconditionals.visible=Norm\u00e1lne editconditionals.showname=Zobrazi\u0165 meno editconditionals.showvalue=Zobrazi\u0165 hodnotu editconditionals.background=Pozadie editconditionals.solid=Nie prieh\u013eadn\u00e9 exception.superfluous=Zbyto\u010dn\u00fd text vo v\u00fdraze # Version 3.63 select.comment.title=Koment\u00e1r makra # Version 3.68 edit.area.area=Plocha # Version 3.73 myfiledialog.oldfiles=Star\u00e9 s\u00fabory # Version 3.74 iconhelp.load=Na\u010d\u00edta\u0165 kon\u0161trukciu (Ctrl-o) iconhelp.save=Ulo\u017ei\u0165 kon\u0161trukciu (Ctrl-s) iconhelp.new=Nov\u00e1 kon\u0161trukcia (Ctrl-n) # Version 3.81 warning.loadbackground=Chyba pri na\u010d\u00edtavan\u00ed pozadia # Version 3.9 function.x=V\u00fdraz pre X (nechajte pr\u00e1zdne v pr\u00edpade funkcie) # Version 3.91 constructiondisplay.select=Vybra\u0165 constructiondisplay.all=V\u0161etky objekty constructiondisplay.visible=Vidite\u013en\u00e9 objekty constructiondisplay.points=Body constructiondisplay.lines=Priamky a ich \u010dasti constructiondisplay.circles=Kru\u017enice constructiondisplay.angles=Uhly constructiondisplay.other=\u010eal\u0161ie objekty menu.file.copypng=Skop\u00edrova\u0165 do schr\u00e1nky (clipboardu) exception.clipboardcopy=Kop\u00edrovanie zlyhalo! menu.options.finegrid=Iba osi # Vesion 3.93 edit.function.center=Nastavi\u0165 stred edit.function.free=Uvo\u013eni\u0165 stred message.setcenter=Vyberte polohu stredu! # Vesion 3.94 message.edit=Upravi\u0165: Objekt (shift: viac objektov naraz, ctrl: podmienky)? # Version 3.97 error.image=S\u00fabor s obr\u00e1zkom nie je v tom istom prie\u010dinku ako s\u00fabor kon\u0161trukcie? filedialog.imageload=Na\u010d\u00edta\u0165 obr\u00e1zok filedialog.imageload.action=Na\u010d\u00edta\u0165 prompt.image=obr\u00e1zok(,,,) objects.image=Obr\u00e1zok shortcuts.image=_ # Version 3.98 exception.depends=Objekt % je z\u00e1visl\u00fd na tomto objekte object. error.depends=Objekt % je z\u00e1visl\u00fd na tomto objekte object. constructiondisplay.sorted=Usporiadan\u00e9 pod\u013ea kon\u0161truk\u010dn\u00e9ho postupu # Version 3.99 edit.alias=Druh\u00e9 meno constructiondisplay.expressions=V\u00fdrazy # Version 4.00 iconhelp.image=Na\u010d\u00edta\u0165 obr\u00e1zok (_) message.image=Bod ukotvenia obr\u00e1zku % message.image.last=Bod ukotvenia posledn\u00e9ho obr\u00e1zku (alebo vybra\u0165 ozna\u010den\u00fd bod) editconditionals.z=Hodnota Z-Buffera # Version 4.01 name.FixedAngle=Fixn\u00fd uhol # Version 4.04 menu.moresettings=Nastavenia menu.settings.language=Nastavi\u0165 jazyk language.title=Nastavi\u0165 jazyk language.prompt=Nastavenie jazyka sa prejav\u00ed pri \u010fal\u0161om spusten\u00ed programu # Version 4.05 constructiondisplay.invalid=Chybn\u00e9 objekty # Version 4.08 menu.settings.constructiondisplay=Trval\u00e9 zobrazenie kon\u0161trukcie (F11) # Version 4.09 constructiondisplay.editconditions=Upravi\u0165 podmienky constructiondisplay.delete=Zmaza\u0165 vyzna\u010den\u00e9 objekty constructiondisplay.hide=Skry\u0165 alebo uk\u00e1za\u0165 constructiondisplay.superhide=Super ukrytie # Version 4.2 edit.expression.slider=Zobrazi\u0165 ako posuvn\u00edk menu.grid.options=Mo\u017enosti mrie\u017eky menu.options.leftsnap=Prychyt\u00e1va\u0165 k mrie\u017eke pri \u0165ahan\u00ed my\u0161ou so stla\u010den\u00fdm \u013eav\u00fdm tla\u010d\u00edtkom menu.settings.boundingbox=Vytvori\u0165 (bb) s\u00fabor s ohrani\u010duj\u00facim r\u00e1mcom # Version 4.3 latexsettings.title=Nastavi\u0165 export do LaTeXu latexsettings.boundingbox=Vytvori\u0165 (bb) s\u00fabor s ohrani\u010duj\u00facim r\u00e1mcom latexsettings.latexinput=Vytvori\u0165 LaTeX-ovsk\u00fd idx-s\u00fabor latexsettings.doubledollar=LaTeX rob\u00ed $$...$$ latexsettings.dollar=LaTeX rob\u00ed $...$ latexsettings.nodollar=LaTeX rob\u00ed v\u0161etky \u010fal\u0161ie re\u0165azce latexsettings.fullpath=Pou\u017ei\u0165 cestu k s\u00faborom printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=12 cm \u0161\u00edrka s 300 DPI printscaler.latex=Ulo\u017ei\u0165 pre LaTeX menu.background.usewidth=Prisp\u00f4sobi\u0165 len v\u00fd\u0161ku # Version 4.4 menu.options.restricted=Obmedzi\u0165 priese\u010dn\u00edky menu.options.sizes=Nastavi\u0165 ve\u013ekosti ... sizesdialog.title=Ve\u013ekosti minlinesize.prompt=Minim\u00e1lna \u0161\u00edrka \u010diary (predvolen\u00e1: 1) minpointsize.prompt=Minim\u00e1lna ve\u013ekos\u0165 bodu (predvolen\u00e1: 3) minfontsize.prompt=Minim\u00e1lna ve\u013ekos\u0165 p\u00edsma (predvolen\u00e1: 12) arrowsize.prompt=Ve\u013ekos\u0165 \u0161\u00edpky (predvolen\u00e1: 10) selectionsize.prompt=Ve\u013ekos\u0165 v\u00fdberu (predvolen\u00e1: 1.5) warning.loadmacros=Chyba pri na\u010d\u00edtavan\u00ed makra! warning.macrodefinition=% sa pou\u017e\u00edva, ale nie je v makre! edit.circle.bounds=Zobrazi\u0165 ako obl\u00fak edit.circle.range=Nastavi\u0165 obl\u00fak ... # Version 4.5 edit.track.dmin=Minim\u00e1lny krok (predvolen\u00fd: 0.001) # Version 4.6 menu.settings.smallicons=Pou\u017ei\u0165 mal\u00e9 ikony menu.settings.oldicons=Pou\u017ei\u0165 star\u00e9 ikony # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof=Stopa % ke\u010f sa % men\u00ed # Version 5 # Fix error.image edit.discrete=Diskr\u00e9tna error.fixedsegment=Nedok\u00e1\u017eem fixova\u0165 t\u00fato \u00fase\u010dku! export.zoom=Pribli\u017eova\u0165/vz\u010fa\u013eova\u0165 my\u0161ou export.popup=Kontektov\u00e9 menu # Version 5.1 edit.intersection.alternate=Mo\u017eno strieda\u0165 export.restrictedmove=Obmedzi\u0165 pohyby ./src/rene/zirkel/docs/CVS/RevisionCache/ZirkelProperties_it.properties#1.10000644000175000017500000011206311144764476025531 0ustar yvesyveslanguage=it_ version=Versione homefile=index.html homepage=http://www.z-u-l.de/ about.title=Informazioni sul programma about.name=Geometria per la scuola about.programmed=Programmato da title=Geometria per la scuola close=Chiudi ok=OK cancel=Cancella done=Ben Fatto! message=Messaggio yes=Si no=No abort=Annulla true=vero false=falso warning.nojob=Questo non un problema! warning.print=Stampa fallita! warning.reset=Questa opzione sar abilitata al prossimo avvio di C.a.R.! question.title=Domanda question.intersection=Creare questa intersezione? question.pointon=Creare un punto su questo oggetto? colors.black=Nero colors.blue=Blu colors.green=Verde colors.brown=Marrone colors.cyan=Azzurro colors.red=Giallo objects.point=Punto objects.segment=Segmento objects.line=Retta objects.ray=Semiretta objects.circle=Circonferenza objects.intersection=Intersezione objects.move=Muovi punto objects.hide=Mostra/Nascondi oggetto objects.edit=Edita Punto objects.tracker=Traccia Punto o Retta objects.objecttracker=Traccia Punto o Retta su un oggetto objects.parallel=Retta Parallela objects.plumb=Retta Perpendicolare objects.circle3=Circonferenza da 3 punti objects.midpoint=Punto medio objects.quadric=Conica per 5 punti objects.angle=Angolo objects.boundedpoint=Punto su un oggetto objects.parameter=Imposta oggetti iniziali objects.targets=Imposta oggetti finali objects.definejob=Definisci un problema objects.runmacro=Esegui Macro objects.delete=Cancella oggetto e dipendenti objects.reorder=Porta oggetto sullo Sfondo objects.animate=Animazione objects.expression=Espressione Aritmetica objects.area=Poligono objects.text=Testo objects.fixedcircle=Circonferenza di raggio fissato objects.fixedangle=Angolo di misura fissata objects.fixedsegment=Segmento di lunghezza fissata iconhelp.point=Punto (p) iconhelp.segment=Segmento (s) iconhelp.line=Retta (g) iconhelp.ray=Semiretta (r) iconhelp.circle=Circonferenza (c) iconhelp.intersection=Intersezione (i) iconhelp.move=Muovi un punto (m)+Ctrl (Points): Mostra la vecchia costruzione+Ctrl: Muovi oggetti fissati iconhelp.hide=Mostra/Nascondi oggetto (h)+Shift: Nascondi completamente iconhelp.edit=Edita oggetti (e)+Shift: Edita pi oggetti+Ctrl: Edita ultimo oggetto iconhelp.tracker=Traccia di un punto o di una retta (t) iconhelp.objecttracker=Traccia automatica di un punto o di una retta (o) iconhelp.parallel=Retta parallela (1) iconhelp.plumb=Retta perpendicolare (2) iconhelp.circle3=Circonferenza da 3 Punti (3) iconhelp.midpoint=Punto medio (4) iconhelp.quadric=Conica per 5 punti ($) iconhelp.angle=Angolo (a) iconhelp.boundedpoint=Crea un punto su un oggetto (5)+Shift: Non fissato sull'oggetto iconhelp.hidden=Mostra oggetti nascosti (F9) iconhelp.color=Imposta il colore degli oggetti (Ctrl-1,2,3,4) iconhelp.type=Imposta stile punto (Ctrl-5,6,7,8,9,0) iconhelp.type0=Imposta stile punto iconhelp.thickness=Imposta lo spessore degli oggetti (Alt-5,6,7) iconhelp.back=Cancella ultimo oggetto (<-) iconhelp.thickness0=Spessore iconhelp.partial=Circonferenze parziali (Ctrl-F9) iconhelp.plines=Rette parziali (Ctrl-F10) iconhelp.arrow=Disegna vettore per segmento (Ctrl-F11) iconhelp.showcolor=Mostra solo i colori selezionati (Alt-1,2,3,4) iconhelp.runmacro=Esegui Macro (9)+Ctrl: Esegui ultima Macro iconhelp.macro=Imposta oggetti iniziali, oggetti finali e definizione di una macro (7,8,Ctrl-F5) iconhelp.expression=Espressione aritmetica (x) iconhelp.showvalue=Mostra il valore degli oggetti (Ctrl-F7) iconhelp.showname=Mostra il nome degli oggetti (Ctrl-F6) iconhelp.obtuse=Usa angoli concavi(Ctrl-F12) iconhelp.solid=Disabilita trasparenza iconhelp.longnames=Nomi estesi per gli oggetti (Ctrl-F8) iconhelp.grid=Mostra la griglia (F12) iconhelp.comment=Edita commento (F10) iconhelp.defaults=Impostazioni predefinite iconhelp.macro0=Imposta punti iniziali, punti finali e definizione di una macro iconhelp.visual=Modalit visuale di costruzione iconhelp.replay=Riproduci costruzione iconhelp.oneforward=Avanti iconhelp.fastforward=Avanti veloce iconhelp.allforward=Alla fine iconhelp.oneback=Indietro iconhelp.fastback=Indietro veloce iconhelp.allback=All'inizio iconhelp.close=Chiudi iconhelp.area=Poligono (0) iconhelp.text=Testo multilinea (b) iconhelp.fixedcircle=Circonferenza di raggio fissato (,) iconhelp.fixedangle=Angolo di misura fissata (.) iconhelp.fixedsegment=Segmento di lunghezza fissata (#) iconhelp.animate=Animazione di un punto (") iconhelp.delete=Cancella oggetto e dipendenti (Del) iconhelp.undo=Annulla cancella (Ctrl-z) iconhelp.nextbreak=Salta alla prossima interruzione iconhelp.setbreak=Imposta interruzione+Shift: Cancella interruzione iconhelp.zoom=Zoom con il mouse (%) shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.showcolor.4= shortcuts.showcolor.5= shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) menu.file=File menu.file.clearmacros=Cancella Macro personali menu.file.load=Apri ... (Ctrl-o) menu.file.loadjob=Apri Problema ... (Ctrl-j) menu.file.savejob=Salva Problema ... (Ctrl-k) menu.file.save=Salva Costruzione (Ctrl-s) menu.file.saveas=Salva Costruzione con nome ... (Ctrl-a) menu.file.includemacros=Includi tutte le Macro menu.file.exit=Esci (Alt-F4) menu.file.print=Stampa ... menu.file.print.isoscale=Scala 1:1 in cm menu.file.savebmp=Salva grafico come BMP ... menu.file.savefig=Salva grafico come FIG ... menu.file.loadrun=Apri Costruzione Descrittiva ... (Ctrl-r) menu.file.editrun=Modifica Costruzione Descrittiva ... (Ctrl-x) menu.actions=Azioni menu.actions.elementary=Strumenti elementari menu.actions.complex=Strumenti complessi menu.actions.move=Strumenti per il movimento menu.actions.decorative=Oggetti decorativi menu.options=Opzioni menu.options.visual=Modalit visuale di costruzione menu.options.hidden=Mostra oggetti nascosti (F9) menu.options.comment=Edita commento (F10) menu.options.constructiondisplay=Mostra lista oggetti menu.options.grid=Mostra griglia (F12) menu.options.setgrid=Imposta larghezza griglia ... menu.options.showcolor=Mostra oggetti di colore menu.options.defaultcolor=Colore menu.options.defaultthickness=Spessore menu.options.defaulttype=Stile punto menu.options.all=Tutti menu.options.setdigits=Imposta cifre menu.options.shownames=Mostra il nome degli oggetti (Ctrl-F6) menu.options.longnames=Nomi estesi per gli oggetti(Ctrl-F8) menu.options.obtuse=Usa angoli concavi(Ctrl-F12) menu.options.solid=Disabilita trasparenza menu.options.showvalues=Mostra il valore degli oggetti (Ctrl-F7) menu.options.partial=Circonferenze parziali (Ctrl-F9) menu.options.plines=Rette parziali (Ctrl-F10) menu.options.arrow=Disegna vettore per segmento (Ctrl-F11) menu.options.editicons=Personalizza Barra Icone menu.options.back=Cancella ultimo oggetto (<-) menu.options.undo=Annulla cancella (Ctrl-z) menu.zoom=Zoom menu.zoom.in=In (+) menu.zoom.out=Out (-) menu.zoom.left=Sinistra (Freccia-Sinistra) menu.zoom.right=Right (Freccia-Destra) menu.zoom.up=Alto (Freccia-Su) menu.zoom.down=Basso (Freccia-Gi) menu.macros=Macro menu.special.definemacro=Definisci Macro (Ctrl-F5) menu.special.runmacro=Esegui Macro ... (F5) menu.special.savemacros=Salva Macro ... menu.special.loadmacros=Carica Macro ... menu.special.deletemacros=Cancella Macro ... menu.special=Speciale menu.special.testjob=Testa Problema (Ctrl-F1) menu.special.jobcomment=Imposta testo Problema ... (F8) menu.special.export=Crea un file HTML ... (Ctrl-e) menu.special.replay=Riproduci costruzione menu.help=Guida menu.help.about=Informazioni sul programma menu.help.browser=Esempi e Documentazione menu.help.text=Guida veloce menu.help.configure=Imposta il Browser menu.help.help=Guida (F1) menu.help.macros=Macro menu.help.tools=Strumenti menu.help.gui=Interfaccia utente menu.help.interactive=Costruzioni Descrittive menu.help.tips=Alcuni suggerimenti menu.settings=Impostazioni avanzate menu.settings.fullicons=Usa Barre Icone complete menu.settings.utf=Usa codifica UTF-8 menu.settings.autohide=Nascondi il secondo punto di intersezione menu.settings.iconbartop=Barra delle icone sopra la costruzione menu.settings.showtips=Mostra descrizione strumenti menu.settings.simplegraphics=Usa Grafici pi semplici menu.settings.sure=Chiedi conferma prima di aprire o chiudere menu.settings.pointon=Chiedi prima di creare un punto su un oggetto menu.settings.intersection=Chiedi prima di creare una intersezione menu.settings.choice=Mostra la finestra di dialogo per la selezione menu.settings.movename=Mostra il valore degli oggetti durante il trascinamento menu.settings.movefixname=Mostra il valore fissato degli oggetti durante il trascinamento menu.settings.restricted=Modalit scolastica menu.colors=Colori colors.default=Usa colori predefiniti colors.color0=Colore 1 (Bianco) colors.color1=Colore 2 (Verde) colors.color2=Colore 3 (Blu) colors.color3=Colore 4 (Marrone) colors.color4=Colore 5 (Azzurro) colors.color5=Colore 6 (Rosso) colors.background=Sfondo colors.select=Seleziona colors.target=Target myfiledialog.dir=Cartella myfiledialog.file=File myfiledialog.pattern=Estensione filedialog.open=Apri filedialog.saveas=Salva con nome ... filedialog.open.action=Apri filedialog.saveas.action=Salva filedialog.htmlsave=Salva HTML filedialog.htmlsave.action=Salva pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Salva load=Apri abort=Annulla bound.release=Rilascia punto bound.bind=Vincola all'oggetto bound.error=Oggetto non trovato, intersecare prima! constructiondisplay.edit=Edita oggetto constructiondisplay.copy=Copia negli appunti # FINESTRE DI DIALOGO EDITA OGGETTI edit.Title=Propriet edit.name=Nome edit.hidden=Nascosto edit.text=Descrizione edit.fixed=Fissato edit.color=Colore edit.ok=OK edit.cancel=Cancella edit.showname=Mostra nome edit.point.title=Edita Punto edit.point.type=Stile edit.point.x=X edit.point.y=Y edit.point.intersection=Diverso da edit.point.showvalue=Mostra coordinate edit.point.colortype=Spessore edit.point.bound=Vincolato a edit.point.away=Lontano da edit.point.close=Vicino a edit.point.free=Free edit.line.title=Edita Retta, Semiretta, Segmento edit.line.normal=Normale edit.line.thick=Spesso edit.line.thin=Sottile edit.line.invisible=Invisibile edit.line.type=Stile edit.segment.length=Lunghezza edit.segment.showvalue=Mostra lunghezza edit.circle.title=Edita Circonferenza edit.circle.length=Raggio edit.circle.partial=Mostra parziale edit.plumb.restricted=Restrizione edit.angle.title=Edita Angolo edit.angle.length=Misura edit.angle.displaysize=Mostra misura edit.angle.normal=Normale edit.angle.small=Piccolo edit.angle.large=Grande edit.expression.title=Edita Espressione edit.expression=Espressione aritmetica edit.expression.prompt=Spiegazione edit.area.title=Edita Poligono edit.area.back=Sullo sfondo # FINESTRA DI DIALOGO ESPORTA HTML export.title=Esporta HTML export.pagetitle=Titolo della pagina export.width=Larghezza export.height=Altezza export.jar=File Jar export.comment=Mostra commento export.file=File con la costruzione export.job=Mostra come Problema export.color=Colore export.backgroundcolor=Usa per lo sfondo della pagina export.appletcolor=Usa per lo sfondo dell'applet export.plain=Piatto export.3D=Bordo export.breaks=Riproduci con i punti di interruzione export.icons=Bordo e Icone export.full=Bordo, Icone e Stato export.nonvisual=Bordo, Icone e Riga di input export.style=Stile applet export.setcolor=Scegli colore export.savefirst=Il file non stato salvato! export.soltext=Soluzione export.stylesheet=File di stile CSS export.solution=File con la soluzione export.jumpsol=Salta alla soluzione export.linksol=Collega alla soluzione export.savesol=Salva il file soluzione export.track=Traccia Punto export.digits=Salva cifre export.setsize=Fissa dimensione export.signature=Creato con C.a.R. export.colors=Salva colori definiti export.background=Salva sfondo definito help.title=Guida help.error=Non possibile aprire la guida! help.file=schoolgeometry.txt # FINESTRA DI DIALOGO COLORE coloreditor.title=Modifica colore coloreditor.red=Rosso coloreditor.green=Verde coloreditor.blue=Blu coloreditor.color=Colore # FINESTRA DI DIALOGO EDITA COMMENTO comment.title=Commento alla costruzione comment.set=Imposta comment.cancel=Cancella comment.close=Chiudi # FINESTRA DI DIALOGO PERSONALIZZA BARRA ICONE iconedit.title=Modifica Barra Icone iconedit.twobars=Barra delle icone su due righe jobcomment.title=Problema select.title=Selezione select.ok=OK select.cancel=Cancella select.comment=Mostra commento select.all=Tutto #RIGA DI STATO message.circle.midpoint=Circonferenza: centro? message.circle.radius=Circonferenza: punto sulla circonferenza (Shift: raggio fissato)? message.fixedcircle.midpoint=Circonferenza di raggio fissato: centro? message.fixedcircle.radius=Circonferenza di raggio fissato: raggio? message.line.first=Retta: primo punto? message.line.second=Retta: secondo punto? message.ray.first=Semiretta: origine? message.ray.second=Semiretta: secondo punto? message.move.select=Muovi: seleziona un oggetto(Shift: selezione multipla)! message.move.move=Muovi: muovi il punto? message.point=Punto: imposta un punto(Shift: fisso)! message.segment.first=Segmento: primo punto? message.segment.second=Segmento: secondo punto (Shift: lunghezza fissata)? message.fixedsegment.first=Segmento di lunghezza fissata: primo punto? message.fixedsegment.second=Segmento di lunghezza fissata: clicca dove vuoi! message.intersection.first=Intersezione: primo oggetto o intersezione? message.intersection.second=Intersezione: secondo oggetto? message.hide=Mostra/Nascondi: seleziona un oggetto(Shift: nascondi completamente)! message.tracker.select=Traccia: punto o retta traccianti (Shift: selezione multipla)? message.tracker.selectpoint=Traccia: punto da muovere? message.tracker.move=Traccia: muovi il punto! message.objecttracker.select=Traccia automatica: punto o retta traccianti (Shift: selezione multipla)? message.objecttracker.object=Traccia automatica: su quale retta o cerchio il punto da muovere? message.objecttracker.selectpoint=Traccia automatica: punto da muovere? message.objecttracker.selectanypoint=Traccia automatica: un altro punto da muovere? message.objecttracker.move=Traccia automatica: muovi il punto! message.objecttracker.start=Traccia automatica: inizia l'animazione! message.parallel.first=Parallela: retta? message.parallel.second=Parallela: punto? message.plumb.first=Perpendicolare: retta? message.plumb.second=Perpendicolare: punto? message.circle3.first=Circonferenza: primo punto del raggio? message.circle3.second=Circonferenza: secondo punto del raggio? message.circle3.midpoint=Circonferenza: centro? message.midpoint.first=Punto medio: primo punto? message.midpoint.second=Punto medio: secondo punto? message.quadric=Conica: punto numero message.angle.first=Angolo: primo punto? message.angle.root=Angolo: vertice? message.angle.second=Angolo: secondo punto (Shift: misura fissata)? message.fixedangle.first=Angolo di misura fissata: primo punto? message.fixedangle.root=Angolo di misura fissata: vertice? message.fixedangle.second=Angolo di misura fissata: clicca dove vuoi! message.label.select=Muovi etichetta: seleziona etichetta! message.label.move=Muovi etichetta: muovi etichetta! message.boundedpoint=Punto su oggetto: Circonferenza o retta (Shift: non fissato)? message.parameters=Oggetti iniziali macro: oggetti iniziali? message.targets=Oggetti finali macro: oggetti finali? message.savejob.first=Definisci Problema: ultimo oggetto della figura data? message.savejob.second=Definisci Problema: oggetto da costruire (Shift: non controllare)? message.savejob.third=Definisci Problema: ulteriori oggetti da mostrare? message.runmacro=Macro %: %. % - % message.runmacro.return=(SPACE seleziona %) message.runmacro.fixes=(Shift fissa selezione) message.delete=Cancella: seleziona un oggetto! message.reorder=Porta oggetto sullo sfondo: seleziona un oggetto! message.expression=Espressione aritmetica: seleziona una posizione! message.area=Poligono pieno: Punto? message.text=Testo: seleziona una posizione! message.animator.point=Animazione: punto da animare? message.animator.segment=Animazione: Circonferenza o segmento? message.animator.running=Animazione: Esegui (click per fermare)! message.range.first=Imposta range: Traccia un arco da questo punto ... message.range.second=Imposta range: ... a questo punto? message.setaway.away=Mantieni l'intersezione lontano da questo punto? message.setaway.close=Mantieni l'intersezione vicino a questo punto? objectsedit.title=Edita propriet point.type.square=Quadrato point.type.diamond=Rombo point.type.circle=Circolo point.type.dot=Punto color.type.normal=Normale color.type.thick=Spesso color.type.thin=Sottile color.type.invisible=Invisibile # DESCRIZIONE OGGETTI NELLA FINESTRA COSTRUZIONE text.point=Punto in %, % text.line=Retta per % e % text.segment=Segmento da % a % text.segment.fixed=Segmento da % a % di lunghezza % text.ray=Semiretta da % puntando a % text.intersection=Intersezione tra % e % text.circle=Circonferenza di centro % per % text.circle.fixed=Circonferenza di centro % per % di raggio % text.fixedcircle=Circonferenza di centro % e raggio % text.circle3=Circonferenza di centro % di raggio da % a % text.parallel=Retta parallela per % a % text.midpoint=Punto medio tra % e % text.quadric=Conica per % text.plumb=Retta perpendicolare per % a % text.angle=Angolo % - % - % text.angle.fixed=Angolo % - % - % di misura % text.boundedpoint=Punto su % text.expression=Espressione "%" in %, % text.area=Poligono text.fixedangle=Angolo % - % di musura % # NOMI OGGETTI NELLA FINESTRA COSTRUZIONE name.Point=Punto name.Intersection=Intersezione name.OtherIntersection=Intersezione name.Circle=Circonferenza name.Circle3=Circonferenza name.Segment=Segmento name.Ray=Semiretta name.Line=Retta name.TwoPointLine=Retta per due punti name.Parallel=Parallela name.Midpoint=Medio name.Quadric=Conica name.Plumb=Perpendicolare name.Angle=Angolo name.PointOn=PuntoSuOggetto name.Expression=Espressione name.Polygon=Poligono # RIGA DI COMANDO prompt.point=P prompt.pointon=P() prompt.line=l(,) prompt.segment=s(,) prompt.ray=r(,) prompt.circle=c(,) prompt.circle3=c(,,) prompt.intersection=I(,) prompt.midpoint=M(,) prompt.quadric=Q(,,,,) prompt.parallel=pl(,) prompt.plumb=p(,) prompt.angle=a(,,) prompt.area=A(,,) prompt.quadric=conica(,,,,) prompt.function=funzione(,,,,,) name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=pl name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=p name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=pol name.short.Function=f popup.hidden=Mostra oggetti popup.replay=Riproduci costruzione popup.empty=--- Macro --- replay.title=Riproduci reorder.title=Porta oggetto sullo sfondo reorder.message=Davanti all'oggetto reorder.notfound=Oggetto non trovato! reorder.warning=Operazione non valida! setgrid.title=Larghezza griglia setgrid.prompt=Inserisci larghezza griglia setgrid.set=Imposta definemacro.title=Definisci Macro definemacro.name=Nome definemacro.comment=Commento alla macro definemacro.noparams=Sono necessari i punti iniziali per la macro! definemacro.nomacro=Non ci sono macro da eseguire! definemacro.targetsonly=Nascondi costruzione definemacro.invisible=Nascondi completamente definemacro.promptfor=Prompt per macro.replace.title=Sostituzione macro macro.replace=Sostituire macro: macro.replace.all=Tutto macro.usage=Uso errato della macro (vedi suggerimenti)! macro.prompt.title=Parametri al prompt macro.prompt.prompt=Inserisci un valore per il parametro! macro.prompt.illegal=Valore non valido! digits.title=Imposta cifre digits.edit=Edita digits.lengths=Mostra digits.angles=Angoli editrun.title=Edita costruzione descrittiva editrun.run=Salva ed esegui editrun.load=Ulteriore Descrizione sure.title=Sei sicuro? sure.macros=Cancellare tutte le macro dell'utente? sure.delete=Annullare i cambiamenti? close.title=Esci close.prompt=Vuoi veramente chiudere il programma? file.exists.title=File esistente file.exists.overwrite=File esistente! Sovrascrivere? exception.nparams=Numero di parametri non valido! exception.notfound=Oggetto non trovato o definito dopo l'espressione! exception.type=Tipo di oggetto non valido! exception.expression=Espressione non valida! exception.canfix=L'oggetto non pu essere fissato! exception.fix=Valore non valido! exception.novalue=Valore non valido! exception.elementary=Elemento non valido nell'espressione! exception.bracket=Mancano parentesi! exception.quotes=Mancano virgolette! exception.dot=Due virgole nel numero! exception.nodigit=Non ci sono cifre nel numero! exception.function=Funzione sconosciuta! exception.parameter=Parametri funzione non validi! exception.macro=Parametri macro non validi! exception.name=Si richiede un nome! exception.job=Parametri problema non validi! exception.track=Parametri traccia non validi! exception.animate=Parametri animazione non validi! exception.boolean=Un valore booleano deve essere true o false! exception.value=Valore non valido! exception.color=Colore non valido! exception.colortype=Spessore non valido! exception.type=Stile punto non valido! exception.macroparameter=Punti iniziali Macro non validi! exception.macrotarget=Punti finali macro non validi! exception.prompt=Oggetto prompt non valido! exception.prompt.parameter=L'oggetto prompt non deve essere un parametro! exception.parameters=Parametro non valido! exception.brackets=Parentesi non valide! exception.double=Il nome ripetuto! error.setaway=Questo punto non definito prima dell'intersezione! error.objecttracker.depends=Il punto legato a un altro oggetto! constructiondisplay.title=Lista oggetti #COMANDI PER COSTRUZIONE DESRITTIVA function.hide=Nascondi function.hide.short=nascondi function.rename=Nome function.rename.short=nome function.value=Valore function.value.short=valore function.window=Finestra function.window.short=F function.color=Colore function.color.short=col function.thickness=Spessore function.thickness.short=sp function.type=Stile function.type.short=stile function.partial=Parziale function.partial.short=parz function.fill=Pieno function.fill.short=pieno function.back=Sfondo function.back.short=sfondo function.acute=Acuto function.acute.short=acuto function.obtuse=Concavo function.obtuse.short=concavo function.solid=Solido function.solid.short=solido function.restrict=Arco function.restrict.short=arco function.away=Lontano function.away.short=lontano expression.value=Valore configure.title=Imposta Browser configure.prompt=Inserisci comando Browser # New Resources: background.error=Non possibile aprire l'immagine (GIF o JPG!). menu.background=Sfondo menu.background.grab=Attuale come Background menu.background.clear=Pulisci sfondo menu.background.load=Carica immagine di sfondo ... menu.background.usesize=Ridimensiona all'immagine menu.background.tile=Rivesti sfondo menu.background.center=Centra sfondo iconhelp.grab=Imposta o pulisci sfondo filedialog.backgroundload=Apri sfondo filedialog.backgroundload.action=Apri # New Resources in Version 2.14 menu.file.compress=Comprimi sempre menu.file.savesvg=Salva Grafico(come SVG) ... # Version 2.15 loading=Caricamento, per favore attendere! # Version 2.18 and 2.19 menu.settings.font.default=Carattere predefinito menu.settings.font.bold=Carattere grassetto menu.settings.font.large=Dimensione carattere grande menu.file.saveeps=Salva grafico (come EPS) ... menu.fonts=Carattere # Version 2.20 bmpscaler.title=Scala Bitmap bmpscaler.width=Larghezza bmpscaler.height=Altezza bmpscaler.scale=Fattore (premi Invio) bmpscaler.illegal=Valore non valido # Version 2.21 renamemacro.title=Rinomina macro renamemacro.name=Nuovo nome macro menu.special.renamemacro=Rinomina Macro ... # Version 2.23 savequestion.title=Salva costruzione savequestion.qsave=Salvare i cambiamenti? # Version 2.25 exception.printsize=Pagina troppo piccola per questa costruzione! iconhelp.nohelp=Guida non disponibile iconhelp.type?=Stile punto iconhelp.thickness?=Spessore iconhelp.color?=Colore iconhelp.filled=Oggetto pieno iconhelp.isback=Disegna sullo sfondo iconhelp.inverse=Angolo riflesso iconhelp.angle?=Dimensione # Version 2.28 message.objecttracker.stop=Traccia automatica: clicca per fermare (Shift+freccia sinistra/destra per regolare velocit)! # Version 2.31 menu.settings.indicate=Anteprima oggetti generati menu.options.other=Impostazioni menu.help.welcome=Novit della versione corrente iconhelp.twolines=Icone su due righe iconhelp.qintersection=Chiedi conferma per intersezione iconhelp.qchoice=Mostra finestra di dialogo di selezione iconhelp.qpointon=Chiedi conferma per creare punto su oggetto iconhelp.noindicate=Non indicare oggetti sotto il mouse # Version 2.33 menu.file.new=Nuova costruzione (Ctrl-n) # Version 2.34 edit.text.title=Impostazioni testo edit.text.settings=Impostazioni ulteriori menu.settings.filedialog=Rimpiazza finestre di dialogo di sistema # Version 2.35 menu.settings.bitmapbackground=Usa colore di sfondo nelle Bitmap # Version 2.36 menu.file.savegraphics=Salva Grafico con nome ... bmpscaler.title=Scala Grafico # Version 2.37 menu.file.savepdf=Salva Grafico (come PDF) iconhelp.chord=Mostra come segmento # Version 2.39 message.setfixedangle.first=Angolo fissato: primo punto? message.setfixedangle.second=Angolo fissato: vertice? message.setfixedangle.third=Angolo fissato: terzo punto? edit.fixedangle.set=Imposta misura ... message.setfixedcircle.first=Circonferenza fissata: primo punto? message.setfixedcircle.second=Circonferenza fissata: secondo punto? edit.fixedcircle.set=Imposta raggio ... # Version 2.41 name.short.Track=Tr text.track=Traccia di % quando % varia su % trackquestion.keep=Mantenere traccia nella costruzione? trackquestion.title=Mantieni traccia menu.options.track=Mantieni traccia (Shift-Invio) iconhelp.indicate=Anteprima dei risultati della costruzione iconhelp.nohelp=Guida non disponibile! # Version 2.42 objects.draw=Disegna col mouse menu.options.cleardraw=Pulisci disegno(Esc) iconhelp.draw=Disegna col mouse message.draw=Disegna col mouse (ESC per pulire) shortcuts.draw=; # Version 2.43 message.rename=Rinomina A,B,C,...: seleziona oggetti! iconhelp.rename=Rinomina A,B,C,... objects.rename=Rinomina A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Non mostrare i lati dell'angolo # Version 2.45 menu.settings.smartboard=Modalit Smartboard shortcuts.zoom=% objects.zoom=Zoom con il mouse message.zoom=Trascina centro, o zoom in e out # Version 2.46 menu.special.restricticons=Barra icone ristretta # Version 2.47 menu.settings.indicate.simple=Indica solo punti menu.settings.beginner=Modalit principiante question.again=Poni sempre questa domanda. # Version 2.49 definemacro.parameters=Parametri Prompt(s) ("=nome" fissato) # Version 2.53 menu.actions.angles=Angoli menu.actions.circles=Circonferenze menu.actions.lines=Rette menu.actions.points=Punti # Version 3.00 info.title=Guida attiva info.related=Argomenti correlati info.notfound=Argomento non trovato! info.noresults=Stringa non trovata! info.searchresults=- Risultati ricerca - info.select=- Seleziona - info.search=Ricerca info.back=Indietro info.start=Inizio iconhelp.info=Guida attiva menu.help.info=Guida attiva myfiledialog.homedir=File CaR myfiledialog.windowshome=Documenti myfiledialog.mkdir=Nuova Cartella myfiledialog.back=Indietro menu.file.alwaysclearmacros=Cancella macro prima di aprire about.language=Lingua bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Backup # Version 3.02 menu.options.hideduplicates=Nascondi duplicati # Version 3.03 menu.options.function=Definisci funzione text.function=Funzione ( % , % ) function.varmin=Da function.varmax=A function.dvar=Passo function.var=Variabile function.y=Espressione per Y iconhelp.function=Definisci funzione menu.options.editlast=Edita ultimo oggetto iconhelp.control.edit=Edita ultimo oggetto iconhelp.control.hide=Nascondi duplicati edit.function.title=Funzione o curva iconhelp.control.runmacro=esegui ultima macro # Version 3.05 point.type.cross=Croce point.type.dcross=Croce diagonale shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Unit menu.special.break=Punti di interruzione menu.bp.setbreak=Imposta punti di interruzione menu.bp.clearbreak=Elimina punti di interruzione menu.bp.sethidingbreak=Imposta punti di interruzione nascosti menu.bp.animatebreak=Anima punti di interruzione iconhelp.animatebreak=Anima punti di interruzione message.animatebreak=Anima punti di interruzione: clicca per fermare (Shift+freccia sinistra/destra per regolare velocit)! menu.special.exporttemplate=Esportazione HTML con modello templateload.open=Apri modello templateload.open.action=Apri menu.settings.doubleclick=Doppio clic per le macro export.codebase=Codebase # Version 3.12 edit.equation=Equazione # Version 3.23 menu.settings.squarepoints=Disegna punti sempre come quadrati # Version 3.37 menu.options.export=Impostazioni esportazione Grafico menu.settings.minwidth=Lo spessore minimo per le linee 1 menu.settings.minpointsize=Rispetta dimensione minima punto menu.settings.minfontsize=Rispetta dimensione minima carattere menu.options.minpointsize=Dimensione minima punto menu.options.minfontsize=Dimensione minima carattere # Version 3.38 menu.settings.scalepdf=Scala output per PDF e EPS 1:1 # Version 3.41 menu.file.clip=Clip per output grafici ... clip.title=Imposta Clipping clip.width=Larghezza clip.height=Altezza clip.screen=No Clipping # Version 3.44 iconhelp.large=Dimensione carattere grande iconhelp.bold=Carattere grassetto menu.options.largefont=Dimensione carattere grande menu.options.boldfont=Carattere grassetto warning.previewframe=Frame grande come la finestra! message.move.select=Muovi: Seleziona un punto (Shift: selezione multipla, Ctrl: mostra lo stato iniziale) # Version 3.46 iconbar.showseparators=Mostra Separatori # Version 3.48 menu.options.printscaler=Impostazione dimensioni esportazione ... menu.options.exportsettings=Impostazioni avanzate di esportazione ... printscaler.title=Impostazione Dimensioni esportazione printscaler.width=Larghezza (in cm) printscaler.height=Altezza (in cm) printscaler.dpi=Risoluzione (in dpi, default 300) printscaler.linewidth=Spessore linea (in cm, default 0.02) printscaler.pointsize=Dimensione punto (in cm, default 0.07) printscaler.textsize=Dimensione testo (in cm, default 0.3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=Larghezza (in pixel) printscaler.h=Altezza (in pixel) printscaler.scale=Scala (relativa allo schermo) printscaler.middle=Ritaglia (non riscalare) printscaler.sizes=Usa valori menu.file.savepng=Salva Grafico come PNG warning.preview=L'anteprima non funziona completamente con Java 1.1 iconedit.showseparators=Mostra separatori printscaler.aspect=Mantieni proporzioni printscaler.presets=Formato printscaler.preset=Utente printscaler.preset.300dpi=Scalato a 300 DPI printscaler.preset.300dpi6=Larghezza 6 cm Definizione 300 DPI printscaler.preset.300dpi16=Larghezza 6 cm Definizione 300 DPI printscaler.preset.window=Dimensioni finestra printscaler.preset.clip50=Riduzione 50% Dimensioni finestra message.saving=Per favore attendere! menu.options.printscalepreview=Anteprima esportazione (Ctrl-F3) date=Build # Version 3.51 help=Guida # Version 3.61 editconditionals.title=Edita propriet condizionate editconditionals.hidden=Nascosto editconditionals.superhidden=Nascosto completamente editconditionals.visible=Normale editconditionals.showname=Mostra nome editconditionals.showvalue=Mostra valore editconditionals.background=sfondo editconditionals.solid=Non trasparente exception.superfluous=Testo sconosciuto nell'espressione # Version 3.63 select.comment.title=Commento alla Macro # Version 3.68 edit.area.area=Area # Version 3.73 myfiledialog.oldfiles=Vecchi file # Version 3.74 iconhelp.load=Apri costruzione (Ctrl-o) iconhelp.save=Salva costruzione (Ctrl-s) iconhelp.new=Nuova costruzione (Ctrl-n) # Version 3.81 warning.loadbackground=Errore caricamento sfondo # Version 3.9 function.x=Espression per X (vuoto per le funzioni) # Version 3.91 constructiondisplay.select=Seleziona constructiondisplay.all=Tutti gli oggetti constructiondisplay.visible=Oggetti visibili constructiondisplay.points=Punti constructiondisplay.lines=Rette constructiondisplay.circles=Circonferenze constructiondisplay.angles=Angoli constructiondisplay.other=Altri oggetti menu.file.copypng=Copia negli appunti exception.clipboardcopy=Copia fallita! menu.options.finegrid=Solo assi # Vesion 3.93 edit.function.center=Seleziona centro edit.function.free=Rilascia centro message.setcenter=Seleziona punto per il centro! # Vesion 3.94 message.edit=Edita: oggetto (Shift: selezione multipla, Ctrl: conditionata)? # Version 3.95 edit.function.special=Solo punti # Version 3.97 error.image=Errore nel caricamento dell'immagine! filedialog.imageload=Apri Immagine filedialog.imageload.action=Apri prompt.image=immagine(,,,) objects.image=Immagine shortcuts.image=_ # Version 3.98 exception.depends=L'oggetto % dipende dall'oggetto corrente. error.depends=L'oggetto % dipende dall'oggetto corrente. constructiondisplay.sorted=Disponi in ordine di costruzione # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Espressioni # Version 4.00 iconhelp.image=Apri immagine(_) message.image=Punto di ancoraggio immagine % message.image.last=Ultimo punto ancoraggio immagine (o scegli punto selezionato) editconditionals.z=Z-Valore Buffer # Version 4.01 name.FixedAngle=Angolo fissato # Version 4.04 menu.moresettings=Impostazioni menu.settings.language=Imposta Lingua language.title=Imposta Lingua language.prompt=Lingua per il prossimo avvio del programma # Version 4.05 constructiondisplay.invalid=Oggetti non validi # Version 4.08 menu.settings.constructiondisplay=Mostra lista oggetti permanente (F11) # Version 4.09 constructiondisplay.editconditions=Edita condizioni constructiondisplay.delete=Cancella oggetti selezionati constructiondisplay.hide=Mostra o nascondi constructiondisplay.superhide=Nascondi Super # Version 4.2 edit.expression.slider=Mostra come slider menu.grid.options=Opzioni griglia menu.options.leftsnap=Aggancia con trascinamento menu.settings.boundingbox=Crea Bounding Box (bb) file # Version 4.3 latexsettings.title=Imposta esportazione LaTeX latexsettings.boundingbox=Crea Bounding box bb-file latexsettings.latexinput=Crea LaTeX idx-file latexsettings.doubledollar=LaTeX produce $$...$$ latexsettings.dollar=LaTeX produce $...$ latexsettings.nodollar=LaTeX produce tutte le altre stringhe latexsettings.fullpath=Usa percorso file printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=larghezza 12 cm definizione 300 DPI printscaler.latex=Salva per LaTeX menu.background.usewidth=Dimensiona solo altezza # Version 4.4 menu.options.restricted=Intersezioni ristrette menu.options.sizes=Imposta dimensioni ... sizesdialog.title=Dimensioni minlinesize.prompt=Spessore minimo linea (default: 1) minpointsize.prompt=Dimensioni minime punto (default: 3) minfontsize.prompt=Dimensioni minime carattere (default: 12) arrowsize.prompt=Dimensioni freccia vettore (default: 10) selectionsize.prompt=Dimensione selezione (default: 1.5) warning.loadmacros=Errore nel caricamento della macro! warning.macrodefinition=Scelto %, ma non una macro! edit.circle.bounds=Mostra come arco edit.circle.range=Imposta arco ... # Version 4.5 edit.track.dmin=Passo minimo (default 0.001) # Version 4.6 menu.settings.smallicons=Usa icone piccole menu.settings.oldicons=Usa vecchie icone./src/rene/zirkel/docs/CVS/RevisionCache/ZirkelProperties_br.properties#1.10000644000175000017500000011126611144764476025524 0ustar yvesyveslanguage=br_ version=Verso homefile=index.html homepage=http://www.professores.uff.br/hjbortol/car/ about.title=Sobre este programa about.name=Geometria Escolar about.programmed=Programado por title=Geometria Escolar close=Fechar ok=OK cancel=Cancelar done=Meus parabns! Voc completou o exerccio! message=Mensagem yes=Sim no=No abort=Cancelar true=verdadeiro false=falso warning.nojob=Isto no um Exerccio! warning.print=No foi possvel imprimir! warning.reset=Esta opo estar disponvel ao se reiniciar o programa! question.title=Pergunta question.intersection=Criar esta interseo? question.pointon=Criar um ponto neste objeto? colors.black=Preto colors.blue=Azul colors.green=Verde colors.brown=Marrom colors.cyan=Turquesa colors.yellow=Vermelho objects.point=Ponto objects.segment=Segmento objects.line=Reta objects.ray=Semi-reta objects.circle=Circunferncia objects.intersection=Interseo objects.move=Mover Ponto objects.hide=Esconder Objeto objects.edit=Editar Ponto objects.tracker=Rastrear Ponto ou Reta objects.objecttracker=Rastrear Ponto ou Reta sobre Objeto objects.parallel=Reta Paralela objects.plumb=Reta Perpendicular objects.circle3=Compasso objects.midpoint=Ponto Mdio objects.quadric=Cnica objects.angle=ngulo objects.boundedpoint=Ponto sobre Objeto objects.parameter=Definir Objetos Iniciais da Macro objects.targets=Definir Objetos Finais da Macro objects.definejob=Definir Exerccio objects.runmacro=Executar uma Macro objects.delete=Apagar Objetos e seus Descendentes objects.reorder=Enviar Objetos para o Fundo objects.animate=Animao objects.expression=Expresso Aritmtica objects.area=Polgono objects.text=Texto objects.fixedcircle=Circunferncia com Raio Fixo objects.fixedangle=ngulo de Amplitude Fixa objects.fixedsegment=Segmento com Comprimento Fixo iconhelp.point=Ponto (p) iconhelp.segment=Segmento (s) iconhelp.line=Reta (g) iconhelp.ray=Semi-reta (r) iconhelp.circle=Circunferncia (c) iconhelp.intersection=Interseo (i) iconhelp.move=Mover Ponto (m) iconhelp.hide=Esconder Objetos (h) iconhelp.edit=Editar Objetos (e) iconhelp.tracker=Rastrear Ponto ou Reta (t) iconhelp.objecttracker=Rastrear Automaticamente Ponto ou Reta (o) iconhelp.parallel=Reta Paralela (1) iconhelp.plumb=Reta Perpendicular (2) iconhelp.circle3=Compasso (3) iconhelp.midpoint=Ponto Mdio (4) iconhelp.quadric=Cnica passando por 5 Pontos ($) iconhelp.angle=ngulo (a) iconhelp.boundedpoint=Criar Ponto sobre Objeto (5) iconhelp.hidden=Mostrar ou Esconder Objetos (F9) iconhelp.color=Cor Padro do Objeto (Ctrl-1,2,3,4) iconhelp.type=Tipo Padro do Ponto (Ctrl-5,6,7,8,9,0) iconhelp.type0=Tipo Padro do Ponto iconhelp.thickness=Espessura Padro do Objeto (Alt-5,6,7) iconhelp.back=Apagar ltimo Objeto (<-) iconhelp.thickness0=Espessura Padro do Objeto iconhelp.partial=Circunferncias Parciais (Ctrl-F9) iconhelp.plines=Linhas Parciais (Ctrl-F10) iconhelp.arrow=Segmentos como Vetores (Ctrl-F11) iconhelp.showcolor=Mostrar Cores Selecionadas (Alt-1,2,3,4) iconhelp.runmacro=Executar Macro (9) iconhelp.macro=Objetos Iniciais/Objetos Finais/Definir Macro (7,8,Ctrl-5) iconhelp.expression=Expresso Aritmtica (x) iconhelp.showvalue=Mostrar Valores dos Objetos (Ctrl-F7) iconhelp.showname=Mostrar Nomes dos Objetos (Ctrl-F6) iconhelp.obtuse=Usar ngulos Obtusos (Ctrl-F12) iconhelp.solid=No usar transparncia iconhelp.longnames=Nomes Extensos para Objetos (Ctrl-F8) iconhelp.grid=Mostrar Grade (F12) iconhelp.comment=Mostrar e Editar Comentrio (F10) iconhelp.defaults=Configurao Padro iconhelp.macro0=Objetos Iniciais/Objetos Finais/Definir Macro iconhelp.visual=Construo Visual iconhelp.replay=Revisar Construo iconhelp.oneforward=Avanar iconhelp.fastforward=Avanar vrios Passos iconhelp.allforward=Avanar Tudo iconhelp.oneback=Voltar iconhelp.fastback=Voltar vrios Passos iconhelp.allback=Voltar Tudo iconhelp.close=Fechar iconhelp.area=Polgono (0) iconhelp.text=Texto (b) iconhelp.fixedcircle=Circunferncia com Raio Fixo (,) iconhelp.fixedangle=ngulo de Amplitude Fixa (.) iconhelp.fixedsegment=Segmento com Comprimento Fixo (#) iconhelp.animate=Animao de um Ponto (") iconhelp.delete=Apagar Objeto e seus Descendentes (Del) iconhelp.undo=Desfazer ltimas Remoes (Ctrl-z) iconhelp.nextbreak=Prximo Ponto de Parada iconhelp.setbreak=Marcar/Desmarcar Ponto de Parada iconhelp.zoom=Zoom com o mouse (%) shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-0) shortcuts.color.1=(Ctrl-1) shortcuts.color.2=(Ctrl-2) shortcuts.color.3=(Ctrl-3) shortcuts.showcolor.0=(Alt-0) shortcuts.showcolor.1=(Alt-1) shortcuts.showcolor.2=(Alt-2) shortcuts.showcolor.3=(Alt-3) shortcuts.showcolor.4= shortcuts.showcolor.5= shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) menu.file=Arquivo menu.file.clearmacros=Apagar todas as Macros menu.file.load=Abrir Construo ... (Ctrl-o) menu.file.loadjob=Abrir Exerccio ... (Ctrl-j) menu.file.savejob=Salvar Exerccio como ... (Ctrl-k) menu.file.save=Salvar Construo (Ctrl-s) menu.file.saveas=Salvar Construo como ... (Ctrl-a) menu.file.includemacros=Incluir Todas as Macros menu.file.exit=Sair (Alt-F4) menu.file.print=Imprimir ... menu.file.print.isoscale=Escala 1:1 em cm menu.file.savebmp=Salvar Figura (como BMP) ... menu.file.savefig=Salvar Figura (como FIG) ... menu.file.loadrun=Abrir Construo Descritiva (Ctrl-r) menu.file.editrun=Editar Construo Descritiva (Ctrl-x) menu.actions=Editar menu.actions.elementary=Ferramentas Bsicas menu.actions.complex=Ferramentas Avanadas menu.actions.move=Ferramentas de Movimentao menu.actions.decorative=Objetos Decorativos menu.options=Opes menu.options.visual=Modo Visual (Ctrl-F6) menu.options.hidden=Mostrar Objetos Ocultos (F9) menu.options.comment=Editar Comentrio (F10) menu.options.constructiondisplay=Mostrar Descrio (F11) menu.options.grid=Mostrar Grade (F12) menu.options.setgrid=Modificar Largura da Grade ... menu.options.showcolor=Mostrar Cor menu.options.defaultcolor=Cor Padro menu.options.defaultthickness=Espessura Padro menu.options.defaulttype=Tipo de Ponto Padro menu.options.all=Tudo menu.options.setdigits=Nmero de Dgitos menu.options.shownames=Mostrar Nomes dos Objetos (Ctrl-F6) menu.options.longnames=Usar Nomes Extensos para Objetos (Ctrl-F7) menu.options.obtuse=Usar ngulos Obtusos (Ctrl-F12) menu.options.solid=No Usar Transparncia menu.options.showvalues=Mostrar Valores dos Objetos (Ctrl-F8) menu.options.partial=Circunferncias Parciais (Ctrl-F9) menu.options.plines=Retas Parciais (Ctrl-F10) menu.options.arrow=Vetor (Ctrl-F11) menu.options.editicons=Editar Caixa de Ferramentas menu.options.back=Apagar o ltimo Objeto (<-) menu.options.undo=Desfazer a ltima Remoo (Ctrl-z) menu.zoom=Zoom menu.zoom.in=Ampliar (+) menu.zoom.out=Reduzir (-) menu.zoom.left=Esquerda (seta para a esquerda) menu.zoom.right=Direita (seta para a direita) menu.zoom.up=Acima (seta para cima) menu.zoom.down=Abaixo (seta para baixo) menu.macros=Macros menu.special.definemacro=Definir Macro (Ctrl-F5) menu.special.runmacro=Executar Macro ... (F5) menu.special.savemacros=Salvar Todas as Macros ... menu.special.loadmacros=Abrir Macro ... menu.special.deletemacros=Apagar Macros ... menu.special=Especial menu.special.testjob=Testar Exerccio (Ctrl-F1) menu.special.jobcomment=Texto do Exerccio ... (F8) menu.special.export=Exportar como HTML ... (Ctrl-e) menu.special.replay=Revisar Construo menu.help=Ajuda menu.help.about=Sobre este Programa menu.help.browser=Explorar Ajuda e Demos menu.help.text=Ajuda Simples menu.help.configure=Configurar Navegador menu.help.help=Ajuda (F1) menu.help.macros=Como Criar e Usar Macros menu.help.tools=Sobre as Ferramentas menu.help.gui=Sobre a Interface com o Usurio menu.help.interactive=Sobre Construes Descritivas menu.help.tips=Dicas menu.settings=Preferncias menu.settings.fullicons=Duas Barras de cones menu.settings.utf=Usar Codificao UTF-8 menu.settings.autohide=Esconder o Segundo Ponto de Interseo menu.settings.iconbartop=Barra de cones Acima da rea de Construo menu.settings.showtips=Mostrar Nome das Ferramentas menu.settings.simplegraphics=Usar Sempre Grficos Simples menu.settings.sure=Confirmar antes de Abrir e Fechar Arquivos menu.settings.pointon=Confirmar antes de Criar um Ponto sobre um Objeto menu.settings.intersection=Confirmar antes de Criar uma Interseo menu.settings.choice=Mostrar Caixa de Dilogos para Selecionar Objetos menu.settings.movename=Mostrar Valores dos Objetos durante Movimentao menu.settings.movefixname=Mostrar Valores dos Objetos Fixos durante Movimentao menu.settings.restricted=Modo Aprendizagem menu.colors=Definir Cores colors.default=Usar Cores Padres colors.color0=Cor 1 (Preto) colors.color1=Cor 2 (Verde) colors.color2=Cor 3 (Azul) colors.color3=Cor 4 (Marrom) colors.color4=Cor 5 (Turquesa) colors.color5=Cor 6 (Amarelo) colors.background=Cor de Fundo colors.select=Objeto selecionado colors.target=Objeto final myfiledialog.dir=Diretrio myfiledialog.file=Arquivo myfiledialog.pattern=Tipo de Arquivo (Filtro) filedialog.open=Abrir filedialog.saveas=Salvar como ... filedialog.open.action=Abrir filedialog.saveas.action=Salvar filedialog.htmlsave=Salvar como HTML filedialog.htmlsave.action=Salvar pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Salvar load=Abrir abort=Cancelar bound.release=Tornar Ponto Livre bound.bind=Colocar Ponto sobre Objeto bound.error=Objeto no encontrado! constructiondisplay.edit=Editar Objeto constructiondisplay.copy=Copiar para a rea de Transferncia edit.Title=Propriedades edit.name=Nome edit.hidden=Escondido edit.text=Texto edit.fixed=Fixo edit.color=Cor edit.ok=OK edit.cancel=Cancelar edit.showname=Mostrar Nome edit.point.title=Editar Ponto edit.point.type=Tipo edit.point.x=X edit.point.y=Y edit.point.intersection=Diferente de edit.point.showvalue=Mostrar Coordenadas edit.point.colortype=Espessura edit.point.bound=Colocar sobre Objeto edit.point.away=Longe de edit.point.close=Perto de edit.point.free=Livre edit.line.title=Editar Reta, Semi-reta, Segmento edit.line.normal=Normal edit.line.thick=Grosso edit.line.thin=Pontilhado edit.line.type=Tipo edit.segment.length=Comprimento edit.segment.showvalue=Mostrar Comprimento edit.circle.title=Editar Circunferncia edit.circle.length=Raio edit.circle.partial=Circunferncia Parcial edit.circle.range=Definir Arco edit.circle.killrange=Apagar Arco edit.plumb.restricted=Restrito (ao segmento ou semi-reta) edit.angle.title=Editar ngulo edit.angle.length=Amplitude do ngulo edit.angle.displaysize=Mostrar Amplitude do ngulo edit.angle.normal=Normal edit.angle.small=Pequeno edit.angle.large=Grande edit.expression.title=Editar Expresso edit.expression=Expresso Aritmtica edit.expression.prompt=Explicao edit.area.title=Editar Polgono edit.area.back=Colocar no Fundo export.title=Exportar como HTML export.pagetitle=Ttulo da Pgina export.width=Largura export.height=Altura export.jar=Arquivo JAR export.comment=Salvar Comentrio export.file=Arquivo de Construo export.job=Mostrar como Exerccio export.color=Cor export.backgroundcolor=Usar como cor de fundo da pgina export.appletcolor=Usar como cor de fundo do applet export.plain=Simples export.3D=Borda export.breaks=Revisar Construo com Pontos de Parada export.icons=Borda e cones export.full=Borda, cones e Barra de Mensagem export.nonvisual=Borda, cones e Barra de Entrada export.style=Estilo do Applet export.setcolor=Escolher a Cor export.savefirst=O arquivo no foi salvo! export.soltext=Soluo export.stylesheet=Arquivo de Estilo CSS export.solution=Arquivo da Soluo export.jumpsol=Ir para a Soluo export.linksol=Link para a Soluo export.savesol=Salvar Arquivo da Soluo export.track=Rastrear Ponto export.digits=Salvar Nmero de Dgitos export.setsize=Definir Tamanho export.signature=Criado com R.e.C. export.colors=Salvar Cores Definidas export.background=Salvar Fundo Definido help.title=Ajuda help.error=O arquivo de ajuda no pde ser aberto! help.file=br_schoolgeometry.txt coloreditor.title=Editar as Cores coloreditor.red=Vermelho coloreditor.green=Verde coloreditor.blue=Azul coloreditor.color=Sua Cor Personalizada comment.title=Comentrio da Construo comment.set=Definir comment.cancel=Cancelar comment.close=Fechar iconedit.title=Editar Barra de cones iconedit.twobars=Caixa de cones tem duas linhas jobcomment.title=Exerccio select.title=Escolha select.ok=OK select.cancel=Cancelar select.comment=Mostrar Comentrio select.all=Tudo message.circle.midpoint=Circunferncia: de centro em qual ponto? message.circle.radius=Circunferncia: passando por qual ponto (shift: raio fixo)? message.fixedcircle.midpoint=Circunferncia de raio fixo: de centro em qual ponto? message.fixedcircle.radius=Circunferncia de raio fixo: passando por qual ponto? message.edit=Editar: qual objeto? message.line.first=Reta: passando por qual ponto? message.line.second=Reta: passando por qual outro ponto? message.ray.first=Semi-reta: passando por qual ponto? message.ray.second=Semi-reta: passando por qual outro ponto? message.move.select=Mover: qual ponto? message.move.move=Mover: mova o ponto! message.point=Ponto: defina um ponto! message.segment.first=Segmento: passando por qual ponto? message.segment.second=Segmento: passando por qual outro ponto (shift: comprimento fixo)? message.fixedsegment.first=Segmento com comprimento fixo: passando por qual ponto? message.fixedsegment.second=Segmento com comprimento fixo: passando por qual outro ponto? message.intersection.first=Interseo: de qual objeto (ou selecione diretamente o ponto de interseo)? message.intersection.second=Interseo: com qual objeto? message.hide=Esconder/Mostrar: qual objeto? message.tracker.select=Rastrear: qual ponto ou reta? message.tracker.selectpoint=Rastrear: qual ponto mover? message.tracker.move=Rastrear: mova o ponto! message.objecttracker.select=Rastrear automaticamente: qual ponto (shift: seleciona mais pontos)? message.objecttracker.object=Rastrear automaticamente: qual reta, semi-reta, segmento ou circunferncia? message.objecttracker.selectpoint=Rastrear automaticamente: qual ponto mover? message.objecttracker.selectanypoint=Rastrear automaticamente: outros pontos para mover? message.objecttracker.move=Rastrear automaticamente: mova o ponto! message.objecttracker.start=Rastrear automaticamente: iniciar a animao! message.parallel.first=Reta Paralela: a qual reta, semi-reta ou segmento? message.parallel.second=Reta Paralela: por qual ponto? message.plumb.first=Reta Perpendicular: a qual reta, semi-reta ou segmento? message.plumb.second=Reta Perpendicular: por qual ponto? message.circle3.first=Compasso: selecione o primeiro ponto do raio! message.circle3.second=Compasso: selecione o segundo ponto do raio! message.circle3.midpoint=Compasso: selecione o centro! message.midpoint.first=Ponto Mdio: entre qual ponto? message.midpoint.second=Ponto Mdio: e qual outro ponto? message.quadric=Cnica: selecione o ponto de nmero message.angle.first=ngulo: selecione o primeiro ponto! message.angle.root=ngulo: selecione o vrtice! message.angle.second=ngulo: selecione o terceiro ponto (shift: amplitude fixa)! message.fixedangle.first=ngulo de amplitude fixa: selecione o primeiro ponto! message.fixedangle.root=ngulo de amplitude fixa: selecione o vrtice! message.fixedangle.second=ngulo de amplitude fixa: selecione o terceiro ponto! message.label.select=Mover Rtulo: selecione um rtulo! message.label.move=Mover Rtulo: mova o rtulo! message.boundedpoint=Ponto sobre Objeto: sobre qual circunferncia, reta, semi-reta ou segmento? message.parameters=Macro: selecione os objetos iniciais! message.targets=Macro: selecione os objetos finais! message.savejob.first=Definir Exerccio: selecione o ltimo objeto do enunciado! message.savejob.second=Definir Exerccio: selecione o objeto a se construir (shift: no verifica)! message.savejob.third=Definir Exerccio: selecione outros objetos a serem desenhados! message.runmacro=Macro %: %. (Entre %) % message.runmacro.return=(Barra de espao: escolhe %) message.runmacro.fixes=(Shift: corrige seleo) message.delete=Apagar: qual objeto? message.reorder=Reordenar: qual objeto? message.expression=Expresso Aritmtica: onde colocar? message.area=Polgono Hachurado: selecion um vrtice do polgono! message.text=Texto: onde colocar? message.animator.point=Animao: qual ponto animar? message.animator.segment=Animao: sobre qual objeto? (segmento ou circunferncia) message.animator.running=Animao: em curso (clique para parar)! message.range.first=Arco deste ponto ... message.range.second=... at este ponto! message.setaway.away=Longe deste ponto! message.setaway.close=Perto deste ponto! objectsedit.title=Editar Propriedades point.type.square=Quadrado point.type.diamond=Diamante point.type.circle=Circunferncia point.type.dot=Ponto color.type.normal=Normal color.type.thick=Grosso color.type.thin=Fino text.point=Ponto em (%, %) text.line=Reta passando por % e % text.segment=Segmento entre % e % text.segment.fixed=Segmento entre % e % com comprimento % text.ray=Semi-reta de origem % e passando por % text.intersection=Interseo entre % e % text.circle=Circunferncia de centro em % passando por % text.circle.fixed=Circunferncia de centro em % passando por % e com raio % text.fixedcircle=Circunferncia de centro em % com raio % text.circle3=Circunferncia com centro em % e com raio determinado pelo segmento entre % e % text.parallel=Reta passando por % e paralela a % text.midpoint=Ponto Mdio entre % e % text.quadric=Cnica passando por % text.plumb=Reta passando por % e perpendicular a % text.angle=ngulo % - % - % text.angle.fixed=ngulo % - % - % de amplitude % text.boundedpoint=Ponto sobre % text.expression=Expresso "%" em (%, %) text.area=Polgono text.fixedangle=ngulo % - % de amplitude % name.Point=Ponto name.Intersection=Interseo name.OtherIntersection=Interseo name.Circle=Circunferncia name.Circle3=Circunferncia name.Segment=Segmento name.Ray=Semi-reta name.Line=Reta name.TwoPointLine=Reta passando por dois pontos name.Parallel=Reta paralela name.Midpoint=Ponto mdio name.Quadric=Cnica name.Plumb=Reta perpendicular name.Angle=ngulo name.PointOn=Ponto sobre objeto name.Expression=Expresso name.Polygon=Polgono prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.angle==a(,,) prompt.area=A(,,) prompt.quadric=quadric(,,,,) prompt.function=function(,,,,,) name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=sr name.short.Line=r name.short.Parallel=par name.short.Midpoint=M name.short.Quadric=con name.short.Plumb=per name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=pol name.short.Function=f popup.hidden=Mostrar objetos escondidos popup.replay=Revisar construo popup.empty=--- Macros --- replay.title=Revisar Construo reorder.title=Reordenar os objetos reorder.message=incluir depois de reorder.notfound=Objeto no encontrado! reorder.warning=No pode ser feito! setgrid.title=Largura da Grade setgrid.prompt=Entre com a nova largura da grade setgrid.set=OK definemacro.title=Definir uma Macro definemacro.name=Nome definemacro.comment=Comentrio da macro definemacro.noparams=Faltam os parmetros iniciais da macro! definemacro.nomacro=No existem macros definidas! definemacro.targetsonly=Mostrar apenas os objetos finais definemacro.invisible=No incluir construes intermedirias definemacro.promptfor=Solicitao para macro.replace.title=Substituir uma Macro macro.replace=Substituir Macro: macro.replace.all=Tudo macro.usage=Uso incorreto da macro (veja as indicaes)! macro.prompt.title=Solicitao de Parmetros macro.prompt.prompt=Entre com um valor para o parmetro macro.prompt.illegal=Valor invlido! digits.title=Definir Nmero de Dgitos digits.edit=Editar digits.lengths=Mostrar digits.angles=ngulos editrun.title=Editar Construo Descritiva editrun.run=Salvar e Executar editrun.load=Outra Descrio sure.title=Tem certeza? sure.macros=Apagar todas as macros? sure.delete=Ignorar as ltimas modificaes? close.title=Fim close.prompt=Fechar o programa? file.exists.title=Arquivo Existente file.exists.overwrite=O arquivo j existe! Substituir? exception.nparams=Nmero de Parmetros Invlido! exception.notfound=O objeto no foi encontrado ou ele foi definido aps a expresso! exception.type=Tipo de Objeto Invlido! exception.expression=Expresso Invlida! exception.canfix=O objeto no pode ser corrigido! exception.fix=Valor invlido! exception.novalue=Valor invlido! exception.elementary=Elemento invlido na expresso! exception.bracket=Faltam parnteses! exception.quotes=Faltam aspas! exception.dot=O nmero tem dois ou mais pontos decimais! exception.nodigit=O nmero no tem algarismos! exception.function=Funo desconhecida! exception.parameter=Parmetro de funo invlido! exception.macro=Parmetro de macro invlido! exception.name=Escreva um nome! exception.job=Parmetros de exerccio invlidos! exception.track=Parmetros de rastreio invlidos! exception.animate=Parmetros de animao invlidos! exception.boolean=Valor booleano deve ser verdadeiro ou falso! exception.value=Valor Invlido! exception.color=Cor Invlida! exception.colortype=Espessura Invlida! exception.type=Tipo de Ponto Invlido! exception.macroparameter=Objeto Inicial da Macro Invlido! exception.macrotarget=Objeto Final da Macro Invlido! exception.prompt=Nome do Objeto Invlido! exception.prompt.parameter=O nome do objeto no pode ser um parmetro! exception.parameters=Parmetro Invlido! exception.brackets=Parnteses Invlidos! exception.double=Este nome j existe! error.setaway=Este ponto no est definido antes da interseo! error.objecttracker.depends=Este ponto depende de outro objeto! constructiondisplay.title=Construo function.hide=Esconder function.hide.short=esconder function.rename=Nome function.rename.short=nome function.value=Valor function.value.short=valor function.window=Janela function.window.short=Jan function.color=Cor function.color.short=cor function.thickness=Espessura function.thickness.short=esp function.type=Tipo function.type.short=tipo function.partial=Parcial function.partial.short=parc function.fill=Preencher function.fill.short=preencher function.back=Fundo function.back.short=fundo function.acute=Agudo function.acute.short=agudo function.obtuse=Obtuso function.obtuse.short=obtuso function.solid=Opaco function.solid.short=opaco function restrict=Restrito function restrict.short=restrito expression.value=Valor configure.title=Escolher Navegador configure.prompt=Comando do Navegador # New Resources: background.error=No foi possvel abrir a imagem (GIF or JPG)! menu.background=Imagem de fundo menu.background.grab=Usar a construo atual como imagem de fundo menu.background.clear=Apagar a imagem de fundo menu.background.load=Abrir imagem de fundo ... menu.background.usesize=Redimensionar a imagem de fundo menu.background.tile=Ladrilhar imagem de fundo menu.background.center=Centralizar imagem de fundo iconhelp.grab=Criar ou apagar a imagem de fundo filedialog.backgroundload=Abrir imagem de fundo filedialog.backgroundload.action=Abrir # New Resources in Version 2.14 menu.file.compress=Compactar sempre menu.file.savesvg=Salvar figura (como SVG) ... # Version 2.15 loading=Carregando (por favor, aguarde) ... # Version 2.18 and 2.19 menu.settings.font.default=Fonte padro menu.settings.font.bold=Negrito menu.settings.font.large=Fonte Maior menu.file.saveeps=Salvar figura (como EPS) ... menu.fonts=Fonte # Version 2.20 bmpscaler.title=Dimenses do Arquivo (bitmap) bmpscaler.width=Largura bmpscaler.height=Altura bmpscaler.scale=Fator (pressione a tecla Enter) bmpscaler.illegal=Valor invlido! # Version 2.21 renamemacro.title=Substituir uma Macro renamemacro.name=Novo nome da macro menu.special.renamemacro=Substituir Macro ... # Version 2.23 savequestion.title=Salvar Construo savequestion.qsave=Salvar as Modificaes? # Version 2.25 exception.printsize=Pgina muito pequena para esta construo! iconhelp.nohelp=Ajuda no disponvel iconhelp.type?=Tipo de ponto iconhelp.thickness?=Espessura iconhelp.color?=Cor iconhelp.filled=Objeto Opaco iconhelp.isback=Desenhar no fundo iconhelp.inverse=ngulo oposto iconhelp.angle?=Amplitude # Version 2.28 message.objecttracker.stop=Rastrear automaticamente: clique para parar (shift da esquerda/shift da direita: altera a velocidade)! # Version 2.31 menu.settings.indicate=Visualizar objetos criados menu.options.other=Preferncias menu.help.welcome=Novidades desta verso iconhelp.twolines=cones em duas linhas iconhelp.qintersection=Confirmar antes de Criar Intersees iconhelp.qchoice=Mostrar Caixa de Dilogos para Selecionar Objetos iconhelp.qpointon=Confirmar antes de Criar um Ponto sobre um Objeto iconhelp.noindicate=No indicar objetos com a passagem do mouse # Version 2.33 menu.file.new=Nova Construo (Ctrl-n) # Version 2.34 edit.text.title=Configuraes de Texto edit.text.settings=Preferncias menu.settings.filedialog=Substituir Arquivo do Sistema # Version 2.35 menu.settings.bitmapbackground=Incluir Cor de Fundo em Bitmaps # Version 2.36 menu.file.savegraphics=Salvar Figura como ... menu.file.savepng=Salvar Figura (como PNG) bmpscaler.title=Escala da Figura # Version 2.37 menu.file.savepdf=Salvar Figura (como PDF) iconhelp.chord=Representar como segmento # Version 2.39 message.setfixedangle.first=Definir ngulo de amplitude fixa: selecione o primeiro ponto! message.setfixedangle.root=Definir ngulo de amplitude fixa: selecione o vrtice! message.setfixedangle.second=Definir ngulo de amplitude fixa: selecione o terceiro ponto! edit.fixedangle.set=Fixar amplitude ... message.setfixedcircle.midpoint=Definir circunferncia de raio fixo: de centro em qual ponto? message.setfixedcircle.radius=Definir circunferncia de raio fixo: passando por qual ponto? edit.fixedcircle.set=Fixar raio ... # Version 2.40 minpointsize.title=Definir Tamanho Mnimo do Ponto minpointsize.prompt=Tamanho mnimo do ponto (valor padro: 3) menu.settings.font.minpointsize=Tamanho Mnimo do Ponto ... # Version 2.41 name.short.Track=Tr text.track=Rastrear % enquanto % se move sobre % trackquestion.keep=Manter Trao na Construo? trackquestion.title=Manter Trao menu.options.track=Manter Trao (Shift-Enter) iconhelp.indicate=Visualizao dos resultados da construo iconhelp.nohelp=Ajuda no disponvel! # Version 2.42 objects.draw=Desenhar com o Mouse menu.options.cleardraw=Apagar Desenho (Esc) iconhelp.draw=Desenhar com o Mouse message.draw=Desenhar com o Mouse (ESC para apagar) shortcuts.draw=; # Version 2.43 message.move.select=Mover: selecione um ponto (shift: mostra posio antiga)! message.rename=Renomear (A,B,C,...): selecione os objetos! iconhelp.rename=Renomear (A,B,C,...) objects.rename=Renomear (A,B,C,...) shortcuts.rename=: iconhelp.anglereduce=No mostrar as semi-retas do ngulo # Version 2.45 menu.settings.smartboard=Modo Smartboard shortcuts.zoom=% objects.zoom=Zoom com o Mouse message.zoom=Arraste o centro, amplie ou reduza # Version 2.46 menu.special.restricticons=Grupo de cones Restritos # Version 2.47 menu.settings.indicate.simple=Indicar Pontos Apenas menu.settings.beginner=Modo Iniciante question.again=Sempre fazer esta pergunta. # Version 2.49 definemacro.parameters=Solicitao de Parmetros ("=nome" fixa o valor do parmetro) # Version 2.53 menu.actions.angles=ngulos menu.actions.circles=Circunferncias menu.actions.lines=Retas menu.actions.points=Pontos # Version 3.00 info.title=Ajuda Contextualizada info.related=Tpicos Relacionados info.notfound=Tpico no encontrado! info.noresults=Palavra no encontrada! info.searchresults=- Resultados da Busca - info.select=- Escolha - info.search=Procurar info.back=Voltar info.start=Iniciar iconhelp.info=Ajuda contextualizada menu.help.info=Ajuda contextualizada myfiledialog.homedir=Arquivos ReC myfiledialog.windowshome=Meus Documentos myfiledialog.mkdir=Criar Diretrio myfiledialog.back=Voltar menu.file.alwaysclearmacros=Apagar Macros antes de Carregar about.language=Idioma bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Cpias de Segurana # Version 3.02 menu.options.hideduplicates=Esconder Itens Duplicados # Version 3.03 menu.options.function=Criar uma Funo text.function=Funo ( % , % ) function.varmin=De function.varmax=at function.dvar=Passo function.var=Varivel function.x=X function.y=Y iconhelp.function=Criar uma Funo menu.options.editlast=Editar o ltimo Objeto iconhelp.control.edit=Editar o ltimo Objeto iconhelp.control.hide=Esconder Itens Duplicados edit.function.title=Funo ou Curva iconhelp.control.runmacro=Executar a ltima macro novamente # Version 3.05 point.type.cross=Cruz point.type.dcross=Xis shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Unidade menu.special.break=Pontos de Parada menu.bp.setbreak=Definir Pontos de Parada menu.bp.clearbreak=Apagar Pontos de Parada menu.bp.sethidingbreak=Definir Pontos de Parada Ocultos menu.bp.animatebreak=Animar Pontos de Parada iconhelp.animatebreak=Animar Pontos de Parada message.animatebreak=Animar Pontos de Parada: clique para parar (shift da esquerda/shift da direita: altera a velocidade)! menu.special.exporttemplate=Exportar arquivo HTML como Modelo templateload.open=Carregar Modelo templateload.open.action=Abrir menu.settings.doubleclick=Clique Duplo para Macros export.codebase=Codebase # Version 3.12 edit.equation=Equao # Version 3.23 menu.settings.squarepoints=Desenhar pontos sempre como quadrados # Version 3.37 menu.options.export=Configurar Sada Grfica menu.settings.minwidth=Espessura mnima da reta 1 menu.settings.minpointsize=Respeitar o tamanho mnimo do ponto menu.settings.minfontsize=Respeitar o tamanho mnimo da fonte minfontsize.title=Definir o tamanho mnimo da fonte minfontsize.prompt=Tamanho mnimo da fonte (padro: 12) menu.options.minpointsize=Tamanho Mnimo do Ponto menu.options.minfontsize=Tamanho Mnimo da Fonte # Version 3.38 menu.settings.scalepdf=Redimensional PDF e EPS na proporo 1:1 # Version 3.41 menu.file.clip=Corte da Sada Grfica clip.title=Definir rea de Corte clip.width=Comprimento clip.height=Altura clip.screen=Sem rea de Corte # Version 3.42 menu.options.arrowsize=Tamanho da seta ... arrowsize.title=Tamanho da Seta # Version 3.44 iconhelp.large=Usar fontes grandes iconhelp.bold=Usar fontes em negrito menu.options.largefont=Fonte grande menu.options.boldfont=Fonte em negrito warning.previewframe=rea maior do que a janela! message.move.select=Mover: Selecionar um ponto (shift: mais pontos, ctrl: exibe configurao anterior)! # Version 3.46 iconbar.showseparators=Exibir Separadores # Version 3.48 menu.sizes=Definir tamanhos menu.options.minlinesize=Espessura Mnima da Reta ... minlinesize.title=Espessura Mnima da Reta minlinesize.prompt=Espessura Mnima da Reta (Padro 1) arrowsize.prompt=Definir Tamanho da Seta (Padro: 10) menu.options.printscaler=Definir Escala ... menu.options.exportsettings=Configuraes Especiais ... printscaler.title=Definir Janela printscaler.width=Comprimento (em cm) printscaler.height=Altura (em cm) printscaler.dpi=Resoluo (em dpi, padro 300) printscaler.linewidth=Espessura da Reta (em cm, padro 0.02) printscaler.pointsize=Tamanho do Ponto (em cm, padro 0.07) printscaler.textsize=Tamanho do Texto (em cm, padro 0.3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=Comprimento (em pixels) printscaler.h=Altura (em pixels) printscaler.scale=Escala (relativa janela) printscaler.middle=Cortar (sem redimensionamento) printscaler.sizes=Redimensionar retas, fontes e pontos menu.file.savepng=Salvar Figura como PNG warning.preview=Visualizao pode no funcionar com Java 1.1 iconedit.showseparators=Exibir Separadores printscaler.aspect=Manter as Propores printscaler.presets=Configuraes printscaler.preset=Selecione printscaler.preset.300dpi=Redimensionar com 300 DPI printscaler.preset.300dpi6=6 cm de comprimento com 300 DPI printscaler.preset.300dpi16=16 cm de comprimento com 300 DPI printscaler.preset.window=Tamanho da Janela printscaler.preset.clip50=Reduzir Janela em 50% message.saving=Por favor, espere! menu.options.printscalepreview=Visualizar (Ctrl-F3) date=Compilado # Version 3.51 help=Ajuda # Version 3.61 editconditionals.title=Editar Condicionais editconditionals.hidden=Escondido editconditionals.superhidden=Completamente Escondido editconditionals.visible=Normal editconditionals.showname=Exibir Nome editconditionals.showvalue=Exibir Valor editconditionals.background=Fundo editconditionals.solid=No Transparente exception.superfluous=Texto Suprfluo na Expresso # Version 3.62 menu.options.selectionsize=Configurar Tamanho selectionsize.title=Tamanho selectionsize.prompt=Tamanho (padro 1.5) # Version 3.63 select.comment.title=Comentrio da Macro # Version 3.68 edit.area.area=rea # Version 3.73 myfiledialog.oldfiles=Arquivos Antigos # Version 3.74 iconhelp.load=Carregar Construo (Ctrl-o) iconhelp.save=Salvar Construo (Ctrl-s) iconhelp.new=Nova Construo (Ctrl-n) # Version 3.81 warning.loadbackground=Erro ao abrir a figura de fundo # Version 3.9 function.x=Expresso para X (vazio para funes) # Version 3.91 constructiondisplay.select=Selecionar constructiondisplay.all=Todos os Objetos constructiondisplay.visible=Objetos Visveis constructiondisplay.points=Pontos constructiondisplay.lines=Retas constructiondisplay.circles=Crculos constructiondisplay.angles=ngulos constructiondisplay.other=Outros objetos menu.file.copypng=Copiar para o Clipboard exception.clipboardcopy=No foi possvel copiar! menu.options.finegrid=Somente os Eixos # Vesion 3.93 edit.function.center=Definir Centro edit.function.free=Liberar Centro message.setcenter=Escolher o ponto central! # Vesion 3.94 message.edit=Editar: Objeto (shift: mais objetos, ctrl: condicionais)? # Version 3.95 edit.function.special=Somente os Pontos # Version 3.97 error.image=Erro ao abrir uma imagem! filedialog.imageload=Abrir imagem filedialog.imageload.action=Abrir prompt.image=imagem(,,,) objects.image=imagem shortcuts.image=_ # Version 3.98 exception.depends=Objeto % depende do objeto atual. error.depends=Objeto % depende do objeto atual. constructiondisplay.sorted=Ordenado por Ordem de Construo # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Expresses # Version 4.00 iconhelp.image=Abrir Imagem(_) message.image=Ponto ncora da imagem % message.image.last=Last image anchor point (or choose selected point) message.image.last=ltimo ponto ncora da imagem (ou escolha um ponto selecionado) editconditionals.z=Valor do Z-Buffer # Version 4.01 name.FixedAngle=ngulo fixo # Version 4.04 menu.moresettings=Configuraes menu.settings.language=Configurar Idioma language.title=Configurar Idioma language.prompt=Idioma para a prxima sesso do programa # Version 4.05 constructiondisplay.invalid=Objetos Invlidos # Version 4.08 menu.settings.constructiondisplay=Tela de Construes Permanentes (F11) # Version 4.09 constructiondisplay.editconditions=Editar Condicionais constructiondisplay.delete=Apagar Objetos selecionados constructiondisplay.hide=Esconder ou Exibir constructiondisplay.superhide=Esconder (super) ./src/rene/zirkel/docs/CVS/RevisionCache/ZirkelProperties_vi.properties#1.10000644000175000017500000010457411144764476025543 0ustar yvesyves abort=Huy bo about.language=Ngon ngu about.name=School Geometry about.programmed=Lap trinh boi about.title=Thong tin chuong trinh arrowsize.prompt=Kich thuoc dang mui ten (mac dinh: 10) background.error=Khong the mo tap tin anh (.GIF hoac .JPG). bmpscaler.300dpi=300 dpi bmpscaler.72dpi=72 dpi bmpscaler.height=Chieu cao bmpscaler.illegal=Gia tri khong hop le bmpscaler.scale=Thua so bmpscaler.title=Co gian anh bmpscaler.width=Chieu rong bound.bind=Lien ket den doi tuong bound.error=Doi tuong khong the thiet lap! bound.release=Giai phong diem cancel=Huy bo clip.height=Chieu cao clip.screen=No Clipping clip.title=Set Clipping clip.width=Chieu rong close=Dong close.prompt=Ban co that su muon thoat khoi chuong trinh? close.title=Ket thuc color.type.invisible=An color.type.normal=Binh thuong color.type.thick=Day color.type.thin=Mong coloreditor.blue=Xanh duong coloreditor.color=Mau sac coloreditor.green=Xanh la cay coloreditor.red=Do coloreditor.title=Chinh sua mau sac colors.background=Mau nen colors.black=Den colors.blue=Xanh duong colors.brown=Nau colors.color0=Mau 1 (Den) colors.color1=Mau 2 (Xanh la cay) colors.color2=Mau 3 (Xanh duong) colors.color3=Mau 4 (Nau) colors.color4=Mau 5 (Xanh lam) colors.color5=Mau 6 (Do) colors.cyan=Xanh lam colors.default=Su dung mau mac dinh colors.green=Xanh la cay colors.red=Do colors.select=Tuy chon colors.target=Target comment.cancel=Huy bo comment.close=Dong comment.set=Thiet lap comment.title=Ghi chu configure.prompt=Nhap vao ten trinh duyet Web va dia chi trang web cua chuong trinh configure.title=Thiet lap trinh duyet Web constructiondisplay.all=Tat ca doi tuong constructiondisplay.angles=Goc constructiondisplay.circles=Hinh tron constructiondisplay.copy=Sao chep toi bo nho tam constructiondisplay.delete=Xoa doi tuong constructiondisplay.edit=Chinh sua doi tuong constructiondisplay.editconditions=Chinh sua co dieu kien constructiondisplay.expressions=Bieu thuc constructiondisplay.hide=An/Hien doi tuong constructiondisplay.invalid=Doi tuong khong hop le constructiondisplay.lines=Duong thang constructiondisplay.other=Nhung doi tuong khac constructiondisplay.points=Diem constructiondisplay.select=Tuy chon constructiondisplay.sorted=Sap xep doi tuong theo thu tu dung hinh constructiondisplay.superhide=Sieu an constructiondisplay.title=Dung hinh constructiondisplay.visible=Khong hien thi doi tuong an date=Build definemacro.comment=Ghi chu trong Macro definemacro.invisible=An thanh cong definemacro.name=Ten definemacro.nomacro=Khong the chay Macro! definemacro.noparams=Tham so can thiet cho Macro! definemacro.parameters=Dau nhac tham so("=ten") definemacro.promptfor=Dau nhac thay the cho definemacro.targetsonly=An su dung hinh definemacro.title=Dinh nghia Macro digits.angles=Goc digits.edit=Chinh sua digits.lengths=Hien thi digits.title=Thiet lap hien thi phan thap phan done=Dung! edit.Title=Thuoc tinh edit.alias=Ten hieu edit.angle.displaysize=Hien thi do lon edit.angle.large=Lon edit.angle.length=Do lon edit.angle.normal=Trung binh edit.angle.small=Nho edit.angle.title=Chinh sua goc edit.area.area=Pham vi edit.area.back=Trong hinh nen edit.area.title=Chinh sua hinh da giac edit.cancel=Huy bo edit.circle.bounds=Hien thi cung edit.circle.length=Ban kinh edit.circle.partial=Hien thi edit.circle.range=Thiet lap cung... edit.circle.title=Chinh sua hinh tron edit.color=Mau sac edit.discrete=Roi rac edit.equation=Phuong trinh edit.expression=Bieu thuc edit.expression.prompt=Loi giai thich edit.expression.slider=Hien thi con truot edit.expression.title=Chinh sua bieu thuc edit.fixed=Co dinh vi tri edit.fixedangle.set=Thiet lap kich thuoc edit.fixedcircle.set=Thiet lap do lon edit.function.center=Ham so trung voi truc x edit.function.free=Release Center edit.function.title=Ham so hoac duong cong edit.hidden=An edit.intersection.alternate=Co the luan phien edit.line.invisible=An edit.line.normal=Binh thuong edit.line.thick=Day edit.line.thin=Mong edit.line.title=Chinh sua edit.line.type=Kieu edit.name=Ten edit.ok=Dong y edit.plumb.restricted=Gioi han edit.point.away=Xa edit.point.bound=Thuoc doi tuong edit.point.close=Close to edit.point.colortype=Day edit.point.free=Free edit.point.intersection=Tach ra tu` edit.point.showvalue=Hien thi toa do edit.point.title=Chinh sua diem edit.point.type=Kieu edit.point.x=x edit.point.y=y edit.segment.length=Do dai edit.segment.showvalue=Hien thi do dai edit.showname=Hien thi ten edit.text=Ghi chu edit.text.settings=Tuy chon edit.text.title=Thiet lap ghi chu edit.track.dmin=Minimal step (default 0.001) edit.unit=Don vi editconditionals.background=Hinh nen editconditionals.hidden=An editconditionals.showname=Hien thi ten editconditionals.showvalue=Hien thi gia tri editconditionals.solid=Not Transparent editconditionals.superhidden=An thanh cong editconditionals.title=Chinh sua co dieu kien editconditionals.visible=Binh thuong editconditionals.z=Z-Buffer Value editrun.load=Mieu ta khac editrun.run=Luu va chay editrun.title=Chinh sua mieu ta cach dung hinh error.depends=Doi tuong % phu thuoc vao doi tuong hien hanh error.fixedsegment=Khong the co dinh doan thang nay! error.image=Image not in same folder as construction? error.objecttracker.depends=The point is bound to another object! error.setaway=This point is not defined before the intersection! exception.animate=Thong so chay hieu ung khong hop le! exception.boolean=Boolean Value must be true of false! exception.bracket=Thieu dau dong ngoac! exception.brackets=Dau ngoac khong hop le! exception.canfix=Doi tuong nay khong the co dinh! exception.clipboardcopy=Sao chep khong thanh cong! exception.color=Mau sac khong hop le! exception.colortype=Do day khong hop le! exception.depends=Doi tuong % phu thuoc vao doi tuong hien hanh exception.dot=Two dots in number! exception.double=Name is not unique! exception.elementary=Phan tu khong hop le trong bieu thuc! exception.expression=Bieu thuc khong hop le! exception.fix=Gia tri khong hop le! exception.function=Ham so khong hop le! exception.job=Thong so tinh toan khong hop le! exception.macro=Thong so macro khong hop le! exception.macroparameter=Thong so Macro khong hop le! exception.macrotarget=Illegal Macro Target! exception.name=Thieu ten! exception.nodigit=No digit found in number! exception.notfound=Doi tuong khong the thiet lap hoac chua duoc dinh nghia! exception.novalue=Gia tri khong hop le! exception.nparams=Thong so khong hop le cua tham so! exception.parameter=Thong so cua ham khong hop le! exception.parameters=Thong so khong hop le! exception.printsize=Trang giay nay qua nho de dung hinh! exception.prompt=Illegal prompt oject! exception.prompt.parameter=Prompt object may not be a parameter! exception.quotes=Closing quotes missing! exception.superfluous=Bieu thuc khong hop le! exception.track=Illegal Track Parameters! exception.type=Kieu hien thi diem khong hop le! exception.value=Gia tri khong hop le! export.3D=Duong vien export.appletcolor=Use for applet background export.background=Save defined Background export.backgroundcolor=Use for page background export.breaks=Xem lai tai nhung diem dung export.codebase=Codebase export.color=Mau sac export.colors=Luu mau sac dinh nghia export.comment=Luu ghi chu export.digits=Luu ky so export.file=Construction File export.full=Duong vien, bieu tuong va trang thai export.height=Chieu cao export.icons=Duong vien va bieu tuong export.jar=Tap tin Jar export.job=Display as Assignment export.jumpsol=Jump to Solution export.linksol=Link to Solution export.nonvisual=Duong vien, Icons va Duong thang bat dau export.pagetitle=Tieu de cua trang export.plain=Don gian export.popup=Hien thi thanh Menu export.restrictedmove=Han che su di chuyen export.savefirst=Tap tin nay khong the luu! export.savesol=Save Solution File export.setcolor=Chon mau sac export.setsize=Get Size export.signature=Created with C.a.R. by R. Grothmann export.soltext=Solution export.solution=Solution File export.style=Applet Style export.stylesheet=Tap tin kieu CSS export.title=Xuat ra thanh dang tap tin HTML export.track=Track Point export.width=Chieu rong export.zoom=Phong to / thu nho voi chuot expression.value=Gia tri false=Sai file.exists.overwrite=Tap tin dang ton tai! Ban co muon thay doi tren tap tin nay? file.exists.title=Tap tin dang ton tai filedialog.backgroundload=Tai hinh nen filedialog.backgroundload.action=Tai filedialog.htmlsave=Luu thanh dang HTML filedialog.htmlsave.action=Luu filedialog.imageload=Tai hinh filedialog.imageload.action=Tai filedialog.open=Mo filedialog.open.action=Mo filedialog.saveas=Luu voi ten khac... filedialog.saveas.action=Luu function=restrict.short=restrict function.acute=Goc nhon function.acute.short=Goc nhon function.back=Hinh nen function.back.short=Quay lai function.color=Mau sac function.color.short=Mau sac function.dvar=Step function.fill=Fill function.fill.short=fill function.hide=An function.hide.short=An function.obtuse=Goc tu function.obtuse.short=Goc tu function.partial=Partial function.partial.short=part function.rename=Ten function.rename.short=Ten function.solid=Solid function.solid.short=solid function.thickness=Day function.thickness.short=Day function.type=Kieu function.type.short=Kieu function.value=Gia tri function.value.short=Gia tri function.var=Bien so function.varmax=Den function.varmin=Tu function.window=Cua so function.window.short=Cua so function.x=Gia tri cua x function.y=Gia tri cua y help=Tro giup help.error=Khong the mo tap tin tro giup! help.file=schoolgeometry.txt help.title=Tro giup homefile=index.html homepage=http://www.z-u-l.de/ iconbar.showseparators=Hien thi dang phan cat iconedit.showseparators=Hien thi dang phan cat iconedit.title=Chinh sua thanh cong cu iconedit.twobars=Hien thi day du thanh cong cu iconhelp.allback=To the start iconhelp.allforward=To the end iconhelp.angle=Goc (a) iconhelp.angle?=Do lon iconhelp.anglereduce=Don't show angle ray iconhelp.animate=Hieu ung (") iconhelp.animatebreak=Animate breakpoints iconhelp.area=Hinh da giac (0) iconhelp.arrow=Tao doan thang theo dang hinh mui ten (Ctrl-F11) iconhelp.back=Xoa doi tuong cuoi (<-) iconhelp.bold=Hien thi font chu dam iconhelp.boundedpoint=Diem thuoc doi tuong (5)+Shift: Khong co dinh doi tuong iconhelp.chord=Hien thi doan thang iconhelp.circle=Hinh tron (c) iconhelp.circle3=Hinh tron tu 3 diem (3) iconhelp.close=Dong iconhelp.color=Thiet lap mau sac mac dinh cua doi tuong (Ctrl-1,2,3,4) iconhelp.color?=Mau sac iconhelp.comment=Hien thi va chinh sua ghi chu (F10) iconhelp.control.edit=Chinh sua doi tuong cuoi iconhelp.control.hide=An ban sao iconhelp.control.runmacro=Chay lai Macro cuoi iconhelp.defaults=Thiet lap mac dinh iconhelp.delete=Xoa doi tuong va doi tuong con cua no (Del) iconhelp.draw=Ve voi chuot iconhelp.edit=Chinh sua doi tuong (e)+Shift: Chinh sua nhieu doi tuong+Ctrl: Chinh sua doi tuong cuoi iconhelp.expression=Bieu thuc so hoc (x) iconhelp.fastback=Quay lai nhanh iconhelp.fastforward=Tien toi nhanh iconhelp.filled=Filled object iconhelp.fixedangle=Goc voi do lon co dinh (.) iconhelp.fixedcircle=Hinh tron voi ban kinh co dinh (,) iconhelp.fixedsegment=Doan thang voi do dai co dinh (#) iconhelp.function=Tao ham so iconhelp.grab=Huy bo hinh nen iconhelp.grid=Hien thi he truc toa do - dang luoi (F12) iconhelp.hidden=Hien / An doi tuong (F9) iconhelp.hide=An doi tuong (h) iconhelp.image=Tai hinh (_) iconhelp.indicate=Xem truoc ket qua dung hinh iconhelp.info=Noi dung tro giup iconhelp.intersection=Giao diem (i) iconhelp.inverse=Goc doi xung iconhelp.isback=Draws in background iconhelp.large=Hien thi font chu lon iconhelp.line=Duong thang (g) iconhelp.load=Mo tap tin... (Ctrl-o) iconhelp.longnames=Hien thi ten day du cua doi tuong (Ctrl-F8) iconhelp.macro=Thiet lap thong so Macro, muc dich va dinh nghia (7,8,Ctrl-5) iconhelp.macro0=Thiet lap thong so Macro, muc dich va dinh nghia iconhelp.midpoint=Trung diem (4) iconhelp.move=Di chuyen diem (m)+Ctrl(Diem): Hien thi vi tri ban dau cua diem+Ctrl: Di chuyen doi tuong co dinh+Shift: Di chuyen nhieu doi tuong iconhelp.new=Tao moi (Ctrl-n) iconhelp.nextbreak=Jump to next break iconhelp.nohelp=Phan nay khong co trong tro giup! iconhelp.noindicate=Do not indicate objects under mouse iconhelp.objecttracker=Automatic track of a point or a line (o)+Strg: Keep Track (Shift-Enter) iconhelp.obtuse=Tao goc lon hon 1800 (Ctrl-F12) iconhelp.oneback=Quay lai iconhelp.oneforward=Tien toi iconhelp.parallel=Duong thang song song (1) iconhelp.partial=Hien thi mac dinh 1 phan hinh tron (Ctrl-F9) iconhelp.plines=Hien thi mac dinh 1 phan duong thang (Ctrl-F10) iconhelp.plumb=Duong thang vuong goc (2) iconhelp.point=Diem (p) iconhelp.qchoice=Show dialog for object selection iconhelp.qintersection=Ask for intersections iconhelp.qpointon=Ask to create point on object iconhelp.quadric=Duong Conic di qua 5 diem ($) iconhelp.ray=Tia (r) iconhelp.rename=Doi ten moi A,B,C,... iconhelp.replay=Xem lai viec dung hinh iconhelp.runmacro=Chay Macro (9)+Ctrl: Chay Macro cuoi iconhelp.save=Luu tap tin (Ctrl-s) iconhelp.segment=Doan thang (s) iconhelp.setbreak=Toggle break+Shift: Hidden breakpoint iconhelp.showcolor=Mau sac doi tuong (Alt-1,2,3,4) iconhelp.showname=Hien thi ten mac dinh cua doi tuong (Ctrl-F6) iconhelp.showvalue=Hien thi toa do cua doi tuong (Ctrl-F7) iconhelp.solid=Do not use transparency by default iconhelp.text=Ghi chu tren nhieu dong (b) iconhelp.thickness=Thiet lap muc do day mong cho doi tuong (Alt-5,6,7) iconhelp.thickness0=Mong iconhelp.thickness?=Day iconhelp.tracker=Track a point or a line (t) iconhelp.twolines=Hien thi day du thanh cong cu iconhelp.type=Thiet lap kieu hien thi diem (Ctrl-5,6,7,8,9,0) iconhelp.type0=Thiet lap kieu hien thi diem iconhelp.type?=Kieu diem iconhelp.undo=Huy bo thao tac cuoi vua thuc hien (Ctrl-z) iconhelp.visual=Toggle visual construction mode iconhelp.zoom=Phong to / thu nho voi chuot (%) info.back=Quay lai info.noresults=Chuoi khong the thiet lap! info.notfound=Chu de khong the thiet lap! info.related=Nhung chu de co lien quan info.search=Tim kiem info.searchresults=- Ket qua tim kiem - info.select=- Tuy chon - info.start=Bat dau info.title=Noi dung tro giup jobcomment.title=Assignment language.prompt=Ngon ngu bat dau khi chay chuong tring language.title=Thiet lap ngon ngu latexsettings.boundingbox=Create Bounding box bb-file latexsettings.dollar=LaTeX does $...$ latexsettings.doubledollar=LaTeX does $$...$$ latexsettings.fullpath=Duong dan cua tap tin latexsettings.latexinput=Tao tap tin LaTeX latexsettings.nodollar=LaTeX does all other strings latexsettings.title=Setup LaTeX export load=Tai loading=Dang tai, vui long cho! macro.prompt.illegal=Gia tri khong hop le! macro.prompt.prompt=Nh\u1eadp 1 gia tri v`o tham so macro.prompt.title=Parameter Prompt macro.replace=Thay the Macro: macro.replace.all=Tat ca macro.replace.title=Macro duoc thay the macro.usage=Wrong use of macro (see tips)! menu.actions=Chinh sua menu.actions.angles=Goc menu.actions.circles=Hinh tron menu.actions.complex=Nhung cong cu nang cao menu.actions.decorative=Nhung doi tuong phu menu.actions.elementary=Nhung cong cu co ban menu.actions.lines=Duong thang menu.actions.move=Di chuyen menu.actions.points=Diem menu.background=Hinh nen menu.background.center=Canh giua hinh nen menu.background.clear=Xoa bo hinh nen menu.background.grab=Hinh nen hien tai menu.background.load=Tai hinh nen... menu.background.tile=Hien thi dang xep ke nhau menu.background.usesize=Tro lai kich thuoc ban dau cua hinh menu.background.usewidth=Dieu chinh chieu cao thich hop menu.bp.animatebreak=Animate Breakpoints menu.bp.clearbreak=Xoa tat ca diem ngat menu.bp.setbreak=Thiet lap diem ngat menu.bp.sethidingbreak=Thiet lap an diem ngat menu.colors=Thiet lap mau sac menu.file=Tap tin menu.file.alwaysclearmacros=Clear Macros before Loading menu.file.clearmacros=Xoa tat ca Macro menu.file.clip=Clip for Graphics Output... menu.file.compress=Nen tap tin khi luu menu.file.copypng=Luu vao bo nho tam menu.file.editrun=Chinh sua tap tin *.run (Ctrl-x) menu.file.exit=Thoat (Alt-F4) menu.file.includemacros=Tat ca Macro menu.file.load=Mo tap tin... (Ctrl-o) menu.file.loadjob=Mo tap tin *.job,*.jobz... (Ctrl-j) menu.file.loadrun=Mo tap tin *.run... (Ctrl-r) menu.file.new=Tao moi (Ctrl-n) menu.file.print=In... menu.file.print.isoscale=Co dan 1:1 theo cm menu.file.save=Luu tap tin (Ctrl-s) menu.file.saveas=Luu voi ten moi... (Ctrl-a) menu.file.savebmp=Luu thanh dang BMP... menu.file.saveeps=Luu thanh dang EPS... menu.file.savefig=Luu thanh dang FIG... menu.file.savegraphics=Luu tap tin thanh dang... menu.file.savejob=Save as Assignment... (Ctrl-k) menu.file.savepdf=Luu thanh dang PDF menu.file.savepng=Luu tap tin thanh dang PNG menu.file.savesvg=Luu thanh dang SVG... menu.fonts=Font chu menu.grid.options=Tuy chon hien thi dang luoi menu.help=Tro giup menu.help.about=Thong tin chuong trinh menu.help.browser=Xem tro giup va demo tren trang web menu.help.configure=Configure the Browser menu.help.gui=Giao dien nguoi dung menu.help.help=Tro giup (F1) menu.help.info=Muc luc tro giup menu.help.interactive=Descriptive Constructions menu.help.macros=About Macros menu.help.text=Tro giup nhanh menu.help.tips=Mot vai thu thuat menu.help.tools=The Tools menu.help.welcome=Thong tin ve phien ban hien hanh menu.macros=Macro menu.moresettings=Thiet lap menu.options=Tuy chon menu.options.all=Tat ca menu.options.arrow=Tao doan thang theo dang hinh mui ten (Ctrl-F11) menu.options.back=Xoa doi tuong cuoi (<-) menu.options.boldfont=Font chu dam menu.options.cleardraw=Huy bo thao tac ve (Esc) menu.options.comment=Chinh sua ghi cu (F10) menu.options.constructiondisplay=Hien thi mo ta menu.options.defaultcolor=Mau sac mac dinh menu.options.defaultthickness=Do day mac dinh menu.options.defaulttype=Kieu diem mac dinh menu.options.editicons=Chinh sua thanh cong cu menu.options.editlast=Chinh sua doi tuong cuoi menu.options.export=Thiet lap hien thi menu.options.exportsettings=Nhung thiet lap danh rieng... menu.options.finegrid=Hien thi he truc toa do menu.options.function=Tao ham so menu.options.grid=Hien thi he truc toa do - dang luoi (F12) menu.options.hidden=Hien / An nhung doi tuong an menu.options.hideduplicates=An ban sao cua doi tuong menu.options.largefont=Kich thuoc font lon menu.options.leftsnap=Snap with Left Button Drag menu.options.longnames=Hien thi ten day du cua doi tuong menu.options.minfontsize=Kich thuoc font nho menu.options.minpointsize=Kich thuoc diem nho menu.options.obtuse=Tao goc lon hon 1800 (Ctrl-F12) menu.options.other=Thiet lap menu.options.partial=Tao hinh tron mac dinh hien thi 1 phan (Ctrl-F9) menu.options.plines=Tao duong thang mac dinh hien thi 1 phan (Ctrl-F10) menu.options.printscalepreview=Xem truoc khi in (Ctrl-F3) menu.options.printscaler=Thiet lap kich thuoc... menu.options.restricted=Gioi han giao diem menu.options.setdigits=Thiet lap hien thi phan thap phan menu.options.setgrid=Set Grid Width... menu.options.showcolor=Hien thi mau sac menu.options.shownames=Hien thi ten doi tuong (Ctrl-F6) menu.options.showvalues=Hien thi gia tri doi tuong (Ctrl-F7) menu.options.sizes=Thiet lap kich thuoc... menu.options.solid=Do not use Transparency menu.options.track=Keep Track (Shift-Enter) menu.options.undo=Huy bo thao tac xoa vua thuc hien (Ctrl-z) menu.options.visual=Chuc nang tao doi tuong bang chuot menu.settings=Nhung thiet lap danh rieng menu.settings.autohide=Hide second Intersection Point menu.settings.backups=Luu tru du phong menu.settings.beginner=Giao dien mac dinh menu.settings.bitmapbackground=Su dung mau nen trong Bitmaps menu.settings.boundingbox=Create Bounding Box (bb) file menu.settings.choice=Show selection Dialog for Objects menu.settings.constructiondisplay=Hien thi dang sach doi tuong (F11) menu.settings.doubleclick=Nhap 2 lan phai chuot de tao Macro menu.settings.filedialog=Replace system file dialog menu.settings.font.bold=Font chu dam menu.settings.font.default=Font chu mac dinh menu.settings.font.large=Font chu lon menu.settings.fullicons=Use two full Icon Bars menu.settings.iconbartop=Hien thi thanh cong cu nam phia tren menu.settings.indicate=Hien thi nhung doi tuong tu dong phat sinh menu.settings.indicate.simple=Khong hien thi truoc ket qua hinh ve menu.settings.intersection=Ask before creating an Intersection menu.settings.language=Thiet lap ngon ngu menu.settings.minfontsize=Kich thuoc font chu toi thieu menu.settings.minpointsize=Kich thuoc diem toi thieu menu.settings.minwidth=Do day duong thang la 1 menu.settings.movefixname=Hien thi gia tri doi tuong co dinh khi di chuyen menu.settings.movename=Hien thi gia tri doi tuong khi di chuyen menu.settings.oldicons=Hien thi dang bieu tuong cu menu.settings.pointon=Ask before creating a Point on an Object menu.settings.restricted=Nhung chuc nang don gian menu.settings.scalepdf=Scale PDF and EPS output 1:1 menu.settings.showtips=Hien thi chu thich cong cu menu.settings.simplegraphics=Giam do min cho hinh ve menu.settings.smallicons=Hien thi dang bieu tuong nho menu.settings.smartboard=Smartboard Mode menu.settings.squarepoints=Draw points always as squares menu.settings.sure=Confirm before Loading and Closing menu.settings.utf=Su dung ma UTF-8 menu.special=Special menu.special.break=Diem ngat menu.special.definemacro=Dinh nghia 1 Macro (Ctrl-F5) menu.special.deletemacros=Xoa Macro... menu.special.export=Luu tap tin thanh dang HTML... (Ctrl-e) menu.special.exporttemplate=Xuat tap tin HTML thanh dang mau menu.special.jobcomment=Set Assignment Text... (F8) menu.special.loadmacros=Tai Macro... menu.special.renamemacro=Doi ten Macro... menu.special.replay=Xem lai cach dung hinh do menu.special.restricticons=Gioi han thanh cong cu menu.special.runmacro=Chay 1 Macro... (F5) menu.special.savemacros=Luu Macro... menu.special.testjob=Test this Assignment (Ctrl-F1) menu.zoom=Phong to / Thu nho menu.zoom.down=Di chuyen xuong duoi (Nut di chuyen xuong) menu.zoom.in=Phong to (+) menu.zoom.left=Di chuyen qua ben trai (Nut di chuyen qua trai ) menu.zoom.out=Thu nho (-) menu.zoom.right=Di chuyen qua ben phai (Nut di chuyen qua phai) menu.zoom.up=Di chuyen len tren (Nut di chuyen len tren) message=Thong bao message.angle.first=Goc: Diem thu nhat? message.angle.root=Goc: Dinh goc ? message.angle.second=Goc: Diem thu hai (Shift: Co dinh kich thuoc)? message.animatebreak=Animate breakpoints: click to stop (shift left/right for speed)! message.animator.point=Hieu ung: Diem muon chay hieu ung? message.animator.running=Hieu ung: Chay hieu ung (click to stop)! message.animator.segment=Hieu ung: Chon hinh tron hoac doan thang? message.area=Hinh da giac: Dinh? message.boundedpoint=Diem thuoc doi tuong: Chon doi tuong ma diem thuoc (hinh tron hoac duong thang) (Shift: Khong co dinh diem khi di chuyen doi tuong)? message.circle.midpoint=Hinh tron: Tam? message.circle.radius=Hinh tron: Diem thuoc hinh tron (Shift: Co dinh ban kinh)? message.circle3.first=Hinh tron: Ban kinh thu nhat? message.circle3.midpoint=Hinh tron: Tam? message.circle3.second=Hinh tron: Ban kinh thu hai? message.delete=Xoa: Chon doi tuong can xoa! message.draw=Ve bang chuot (Nhan ESC de xoa thao tac ve) message.edit=Chinh sua doi tuong: Chon doi tuong can chinh sua (shift: Chinh sua nhieu doi tuong, ctrl: Chinh sua co dieu kien)? message.expression=Arithmetic Expression: Select a place! message.fixedangle.first=Goc voi do lon co dinh: Diem thu nhat? message.fixedangle.root=Goc voi do lon co dinh: Dinh? message.fixedangle.second=Goc voi do lon co dinh: Diem thu hai? message.fixedcircle.midpoint=Hinh tron voi do lon co dinh: Tam? message.fixedcircle.radius=Hinh tron voi do lon co dinh: Ban kinh? message.fixedsegment.first=Doan thang voi do dai co dinh: Diem thu nhat? message.fixedsegment.second=Doan thang voi do dai co dinh: Diem thu hai? message.hide=An / Hien: Chon doi tuong can an / hien! message.image=Image anchor point % message.image.last=Last image anchor point (or choose selected point) message.intersection.first=Giao diem: Doi tuong thu nhat? message.intersection.second=Giao diem: Doi tuong thu hai? message.label.move=Di chuyen nhan ten: Nhan ten can di chuyen! message.label.select=Di chuyen nhan ten: Chon nhan ten ma ban muon di chuyen! message.line.first=Duong thang: Diem thu nhat? message.line.second=Duong thang: Diem thu hai? message.midpoint.first=Trung diem: Diem thu nhat? message.midpoint.second=Trung diem: Diem thu hai? message.move.move=Di chuyen: Di chuyen diem\ message.move.select=Di chuyen(m)): Chon diem can di chuyen (Shift: Di chuyen nhieu doi tuong. / Ctrl+(Diem): Hien thi vi tri ban dau cua doi tuong / Ctrl: Di chuyen hinh tron co dinh) message.objecttracker.move=Autotrack: Move the point! message.objecttracker.object=Autotrack: Line or circle, point on object, slider? message.objecttracker.select=Autotrack: Point or line to track (shift: more)? message.objecttracker.selectanypoint=Autotrack: Any other point to move? message.objecttracker.selectpoint=Autotrack: Point to be moved on line or circle? message.objecttracker.start=Autotrack: Bat dau chay hieu ung! message.objecttracker.stop=Autotrack: Click to stop (shift left/right for speed)! message.parallel.first=Song song: Doi tuong can lay song song? message.parallel.second=Song song: Diem thuoc duong thang song song voi doi tuong cho truoc? message.parameters=Thong so Macro: Nhung doi tuong can lay thong so? message.plumb.first=Vuong goc: Doi tuong can lay vuong goc? message.plumb.second=Vuong goc: Diem thuoc duong thang vuong goc voi doi tuong cho truoc? message.point=Diem: Chon 1 diem (Shift: Co dinh diem)! message.quadric=Duong Conic: Diem thu message.range.first=Set range: Draw the circle from which point... message.range.second=Set range: ...to which point? message.ray.first=Tia: Diem goc? message.ray.second=Tia: Diem thu hai thuoc tia? message.rename=Chon doi tuong can thay doi ten ! message.reorder=Sap xep doi tuong: Chon doi tuong sap xep! message.runmacro=Macro %: %. % - % message.runmacro.fixes=(Shift: De co dinh) message.runmacro.return=(Nhan SPACE tuy chon %) message.savejob.first=Define Assignment: Last displayed object? message.savejob.second=Define Assignment: Target object (shift: don't check)? message.savejob.third=Define Assignment: Further objects to be displayed? message.saving=Vui long cho! message.segment.first=Doan thang: Diem thu nhat? message.segment.second=Doan thang: Diem thu hai (Shift: Co dinh chieu dai doan thang)? message.setaway.away=Keep the intersection away from which point? message.setaway.close=Keep the intersection close to which point? message.setcenter=Chon diem nam giua! message.setfixedangle.first=Thiet lap goc co dinh: Diem thu nhat? message.setfixedangle.second=Thiet lap goc co dinh: Diem thu hai? message.setfixedangle.third=Thiet lap goc co dinh: Diem thu ba? message.setfixedcircle.first=Thiet lap hinh tron co dinh: Diem thu nhat? message.setfixedcircle.second=Thiet lap hinh tron co dinh: Diem thu hai? message.targets=Macro Targets: Target objects? message.text=Ghi chu: Chon vi tri dat ghi chu! message.tracker.move=Track: Move the point! message.tracker.select=Track: Point or line to track (shift: more)? message.tracker.selectpoint=Track: Point to move? message.zoom=Di chuyen nut cuon tren chuot de phong to / thu nho minfontsize.prompt=Kich thuoc font nho nhat (Mac dinh: 12) minlinesize.prompt=Do day nho nhat cua duong thang (Mac dinh: 1) minpointsize.prompt=Kich thuoc nho nhat cua diem (Mac dinh: 3) myfiledialog.back=Quay lai myfiledialog.dir=Muc luc myfiledialog.file=Tap tin myfiledialog.homedir=Tap tin CaR myfiledialog.mkdir=Soan thao muc luc myfiledialog.oldfiles=Tap tin cu myfiledialog.pattern=Extensions myfiledialog.windowshome=My Documents name.Angle=Goc name.Circle=Hinh tron name.Circle3=Hinh tron name.Expression=Bieu thuc name.FixedAngle=Goc co dinh name.Intersection=Giao diem name.Line=Duong thang name.Midpoint=Trung diem name.OtherIntersection=Giao diem name.Parallel=Duong thang song song name.Plumb=Duong thang vuong goc name.Point=Diem name.PointOn=Doi tuong diem name.Polygon=Hinh da giac name.Quadric=Duong Conic name.Ray=Tia name.Segment=Doan thang name.TwoPointLine=Duong thang di qua 2 diem name.short.Angle=a name.short.Circle=c name.short.Circle3=c name.short.Expression=E name.short.Function=f name.short.Intersection=I name.short.Line=l name.short.Midpoint=M name.short.OtherIntersection=I name.short.Parallel=pl name.short.Plumb=p name.short.Point=P name.short.PointOn=OP name.short.Polygon=poly name.short.Quadric=Q name.short.Ray=r name.short.Segment=s name.short.Track=Tr no=Khong objects.angle=Goc objects.animate=Hieu ung objects.area=Hinh da giac objects.boundedpoint=Diem thuoc doi tuong objects.circle=Hinh tron objects.circle3=Hinh tron qua 3 diem objects.definejob=Define an Assignment objects.delete=Xoa doi tuong va doi tuong con cua no objects.draw=Ve voi chuot objects.edit=Chinh sua diem objects.expression=Arithmetic Expression objects.fixedangle=Goc co dinh objects.fixedcircle=Hinh tron voi kich thuoc co dinh objects.fixedsegment=Doan thang voi do dai co dinh objects.hide=An doi tuong objects.image=Tai hinh (_) objects.intersection=Giao diem objects.line=Duong thang objects.midpoint=Trung diem objects.move=Di chuyen diem objects.objecttracker=Track a Point or a Line on an Object objects.parallel=Duong thang song song objects.parameter=Thiet lap thong so Macro objects.plumb=Duong thang vuong goc objects.point=Diem objects.quadric=Duong Conic objects.ray=Tia objects.rename=Thay doi ten... objects.reorder=Sap xep doi tuong objects.runmacro=Chay Macro objects.segment=Doan thang objects.targets=Set Macro Targets objects.text=Ghi chu objects.tracker=Track a Point or a Line objects.zoom=Phong to / Thu nho bang chuot objectsedit.title=Chinh sua thuoc tinh ok=Dong y pattern=*.zir *.job *.xml pattern.bitmap=*.bmp pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.macro=*.mcr pattern.run=*.run point.type.circle=Hinh tron point.type.cross=Dang dau + point.type.dcross=Dang dau x point.type.diamond=Hinh thoi point.type.dot=Dang dau . point.type.square=Hinh vuong popup.empty=--- Macros --- popup.hidden=Hien thi doi tuong an popup.replay=Xem lai cach dung hinh printscaler.aspect=Keep Aspect Ratio printscaler.dpi=Resolution (in dpi, default 300) printscaler.h=Chieu cao (theo pixel) printscaler.height=Chieu cao (theo cm) printscaler.latex=Luu dang LaTeX printscaler.linewidth=Do day duong thang (theo cm , mac dinh 0.02) printscaler.middle=Cut out from screen printscaler.pointsize=Kich thuoc diem (theo cm, mac dinh 0.07) printscaler.preset=Make a Choice printscaler.preset.300dpi=Co gian ra 300DPI printscaler.preset.300dpi12=12 cm width with 300 DPI printscaler.preset.300dpi16=16 cm Width with 300 DPI printscaler.preset.300dpi6=6 cm Width with 300 DPI printscaler.preset.clip50=Window Size Clipped 50% printscaler.preset.latex10=LaTeX 10pt printscaler.preset.window=Kich thuoc cua so printscaler.presets=Thiet lap so bo printscaler.scale=Scale (relativ to screen) printscaler.screen=300 DPI printscaler.sizes=Nhap gia tri printscaler.textsize=Kich thuoc (theo cm, mac dinh 0.3) printscaler.title=Thiet lap kich thuoc printscaler.w=Chieu rong (theo pixel) printscaler.width=Chieu rong (theo cm) program.date=2006-11 program.name=C.a.R program.version=5.2 prompt.angle==a(,,) prompt.area=A(,,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.function=function(,,,,,) prompt.image=image(,,,) prompt.intersection==I(,) prompt.line==l(,) prompt.midpoint==M(,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.point==P prompt.pointon==P() prompt.quadric=quadric(,,,,) prompt.ray==r(,) prompt.segment==s(,) question.again=HOi lai lan sau. question.intersection=Tao giao diem? question.pointon=Tao diem thuoc doi tuong do? question.title=Cau hoi renamemacro.name=Ten moi cua Macro renamemacro.title=Doi ten Macro reorder.message=Chen vao phia sau reorder.notfound=Doi tuong khong hop le! reorder.title=Push objects reorder.warning=Could not do that! replay.title=Xem lai save=Luu savequestion.qsave=Ban co muon luu tap tin? savequestion.title=Luu select.all=Tat ca select.cancel=Huy bo select.comment=Hien thi ghi chu select.comment.title=Ghi chu Macro select.ok=Dong y select.title=Tuy chon selectionsize.prompt=Tuy chon kich thuoc (mac dinh: 1.5) setgrid.prompt=Nhap vao chieu rong cua luoi setgrid.set=Thiet lap setgrid.title=Grid Width shortcuts.angle=a shortcuts.animate=" shortcuts.area=0 shortcuts.boundedpoint=5 shortcuts.circle=c shortcuts.circle3=3 shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.definejob=6 shortcuts.delete=Del shortcuts.draw=; shortcuts.edit=e shortcuts.expression=x shortcuts.fixedangle=. shortcuts.fixedcircle=, shortcuts.fixedsegment=# shortcuts.hide=h shortcuts.image=_ shortcuts.intersection=i shortcuts.line=g shortcuts.midpoint=4 shortcuts.move=m shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.parameter=7 shortcuts.plumb=2 shortcuts.point=p shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) shortcuts.quadric=$ shortcuts.ray=r shortcuts.rename=: shortcuts.reorder=! shortcuts.runmacro=9 shortcuts.segment=s shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.targets=8 shortcuts.text=b shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) shortcuts.tracker=t shortcuts.zoom=% sizesdialog.title=Kich thuoc sure.delete=Khong luu cac thay doi? sure.macros=Xoa tat ca cac Macro da dinh nghia? sure.title=Are you sure? templateload.open=Load Template templateload.open.action=Mo text.angle=Goc % - % - % text.angle.fixed=Goc % - % - % voi do lon % text.area=Hinh da giac text.boundedpoint=Diem % text.circle=Hinh tron tam % qua % text.circle.fixed=Hinh tron tam % qua % , co ban kinh % text.circle3=Hinh tron tam % voi ban kinh tu % den % text.expression=Bieu thuc "%" tai %, % text.fixedangle=Goc % - % voi do lon % text.fixedcircle=Hinh tron tam %, ban kinh % text.function=Ham so (%,%) text.intersection=Giao diem cua % va % text.line=Duong thang qua % va % text.midpoint=Trung diem cua % va % text.parallel=Duong thang qua % va song song voi % text.plumb=Duong thang qua % va vuong goc voi % text.point= (%,%) text.quadric=Duong Conic qua % text.ray=Tia tu % qua % text.segment=Doan thang tu % den % text.segment.fixed=Doan thang tu % den % va co do dai % text.track=Track of % when % moves on % text.trackof=Track of % when % changes title=School Geometry trackquestion.keep=Keep Track in Construction? trackquestion.title=Keep Track true=Dung version=Phien ban warning.loadbackground=Loi! Khong the tai hinh nen warning.loadmacros=Loi! Khong the tai 1 Macro rong warning.macrodefinition=% dang duoc su dung , nhung no khong co trong Macro warning.nojob=This isn't an Assignment! warning.preview=Khong chay duoc tren Java 1.1 warning.previewframe=Frame larger than window! warning.print=In bi loi! warning.reset=Chuc nang nay se duoc thiet lap sau lan mo chuong trinh ke tiep! yes=Dong y ./src/rene/zirkel/docs/CVS/RevisionCache/ZirkelProperties_nl.properties#1.10000644000175000017500000011012311144764476025521 0ustar yvesyveslanguage=nl_ version=Versie homefile=doc_en/index.html homepage=http://mathsrv.ku-eichstaett.de/MGF/homes/grothmann/java/zirkel/ codepage.help=Cp1252 about.title=Over dit programma about.name=Interactieve meetkunde about.programmed=Geprogrammeerd door title=Interactieve meetkunde close=Sluit ok=OK cancel=Annuleer done=Goed gedaan! message=Boodschap yes=Ja no=Nee abort=Stop true=waar false=vals warning.nojob=Dit is geen toekenning! warning.print=Afdrukken mislukt! warning.reset=Deze optie is pas van kracht als je P.e.L. herstart! question.title=Vraag question.intersection=Dit snijpunt aanmaken? question.pointon=Punt op dit voorwerp aanmaken? colors.black=Zwart colors.blue=Blauw colors.green=Groen colors.brown=Bruin colors.cyan=Cyaan colors.red=Rood objects.point=Punt objects.segment=Lijnstuk objects.line=Rechte objects.ray=Straal objects.circle=Cirkel objects.intersection=Intersectie objects.move=Beweeg punt objects.hide=Verberg voorwerp objects.edit=Wijzig punt objects.tracker=Volg punt of rechte objects.objecttracker=Volg punt of rechte op een voorwerp objects.parallel=Evenwijdige rechte objects.plumb=Loodlijn objects.circle3=Cirkel met straal r en middelpunt M objects.midpoint=Midden objects.quadric=Kegelsnede objects.angle=Hoek objects.boundedpoint=Punt op een voorwerp objects.parameter=Geef macroparameters objects.targets=Geef macrodoelen objects.definejob=Opgave definiren objects.runmacro=Macro uitvoeren objects.delete=Verwijder voorwerp en zijn kinderen objects.reorder=Voorwerpen naar achteren verplaatsen objects.animate=Animatie objects.expression=Wiskundige uitdrukking objects.area=Veelhoek objects.text=Tekst objects.fixedcircle=Cirkel met vaste straal objects.fixedangle=Vaste hoek objects.fixedsegment=Lijnstuk met vaste lengte iconhelp.point=Punt iconhelp.segment=Lijnstuk iconhelp.line=Rechte iconhelp.ray=Straal iconhelp.circle=Cirkel iconhelp.intersection=Intersectie iconhelp.move=Beweeg punt iconhelp.hide=Verberg voorwerp iconhelp.edit=Wijzig voorwerp iconhelp.tracker=Volg punt of rechte iconhelp.objecttracker=Volg punt of rechte automatisch iconhelp.parallel=Evenwijdige rechte iconhelp.plumb=Loodlijn iconhelp.circle3=Cirkel met straal r en middelpunt M iconhelp.midpoint=Midden iconhelp.quadric=Kegelsnede door 5 punten iconhelp.angle=Hoek iconhelp.boundedpoint=Punt op voorwerp iconhelp.hidden=Toon verborgen voorwerpen iconhelp.color=Kleur van het volgend voorwerp iconhelp.type=Type van het volgend punt iconhelp.type0=Type van het volgend punt iconhelp.thickness=Dikte van het volgende voorwerp iconhelp.back=Verwijder laatste voorwerp iconhelp.thickness0=Dikte van het volgend voorwerp iconhelp.partial=Gedeeltelijk zichtbare cirkel iconhelp.plines=Gedeeltelijk zichtbare rechte iconhelp.arrow=Lijnstukken als vectoren iconhelp.showcolor=Toon gekozen kleuren iconhelp.runmacro=Voer macro uit iconhelp.macro=Macro parameters/doelen/definitie iconhelp.expression=Wiskundige uitdrukking iconhelp.showvalue=Toon voorwerpwaarden iconhelp.showname=Toon voorwerpnamen iconhelp.obtuse=Gebruik hoeken groter dan 180 graden iconhelp.solid=Gebruik geen transparantie iconhelp.longnames=Lange voorwerpnamen iconhelp.grid=Toon raster iconhelp.comment=Commentaar iconhelp.defaults=Standaardwaarden iconhelp.macro0=Macro Parameters/doelen/definitie iconhelp.visual=Visuele constructie iconhelp.replay=Toon constructie iconhelp.oneforward=Voorwaarts iconhelp.fastforward=Snel voorwaarts iconhelp.allforward=Naar het einde iconhelp.oneback=Terug iconhelp.fastback=Snel terug iconhelp.allback=Naar het begin iconhelp.close=Sluiten iconhelp.area=Gevulde veelhoek iconhelp.text=Tekst die uit meer delen bestaat iconhelp.fixedcircle=Cirkel met een vaste straal iconhelp.fixedangle=Hoek met een vaste grootte iconhelp.fixedsegment=Lijnstuk met een vaste lengte iconhelp.animate=Animatie van een punt iconhelp.delete=Verwijder het voorwerp en zijn kinderen iconhelp.undo=Maak laatste verwijdering ongedaan iconhelp.nextbreak=Spring naar het volgende rustpunt iconhelp.setbreak=Rustpunt zetten of verwijderen iconhelp.zoom=Zoom met de muis (%) shortcuts.point=p shortcuts.segment=l shortcuts.line=r shortcuts.ray=s shortcuts.circle=c shortcuts.intersection=i shortcuts.move=b shortcuts.hide=v shortcuts.edit=w shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=h shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=a shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) menu.file=Bestand menu.file.new=Nieuwe constructie menu.file.clearmacros=Wis alle macro's menu.file.load=Laad constructie ... (Ctrl-o) menu.file.loadjob=Laad opgave ... (Ctrl-j) menu.file.savejob=Bewaar als opgave ... (Ctrl-k) menu.file.save=Bewaar constructie (Ctrl-s) menu.file.saveas=Bewaar constructie als ... (Ctrl-a) menu.file.includemacros=Bewaar met macro's menu.file.exit=Stop programma (Alt-F4) menu.file.print=Druk af ... menu.file.print.isoscale=Schaal 1:1 in cm menu.file.savebmp=BMP menu.file.savefig=FIG menu.file.loadrun=Laad beschrijvende constructie ... (Ctrl-r) menu.file.editrun=Wijzig beschrijvende constructie ... (Ctrl-x) menu.actions=Acties menu.actions.elementary=Elementaire werktuigen menu.actions.complex=Meer complexe werktuigen menu.actions.fixed=Vaste voorwerpen menu.actions.move=Werktuigen om iets te bewegen menu.actions.decorative=Decoratieve voorwerpen menu.options=Opties menu.options.visual=Visuele modus (Ctrl-F6) menu.options.hidden=Toon verborgen voorwerpen (F9) menu.options.comment=Commentaar (F10) menu.options.constructiondisplay=Beschrijving (F11) menu.options.grid=Toon raster (F12) menu.options.other=Andere instellingen menu.options.setgrid=Rasterbreedte instellen ... menu.options.showcolor=Toon kleur menu.options.defaultcolor=Standaardkleur menu.options.defaultthickness=Standaarddikte menu.options.defaulttype=Standaardpunttype menu.options.all=Alles menu.options.setdigits=Beduidende cijfers instellen menu.options.shownames=Toon voorwerpnamen (Ctrl-F6) menu.options.longnames=Lange voorwerpnamen (Ctrl-F8) menu.options.obtuse=Gebruik hoeken groter dan 180 graden (Ctrl-F12) menu.options.solid=Geen transparantie menu.options.showvalues=Toon voorwerpwaarden (Ctrl-F7) menu.options.partial=Gedeeltelijk zichtbare cirkels (Ctrl-F9) menu.options.plines=Gedeeltelijk zichtbare rechten (Ctrl-F10) menu.options.arrow=Lijnstukken als vectoren (Ctrl-F11) menu.options.editicons=Wijzig werktuigenlijst menu.options.back=Wis laatste voorwerp(<-) menu.options.undo=Maak wissen ongedaan (Ctrl-z) menu.zoom=Zoom menu.zoom.in=In (+) menu.zoom.out=Uit (-) menu.zoom.left=Links (Cursor-Left) menu.zoom.right=Rechts (Cursor-Right) menu.zoom.up=Naar boven (Cursor-Up) menu.zoom.down=Naar beneden (Cursor-Down) menu.macros=Macro's menu.special.definemacro=Definieer macro (Ctrl-F5) menu.special.runmacro=Voer macro uit ... (F5) menu.special.savemacros=Bewaar macro's ... menu.special.loadmacros=Laad macro's ... menu.special.deletemacros=Wis macro's ... menu.special=Speciaal menu.special.testjob=Opgave testen (Ctrl-F1) menu.special.jobcomment=Opgave ... (F8) menu.special.export=HTML Export ... (Ctrl-e) menu.special.replay=Toon constructie menu.help=Help menu.help.about=Over dit programma menu.help.browser=Bekijk help en demo's menu.help.text=Help (tekst) menu.help.configure=Configureer browser menu.help.help=Help (F1) menu.help.macros=Over macro's menu.help.tools=Constructiewerktuigen menu.help.gui=gebruikersinterface menu.help.interactive=Beschrijvende constructies menu.help.tips=Enkele Tips menu.settings=Andere instellingen menu.settings.fullicons=Twee volle werktuiglijsten menu.settings.utf=Gebruik UTF-8 codering menu.settings.autohide=Verberg tweede snijpunt menu.settings.iconbartop=Werktuigenlijst boven constructie menu.settings.showtips=Toon werktuigtips menu.settings.simplegraphics=Eenvoudige grafieken gebruiken menu.settings.sure=Vraag bevestiging voor laden en sluiten menu.settings.pointon=Vraag bevestiging voor een punt op een voorwerp menu.settings.intersection=Vraag bevestiging voor een snijpunt menu.settings.choice=Toon selectiedialoogvenster voor voorwerpen menu.settings.movename=Toon voorwerpwaarden tijdens beweging menu.settings.movefixname=Toon vaste voorwerpwaarden tijdens beweging menu.settings.restricted=Schoolmodus menu.colors=Stel kleuren in colors.default=Standaardkleuren colors.color0=Kleur 1 (Zwart) colors.color1=Kleur 2 (Groen) colors.color2=Kleur 3 (Blauw) colors.color3=Kleur 4 (Bruin) colors.color4=Kleur 5 (Cyaan) colors.color5=Kleur 6 (Rood) colors.background=Achtergrond colors.select=Selecteer colors.target=Doel myfiledialog.dir=Map myfiledialog.file=Bestand myfiledialog.pattern=Patroon filedialog.open=Open filedialog.saveas=Bewaar als ... filedialog.open.action=Open filedialog.saveas.action=Bewaar filedialog.htmlsave=Bewaar HTML filedialog.htmlsave.action=Bewaar pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Bewaar load=Laad abort=Annuleer bound.release=Maak los van voorwerp bound.bind=Maak vast aan voorwerp bound.error=Voorwerp niet gevonden voor snijding! constructiondisplay.edit=Wijzig voorwerp constructiondisplay.copy=Kopieer naar klembord edit.Title=Eigenschappen edit.name=Naam edit.hidden=Verborgen edit.text=Beschrijving edit.fixed=Vast edit.color=Kleur edit.ok=OK edit.cancel=Annuleer edit.showname=Toon naam edit.point.title=Wijzig punt edit.point.type=Type edit.point.x=X edit.point.y=Y edit.point.intersection=Verschillend van edit.point.showvalue=Toon co^rdinaten edit.point.colortype=Dikte edit.point.bound=Op voorwerp edit.point.away=Weg van edit.point.close=In de buurt van edit.point.free=Vrij edit.line.title=Wijzig rechte, straal, lijnstuk edit.line.normal=Normaal edit.line.thick=Dik edit.line.thin=Dun edit.line.type=Type edit.segment.length=Lengte edit.segment.showvalue=Toon Lengte edit.circle.title=Wijzig Cirkel edit.circle.length=Straal edit.circle.partial=Slechts gedeeltelijk zichtbaar edit.circle.range=Stel tekengrenzen in edit.circle.killrange=wis tekengrenzen edit.plumb.restricted=Verboden edit.angle.title=Wijzig hoek edit.angle.length=grootte edit.angle.displaysize=Toon grootte edit.angle.normal=Normaal edit.angle.small=Klein edit.angle.large=Groot edit.expression.title=Wijzig uitdrukking edit.expression=Wiskundige uitdrukking edit.expression.prompt=Beschrijving edit.area.title=Wijzig veelhoek edit.area.back=In de achtergrond export.title=HTML Export export.pagetitle=Paginatitel export.width=Breedte export.height=Hoogte export.jar=Jar bestand export.comment=Bewaar commentaar export.file=Constructiebestand export.job=Toon als opgave export.color=Kleur export.backgroundcolor=Gebruik als achtergrond export.appletcolor=Gebruik als appletachtergrond export.plain=Gewoon export.3D=Rand export.breaks=Weergave met rustpunten export.icons=Rand en iconen export.full=Rand, iconen en Status export.nonvisual=Rand, iconen en invoerlijn export.style=Appletstijl export.setcolor=Kies kleur export.savefirst=Bestand moet eerst bewaard worden! export.soltext=Oplossing export.stylesheet=CSS stijlbestand export.solution=Oplossingbestand export.jumpsol=Spring naar oplossing export.linksol=Link naar oplossing export.savesol=Bewaar oplossingbestand export.track=Volg punt export.digits=Bewaar aantal beduidende cijfers export.setsize=Geef grootte export.signature=Gemaakt met P.e.L. export.colors=Bewaar constructiekleuren export.background=Bewaar achtergrond help.title=Help help.error=Kan het help bestand niet vinden! help.file=schoolgeometry.txt coloreditor.title=Wijzig kleur coloreditor.red=Rood coloreditor.green=Groen coloreditor.blue=Blauw coloreditor.color=Uw kleur comment.title=Construction Commentaar comment.set=Instellen comment.cancel=Annuleer comment.close=Sluiten iconedit.title=Wijzig werktuiglijst iconedit.twobars=Werktuiglijst heeft twee rijen jobcomment.title=Opgave select.title=Selectie select.ok=OK select.cancel=Annuleer select.comment=Toon commentaar select.all=Alle message.circle.midpoint=Cirkel: Middelpunt? message.circle.radius=Cirkel: punt op de cirkel (shift: vaste straal)? message.fixedcircle.midpoint=Cirkel met vaste straal: middelpunt? message.fixedcircle.radius=Cirkel met vaste straal: straal? message.edit=Wijzig: voorwerp? message.line.first=Rechte: eerste punt? message.line.second=Rechte: tweede punt? message.ray.first=Straal: beginpunt? message.ray.second=Straal: tweede punt? message.move.select=Bewegen: kies een punt! message.move.move=Bewegen: beweeg het punt? message.point=Punt: plaats (shift: vast)! message.segment.first=Lijnstuk: eerste punt? message.segment.second=Lijnstuk: tweede punt (shift: vaste lengte)? message.fixedsegment.first=Lijnstuk met vaste lengte: eerste punt? message.fixedsegment.second=Lijnstuk met vaste lengte: klik ergens! message.intersection.first=Intersectie: eerste voorwerp of het snijpunt? message.intersection.second=Intersectie: tweede voorwerp? message.hide=Verbergen/Tonen: Kies een voorwerp! message.tracker.select=Volgen: punt of rechte om te volgen (shift: meer punten)? message.tracker.selectpoint=Volgen: punt om te bewegen ? message.tracker.move=Volgen: Beweeg het punt! message.objecttracker.select=Automatisch volgen: punt om te volgen (shift: meer punten)? message.objecttracker.object=Automatisch volgen: rechte of cirkel? message.objecttracker.selectpoint=Automatisch volgen: punt dat bewogen wordt? message.objecttracker.selectanypoint=Automatisch volgen: andere punten om te bewegen? message.objecttracker.move=Automatisch volgen: beweeg het punt! message.objecttracker.start=Automatisch volgen: start de animatie! message.objecttracker.stop=Automatisch volgen: stop de animatie! message.parallel.first=Evenwijdige: rechte? message.parallel.second=Evenwijdige: punt? message.plumb.first=Loodlijn: rechte? message.plumb.second=Loodlijn: punt? message.circle3.first=Cirkel: beginpunt straal? message.circle3.second=Cirkel: eindpunt straal? message.circle3.midpoint=Cirkel: middelpunt? message.midpoint.first=Midden: eerste punt? message.midpoint.second=Midden: tweede punt? message.quadric=Kegelsnede: punt nummer message.angle.first=Hoek: beginpunt? message.angle.root=Hoek: hoekpunt? message.angle.second=Hoek: eindpunt (shift: vaste grootte)? message.fixedangle.first=Hoek met vaste grootte: beginpunt? message.fixedangle.root=Hoek met vaste grootte: basispunt? message.fixedangle.second=Hoek met vaste grootte: hoek? message.label.select=Beweeg tekst: tekst? message.label.move=Beweeg tekst: beweeg de tekst! message.boundedpoint=punt op voorwerp: cirkel of rechte (shift: vast)? message.parameters=Macro-parameters: parametervoorwerpen? message.targets=Macro-doelen: doelvoorwerpen? message.savejob.first=Definieer opgave: laatst getoonde voorwerp? message.savejob.second=Definieer opgave: doelvoorwerp (shift: niet testen)? message.savejob.third=Definieer opgave: meer voorwerpen tonen? message.runmacro=Macro %: %. (Typ %) % message.runmacro.return=(Spatiebalk kiest %) message.runmacro.fixes=(Shift maakt parameter vast) message.delete=Verwijderen: Selecteer voorwerp! message.reorder=Voorwerp naar achteren: Selecteer voorwerp! message.expression=Wiskundige uitdrukking: Select plaats! message.area=Opgevulde veelhoek: hoekpunt? message.text=Tekst: plaats? message.animator.point=Animatie: geanimeerd punt? message.animator.segment=Animatie: cirkel of lijnstuk? message.animator.running=Animatie: loopt! message.range.first=Teken cirkel vanaf dit punt ... message.range.second=... tot dit punt! message.setaway.away=Weg van dit punt! message.setaway.close=In de buurt van dit punt! objectsedit.title=Wijzig eigenschappen point.type.square=Vierkant point.type.diamond=Ruit point.type.circle=Cirkel point.type.dot=Punt color.type.normal=Normaal color.type.thick=Dik color.type.thin=Dun text.point=Punt op %, % text.line=Rechte door % en % text.segment=Lijnstuk van % tot % text.segment.fixed=Lijnstuk van % tot % met lengte % text.ray=Straal van % in de richting van % text.intersection=Snijding tussen % en % text.circle=Cirkel rond % door % text.circle.fixed=Cirkel rond % door % met straal % text.fixedcircle=Cirkel rond % met straal % text.circle3=Cirkel rond % met straal van % tot % text.parallel=Rechte door % evenwijdig met % text.midpoint=Midden tussen % en % text.quadric=Kegelsnede door % text.plumb=Rechte door % loodrecht op % text.angle=Hoek % - % - % text.angle.fixed=Hoek % - % - % met grootte % text.boundedpoint=Punt op % text.expression=Uitdrukking "%" op %, % text.area=Veelhoek text.fixedangle=Hoek % - % met grootte % name.Point=Punt name.Intersection=Intersectie name.OtherIntersection=Intersectie name.Circle=Cirkel name.Circle3=Cirkel name.Segment=Lijnstuk name.Ray=Straal name.Line=Rechte name.TwoPointLine=Rechte met twee punten name.Parallel=Evenwijdige name.Midpoint=Midden name.Quadric=Quadriek name.Plumb=Loodlijn name.Angle=Hoek name.PointOn=Voorwerppunt name.Expression=Uitdrukking name.Polygon=Veelhoek name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=l name.short.Ray=s name.short.Line=r name.short.Parallel=e name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=n name.short.Angle=h name.short.PointOn=OP name.short.Expression=WU name.short.Polygon=V prompt.point==P prompt.pointon==P() prompt.line==r(,) prompt.segment==l(,) prompt.ray==s(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==e(,) prompt.plumb==n(,) prompt.angle==h(,,) prompt.area=O(,,) popup.hidden=Toon verborgen voorwerpen popup.replay=Toon constructie stapsgewijs popup.empty=--- Macro's --- replay.title=Weergave reorder.title=Duw voorwerpen reorder.message=Voeg in na reorder.notfound=Voorwerp niet gevonden! reorder.warning=Sorry, kon niet uitgevoerd worden! setgrid.title=Rasterbreedte setgrid.prompt=Geef nieuwe rasterbreedte setgrid.set=Instellen definemacro.title=Definieer macro definemacro.name=Naam definemacro.comment=Macro-commentaar definemacro.parameters=Parameteringave(n) definemacro.noparams=Geef een waarde aan de parameter! definemacro.nomacro=Er is geen macro om uit te voeren! definemacro.targetsonly=Verberg constructie definemacro.invisible=Verberg volledig definemacro.promptfor=Gebruiker voert in: macro.replace.title=Macro macro.replace=Vervang Macro: macro.replace.all=Alle macro.usage=Verkeerd gebruik van de macro (zie tips)! macro.prompt.title=Parameterinvoer macro.prompt.prompt=Geef een waarde aan de parameter macro.prompt.illegal=Ongeldige waarde! digits.title=Beduidende cijfers digits.edit=Wijzig digits.lengths=Display digits.angles=Hoeken editrun.title=Wijzig constructiebeschrijving editrun.run=Bewaren en uitvoeren editrun.load=Andere beschrijving sure.title=Ben je zeker? sure.macros=Alle macro's wissen? sure.delete=Alle veranderingen weggooien? close.title=Einde close.prompt=Wil je dit programma stoppen? file.exists.title=Bestand bestaat reeds file.exists.overwrite=Bestand bestaat. Vervangen? exception.nparams=Ongeldig aantal parameters! exception.notfound=Voorwerp niet gevonden of het is gedefinieerd na een uitdrukking! exception.type=Ongeldig voorwerptype! exception.expression=Ongeldige uitdrukking! exception.canfix=Voorwerp kan niet vastgezet worden! exception.fix=Ongeldige waarde! exception.novalue=Ongeldige waarde! exception.elementary=Ongeldig element in uitdrukking! exception.bracket=Afsluitend haakje ontbreekt! exception.quotes=Afsluitend aanhalingsteken ontbreekt! exception.dot=Verkeerd getalformaat! exception.nodigit=Getal bevat geen cijfer! exception.function=Onbekende functie! exception.parameter=Ongeldige functieparameter! exception.macro=Ongeldige macroparameter! exception.name=Benaming ontbreekt! exception.job=Ongeldige opgaveparameters! exception.track=Ongeldige volgparameters! exception.animate=Ongeldige animatieparameters! exception.boolean=Verwachte waarde: waar of vals! exception.value=Ongeldige waarde! exception.color=Ongeldige kleur! exception.colortype=Ongeldige dikte! exception.type=Ongeldige puntdikte! exception.macroparameter=Ongeldige macroparameter! exception.macrotarget=Ongeldig macrodoel! exception.prompt=Ongeldig voorwerp! exception.prompt.parameter=Voorwerp mag geen parameter zijn! exception.parameters=Ongeldige parameter! exception.brackets=Ongeldige haakjes! exception.double=Naam is reeds gebruikt! error.setaway=Dit punt is niet voor de snijding gedefinieerd! error.objecttracker.depends=dit punt ligt op een ander voorwerp! constructiondisplay.title=Constructie function.hide=Verberg function.hide.short=verberg function.rename=Naam function.rename.short=naam function.value=Waarde function.value.short=waarde function.window=Venster function.window.short=venster function.color=Kleur function.color.short=kleur function.thickness=Dikte function.thickness.short=dikte function.type=Type function.type.short=type function.partial=Gedeeltelijk function.partial.short=gedeeltelijk function.fill=Vul function.fill.short=vul function.back=Terug function.back.short=terug function.acute=Scherp function.acute.short=scherp function.obtuse=Stomp function.obtuse.short=stomp function.solid=Vast function.solid.short=vast function restrict=Beperk function restrict.short=beperk expression.value=Waarde configure.title=Browser instellen configure.prompt=Browsercommando # New Resources: background.error=Kon afbeelding niet inladen (GIF of JPG!). menu.background=Achtergrond menu.background.grab=Huidige constructie als achtergrond gebruiken menu.background.clear=Wis achtergrond menu.background.load=Achtergrondafbeelding laden ... menu.background.usesize=Venstergrootte aanpassen menu.background.tile=Achtergrondpatroon herhalen menu.background.center=Achtergrond centreren iconhelp.grab=Achtergrond instellen of wissen filedialog.backgroundload=Achtergrond laden filedialog.backgroundload.action=Laden # New Resources in Version 2.14 menu.file.compress=Altijd comprimeren menu.file.savesvg=SVG # Version 2.15 loading=Aan het inladen, even geduld! # Version 2.18 and 2.19 menu.settings.font.default=Standaardlettertype gebruiken menu.settings.font.bold=Vette tekst menu.settings.font.large=Grote tekst menu.file.saveeps=EPS menu.fonts=Lettertype # Version 2.20 bmpscaler.title=Verklein/vergroot bitmap bmpscaler.width=Breedte bmpscaler.height=Hoogte bmpscaler.scale=Factor (druk Return) bmpscaler.illegal=Ongeldige waarde # Version 2.21 renamemacro.title=Nieuwe naam voor macro renamemacro.name=nieuwe macronaam menu.special.renamemacro=Geef macro nieuwe naam ... # Version 2.23 savequestion.title=Bewaar constructie savequestion.qsave=Aanpassingen bewaren? # Version 2.25 exception.printsize=Pagina is te klein voor deze constructie! iconhelp.twolines=Iconen op twee regels iconhelp.nohelp=Geen help beschikbaar iconhelp.type?=Punt type iconhelp.thickness?=Dikte iconhelp.color?=Kleur iconhelp.filled=Opgevuld voorwerp iconhelp.isback=Voorwerp wordt in de achtergrond getekend iconhelp.inverse=Gespiegelde hoek iconhelp.angle?=Grootte # Version 2.28 message.objecttracker.stop=Automatisch volgen: Stop de animatie (shift links/rechts regelt snelheid) # Version 2.31 menu.settings.indicate=Voorvertoning aangemaakte voorwerpen menu.options.other=Voorkeuren menu.help.welcome=Nieuws i.v.m. nieuwe versie iconhelp.twolines=Iconen op twee regels iconhelp.qintersection=Vraag voor intersecties iconhelp.qchoice=Toon dialoogvenster voor voorwerpselectie iconhelp.qpointon=Vraag om een punt op een voorwerp te maken iconhelp.noindicate=Duid voorwerpen onder de muis niet aan # Version 2.33 menu.file.new=Nieuwe constructie (Ctrl-n) # Version 2.34 edit.text.title=Tekstinstellingen edit.text.settings=Andere instellingen menu.settings.filedialog=Vervang bestandsdialoog van het systeem # Version 2.35 menu.settings.bitmapbackground=Gebruik achtergrondkleur in bitmaps # Version 2.36 menu.file.savegraphics=Bewaar afbeelding als ... menu.file.savepng=PNG bmpscaler.title=Schaal afbeelding # Version 2.37 menu.file.savepdf=PDF iconhelp.chord=Toon als koorde # Version 2.39 message.setfixedangle.first=Vaste hoek: beginpunt? message.setfixedangle.second=Vaste hoek: hoekpunt? message.setfixedangle.third=Vaste hoek: eindpunt? edit.fixedangle.set=grootte hoek bepalen ... message.setfixedcircle.first=Vaste cirkel: eerste punt? message.setfixedcircle.second=Vaste cirkel: tweede punt? edit.fixedcircle.set=grootte cirkel bepalen ... # Version 2.40 minpointsize.title=Min. puntgrootte instellen minpointsize.prompt=Geef de minimale puntgrootte (standaardwaarde: 3) menu.settings.font.minpointsize=Minimale puntgrootte ... # Version 2.41 name.short.Track=MP text.track=Meetkundige plaats van % waarbij % beweegt op % trackquestion.keep=Bewaar meetkundige plaats in constructie? trackquestion.title=Bewaar meetkundige plaats menu.options.track=Bewaar meetkundige plaats (Shift-Enter) iconhelp.indicate=Voorvertoning constructieresultaat iconhelp.nohelp=Geen hulp beschikbaar! # Version 2.42 objects.draw=Teken met de muis menu.options.cleardraw=Wis tekening (Esc) iconhelp.draw=Teken met de muis message.draw=Teken met de muis (ESC om te wissen) shortcuts.draw=; # Version 2.43 message.move.select=Bewegen: Selecteer een punt (shift: toon oude toestand)! message.rename=Hernoem A,B,C,...: Selecteer voorwerpen! iconhelp.rename=Hernoem A,B,C,... objects.rename=Hernoem A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Straal van de hoek niet tonen # Version 2.45 menu.settings.smartboard=Smartboard Modus shortcuts.zoom=% objects.zoom=Zoomen met de muis message.zoom=Versleep het centrum, of zoom in en uit # Version 2.46 menu.special.restricticons=Beperkte set werktuigiconen # Version 2.47 menu.settings.indicate.simple=Alleen punten aanduiden menu.settings.beginner=Beginnersmodus question.again=Deze vraag altijd stellen. # Version 2.49 definemacro.parameters=Vraag naar parameters ("=naam" maakt het vast) # Version 2.53 menu.actions.angles=Hoeken menu.actions.circles=Cirkels menu.actions.lines=Rechten menu.actions.points=Punten # Version 3.00 info.title=Context help info.related=Verwante topics info.notfound=Topic niet gevonden! info.noresults=Zoekterm niet gevonden! info.searchresults=- resultaten zoektocht - info.select=- Selecteer - info.search=Zoek info.back=Terug info.start=Start iconhelp.info=Context help menu.help.info=Context help myfiledialog.homedir=PeL bestanden myfiledialog.windowshome=Mijn documenten myfiledialog.mkdir=nieuwe map myfiledialog.back=Terug menu.file.alwaysclearmacros=Wis macro's voor inladen about.language=Taal bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Backups # Version 3.02 menu.options.hideduplicates=Verberg duplicaten # Version 3.03 menu.options.function=Teken een functie text.function=Functie ( % , % ) function.varmin=Van function.varmax=Tot function.dvar=Stap function.var=Variabele function.x=X function y=Y iconhelp.function=Teken een functie menu.options.editlast=Wijzig laatste voorwerp iconhelp.control.edit=Wijzig laatste voorwerp iconhelp.control.hide=Verberg duplicaten edit.function.title=Functie of kromme iconhelp.control.runmacro=Voer laatste macro opnieuw uit # Version 3.05 point.type.cross=Kruis point.type.dcross=Diagonaal kruis shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Eenheid menu.special.break=Afbreekpunten menu.bp.setbreak=Zet afbreekpunt menu.bp.clearbreak=Wis afbreekpunt menu.bp.sethidingbreak=Zet verborgen afbreekpunt menu.bp.animatebreak=Animeer afbreekpunten iconhelp.animatebreak=Animeer afbreekpunten message.animatebreak=Animeer afbreekpunten: Klik om te stoppen (shift links/rechts regelt snelheid)! menu.special.exporttemplate=HTML Export met sjabloon templateload.open=Laad sjabloon templateload.open.action=Open menu.settings.doubleclick=Dubbelklikken voor macro's # Version 3.12 edit.equation=Vergelijking # Version 3.23 menu.settings.squarepoints=Teken punten altijd als vierkanten # Version 3.37 menu.options.export=Instellingen voor grafische export menu.settings.minwidth=Minimale lijndikte is 1 menu.settings.minpointsize=Respecteer minimum puntgrootte menu.settings.minfontsize=Respecteer minimum lettergrootte minfontsize.title=Minimum lettergrootte instellen minfontsize.prompt=Minimum lettergrootte (standaard: 12) menu.options.minpointsize=Minimum puntgrootte menu.options.minfontsize=Minimum lettergrootte # Version 3.38 menu.settings.scalepdf=Schaal PDF en EPS uitvoer 1:1 # Version 3.41 menu.file.clip=Afsnijden voor grafische uitvoer ... clip.title=Afsnijding instellen clip.width=Breedte clip.height=Hoogte clip.screen=Niet afsnijden # Version 3.42 menu.options.arrowsize=Pijlgrootte ... arrowsize.title=Pijlgrootte # Version 3.44 iconhelp.large=Gebruik grote letters iconhelp.bold=Gebruik vet menu.options.largefont=Grote letters menu.options.boldfont=Vet warning.previewframe=Frame groter dan het venster! message.move.select=Move: Selecteer een punt (shift: meer punten, ctrl: toon oude toestand)! # Version 3.46 iconbar.showseparators=Toon scheidingslijnen # Version 3.48 menu.sizes=Stel formaat in menu.options.minlinesize=Minimum lijndikte ... minlinesize.title=Minimum lijndikte minlinesize.prompt=Minimum lijndikte (standaard 1) arrowsize.prompt=Pijlgrootte instellen (standaard: 10) menu.options.printscaler=Exportformaat instellen ... menu.options.printscalepreview=Export voorvertoning menu.options.exportsettings=Speciale exportinstellingen ... printscaler.title=Exportformaat instellen printscaler.width=Breedte (in cm) printscaler.height=Hoogte (in cm) printscaler.dpi=Resolutie (in dpi, standaard 300) printscaler.linewidth=Lijndikte (in cm, standaard 0.02) printscaler.pointsize=Puntgrootte (in cm, standaard 0.05) printscaler.textsize=Tekstgrootte (in cm, standaard 3) printscaler.clear=Niet gebruiken printscaler.screen=Schermgrootte # Version 3.49 printscaler.screen=300 DPI printscaler.w=breedte (in pixels) printscaler.h=Hoogte (in pixels) printscaler.scale=Schaal (relatief t.o.v. scherm) printscaler.middle=uitsnijden (niet herschalen) printscaler.sizes=herschaal rechten, letters en punten menu.file.savepng=Bewaar figuur als PNG warning.preview=Voorvertoning werkt niet volledig in Java 1.1 iconedit.showseparators=Toon scheidingslijnen printscaler.aspect=Bewaar verhouding printscaler.presets=Standaardkeuzes printscaler.preset=Kies uit de lijst printscaler.preset.300dpi=Exacte schaal met 300 DPI printscaler.preset.300dpi6=6 cm breed met 300 DPI printscaler.preset.300dpi16=16 cm breed met 300 DPI printscaler.preset.window=Venstergrootte printscaler.preset.clip50=Venstergrootte afgesneden 50% message.saving=Even geduld! menu.options.printscalepreview=Exportvoorvertoning (Ctrl-F3) date=Build # Version 3.51 help=Hulp # Version 3.61 editconditionals.title=Wijzig voorwaarden editconditionals.hidden=Verborgen editconditionals.superhidden=Volledig verborgen editconditionals.visible=Normaal editconditionals.showname=Toon naam editconditionals.showvalue=Toon waarde editconditionals.background=Achtergrond editconditionals.solid=Niet transparant exception.superfluous=Overbodige tekst in uitdrukking # Version 3.62 menu.options.selectionsize=Stel keuzebereik in selectionsize.title=Keuzebereik selectionsize.prompt=Keuzebereik (standaard 1.5) # Version 3.63 select.comment.title=Macrocommentaar # Version 3.68 edit.area.area=Oppervlakte # Version 3.73 myfiledialog.oldfiles=Oude bestanden # Version 3.74 iconhelp.load=Laad constructie (Ctrl-o) iconhelp.save=Bewaar constructie (Ctrl-s) iconhelp.new=Nieuwe constructie (Ctrl-n) # Version 3.81 warning.loadbackground=Fout bij laden achtergrond # Version 3.9 function.x=Uitdrukking voor X (leeg voor functies) # Version 3.91 constructiondisplay.select=Selecteer constructiondisplay.all=Alle objecten constructiondisplay.visible=Zichtbare objecten constructiondisplay.points=Punten constructiondisplay.lines=Rechten constructiondisplay.circles=Cirkels constructiondisplay.angles=Hoeken constructiondisplay.other=Andere objecten menu.file.copypng=Kopieer naar klembord exception.clipboardcopy=Kopie mislukt! menu.options.finegrid=Enkel as # Vesion 3.93 edit.function.center=Stel centrum in edit.function.free=Laat centrum los message.setcenter=Kies het centrumpunt! # Vesion 3.94 message.edit=Edit: Object (shift: meer objecten, ctrl: voorwaardelijk)? # Version 3.95 edit.function.special=Alleen punten # Version 3.97 error.image=Fout bij laden afbeelding! filedialog.imageload=Laad afbeelding filedialog.imageload.action=Laad prompt.image=afbeelding(,,,) objects.image=Afbeelding shortcuts.image=_ # Version 3.98 exception.depends=Object % hangt af van huidig object. error.depends=Object % hangt af van huidig object. constructiondisplay.sorted=Gesorteerd volgens constructievolgorde # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Uitdrukkingen # Version 4.00 iconhelp.image=Laad afbeelding (_) message.image=Ankerpunt % voor afbeelding message.image.last=Laatste ankerpunt (of kies geselecteerde punt) editconditionals.z=Z-Bufferwaarde # Version 4.01 name.FixedAngle=Vaste hoek # Version 4.04 menu.moresettings=Instellingen menu.settings.language=Kies taal language.title=Kies taal language.prompt=Taal (actief bij volgende programmastart) # Version 4.05 constructiondisplay.invalid=Ongeldige objecten # Version 4.08 menu.settings.constructiondisplay=Permanente constructieweergave (F11) # Version 4.09 constructiondisplay.editconditions=Wijzig voorwaarden constructiondisplay.delete=Verwijder geselecteerde objecten constructiondisplay.hide=Verberg of toon constructiondisplay.superhide=Super verbergen # Version 4.2 edit.expression.slider=Toon als schuifbalk menu.grid.options=Gridopties menu.options.leftsnap=Snap met linkermuistoets menu.settings.boundingbox=Maak Bounding Box (bb) bestand # Version 4.3 latexsettings.title=Stel LaTeX-export in latexsettings.boundingbox=Maak Bounding box bb-bestand latexsettings.latexinput=Maak LaTeX idx-bestand latexsettings.doubledollar=LaTeX toont $$...$$ latexsettings.dollar=LaTeX toont $...$ latexsettings.dollar=LaTeX toont $...$ latexsettings.nodollar=LaTeX toont alle andere strings latexsettings.fullpath=Gebruik pad naar bestand printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=12 cm breedte met 300 DPI printscaler.latex=Bewaar voor LaTeX menu.background.usewidth=Pas alleen hoogte aan # Version 4.4 menu.options.restricted=Beperk intersecties menu.options.sizes=Kies groottes ... sizesdialog.title=Groottes minlinesize.prompt=Minimale lijnbreedte (standaard: 1) minpointsize.prompt=Minimale puntgrootte (standaard: 3) minfontsize.prompt=Minimale lettergrootte (standaard: 12) arrowsize.prompt=Pijlgrootte (standaard: 10) selectionsize.prompt=Selectie-grootte (standaard: 1.5) warning.loadmacros=Fout bij laden macro! warning.macrodefinition=% wordt gebruikt, maar staat niet in macro! edit.circle.bounds=Toon als boog edit.circle.range=Kies boog ... # Version 4.5 edit.track.dmin=Minimale stapgrootte (standaard 0.001) # Version 4.6 menu.settings.smallicons=Gebruik kleine iconen menu.settings.oldicons=Gebruik oude iconen # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof=Meetkundige plaats van % als % verandert # Version 5 # Fix error.image edit.discrete=Discreet error.fixedsegment=Kan dit lijnstuk niet herstellen! export.zoom=Zoom met muis export.popup=Popup menu # Version 5.1 edit.intersection.alternate=Kan afwisselen export.restrictedmove=Beperk bewegingen # Version 6.0 # Fix message.boundedpoint # Fix iconhelp.new message.bindpoint=Maak punt vast aan object (Shift: continu, Ctrl: binnenin object) edit.point.inside=Binnen object edit.point.increment=Grid toename (0=free) edit.more=Meer ... menu.settings.more=Toon knop voor conditionele opmaak menu.file.loadexamples=Laad voorbeeld ... menu.options.editgrid=Editeer cordinatenraster ... # Version 6.1 constructiondisplay.description=Toon beschrijving (Alt-Ctrl-1) constructiondisplay.size=Toon afmeting of cordinaten (Alt-Ctrl-2) constructiondisplay.formula=Toon formule (Alt-Ctrl-3) menu.settings.germanpoints=Gebruik | in cordinaten ./src/rene/zirkel/docs/CVS/RevisionCache/ZirkelProperties_de.properties#1.10000644000175000017500000012157411144764476025514 0ustar yvesyveslanguage=de_ homefile=index.html codepage.help=CP1252 about.title=ber dieses Programm about.name=Zirkel about.programmed=Programmiert von title=Zirkel close=Schlieen ok=OK cancel=Abbruch abort=Abbruch done=Aufgabe erledigt, sehr schn! message=Nachricht warning=Warnung yes=Ja no=Nein true=wahr false=falsch warning.nojob=Dies ist keine Aufgabe! warning.print=Druck ist gescheitert! warning.reset=Option wirkt erst beim nchsten Programmstart! question.title=Frage question.intersection=Soll der Schnitt erzeugt werden? question.pointon=Punkt auf Objekt erzeugen? colors.black=Schwarz colors.blue=Blau colors.green=Grn colors.brown=Braun colors.cyan=Trkis colors.red=Rot objects.point=Punkt objects.segment=Strecke objects.line=Gerade objects.ray=Strahl objects.circle=Kreis objects.intersection=Schnitt objects.move=Punkt bewegen objects.hide=Objekt verstecken objects.edit=Eigenschaften objects.tracker=Ortslinie oder Hllkurve objects.objecttracker=Automatische Ortslinie objects.parallel=Parallele objects.plumb=Lot objects.circle3=Kreis aus r und M objects.midpoint=Mitte objects.quadric=Kegelschnitt objects.angle=Winkel objects.boundedpoint=Punkt auf Objekt objects.parameter=Definiere Makro-Parameter objects.targets=Definiere Makro-Ziele objects.definejob=Aufgabe definieren objects.runmacro=Makro starten objects.delete=Objekte und deren Kinder lschen objects.reorder=Reihenfolge ndern objects.animate=Animation objects.expression=Arithmetischer Ausdruck objects.area=Vieleck objects.text=Text objects.fixedcircle=Kreis mit festem Radius objects.fixedangle=Fester Winkel objects.fixedsegment=Strecke mit fester Lnge shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.circle=k shortcuts.ray=l shortcuts.intersection=i shortcuts.move=b shortcuts.hide=v shortcuts.edit=e shortcuts.tracker=o shortcuts.objecttracker=r shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.angle=w shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Entf shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=t shortcuts.color.0=(Strg-1) shortcuts.color.1=(Strg-2) shortcuts.color.2=(Strg-3) shortcuts.color.3=(Strg-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.pointtype.0=(Strg-5) shortcuts.pointtype.1=(Strg-6) shortcuts.pointtype.2=(Strg-7) shortcuts.pointtype.3=(Strg-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) iconhelp.point=Punkt (p)+Freier Punkt, Punkt auf Objekt oder Schnittpunkt iconhelp.segment=Strecke (s)+Strecke mit zwei Endpunkten iconhelp.line=Gerade (g)+Gerade durch zwei Punkte iconhelp.ray=Strahl, Halbgerade (l)+Strahl von einem Punkt aus durch einen anderen iconhelp.circle=Kreis (k)+Kreis mit Mittelpunkt und Punkt auf Kreislinie iconhelp.intersection=Schnitt (i)+Schnitt von Kreisen und Geraden iconhelp.move=Bewege Objekte (b)+Bewege Punkte, feste Kreise und Winkel, Label+Strg-Taste (Punkte): Zeige alte Konstruktion+Strg-Taste (feste Objekte): Bewege feste Objekte+Shift: Mehr als ein Objekt bewegen iconhelp.hide=Objekte verstecken oder anzeigen (v)+Umschalttaste: Total verstecken iconhelp.edit=Objekteigenschaften einstellen (e)+Umschalttaste: Mehrere Objekte einstellen+Strg: Letztes Objekt einstellen iconhelp.tracker=Ortslinie oder Hllkurve (o)+1. Punkte oder Geraden, deren Ortslinie gezeichnet wird+2. Punkt bewegen iconhelp.objecttracker=Automatische Ortslinie oder Hllkurve (r)+1. Punkte oder Geraden, deren Ortslinie gezeichnet wird+2. Kreis oder Gerade, Punkt auf Objekt, Schieber+3. Evtl. Punkt der darauf luft+Strg: bernimm Ortslinie (Umschalt-Eingabe) iconhelp.parallel=Parallele (1)+Parallele zu einer Geraden durch einen Punkt iconhelp.plumb=Lot (2)+Lot auf eine Gerade durch einen Punkt iconhelp.circle3=Kreis aus Radius und Mittelpunkt (3)+1. Endpunkte der Strecke, deren Lnge der Radius ist+2. Mittelpunkt des Kreises iconhelp.midpoint=Mitte zwischen zwei Punkten (4) iconhelp.quadric=Kegelschnitt durch 5 Punkte ($)+Ellipsen oder Hyperbeln iconhelp.angle=Winkel (w)+Winkel mit zwei Schenkelpunkten und Scheitelpunkt+Nur zur Dekoration iconhelp.boundedpoint=Punkt auf Objekt (5)+Umschalttaste: Nicht relativ zum Objekt fixieren iconhelp.hidden=Zeige versteckte Objekte (F9) iconhelp.color=Farbe fr nchstes Objekt (Strg-1,2,3,4)+Defaulteinstellung iconhelp.type=Typ des nchsten Punktes (Strg-5,6,7,8,9,0)+Defaulteinstellung iconhelp.thickness=Dicke des nchsten Objektes (Alt-5,6,7)+Defaulteinstellung iconhelp.back=Letztes sichtbares Objekt lschen (<-)+Entfernt auch alle versteckten Objekte dahinter! iconhelp.type0=Typ des nchsten Punktes+Defaulteinstellung iconhelp.thickness0=Strke des nchsten Objektes+Defaulteinstellung iconhelp.partial=Partiell sichtbare Kreise (Strg-F9)+Defaulteinstellung iconhelp.plines=Partiell sichtbare Geraden (Strg-F10)+Defaulteinstellung iconhelp.arrow=Strecken als Vektoren (Strg-F11)+Defaulteinstellung iconhelp.showcolor=Ausgewhlte Farben zeigen (Alt-1,2,3,4)+Schwarz wird immer angezeigt! iconhelp.runmacro=Makro starten (9)+Start nach Eingabe aller Parameter+Umschalttaste: Fixiere Parameter+Leertaste: Whle denselben Parameter wie beim letzten Mal+Strg: Letztes Makro erneut aufrufen iconhelp.macro=Makro Parameter/Ziele/Definition (7,8,Strg-F5)+Werkzeug mehrmals anwhlen:+1. Parameter der Musterkonstruktion+2. Ziele der Musterkonstruktion+3. Makrodialog iconhelp.expression=Arithmetischer Ausdruck (x)+Berechneter Ausdruck in Konstruktion iconhelp.showvalue=Objektwerte zeigen (Strg-F7)+Defaulteinstellung iconhelp.showname=Objektnamen zeigen (Strg-F6)+Defaulteinstellung iconhelp.longnames=Lange Objektnamen verwenden (Strg-F8)+Defaulteinstellung iconhelp.obtuse=Winkel grer 180 verwenden (Strg-F12)+Defaulteinstellung iconhelp.solid=Keine Transparenz verwenden+Defaulteinstellung iconhelp.grid=Zeige Gitter (F12) iconhelp.comment=Kommentar (F10)+Kommentar der Konstruktion iconhelp.macro0=Makrodefinition iconhelp.visual=Zwischen visueller und beschreibender Konstruktion umschalten iconhelp.replay=Konstruktion schrittweise durchgehen iconhelp.oneforward=Vor iconhelp.fastforward=Schnell vor iconhelp.allforward=Zum Ende iconhelp.oneback=Zurck iconhelp.fastback=Schnell zurck iconhelp.allback=Zum Anfang iconhelp.close=Schlieen iconhelp.area=Geflltes Vieleck (0)+Eckpunkte, Ende mit Doppelklick iconhelp.text=Mehrzeiliger Text (t) iconhelp.fixedcircle=Kreis mit festem Radius (,)+Mittelpunkt und Punkt auf der Kreislinie iconhelp.fixedangle=Winkel mit fester Gre (.)+Schenkelpunkt, Scheitelpunkt und Punkt auf zweitem Schenkel iconhelp.fixedsegment=Strecke mit fester Lnge (#)+Erster und zweiter Endpunkt iconhelp.animate=Animation eines Punktes (")+1. Animierter Punkt+2. Strecken oder Kreise, Ende mit Doppelklick iconhelp.delete=Objekt und davon abhngige Objekte lschen (Entf) iconhelp.undo=Vorherige Lschaktion rckgngig machen (Strg-z) iconhelp.nextbreak=Zum nchsten Haltepunkt Springen iconhelp.setbreak=Haltepunkt Setzen und Entfernen+Umschalttaste: Versteckender Haltepunkt iconhelp.zoom=Mit der Maus zoomen und verschieben (%)+In der Mitte verschieben, auen zoomen menu.file=Datei menu.file.clearmacros=Alle Benutzermakros lschen menu.file.load=Konstruktion laden ... (Strg-o) menu.file.loadjob=Aufgabe laden ... (Strg-j) menu.file.savejob=Aufgabe speichern als ... (Strg-k) menu.file.save=Konstruktion speichern (Strg-s) menu.file.saveas=Speichern als ... (Strg-a) menu.file.includemacros=Mit Makros speichern menu.file.delete=Objekte lschen (Entf) menu.file.exit=Programm beenden (Alt-F4) menu.file.print=Drucken ... menu.file.print.isoscale=Druck 1:1 skalieren menu.file.savebmp=Als Bild (BMP) speichern ... menu.file.savefig=Als Bild (FIG) speichern ... menu.file.loadrun=Beschreibende Konstruktion laden ... (Strg-r) menu.file.editrun=Beschreibende Konstruktion bearbeiten ... (Strg-x) menu.actions=Bearbeiten menu.actions.elementary=Elementare Werkzeuge menu.actions.complex=Komplexere Werkzeuge menu.actions.fixed=Fixierte Objekte menu.actions.move=Werkzeuge zum Bewegen menu.actions.decorative=Dekorative Objekte menu.options=Optionen menu.options.visual=Visueller Modus menu.options.hidden=Versteckte Objekte anzeigen (F9) menu.options.comment=Kommentar bearbeiten ... (F10) menu.options.constructiondisplay=Konstruktionsbeschreibung menu.options.grid=Gitter anzeigen (F12) menu.options.setgrid=Gitterweite einstellen ... menu.options.shownames=Objektnamen anzeigen (Strg-F6) menu.options.longnames=Lange Objektnamen verwenden (Strg-F8) menu.options.obtuse=Winkel grer 180 verwenden (Strg-F12) menu.options.solid=Keine Transparenz menu.options.showvalues=Objektwerte zeigen (Strg-F7) menu.options.partial=Partiell sichtbare Kreise (Strg-F9) menu.options.plines=Partiell sichtbare Geraden (Strg-F10) menu.options.arrow=Strecken als Vektoren (Strg-F11) menu.options.showcolor=Sichtbare Farben menu.options.defaultcolor=Farbe menu.options.defaultthickness=Strke menu.options.defaulttype=Stil fr Punkte menu.options.editicons=Werkzeugleiste einrichten ... menu.options.all=Alle menu.options.setdigits=Nachkommastellen ... menu.options.back=Letzes Objekt lschen (<--) menu.options.undo=Lschen rckgngig machen (Strg-z) menu.zoom=Bildausschnitt menu.zoom.in=Vergrern (+) menu.zoom.out=Verkleinern (-) menu.zoom.left=Nach links (Pfeiltaste-Links) menu.zoom.right=Nach rechts (Pfeiltaste-Rechts) menu.zoom.up=Nach oben (Pfeiltaste-Auf) menu.zoom.down=Nach unten (Pfeiltaste-Ab) menu.macros=Makros menu.special.definemacro=Makro definieren (Strg-F5) menu.special.runmacro=Makroaufruf ... (F5) menu.special.savemacros=Makros speichern ... menu.special.loadmacros=Makros laden ... menu.special.deletemacros=Makros lschen ... menu.special=Spezielles menu.special.testjob=Aufgabe testen (Strg-F1) menu.special.jobcomment=Aufgabenstellung ... (F8) menu.special.export=HTML Export ... (Strg-e) menu.special.replay=Konstruktion wiedergeben menu.help=Hilfe menu.help.about=ber dieses Programm menu.help.help=Hilfe (F1) menu.help.browser=Hilfe und Demos menu.help.configure=Browser Konfigurieren menu.help.text=Texthilfe menu.help.macros=Makros menu.help.tools=Konstruktionswerkzeuge menu.help.gui=Benutzeroberflche menu.help.interactive=Beschreibende Konstruktionen menu.help.tips=Einige Tips menu.settings=Spezielle Einstellungen menu.settings.fullicons=Zwei volle Werkzeugleisten menu.settings.utf=Benutze UTF8-Kodierung menu.settings.autohide=Zweiten Schnittpunkt verstecken menu.settings.iconbartop=Werkzeugleiste oben menu.settings.showtips=Werkzeugtips anzeigen menu.settings.simplegraphics=Immer nur einfache Grafik menu.settings.sure=Vor dem Lschen nachfragen menu.settings.pointon=Fr Punkt auf Objekt nachfragen menu.settings.intersection=Fr Schnitt nachfragen menu.settings.choice=Auswahldialog fr Objekte anzeigen menu.settings.movename=Objektdaten beim Bewegen anzeigen menu.settings.movefixname=Fixierte Objektdaten beim Bewegen anzeigen menu.settings.restricted=Schulmodus menu.colors=Farben setzen colors.default=Normale Farben colors.color0=Farbe 1 (Schwarz) colors.color1=Farbe 2 (Grn) colors.color2=Farbe 3 (Blau) colors.color3=Farbe 4 (Braun) colors.color4=Farbe 5 (Trkis) colors.color5=Farbe 6 (Rot) colors.background=Hintergrund colors.select=Auswahl colors.target=Ziel save=Speichern load=Laden bound.release=Von Objekt Lsen ... bound.bind=An Objekt binden ... bound.error=Objekt nicht vor Schnitt gefunden! edit.Title=Eigenschaften edit.name=Name edit.text=Beschreibung edit.hidden=Versteckt edit.fixed=Fixiert edit.color=Farbe edit.ok=OK edit.cancel=Abbruch edit.showname=Zeige Namen edit.point.title=Punkt edit.point.x=X edit.point.y=Y edit.point.type=Typ edit.point.showvalue=Zeige Koordinaten edit.point.intersection=Verschieden von edit.point.bound=Auf Objekt edit.point.away=Weg von edit.point.close=Hin zu edit.point.free=Frei edit.line.title=Gerade, Strahl, Strecke edit.line.normal=Normal edit.line.thick=Dick edit.line.thin=Dnn edit.line.invisible=Unsichtbar edit.line.type=Typ edit.circle.title=Kreis edit.circle.length=Radius edit.circle.partial=Nur partiell sichtbar edit.point.colortype=Strke edit.segment.length=Lnge edit.segment.showvalue=Zeige Lnge edit.plumb.restricted=Eingeschrnkt edit.angle.title=Winkel edit.angle.length=Gre edit.angle.displaysize=Darstellung edit.angle.normal=Normal edit.angle.small=Klein edit.angle.large=Gro edit.expression.title=Ausdruck edit.expression=Arithmetischer Ausdruck edit.expression.prompt=Beschreibung edit.text.title=Text edit.area.title=Vieleck edit.area.back=Im Hintergrund export.title=HTML Export export.pagetitle=Seitentitel export.width=Breite export.height=Hhe export.jar=Zirkel-Archiv export.comment=Kommentar anzeigen export.file=Konstruktionsdatei export.job=Aufgabe export.color=Farbe export.backgroundcolor=Fr Hintergrund export.appletcolor=Fr Applet export.plain=Eingebettet export.3D=Rand export.breaks=Wiedergabe mit Haltepunkten export.icons=Rand und Icons export.full=Rand, Icons und Status export.nonvisual=Rand, Icons und Eingabezeile export.style=Applet-Stil export.setcolor=Farbe whlen export.savefirst=Die Konstruktion muss erst gespeichert werden! export.soltext=Lsung export.stylesheet=CSS Stil-Datei export.solution=Lsungsdatei export.jumpsol=Springe zur Lsung export.linksol=Link zur Lsung export.savesol=Lsungsdatei speichern export.track=Ortslinie von Punkt oder Gerade export.digits=Nachkommastellen speichern export.setsize=Gre Einsetzen export.signature=Erzeugt mit Z.u.L. export.colors=Konstruktionsfarben speichern export.background=Konstruktionshintergrund speichern help.title=Hilfe help.error=Konnte die Hilfedatei nicht finden! help.file=zirkel.txt coloreditor.title=Farbe Bearbeiten coloreditor.red=Rot coloreditor.green=Grn coloreditor.blue=Blau coloreditor.color=Ihre Farbe constructiondisplay.edit=Objekteigenschaften constructiondisplay.copy=Auf Zwischenablage comment.title=Kommentar comment.set=Setzen comment.cancel=Abbruch iconedit.title=Werkzeugleiste Einrichten iconedit.twobars=Zweizeilige Werkzeugleiste reorder.title=Objekte nach hinten legen reorder.message=einfgen nach reorder.notfound=Objekt wurde nicht gefunden! reorder.warning=Die Operation kann nicht ausgefhrt werden! select.title=Objektauswahl select.ok=OK select.cancel=Abbruch select.comment=Zeige Kommentar select.all=Alle message.point=Neuer Punkt, Schnittpunkt oder Punkt auf Objekt. (Shift: fixiert) message.intersection.first=Schnitt zwischen Kreisen und Geraden. message.intersection.second=Zweites Schnittobjekt? message.circle.midpoint=Kreismittelpunkt? message.circle.radius=Punkt auf Kreis? message.fixedcircle.midpoint=Mittelpunkt eines Kreises mit festem Radius? message.fixedcircle.radius=Punkt auf dem Umfang des festen Kreises? message.line.first=Erster Punkt der Geraden? message.line.second=Zweiter Punkt der Geraden? message.move.move=Punkte oder andere Objekte bewegen. message.segment.first=Erster Endpunkt der Strecke? message.segment.second=Zweiter Endpunkt der Strecke? (Shift: feste Lnge) message.fixedsegment.first=Erster Endpunkt der festen Strecke? message.fixedsegment.second=Zweiter Endpunkt der festen Strecke? message.ray.first=Anfangspunkt des Strahls? message.ray.second=Punkt auf dem Strahl? message.hide=Verstecken/Anzeigen von Objekten? message.tracker.select=Punkt fr Ortslinie, oder Gerade fr Hllkurve? (Shift: mehr) message.tracker.selectpoint=Punkt, der bewegt wird? message.tracker.move=Bewegen Sie den Punkt! message.objecttracker.select=Punkt fr Ortslinie, oder Gerade fr Hllkurve? (Shift: mehr) message.objecttracker.object=Gerade oder Kreis, wo der Punkt wandern soll, Punkt auf Objekt, Schieber? message.objecttracker.selectpoint=Punkt, der wandern soll? message.objecttracker.selectanypoint=Bewegen Sie den Punkt selbst! message.objecttracker.move=Bewegen Sie den Punkt! message.objecttracker.start=Animation mit Klick starten! message.objecttracker.stop=Animation mit Klick anhalten! (Shift links/rechts: Geschw.) message.parallel.first=Gerade, zu der Parallele erzeugt werden soll? message.parallel.second=Punkt auf der Parallelen? message.plumb.first=Gerade, zu der das Lot erzeugt werden soll? message.plumb.second=Punkt auf dem Lot? message.circle3.first=Erster Punkt der Strecke, die den Radius ergibt? message.circle3.second=Zweiter Punkt der Strecke, die den Radius ergibt? message.circle3.midpoint=Mittelpunkt des Kreises? message.midpoint.first=Erster Punkt der Strecke, die halbiert werden soll? message.midpoint.second=Zweiter Punkt der Strecke, die halbiert werden soll? message.quadric=Kegelschnitt aus 5 Punkten, Punkt Nummer message.angle.first=Punkt auf dem ersten Schenkel des Winkels? message.angle.root=Scheitelpunkt des Winkels? message.angle.second=Punkt auf dem zweiten Schenkel des Winkels? (Shift: Feste Gre) message.fixedangle.first=Punkt auf dem ersten Schenkel des festen Winkels? message.fixedangle.root=Scheitelpunkt des festen Winkels? message.fixedangle.second=Punkt auf dem zweiten Schenkel des festen Winkels? message.label.select=Text verschieben. message.label.move=Verschieben Sie den Text! message.boundedpoint=Punkt auf Gerade oder Kreis erzeugen (Shift: stetig, Strg: innerhalb)? message.parameters=Parameter der Musterkonstruktion fr das Makro? message.targets=Ziele der Musterkonstruktion fr das Makro? message.savejob.first=Letztes anzuzeigende Objekt fr die Aufgabe? message.savejob.second=Zielobjekte der Aufgabe? (Shift: Nicht berprfen!) message.savejob.third=Weitere anzuzeigende Objekte? message.runmacro=Parameter fr Makro %: %. % - % message.runmacro.return=(Leertaste whlt %) message.runmacro.fixes=(Shift: Fixiert Parameter) message.delete=Lsche ein Objekt und alle abhngigen Objekte. message.reorder=Lege ein Objekt in der Reihenfolge nach vorne. message.expression=Berechneten Ausdruck in der Konstruktion anzeigen. message.area=Punkte fr das geflltes Vieleck? (Doppelklick: Letzter Punkt) message.text=Mehrzeiligen Text in der Konstruktion anzeigen. message.animator.point=Punkt, der animiert werden soll? message.animator.segment=Strecken oder Kreise, auf denen der Punkt luft? (Doppelklick: Ende) message.animator.running=Animation mit Klick anhalten! (Shift: Umkehren) message.range.first=Beginne Kreissegment am Punkt ... message.range.second=Ende Kreissegment am Punkt ... message.setaway.away=Schnittpunkt soll weg vom Punkt ... message.setaway.close=Schnittpunkt soll hin zum Punkt ... myfiledialog.dir=Verzeichnis myfiledialog.file=Datei myfiledialog.pattern=Erweiterungen filedialog.open=ffnen filedialog.saveas=Speichern unter ... filedialog.open.action=ffnen filedialog.saveas.action=Speichern filedialog.htmlsave=HTML-Datei Speichern filedialog.htmlsave.action=Speichern objectsedit.title=Eigenschaften bearbeiten point.type.square=Quadrat point.type.diamond=Raute point.type.circle=Kreis point.type.dot=Punkt color.type.normal=Normal color.type.thick=Dick color.type.thin=Dnn color.type.invisible=Unsichtbar text.point=Punkt in %, % text.line=Gerade durch % und % text.segment=Strecke von % nach % text.segment.fixed=Strecke von % nach % mit Lnge % text.segmen text.ray=Strahl von % in Richtung % text.intersection=Schnitt zwischen % und % text.circle=Kreis um % durch % text.circle.fixed=Kreis um % durch % mit Radius % text.fixedcircle=Kreis um % mit Radius % text.circle3=Kreis um % mit Radius von % nach % text.parallel=Parallele durch % zu % text.midpoint=Mitte zwischen % und % text.quadric=Kegelschnitt durch % text.plumb=Lot durch % zu % text.angle=Winkel % - % - % text.angle.fixed=Winkel % - % - % mit Gre % text.boundedpoint=Punkt auf % text.expression=Ausdruck "%" in %, % text.area=Vieleck text.fixedangle=Fester Winkel % - % mit Gre % name.Point=Punkt name.Intersection=Schnitt name.OtherIntersection=Schnitt name.Circle=Kreis name.Circle3=Kreis name.Segment=Strecke name.Ray=Strahl name.TwoPointLine=Gerade aus zwei Punkten name.Line=Gerade name.Parallel=Parallele name.Midpoint=Mitte name.Quadric=Quadrik name.Plumb=Lot name.Angle=Winkel name.PointOn=Objektpunkt name.Expression=Ausdruck name.Polygon=Polygon prompt.point==P prompt.pointon==P() prompt.line==g(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==k(,) prompt.circle3==k(,,) prompt.intersection==S(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==p(,) prompt.plumb==l(,) prompt.angle==w(,,) prompt.area=A(,,) prompt.expression=AD() prompt.function=F(,,,,,) name.short.Point=P name.short.Intersection=S name.short.OtherIntersection=S name.short.Circle=k name.short.Circle3=k name.short.Segment=s name.short.Ray=r name.short.Line=g name.short.Parallel=p name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=l name.short.Angle=w name.short.PointOn=OP name.short.Expression=AD name.short.Polygon=A name.short.Function=F popup.hidden=Zeige versteckte Objekte popup.replay=Schrittweise durch Konstruktion gehen popup.empty=--- Makros --- setgrid.title=Gitterweite setgrid.prompt=Neue Gitterweite setgrid.set=Setzen definemacro.title=Makrodefinition definemacro.name=Name definemacro.comment=Kommentar definemacro.noparams=Es sind keine Parameter definiert! definemacro.nomacro=Es ist kein Makro definiert! definemacro.targetsonly=Verstecke Konstruktion definemacro.invisible=Vollstndig Verstecken definemacro.promptfor=Benutzer gibt ein: editrun.title=Bearbeite Konstruktionsbechreibung editrun.run=Speichern und Ausfhren editrun.load=Andere Beschreibung macro.replace.title=Makro macro.replace=Ersetze Makro: macro.replace.all=Alle macro.usage=Falsche Benutzung des Makros (siehe Tips)! macro.prompt.title=Parameter Eingabe macro.prompt.prompt=Geben Sie einen Wert fr den Parameter ein. macro.prompt.illegal=Ungltiger Wert! sure.title=Sind Sie sicher? sure.delete=Alle nderungen wirklich wegwerfen? digits.title=Nachkommastellen digits.edit=Im Eigenschaftendialog digits.lengths=Fr die Anzeige digits.angles=Fr Winkel close.title=Schlieen close.prompt=Wollen Sie das Programm beenden? file.exists.title=Datei Vorhanden file.exists.overwrite=Die Datei gibt es schon! berschreiben? exception.nparams=Falsche Parameterzahl! exception.notfound=Objekt nicht gefunden oder nach Ausdruck definiert! exception.type=Falscher Parametertyp! exception.expression=Ungltiger Ausdruck! exception.canfix=Objekt kann nicht fixiert werden! exception.fix=Falscher Wert! exception.novalue=Falscher Wert! exception.elementary=Falsches Element im Ausdruck! exception.bracket=Schlieende Klammer fehlt! exception.quotes=Schlieendes " fehlt! exception.dot=Falsches Zahlformat! exception.nodigit=Keine Ziffer in Zahl! exception.function=Unbekannte Funktion! exception.parameter=Falscher Parameter! exception.macro=Falscher Makroparameter! exception.macrotarget=Falsches Zielobjekt! exception.name=Kein Name angegeben! exception.prompt=Falsches Objekt fr Prompt! exception.prompt.parameter=Prompt darf kein Parameter sein! exception.parameters=Falsche Parameter! exception.brackets=Klammern falsch! exception.job=Falsche Jobparameter! exception.track=Falsche Trackparameter! exception.animate=Falsche Animationsparameter! exception.boolean=Wahr oder Falsch erwartet! exception.value=Falscher Wert! exception.color=Falsche Farbe! exception.colortype=Falsche Strke! exception.type=Falscher Punkttyp! exception.macroparameter=Falsche Makroparameter! exception.macrotarget=Falsches Makroziel! exception.double=Name schon vorhanden! error.setaway=Dieser Punkt ist nicht vor dem Schnitt definiert! error.objecttracker.depends=Der Punkt ist an ein anderes Objekt gebunden! constructiondisplay.title=Konstruktionsbeschreibung function.hide=Verstecken function.hide.short=v function.rename=Name function.rename.short=name function.value=Wert function.value.short=wert function.window=Fenster function.window.short=fenster function.color=Farbe function.color.short=farbe function.thickness=Dicke function.thickness.short=dicke function.type=Typ function.type.short=typ function.partial=Partiell function.partial.short=part function.fill=Voll function.fill.short=voll function.back=Zurck function.back.short=zur function.away=Verschieden function.away.short=weg function.acute=Spitz function.acute.short=spitz function.obtuse=Stumpf function.obtuse.short=stumpf function.solid=Solid function.solid.short=solid function.restrict=Beschrnkt function.restrict.short=beschrnkt expression.value=Wert replay.title=Wiedergabe parameter=Parameter parameter.short=Param target=Ziel target.short=Ziel macro=Makro macro.short=Makro away=Verschieden away.short=verschieden end=Ende end.short=ende invisible=Unsichtbar invisible.short=unsichtbar showall=Sichtbar showall.short=sichtbar configure.title=Browser Konfigurieren configure.prompt=Browserkommando background.error=Konnte Bild nicht laden (GIF oder JPG!). menu.background=Hintergrund menu.background.grab=Konstruktion als Hintergrund menu.background.clear=Hintergrund lschen menu.background.load=Hintergrundbild laden ... menu.background.tile=Gekachelt menu.background.center=Zentriert menu.background.usesize=Fenstergre anpassen iconhelp.grab=Setzt oder lscht Hintergrund+bernimmt Konstruktion in den Hintergrund filedialog.backgroundload=Hintergrundbild laden filedialog.backgroundload.action=Laden # New Resources in Version 2.14 menu.file.compress=Immer komprimieren menu.file.savesvg=Als Bild (SVG) speichern ... # 2.15 loading=Konstruktion wird geladen, bitte warten! # Version 2.18 und 2.19 menu.settings.font.default=Normalen Zeichensatz verwenden menu.settings.font.bold=Text fett anzeigen menu.settings.font.large=Text grer anzeigen menu.file.saveeps=Als Bild (EPS) speichern ... menu.fonts=Zeichensatz # Version 2.20 bmpscaler.width=Breite bmpscaler.height=Hhe bmpscaler.scale=Faktor (mit Eingabetaste) bmpscaler.illegal=Wert nicht mglich # Version 2.21 renamemacro.title=Makro umbenennen renamemacro.name=Neuer Name menu.special.renamemacro=Makro umbenennen ... # Version 2.23 savequestion.title=Speichern savequestion.qsave=nderungen speichern? # Version 2.25 exception.printsize=Druckseite zu klein! iconhelp.nohelp=No help available iconhelp.type?=Darstellung iconhelp.thickness?=Strke iconhelp.color?=Farbe iconhelp.filled=Ausgeflltes Objekt iconhelp.isback=Objekt erscheint im Hintergrund iconhelp.inverse=Gespiegelter Winkel iconhelp.angle?=Winkelgre # Version 2.31 menu.settings.indicate=Vorschau von erzeugten Objekten menu.options.other=Einstellungen menu.help.welcome=Neuigkeiten dieser Version iconhelp.twolines=Zweizeilige Iconleiste iconhelp.qintersection=Fr automatische Schnitte fragen iconhelp.qchoice=Dialog fr Objektauswahl anzeigen iconhelp.qpointon=Fr Punkt auf Objekt fragen iconhelp.noindicate=Objekte unter Maus nicht hervorheben # Version 2.33 menu.file.new=Neue Konstruktion (Strg-n) # Version 2.34 edit.text.title=Texteinstellungen edit.text.settings=Weitere Einstellungen menu.settings.filedialog=Dateidialog des Systems ersetzen # Version 2.35 menu.settings.bitmapbackground=Hintergrundfarbe in Bitmaps verwenden # Version 2.36 menu.file.savegraphics=Grafik speichern als ... bmpscaler.title=Grafikgre # Version 2.37 menu.file.savepdf=Als Bild (PDF) speichern ... iconhelp.chord=Als Kreissegment anzeigen # Version 2.39 message.setfixedangle.first=Punkt auf dem ersten Schenkel des abzutragenden Winkels? message.setfixedangle.second=Scheitelpunkt des abzutragenden Winkels? message.setfixedangle.third=Punkt auf dem zweiten Schenkel des abzutragenden Winkels? edit.fixedangle.set=Winkel abtragen ... message.setfixedcircle.first=Erster Punkt der abzutragenden Strecke, Strecke oder Kreis? message.setfixedcircle.second=Zweiter Punkt der abzutragenden Strecke? edit.fixedcircle.set=Gre abtragen ... # Version 2.40 minpointsize.title=Minimale Punktgre minpointsize.prompt=Minimale Punktgre (Default: 3) menu.settings.font.minpointsize=Minimale Punktgre ... # Version 2.41 name.short.Track=Tr text.track=Spur von % whrend % sich auf % bewegt trackquestion.keep=Ortslinie in Konstruktion bernehmen? trackquestion.title=Ortslinie Speichern menu.options.track=Ortslinie bernehmen (Shift-Eingabe) iconhelp.indicate=Vorschau von Konstruktionsergebnissen iconhelp.nohelp=Keine Hilfe verfgbar! # Version 2.42 objects.draw=Mit der Maus malen menu.options.cleardraw=Gemaltes lschen (Esc) iconhelp.draw=Mit der Maus malen+Escape: Gemaltes lschen message.draw=Mit der Maus malen. (Esc: Lschen) shortcuts.draw=; # Version 2.43 message.rename=Objekte alphabetisch umbennen. (Shift: Neuer Start) iconhelp.rename=Umbennen zu A,B,C,...+Alphabetisches Umbenennen von Punkten, Strecken und Winkeln objects.rename=Umbennen zu A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Zeige den Schenkel nicht an. # Version 2.45 menu.settings.smartboard=Smartboard-Modus shortcuts.zoom=% objects.zoom=Mit der Maus zoomen message.zoom=Verschieben in der Mitte, oder zoomen am Rand. # Version 2.46 menu.special.restricticons=Eingeschrnkte Werkzeugauswahl # Version 2.47 menu.settings.indicate.simple=Nur Vorschau von Punkten menu.settings.beginner=Anfngermodus question.again=Diese Frage erneut stellen. # Version 2.48 definemacro.parameters=Prompt fr die Parameter ("=Name" fixiert) # Version 2.53 menu.actions.angles=Winkel menu.actions.circles=Kreise menu.actions.lines=Geraden menu.actions.points=Punkte # Version 3.00 info.title=Kontexthilfe info.related=Siehe auch ... info.notfound=Hilfethema wurde nicht gefunden! info.noresults=Keine Fundstellen! info.searchresults=- Fundstellen - info.select=- Auswahl - info.search=Suchen info.back=Zurck info.start=Start iconhelp.info=Kontexthilfe (F1)+Hilfe zum gewhlten Werkzeug menu.help.info=Kontexthilfe (F1) myfiledialog.home=Eigene myfiledialog.homedir=ZuL Dateien myfiledialog.windowshome=Eigene Dateien myfiledialog.mkdir=Neues Verzeichnis myfiledialog.back=Zurck menu.file.alwaysclearmacros=Makros vor dem Laden Lschen sure.macros=Alle Benutzermakros lschen? about.language=Sprache bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Backups # Version 3.02 menu.options.hideduplicates=Duplikate verstecken # Version 3.03 menu.options.function=Funktion oder Kurve text.function=Funktion ( % , % ) function.varmin=Von function.varmax=Bis function.dvar=Schrittweite function.var=Variable function.y=Ausdruck fr Y-Wert iconhelp.function=Funktion oder Kurve+(Strg: Benutzerdefinierte Funktion) menu.options.editlast=Letztes Objekt bearbeiten iconhelp.control.edit=Letztes Objekt bearbeiten iconhelp.control.hide=Verstecke Duplikate+bereinanderliegende Objekte verstecken edit.function.title=Funktion oder Kurve iconhelp.control.runmacro=Letztes Makro erneut aufrufen # Version 3.05 point.type.cross=Kreuz point.type.dcross=Diagonales Kreuz shortcuts.pointtype.4=(Strg-9) shortcuts.pointtype.5=(Strg-0) edit.unit=Einheit function.valid=Gltig function.valid.short=gltig function.close=Nahe function.close.short=nahe menu.special.break=Haltepunkte menu.bp.setbreak=Haltepunkt setzen menu.bp.clearbreak=Haltepunkt lschen menu.bp.sethidingbreak=Versteckenden Haltepunkt setzen menu.bp.animatebreak=Haltepunkte animieren iconhelp.animatebreak=Animiere Haltepunkte+Anhalten mit Mausklick message.animatebreak=Animation mit Klick anhalten. (Shift links/rechts: Geschw.) menu.special.exporttemplate=HTML Export mit Vorlage templateload.open=Lade Vorlage templateload.open.action=ffnen menu.settings.doubleclick=Doppelklick fr Makros export.codebase=Codebase # Version 3.12 edit.equation=Gleichung # Version 3.13 warning.load=Beim Laden der Datei kam es zu einem Fehler! warning.save=Beim Speichern der Datei kam es zu einem Fehler! warning.save.backup=Beim Backup der Datei kam es zu einem Fehler! warning.template=Beim Bearbeiten der Vorlage kam es zu einem Fehler! myfiledialog.olddirs=Letzte Verzeichnisse # Version 3.23 menu.settings.minwidth=Minimaleinstellungen bei Grafikexport einhalten menu.settings.squarepoints=Punkte immer als Quadrate zeichnen # Version 3.37 menu.options.export=Einstellungen fr Grafikexport menu.settings.minwidth=Minimale Linienbreite ist 1 menu.settings.minpointsize=Minimale Punktgre respektieren menu.settings.minfontsize=Minimale Schriftgre respektieren minfontsize.title=Minimale Schriftgre einstellen minfontsize.prompt=Minimale Schriftgre (Normalgre: 12) menu.options.minpointsize=Minimale Punktgre ... menu.options.minfontsize=Minimale Schriftgre ... # Version 3.38 menu.settings.scalepdf=Scaliere PDF und EPS 1:1 # Version 3.41 menu.file.clip=Fenster fr Grafikausgabe ... clip.title=Fenster Setzen clip.width=Breite clip.height=Hhe clip.screen=Kein Fenster # Version 3.42 menu.options.arrowsize=Pfeilgre ... arrowsize.title=Pfeilgre arrowsize.prompt=Pfeilgre # Version 3.44 iconhelp.large=Groer Font iconhelp.bold=Fetter Font menu.options.largefont=Groe Schrift menu.options.boldfont=Fette Schrift warning.previewframe=Fenster grer als Zeichenflche! message.move.select=Bewege Punkt oder anderes Objekt (Shift: Mehr Objekte, Strg: Altes sichtbar) # Version 3.46 iconbar.showseparators=Zeige Trennelemente # Version 3.5 menu.sizes=Minimalgren menu.options.minlinesize=Minimale Linienbreite ... minlinesize.title=Minimale Linienbriete minlinesize.prompt=Minimale Linienbreite (Default: 1) arrowsize.prompt=Pfeilgre (Default: 10) menu.options.printscaler=Gren fr Grafikexport setzen ... menu.options.exportsettings=Spezielle Einstellungen fr Grafikexport ... printscaler.title=Grafikexport printscaler.width=Breite (in cm) printscaler.height=Hhe (in cm) printscaler.dpi=Auflsung (in dpi, normalerweise 300) printscaler.linewidth=Linienbreite (in cm, normalerweise 0.02) printscaler.pointsize=Punktgre (in cm, normalerweise 0.07) printscaler.textsize=Textgre (in cm, normalerweise 0.3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=Breite (in Pixel) printscaler.h=Hhe (in Pixel) printscaler.scale=Skalierung (Relativ zum Schirm) printscaler.middle=Aus dem Bildschirm ausschneiden printscaler.sizes=Greneinstellungen verwenden menu.file.savepng=Bild als PNG speichern ... warning.preview=Die Vorschau funktioniert erst ab Java 1.4 vollstndig iconedit.showseparators=Trennlinien printscaler.aspect=Seitenverhltnis beibehalten printscaler.presets=Vorgaben printscaler.preset=Bitte Auswhlen ... printscaler.preset.300dpi=1:1 skaliert mit 300 dpi printscaler.preset.300dpi6=6 cm Breite mit 300 dpi printscaler.preset.300dpi16=16 cm Breite mit 300 dpi printscaler.preset.window=Fenstergre (fr Webgrafiken) printscaler.preset.clip50=50% Fenstergre, ausgeschnitten message.saving=Bitte warten! menu.options.printscalepreview=Vorschau fr Grafikexport (Strg-F3) date=Erstellungsdatum # Version 3.51 help=Hilfe # Version 3.61 editconditionals.title=Bedingte Formatierung editconditionals.hidden=Verstecken editconditionals.superhidden=Vollstndig verstecken editconditionals.visible=Normal editconditionals.showname=Namen anzeigen editconditionals.showvalue=Wert anzeigen editconditionals.background=Hintergrund editconditionals.solid=Nicht Transparent exception.superfluous=berflssiger Text im Ausdruck # Version 3.62 menu.options.selectionsize=Auswahlbereich setzen selectionsize.title=Auswahlbereich selectionsize.prompt=Auswahlbereich (normalerweise 1.5 Punkte) # Version 3.63 select.comment.title=Makrokommentar jobcomment.title=Aufgabenstellung # Version 3.68 edit.area.area=Flche # Version 3.73 myfiledialog.oldfiles=Vorherige Dateien # Version 3.74 iconhelp.load=Konstruktion laden (Strg-o) iconhelp.save=Konstruktion speichern (Strg-s) iconhelp.new=Neue Konstruktion (Strg-n)+Strg: Defaults laden # Version 3.81 warning.loadbackground=Fehler beim Laden des Hintergrunds # Version 3.9 function.x=Ausdruck fr X-Wert (leer bei Funktionen) # Version 3.91 constructiondisplay.select=Auswahl constructiondisplay.all=Alle Objekte constructiondisplay.visible=Sichtbare Objekte (Alt-Strg-9) constructiondisplay.points=Punkte constructiondisplay.lines=Geraden und Strecken constructiondisplay.circles=Kreise constructiondisplay.angles=Winkel constructiondisplay.other=Andere Objekte menu.file.copypng=Grafik auf Zwischenablage exception.clipboardcopy=Fehler beim Kopieren auf die Zwischenablage! menu.options.finegrid=Nur Koordinatenachsen # Vesion 3.93 edit.function.center=Zentrum whlen edit.function.free=Zentrum im Ursprung message.setcenter=Whlen Sie das Zentrum der Kurve! # Vesion 3.94 message.edit=Eigenschaften von Objekten? (Shift: mehr Objekte, Strg: Bedingungen) # Version 3.97 error.image=Bild nicht im selben Verzeichnis wie Konstruktion? filedialog.imageload=Bild Laden filedialog.imageload.action=Laden message.image=Ankerpunkt fr Bild prompt.image=image(,,,) objects.image=Bild shortcuts.image=_ # Version 3.98 exception.depends=Objekt % hngt von diesem Objekt ab. error.depends=Objekt % hngt von diesem Objekt ab. constructiondisplay.sorted=Sortiert nach Erzeugung (Alt-Strg-0) # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Ausdrcke # Version 4.00 iconhelp.image=Bild hinzufgen (_)+2 oder 3 Ankerpunkte message.image=Ankerpunkt % fr Bild message.image.last=Letzter Ankerpunkt (wahlweise) editconditionals.z=Z-Wert # Version 4.01 name.FixedAngle=Fester Winkel # Version 4.04 menu.moresettings=Einstellungen menu.settings.language=Sprache whlen language.title=Sprache whlen language.prompt=Sprache fr den nchsten Programmstart # Version 4.05 constructiondisplay.invalid=Ungltige Objekte # Version 4.08 menu.settings.constructiondisplay=Dauerhafte Objektliste (F11) constructiondisplay.editconditions=Bedingungen bearbeiten constructiondisplay.delete=Lsche ausgewhlte Objekte constructiondisplay.hide=Verstecken oder Anzeigen (Alt-Strg-4) constructiondisplay.superhide=Vollstndig Verstecken (Alt-Strg-5) # Version 4.2 edit.expression.slider=Als Schieber menu.grid.options=Gitteroptionen menu.options.leftsnap=Einschnappen mit linker Maustaste menu.settings.boundingbox=Bounding Box (bb) Datei erzeugen # Version 4.3 latexsettings.title=LaTeX Einstellungen latexsettings.boundingbox=Erzeuge bb-Datei latexsettings.latexinput=Erzeuge ztx-Datei latexsettings.doubledollar=LaTeX erzeugt $$...$$ latexsettings.dollar=LaTeX erzeugt $...$ latexsettings.nodollar=LaTeX erzeugt alle anderen Strings latexsettings.fullpath=Pfad zur Datei ausgeben printscaler.preset.latex10=LaTeX mit 10pt printscaler.preset.300dpi12=12 cm Breite mit 300dpi printscaler.latex=Fr LaTeX Speichern menu.background.usewidth=Nur Hhe anpassen # Version 4.4 menu.options.restricted=Eingeschrnkte Schnitte menu.options.sizes=Gren ... sizesdialog.title=Gren minlinesize.prompt=Minimale Linienbreite (Default: 1) minpointsize.prompt=Minimale Punktgre (Default: 3) minfontsize.prompt=Minimale Schriftgre (Default: 12) arrowsize.prompt=Pfeilgre (Default: 10) selectionsize.prompt=Auswahlbereich (Default: 1.5) warning.load.macros=Fehler beim Laden von Makros! warning.macrodefinition=% wird benutzt, ist aber nicht im Makro enthalten! edit.circle.bounds=Kreisbogen edit.circle.range=Kreisbogen setzen ... # Version 4.5 edit.track.dmin=Minimale Schrittweite (normal: 0.001) # Version 4.6 menu.settings.smallicons=Kleine Icons verwenden menu.settings.oldicons=Alte Icons verwenden # Version 4.7 text.trackof=Ortslinie von % wenn sich % verndert # Version 5 # Fix error.image edit.discrete=Diskret error.fixedsegment=Diese Strecke kann nicht fixiert werden! export.zoom=Zoom mit Maus export.popup=Popup Menu # Version 5.1 edit.intersection.alternate=Kann wechseln export.restrictedmove=Eingeschrnkte Bewegung # Version 5.3 message.bindpoint=Binde Punkt an Objekt (Shift: stetig, Strg: innerhalb) edit.point.inside=Innerhalb edit.point.increment=Gitterweite (0=frei) edit.more=Mehr ... menu.settings.more=Knopf fr bedingte Formatierung menu.file.loadexamples=Lade Beispiel ... menu.options.editgrid=Gitter einstellen ... constructiondisplay.description=Zeige Beschreibung (Alt-Strg-1) constructiondisplay.size=Zeige Gre oder Koordinaten (Alt-Strg-2) constructiondisplay.formula=Zeige Formel (Alt-Strg-3) menu.settings.germanpoints=Verwende | in Koordinaten # Version 6.2 # fix iconhelp.function menu.options.userfunction=Benutzerdefinierte Funktion function.vars=Variable function.f=Funktionsausdruck # Version 6.4 menu.special.macrobar=Makrozeile menu.special.defaultmacrosinbar=Zeige Defaultmakros help.related=Siehe auch help.nexttopic=Nchstes Thema ./src/rene/zirkel/docs/CVS/RevisionCache/ZirkelProperties.properties#1.30000644000175000017500000010744511155152774025041 0ustar yvesyvesprogram.name=CaRMetal program.version=2.9.8.3 program.date=2009-02 version=Version homefile=index.html homepage=http://www.z-u-l.de/ about.title=About this Program about.name=School Geometry about.programmed=Programmed by title=School Geometry close=Close ok=OK cancel=Cancel done=Well Done! message=Message yes=Yes no=No abort=Abort true=true false=false warning.nojob=This isn't an Assignment! warning.print=Printing failed! warning.reset=This option is enabled for the next start of Z.u.L.! question.title=Question question.intersection=Create this intersection? question.pointon=Create a point on this object? colors.black=Black colors.blue=Blue colors.green=Green colors.brown=Brown colors.cyan=Cyan colors.red=Red objects.point=Point objects.segment=Segment objects.line=Line objects.ray=Ray objects.circle=Circle objects.intersection=Intersection objects.move=Move Point objects.hide=Hide Object objects.edit=Edit Point objects.tracker=Track a Point or a Line objects.objecttracker=Track a Point or a Line on an Object objects.parallel=Parallel Line objects.plumb=Perpendicular Line objects.circle3=Circle from 3 Points objects.midpoint=Midpoint objects.quadric=Conic Section objects.angle=Angle objects.boundedpoint=Point on an Object objects.parameter=Set Macro Parameters objects.targets=Set Macro Targets objects.definejob=Define an Assignment objects.runmacro=Run a Macro objects.delete=Delete Objects and their Children objects.reorder=Push Objects to the Background objects.animate=Animation objects.expression=Arithmetic Expression objects.area=Polygon objects.text=Text objects.fixedcircle=Circle with fixed Size objects.fixedangle=Fixed Angle objects.fixedsegment=Segment with fixed Length iconhelp.point=Point (p) iconhelp.segment=Segment (s) iconhelp.line=Line (g) iconhelp.ray=Ray (r) iconhelp.circle=Circle (c) iconhelp.intersection=Intersection (i) iconhelp.move=Move a point (m)+Ctrl (Points): Show old construction+Ctrl: Move fixed objects+Shift: Move more than one object iconhelp.hide=Hide objects (h)+Shift: Hide completely iconhelp.edit=Edit objects (e)+Shift: Edit more objects+Ctrl: Edit last object iconhelp.tracker=Track a point or a line (t) iconhelp.objecttracker=Automatic track of a point or a line (o)+Strg: Keep Track (Shift-Enter) iconhelp.parallel=Parallel line (1) iconhelp.plumb=Perpendicular line (2) iconhelp.circle3=Circle from 3 points (3) iconhelp.midpoint=Midpoint (4) iconhelp.quadric=Conic section through 5 points ($) iconhelp.angle=Angle (a) iconhelp.boundedpoint=Create a point on an abject (5)+Shift: Not fixed on object iconhelp.hidden=Show or hide hidden objects (F9) iconhelp.color=Set default object color (Ctrl-1,2,3,4) iconhelp.type=Set default point type (Ctrl-5,6,7,8,9,0) iconhelp.type0=Set default point type iconhelp.thickness=Set default object thickness (Alt-5,6,7) iconhelp.back=Delete last object (<-) iconhelp.thickness0=Set default object thickness iconhelp.partial=Create partial circles by default (Ctrl-F9) iconhelp.plines=Create partial lines by default (Ctrl-F10) iconhelp.arrow=Create segments as vectors by default (Ctrl-F11) iconhelp.showcolor=Show selected colors only (Alt-1,2,3,4) iconhelp.runmacro=Run a macro (9)+Ctrl: Run last Macro iconhelp.macro=Set macro parameters, targets and definition (7,8,Ctrl-5) iconhelp.expression=Arithmetic expression (x) iconhelp.showvalue=Show object values by default (Ctrl-F7) iconhelp.showname=Show object names by default (Ctrl-F6) iconhelp.obtuse=Create angles larger than 180\u00B0 by default (Ctrl-F12) iconhelp.solid=Do not use transparency by default iconhelp.longnames=Use long object names by default (Ctrl-F8) iconhelp.grid=Show the grid (F12) iconhelp.comment=Show and edit comment (F10) iconhelp.defaults=Default settings iconhelp.macro0=Set macro parameters, targets and definition iconhelp.visual=Toggle visual construction mode iconhelp.replay=Replay the construction iconhelp.oneforward=Forward iconhelp.fastforward=Fast forward iconhelp.allforward=To the end iconhelp.oneback=Back iconhelp.fastback=Fast back iconhelp.allback=To the start iconhelp.close=Close iconhelp.area=Polygon (0) iconhelp.text=Multiline text (b) iconhelp.fixedcircle=Circle with fixed radius (,) iconhelp.fixedangle=Angle with fixed size (.) iconhelp.fixedsegment=Segment with fixed length (#) iconhelp.animate=Animation of a point (") iconhelp.delete=Delete objects and their children (Del) iconhelp.undo=Undo last removals (Ctrl-z) iconhelp.nextbreak=Jump to next break iconhelp.setbreak=Toggle break+Shift: Hidden breakpoint iconhelp.zoom=Zoom with the mouse (%) shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.showcolor.4= shortcuts.showcolor.5= shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) menu.file=File menu.file.clearmacros=Clear User Macros menu.file.load=Load a Construction ... (Ctrl-o) menu.file.loadjob=Load an Assignment ... (Ctrl-j) menu.file.savejob=Save as Assignment ... (Ctrl-k) menu.file.save=Save this Construction (Ctrl-s) menu.file.saveas=Save this Construction to ... (Ctrl-a) menu.file.includemacros=Include all Macros menu.file.exit=Exit (Alt-F4) menu.file.print=Print ... menu.file.print.isoscale=Scale 1:1 in cm menu.file.savebmp=Save Graphics (as BMP) ... menu.file.savefig=Save Graphics (as FIG) ... menu.file.loadrun=Load a Decriptive Construction ... (Ctrl-r) menu.file.editrun=Edit a Descriptive Construction ... (Ctrl-x) menu.actions=Edit menu.actions.elementary=Elementary Tools menu.actions.complex=More Complex Tools menu.actions.move=Moving Tools menu.actions.decorative=Decorative Objects menu.options=Options menu.options.visual=Toggle Visual Mode (Ctrl-F6) menu.options.hidden=Show hidden Objects (F9) menu.options.comment=Edit Comment (F10) menu.options.constructiondisplay=Show Description menu.options.grid=Show Grid (F12) menu.options.setgrid=Set Grid Width ... menu.options.showcolor=Show Color menu.options.defaultcolor=Default Color menu.options.defaultthickness=Default Thickness menu.options.defaulttype=Default Point Type menu.options.all=All menu.options.setdigits=Set Digits menu.options.shownames=Show Object Names (Ctrl-F6) menu.options.longnames=Long Object Names (Ctrl-F8) menu.options.obtuse=Use Angles larger than 180\u00B0 (Ctrl-F12) menu.options.solid=Do not use Transparency menu.options.showvalues=Show Object Values (Ctrl-F7) menu.options.partial=Partial Circles (Ctrl-F9) menu.options.plines=Partial Lines (Ctrl-F10) menu.options.arrow=Arrows (Ctrl-F11) menu.options.editicons=Edit the Toolbox menu.options.back=Delete last Object (<-) menu.options.undo=Undo Delete (Ctrl-z) menu.zoom=Zoom menu.zoom.in=In (+) menu.zoom.out=Out (-) menu.zoom.left=Left (Cursor-Left) menu.zoom.right=Right (Cursor-Right) menu.zoom.up=Up (Cursor-Up) menu.zoom.down=Down (Cursor-Down) menu.macros=Macros menu.special.definemacro=Define a Macro (Ctrl-F5) menu.special.runmacro=Run a Macro ... (F5) menu.special.savemacros=Save Macros ... menu.special.loadmacros=Load Macros ... menu.special.deletemacros=Delete Macros ... menu.special=Special menu.special.testjob=Test this Assignment (Ctrl-F1) menu.special.jobcomment=Set Assignment Text ... (F8) menu.special.export=Create an HTML File ... (Ctrl-e) menu.special.replay=Replay this Construction menu.help=Help menu.help.about=About this program menu.help.browser=Explore Help and Demos menu.help.text=Simple Help menu.help.configure=Configure the Browser menu.help.help=Help (F1) menu.help.macros=About Macros menu.help.tools=The Tools menu.help.gui=User Interface menu.help.interactive=Descriptive Constructions menu.help.tips=Some Tips menu.settings=Special Settings menu.settings.fullicons=Use two full icon bars menu.settings.utf=Use UTF-8 encoding menu.settings.autohide=Hide second intersection point menu.settings.iconbartop=Iconbar above construction menu.settings.showtips=Show tooltips menu.settings.simplegraphics=Use simpler graphics menu.settings.sure=Confirm before loading and closing menu.settings.pointon=Ask before creating a point on an object menu.settings.intersection=Ask before creating an intersection menu.settings.choice=Show selection dialog for objects menu.settings.movename=Show object values when moving menu.settings.movefixname=Show fixed object values when moving menu.settings.restricted=Toggle school mode menu.colors=Set the Colors colors.default=Use Default Colors colors.color0=Color 1 (Black) colors.color1=Color 2 (Green) colors.color2=Color 3 (Blue) colors.color3=Color 4 (Brown) colors.color4=Color 5 (Cyan) colors.color5=Color 6 (Red) colors.background=Background colors.select=Select colors.target=Target myfiledialog.dir=Directory myfiledialog.file=File myfiledialog.pattern=Extensions filedialog.open=Open filedialog.saveas=Save as ... filedialog.open.action=Open filedialog.saveas.action=Save filedialog.htmlsave=Save HTML filedialog.htmlsave.action=Save pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Save load=Load abort=Abort bound.release=Release Point bound.bind=Bind to Object bound.error=Object not found before intersection! constructiondisplay.edit=Edit Object constructiondisplay.copy=Copy to Clipboard edit.Title=Properties edit.name=Name edit.hidden=Hidden edit.text=Text edit.fixed=Fixed edit.color=Color edit.ok=OK edit.cancel=Cancel edit.showname=Show Name edit.point.title=Edit Point edit.point.type=Type edit.point.x=X edit.point.y=Y edit.point.intersection=Different from edit.point.showvalue=Show Coordinates edit.point.colortype=Thickness edit.point.bound=Bound edit.point.away=Away from edit.point.close=Close to edit.point.free=Free edit.line.title=Edit Line, Ray, Segment edit.line.normal=Normal edit.line.thick=Thick edit.line.thin=Thin edit.line.invisible=Invisible edit.line.type=Type edit.segment.length=Length edit.segment.showvalue=Show Length edit.circle.title=Edit Circle edit.circle.length=Radius edit.circle.partial=Partial Display edit.plumb.restricted=Restricted edit.angle.title=Edit Angle edit.angle.length=Size edit.angle.displaysize=Display Size edit.angle.normal=Normal edit.angle.small=Small edit.angle.large=Large edit.expression.title=Edit Expression edit.expression=Arithmetic Expression edit.expression.prompt=Explanation edit.area.title=Edit Polygon edit.area.back=In Background export.title=HTML Export export.pagetitle=Title of Page export.width=Width export.height=Height export.jar=Jar file export.comment=Save comment export.file=Construction File export.job=Display as Assignment export.color=Color export.backgroundcolor=Use for page background export.appletcolor=Use for applet background export.plain=Plain export.3D=Border export.breaks=Replay with Breakpoints export.icons=Border and Icons export.full=Border, Icons and Status export.nonvisual=Border, Icons and Input Line export.style=Applet Style export.setcolor=Choose Color export.savefirst=File has not been saved! export.soltext=Solution export.stylesheet=CSS Style File export.solution=Solution File export.jumpsol=Jump to Solution export.linksol=Link to Solution export.savesol=Save Solution File export.track=Track Point export.digits=Save Digits export.setsize=Get Size export.signature=Created using C.a.R. export.colors=Save defined Colors export.background=Save defined Background help.title=Help help.error=Could not open the help file! help.file=schoolgeometry.txt coloreditor.title=Edit Color coloreditor.red=Red coloreditor.green=Green coloreditor.blue=Blue coloreditor.color=Your Color comment.title=Construction Comment comment.set=Set comment.cancel=Cancel comment.close=Close iconedit.title=Edit Icon Bar iconedit.twobars=Icon box has two lines jobcomment.title=Assignment select.title=Selection select.ok=OK select.cancel=Cancel select.comment=Show Comment select.all=All message.circle.midpoint=Circle: Midpoint? message.circle.radius=Circle: Point on the circle (shift: fix radius)? message.fixedcircle.midpoint=Circle with fixed size: Midpoint? message.fixedcircle.radius=Circle with fixed size: Radius? message.line.first=Line: First point? message.line.second=Line: Second point? message.ray.first=Ray: Root point? message.ray.second=Ray: Second point? message.move.select=Move: Select an object (shift: more)! message.move.move=Move: Move the point? message.point=Point: Set a point (shift: fix)! message.segment.first=Segment: First point? message.segment.second=Segment: Second point (shift: fixed length)? message.fixedsegment.first=Segment with fixed length: First point? message.fixedsegment.second=Segment with fixed length: Click somewhere! message.intersection.first=Intersection: First object or the intersection? message.intersection.second=Intersection: First object? message.hide=Hide/Show: Select an object! message.tracker.select=Track: Point or line to track (shift: more)? message.tracker.selectpoint=Track: Point to move? message.tracker.move=Track: Move the point! message.objecttracker.select=Autotrack: Point or line to track (shift: more)? message.objecttracker.object=Autotrack: Line or circle, point on object, slider? message.objecttracker.selectpoint=Autotrack: Point to be moved on line or circle? message.objecttracker.selectanypoint=Autotrack: Any other point to move? message.objecttracker.move=Autotrack: Move the point! message.objecttracker.start=Autotrack: Start the Animation! message.parallel.first=Parallel: Line? message.parallel.second=Parallel: Point? message.plumb.first=Perpendicular: Line? message.plumb.second=Perpendicular: Point? message.circle3.first=Circle: First radius point? message.circle3.second=Circle: Second radius point? message.circle3.midpoint=Circle: Midpoint? message.midpoint.first=Midpoint: First point? message.midpoint.second=Midpoint: Second point? message.quadric=Conic Section: Point number message.angle.first=Angle: First angle point? message.angle.root=Angle: Corner point? message.angle.second=Angle: Second angle point (shift: fixed size)? message.fixedangle.first=Angle with fixed size: First angle point? message.fixedangle.root=Angle with fixed size: Base point? message.fixedangle.second=Angle with fixed size: Click somewhere! message.label.select=Move Label: Select a label! message.label.move=Move Label: Move the label! message.boundedpoint=Point on Object: Circle or line object (shift: continuous, ctrl: inside)? message.parameters=Macro Parameters: Parameter objects? message.targets=Macro Targets: Target objects? message.savejob.first=Define Assignment: Last displayed object? message.savejob.second=Define Assignment: Target object (shift: don't check)? message.savejob.third=Define Assignment: Further objects to be displayed? message.runmacro=Macro %: %. % - % message.runmacro.return=(SPACE chooses %) message.runmacro.fixes=(SHIFT fixes selection) message.delete=Delete: Select an object! message.reorder=Reorder: Select an object! message.expression=Arithmetic Expression: Select a place! message.area=Filled polygon: Corner point? message.text=Text: Select a place! message.animator.point=Animation: Point to animate? message.animator.segment=Animation: Circle or a segment? message.animator.running=Animation: Running (click to stop)! message.range.first=Set range: Draw the circle from which point ... message.range.second=Set range: ... to which point? message.setaway.away=Keep the intersection away from which point? message.setaway.close=Keep the intersection close to which point? objectsedit.title=Edit Properties point.type.square=Square point.type.diamond=Diamond point.type.circle=Circle point.type.dot=Dot color.type.normal=Normal color.type.thick=Thick color.type.thin=Thin color.type.invisible=Invisible text.point=Point at %, % text.line=Line through % and % text.segment=Line segment from % to % text.segment.fixed=Line segment from % to % with length % text.ray=Ray from % pointing to % text.intersection=Intersection between % and % text.circle=Circle around % through % text.circle.fixed=Circle around % through % with radius % text.fixedcircle=Circle around % with radius % text.circle3=Circle around % with radius from % to % text.parallel=Parallel line through % to % text.midpoint=Midpoint between % and % text.quadric=Conic section through % text.plumb=Perpendicular line through % to % text.angle=Angle % - % - % text.angle.fixed=Angle % - % - % with size % text.boundedpoint=Point on % text.expression=Expression "%" at %, % text.area=Polygon text.fixedangle=Angle % - % with size % name.Point=Point name.Intersection=Intersection name.OtherIntersection=Intersection name.Circle=Circle name.Circle3=Circle name.Segment=Segment name.Ray=Ray name.Line=Line name.TwoPointLine=Line with two Points name.Parallel=Parallel name.Midpoint=Midpoint name.Quadric=Quadric name.Plumb=Plumb name.Angle=Angle name.PointOn=ObjectPoint name.Expression=Expression name.Polygon=Polygon prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.angle==a(,,) prompt.area=A(,,) prompt.quadric=quadric(,,,,) prompt.function=function(,,,,,) name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=pl name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=p name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=poly name.short.Function=f popup.hidden=Show hidden objects popup.replay=Replay construction popup.empty=--- Macros --- replay.title=Replay reorder.title=Push objects reorder.message=insert after reorder.notfound=Object not found! reorder.warning=Could not do that! setgrid.title=Grid Width setgrid.prompt=Enter new grid width setgrid.set=Set definemacro.title=Define Macro definemacro.name=Name definemacro.comment=Macro Comment definemacro.noparams=Need parameters for the macro! definemacro.nomacro=There is no macro to run! definemacro.targetsonly=Hide construction definemacro.invisible=Hide completely definemacro.promptfor=Prompt for macro.replace.title=Macro Replacement macro.replace=Replace Macro: macro.replace.all=All macro.usage=Wrong use of macro (see tips)! macro.prompt.title=Parameter Prompt macro.prompt.prompt=Enter a value for the parameter macro.prompt.illegal=Illegal value! digits.title=Set Digits digits.edit=Edit digits.lengths=Display digits.angles=Angles editrun.title=Edit Descriptive Construction editrun.run=Save and Run editrun.load=Other Description sure.title=Are you sure? sure.macros=Delete all user macros? sure.delete=Forget current changes? close.title=End close.prompt=Really close this program? file.exists.title=File Exists file.exists.overwrite=File exists! Overwrite? exception.nparams=Illegal number of Parameters! exception.notfound=Object not found, or defined after expression! exception.type=Illegal Object Type! exception.expression=Invalid Expression! exception.canfix=Object cannot be fixed! exception.fix=Value invalid! exception.novalue=Value invalid! exception.elementary=Invalid element in expression! exception.bracket=Closing brackets missing! exception.quotes=Closing quotes missing! exception.dot=Two dots in number! exception.nodigit=No digit found in number! exception.function=Unknown function! exception.parameter=Illegal function parameter! exception.macro=Illegal macro parameter! exception.name=Need a Name! exception.job=Illegal Job Paramters! exception.track=Illegal Track Parameters! exception.animate=Illegal Animation Parameters! exception.boolean=Boolean Value must be true of false! exception.value=Illegal Value! exception.color=Illegal Color! exception.colortype=Illegal Thickness! exception.type=Illegal Point Type! exception.macroparameter=Illegal Macro Parameter! exception.macrotarget=Illegal Macro Target! exception.prompt=Illegal prompt oject! exception.prompt.parameter=Prompt object may not be a parameter! exception.parameters=Illegal Parameter! exception.brackets=Illegal Brackets! exception.double=Name is not unique! error.setaway=This point is not defined before the intersection! error.objecttracker.depends=The point is bound to another object! constructiondisplay.title=Construction function.hide=Hide function.hide.short=hide function.rename=Name function.rename.short=name function.value=Value function.value.short=value function.window=Window function.window.short=W function.color=Color function.color.short=col function.thickness=Thickness function.thickness.short=th function.type=Type function.type.short=type function.partial=Partial function.partial.short=part function.fill=Fill function.fill.short=fill function.back=Background function.back.short=back function.acute=Acute function.acute.short=acute function.obtuse=Obtuse function.obtuse.short=obtuse function.solid=Solid function.solid.short=solid function restrict=Restrict function restrict.short=restrict expression.value=Value configure.title=Set Browser configure.prompt=Enter Browser Command # New Resources: background.error=Could not load the Image (GIF or JPG!). menu.background=Background menu.background.grab=Current as Background menu.background.clear=Clear Background menu.background.load=Load Background Picture ... menu.background.usesize=Resize to Picture menu.background.tile=Tile Background menu.background.center=Center Background iconhelp.grab=Set or Clear Background filedialog.backgroundload=Load Background filedialog.backgroundload.action=Load # New Resources in Version 2.14 menu.file.compress=Compress always menu.file.savesvg=Save graphics (as SVG) ... # Version 2.15 loading=Loading, please wait! # Version 2.18 and 2.19 menu.settings.font.default=Default font menu.settings.font.bold=Bold font menu.settings.font.large=Large font menu.file.saveeps=Save graphics (as EPS) ... menu.fonts=Font # Version 2.20 bmpscaler.title=Scale Bitmap bmpscaler.width=Width bmpscaler.height=Height bmpscaler.scale=Factor (press Return) bmpscaler.illegal=Illegal Value # Version 2.21 renamemacro.title=Rename Macro renamemacro.name=New macro name menu.special.renamemacro=Rename Macro ... # Version 2.23 savequestion.title=Save Construction savequestion.qsave=Save Changes? # Version 2.25 exception.printsize=Page too small for this construction! iconhelp.nohelp=No help available iconhelp.type?=Point type iconhelp.thickness?=Thickness iconhelp.color?=Color iconhelp.filled=Filled object iconhelp.isback=Draws in background iconhelp.inverse=Reflected angle iconhelp.angle?=Size # Version 2.28 message.objecttracker.stop=Autotrack: Click to stop (shift left/right for speed)! # Version 2.31 menu.settings.indicate=Preview generated objects menu.options.other=Settings menu.help.welcome=News on current version iconhelp.twolines=Icons in two lines iconhelp.qintersection=Ask for intersections iconhelp.qchoice=Show dialog for object selection iconhelp.qpointon=Ask to create point on object iconhelp.noindicate=Do not indicate objects under mouse # Version 2.33 menu.file.new=New Construction (Ctrl-n) # Version 2.34 edit.text.title=Text Settings edit.text.settings=Further Settings menu.settings.filedialog=Replace system file dialog # Version 2.35 menu.settings.bitmapbackground=Use Background Color in Bitmaps # Version 2.36 menu.file.savegraphics=Save Graphics as ... bmpscaler.title=Scale Graphics # Version 2.37 menu.file.savepdf=Save Graphics (as PDF) iconhelp.chord=Show as segment # Version 2.39 message.setfixedangle.first=Set fixed angle: First point? message.setfixedangle.second=Set fixed angle: Base point? message.setfixedangle.third=Set fixed angle: Third point? edit.fixedangle.set=Set Size ... message.setfixedcircle.first=Set fixed circle: First point? message.setfixedcircle.second=Set fixed circle: Second point? edit.fixedcircle.set=Set Size ... # Version 2.41 name.short.Track=Tr text.track=Track of % when % moves on % trackquestion.keep=Keep Track in Construction? trackquestion.title=Keep Track menu.options.track=Keep Track (Shift-Enter) iconhelp.indicate=Preview of construction results iconhelp.nohelp=No help available! # Version 2.42 objects.draw=Paint with Mouse menu.options.cleardraw=Clear Painting (Esc) iconhelp.draw=Paint with Mouse message.draw=Paint with Mouse (ESC to clear) shortcuts.draw=; # Version 2.43 message.rename=Rename A,B,C,...: Select objects! iconhelp.rename=Rename A,B,C,... objects.rename=Rename A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Don't show angle ray # Version 2.45 menu.settings.smartboard=Smartboard Mode shortcuts.zoom=% objects.zoom=Zoom with Mouse message.zoom=Drag center, or zoom in and out # Version 2.46 menu.special.restricticons=Restricted Icon Set # Version 2.47 menu.settings.indicate.simple=Indicate Points only menu.settings.beginner=Beginner Mode question.again=Always ask this question. # Version 2.49 definemacro.parameters=Parameter Prompt(s) ("=name" fixes) # Version 2.53 menu.actions.angles=Angles menu.actions.circles=Circles menu.actions.lines=Lines menu.actions.points=Points # Version 3.00 info.title=Context Help info.related=Related Topics info.notfound=Topic not found! info.noresults=String not found! info.searchresults=- Search results - info.select=- Select - info.search=Search info.back=Back info.start=Start iconhelp.info=Context help menu.help.info=Context help myfiledialog.homedir=CaR Files myfiledialog.windowshome=My Documents myfiledialog.mkdir=Make Directory myfiledialog.back=Back menu.file.alwaysclearmacros=Clear Macros before Loading about.language=Language bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Backups # Version 3.02 menu.options.hideduplicates=Hide Duplicates # Version 3.03 menu.options.function=Create a function or curve text.function=Function ( % , % ) function.varmin=From function.varmax=To function.dvar=Step function.var=Variable function.y=Expression for Y iconhelp.function=Create a Function+(Ctrl: Create a user defined function) menu.options.editlast=Edit last Object iconhelp.control.edit=Edit last Object iconhelp.control.hide=Hide Duplicates edit.function.title=Function or Curve iconhelp.control.runmacro=Run last macro again # Version 3.05 point.type.cross=Cross point.type.dcross=Diagonal Cross shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Unit menu.special.break=Breakpoints menu.bp.setbreak=Set Breakpoint menu.bp.clearbreak=Clear Breakpoint menu.bp.sethidingbreak=Set Hiding Breakpoint menu.bp.animatebreak=Animate Breakpoints iconhelp.animatebreak=Animate breakpoints message.animatebreak=Animate breakpoints: click to stop (shift left/right for speed)! menu.special.exporttemplate=HTML Export with Templates templateload.open=Load Template templateload.open.action=Open menu.settings.doubleclick=Double click for macros export.codebase=Codebase # Version 3.12 edit.equation=Equation # Version 3.23 menu.settings.squarepoints=Draw points always as squares # Version 3.37 menu.options.export=Graphic Export Settings menu.settings.minwidth=Minimal line width is 1 menu.settings.minpointsize=Respect minimal point size menu.settings.minfontsize=Respect minimal font size menu.options.minpointsize=Minimal Point Size menu.options.minfontsize=Minimal Font Size # Version 3.38 menu.settings.scalepdf=Scale PDF and EPS output 1:1 # Version 3.41 menu.file.clip=Clip for Graphics Output ... clip.title=Set Clipping clip.width=Width clip.height=Height clip.screen=No Clipping # Version 3.44 iconhelp.large=Use large font size iconhelp.bold=Use bold font menu.options.largefont=Large Font Size menu.options.boldfont=Bold Font warning.previewframe=Frame larger than window! message.move.select=Move: Select a point (shift: more points, ctrl: show old state)! # Version 3.46 iconbar.showseparators=Show Separators # Version 3.48 menu.options.printscaler=Set Export Size ... menu.options.exportsettings=Special Export Settings ... printscaler.title=Set Export Size printscaler.width=Width (in cm) printscaler.height=Height (in cm) printscaler.dpi=Resolution (in dpi, default 300) printscaler.linewidth=Line Width (in cm, default 0.02) printscaler.pointsize=Point Size (in cm, default 0.07) printscaler.textsize=Text Size (in cm, default 0.3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=Width (in pixel) printscaler.h=Height (in pixel) printscaler.scale=Scale (relativ to screen) printscaler.middle=Cut out from screen printscaler.sizes=Use Values menu.file.savepng=Save Graphics as PNG warning.preview=Preview will not work completely with Java 1.1 iconedit.showseparators=Show Separators printscaler.aspect=Keep Aspect Ratio printscaler.presets=Presets printscaler.preset=Make a Choice printscaler.preset.300dpi=Exactly scaled with 300 DPI printscaler.preset.300dpi6=6 cm Width with 300 DPI printscaler.preset.300dpi16=16 cm Width with 300 DPI printscaler.preset.window=Window Size printscaler.preset.clip50=Window Size Clipped 50% message.saving=Please wait! menu.options.printscalepreview=Export Preview (Ctrl-F3) date=Build # Version 3.51 help=Help # Version 3.61 editconditionals.title=Edit Conditionals editconditionals.hidden=Hidden editconditionals.superhidden=Completely Hidden editconditionals.visible=Normal editconditionals.showname=Show Name editconditionals.showvalue=Show Value editconditionals.background=Background editconditionals.solid=Not Transparent exception.superfluous=Superfluous Text in Expression # Version 3.63 select.comment.title=Macro Comment # Version 3.68 edit.area.area=Area # Version 3.73 myfiledialog.oldfiles=Old Files # Version 3.74 iconhelp.load=Load Construction (Ctrl-o) iconhelp.save=Save Construction (Ctrl-s) iconhelp.new=New Construction (Ctrl-n)+Ctrl: Load defaults # Version 3.81 warning.loadbackground=Error loading background # Version 3.9 function.x=Expression for X (empty for functions) # Version 3.91 constructiondisplay.select=Select constructiondisplay.all=All Objects constructiondisplay.visible=Visible Objects (Alt-Ctrl-9) constructiondisplay.points=Points constructiondisplay.lines=Lines constructiondisplay.circles=Circles constructiondisplay.angles=Angles constructiondisplay.other=Other Objects menu.file.copypng=Copy to Clipboard exception.clipboardcopy=Copy failed! menu.options.finegrid=Axis only # Vesion 3.93 edit.function.center=Set Center edit.function.free=Release Center message.setcenter=Select the center point! # Vesion 3.94 message.edit=Edit: Objekt (shift: more objects, ctrl: conditionals)? # Version 3.97 error.image=Image not in same folder as construction? filedialog.imageload=Load Image filedialog.imageload.action=Load prompt.image=image(,,,) objects.image=Image shortcuts.image=_ # Version 3.98 exception.depends=Object % depends on current object. error.depends=Object % depends on current object. constructiondisplay.sorted=Sorted by Order of Construction (Alt-Ctrl-0) # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Expressions # Version 4.00 iconhelp.image=Load Image (_) message.image=Image anchor point % message.image.last=Last image anchor point (or choose selected point) editconditionals.z=Z-Buffer Value # Version 4.01 name.FixedAngle=Fixed Angle # Version 4.04 menu.moresettings=Settings menu.settings.language=Set Language language.title=Set Language language.prompt=Language for next program start # Version 4.05 constructiondisplay.invalid=Invalid Objects # Version 4.08 menu.settings.constructiondisplay=Permanent Construction Display (F11) # Version 4.09 constructiondisplay.editconditions=Edit Conditions constructiondisplay.delete=Delete selected Objects constructiondisplay.hide=Hide or Show (Alt-Ctrl-4) constructiondisplay.superhide=Super Hide (Alt-Ctrl-5) # Version 4.2 edit.expression.slider=Show as Slider menu.grid.options=Grid Options menu.options.leftsnap=Snap with Left Button Drag menu.settings.boundingbox=Create Bounding Box (bb) file # Version 4.3 latexsettings.title=Setup LaTeX export latexsettings.boundingbox=Create Bounding box bb-file latexsettings.latexinput=Create LaTeX idx-file latexsettings.doubledollar=LaTeX does $$...$$ latexsettings.dollar=LaTeX does $...$ latexsettings.nodollar=LaTeX does all other strings latexsettings.fullpath=Use file path printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=12 cm width with 300 DPI printscaler.latex=Save for LaTeX menu.background.usewidth=Adjust height only # Version 4.4 menu.options.restricted=Restrict Intersections menu.options.sizes=Set Sizes ... sizesdialog.title=Sizes minlinesize.prompt=Minimal line width (default: 1) minpointsize.prompt=Minimal point size (default: 3) minfontsize.prompt=Minimal font size (default: 12) arrowsize.prompt=Arrow size (default: 10) selectionsize.prompt=Selection size (default: 1.5) warning.loadmacros=Error while loading a macro! warning.macrodefinition=% is used, but is not in macro! edit.circle.bounds=Show as Arc edit.circle.range=Set Arc ... # Version 4.5 edit.track.dmin=Minimal step (default 0.001) # Version 4.6 menu.settings.smallicons=Use small icons menu.settings.oldicons=Use old icons # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof=Track of % when % changes # Version 5 # Fix error.image edit.discrete=Discrete error.fixedsegment=Cannot fix this segment! export.zoom=Zoom with mouse export.popup=Popup menu # Version 5.1 edit.intersection.alternate=Can alternate export.restrictedmove=Restrict Movements # Version 6.0 # Fix message.boundedpoint # Fix iconhelp.new message.bindpoint=Bind point to object (Shift: continuous, Ctrl: inside object) edit.point.inside=Inside object edit.point.increment=Grid increment (0=free) edit.more=More ... menu.settings.more=Show button for conditional formats menu.file.loadexamples=Load Example ... menu.options.editgrid=Edit coordinate grid ... # Version 6.1 constructiondisplay.description=Show Description (Alt-Ctrl-1) constructiondisplay.size=Show Size or Coordinates (Alt-Ctrl-2) constructiondisplay.formula=Show Formula (Alt-Ctrl-3) menu.settings.germanpoints=Use | in coordinates # Version 6.2 # fix iconhelp.function menu.options.userfunction=User defined Function function.vars=Variables function.f=Function expression # Version 6.4 menu.special.macrobar=Macro bar menu.special.defaultmacrosinbar=Show default macros help.related=Related topics help.nexttopic=Next topic ./src/rene/zirkel/docs/CVS/RevisionCache/ZirkelProperties.properties#1.60000644000175000017500000010744311315675452025043 0ustar yvesyvesprogram.name=CaRMetal program.version=3.1.1 program.date=2009-09 version=Version homefile=index.html homepage=http://www.z-u-l.de/ about.title=About this Program about.name=School Geometry about.programmed=Programmed by title=School Geometry close=Close ok=OK cancel=Cancel done=Well Done! message=Message yes=Yes no=No abort=Abort true=true false=false warning.nojob=This isn't an Assignment! warning.print=Printing failed! warning.reset=This option is enabled for the next start of Z.u.L.! question.title=Question question.intersection=Create this intersection? question.pointon=Create a point on this object? colors.black=Black colors.blue=Blue colors.green=Green colors.brown=Brown colors.cyan=Cyan colors.red=Red objects.point=Point objects.segment=Segment objects.line=Line objects.ray=Ray objects.circle=Circle objects.intersection=Intersection objects.move=Move Point objects.hide=Hide Object objects.edit=Edit Point objects.tracker=Track a Point or a Line objects.objecttracker=Track a Point or a Line on an Object objects.parallel=Parallel Line objects.plumb=Perpendicular Line objects.circle3=Circle from 3 Points objects.midpoint=Midpoint objects.quadric=Conic Section objects.angle=Angle objects.boundedpoint=Point on an Object objects.parameter=Set Macro Parameters objects.targets=Set Macro Targets objects.definejob=Define an Assignment objects.runmacro=Run a Macro objects.delete=Delete Objects and their Children objects.reorder=Push Objects to the Background objects.animate=Animation objects.expression=Arithmetic Expression objects.area=Polygon objects.text=Text objects.fixedcircle=Circle with fixed Size objects.fixedangle=Fixed Angle objects.fixedsegment=Segment with fixed Length iconhelp.point=Point (p) iconhelp.segment=Segment (s) iconhelp.line=Line (g) iconhelp.ray=Ray (r) iconhelp.circle=Circle (c) iconhelp.intersection=Intersection (i) iconhelp.move=Move a point (m)+Ctrl (Points): Show old construction+Ctrl: Move fixed objects+Shift: Move more than one object iconhelp.hide=Hide objects (h)+Shift: Hide completely iconhelp.edit=Edit objects (e)+Shift: Edit more objects+Ctrl: Edit last object iconhelp.tracker=Track a point or a line (t) iconhelp.objecttracker=Automatic track of a point or a line (o)+Strg: Keep Track (Shift-Enter) iconhelp.parallel=Parallel line (1) iconhelp.plumb=Perpendicular line (2) iconhelp.circle3=Circle from 3 points (3) iconhelp.midpoint=Midpoint (4) iconhelp.quadric=Conic section through 5 points ($) iconhelp.angle=Angle (a) iconhelp.boundedpoint=Create a point on an abject (5)+Shift: Not fixed on object iconhelp.hidden=Show or hide hidden objects (F9) iconhelp.color=Set default object color (Ctrl-1,2,3,4) iconhelp.type=Set default point type (Ctrl-5,6,7,8,9,0) iconhelp.type0=Set default point type iconhelp.thickness=Set default object thickness (Alt-5,6,7) iconhelp.back=Delete last object (<-) iconhelp.thickness0=Set default object thickness iconhelp.partial=Create partial circles by default (Ctrl-F9) iconhelp.plines=Create partial lines by default (Ctrl-F10) iconhelp.arrow=Create segments as vectors by default (Ctrl-F11) iconhelp.showcolor=Show selected colors only (Alt-1,2,3,4) iconhelp.runmacro=Run a macro (9)+Ctrl: Run last Macro iconhelp.macro=Set macro parameters, targets and definition (7,8,Ctrl-5) iconhelp.expression=Arithmetic expression (x) iconhelp.showvalue=Show object values by default (Ctrl-F7) iconhelp.showname=Show object names by default (Ctrl-F6) iconhelp.obtuse=Create angles larger than 180\u00B0 by default (Ctrl-F12) iconhelp.solid=Do not use transparency by default iconhelp.longnames=Use long object names by default (Ctrl-F8) iconhelp.grid=Show the grid (F12) iconhelp.comment=Show and edit comment (F10) iconhelp.defaults=Default settings iconhelp.macro0=Set macro parameters, targets and definition iconhelp.visual=Toggle visual construction mode iconhelp.replay=Replay the construction iconhelp.oneforward=Forward iconhelp.fastforward=Fast forward iconhelp.allforward=To the end iconhelp.oneback=Back iconhelp.fastback=Fast back iconhelp.allback=To the start iconhelp.close=Close iconhelp.area=Polygon (0) iconhelp.text=Multiline text (b) iconhelp.fixedcircle=Circle with fixed radius (,) iconhelp.fixedangle=Angle with fixed size (.) iconhelp.fixedsegment=Segment with fixed length (#) iconhelp.animate=Animation of a point (") iconhelp.delete=Delete objects and their children (Del) iconhelp.undo=Undo last removals (Ctrl-z) iconhelp.nextbreak=Jump to next break iconhelp.setbreak=Toggle break+Shift: Hidden breakpoint iconhelp.zoom=Zoom with the mouse (%) shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.showcolor.4= shortcuts.showcolor.5= shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) menu.file=File menu.file.clearmacros=Clear User Macros menu.file.load=Load a Construction ... (Ctrl-o) menu.file.loadjob=Load an Assignment ... (Ctrl-j) menu.file.savejob=Save as Assignment ... (Ctrl-k) menu.file.save=Save this Construction (Ctrl-s) menu.file.saveas=Save this Construction to ... (Ctrl-a) menu.file.includemacros=Include all Macros menu.file.exit=Exit (Alt-F4) menu.file.print=Print ... menu.file.print.isoscale=Scale 1:1 in cm menu.file.savebmp=Save Graphics (as BMP) ... menu.file.savefig=Save Graphics (as FIG) ... menu.file.loadrun=Load a Decriptive Construction ... (Ctrl-r) menu.file.editrun=Edit a Descriptive Construction ... (Ctrl-x) menu.actions=Edit menu.actions.elementary=Elementary Tools menu.actions.complex=More Complex Tools menu.actions.move=Moving Tools menu.actions.decorative=Decorative Objects menu.options=Options menu.options.visual=Toggle Visual Mode (Ctrl-F6) menu.options.hidden=Show hidden Objects (F9) menu.options.comment=Edit Comment (F10) menu.options.constructiondisplay=Show Description menu.options.grid=Show Grid (F12) menu.options.setgrid=Set Grid Width ... menu.options.showcolor=Show Color menu.options.defaultcolor=Default Color menu.options.defaultthickness=Default Thickness menu.options.defaulttype=Default Point Type menu.options.all=All menu.options.setdigits=Set Digits menu.options.shownames=Show Object Names (Ctrl-F6) menu.options.longnames=Long Object Names (Ctrl-F8) menu.options.obtuse=Use Angles larger than 180\u00B0 (Ctrl-F12) menu.options.solid=Do not use Transparency menu.options.showvalues=Show Object Values (Ctrl-F7) menu.options.partial=Partial Circles (Ctrl-F9) menu.options.plines=Partial Lines (Ctrl-F10) menu.options.arrow=Arrows (Ctrl-F11) menu.options.editicons=Edit the Toolbox menu.options.back=Delete last Object (<-) menu.options.undo=Undo Delete (Ctrl-z) menu.zoom=Zoom menu.zoom.in=In (+) menu.zoom.out=Out (-) menu.zoom.left=Left (Cursor-Left) menu.zoom.right=Right (Cursor-Right) menu.zoom.up=Up (Cursor-Up) menu.zoom.down=Down (Cursor-Down) menu.macros=Macros menu.special.definemacro=Define a Macro (Ctrl-F5) menu.special.runmacro=Run a Macro ... (F5) menu.special.savemacros=Save Macros ... menu.special.loadmacros=Load Macros ... menu.special.deletemacros=Delete Macros ... menu.special=Special menu.special.testjob=Test this Assignment (Ctrl-F1) menu.special.jobcomment=Set Assignment Text ... (F8) menu.special.export=Create an HTML File ... (Ctrl-e) menu.special.replay=Replay this Construction menu.help=Help menu.help.about=About this program menu.help.browser=Explore Help and Demos menu.help.text=Simple Help menu.help.configure=Configure the Browser menu.help.help=Help (F1) menu.help.macros=About Macros menu.help.tools=The Tools menu.help.gui=User Interface menu.help.interactive=Descriptive Constructions menu.help.tips=Some Tips menu.settings=Special Settings menu.settings.fullicons=Use two full icon bars menu.settings.utf=Use UTF-8 encoding menu.settings.autohide=Hide second intersection point menu.settings.iconbartop=Iconbar above construction menu.settings.showtips=Show tooltips menu.settings.simplegraphics=Use simpler graphics menu.settings.sure=Confirm before loading and closing menu.settings.pointon=Ask before creating a point on an object menu.settings.intersection=Ask before creating an intersection menu.settings.choice=Show selection dialog for objects menu.settings.movename=Show object values when moving menu.settings.movefixname=Show fixed object values when moving menu.settings.restricted=Toggle school mode menu.colors=Set the Colors colors.default=Use Default Colors colors.color0=Color 1 (Black) colors.color1=Color 2 (Green) colors.color2=Color 3 (Blue) colors.color3=Color 4 (Brown) colors.color4=Color 5 (Cyan) colors.color5=Color 6 (Red) colors.background=Background colors.select=Select colors.target=Target myfiledialog.dir=Directory myfiledialog.file=File myfiledialog.pattern=Extensions filedialog.open=Open filedialog.saveas=Save as ... filedialog.open.action=Open filedialog.saveas.action=Save filedialog.htmlsave=Save HTML filedialog.htmlsave.action=Save pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Save load=Load abort=Abort bound.release=Release Point bound.bind=Bind to Object bound.error=Object not found before intersection! constructiondisplay.edit=Edit Object constructiondisplay.copy=Copy to Clipboard edit.Title=Properties edit.name=Name edit.hidden=Hidden edit.text=Text edit.fixed=Fixed edit.color=Color edit.ok=OK edit.cancel=Cancel edit.showname=Show Name edit.point.title=Edit Point edit.point.type=Type edit.point.x=X edit.point.y=Y edit.point.intersection=Different from edit.point.showvalue=Show Coordinates edit.point.colortype=Thickness edit.point.bound=Bound edit.point.away=Away from edit.point.close=Close to edit.point.free=Free edit.line.title=Edit Line, Ray, Segment edit.line.normal=Normal edit.line.thick=Thick edit.line.thin=Thin edit.line.invisible=Invisible edit.line.type=Type edit.segment.length=Length edit.segment.showvalue=Show Length edit.circle.title=Edit Circle edit.circle.length=Radius edit.circle.partial=Partial Display edit.plumb.restricted=Restricted edit.angle.title=Edit Angle edit.angle.length=Size edit.angle.displaysize=Display Size edit.angle.normal=Normal edit.angle.small=Small edit.angle.large=Large edit.expression.title=Edit Expression edit.expression=Arithmetic Expression edit.expression.prompt=Explanation edit.area.title=Edit Polygon edit.area.back=In Background export.title=HTML Export export.pagetitle=Title of Page export.width=Width export.height=Height export.jar=Jar file export.comment=Save comment export.file=Construction File export.job=Display as Assignment export.color=Color export.backgroundcolor=Use for page background export.appletcolor=Use for applet background export.plain=Plain export.3D=Border export.breaks=Replay with Breakpoints export.icons=Border and Icons export.full=Border, Icons and Status export.nonvisual=Border, Icons and Input Line export.style=Applet Style export.setcolor=Choose Color export.savefirst=File has not been saved! export.soltext=Solution export.stylesheet=CSS Style File export.solution=Solution File export.jumpsol=Jump to Solution export.linksol=Link to Solution export.savesol=Save Solution File export.track=Track Point export.digits=Save Digits export.setsize=Get Size export.signature=Created using C.a.R. export.colors=Save defined Colors export.background=Save defined Background help.title=Help help.error=Could not open the help file! help.file=schoolgeometry.txt coloreditor.title=Edit Color coloreditor.red=Red coloreditor.green=Green coloreditor.blue=Blue coloreditor.color=Your Color comment.title=Construction Comment comment.set=Set comment.cancel=Cancel comment.close=Close iconedit.title=Edit Icon Bar iconedit.twobars=Icon box has two lines jobcomment.title=Assignment select.title=Selection select.ok=OK select.cancel=Cancel select.comment=Show Comment select.all=All message.circle.midpoint=Circle: Midpoint? message.circle.radius=Circle: Point on the circle (shift: fix radius)? message.fixedcircle.midpoint=Circle with fixed size: Midpoint? message.fixedcircle.radius=Circle with fixed size: Radius? message.line.first=Line: First point? message.line.second=Line: Second point? message.ray.first=Ray: Root point? message.ray.second=Ray: Second point? message.move.select=Move: Select an object (shift: more)! message.move.move=Move: Move the point? message.point=Point: Set a point (shift: fix)! message.segment.first=Segment: First point? message.segment.second=Segment: Second point (shift: fixed length)? message.fixedsegment.first=Segment with fixed length: First point? message.fixedsegment.second=Segment with fixed length: Click somewhere! message.intersection.first=Intersection: First object or the intersection? message.intersection.second=Intersection: First object? message.hide=Hide/Show: Select an object! message.tracker.select=Track: Point or line to track (shift: more)? message.tracker.selectpoint=Track: Point to move? message.tracker.move=Track: Move the point! message.objecttracker.select=Autotrack: Point or line to track (shift: more)? message.objecttracker.object=Autotrack: Line or circle, point on object, slider? message.objecttracker.selectpoint=Autotrack: Point to be moved on line or circle? message.objecttracker.selectanypoint=Autotrack: Any other point to move? message.objecttracker.move=Autotrack: Move the point! message.objecttracker.start=Autotrack: Start the Animation! message.parallel.first=Parallel: Line? message.parallel.second=Parallel: Point? message.plumb.first=Perpendicular: Line? message.plumb.second=Perpendicular: Point? message.circle3.first=Circle: First radius point? message.circle3.second=Circle: Second radius point? message.circle3.midpoint=Circle: Midpoint? message.midpoint.first=Midpoint: First point? message.midpoint.second=Midpoint: Second point? message.quadric=Conic Section: Point number message.angle.first=Angle: First angle point? message.angle.root=Angle: Corner point? message.angle.second=Angle: Second angle point (shift: fixed size)? message.fixedangle.first=Angle with fixed size: First angle point? message.fixedangle.root=Angle with fixed size: Base point? message.fixedangle.second=Angle with fixed size: Click somewhere! message.label.select=Move Label: Select a label! message.label.move=Move Label: Move the label! message.boundedpoint=Point on Object: Circle or line object (shift: continuous, ctrl: inside)? message.parameters=Macro Parameters: Parameter objects? message.targets=Macro Targets: Target objects? message.savejob.first=Define Assignment: Last displayed object? message.savejob.second=Define Assignment: Target object (shift: don't check)? message.savejob.third=Define Assignment: Further objects to be displayed? message.runmacro=Macro %: %. % - % message.runmacro.return=(SPACE chooses %) message.runmacro.fixes=(SHIFT fixes selection) message.delete=Delete: Select an object! message.reorder=Reorder: Select an object! message.expression=Arithmetic Expression: Select a place! message.area=Filled polygon: Corner point? message.text=Text: Select a place! message.animator.point=Animation: Point to animate? message.animator.segment=Animation: Circle or a segment? message.animator.running=Animation: Running (click to stop)! message.range.first=Set range: Draw the circle from which point ... message.range.second=Set range: ... to which point? message.setaway.away=Keep the intersection away from which point? message.setaway.close=Keep the intersection close to which point? objectsedit.title=Edit Properties point.type.square=Square point.type.diamond=Diamond point.type.circle=Circle point.type.dot=Dot color.type.normal=Normal color.type.thick=Thick color.type.thin=Thin color.type.invisible=Invisible text.point=Point at %, % text.line=Line through % and % text.segment=Line segment from % to % text.segment.fixed=Line segment from % to % with length % text.ray=Ray from % pointing to % text.intersection=Intersection between % and % text.circle=Circle around % through % text.circle.fixed=Circle around % through % with radius % text.fixedcircle=Circle around % with radius % text.circle3=Circle around % with radius from % to % text.parallel=Parallel line through % to % text.midpoint=Midpoint between % and % text.quadric=Conic section through % text.plumb=Perpendicular line through % to % text.angle=Angle % - % - % text.angle.fixed=Angle % - % - % with size % text.boundedpoint=Point on % text.expression=Expression "%" at %, % text.area=Polygon text.fixedangle=Angle % - % with size % name.Point=Point name.Intersection=Intersection name.OtherIntersection=Intersection name.Circle=Circle name.Circle3=Circle name.Segment=Segment name.Ray=Ray name.Line=Line name.TwoPointLine=Line with two Points name.Parallel=Parallel name.Midpoint=Midpoint name.Quadric=Quadric name.Plumb=Plumb name.Angle=Angle name.PointOn=ObjectPoint name.Expression=Expression name.Polygon=Polygon prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.angle==a(,,) prompt.area=A(,,) prompt.quadric=quadric(,,,,) prompt.function=function(,,,,,) name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=pl name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=p name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=poly name.short.Function=f popup.hidden=Show hidden objects popup.replay=Replay construction popup.empty=--- Macros --- replay.title=Replay reorder.title=Push objects reorder.message=insert after reorder.notfound=Object not found! reorder.warning=Could not do that! setgrid.title=Grid Width setgrid.prompt=Enter new grid width setgrid.set=Set definemacro.title=Define Macro definemacro.name=Name definemacro.comment=Macro Comment definemacro.noparams=Need parameters for the macro! definemacro.nomacro=There is no macro to run! definemacro.targetsonly=Hide construction definemacro.invisible=Hide completely definemacro.promptfor=Prompt for macro.replace.title=Macro Replacement macro.replace=Replace Macro: macro.replace.all=All macro.usage=Wrong use of macro (see tips)! macro.prompt.title=Parameter Prompt macro.prompt.prompt=Enter a value for the parameter macro.prompt.illegal=Illegal value! digits.title=Set Digits digits.edit=Edit digits.lengths=Display digits.angles=Angles editrun.title=Edit Descriptive Construction editrun.run=Save and Run editrun.load=Other Description sure.title=Are you sure? sure.macros=Delete all user macros? sure.delete=Forget current changes? close.title=End close.prompt=Really close this program? file.exists.title=File Exists file.exists.overwrite=File exists! Overwrite? exception.nparams=Illegal number of Parameters! exception.notfound=Object not found, or defined after expression! exception.type=Illegal Object Type! exception.expression=Invalid Expression! exception.canfix=Object cannot be fixed! exception.fix=Value invalid! exception.novalue=Value invalid! exception.elementary=Invalid element in expression! exception.bracket=Closing brackets missing! exception.quotes=Closing quotes missing! exception.dot=Two dots in number! exception.nodigit=No digit found in number! exception.function=Unknown function! exception.parameter=Illegal function parameter! exception.macro=Illegal macro parameter! exception.name=Need a Name! exception.job=Illegal Job Paramters! exception.track=Illegal Track Parameters! exception.animate=Illegal Animation Parameters! exception.boolean=Boolean Value must be true of false! exception.value=Illegal Value! exception.color=Illegal Color! exception.colortype=Illegal Thickness! exception.type=Illegal Point Type! exception.macroparameter=Illegal Macro Parameter! exception.macrotarget=Illegal Macro Target! exception.prompt=Illegal prompt oject! exception.prompt.parameter=Prompt object may not be a parameter! exception.parameters=Illegal Parameter! exception.brackets=Illegal Brackets! exception.double=Name is not unique! error.setaway=This point is not defined before the intersection! error.objecttracker.depends=The point is bound to another object! constructiondisplay.title=Construction function.hide=Hide function.hide.short=hide function.rename=Name function.rename.short=name function.value=Value function.value.short=value function.window=Window function.window.short=W function.color=Color function.color.short=col function.thickness=Thickness function.thickness.short=th function.type=Type function.type.short=type function.partial=Partial function.partial.short=part function.fill=Fill function.fill.short=fill function.back=Background function.back.short=back function.acute=Acute function.acute.short=acute function.obtuse=Obtuse function.obtuse.short=obtuse function.solid=Solid function.solid.short=solid function restrict=Restrict function restrict.short=restrict expression.value=Value configure.title=Set Browser configure.prompt=Enter Browser Command # New Resources: background.error=Could not load the Image (GIF or JPG!). menu.background=Background menu.background.grab=Current as Background menu.background.clear=Clear Background menu.background.load=Load Background Picture ... menu.background.usesize=Resize to Picture menu.background.tile=Tile Background menu.background.center=Center Background iconhelp.grab=Set or Clear Background filedialog.backgroundload=Load Background filedialog.backgroundload.action=Load # New Resources in Version 2.14 menu.file.compress=Compress always menu.file.savesvg=Save graphics (as SVG) ... # Version 2.15 loading=Loading, please wait! # Version 2.18 and 2.19 menu.settings.font.default=Default font menu.settings.font.bold=Bold font menu.settings.font.large=Large font menu.file.saveeps=Save graphics (as EPS) ... menu.fonts=Font # Version 2.20 bmpscaler.title=Scale Bitmap bmpscaler.width=Width bmpscaler.height=Height bmpscaler.scale=Factor (press Return) bmpscaler.illegal=Illegal Value # Version 2.21 renamemacro.title=Rename Macro renamemacro.name=New macro name menu.special.renamemacro=Rename Macro ... # Version 2.23 savequestion.title=Save Construction savequestion.qsave=Save Changes? # Version 2.25 exception.printsize=Page too small for this construction! iconhelp.nohelp=No help available iconhelp.type?=Point type iconhelp.thickness?=Thickness iconhelp.color?=Color iconhelp.filled=Filled object iconhelp.isback=Draws in background iconhelp.inverse=Reflected angle iconhelp.angle?=Size # Version 2.28 message.objecttracker.stop=Autotrack: Click to stop (shift left/right for speed)! # Version 2.31 menu.settings.indicate=Preview generated objects menu.options.other=Settings menu.help.welcome=News on current version iconhelp.twolines=Icons in two lines iconhelp.qintersection=Ask for intersections iconhelp.qchoice=Show dialog for object selection iconhelp.qpointon=Ask to create point on object iconhelp.noindicate=Do not indicate objects under mouse # Version 2.33 menu.file.new=New Construction (Ctrl-n) # Version 2.34 edit.text.title=Text Settings edit.text.settings=Further Settings menu.settings.filedialog=Replace system file dialog # Version 2.35 menu.settings.bitmapbackground=Use Background Color in Bitmaps # Version 2.36 menu.file.savegraphics=Save Graphics as ... bmpscaler.title=Scale Graphics # Version 2.37 menu.file.savepdf=Save Graphics (as PDF) iconhelp.chord=Show as segment # Version 2.39 message.setfixedangle.first=Set fixed angle: First point? message.setfixedangle.second=Set fixed angle: Base point? message.setfixedangle.third=Set fixed angle: Third point? edit.fixedangle.set=Set Size ... message.setfixedcircle.first=Set fixed circle: First point? message.setfixedcircle.second=Set fixed circle: Second point? edit.fixedcircle.set=Set Size ... # Version 2.41 name.short.Track=Tr text.track=Track of % when % moves on % trackquestion.keep=Keep Track in Construction? trackquestion.title=Keep Track menu.options.track=Keep Track (Shift-Enter) iconhelp.indicate=Preview of construction results iconhelp.nohelp=No help available! # Version 2.42 objects.draw=Paint with Mouse menu.options.cleardraw=Clear Painting (Esc) iconhelp.draw=Paint with Mouse message.draw=Paint with Mouse (ESC to clear) shortcuts.draw=; # Version 2.43 message.rename=Rename A,B,C,...: Select objects! iconhelp.rename=Rename A,B,C,... objects.rename=Rename A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Don't show angle ray # Version 2.45 menu.settings.smartboard=Smartboard Mode shortcuts.zoom=% objects.zoom=Zoom with Mouse message.zoom=Drag center, or zoom in and out # Version 2.46 menu.special.restricticons=Restricted Icon Set # Version 2.47 menu.settings.indicate.simple=Indicate Points only menu.settings.beginner=Beginner Mode question.again=Always ask this question. # Version 2.49 definemacro.parameters=Parameter Prompt(s) ("=name" fixes) # Version 2.53 menu.actions.angles=Angles menu.actions.circles=Circles menu.actions.lines=Lines menu.actions.points=Points # Version 3.00 info.title=Context Help info.related=Related Topics info.notfound=Topic not found! info.noresults=String not found! info.searchresults=- Search results - info.select=- Select - info.search=Search info.back=Back info.start=Start iconhelp.info=Context help menu.help.info=Context help myfiledialog.homedir=CaR Files myfiledialog.windowshome=My Documents myfiledialog.mkdir=Make Directory myfiledialog.back=Back menu.file.alwaysclearmacros=Clear Macros before Loading about.language=Language bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Backups # Version 3.02 menu.options.hideduplicates=Hide Duplicates # Version 3.03 menu.options.function=Create a function or curve text.function=Function ( % , % ) function.varmin=From function.varmax=To function.dvar=Step function.var=Variable function.y=Expression for Y iconhelp.function=Create a Function+(Ctrl: Create a user defined function) menu.options.editlast=Edit last Object iconhelp.control.edit=Edit last Object iconhelp.control.hide=Hide Duplicates edit.function.title=Function or Curve iconhelp.control.runmacro=Run last macro again # Version 3.05 point.type.cross=Cross point.type.dcross=Diagonal Cross shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Unit menu.special.break=Breakpoints menu.bp.setbreak=Set Breakpoint menu.bp.clearbreak=Clear Breakpoint menu.bp.sethidingbreak=Set Hiding Breakpoint menu.bp.animatebreak=Animate Breakpoints iconhelp.animatebreak=Animate breakpoints message.animatebreak=Animate breakpoints: click to stop (shift left/right for speed)! menu.special.exporttemplate=HTML Export with Templates templateload.open=Load Template templateload.open.action=Open menu.settings.doubleclick=Double click for macros export.codebase=Codebase # Version 3.12 edit.equation=Equation # Version 3.23 menu.settings.squarepoints=Draw points always as squares # Version 3.37 menu.options.export=Graphic Export Settings menu.settings.minwidth=Minimal line width is 1 menu.settings.minpointsize=Respect minimal point size menu.settings.minfontsize=Respect minimal font size menu.options.minpointsize=Minimal Point Size menu.options.minfontsize=Minimal Font Size # Version 3.38 menu.settings.scalepdf=Scale PDF and EPS output 1:1 # Version 3.41 menu.file.clip=Clip for Graphics Output ... clip.title=Set Clipping clip.width=Width clip.height=Height clip.screen=No Clipping # Version 3.44 iconhelp.large=Use large font size iconhelp.bold=Use bold font menu.options.largefont=Large Font Size menu.options.boldfont=Bold Font warning.previewframe=Frame larger than window! message.move.select=Move: Select a point (shift: more points, ctrl: show old state)! # Version 3.46 iconbar.showseparators=Show Separators # Version 3.48 menu.options.printscaler=Set Export Size ... menu.options.exportsettings=Special Export Settings ... printscaler.title=Set Export Size printscaler.width=Width (in cm) printscaler.height=Height (in cm) printscaler.dpi=Resolution (in dpi, default 300) printscaler.linewidth=Line Width (in cm, default 0.02) printscaler.pointsize=Point Size (in cm, default 0.07) printscaler.textsize=Text Size (in cm, default 0.3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=Width (in pixel) printscaler.h=Height (in pixel) printscaler.scale=Scale (relativ to screen) printscaler.middle=Cut out from screen printscaler.sizes=Use Values menu.file.savepng=Save Graphics as PNG warning.preview=Preview will not work completely with Java 1.1 iconedit.showseparators=Show Separators printscaler.aspect=Keep Aspect Ratio printscaler.presets=Presets printscaler.preset=Make a Choice printscaler.preset.300dpi=Exactly scaled with 300 DPI printscaler.preset.300dpi6=6 cm Width with 300 DPI printscaler.preset.300dpi16=16 cm Width with 300 DPI printscaler.preset.window=Window Size printscaler.preset.clip50=Window Size Clipped 50% message.saving=Please wait! menu.options.printscalepreview=Export Preview (Ctrl-F3) date=Build # Version 3.51 help=Help # Version 3.61 editconditionals.title=Edit Conditionals editconditionals.hidden=Hidden editconditionals.superhidden=Completely Hidden editconditionals.visible=Normal editconditionals.showname=Show Name editconditionals.showvalue=Show Value editconditionals.background=Background editconditionals.solid=Not Transparent exception.superfluous=Superfluous Text in Expression # Version 3.63 select.comment.title=Macro Comment # Version 3.68 edit.area.area=Area # Version 3.73 myfiledialog.oldfiles=Old Files # Version 3.74 iconhelp.load=Load Construction (Ctrl-o) iconhelp.save=Save Construction (Ctrl-s) iconhelp.new=New Construction (Ctrl-n)+Ctrl: Load defaults # Version 3.81 warning.loadbackground=Error loading background # Version 3.9 function.x=Expression for X (empty for functions) # Version 3.91 constructiondisplay.select=Select constructiondisplay.all=All Objects constructiondisplay.visible=Visible Objects (Alt-Ctrl-9) constructiondisplay.points=Points constructiondisplay.lines=Lines constructiondisplay.circles=Circles constructiondisplay.angles=Angles constructiondisplay.other=Other Objects menu.file.copypng=Copy to Clipboard exception.clipboardcopy=Copy failed! menu.options.finegrid=Axis only # Vesion 3.93 edit.function.center=Set Center edit.function.free=Release Center message.setcenter=Select the center point! # Vesion 3.94 message.edit=Edit: Objekt (shift: more objects, ctrl: conditionals)? # Version 3.97 error.image=Image not in same folder as construction? filedialog.imageload=Load Image filedialog.imageload.action=Load prompt.image=image(,,,) objects.image=Image shortcuts.image=_ # Version 3.98 exception.depends=Object % depends on current object. error.depends=Object % depends on current object. constructiondisplay.sorted=Sorted by Order of Construction (Alt-Ctrl-0) # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Expressions # Version 4.00 iconhelp.image=Load Image (_) message.image=Image anchor point % message.image.last=Last image anchor point (or choose selected point) editconditionals.z=Z-Buffer Value # Version 4.01 name.FixedAngle=Fixed Angle # Version 4.04 menu.moresettings=Settings menu.settings.language=Set Language language.title=Set Language language.prompt=Language for next program start # Version 4.05 constructiondisplay.invalid=Invalid Objects # Version 4.08 menu.settings.constructiondisplay=Permanent Construction Display (F11) # Version 4.09 constructiondisplay.editconditions=Edit Conditions constructiondisplay.delete=Delete selected Objects constructiondisplay.hide=Hide or Show (Alt-Ctrl-4) constructiondisplay.superhide=Super Hide (Alt-Ctrl-5) # Version 4.2 edit.expression.slider=Show as Slider menu.grid.options=Grid Options menu.options.leftsnap=Snap with Left Button Drag menu.settings.boundingbox=Create Bounding Box (bb) file # Version 4.3 latexsettings.title=Setup LaTeX export latexsettings.boundingbox=Create Bounding box bb-file latexsettings.latexinput=Create LaTeX idx-file latexsettings.doubledollar=LaTeX does $$...$$ latexsettings.dollar=LaTeX does $...$ latexsettings.nodollar=LaTeX does all other strings latexsettings.fullpath=Use file path printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=12 cm width with 300 DPI printscaler.latex=Save for LaTeX menu.background.usewidth=Adjust height only # Version 4.4 menu.options.restricted=Restrict Intersections menu.options.sizes=Set Sizes ... sizesdialog.title=Sizes minlinesize.prompt=Minimal line width (default: 1) minpointsize.prompt=Minimal point size (default: 3) minfontsize.prompt=Minimal font size (default: 12) arrowsize.prompt=Arrow size (default: 10) selectionsize.prompt=Selection size (default: 1.5) warning.loadmacros=Error while loading a macro! warning.macrodefinition=% is used, but is not in macro! edit.circle.bounds=Show as Arc edit.circle.range=Set Arc ... # Version 4.5 edit.track.dmin=Minimal step (default 0.001) # Version 4.6 menu.settings.smallicons=Use small icons menu.settings.oldicons=Use old icons # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof=Track of % when % changes # Version 5 # Fix error.image edit.discrete=Discrete error.fixedsegment=Cannot fix this segment! export.zoom=Zoom with mouse export.popup=Popup menu # Version 5.1 edit.intersection.alternate=Can alternate export.restrictedmove=Restrict Movements # Version 6.0 # Fix message.boundedpoint # Fix iconhelp.new message.bindpoint=Bind point to object (Shift: continuous, Ctrl: inside object) edit.point.inside=Inside object edit.point.increment=Grid increment (0=free) edit.more=More ... menu.settings.more=Show button for conditional formats menu.file.loadexamples=Load Example ... menu.options.editgrid=Edit coordinate grid ... # Version 6.1 constructiondisplay.description=Show Description (Alt-Ctrl-1) constructiondisplay.size=Show Size or Coordinates (Alt-Ctrl-2) constructiondisplay.formula=Show Formula (Alt-Ctrl-3) menu.settings.germanpoints=Use | in coordinates # Version 6.2 # fix iconhelp.function menu.options.userfunction=User defined Function function.vars=Variables function.f=Function expression # Version 6.4 menu.special.macrobar=Macro bar menu.special.defaultmacrosinbar=Show default macros help.related=Related topics help.nexttopic=Next topic ./src/rene/zirkel/docs/CVS/RevisionCache/ZirkelProperties_ko.properties#1.10000644000175000017500000014604411144764476025534 0ustar yvesyveslanguage=ko_ about.title=\uc774 \ud504\ub85c\uadf8\ub7a8\uc5d0 \ub300\ud558\uc5ec about.name=School Geometry about.programmed=\ub9cc\ub4e0\uc774 title=\ud559\uad50 \uae30\ud558\ud559(School Geometry) close=\ub2eb\uae30 ok=\ud655\uc778 cancel=\ucde8\uc18c done=\ucc38 \uc798\ud588\uc2b5\ub2c8\ub2e4! message=\uc54c\ub9bc yes=\uc608 no=\uc544\ub2c8\uc624 abort=\uc911\uc9c0 true=\ucc38 false=\uac70\uc9d3 warning.nojob=\uc774\uac83\uc740 \uacfc\uc81c \ud30c\uc77c\uc774 \uc544\ub2d9\ub2c8\ub2e4! warning.print=\uc778\uc1c4 \uc2e4\ud328! warning.reset=\uc774 \uc635\uc158\uc740 \ub2e4\uc74c \uc2e4\ud589\uc2dc \uc801\uc6a9\ub429\ub2c8\ub2e4. question.title=\uc9c8\ubb38 question.intersection=\uad50\uc810\uc744 \ub9cc\ub4dc\uc2dc\uaca0\uc2b5\ub2c8\uae4c? question.pointon=\uc774 \uac1c\uccb4 \uc704\uc5d0 \uc810\uc744 \ub9cc\ub4dc\uc2dc\uaca0\uc2b5\ub2c8\uae4c? colors.black=\uac80\uc815 colors.blue=\ud30c\ub791 colors.green=\ub179\uc0c9 colors.brown=\uac08\uc0c9 colors.cyan=\uccad\ub85d colors.red=\ube68\uac15 objects.point=\uc810 objects.segment=\uc120\ubd84 objects.line=\uc9c1\uc120 objects.ray=\ubc18\uc9c1\uc120 objects.circle=\uc6d0 objects.intersection=\uad50\uc810 objects.move=\uc810 \uc6c0\uc9c1\uc774\uae30 objects.hide=\uac1c\uccb4 \uc228\uae30\uae30 objects.edit=\uc810 \ud3b8\uc9d1 objects.tracker=\uc120\ubd84\uc774\ub098 \uc810\uc758 \uc790\ucde8 objects.objecttracker=\uac1c\uccb4 \uc704\uc758 \uc810\uc774\ub098 \uc120\ubd84\uc758 \uc790\ucde8 objects.parallel=\ud3c9\ud589\uc120 objects.plumb=\uc218\uc9c1\uc120 objects.circle3=\uc138 \uc810\uc73c\ub85c \ub9cc\ub4dc\ub294 \uc6d0 objects.midpoint=\uc911\uc810 objects.quadric=\uc6d0\ubfd4\uace1\uc120 objects.angle=\uac01 objects.boundedpoint=\uac1c\uccb4 \uc704\uc758 \uc810 objects.parameter=\ub9e4\ud06c\ub85c \uc2dc\uc791\uc810 \uc124\uc815 objects.targets=\ub9e4\ud06c\ub85c \uacb0\uacfc\ubb3c \uc124\uc815 objects.definejob=\uacfc\uc81c \uc815\uc758\ud558\uae30 objects.runmacro=\ub9e4\ud06c\ub85c \uc2e4\ud589\ud558\uae30 objects.delete=\uac1c\uccb4 \ubc0f \ud558\uc704 \uac1c\uccb4 \uc9c0\uc6b0\uae30 objects.reorder=\uac1c\uccb4\uc758 \uc21c\uc11c \ubc14\uafb8\uae30 objects.animate=\uc560\ub2c8\uba54\uc774\uc158 objects.expression=\uacc4\uc0b0\uc2dd objects.area=\ub2e4\uac01\ud615 objects.text=\uae00 objects.fixedcircle=\ubc18\uc9c0\ub984\uc774 \uc8fc\uc5b4\uc9c4 \uc6d0 objects.fixedangle=\uace0\uc815\ub41c \uac01 objects.fixedsegment=\uae38\uc774\uac00 \uc8fc\uc5b4\uc9c4 \uc120\ubd84 iconhelp.point=\uc810 (p) iconhelp.segment=\uc120\ubd84 (s) iconhelp.line=\uc9c1\uc120 (g) iconhelp.ray=\ubc18\uc9c1\uc120 (r) iconhelp.circle=\uc6d0 (c) iconhelp.intersection=\uad50\uc810 (i) iconhelp.move=\uc810 \uc6c0\uc9c1\uc774\uae30 (m)+Ctrl (Points): \uc774\uc804 \uc0c1\ud0dc \ubcf4\uc774\uae30+Ctrl: \uac12\uc774 \uace0\uc815\ub41c \uac1c\uccb4 \uc6c0\uc9c1\uc774\uae30 iconhelp.hide=\uac1c\uccb4 \uc228\uae30\uae30 (h)+Shift: \uc644\uc804\ud788 \uac10\ucd94\uae30+Ctrl: \uc911\ubcf5\ub41c \uac1c\uccb4 \uac10\ucd94\uae30 iconhelp.edit=\uac1c\uccb4 \ud3b8\uc9d1 (e)+Shift: \uc5ec\ub7ec \uac1c\uccb4\ub97c \ub3d9\uc2dc\uc5d0 \ud3b8\uc9d1+Ctrl: \uc870\uac74 \ud3b8\uc9d1 iconhelp.tracker=\uc810\uc774\ub098 \uc9c1\uc120\uc758 \uc790\ucde8 (t) iconhelp.objecttracker=\uc810\uc774\ub098 \uc9c1\uc120\uc758 \uc790\ub3d9 \uc790\ucde8 (o) iconhelp.parallel=\ud3c9\ud589\uc120 (1) iconhelp.plumb=\uc218\uc9c1\uc120 (2) iconhelp.circle3=\uc138 \uc810\uc73c\ub85c \ub9cc\ub4dc\ub294 \uc6d0 (3) iconhelp.midpoint=\uc911\uc810 (4) iconhelp.quadric= \ub2e4\uc12f \uc810\uc744 \uc9c0\ub098\ub294 \uc6d0\ubfd4 \uace1\uc120 ($) iconhelp.angle=\uac01 (a) iconhelp.boundedpoint=\uac1c\uccb4 \uc704\uc5d0 \uc810 \ub9cc\ub4e4\uae30 (5)+Shift: \uac1c\uccb4 \uc704\ub85c \uc81c\ud55c\ud558\uc9c0 \uc54a\uae30 iconhelp.hidden=\uc228\uaca8\uc9c4 \uac1c\uccb4\ub97c \ubcf4\uc774\uac70\ub098 \uc228\uae30\uae30 (F9) iconhelp.color=\uae30\ubcf8\uc0c9 (Ctrl-1,2,3,4) iconhelp.type=\uae30\ubcf8\uc810 \ubaa8\uc591 (Ctrl-5,6,7,8,9,0) iconhelp.type0=\uae30\ubcf8\uc810 \ubaa8\uc591 iconhelp.thickness=\uac1c\uccb4\uc758 \ub450\uaed8 (Alt-5,6,7) iconhelp.back=\uc774\uc804 \uac1c\uccb4 \uc9c0\uc6b0\uae30 (<-) iconhelp.thickness0=\uac1c\uccb4\uc758 \uae30\ubcf8 \ub450\uaed8 iconhelp.partial=\uc6d0\uc744 \ubd80\ubd84 \uc6d0\uc73c\ub85c (Ctrl-F9) iconhelp.plines=\uc9c1\uc120\uc744 \ubd80\ubd84 \uc9c1\uc120\uc73c\ub85c (Ctrl-F10) iconhelp.arrow=\uc120\ubd84\uc744 \ubca1\ud130\ub85c (Ctrl-F11) iconhelp.showcolor=\uc120\ud0dd\ub41c \uc0c9\ub9cc \ubcf4\uc774\uae30 (Alt-1,2,3,4) iconhelp.runmacro=\ub9e4\ud06c\ub85c \uc2e4\ud589 (9)+Ctrl: \ub9c8\uc9c0\ub9c9 \ub9e4\ud06c\ub85c \uc2e4\ud589 iconhelp.macro=\ub9e4\ud06c\ub85c \uc2dc\uc791\uc810, \uacb0\uacfc\ubb3c, \uc774\ub984 \uc124\uc815 (7,8,Ctrl-5) iconhelp.expression=\uacc4\uc0b0\uc2dd (x) iconhelp.showvalue=\uac1c\uccb4\uac12 \ubcf4\uc774\uae30 (Ctrl-F7) iconhelp.showname=\uac1c\uccb4\uc758 \uc774\ub984 \ubcf4\uc774\uae30 (Ctrl-F6) iconhelp.obtuse=180\u02da \ubcf4\ub2e4 \ud070 \uac01 \ub098\ud0c0\ub0b4\uae30 (Ctrl-F12) iconhelp.solid=\ubd88\ud22c\uba85\ud558\uac8c iconhelp.longnames=\uae34 \uac1c\uccb4\uc774\ub984 \uc0ac\uc6a9\ud558\uae30 (Ctrl-F8) iconhelp.grid=\uaca9\uc790 \ubcf4\uc774\uae30 (F12) iconhelp.comment=\uc8fc\uc11d \ud3b8\uc9d1 (F10) iconhelp.defaults=\uae30\ubcf8 \uc124\uc815 iconhelp.macro0=\ub9e4\ud06c\ub85c \uc2dc\uc791\uc810, \uacb0\uacfc\ubb3c, \uc774\ub984 \uc124\uc815 iconhelp.visual=\uc544\uc774\ucf58 \ubaa8\ub4dc \uc124\uc815/\ud574\uc81c iconhelp.replay=\uc791\ub3c4\uacfc\uc815 \ub2e4\uc2dc\ubcf4\uae30 iconhelp.oneforward=\uc55e\uc73c\ub85c iconhelp.fastforward=\uc55e\uc73c\ub85c \ube60\ub974\uac8c iconhelp.allforward=\ub05d\uc73c\ub85c iconhelp.oneback=\ub4a4\ub85c iconhelp.fastback=\ub4a4\ub85c \ube60\ub974\uac8c iconhelp.allback=\ucc98\uc74c\uc73c\ub85c iconhelp.close=\ub2eb\uae30 iconhelp.area=\ub2e4\uac01\ud615 (0) iconhelp.text=\uae00\uc0c1\uc790 (b) iconhelp.fixedcircle=\ubc18\uc9c0\ub984\uc774 \uc8fc\uc5b4\uc9c4 \uc6d0 (,) iconhelp.fixedangle=\ud06c\uae30\uac00 \uace0\uc815\ub41c \uac01 (.) iconhelp.fixedsegment=\uae38\uc774\uac00 \uc8fc\uc5b4\uc9c4 \uc120\ubd84 (#) iconhelp.animate=\uc810\uc758 \uc560\ub2c8\uba54\uc774\uc158 (") iconhelp.delete=\uac1c\uccb4 \ubc0f \ud558\uc704 \uac1c\uccb4 \uc9c0\uc6b0\uae30 (Del) iconhelp.undo=\ub9c8\uc9c0\ub9c9 \uc9c0\uc6b4\uac83 \ub418\uc0b4\ub9ac\uae30 (Ctrl-z) iconhelp.nextbreak=\ub2e4\uc74c \uc911\ub2e8\uc810\uc73c\ub85c \uc774\ub3d9 iconhelp.setbreak=\uc911\ub2e8\uc810 \uc124\uc815/\ucde8\uc18c+Shift: \uc911\ub2e8\uc810 \uac10\ucd94\uae30 iconhelp.zoom=\ub9c8\uc6b0\uc2a4\ub85c \ud655\ub300 \ucd95\uc18c (%) shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.showcolor.4= shortcuts.showcolor.5= shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) menu.file=\ud30c\uc77c menu.file.clearmacros=\uc0ac\uc6a9\uc790 \uc815\uc758 \ub9e4\ud06c\ub85c \uc9c0\uc6b0\uae30 menu.file.load=\ubd88\ub7ec\uc624\uae30 ... (Ctrl-o) menu.file.loadjob=\uacfc\uc81c \ubd88\ub7ec\uc624\uae30 ... (Ctrl-j) menu.file.savejob=\uacfc\uc81c \uc800\uc7a5\ud558\uae30 ... (Ctrl-k) menu.file.save=\uc800\uc7a5\ud558\uae30 ... (Ctrl-s) menu.file.saveas=\ub2e4\ub978 \uc774\ub984\uc73c\ub85c \uc800\uc7a5 ... (Ctrl-a) menu.file.includemacros=\ubaa8\ub4e0 \ub9e4\ud06c\ub85c \ud3ec\ud568\ud558\uc5ec \ubd88\ub7ec\uc624\uae30 menu.file.exit=\ub05d\ub0b4\uae30 (Alt-F4) menu.file.print=\uc778\uc1c4 ... menu.file.print.isoscale=1:1(cm)\uc758 \ube44\uc728\ub85c \uc778\uc1c4 menu.file.savebmp=BMP \ud30c\uc77c\ub85c \uc800\uc7a5\ud558\uae30 ... menu.file.savefig=FIG \ud30c\uc77c\ub85c \uc800\uc7a5\ud558\uae30 ... menu.file.loadrun=run \ud30c\uc77c \ubd88\ub7ec\uc624\uae30 ... (Ctrl-r) menu.file.editrun=run \ud30c\uc77c \ud3b8\uc9d1\ud558\uace0 \uc800\uc7a5\ud558\uae30... (Ctrl-x) menu.actions=\ud3b8\uc9d1 menu.actions.elementary=\uae30\ubcf8 \ub3c4\uad6c menu.actions.complex=\ubcf5\ud569 \ub3c4\uad6c menu.actions.move=\uc6c0\uc9c1\uc784 \ub3c4\uad6c menu.actions.decorative=\ubd80\uac00 \uae30\ub2a5 menu.options=\uc635\uc158 menu.options.visual=\uc544\uc774\ucf58 \ubaa8\ub4dc (Ctrl-F6) menu.options.hidden=\uc228\uaca8\uc9c4 \uac1c\uccb4 \ubcf4\uc774\uae30 (F9) menu.options.comment=\uc8fc\uc11d \ud3b8\uc9d1 (F10) menu.options.constructiondisplay=\ubaa8\ub4e0 \uc791\ub3c4\uc758 \uc2a4\ud06c\ub9bd\ud2b8 \ubcf4\uae30 menu.options.grid=\uaca9\uc790 \ubcf4\uc774\uae30 (F12) menu.options.setgrid=\uaca9\uc790\ud3ed \uc124\uc815 ... menu.options.showcolor=\uc0c9 \ubcf4\uc774\uae30 menu.options.defaultcolor=\uae30\ubcf8\uc0c9 menu.options.defaultthickness=\uae30\ubcf8 \ub450\uaed8 menu.options.defaulttype=\uae30\ubcf8\uc810 \ubaa8\uc591 menu.options.all=\ubaa8\ub450 menu.options.setdigits=\uc18c\uc218\uc810 \uc124\uc815 menu.options.shownames=\uac1c\uccb4 \uc774\ub984 \ubcf4\uc774\uae30 (Ctrl-F6) menu.options.longnames=\uac1c\uccb4\uc774\ub984 \uae38\uac8c \ubcf4\uc774\uae30 (Ctrl-F8) menu.options.obtuse=180\u02da\ubcf4\ub2e4 \ud070 \uac01 \uc0ac\uc6a9\ud558\uae30(Ctrl-F12) menu.options.solid=\ubd88\ud22c\uba85\ud558\uac8c menu.options.showvalues=\uac1c\uccb4\uac12 \ubcf4\uc774\uae30 (Ctrl-F7) menu.options.partial=\ubd80\ubd84 \ud638 (Ctrl-F9) menu.options.plines=\ubd80\ubd84 \uc120 (Ctrl-F10) menu.options.arrow=\ud654\uc0b4\ud45c (Ctrl-F11) menu.options.editicons=\ub3c4\uad6c\uc0c1\uc790 \ud3b8\uc9d1 menu.options.back=\ub9c8\uc9c0\ub9c9 \uac1c\uccb4 \uc9c0\uc6b0\uae30 (<-) menu.options.undo=\ub418\uc0b4\ub9ac\uae30 (Ctrl-z) menu.zoom=\ud655\ub300/\ucd95\uc18c menu.zoom.in=\ud655\ub300 (+) menu.zoom.out=\ucd95\uc18c (-) menu.zoom.left=\uc67c\ucabd\uc73c\ub85c (Cursor-Left) menu.zoom.right=\uc624\ub978\ucabd\uc73c\ub85c (Cursor-Right) menu.zoom.up=\uc704\ub85c (Cursor-Up) menu.zoom.down=\uc544\ub798\ub85c (Cursor-Down) menu.macros=\ub9e4\ud06c\ub85c menu.special.definemacro=\ub9e4\ud06c\ub85c \uc815\uc758 (Ctrl-F5) menu.special.runmacro=\ub9e4\ud06c\ub85c \uc2e4\ud589 ... (F5) menu.special.savemacros=\ubaa8\ub4e0 \ub9e4\ud06c\ub85c \uc800\uc7a5 ... menu.special.loadmacros=\ub9e4\ud06c\ub85c \ubd88\ub7ec\uc624\uae30 ... menu.special.deletemacros=\ub9e4\ud06c\ub85c \uc9c0\uc6b0\uae30 ... menu.special=\ud2b9\ubcc4\uba54\ub274 menu.special.testjob=\uacfc\uc81c \ud655\uc778 (Ctrl-F1) menu.special.jobcomment=\uacfc\uc81c\ub97c \uc124\uba85\ud558\ub294 \uc8fc\uc11d ... (F8) menu.special.export=HTML \ud30c\uc77c \ub9cc\ub4e4\uae30... (Ctrl-e) menu.special.replay=\uc791\ub3c4\uacfc\uc815 \ub2e4\uc2dc\ubcf4\uae30 menu.help=\ub3c4\uc6c0\ub9d0 menu.help.about=\uc774 \ud504\ub85c\uadf8\ub7a8\uc740 menu.help.browser=\ub3c4\uc6c0\ub9d0\uacfc \ub370\ubaa8 menu.help.text=\uac04\ub2e8\ud55c \ub3c4\uc6c0\ub9d0 menu.help.configure=\ube0c\ub77c\uc6b0\uc800 \uc124\uc815 menu.help.help=\ub3c4\uc6c0\ub9d0 (F1) menu.help.macros=\ub9e4\ud06c\ub85c \ub3c4\uc6c0\ub9d0 menu.help.tools=\ub3c4\uad6c \ub3c4\uc6c0\ub9d0 menu.help.gui=\uc0ac\uc6a9\uc790 \ud658\uacbd menu.help.interactive=\uc11c\uc220\uc801\uc778 \uc791\ub3c4(Descriptive Constructions) menu.help.tips=\uc0ac\uc6a9\uc790 \ud301 menu.settings=\ud2b9\ubcc4\ud55c \uc124\uc815 menu.settings.fullicons=\uc544\uc774\ucf58\ubc14 \ub450 \uc904\ub85c menu.settings.utf=UTF-8 Encoding \uc0ac\uc6a9 menu.settings.autohide=\ub450\ubc88\uc9f8 \uad50\uc810 \uc228\uae30\uae30 menu.settings.iconbartop=\uc544\uc774\ucf58 \ubc14\ub97c \uc791\uc5c5\ucc3d \uc704\ucabd\uc5d0 menu.settings.showtips=\ub3c4\uad6c \ud301 \ubcf4\uc774\uae30 menu.settings.simplegraphics=\uac04\ub2e8\ud55c \uadf8\ub798\ud53d menu.settings.sure=\uac00\uc838\uc624\uac70\ub098 \ub2eb\uae30 \uc804\uc5d0 \ud655\uc778 menu.settings.pointon=\uac1c\uccb4 \uc704\uc5d0 \uc810\uc744 \uc0dd\uc131\ud560\uc9c0 \ubb3b\uae30 menu.settings.intersection=\uad50\uc810 \ub9cc\ub4e4\uae30 \uc804\uc5d0 \ubb3b\uae30 menu.settings.choice=\uac1c\uccb4\uc758 \uc120\ud0dd\ucc3d \ubcf4\uc774\uae30 menu.settings.movename=\uc6c0\uc9c1\uc774\ub294 \ub3d9\uc548 \uac12 \ubcf4\uc5ec\uc8fc\uae30 menu.settings.movefixname=\uc6c0\uc9c1\uc774\ub294 \ub3d9\uc548 \uace0\uc815\ub41c \uac12 \ubcf4\uc774\uae30 menu.settings.restricted=\ud559\uad50 \ubaa8\ub4dc menu.colors=\uc0c9 \uc9c0\uc815 colors.default=\uae30\ubcf8\uc0c9 \uc0ac\uc6a9 colors.color0=\uc0c9\uae54 1 (\uac80\uc815) colors.color1=\uc0c9\uae54 2 (\ucd08\ub85d) colors.color2=\uc0c9\uae54 3 (\ud30c\ub791) colors.color3=\uc0c9\uae54 4 (\uac08\uc0c9) colors.color4=\uc0c9\uae54 5 (\uccad\ub85d) colors.color5=\uc0c9\uae54 6 (\ube68\uac15) colors.background=\ubc30\uacbd\uc0c9 colors.select=\uc120\ud0dd\ub41c \uac1c\uccb4\uc758 \uc0c9 colors.target=\ubaa9\ud45c\ub41c \uac1c\uccb4\uc758 \uc0c9 myfiledialog.dir=\ud3f4\ub354 myfiledialog.file=\ud30c\uc77c myfiledialog.pattern=\ud30c\uc77c\ud615\uc2dd filedialog.open=\ubd88\ub7ec\uc624\uae30 filedialog.saveas=\ub2e4\ub978\uc774\ub984\uc73c\ub85c \uc800\uc7a5\ud558\uae30 filedialog.open.action=\ubd88\ub7ec\uc624\uae30 filedialog.saveas.action=\uc800\uc7a5\ud558\uae30 filedialog.htmlsave=HTML\ub85c \uc800\uc7a5\ud558\uae30 filedialog.htmlsave.action=\uc800\uc7a5\ud558\uae30 pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=\uc800\uc7a5\ud558\uae30 load=\ubd88\ub7ec\uc624\uae30 abort=\uc911\ub2e8 OK=\ud655\uc778 bound.release=\uc810 \ubb36\uae30 \ud574\uc81c bound.bind=\uc810\uc744 \uac1c\uccb4 \uc704\ub85c \ubb36\uae30 bound.error=\uad50\uc810\uc744 \ucc3e\uae30 \uc704\ud55c \uac1c\uccb4\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc74c! constructiondisplay.edit=\uac1c\uccb4 \ud3b8\uc9d1 constructiondisplay.copy=\ud074\ub9bd\ubcf4\ub4dc\ub85c \ubcf5\uc0ac edit.Title=\ud2b9\uc131 edit.name=\uc774\ub984 edit.hidden=\uac10\ucd94\uae30 edit.text=\uc124\uba85 edit.fixed=\uace0\uc815 edit.color=\uc0c9\uae54 edit.ok=\ud655\uc778 edit.cancel=\ucde8\uc18c edit.showname=\uc774\ub984 \ubcf4\uc774\uae30 edit.point.title=\uc810 \ud3b8\uc9d1 edit.point.type=\uc720\ud615 edit.point.x=X edit.point.y=Y edit.point.intersection=\uc810\uc5d0\uc11c \uba40\ub9ac edit.point.showvalue=\uc88c\ud45c \ubcf4\uc774\uae30 edit.point.colortype=\ub450\uaed8 edit.point.bound=(\ubb36\uc778)\ubc94\uc704 edit.point.away=\uba40\ub9ac edit.point.close=\uac00\uae5d\uac8c edit.point.free=\uc870\uac74\ubb34\uc2dc edit.line.title=\uc9c1\uc120, \ubc18\uc9c1\uc120, \uc120\ubd84 \ud3b8\uc9d1 edit.line.normal=\ubcf4\ud1b5 edit.line.thick=\uad75\uac8c edit.line.thin=\uac00\ub298\uac8c(\uc810\uc120) edit.line.invisible=\ub208\uc5d0 \ubcf4\uc774\uc9c0 \uc54a\ub294 edit.line.type=\uc720\ud615 edit.segment.length=\uae38\uc774 edit.segment.showvalue=\uae38\uc774 \ubcf4\uc774\uae30 edit.circle.title=\uc6d0 \ud3b8\uc9d1 edit.circle.length=\ubc18\uc9c0\ub984 edit.circle.partial=\uc77c\ubd80\ubd84 \ubcf4\uc774\uae30 edit.circle.range=\ubc94\uc704 \uc124\uc815 edit.circle.killrange=\ubc94\uc704 \uc9c0\uc6b0\uae30 edit.plumb.restricted=\uc81c\ud55c(restricted) edit.angle.title=\uac01 \ud3b8\uc9d1 edit.angle.length=\ud06c\uae30 edit.angle.displaysize=\ud45c\uc2dc\ub418\ub294 \ud06c\uae30 edit.angle.normal=\ubcf4\ud1b5 edit.angle.small=\uc791\uac8c edit.angle.large=\ud06c\uac8c edit.expression.title=\uc2dd \ud3b8\uc9d1 edit.expression=\uacc4\uc0b0\uc2dd edit.expression.prompt=\uc124\uba85 edit.area.title=\ub2e4\uac01\ud615 \ud3b8\uc9d1 edit.area.back=\ub9e8 \ub4a4\ub85c export.title=HTML \ub0b4\ubcf4\ub0b4\uae30 export.pagetitle=\ud398\uc774\uc9c0 \uc81c\ubaa9 export.width=\ud3ed export.height=\ub192\uc774 export.jar=Jar \ud30c\uc77c export.comment=\uc8fc\uc11d \uc800\uc7a5 export.file=\uc791\ub3c4 \ud30c\uc77c export.job=\uacfc\uc81c \ubcf4\uc774\uae30 export.color=\uc120\ud0dd\ub41c \uc0c9 export.backgroundcolor=\ud398\uc774\uc9c0\uc5d0 \ubc30\uacbd\uc0c9 \uc0ac\uc6a9 export.appletcolor=\uc560\ud50c\ub9bf\uc5d0 \ubc30\uacbd\uc0c9 \uc0ac\uc6a9 export.plain=\uafb8\ubc08\uc5c6\uc774 export.3D=\ud14c\ub450\ub9ac export.breaks=\uc791\ub3c4\uacfc\uc815\ubcf4\uae30(\uc911\ub2e8\uc810) export.icons=\ud14c\ub450\ub9ac\uc640 \uc544\uc774\ucf58 export.full=\ud14c\ub450\ub9ac, \uc544\uc774\ucf58, \uc0c1\ud0dc\ubc14 export.nonvisual=\ud14c\ub450\ub9ac, \uc544\uc774\ucf58, \uba85\ub839 \uc785\ub825 \uc904 export.style=\uc560\ud50c\ub9bf \uc720\ud615 export.setcolor=\ubc30\uacbd\uc0c9 \uc120\ud0dd export.savefirst=\ud30c\uc77c\uc774 \uc800\uc7a5\ub418\uc9c0 \uc54a\uc558\uc74c! export.soltext=\ud574\ub2f5 export.stylesheet=CSS \uc720\ud615 \ud30c\uc77c export.solution=\ud574\ub2f5 \ud30c\uc77c export.jumpsol=\ud574\ub2f5\uc73c\ub85c \uc774\ub3d9 export.linksol=\ud574\ub2f5\uacfc \uc5f0\uacb0 export.savesol=\ud574\ub2f5 \ud30c\uc77c \uc800\uc7a5 export.track=\uc810\uc758 \uc790\ucde8 export.digits=\uc18c\uc218\uc810 \uc800\uc7a5 export.setsize=\ucc3d\ud06c\uae30 \uac00\uc838\uc624\uae30 export.signature=\ub9cc\ub4e0\uc774 export.colors=\uc9c0\uc815\ub41c \uc0c9 \uc800\uc7a5 export.background=\uc9c0\uc815\ub41c \ubc30\uacbd \uc800\uc7a5 help.title=\ub3c4\uc6c0\ub9d0 help.error=\ub3c4\uc6c0\ub9d0 \ud30c\uc77c\uc744 \uc5f4 \uc218 \uc5c6\uc74c! help.file=schoolgeometry.txt coloreditor.title=\uc0c9\uae54 \ud3b8\uc9d1 coloreditor.red=\ube68\uac15 coloreditor.green=\ucd08\ub85d coloreditor.blue=\ud30c\ub791 coloreditor.color=\uc120\ud0dd\ub41c \uc0c9 comment.title=\uc791\ub3c4 \uc8fc\uc11d(Construction Comment) comment.set=\uc124\uc815(Set) comment.cancel=\ucde8\uc18c comment.close=\ub2eb\uae30 iconedit.title=\uc544\uc774\ucf58 \ubc14 \ud3b8\uc9d1 iconedit.twobars=\uc544\uc774\ucf58 \ubc15\uc2a4 \ub450 \uc904\ub85c jobcomment.title=\uacfc\uc81c\ub0b4\uc6a9 select.title=\uc120\ud0dd select.ok=\ud655\uc778 select.cancel=\ucde8\uc18c select.comment=\uc8fc\uc11d \ubcf4\uc774\uae30 select.all=\ubaa8\ub450 message.circle.midpoint=\uc6d0: \uc911\uc2ec? message.circle.radius=\uc6d0: \uc6d0 \uc704\uc758 \ud55c \uc810 (shift: \ubc18\uc9c0\ub984 \uace0\uc815)? message.fixedcircle.midpoint=\ubc18\uc9c0\ub984\uc774 \uc8fc\uc5b4\uc9c4 \uc6d0: \uc911\uc2ec? message.fixedcircle.radius=\ubc18\uc9c0\ub984\uc774 \uc8fc\uc5b4\uc9c4 \uc6d0: \ubc18\uc9c0\ub984? message.line.first=\uc9c1\uc120: \uccab\ubc88\uc9f8 \uc810? message.line.second=\uc9c1\uc120: \ub450\ubc88\uc9f8 \uc810? message.ray.first=\ubc18\uc9c1\uc120: \ucd9c\ubc1c\uc810? message.ray.second=\ubc18\uc9c1\uc120: \ub450\ubc88\uc9f8 \uc810? message.move.select=\uc774\ub3d9: \uac1c\uccb4\ub97c \uc120\ud0dd\ud558\uc2dc\uc624! (shift: \ucd94\uac00) message.move.move=\uc774\ub3d9: \uc810 \uc774\ub3d9? message.point=\uc810: \uc810\uc744 \ucc0d\uc73c\uc2dc\uc624! (shift: \uace0\uc815) message.segment.first=\uc120\ubd84: \uccab\ubc88\uc9f8 \uc810? message.segment.second=\uc120\ubd84: \ub450 \ubc88\uc9f8 \uc810 (shift: \uae38\uc774 \uace0\uc815)? message.fixedsegment.first=\uae38\uc774\uac00 \uace0\uc815\ub41c \uc120\ubd84: \uccab\ubc88\uc9f8 \uc810? message.fixedsegment.second=\uae38\uc774\uac00 \uace0\uc815\ub41c \uc120\ubd84: \ub450\ubc88\uc9f8 \uc810! message.intersection.first=\uad50\uc810: \uccab\ubc88\uc9f8 \uac1c\uccb4 \ub610\ub294 \uad50\uc810? message.intersection.second=\uad50\uc810: \ub450\ubc88\uc9f8 \uac1c\uccb4? message.hide=\uac10\ucd94\uae30/\ubcf4\uc774\uae30: \uac1c\uccb4 \uc120\ud0dd! message.tracker.select=\uc790\ucde8: \uc790\ucde8\ub85c \ub0a8\uae38 \uc810\uc774\ub098 \uc120 \uc120\ud0dd (shift: \ucd94\uac00)? message.tracker.selectpoint=\uc790\ucde8: \uc6c0\uc9c1\uc77c \uc810? message.tracker.move=\uc790\ucde8: \uc810\uc744 \uc6c0\uc9c1\uc774\uc2dc\uc624! message.objecttracker.select=\uc790\ub3d9\uc790\ucde8: \uc790\ucde8\ub97c \ub0a8\uae38 \uc120 \ub610\ub294 \uc810 (shift: \ucd94\uac00)? message.objecttracker.object=\uc790\ub3d9\uc790\ucde8: \uacbd\ub85c\uac00 \ub420 \uc120\uc774\ub098 \uc6d0? message.objecttracker.selectpoint=\uc790\ub3d9\uc790\ucde8: \uc6c0\uc9c1\uc77c \uc810? message.objecttracker.selectanypoint=\uc790\ub3d9\uc790\ucde8: Any other point to move? message.objecttracker.move=\uc790\ub3d9\uc790\ucde8: Move the point! message.objecttracker.start=\uc790\ub3d9\uc790\ucde8: \ud074\ub9ad\ud558\uba74 \uc6c0\uc9c1\uc784! message.parallel.first=\ud3c9\ud589\uc120: \uc120? message.parallel.second=\ud3c9\ud589\uc120: \uc810? message.plumb.first=\uc218\uc9c1\uc120: \uc120? message.plumb.second=\uc218\uc9c1\uc120: \uc810? message.circle3.first=\uc6d0: \uccab\ubc88\uc9f8 \uc810(\ubc18\uc9c0\ub984)? message.circle3.second=\uc6d0: \ub450\ubc88\uc9f8 \uc810(\ubc18\uc9c0\ub984)? message.circle3.midpoint=\uc6d0: \uc911\uc2ec? message.midpoint.first=\uc911\uc810: \uccab\ubc88\uc9f8 \uc810? message.midpoint.second=\uc911\uc810: \ub450\ubc88\uc9f8 \uc810? message.quadric=\uc6d0\ubfd4\uace1\uc120: \uc810 \ubc88\ud638 message.angle.first=\uac01: \uccab\ubc88\uc9f8 \uc810? message.angle.root=\uac01: \uaf2d\uc9c0\uc810? message.angle.second=\uac01: \uc138\ubc88\uc9f8 \uc810 (shift: \ud06c\uae30 \uace0\uc815)? message.fixedangle.first=\ud06c\uae30\uac00 \uace0\uc815\ub41c \uac01: \uccab\ubc88\uc9f8 \uc810? message.fixedangle.root=\ud06c\uae30\uac00 \uace0\uc815\ub41c \uac01: \uaf2d\uc9c0\uc810? message.fixedangle.second=\ud06c\uae30\uac00 \uace0\uc815\ub41c \uac01: \uc544\ubb34\uacf3\uc774\ub098 \ud074\ub9ad! message.label.select=Move Label: Select a label! message.label.move=Move Label: Move the label! message.boundedpoint=\uac1c\uccb4 \uc704\uc758 \uc810: \uc6d0 \ub610\ub294 \uc120 (shift: don't fix)? message.parameters=\ub9e4\ud06c\ub85c \uc2dc\uc791\uc810: \uc870\uac74\uc73c\ub85c \uc8fc\uc5b4\uc9c8 \uac1c\uccb4\ub4e4? message.targets=\ub9e4\ud06c\ub85c \uacb0\uacfc\ubb3c: \ub9cc\ub4e4 \uac1c\uccb4\ub4e4? message.savejob.first=\uacfc\uc81c\uc815\uc758: \ubcf4\uc5ec\uc904 \ub9c8\uc9c0\ub9c9 \uac1c\uccb4? message.savejob.second=\uacfc\uc81c\uc815\uc758: \ub9cc\ub4e4\uc5b4\uc57c \ud560 \uac1c\uccb4 (shift: don't check)? message.savejob.third=\uacfc\uc81c\uc815\uc758: Further objects to be displayed? message.runmacro=\ub9e4\ud06c\ub85c %: %. % - % message.runmacro.return=(SPACE chooses %) message.runmacro.fixes=(SHIFT fixes selection) message.delete=\uc9c0\uc6b0\uae30: \uac1c\uccb4 \uc120\ud0dd! message.reorder=\uc21c\uc11c\ubc14\uafb8\uae30: \uac1c\uccb4 \uc120\ud0dd! message.expression=\uacc4\uc0b0\uc2dd: \uc704\uce58 \uc120\ud0dd! message.area=\ub2e4\uac01\ud615: \uaf2d\uc9c0\uc810? message.text=\uae00\uc0c1\uc790: \uc704\uce58 \uc120\ud0dd! message.animator.point=\uc560\ub2c8\uba54\uc774\uc158: \uc6c0\uc9c1\uc77c \uc810? message.animator.segment=\uc560\ub2c8\uba54\uc774\uc158: \uc6d0 \ub610\ub294 \uc120\ubd84? message.animator.running=\uc560\ub2c8\uba54\uc774\uc158: \ud074\ub9ad!(\uc6c0\uc9c1\uc784/\uba48\ucda4) message.range.first=\ubc94\uc704 \uc124\uc815: \ud638\uc758 \uc2dc\uc791 \uc704\uce58\ub97c \uc54c\ub824\uc8fc\ub294 \uc810 message.range.second=\ubc94\uc704 \uc124\uc815: \ub05d\uc744 \uc54c\ub824\uc8fc\ub294 \uc810 message.setaway.away=\uad50\uc810\uc774 \uc5b4\ub5a4 \uc810\uacfc \uba40\uac8c? message.setaway.close=\uad50\uc810\uc774 \uc5b4\ub5a4 \uc810\uacfc \uac00\uae5d\uac8c? objectsedit.title=\ud2b9\uc131 \ud3b8\uc9d1 point.type.square=\uc0ac\uac01\ud615 point.type.diamond=\ub2e4\uc774\uc544\ubaac\ub4dc point.type.circle=\uc6d0 point.type.dot=\uc810 color.type.normal=\ubcf4\ud1b5 color.type.thick=\uad75\uac8c color.type.thin=\uac00\ub298\uac8c color.type.invisible=\ubcf4\uc774\uc9c0 \uc54a\uac8c(Invisible) text.point=\uc88c\ud45c\uac00 ( %, % )\uc778 \uc810 text.line=\ub450 \uc810 %, %\uc744 \uc9c0\ub098\ub294 \uc9c1\uc120 text.segment=\uc810 %\uc5d0\uc11c \uc810 %\uc5d0 \uadf8\uc740 \uc120\ubd84 text.segment.fixed=Line segment from % to % with length % text.ray=\uc810 %\uc5d0\uc11c \uc810 %\uc744 \uc9c0\ub098\ub294 \ubc18\uc9c1\uc120 text.intersection=\ub450 \ub3c4\ud615 %, %\uc758 \uad50\uc810 text.circle=\uc911\uc2ec\uc774 %\uc774\uace0 %\uc744 \uc9c0\ub098\ub294 \uc6d0 text.circle.fixed=Circle around % through % with radius % text.fixedcircle=\uc911\uc2ec\uc774 %\uc774\uace0 \ubc18\uc9c0\ub984\uc774 %\uc778 \uc6d0 text.circle3=\uc911\uc2ec\uc774 %\uc774\uace0 \uc120\ubd84% %\uc744(\ub97c) \ubc18\uc9c0\ub984\uc73c\ub85c \ud558\ub294 \uc6d0 text.parallel=\uc810 %\uc744 \uc9c0\ub098\uace0 %\uc5d0 \ud3c9\ud589\ud55c \uc9c1\uc120 text.midpoint=\ub450 \uc810 %, %\uc758 \uc911\uc810 text.quadric=\uc810 %\uc744 \uc9c0\ub098\ub294 \uc6d0\ubfd4\uace1\uc120 text.plumb=\uc810 %\uc744 \uc9c0\ub098\uace0 %\uc5d0 \uc218\uc9c1\uc778 \uc9c1\uc120 text.angle=\uac01 % % % text.angle.fixed=Angle % - % - % with size % text.boundedpoint=% \uc704\uc758 \uc810 text.expression=\uc2dd " % " at %, % text.area=\ub2e4\uac01\ud615 text.fixedangle= \uc810 %\uc744 \uc9c0\ub098 \uaf2d\uc9c0\uc810\uc774 %\uc774\uace0 \ud06c\uae30 %\uc778 \uac01 name.Point=Point name.Intersection=Intersection name.OtherIntersection=Intersection name.Circle=Circle name.Circle3=Circle name.Segment=Segment name.Ray=Ray name.Line=Line name.TwoPointLine=Line with two Points name.Parallel=Parallel name.Midpoint=Midpoint name.Quadric=Quadric name.Plumb=Plumb name.Angle=Angle name.PointOn=ObjectPoint name.Expression=Expression name.Polygon=Polygon prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.angle==a(,,) prompt.area=A(,,) prompt.quadric=quadric(,,,,) prompt.function=function(,,,,,) name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=pl name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=p name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=poly name.short.Function=f popup.hidden=\uac10\ucdb0\uc9c4 \ub3c4\ud615 \ubcf4\uae30 popup.replay=\uc791\ub3c4\uacfc\uc815 \ub2e4\uc2dc\ubcf4\uae30 popup.empty=--- \ub9e4\ud06c\ub85c --- replay.title=\ub2e4\uc2dc\ubcf4\uae30 reorder.title=\uac1c\uccb4 \uc21c\uc11c \ubc14\uafb8\uae30 reorder.message=insert after reorder.notfound=\uac1c\uccb4\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc74c! reorder.warning=Could not do that! setgrid.title=\uaca9\uc790\uc758 \uac04\uaca9 setgrid.prompt=\uaca9\uc790\uc758 \uac04\uaca9 \uc785\ub825 setgrid.set=\uc9c0\uc815(Set) definemacro.title=\ub9e4\ud06c\ub85c \uc815\uc758 definemacro.name=\uc774\ub984 definemacro.comment=\ub9e4\ud06c\ub85c \uc8fc\uc11d definemacro.noparams=\ub9e4\ud06c\ub85c \uc2dc\uc791\uc810\uc774 \ud544\uc694\ud569\ub2c8\ub2e4! definemacro.nomacro=\uc774\uac83\uc740 \uc2e4\ud589 \uac00\ub2a5\ud55c \ub9e4\ud06c\ub85c\uac00 \uc544\ub2d9\ub2c8\ub2e4! definemacro.targetsonly=\uc791\ub3c4 \uac10\ucd94\uae30 definemacro.invisible=\uc644\uc804\ud788 \uac10\ucd94\uae30 definemacro.promptfor=\uc785\ub825\uac12(Prompt for) macro.replace.title=\ub9e4\ud06c\ub85c \uc7ac\uc124\uc815 macro.replace=\ub9e4\ud06c\ub85c \uc7ac\uc124\uc815: macro.replace.all=\ubaa8\ub450 macro.usage=\ub9e4\ud06c\ub85c \uc0ac\uc6a9 \uc624\ub958!(\uc0ac\uc6a9\uc790 \ud301\uc744 \ubcf4\uc2dc\uc624) macro.prompt.title=Parameter Prompt macro.prompt.prompt=Enter a value for the parameter macro.prompt.illegal=Illegal value! digits.title=\uc18c\uc218\uc810 \uc704\uce58 \uc124\uc815 digits.edit=\ud3b8\uc9d1 digits.lengths=\ud654\uba74 digits.angles=\uac01 editrun.title=run \ud30c\uc77c \ud3b8\uc9d1 editrun.run=\uc800\uc7a5\ud558\uace0 \uc2e4\ud589 editrun.load=\ub2e4\ub978 run \ud30c\uc77c sure.title=\ud655\uc2e4\ud569\ub2c8\uae4c? sure.macros=\ub2f9\uc2e0\uc774 \uc815\uc758\ud55c \ubaa8\ub4e0 \ub9e4\ud06c\ub85c\ub97c \uc9c0\uc6b0\uc2dc\uaca0\uc2b5\ub2c8\uae4c? sure.delete=Forget current changes? close.title=\ub05d close.prompt=\uc815\ub9d0 \ub05d\ub0b4\uc2dc\uaca0\uc2b5\ub2c8\uae4c? file.exists.title=\ud30c\uc77c \uc788\uc74c file.exists.overwrite=\ud30c\uc77c\uc774 \uc874\uc7ac\ud569\ub2c8\ub2e4. \ub36e\uc5b4\uc4f0\uaca0\uc2b5\ub2c8\uae4c? exception.nparams=Illegal number of Parameters! exception.notfound=\uac1c\uccb4\ub97c \ucc3e\uc744 \uc218 \uc5c6\uac70\ub098 \uacc4\uc0b0\uc2dd \uc774\ud6c4\uc5d0 \uc815\uc758 \ub418\uc5c8\uc74c! exception.type=Illegal Object Type! exception.expression=\uacc4\uc0b0\uc2dd \uc624\ub958! exception.canfix=Object cannot be fixed! exception.fix=Value invalid! exception.novalue=Value invalid! exception.elementary=Invalid element in expression! exception.bracket=Closing brackets missing! exception.quotes=Closing quotes missing! exception.dot=Two dots in number! exception.nodigit=No digit found in number! exception.function=Unknown function! exception.parameter=Illegal function parameter! exception.macro=Illegal macro parameter! exception.name=Need a Name! exception.job=Illegal Job Paramters! exception.track=Illegal Track Parameters! exception.animate=Illegal Animation Parameters! exception.boolean=Boolean Value must be true of false! exception.value=Illegal Value! exception.color=Illegal Color! exception.colortype=Illegal Thickness! exception.type=Illegal Point Type! exception.macroparameter=Illegal Macro Parameter! exception.macrotarget=Illegal Macro Target! exception.prompt=Illegal prompt oject! exception.prompt.parameter=Prompt object may not be a parameter! exception.parameters=Illegal Parameter! exception.brackets=Illegal Brackets! exception.double=\uc774\ub984\uc774 \uc720\uc77c\ud558\uc9c0 \uc54a\uc74c! error.setaway=This point is not defined before the intersection! error.objecttracker.depends=The point is bound to another object! constructiondisplay.title=Construction function.hide=Hide function.hide.short=hide function.rename=Name function.rename.short=name function.value=Value function.value.short=value function.window=Window function.window.short=W function.color=Color function.color.short=col function.thickness=Thickness function.thickness.short=th function.type=Type function.type.short=type function.partial=Partial function.partial.short=part function.fill=Fill function.fill.short=fill function.back=Background function.back.short=back function.acute=Acute function.acute.short=acute function.obtuse=Obtuse function.obtuse.short=obtuse function.solid=Solid function.solid.short=solid function restrict=Restrict function restrict.short=restrict expression.value=Value configure.title=\uc6f9 \ube0c\ub77c\uc6b0\uc800 \uc9c0\uc815 configure.prompt=\uc6f9 \ube0c\ub77c\uc6b0\uc800 \uba85\ub839\uc5b4 \uc785\ub825 # New Resources: background.error=\uadf8\ub9bc\uc744 \uac00\uc838\uc62c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4 (GIF or JPG!). menu.background=\ubc30\uacbd\ud654\uba74 menu.background.grab=\ud604\uc7ac \ud654\uba74\uc744 \ubc30\uacbd\ud654\uba74\uc73c\ub85c menu.background.clear=\ubc30\uacbd \uc9c0\uc6b0\uae30 menu.background.load=\ubc30\uacbd\uadf8\ub9bc \ubd88\ub7ec\uc624\uae30 ... menu.background.usesize=\uadf8\ub9bc \ud06c\uae30 \ubcc0\uacbd menu.background.tile=\ubc14\ub451\ud310 \ubaa8\uc591\uc73c\ub85c menu.background.center=\uac00\uc6b4\ub370 \ub9de\ucda4 iconhelp.grab=\ubc30\uacbd\uc124\uc815/\uc0ad\uc81c filedialog.backgroundload=\ubc30\uacbd \ubd88\ub7ec\uc624\uae30 filedialog.backgroundload.action=\ubd88\ub7ec\uc624\uae30 # New Resources in Version 2.14 menu.file.compress=\ud56d\uc0c1 \uc555\ucd95\ud558\uae30 menu.file.savesvg=SVG \ud30c\uc77c\ub85c \uc800\uc7a5\ud558\uae30 ... # Version 2.15 loading=\ubd88\ub7ec\uc624\ub294 \uc911\uc785\ub2c8\ub2e4. \uae30\ub2e4\ub824 \uc8fc\uc2ed\uc2dc\uc624! # Version 2.18 and 2.19 menu.settings.font.default=\uae30\ubcf8 \uae00\uaf34 menu.settings.font.bold=\uad75\uac8c menu.settings.font.large=\ud070 \uae00\uaf34 menu.file.saveeps=EPS \ud30c\uc77c\ub85c \uc800\uc7a5\ud558\uae30 menu.fonts=\uae00\uaf34 # Version 2.20 bmpscaler.title=Scale Bitmap bmpscaler.width=\ud3ed bmpscaler.height=\ub192\uc774 bmpscaler.scale=Factor (press Return) bmpscaler.illegal=Illegal Value # Version 2.21 renamemacro.title=\ub9e4\ud06c\ub85c \uc774\ub984 \ubc14\uafb8\uae30 renamemacro.name=\ub9e4\ud06c\ub85c \uc0c8\uc774\ub984 menu.special.renamemacro=\ub9e4\ud06c\ub85c \uc774\ub984 \ubc14\uafb8\uae30 ... # Version 2.23 savequestion.title=\uc800\uc7a5\ud558\uae30 savequestion.qsave=\ubcc0\uacbd\ub41c \ub0b4\uc6a9 \uc800\uc7a5? # Version 2.25 exception.printsize=Page too small for this construction! iconhelp.nohelp=\uad00\ub828 \ub3c4\uc6c0\ub9d0 \uc5c6\uc74c iconhelp.type?=\uc810 \uc720\ud615 iconhelp.thickness?=\ub450\uaed8 iconhelp.color?=\uc0c9\uae54 iconhelp.filled=\uac1c\uccb4\ub0b4\ubd80 \uc0c9\uce60\ud558\uae30 iconhelp.isback=\ub4a4\ub85c(\ubc30\uacbd\uc73c\ub85c \uadf8\ub9ac\uae30) iconhelp.inverse=\ubc18\uc0ac\ub41c \uac01 iconhelp.angle?=\ud06c\uae30 # Version 2.28 message.objecttracker.stop=\uc790\ub3d9\uc790\ucde8: \ud074\ub9ad!(\uc6c0\uc9c1\uc784/\uc790\ucde8\uac10\ucda4/\uba48\ucda4) (shift left/right \uc18d\ub3c4) # Version 2.31 menu.settings.indicate=\uc0c1\uc704\uac1c\uccb4 \ubcf4\uc774\uae30 menu.options.other=\uc124\uc815 menu.help.welcome=\uc774\ubc88 \ubc84\uc804\uc5d0 \ub300\ud558\uc5ec iconhelp.twolines=\uc544\uc774\ucf58 \ub450 \uc904\ub85c iconhelp.qintersection=\uad50\uc810\ub9cc\ub4e4\uc9c0 \ubb3b\uae30 iconhelp.qchoice=Show dialog for object selection iconhelp.qpointon=\uac1c\uccb4 \uc704\uc5d0 \uc810\uc744 \ub9cc\ub4e4\uc9c0 \ubb3b\uae30 iconhelp.noindicate=Do not indicate objects under mouse # Version 2.33 menu.file.new=\uc0c8\ub85c \ub9cc\ub4e4\uae30 (Ctrl-n) # Version 2.34 edit.text.title=\uae00\uc0c1\uc790 edit.text.settings=\uae00\uc0c1\uc790 \ud3b8\uc9d1 menu.settings.filedialog=\ub300\ud654\ucc3d \ubaa8\uc591 \ubc14\uafc8 # Version 2.35 menu.settings.bitmapbackground=\ube44\ud2b8\ub9f5\uc5d0\uc11c \ubc30\uacbd\uc0c9 \uc0ac\uc6a9\ud558\uae30 # Version 2.36 menu.file.savegraphics=\uadf8\ub9bc\ud30c\uc77c\ub85c \uc800\uc7a5\ud558\uae30 ... bmpscaler.title=\uadf8\ub9bc \ud06c\uae30 \uc870\uc815 # Version 2.37 menu.file.savepdf=PDF \ud30c\uc77c\ub85c \uc800\uc7a5\ud558\uae30 iconhelp.chord=Show as segment # Version 2.39 message.setfixedangle.first=\uac01 \uc9c0\uc815: \uccab\ubc88\uc9f8 \uc810? message.setfixedangle.second=\uac01 \uc9c0\uc815: \uaf2d\uc9c0\uc810? message.setfixedangle.third=\uac01 \uc9c0\uc815: \uc138\ubc88\uc9f8 \uc810? edit.fixedangle.set=\ud06c\uae30 \uc9c0\uc815 ... message.setfixedcircle.first=Set fixed circle: \uccab\ubc88\uc9f8 \uc810? message.setfixedcircle.second=Set fixed circle: \ub450\ubc88\uc9f8 \uc810? edit.fixedcircle.set=\ud06c\uae30 \uc9c0\uc815 ... # Version 2.40 minpointsize.title=\uc791\uc740 \uc810\uc758 \ud06c\uae30 \uc124\uc815 minpointsize.prompt=\uc791\uc740 \uc810\uc758 \ud06c\uae30 (\uae30\ubcf8 \uac12 : 3) menu.settings.font.minpointsize=\uc791\uc740 \uc810\uc758 \ud06c\uae30 ... # Version 2.41 name.short.Track=Tr text.track=%\uc758 \uc790\ucde8 < %\uc774(\uac00) % \uc704\ub97c \uc6c0\uc9c1\uc77c \ub54c > trackquestion.keep=\uc774 \uc791\ub3c4\uc758 \uc790\ucde8\ub97c \uc720\uc9c0\ud560\uae4c\uc694? trackquestion.title=\uc790\ucde8 \uc720\uc9c0 menu.options.track=\uc790\ucde8 \uc720\uc9c0 (Shift-Enter) iconhelp.indicate=\uc791\ub3c4 \uacb0\uacfc \ubbf8\ub9ac\ubcf4\uae30 iconhelp.nohelp=\uad00\ub828 \ub3c4\uc6c0\ub9d0 \uc5c6\uc74c # Version 2.42 objects.draw=\ub9c8\uc6b0\uc2a4\ub85c \uadf8\ub9ac\uae30 menu.options.cleardraw=\uadf8\ub9b0 \uadf8\ub9bc \uc9c0\uc6b0\uae30 (Esc) iconhelp.draw=\ub9c8\uc6b0\uc2a4\ub85c \uadf8\ub9ac\uae30 message.draw=\ub9c8\uc6b0\uc2a4\ub85c \uadf8\ub9ac\uae30 (ESC to clear) shortcuts.draw=; # Version 2.43 message.rename=\uc0c8 \uc774\ub984 A,B,C,...: \uac1c\uccb4 \uc120\ud0dd! iconhelp.rename=\uc0c8 \uc774\ub984 A,B,C,... objects.rename=\uc0c8 \uc774\ub984 A,B,C,... shortcuts.rename=: iconhelp.anglereduce=\uac01\uc744 \ub098\ud0c0\ub0b4\ub294 \ubc18\uc9c1\uc120 \uac10\ucd94\uae30 # Version 2.45 menu.settings.smartboard=Smartboard Mode shortcuts.zoom=% objects.zoom=\ub9c8\uc6b0\uc2a4\ub85c \ucd95\uc18c/\ud655\ub300 message.zoom=\uc911\uc2ec \ub04c\uae30 \ub610\ub294 \ud655\ub300/\ucd95\uc18c # Version 2.46 menu.special.restricticons=\uae30\ubcf8 \uc544\uc774\ucf58\ub9cc # Version 2.47 menu.settings.indicate.simple=Indicate Points only menu.settings.beginner=\ucd08\ubcf4\uc790 \ubaa8\ub4dc question.again=\ud56d\uc0c1 \uc774 \uc9c8\ubb38\uc744 \ud568. # Version 2.49 definemacro.parameters=Parameter Prompt(s) ("=name" fixes) # Version 2.53 menu.actions.angles=\uac01 menu.actions.circles=\uc6d0 menu.actions.lines=\uc9c1\uc120 menu.actions.points=\uc810 # Version 3.00 info.title=\uad00\ub828 \ub3c4\uc6c0\ub9d0 info.related=\uad00\ub828\ub41c \uc8fc\uc81c info.notfound=Topic not found! info.noresults=\uc5f0\uacb0\ub41c \ub0b4\uc6a9 \uc5c6\uc74c! info.searchresults=- \uac80\uc0c9\uacb0\uacfc - info.select=- \uc120\ud0dd - info.search=\uac80\uc0c9 info.back=\ub4a4\ub85c info.start=\ucc98\uc74c\uc73c\ub85c iconhelp.info=\uc9c4\ud589\uc911\uc778 \uc791\ub3c4\uad00\ub828 \ub3c4\uc6c0\ub9d0 menu.help.info=\uc9c4\ud589\uc911\uc778 \uc791\ub3c4\uad00\ub828 \ub3c4\uc6c0\ub9d0 myfiledialog.homedir=CaR Files myfiledialog.windowshome=My Documents myfiledialog.mkdir=\ud3f4\ub354 \ub9cc\ub4e4\uae30 myfiledialog.back=\ub4a4\ub85c myfiledialog.home=\uae30\ubcf8\ud3f4\ub354 menu.file.alwaysclearmacros=\ubd88\ub7ec\uc624\uae30 \uc804\uc5d0 \ub9e4\ud06c\ub85c \uc9c0\uc6b0\uae30 about.language=\uc5b8\uc5b4 bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=\ubc31\uc5c5 \ud30c\uc77c \uc0dd\uc131 # Version 3.02 menu.options.hideduplicates=\uc911\ubcf5\ub41c \uac1c\uccb4 \uac10\ucd94\uae30 # Version 3.03 menu.options.function=\ud568\uc218 \ub610\ub294 \uace1\uc120 text.function=Function ( % , % ) function.varmin=\ubd80\ud130 function.varmax=\uae4c\uc9c0 function.dvar=\uac04\uaca9 function.var=\ubcc0\uc218 function.y=y\uc88c\ud45c\ub97c \ub098\ud0c0\ub0b4\ub294 \uc2dd iconhelp.function=\ud568\uc218/\uace1\uc120 menu.options.editlast=\ub9c8\uc9c0\ub9c9 \uac1c\uccb4 \ud3b8\uc9d1 iconhelp.control.edit=\uc870\uac74 \ud3b8\uc9d1 iconhelp.control.hide=\uc911\ubcf5\ub41c \uac1c\uccb4 \uac10\ucd94\uae30 edit.function.title=\ud568\uc218 \ub610\ub294 \uace1\uc120 iconhelp.control.runmacro=\ub9e4\ud06c\ub85c \ub2e4\uc2dc \uc2e4\ud589 # Version 3.05 point.type.cross=\uc2ed\uc790\ud615 point.type.dcross=X\uc790\ud615 shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=\ub2e8\uc704 menu.special.break=\uc911\ub2e8\uc810 menu.bp.setbreak=\uc911\ub2e8\uc810 \uc124\uc815 menu.bp.clearbreak=\uc911\ub2e8\uc810 \uc9c0\uc6b0\uae30 menu.bp.sethidingbreak=\uac10\ucdb0\uc9c4 \uc911\ub2e8\uc810 \uc124\uc815 menu.bp.animatebreak=\uc560\ub2c8\uba54\uc774\uc158 \uc911\ub2e8\uc810 iconhelp.animatebreak=\uc560\ub2c8\uba54\uc774\uc158 \uc911\ub2e8\uc810 message.animatebreak=\uc560\ub2c8\uba54\uc774\uc158 \uc911\ub2e8\uc810: \ud074\ub9ad\ud558\uba74 \uba48\ucda4! (shift left/right \uc18d\ub3c4) menu.special.exporttemplate=\uc900\ube44\ub41c \ud2c0\uc5d0 \ub9de\ucdb0 HTML \ud30c\uc77c \ub9cc\ub4e4\uae30 templateload.open=\ud2c0 \ubd88\ub7ec\uc624\uae30 templateload.open.action=\uc5f4\uae30 menu.settings.doubleclick=\ub354\ube14\ud074\ub9ad\uc73c\ub85c \ub9e4\ud06c\ub85c \uc2e4\ud589 export.codebase=Codebase # Version 3.12 edit.equation=\ubc29\uc815\uc2dd # Version 3.23 menu.settings.squarepoints=\ud56d\uc0c1 \uc0ac\uac01\ud615 \ubaa8\uc591\uc758 \uc810 \uc0ac\uc6a9 # Version 3.37 menu.options.export=\uadf8\ub9bc\ud30c\uc77c \ub0b4\ubcf4\ub0b4\uae30 \uc124\uc815 menu.settings.minwidth=\uac00\uc7a5 \uc791\uc740 \uc120\uc758 \uad75\uae30\ub294 1 menu.settings.minpointsize=\uc81c\ud55c\ub41c \uc791\uc740 \uc810 \ud06c\uae30 menu.settings.minfontsize=\uc81c\ud55c\ub41c \uc791\uc740 \uae00\uaf34 \ud06c\uae30 minfontsize.title=\uc791\uc740 \uae00\uaf34\uc758 \ud06c\uae30 minfontsize.prompt=\uc791\uc740 \uae00\uaf34 (\uae30\ubcf8\uac12: 12) menu.options.minpointsize=\uc791\uc740 \uc810\uc758 \ud06c\uae30 menu.options.minfontsize=\uc791\uc740 \uae00\uaf34\uc758 \ud06c\uae30 # Version 3.38 menu.settings.scalepdf=Scale PDF and EPS output 1:1 # Version 3.41 menu.file.clip=Clip for Graphics Output ... clip.title=Set Clipping clip.width=\uac00\ub85c clip.height=\uc138\ub85c clip.screen=No Clipping # Version 3.42 menu.options.arrowsize=\ud654\uc0b4\ud45c\uc758 \ud06c\uae30 ... arrowsize.title=\ud654\uc0b4\ud45c\uc758 \ud06c\uae30 # Version 3.44 iconhelp.large=\ud070 \uae00\uaf34 \uc0ac\uc6a9 iconhelp.bold=\uad75\uc740 \uae00\uaf34 \uc0ac\uc6a9 menu.options.largefont=\ud070 \uae00\uaf34 menu.options.boldfont=\uad75\uc740 \uae00\uaf34 warning.previewframe=Frame larger than window! message.move.select=\uc774\ub3d9: \uc810 \uc120\ud0dd (shift: \ucd94\uac00, ctrl: \uc774\uc804 \uc0c1\ud0dc \ubcf4\uc774\uae30) # Version 3.46 iconbar.showseparators=\uad6c\ubd84\uae30\ud638 \ubcf4\uc774\uae30 # Version 3.48 menu.sizes=\ud06c\uae30 \uc124\uc815 menu.options.minlinesize=\uac00\ub294\uc120\uc758 \ub450\uaed8 ... minlinesize.title=\uac00\ub294 \uc120\uc758 \ub450\uaed8 minlinesize.prompt=\uac00\ub294\uc120\uc758 \ub450\uaed8 (\uae30\ubcf8\uac12: 1) arrowsize.prompt=\ud654\uc0b4\ud45c\uc758 \ud06c\uae30 \uc124\uc815 (\uae30\ubcf8\uac12: 10) menu.options.printscaler=\ub0b4\ubcf4\ub0bc \ud06c\uae30 ... menu.options.exportsettings=\uadf8\ub9bc\ud30c\uc77c \ub0b4\ubcf4\ub0b4\uae30 \uc124\uc815 ... printscaler.title=\ub0b4\ubcf4\ub0bc \ud06c\uae30 printscaler.width=\uac00\ub85c (cm) printscaler.height=\uc138\ub85c (cm) printscaler.dpi=\ud574\uc0c1\ub3c4 (dpi, \uae30\ubcf8\uac12 300) printscaler.linewidth=\uc120 \ub450\uaed8 (cm, \uae30\ubcf8\uac12 0.02) printscaler.pointsize=\uc810 \ud06c\uae30 (cm, \uae30\ubcf8\uac12 0.07) printscaler.textsize=\uae00\uc790 \ud06c\uae30 (cm, \uae30\ubcf8\uac12 0.3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=\uac00\ub85c (pixel) printscaler.h=\uc138\ub85c (pixel) printscaler.scale=\ud654\uba74\uacfc\uc758 \ube44\uc728 printscaler.middle=Cut out (do not rescale) printscaler.sizes=Scale lines, fonts, and points menu.file.savepng=PNG(\uadf8\ub9bc\ud30c\uc77c)\ub85c \uc800\uc7a5\ud558\uae30 warning.preview=Java 1.1\uc5d0\uc11c\ub294 \ubbf8\ub77c\ubcf4\uae30\uac00 \uc644\ubcbd\ud558\uae30 \uc2e4\ud589\ub418\uc9c0 \uc54a\ub294\ub2e4. iconedit.showseparators=\uad6c\ubd84\uae30\ud638 \ubcf4\uc774\uae30 printscaler.aspect=Keep Aspect Ratio printscaler.presets=Presets printscaler.preset=Make a Choice printscaler.preset.300dpi=Exactly scaled with 300 DPI printscaler.preset.300dpi6=6 cm Width with 300 DPI printscaler.preset.300dpi16=16 cm Width with 300 DPI printscaler.preset.window=\ucc3d\ud06c\uae30 printscaler.preset.clip50=Window Size Clipped 50% message.saving=\uc7a0\uc2dc\ub9cc \uae30\ub2e4\ub824 \uc8fc\uc2ed\uc2dc\uc624! menu.options.printscalepreview=\ubbf8\ub9ac\ubcf4\uae30 (Ctrl-F3) date=\ub9cc\ub4e0 \ub0a0 # Version 3.51 help=\ub3c4\uc6c0\ub9d0 # Version 3.61 editconditionals.title=\uc870\uac74 \ud3b8\uc9d1 editconditionals.hidden=\uac10\ucd94\uae30 editconditionals.superhidden=\uc644\uc804\ud788 \uac10\ucd94\uae30 editconditionals.visible=\ubcf4\ud1b5 editconditionals.showname=\uc774\ub984 \ubcf4\uc774\uae30 editconditionals.showvalue=\uac12 \ubcf4\uc774\uae30 editconditionals.background=\ub4a4\ub85c(\ubc30\uacbd\uc73c\ub85c) editconditionals.solid=\ubd88\ud22c\uba85\ud558\uac8c exception.superfluous=\uacc4\uc0b0\uc2dd\uc5d0 \ubd88\ud544\uc694\ud55c \ubb38\uc7a5\uc774 \uc788\uc74c. # Version 3.62 menu.options.selectionsize=\uc120\ud0dd\ub41c \uac1c\uccb4\uc758 \ud06c\uae30 selectionsize.title=\uc120\ud0dd\ub41c \uac1c\uccb4\uc758 \ud06c\uae30 selectionsize.prompt=\uc120\ud0dd\ub41c \uac1c\uccb4\uc758 \ud06c\uae30 (\uae30\ubcf8\uac12 1.5) # Version 3.63 select.comment.title=\ub9e4\ud06c\ub85c \uc8fc\uc11d # Version 3.68 edit.area.area=\ub113\uc774(\uc2dc\uacc4\ubc29\ud5a5:\uc591\uc218) # Version 3.73 myfiledialog.oldfiles=\ucd5c\uadfc \ubb38\uc11c myfiledialog.olddirs=\ucd5c\uadfc \ud3f4\ub354 # Version 3.74 iconhelp.load=\ubd88\ub7ec\uc624\uae30 (Ctrl-o) iconhelp.save=\uc800\uc7a5\ud558\uae30 (Ctrl-s) iconhelp.new=\uc0c8\ub85c \ub9cc\ub4e4\uae30 (Ctrl-n) # Version 3.81 warning.loadbackground=\ubc30\uacbd\ud654\uba74 \ubd88\ub7ec\uc624\uae30 \uc624\ub958 # Version 3.9 function.x=x\uc88c\ud45c\ub97c \ub098\ud0c0\ub0b4\ub294 \uc2dd(\ud568\uc218 \uc77c\ub54c\ub294 \uacf5\ub780) # Version 3.91 constructiondisplay.select=\uc120\ud0dd constructiondisplay.all=\ubaa8\ub4e0 \uac1c\uccb4 constructiondisplay.visible=\ubcf4\uc774\ub294 \uac1c\uccb4 constructiondisplay.points=\uc810 constructiondisplay.lines=\uc120 constructiondisplay.circles=\uc6d0 constructiondisplay.angles=\uac01 constructiondisplay.other=\ub2e4\ub978 \uac1c\uccb4 menu.file.copypng=\ud074\ub9bd\ubcf4\ub4dc\uc5d0 \ubcf5\uc0ac\ud558\uae30 exception.clipboardcopy=\ubcf5\uc0ac \uc2e4\ud328! menu.options.finegrid=\uc88c\ud45c\ucd95\ub9cc \ubcf4\uc774\uae30 # Vesion 3.93 edit.function.center=\uc911\uc559 \uc124\uc815 edit.function.free=\uc911\uc559 \ud574\uc81c message.setcenter=\uc911\uc559\uc810\uc744 \uc120\ud0dd! # Vesion 3.94 message.edit=\ud3b8\uc9d1: \uac1d\uccb4 (shift: \ucd94\uac00, ctrl: \uc870\uac74 \ud3b8\uc9d1)? # Version 3.95 edit.function.special=\uc810\uc73c\ub85c \ud45c\uc2dc\ud558\uae30 # Version 3.97 error.image=\uadf8\ub9bc\uacfc \uc791\ub3c4\ubb3c\uc774 \ub2e4\ub978 \ud3f4\ub354\uc5d0 \uc788\uc74c! filedialog.imageload=\uadf8\ub9bc \ubd88\ub7ec\uc624\uae30 filedialog.imageload.action=\ubd88\ub7ec\uc624\uae30 prompt.image=image(,,,) objects.image=\uadf8\ub9bc shortcuts.image=_ # Version 3.98 exception.depends=\uac1c\uccb4( % )\ub294 \ud604\uc7ac \uac1c\uccb4\uc5d0 \uc885\uc18d\ub418\uc5c8\ub2e4. error.depends=\uac1c\uccb4( % )\ub294 \ud604\uc7ac \uac1c\uccb4\uc5d0 \uc885\uc18d\ub418\uc5c8\ub2e4. constructiondisplay.sorted=\uc791\ub3c4\ub41c \uc21c\uc11c\ub300\ub85c # Version 3.99 edit.alias=\ubcc4\uce6d constructiondisplay.expressions=\uacc4\uc0b0\uc2dd # Version 4.00 iconhelp.image=\uadf8\ub9bc \ubd88\ub7ec\uc624\uae30 (_) message.image=\uadf8\ub9bc \uace0\uc815\uc744 \uc704\ud55c %\ubc88\uc9f8 \uc810 message.image.last=\uadf8\ub9bc\uc744 \uace0\uc815\ud558\uae30 \uc704\ud55c \ub9c8\uc9c0\ub9c9 \uc810 (\ub610\ub294 \uc774\ubbf8 \uc120\ud0dd\ub41c \uc810) editconditionals.z=\uacb9\uce58\ub294 \uc21c\uc11c # Version 4.01 name.FixedAngle=\uace0\uc815\uac01 # Version 4.04 menu.moresettings=\uc124\uc815 menu.settings.language=\uc5b8\uc5b4\uc124\uc815 language.title=\uc5b8\uc5b4\uc124\uc815 language.prompt=\ub2e4\uc74c \uc2e4\ud589\uc2dc \uc0ac\uc6a9\ud560 \uc5b8\uc5b4 # Version 4.05 constructiondisplay.invalid=\uc624\ub958\uac00 \uc788\ub294 \uac1c\uccb4 # Version 4.08 menu.settings.constructiondisplay=\uc2a4\ud06c\ub9bd\ud2b8 \ucc3d \uc5f4\uae30(F11) # Version 4.09 constructiondisplay.editconditions=\uc870\uac74 \ud3b8\uc9d1 constructiondisplay.delete=\uc120\ud0dd\ub41c \uac1c\uccb4 \uc9c0\uc6b0\uae30 constructiondisplay.hide=\ubcf4\uc774\uae30/\uac10\ucd94\uae30 constructiondisplay.superhide=\uac15\ub825\ud55c \uac10\ucd94\uae30 # Version 4.2 edit.expression.slider=\uc2ac\ub77c\uc774\ub354 \ubcf4\uc774\uae30 menu.grid.options=\uaca9\uc790 \uc120\ud0dd\uc0ac\ud56d menu.options.leftsnap=\uaca9\uc790\uc758 1/2 \uac04\uaca9\uc73c\ub85c \uc6c0\uc9c1\uc774\uae30 menu.settings.boundingbox=Create Bounding Box (bb) file # Version 4.3 latexsettings.title=Setup LaTeX export latexsettings.boundingbox=Create Bbunding box bb-file latexsettings.latexinput=Create LaTeX idx-file latexsettings.doubledollar=LaTeX does $$...$$ latexsettings.dollar=LaTeX does $...$ latexsettings.nodollar=LaTeX does all other strings latexsettings.fullpath=Use file path printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=12 cm width with 300 DPI printscaler.latex=LaTeX\ub85c \uc800\uc7a5\ud558\uae30 menu.background.usewidth=Adjust height only # Version 4.4 menu.options.restricted=Restrict Intersections menu.options.sizes=\ud06c\uae30 \uc124\uc815 ... sizesdialog.title=\ud06c\uae30 minlinesize.prompt=\uc120\uc758 \ucd5c\uc18c \ub450\uaed8 (\uae30\ubcf8\uac12: 1) minpointsize.prompt=\uc810\uc758 \ucd5c\uc18c \ud06c\uae30 (\uae30\ubcf8\uac12: 3) minfontsize.prompt=\uae00\uc790\uc758 \ucd5c\uc18c \ud06c\uae30 (\uae30\ubcf8\uac12: 12) arrowsize.prompt=\ud654\uc0b4\ud45c\uc758 \ud06c\uae30 (\uae30\ubcf8\uac12: 10) selectionsize.prompt=\uc120\ud0dd\ub41c \uac1c\uccb4\uc758 \ud06c\uae30 (\uae30\ubcf8\uac12: 1.5) warning.loadmacros=\ub9e4\ud06c\ub85c\ub97c \ubd88\ub7ec\uc624\ub294 \uc911 \uc624\ub958 \ubc1c\uc0dd! warning.macrodefinition=% \uc774 \uc0ac\uc6a9\ub418\uc5c8\uc73c\ub098 \ub9e4\ud06c\ub85c\uc5d0 \ud3ec\ud568\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc74c! edit.circle.bounds=\ud638\ub85c \ud45c\uc2dc edit.circle.range=\ud638 \uc124\uc815 ... # Version 4.5 edit.track.dmin=\ucd5c\uc18c \uac04\uaca9 (\uae30\ubcf8\uac12 0.001) # Version 4.6 menu.settings.smallicons=\uc791\uc740 \uc544\uc774\ucf58 \uc0ac\uc6a9 menu.settings.oldicons=\uc774\uc804 \uc544\uc774\ucf58 \uc0ac\uc6a9 # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof= %\uc758 \uc790\ucde8 (% \uc774 \ubcc0\ud560 \ub54c) # Version 5 # Fix error.image edit.discrete=\ubd88\uc5f0\uc18d \uc810\uc73c\ub85c error.fixedsegment=\uc774 \uc120\ubd84\uc740 \uace0\uc815\ud560 \uc218 \uc5c6\ub2e4! # Version 5.1 edit.intersection.alternate=Can alternate export.restrictedmove=Restrict Movements # Version 5.3 # Fix message.boundedpoint # Fix iconhelp.new message.bindpoint=\uc810\uc744 \uac1c\uccb4 \uc704\uc5d0 \ubb36\uae30 (Shift: continuous, Ctrl: \ub3c4\ud615 \ub0b4\ubd80) edit.point.inside=\ub3c4\ud615 \ub0b4\ubd80\uc758 \uc810 edit.point.increment=\uc99d\uac00\ub7c9 (0=free) edit.more=\uc870\uac74\ud3b8\uc9d1 menu.settings.more=Show button for conditional formats menu.file.loadexamples=\ubcf4\uae30 \ubd88\ub7ec\uc624\uae30 menu.options.editgrid=\uc88c\ud45c\ucd95 \ud3b8\uc9d1 # Version 6.1 constructiondisplay.description=\uc791\ub3c4 \ubcf4\uae30(Show Description) (Alt-Ctrl-1) constructiondisplay.size=\ud06c\uae30 \ub610\ub294 \uc88c\ud45c \ubcf4\uae30(Show Size or Coordinates) (Alt-Ctrl-2) constructiondisplay.formula=\uc2dd \ubcf4\uae30(Show Formula) (Alt-Ctrl-3) menu.settings.germanpoints=\uc0ac\uc6a9(Use) | in coordinates ./src/rene/zirkel/docs/CVS/RevisionCache/ZirkelProperties_sl.properties#1.10000644000175000017500000012251411144764476025535 0ustar yvesyveslanguage=sl_ version=Verzija homefile=index.html homepage=http://ris.gimptuj.si/ codepage.help=CP1250 about.title=O programu about.name=Geometrija v \u0161oli about.programmed=Avtor programa title=Geometrija v \u0161oli close=Zapri ok=V redu cancel=Prekini done=Narejeno! message=Sporo\u010dilo warning=Opozorilo yes=Da no=Ne abort=Prekini true=res je false=ni res warning.nojob=To ni naloga! warning.print=Tiskanje ni uspelo! warning.reset=Opcija veljavna pri naslednjem zagonu R.i.\u0160.! question.title=Vpra\u0161anje question.intersection=Ustvarim tu prese\u010di\u0161\u010de? question.pointon=Ustvarim to\u010dko na tem objektu? colors.black=\u010crna colors.blue=Modra colors.green=Zelena colors.brown=Rjava colors.cyan=Turkizna colors.yellow=Rumena colors.red=Rde\u010da objects.point=To\u010dka objects.segment=Daljica objects.line=Premica objects.ray=Poltrak objects.circle=Kro\u017enica objects.intersection=Prese\u010di\u0161\u010de objects.move=Premikanje to\u010dke objects.hide=Skrivanje objekov objects.edit=Urejanje to\u010dke objects.tracker=Sled to\u010dke ali premice objects.objecttracker=Sled to\u010dke ali premice na objektu objects.parallel=Vzporednica objects.plumb=Pravokotnica objects.circle3=Kro\u017enica s polmerom-daljico in to\u010dko-sredi\u0161\u010dem objects.midpoint=Sredi\u0161\u010de daljice objects.quadric=Sto\u017enica objects.angle=Kot objects.boundedpoint=To\u010dka na objektu objects.parameter=Nastavi parametre za makro objects.targets=Nastavi cilj za makro objects.definejob=Definicija naloge objects.runmacro=Za\u017eeni makro objects.delete=Zbri\u0161i objekt in vse kar je povezano z njim objects.reorder=Spremeni vrstni red objektov objects.animate=Animacija objects.expression=Aritmeti\u010dni izraz objects.area=Mnogokotnik objects.text=Tekst objects.fixedcircle=Kro\u017enica s konstantnim polmerom objects.fixedangle=Kot s konstantno velikostjo objects.fixedsegment=Daljica s konstantno dol\u017eino iconhelp.point=To\u010dka(p)+prosta to\u010dka, to\u010dka na objektu, prese\u010di\u0161\u010de iconhelp.segment=Daljica(s)+daljica z dvema to\u010dkama iconhelp.line=Premica(l)+premica skozi dve to\u010dki iconhelp.ray=Poltrak(r)+Poltrak z vrhom v to\u010dki skozi drugo to\u010dko iconhelp.circle=Kro\u017enica(c)+kro\u017enica s sredi\u0161\u010dem v dani to\u010dki skozi to\u010dko na obodu iconhelp.intersection=Prese\u010di\u0161\u010de(i)+prese\u010di\u0161\u010de premice in kro\u017enice iconhelp.move=Premikanje objektov+premikanje to\u010dk, kro\u017enic z danim polmerom, oznak+Ctrl-to\u010dka - prikaz stare lokacije+Ctrl-fiksni objekti premikanje in spreminjanje le-teh iconhelp.hide=Skrivanje objektov iconhelp.edit=Urejanje objektov iconhelp.tracker=Sled to\u010dke ali premice iconhelp.objecttracker=Dinami\u010dno sledenje to\u010dke ali premice iconhelp.parallel=Vzporednica iconhelp.plumb=Pravokotnica iconhelp.circle3=Kro\u017enica s polmerom-daljico in to\u010dko-sredi\u0161\u010dem iconhelp.midpoint=Sredi\u0161\u010de daljice iconhelp.quadric=Sto\u017enica podana s 5 to\u010dkami iconhelp.angle=Kot iconhelp.boundedpoint=To\u010dka na objektu iconhelp.hidden=Prikazovanje/skrivanje objektov iconhelp.color=Za\u010detna barva objekta iconhelp.type=Za\u010detni tip to\u010dke iconhelp.thickness=Za\u010detna debelina objekta iconhelp.back=Brisanje zadnjega objekta iconhelp.type0=Za\u010detni tip to\u010dke iconhelp.thickness0=Za\u010detna debelina objekta iconhelp.partial=Kro\u017enica po delih iconhelp.plines=Skraj\u0161ana premica iconhelp.arrow=Daljica kot vektor iconhelp.showcolor=Prika\u017ei le objekte dolo\u010dene barve iconhelp.runmacro=Za\u017eeni makro iconhelp.macro=Makro parametri->ciljni objekt - definicija iconhelp.expression=Aritmeti\u010dni izraz iconhelp.showvalue=Prika\u017ei vrednosti objektov iconhelp.showname=Prika\u017ei imena objektov iconhelp.obtuse=Uporabljaj kote ve\u010dje od 180\u00b0 iconhelp.solid=Ne uporabljaj prozornosti iconhelp.longnames=Dolga imena objektov iconhelp.grid=Prika\u017ei mre\u017eo iconhelp.comment=Prika\u017ei komentar iconhelp.defaults=Za\u010detne nastavitve iconhelp.macro0=Makro parametri->ciljni objekt - definicija iconhelp.visual=Ukazna konstrukcija iconhelp.replay=Prikaz poteka konstrukcije iconhelp.oneforward=Korak naprej iconhelp.fastforward=Hitro naprej iconhelp.allforward=Na konec iconhelp.oneback=Korak nazaj iconhelp.fastback=Hitro nazaj iconhelp.allback=Na za\u010detek iconhelp.close=Zapri iconhelp.area=Mnogokotnik iconhelp.text=Tekst v ve\u010d vrsticah iconhelp.fixedcircle=Kro\u017enica s konstantnim polmerom iconhelp.fixedangle=Kot s konstantno velikostjo iconhelp.fixedsegment=Daljica s konstantno dol\u017eino iconhelp.animate=Animacija to\u010dke iconhelp.delete=Zbri\u0161i objekt (in vse ki so od njega odvisni) iconhelp.undo=Prekli\u010di zadnje brisanje iconhelp.nextbreak=Do naslednje prekinitvene to\u010dke iconhelp.setbreak=Dolo\u010di/spremeni prekinitveno to\u010dko iconhelp.zoom=Spreminjanje pogleda z mi\u0161ko shortcuts.point=p shortcuts.segment=s shortcuts.line=l shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) menu.file=Datoteke menu.file.new=Nova konstrukcija menu.file.clearmacros=Izbri\u0161i vse makroje menu.file.load=Odpri konstrukcijo ... (Ctrl-o) menu.file.loadjob=Odpri nalogo ... (Ctrl-j) menu.file.savejob=Shrani kot nalogo ... (Ctrl-k) menu.file.save=Shrani konstrukcijo (Ctrl-s) menu.file.saveas=Shrani konstrukcijo kot ... (Ctrl-a) menu.file.includemacros=Vklju\u010di makroje menu.file.exit=Izhod (Alt-F4) menu.file.print=Natisni ... menu.file.print.isoscale=Razmerje 1:1 v cm menu.file.savebmp=... datoteko BMP menu.file.savefig=... datoteko FIG menu.file.loadrun=Odpri opisno konstrukcijo (Ctrl-r) menu.file.editrun=Uredi opisno konstrukcijo (Ctrl-x) menu.actions=Ukazi menu.actions.elementary=Osnovna orodja menu.actions.complex=Sestavljena orodja menu.actions.fixed=Objekti s konstantnimi parametri menu.actions.move=Orodja za premikanje menu.actions.decorative=Izgled objektov menu.options=Mo\u017enosti menu.options.visual=Vizualni na\u010din menu.options.hidden=Poka\u017ei skrite objekte (F9) menu.options.comment=Komentar (F10) menu.options.constructiondisplay=Opis (F11) menu.options.grid=Poka\u017ei mre\u017eo (F12) menu.options.other=Ostale nastavitve menu.options.setgrid=Gostota mre\u017ee ... menu.options.showcolor=Poka\u017ei barve menu.options.defaultcolor=Izbira barve menu.options.defaultthickness=Izbira debeline menu.options.defaulttype=Izbira ozna\u010dbe to\u010dke menu.options.all=Vse menu.options.setdigits=Nastavi decimalna mesta menu.options.shownames=Poka\u017ei imena objektov (Ctrl-F6) menu.options.longnames=Dolga imena objektov (Ctrl-F8) menu.options.obtuse=Koti ve\u010dji od 180\u00b0 (Ctrl-F12) menu.options.solid=Ne uporabljaj prozornosti menu.options.showvalues=Poka\u017ei vrednosti objektov (Ctrl-F7) menu.options.partial=Kro\u017enica po delih (Ctrl-F9) menu.options.plines=Skraj\u0161ana premica (Ctrl-F10) menu.options.arrow=Daljica kot vektor (Ctrl-F11) menu.options.editicons=Uredi orodja menu.options.back=Zbri\u0161i zadnji objekt (<-)o menu.options.undo=Povrni brisanje (Ctrl-z) menu.zoom=Zoom menu.zoom.in=Bli\u017ee (+) menu.zoom.out=Dalje (-) menu.zoom.left=Levo (smernik-levo) menu.zoom.right=Desno (smernik-desno) menu.zoom.up=Gor (smernik-gor) menu.zoom.down=Dol (smernik-dol) menu.macros=Makroji menu.special.definemacro=Definiraj makro (Ctrl-F5) menu.special.runmacro=Po\u017eeni makro (F5) menu.special.savemacros=Shrani makro menu.special.loadmacros=Preberi makro menu.special.deletemacros=Zbri\u0161i makro menu.special=Posebnosti menu.special.testjob=Test naloge (Ctrl-F1) menu.special.jobcomment=Opis naloge (F8) menu.special.export=Izvoz v HTML (Ctrl-e) menu.special.replay=Ponovi konstrukcijo menu.help=Pomo\u010d menu.help.about=O tem programu menu.help.browser=Razi\u0161\u010di pomo\u010d in primere menu.help.text=Enostavna pomo\u010d menu.help.configure=Oblikuj brskalnik menu.help.help=Pomo\u010d (F1) menu.help.macros=O makrojih menu.help.tools=Orodja menu.help.gui=Uporabni\u0161ki vmesnik menu.help.interactive=Opisna konstrukcija menu.help.tips=Nekaj nasvetov menu.settings=Posebne nastavitve menu.settings.choice=Poka\u017ei izbirni dialog za objekte menu.settings.fullicons=Vse ikone v dveh vrstah menu.settings.utf=Uporabi UTF-8 kodiranje menu.settings.autohide=Skrij drugo prese\u010di\u0161\u010de menu.settings.iconbartop=Ikone nad konstrukcijsko povr\u0161ino menu.settings.showtips=Poka\u017ei nasvete ob orodjih menu.settings.simplegraphics=Vedno uporabi enostavno grafiko menu.settings.sure=Potrjevanje shranjevanja in zapiranja menu.settings.pointon=Potrdi konstrukcijo to\u010dke na objektu menu.settings.intersection=Potrjevanje dolo\u010danja prese\u010di\u0161\u010da menu.settings.movename=Prikazovanje objektov med premikanjem menu.settings.movefixname=Stalne vrednosti objektov med premikanjem menu.settings.restricted=\u0160olski na\u010din menu.colors=Nastavitev barv colors.default=Uporaba osnovnih barv colors.color0=Barva 1 (\u010crna) colors.color1=Barva 2 (Zelena) colors.color2=Barva 3 (Modra) colors.color3=Barva 4 (Rjava) colors.color4=Barva 5 (Turkizna) colors.color5=Barva 6 (Rde\u010da) colors.background=Ozadje colors.select=Izbira colors.target=Cilj myfiledialog.dir=Mapa myfiledialog.file=Datoteke myfiledialog.pattern=Vzorci filedialog.open=Odpri filedialog.saveas=Shrani kot ... filedialog.open.action=Odpri filedialog.saveas.action=Shrani filedialog.htmlsave=Shrani kot HTML filedialog.htmlsave.action=Shrani pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Shrani load=Odpri abort=Prekini bound.release=Sprosti to\u010dko bound.bind=Pove\u017ei z objektom bound.error=Ne najdem objekta za prese\u010di\u0161\u010de ! constructiondisplay.edit=Uredi objekt constructiondisplay.copy=Kopiraj na odlo\u017ei\u0161\u010de edit.Title=Lastnosti edit.name=Ime edit.hidden=Skrito edit.text=Tekst edit.fixed=Konstantno edit.color=Barva edit.ok=V redu edit.cancel=Prekini edit.showname=Poka\u017ei ime edit.point.title=Uredi to\u010dko edit.point.type=Oblika edit.point.x=X edit.point.y=Y edit.point.intersection=Razli\u010dno od edit.point.showvalue=Poka\u017ei koordinate edit.point.colortype=Debelina edit.point.bound=Povezava edit.point.away=Razlo\u010di od edit.point.close=Povezana edit.point.free=Prosta edit.line.title=Uredi premico, poltrak, daljico edit.line.normal=Privzeta edit.line.thick=Debela edit.line.thin=Tanka edit.line.invisible=Nevidna edit.line.type=Oblika edit.segment.length=Dol\u017eina edit.segment.showvalue=Prikaz dol\u017eine edit.circle.title=Urejanje kro\u017enice edit.circle.length=Polmer edit.circle.partial=Prikaz lokov edit.circle.range=Nastavitev obsega edit.circle.killrange=Brisanje obsega edit.plumb.restricted=Omejeno edit.angle.title=Ureditev kota edit.angle.length=Velikost edit.angle.displaysize=Prikaz velikosti edit.angle.normal=Privzeto edit.angle.small=Majhno edit.angle.large=Veliko edit.expression.title=Urejanje izraza edit.expression=Aritmeti\u010dni izraz edit.expression.prompt=Opis izraza edit.area.title=Urejanje mnogokotnika edit.area.back=V ozadje export.title=HTML izvoz export.pagetitle=Naslov strani export.width=\u0160irina export.height=Vi\u0161ina export.jar=Datoteka jar export.comment=Shrani komentar export.file=Datoteka s konstrukcijo export.job=Prika\u017ei nalogo export.color=Barva export.backgroundcolor=Uporabi za ozadje strani export.appletcolor=Uporabi za ozadje appleta export.plain=Ravnina export.3D=Okvir export.breaks=Ponovitev s prekinitvenimi to\u010dkami export.icons=Okvir in ikona export.full=Okvir, ikone in stanje export.nonvisual=Okvir, ikone in vnosna vrstica export.style=Slog appleta export.setcolor=Izbira barve export.savefirst=Datoteka \u0161e ni shranjena! export.soltext=Re\u0161itev export.stylesheet=Datoteka s CSS stili export.solution=Re\u0161itev export.jumpsol=Skok na re\u0161itev export.linksol=Povezava na re\u0161itev export.savesol=Shrani datoteko z re\u0161itvijo export.track=Sled to\u010dke export.digits=Shrani \u0161tevilo mest export.setsize=Dolo\u010di velikost export.signature=Narejeno z R.i.\u0160. export.colors=Shrani definirane barve export.background=Shrani definirano ozadje help.title=Pomo\u010d help.error=Ne morem odpreti datoteke s pomo\u010djo! help.file=sl_schoolgeometry.txt coloreditor.title=Uredi barvo coloreditor.red=Rde\u010da coloreditor.green=Zelena coloreditor.blue=Modra coloreditor.color=Va\u0161a barva comment.title=Komentar konstrukcije comment.set=Dolo\u010di comment.cancel=Prekini comment.close=Zapri iconedit.title=Uredi ikono iconedit.twobars=Ikone v dveh vrsticah jobcomment.title=Naloga select.title=Izbira select.ok=V redu select.cancel=Prekini select.comment=Prika\u017ei opombo select.all=Vse message.circle.midpoint=Kro\u017enica: Sredi\u0161\u010de? message.circle.radius=Kro\u017enica: to\u010dka na kro\u017enici (Dvigalka: dolo\u010di polmer)? message.fixedcircle.midpoint=Kro\u017enica s konstantnim polmerom: sredi\u0161\u010de? message.fixedcircle.radius=Kro\u017enica s konstantnim polmerom: polmer? message.edit=Uredi: objekt? message.line.first=Premica: Prva to\u010dka? message.line.second=Premica: Druga to\u010dka? message.ray.first=Poltrak: izhodi\u0161\u010de? message.ray.second=Poltrak: druga to\u010dka? message.move.select=Premakni: Izberi to\u010dko! message.move.move=Premikanje: Premakni to\u010dko? message.point=To\u010dka: postavi to\u010dko! message.segment.first=Daljica: Za\u010detna to\u010dka? message.segment.second=Daljica: druga to\u010dka (Dvigalka: dolo\u010di dol\u017eino)? message.fixedsegment.first=Daljica z dolo\u010deno dol\u017eino: za\u010detna to\u010dka? message.fixedsegment.second=Daljica s konstantno dol\u017eino: klikni kjerkoli! message.intersection.first=Prese\u010di\u0161\u010de: prvi objekt ali prese\u010di\u0161\u010de? message.intersection.second=Prese\u010di\u0161\u010de: prvi objekt? message.hide=Prika\u017ei/skrij: izberi objekt! message.tracker.select=Sled: to\u010dka ali premica, ki dolo\u010da sled? message.tracker.selectpoint=Sled: to\u010dka za premikanje (Dvigalka: ve\u010d)? message.tracker.move=Sled: to\u010dka za premikanje! message.objecttracker.select=Samosled: to\u010dka za sled (Dvigalka: ve\u010d)? message.objecttracker.object=Samosled: premica ali kro\u017enica? message.objecttracker.selectpoint=Samosled: To\u010dka za premikanje? message.objecttracker.selectanypoint=Samosled: \u0160e katera to\u010dka? message.objecttracker.move=Samosled: Premakni to\u010dko! message.objecttracker.start=Samosled: Za\u017eeni animacijo! message.objecttracker.stop=Samosled: Ustavi animacijo! message.parallel.first=Vzporednica: premica? message.parallel.second=Vzporednica: To\u010dka? message.plumb.first=Pravokotnica: Premica? message.plumb.second=Pravokotnica: To\u010dka? message.circle3.first=Kro\u017enica: Prva to\u010dka polmera? message.circle3.second=Kro\u017enica: Druga to\u010dka polmera? message.circle3.midpoint=Kro\u017enica: Sredi\u0161\u010de? message.midpoint.first=Sredi\u0161\u010de: Prva to\u010dka? message.midpoint.second=Sredi\u0161\u010de: Druga to\u010dka? message.quadric=Sto\u017enica: \u0160tevilo to\u010dk message.angle.first=Kot: Prva to\u010dka za kot? message.angle.root=Kot: Vrh kota? message.angle.second=Kot: Druga to\u010dka za kot (Dvigalka: dolo\u010dena velikost)? message.fixedangle.first=Kot s konstantno velikostjo: Prva to\u010dka kota? message.fixedangle.root=Kot s konstantno velikostjo: Vrh? message.fixedangle.second=Kot s konstantno velikostjo: Klikni kjerkoli! message.label.select=Premakni oznako: Izberi oznako! message.label.move=Premakni oznako: Premakni oznako! message.boundedpoint=To\u010dka na objektu: Kro\u017enica ali premica (Dvigalka: dolo\u010dena)? message.parameters=Makro parametri: Parameter objekta? message.targets=Cilj makra: Ciljni objekt? message.savejob.first=Definiraj nalogo: Zadnji prikazani objekt? message.savejob.second=Definiraj nalogo: Ciljni objekt? message.savejob.third=Definiraj nalogo: Nadaljnji objekti, ki naj bodo prikazani? message.runmacro=Makro %: %. (Vnesi %) % message.runmacro.return=(preslednica izbere %) message.runmacro.fixes=(Dvigalka dolo\u010di izbor) message.delete=Brisanje: Izberi objekt! message.reorder=Spreminjanje vrstnega reda objektov: Izberi objekt! message.expression=Aritmeti\u010dni izraz: Izberi mesto! message.area=Obarvani mnogokotnik: Ogli\u0161\u010de? message.text=Tekst: Izberi prostor! message.animator.point=Animacija: To\u010dka za animacijo? message.animator.segment=Animacija: Kro\u017enica ali daljica? message.animator.running=Animacija: Te\u010de! message.range.first=Nari\u0161i kro\u017enico od te to\u010dke ... message.range.second=... do te to\u010dke! message.setaway.away=Stran od te to\u010dke! message.setaway.close=Zapri do te to\u010dke! objectsedit.title=Uredi lastnosti point.type.square=Kvadratek point.type.diamond=Karo point.type.circle=Kro\u017eec point.type.dot=Pika color.type.normal=Privzeta color.type.thick=Debela color.type.thin=Tanka color.type.invisible=Nevidna text.point=To\u010dka s koordinatama %, % text.line=Premica skozi % in % text.segment=Daljica od % do % text.segment.fixed=Daljica od % do % z dol\u017eino % text.ray=Poltrak z vrhom v % v smeri % text.intersection=Prese\u010di\u0161\u010de % in % text.circle=Kro\u017enica s sredi\u0161\u010dem v to\u010dki % skozi to\u010dko % text.circle.fixed=Kro\u017enica s sredi\u0161\u010dem v to\u010dki % skozi % s polmerom % text.fixedcircle=Kro\u017enica s sredi\u0161\u010dem v to\u010dki % s polmerom % text.circle3=Kro\u017enica s sredi\u0161\u010dem v to\u010dki % s polmerom od % do % text.parallel=Vzporednica skozi % k % text.midpoint=Sredi\u0161\u010de daljice, dolo\u010dene s to\u010dkama % in % text.quadric=Sto\u017enica skozi % text.plumb=Pravokotnica skozi % na % text.angle=Kot % - % - % text.angle.fixed=Kot % - % - % velikosti % text.boundedpoint=To\u010dka na % text.expression=Izraz "%" pri %, % text.area=Mnogokotnik text.fixedangle=Kot % - % z velikostjo % name.Point=To\u010dka name.Intersection=Prese\u010di\u0161\u010de name.OtherIntersection=Prese\u010di\u0161\u010de name.Circle=Kro\u017enica name.Circle3=Kro\u017enica name.Segment=Daljica name.Ray=Poltrak name.Line=Premica name.TwoPointLine=Premica skozi dve to\u010dki name.Parallel=Vzporednica name.Midpoint=Sredi\u0161\u010de name.Quadric=Kadrat name.Plumb=Pravokotnica name.Angle=Kot name.PointOn=To\u010dka-objekt name.Expression=Izraz name.Polygon=Mnogokotnik name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=p name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=pl name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=poligon prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.angle==a(,,) prompt.area=A(,,) popup.hidden=Prika\u017ei skrite objekte popup.replay=Ponovi konstrukcijo popup.empty=-- Makroji -- replay.title=Potek konstrukcije reorder.title=Postavi objekt reorder.message=vrini za reorder.notfound=Ne najdem objekta! reorder.warning=Ne morem narediti tega! setgrid.title=\u0160irina mre\u017ee setgrid.prompt=Nova \u0161irina mre\u017ee setgrid.set=Dolo\u010di definemacro.title=Definicija makroja definemacro.name=Ime definemacro.comment=Komentar za makro definemacro.parameters=Vnos parametra(ov) definemacro.noparams=Potrebujem parametre za makro! definemacro.nomacro=Ni makroja za zagon! definemacro.targetsonly=Skrij konstrukcijo definemacro.invisible=Skrij vse definemacro.promptfor=Sprejmi macro.replace.title=Zamenjava makroja macro.replace=Zamenjaj makro: macro.replace.all=Vse macro.usage=Napa\u010dna uporaba makroja (glej namige)! macro.prompt.title=Vnos parametrov macro.prompt.prompt=Vnesi vrednost za parameter macro.prompt.illegal=Neustrezna vrednost! digits.title=Nastavljanje decimalnih mest digits.edit=Uredi digits.lengths=Prikaz digits.angles=Koti editrun.title=Urejanje opisne konstrukcije editrun.run=Shrani in za\u017eeni editrun.load=Drugi opisi sure.title=Zbri\u0161em vse makroje? sure.macros=Si prepri\u010dan? sure.delete=Pozabim trenutne spremembe? close.title=Konec close.prompt=Zares zaprem program? file.exists.title=Datoteka obstaja file.exists.overwrite=Datoteka obstaja! Pi\u0161em preko nje? exception.nparams=Neustrezno \u0161tevilo parametrov! exception.notfound=Ne najdem objekta, ali je pa definiran za objektom! exception.type=Napa\u010dna vrsta objekta! exception.expression=Napa\u010den izraz! exception.canfix=Ne morem dolo\u010diti vrednosti objektu ! exception.fix=Napa\u010dna vrednost! exception.novalue=Napa\u010dna vrednost! exception.elementary=Neustrezen element v objektu! exception.bracket=Manjka zaklepaj! exception.quotes=Manjka narekovaj! exception.dot=Dve decimalni piki v \u0161tevilu! exception.nodigit=Ne najdem decimalnih mest v \u0161tevilu! exception.function=Neznana funkcija! exception.parameter=Neustrezni parametri funkcije! exception.macro=Neustrezni parametri za makro! exception.name=Potrebno je ime! exception.job=Neustrezni parametri za nalogo! exception.track=Neustrezni parametri za sled! exception.animate=Neustrezni parametri za animacijo! exception.boolean=Boolean spremenljivka ima vrednost "je res" ali "ni res"! exception.value=Neustrezna vrednost! exception.color=Neustrezna barva! exception.colortype=Neustrezna debelina! exception.type=Neustrezna oblika to\u010dke! exception.macroparameter=Neustrezni parametri makroja! exception.macrotarget=Neustrezni cilj makroja! exception.prompt=Neustrezen vnos! exception.prompt.parameter=Posredovani objekt ni parameter! exception.parameters=Neveljavni parametri! exception.brackets=Neustrezni oklepaji! exception.double=Ime je \u017ee uporabljeno! error.setaway=To\u010dka ni dolo\u010dena, dokler ni prese\u010di\u0161\u010da! error.objecttracker.depends=To\u010dka je povezana z drugim objektom! constructiondisplay.title=Opis konstrukcije function.hide=Skrij function.hide.short=skrij function.rename=Premenuj function.rename.short=premenuj function.value=Vrednost function.value.short=vrednost function.window=Okno function.window.short=okno function.color=Barva function.color.short=barv function.thickness=Debelina function.thickness.short=deb function.type=Oblika function.type.short=oblika function.partial=Delno function.partial.short=del function.fill=Zapolni function.fill.short=zapolni function.back=V ozadje function.back.short=v ozadje function.away=Razlo\u010di od function.away.short=lo\u010di function.closeto=Bli\u017ee function.closeto.short=bli\u017ee function.acute=Poudarjeno function.acute.short=poudarjeno function.obtuse=Topokotno function.obtuse.short=topokotno function.solid=Enobarvno function.solid.short=enobarvno function.restrict=Omejeno function.restrict.short=omejeno expression.value=Vrednost configure.title=Nastavi brskalnik configure.prompt=Ukaz za brskalnik parameter=Parameter parameter.short=Par target=Cilj target.short=cilj macro=Makro macro.short=makro away=Razlo\u010di od away.short=lo\u010di end=Konec end.short=konec invisible=Skrito invisible.short=skrito showall=Vidno showall.short=vidno # New Resources: background.error=Ne morem nalo\u017eiti slike (GIF ali JPG!). menu.background=Ozadje menu.background.grab=Trenutno kot ozadje menu.background.clear=Zbri\u0161i ozadje menu.background.load=Nalo\u017ei sliko za ozadje ... menu.background.usesize=Velikost okna menu.background.tile=Popolnjeno ozadje menu.background.center=Usredinjeno ozadje iconhelp.grab=Postavi ali zbri\u0161i ozadje filedialog.backgroundload=Nalo\u017ei ozadje filedialog.backgroundload.action=Nalo\u017ei # Novi viri v verziji 2.14 menu.file.compress=Vedno stisni podatke menu.file.savesvg=... datoteko SVG # Novi viri v verziji 2.15 loading=Nalagam konstrukcijo, po\u010dakajte prosim... # Novi viri v verziji 2.18 in 2.19 menu.settings.font.default=Uporabi navadni tekstovni nabor menu.settings.font.bold=Odebeljene \u010drke menu.settings.font.large=Ve\u010dje \u010drke menu.file.saveeps=... datoteko EPS menu.fonts=Pisava # Novi viri v verziji 2.20 bmpscaler.title=Velikost slike bitmap bmpscaler.width=\u0160irina bmpscaler.height=Vi\u0161ina bmpscaler.scale=Faktor (vnos preko tipkovnice) bmpscaler.illegal=Nemogo\u010da vrednost # Novi viri v verziji 2.21 renamemacro.title=Preimenovanje makroja renamemacro.name=Novo ime makroja menu.special.renamemacro=Preimenovanje makroja ... # Version 2.23 savequestion.title=Shrani konstrukcijo savequestion.qsave=Shranim konstrukcijo? # Version 2.25 exception.printsize=Ppremajhna stran za to konstrukcijo! iconhelp.nohelp=Ni pomo\u010di iconhelp.type?=Oblika to\u010dke iconhelp.thickness?=Debelina iconhelp.color?=Barva iconhelp.filled=Zapolnjen objekt iconhelp.isback=Objekt je v ozadju iconhelp.inverse=Zrcaljen kot iconhelp.angle?=Velikost # Version 2.28 message.objecttracker.stop=Sled: Ustavi animacijo (Dvigalka + pu\u0161\u010dica levo/desno za hitrost)! # Version 2.31 menu.settings.indicate=Pregled generiranih objektov menu.options.other=Nastavitve menu.help.welcome=Novosti v trenutni razli\u010dici iconhelp.twolines=Ikone v dveh vrsticah iconhelp.qintersection=Vpra\u0161aj za prese\u010di\u0161\u010de iconhelp.qchoice=Prika\u017ei dialog za izbiro objektov iconhelp.qpointon=Vpra\u0161aj za postavitev to\u010dke na objekt iconhelp.noindicate=Ne ozna\u010duj objektov, ko ji pokriva mi\u0161ka # Version 2.33 menu.file.new=Nova konstrukcija (Ctrl-n) # Version 2.34 edit.text.title=Nastavitve teksta edit.text.settings=Nadaljnje nastavitve menu.settings.filedialog=Posebna izbira datotek # Version 2.35 menu.settings.bitmapbackground=Uporabi barvo ozadja v bitni sliki # Version 2.36 menu.file.savegraphics=Shrani sliko kot ... menu.file.savepng=... datoteko PNG bmpscaler.title=Skaliraj sliko # Version 2.37 menu.file.savepdf=... datoteko PDF iconhelp.chord=prika\u017ei kot odsek # Version 2.39 message.setfixedangle.first=Postavi kot z velikostjo: Prva to\u010dka? message.setfixedangle.second=Postavi kot z velikostjo: Vrh kota? message.setfixedangle.first=Postavi kot z velikostjo: Tretja to\u010dka? edit.fixedangle.set=Nastavi velikost ... message.setfixedcircle.first=Postavi krog s konstantnim premerom: Prva to\u010dka? message.setfixedcircle.second=Postavi krog s konstantnim premerom: Druga to\u010dka? edit.fixedcircle.set=Nastavi velikost ... # Version 2.40 minpointsize.title=Najmanj\u0161a velikost to\u010dke minpointsize.prompt=Najmanj\u0161a velikost to\u010dke (za\u010detna: 3) menu.settings.font.minpointsize=Najmanj\u0161a velikost to\u010dke ... # Version 2.41 name.short.Track=Sl text.track=Sled to\u010dke %, ko se % premika k % trackquestion.keep=Vklju\u010dimo geometrijsko mesto to\u010dk v konstrukcijo? trackquestion.title=Shranim geometrijsko mesto to\u010dk menu.options.track=Prevzem sledi geometrijske lege to\u010dk (Dvigalka-Enter) iconhelp.indicate=Pregled rezultatov konstrukcije iconhelp.nohelp=Nobene pomo\u010di ni na voljo! # Version 2.42 objects.draw=Skiciranje z mi\u0161ko menu.options.cleardraw=Brisanje skiciranega (Esc) iconhelp.draw=Skiciranje z mi\u0161ko message.draw=Skiciranje z mi\u0161ko (Esc za brisanje) shortcuts.draw=; # Version 2.43 message.move.select=Premikanje to\u010dke: Izberi to\u010dko (Dvigalka: Prikazuj izvorni polo\u017eaj)? message.rename=Preimenuj v A,B,C,...: To\u010dke? iconhelp.rename=Preimenovanje v A,B,C,... objects.rename=Preimenovanje v A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Ne prika\u017ei kraka kota # Version 2.45 menu.settings.smartboard=Na\u010din neaktivne risalne povr\u0161ine shortcuts.zoom=% objects.zoom=Spreminjanje pogleda z mi\u0161ko message.zoom=Premik sredi\u0161\u010da ali pove\u010danje/pomanj\u0161anje slike # Version 2.46 menu.special.restricticons=Nastavitev omejenega nabora ikon # Version 2.47 menu.settings.indicate.simple=Le ozna\u010di to\u010dke menu.settings.beginner=Enostavni na\u010din question.again=Vedno vpra\u0161aj. # Version 2.49 definemacro.parameters=Vnos parametrov(s) ("=ime" dolo\u010deno) # Version 2.53 menu.actions.angles=Kot menu.actions.circles=Kro\u017enice menu.actions.lines=Premica menu.actions.points=To\u010dka # Version 2.57 info.title=Teme s pomo\u010djo info.related=Poglej tudi ... info.notfound=Ne najdem teme s pomo\u010djo! info.noresults=Ne najdem iskanega! info.searchresults=- Najdeno - info.select=- Izbira - info.search=I\u0161\u010di info.back=Nazaj info.start=Za\u010dni iconhelp.info=Teme s pomo\u010djo menu.help.info=Teme s pomo\u010djo (F1) myfiledialog.home=Doma\u010da mapa myfiledialog.homedir=R.i.\u00a9 - datoteke myfiledialog.windowshome=Moje datoteke myfiledialog.mkdir=Nova mapa myfiledialog.back=Prekli\u010di menu.file.alwaysclearmacros=Brisanje makrojev pred branjem sure.macros=Zbri\u0161em vse uporabnikove makroje? about.language=Jezik bmpscaler.72dpi=72 dpi bmpscaler.72dpi=300 dpi # Version 3.01 menu.settings.backups=Varnostne kopije # Version 3.02 menu.options.hideduplicates=Skrij podvojen objekt # Version 3.03 menu.options.function=Funkcije ali krivulje text.function=Funkcija ( % , % ) function.varmin=Od function.varmax=Do function.dvar=Korak function.var=Spremenljivka function.x=x function.y=Izraz za y iconhelp.function=Vnos funkcije ali krivulje menu.options.editlast=Uredi zadnji objekt iconhelp.control.edit=Urejanje zadnjega objekta iconhelp.control.hide=Skrivanje podvojenega objekta edit.function.title=Funkcije ali krivulje iconhelp.control.runmacro=Ponovni zagon zadnjega makroja # Version 3.05 point.type.cross=Kri\u017eec point.type.dcross=Diagonalni kri\u017eec shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Enota function.valid=Veljavna function.valid.short=veljavna function.close=Pribli\u017ena function.close.short=pribli\u017ena menu.special.break=Prekinitvene to\u010dke menu.bp.setbreak=Postavljanje prekinitvenih to\u010dk menu.bp.clearbreak=Brisanje prekinitvenih to\u010dk menu.bp.sethidingbreak=Postavljanje skrivnih prekinitvenih to\u010dk menu.bp.animatebreak=Animiranje prekinitvenih to\u010dk iconhelp.animatebreak=Animiranje prekinitvenih to\u010dk message.animatebreak=Prekinitvene to\u010dke: S klikom zadr\u017eimo animacijo (Dvigalka levo/desno za hitrost)! menu.special.exporttemplate=HTML izvoz s predlogo templateload.open=Odpri predlogo templateload.open.action=Odpiranje menu.settings.doubleclick=Dvojni klik za makroje # Version 3.12 edit.equation=Ena\u010dba # Version 3.13 warning.load=Pri branju datoteke je pri\u0161lo do napake! warning.save=Pri shranjevanju datoteke je pri\u0161lo do napake! warning.save.backup=Pri varnostnem shranjevanju datoteke je pri\u0161lo do napake! warning.template=Pri urejanju predloge je pri\u0161lo do napake! myfiledialog.olddirs=Prej\u0161nje mape # Version 3.23 menu.settings.minwidth=shranjene bodo minimalne vrednosti pri izvozu grafike menu.settings.squarepoints=To\u010dke ri\u0161i kot kvadratke # Version 3.37 menu.options.export=Nastavitve za izvoz grafike menu.settings.minwidth=Najmanj\u0161a debelina \u010drte je 1 menu.settings.minpointsize=Upo\u0161tevaj najmanj\u0161o velikost to\u010dke menu.settings.minfontsize=Upo\u0161tevaj najmanj\u0161o velikost pisave minfontsize.title=Nastavitev najmanj\u0161e velikosti pisave minfontsize.prompt=Najmanj\u0161a velikost pisave (privzeta velikost: 12) menu.options.minpointsize=Najmanj\u0161a velikost to\u010dke ... menu.options.minfontsize=Najmanj\u0161a velikost pisave ... # Version 3.38 menu.settings.scalepdf=Razmerje v PDF in EPS sliki 1:1 # Version 3.41 menu.file.clip=Okno za prikaz grafike ... clip.title=Nastavitev okna clip.width=\u0160irina clip.height=Vi\u0161ina clip.screen=Ni okna # Version 3.42 menu.options.arrowsize=Velikost pu\u0161\u010dice ... arrowsize.title=Nastavitev velikosti pu\u0161\u010dice arrowsize.prompt=Velikost pu\u0161\u010dice # Version 3.44 iconhelp.large=Ve\u010dja pisava iconhelp.bold=Krepka pisava menu.options.largefont=Ve\u010dja pisava menu.options.boldfont=Krepka pisava warning.previewframe=Okno je ve\u010dje kot je risalna povr\u0161ina! message.move.select=Premakni to\u010dko ali drug objekt (Dvigalka: ve\u010d objektov, Ctrl: viden original)? # Version 3.46 iconbar.showseparators=Prikaz razmejilnikov orodij # Version 3.5 menu.sizes=Najmanj\u0161e velikosti menu.options.minlinesize=Najmanj\u0161a debelina \u010drte ... minlinesize.title=Nastavitev najmanj\u0161e debeline \u010drte minlinesize.prompt=Najmanj\u0161a debelina \u010drte (Privzeta: 1) arrowsize.prompt=Velikost pu\u0161\u010dice (Privzeta: 10) menu.options.printscaler=Nastavitve velikosti izvoza grafike ... menu.options.exportsettings=Posebne nastavitve velikosti izvoza grafike ... printscaler.title=Izvoz grafike printscaler.width=\u0160irina (v cm) printscaler.height=Vi\u0161ina (v cm) printscaler.dpi=Resolucija (v dpi, obi\u010dajno 300) printscaler.linewidth=Debelina \u010drte (v cm, obi\u010dajno 0.02) printscaler.pointsize=Velikost to\u010dke (v cm, obi\u010dajno 0.07) printscaler.textsize=Velikost teksta (v cm, obi\u010dajno 3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=\u0160irina (v to\u010dkah) printscaler.h=Vi\u0161ina (v to\u010dkah) printscaler.scale=Razmerje (relativno glede na zaslonsko sliko) printscaler.middle=Izrez (nepove\u010dan) printscaler.sizes=Nastavi razmerje za \u010drte, tekst in to\u010dke menu.file.savepng=Shrani sliko v formatu PNG... warning.preview=Predogled v celoti deluje \u0161ele v veriji Jave > 1.4 iconedit.showseparators=Razmejitve ikon printscaler.aspect=Obdr\u017ei razmerje slike printscaler.presets=Predpisane vrednosti printscaler.preset=Izberi ... printscaler.preset.300dpi=natan\u010dno razmerje z 300 dpi printscaler.preset.300dpi6=6 cm \u0161irine s 300 dpi printscaler.preset.300dpi16=16 cm \u0161irine s 300 dpi printscaler.preset.window=Velikost okna printscaler.preset.clip50=50% Velikosti okna, izrezano message.saving=Po\u010dakaj prosim! menu.options.printscalepreview=Predogled izvoza grafike (Ctrl-F3) date=Datum nastanka konstrukcije # Version 3.51 help=Pomo\u010d # Version 3.61 editconditionals.title=Pogojno oblikovanje editconditionals.hidden=Skrito editconditionals.superhidden=Popolnoma skrito editconditionals.visible=Obi\u010dajno editconditionals.showname=Prikaz imena editconditionals.showvalue=Prikaz vrednosti editconditionals.background=Ozadje editconditionals.solid=Neprozorno exception.superfluous=Dodatni tekst v izrazu # Version 3.62 menu.options.selectionsize=Nastavi izbrano obmo\u010dje selectionsize.title=Izbrano obmo\u010dje selectionsize.prompt=Izbrano obmo\u010dje (privzeto 1.5 to\u010dke) # Version 3.63 select.comment.title=Komentar makroja jobcomment.title=Tekst naloge # Version 3.68 edit.area.area=Povr\u0161ina # Version 3.73 myfiledialog.oldfiles=Prej\u0161nje datoteke # Version 3.74 iconhelp.load=Odpri konstrukcijo (Ctrl-o) iconhelp.save=Shrani konstrukcijo (Ctrl-s) iconhelp.new=Nova konstrukcija (Ctrl-n) # Version 3.81 warning.loadbackground=Napaka pri nalaganju ozadja # Version 3.9 function.x=Izraz za x (prazno pri exsplicitni obliki) # Version 3.91 constructiondisplay.select=Izbira constructiondisplay.all=Vsi objekti constructiondisplay.visible=Vidni objekti constructiondisplay.points=To\u010dke constructiondisplay.lines=Premice in daljice constructiondisplay.circles=Kro\u017enice constructiondisplay.angles=Koti constructiondisplay.expressions=Izrazi constructiondisplay.other=Ostali objekti menu.file.copypng=Slika iz odlo\u017ei\u0161\u010da exception.clipboardcopy=Napaka pri shranjevanju na odlo\u017ei\u0161\u010de! menu.options.finegrid=Le koordinatni osi # Vesion 3.93 edit.function.center=Izbira sredi\u0161\u010da edit.function.free=Sredi\u0161\u010de v izhodi\u0161\u010du message.setcenter=Izbira sredi\u0161\u010da krivulje! # Vesion 3.94 message.edit=Lastnosti objektov? (Dvigalka: ve\u010d objektov, Ctrl: pogojno oblikovanje) # Version 3.95 edit.function.special=Le to\u010dke # Version 3.97 error.image=Napaka pri nalaganju slike! filedialog.imageload=Nalaganje slike filedialog.imageload.action=Nalaganje message.image=Vogalna to\u010dka prompt.image=image(,,,) objects.image=Slika shortcuts.image=_ # Version 3.98 exception.depends=Objekt % je odvisen od tega objekta. error.depends=Objekt % je odvisen od tega objekta. constructiondisplay.sorted=Urejanje po nastanku # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Izrazi # Version 4.00 iconhelp.image=Dodajanje slike (_)+2 ali 3 vogalne to\u010dke message.image=Vogalna to\u010dka % za sliko message.image.last=Zadnja vogalna to\u010dka (po izbiri) editconditionals.z=Z-vrednost # Version 4.01 name.FixedAngle=Kot s konstantno velikostjo # Version 4.04 menu.moresettings=Nastavitve menu.settings.language=Nastavi jezik language.title=Nastavi jezik language.prompt=Jezik za naslednji zagon programa # Version 4.05 constructiondisplay.invalid=Neveljavni objekt # Version 4.08 menu.settings.constructiondisplay=Prikaz konstrukcije (F11) menu.settings.constructiondisplay=Prikaz seznama objektov (F11) constructiondisplay.editconditions=Obdelava pogojev constructiondisplay.delete=Brisanje izbranih objektov constructiondisplay.hide=Skrij ali prika\u017ei constructiondisplay.superhide=Dokon\u010dno skrivanje # Version 4.09 constructiondisplay.editconditions=Uredi pogoje constructiondisplay.delete=Zbri\u0161i izbrane objekte constructiondisplay.hide=Skrij ali prika\u017ei constructiondisplay.superhide=Dokon\u010dno skrij # Version 4.2 edit.expression.slider=Prika\u017ei kot sledilnik menu.grid.options=Mo\u017enosti mre\u017ee menu.options.leftsnap=Ne postavljaj to\u010dk diskretno menu.settings.boundingbox=Izdelaj datoteko Bounding Box (bb) # Version 4.3 latexsettings.title=Nastavitev izvoza za LaTeX latexsettings.boundingbox=Izdelaj Bounding box bb-datoteko latexsettings.latexinput=Izdelaj LaTeX idx-datoteko latexsettings.doubledollar=LaTeX za $$...$$ latexsettings.dollar=LaTeX za $...$ latexsettings.nodollar=LaTeX za vse ostale nize latexsettings.fullpath=Uporabi pot datoteke printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=12 cm s \u0161irino 300 DPI printscaler.latex=Shrani za LaTeX menu.background.usewidth=Poravnaj le vi\u0161ino # Version 4.4 menu.options.restricted=Omejena prese\u010di\u0161\u010da menu.options.sizes=Nastavi velikosti ... sizesdialog.title=Velikosti minlinesize.prompt=Minimalna debelina premice (privzeto: 1) minpointsize.prompt=Minimalna velikost to\u010dke(privzeto: 3) minfontsize.prompt=Minimalna velikost pisave (privzeto: 12) arrowsize.prompt=Velikost pu\u0161\u010dice (privzeto: 10) selectionsize.prompt=Velikost izbora (privzeto: 1.5) warning.loadmacros=Napaka med nalaganjem makroja! warning.macrodefinition=% je uporabljeno, a ni v makroju! edit.circle.bounds=Prika\u017ei kot lok edit.circle.range=Nastavi lok ... # Version 4.5 edit.track.dmin=Minimalni korak (privzeto 0.001) # Version 4.6 menu.settings.smallicons=Uporabi manj\u0161e ikone menu.settings.oldicons=Uporabi stare ikone # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof=Spremenjeno geometrijsko mesto % \u010de je % # Version 5 # Fix error.image edit.discrete=Diskretno error.fixedsegment=Ta daljica ne more imeti konstantne velikosti! export.zoom=Zoom z mi\u0161ko export.popup=Popup meni # Version 5.1 edit.intersection.alternate=Izmenjujo\u010de presei\u0161\u010de export.restrictedmove=Ne dovoli premikanja message.bindpoint=Pove\u017ei to\u010dko z objektom (Dvigalka: z mejo, Ctrl: meja in notranjost) edit.point.inside=V notranjosti edit.point.increment=S korakom (0=zvezno) edit.more=Dodatno ..../src/rene/zirkel/docs/CVS/RevisionCache/ZirkelProperties_ar.properties#1.10000644000175000017500000026364511144764476025534 0ustar yvesyvesversion=\u0627\u0644\u0625\u0635\u062f\u0627\u0631 homefile=index.html homepage=http://mathsrv.ku-eichstaett.de/MGF/homes/grothmann/java/zirkel/doc_en/ about.title= \u0628\u0627\u0644\u0646\u0633\u0628\u0629 \u0644\u0647\u0630\u0627 \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062c about.name= \u0623\u0633\u0627\u0633\u064a\u0627\u062a \u0627\u0644\u0647\u0646\u062f\u0633\u0629 about.programmed= \u0628\u0631\u0645\u062c\u0629 title= \u0627\u0644\u0647\u0646\u062f\u0633\u0629 \u0627\u0644\u0623\u0633\u0627\u0633\u064a\u0629 close= \u0625\u063a\u0644\u0627\u0642 ok= \u0646\u0639\u0645 cancel= \u0625\u0644\u063a\u0627\u0621 done= \u062c\u064a\u062f \u0635\u062d\u064a\u062d message= \u0631\u0633\u0627\u0644\u0629 yes= \u0646\u0639\u0645 no= \u0644\u0627 abort= \u0625\u0644\u063a\u0627\u0621 true= \u0635\u062d\u064a\u062d false= \u062e\u0637\u0623 warning.nojob= \u0647\u0630\u0627 \u0644\u064a\u0633 \u062a\u0645\u0631\u064a\u0646 warning.print= \u0625\u062e\u0641\u0627\u0642 \u0641\u064a \u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u0637\u0628\u0639 warning.reset= \u0633\u062a\u0643\u0648\u0646 \u0647\u0630\u0647 \u0627\u0644\u062e\u0627\u0635\u064a\u0629 \u0633\u0627\u0626\u0631\u0629 \u0627\u0644\u0645\u0641\u0639\u0648\u0644 \u0639\u0646\u062f \u0627\u0644\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0642\u0627\u062f\u0645 question.title= \u0633\u0624\u0627\u0644 question.intersection= \u0647\u0644 \u0623\u0646\u0634\u0649\u0621 \u0647\u0630\u0627 \u0627\u0644\u062a\u0642\u0627\u0637\u0639 \u061f question.pointon= \u0647\u0644 \u0623\u0646\u0634\u0649\u0621 \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u0643\u0627\u0626\u0646 \u061f colors.black= \u0623\u0633\u0648\u062f colors.blue= \u0623\u0632\u0631\u0642 colors.green= \u0623\u062e\u0636\u0631 colors.brown= \u0628\u0646\u064a colors.cyan= \u0633\u064a\u0627\u0646 colors.yellow= \u0623\u062d\u0645\u0631 objects.point= \u0646\u0642\u0637\u0629 objects.segment= \u0642\u0637\u0639\u0629 objects.line= \u0645\u0633\u062a\u0642\u064a\u0645 objects.ray= \u0646\u0635\u0641 \u0645\u0633\u062a\u0642\u064a\u0645 objects.circle= \u062f\u0627\u0626\u0631\u0629 objects.intersection= \u062a\u0642\u0627\u0637\u0639 objects.move= \u062a\u062d\u0631\u064a\u0643 \u0646\u0642\u0637\u0629 objects.hide= \u0625\u062e\u0641\u0627\u0621 \u0643\u0627\u0626\u0646 objects.edit= \u062a\u062d\u0631\u064a\u0631 objects.tracker= \u0645\u062d\u0644 ... \u0646\u0642\u0637\u0629 \u0623\u0648 \u0645\u0633\u062a\u0642\u064a\u0645 objects.objecttracker= \u0645\u062d\u0644 ... \u0646\u0642\u0637\u0629 \u0623\u0648 \u0645\u0633\u062a\u0642\u064a\u0645 \u0639\u0644\u0649 \u0643\u0627\u0626\u0646 objects.parallel= \u0645\u0633\u062a\u0642\u064a\u0645 \u0645\u0648\u0627\u0632\u064a objects.plumb= \u0645\u0633\u062a\u0642\u064a\u0645 \u0639\u0645\u0648\u062f\u064a objects.circle3= \u062f\u0627\u0626\u0631\u0629 \u0645\u0639\u064a\u0646\u0629 \u0628\u0646\u0635\u0641 \u0642\u0637\u0631\u0647\u0627 \u0648 \u0645\u0631\u0643\u0632\u0647\u0627 \u0623\u064a \u0628\u062b\u0644\u0627\u062b \u0646\u0642\u0637 objects.midpoint= \u0645\u0646\u062a\u0635\u0641 \u0642\u0637\u0639\u0629 objects.quadric= \u0642\u0637\u0639 \u0645\u062e\u0631\u0648\u0637\u064a objects.angle= \u0632\u0627\u0648\u064a\u0629 objects.boundedpoint= \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0643\u0627\u0626\u0646 objects.parameter= \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0625\u0628\u062a\u062f\u0627\u0626\u064a\u0629 \u0644\u0644\u0645\u0627\u0643\u0631\u0648 objects.targets= \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0627\u0644\u0646\u0647\u0627\u0626\u064a\u0629 \u0644\u0644\u0645\u0627\u0643\u0631\u0648 objects.definejob= \u062a\u0639\u064a\u064a\u0646 \u062a\u0645\u0631\u064a\u0646 objects.runmacro= \u062a\u0646\u0641\u064a\u0630 \u0645\u0627\u0643\u0631\u0648 objects.delete= \u062d\u0630\u0641 \u0643\u0627\u0626\u0646 \u0648 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0627\u0644\u0645\u0631\u062a\u0628\u0637\u0629 \u0628\u0647 objects.reorder= \u0625\u0631\u062c\u0627\u0639 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0644\u0644\u062e\u0644\u0641\u064a\u0629 objects.animate= \u062d\u0631\u0643\u0629 objects.expression= \u0639\u0628\u0627\u0631\u0629 \u062d\u0633\u0627\u0628\u064a\u0629 objects.area= \u0645\u0636\u0644\u0639 objects.text= \u0646\u0635 objects.fixedcircle= \u062f\u0627\u0626\u0631\u0629 \u0630\u0627\u062a \u0646\u0635\u0641 \u0642\u0637\u0631 \u062b\u0627\u0628\u062a objects.fixedangle= \u0632\u0627\u0648\u064a\u0629 \u062b\u0627\u0628\u062a\u0629 objects.fixedsegment= \u0642\u0637\u0639\u0629 \u0645\u0633\u062a\u0642\u064a\u0645\u0629 \u062b\u0627\u0628\u062a\u0629 \u0627\u0644\u0637\u0648\u0644 iconhelp.point= \u0646\u0642\u0637\u0629 iconhelp.segment= \u0642\u0637\u0639\u0629 \u0645\u0633\u062a\u0642\u064a\u0645\u0629 iconhelp.line= \u0645\u0633\u062a\u0642\u064a\u0645 iconhelp.ray= \u0646\u0635\u0641 \u0645\u0633\u062a\u0642\u064a\u0645 iconhelp.circle= \u062f\u0627\u0626\u0631\u0629 iconhelp.intersection= \u062a\u0642\u0627\u0637\u0639 iconhelp.move= \u062a\u062d\u0631\u064a\u0643 \u0646\u0642\u0637\u0629 iconhelp.hide= \u0625\u062e\u0641\u0627\u0621 \u0627\u0644\u0643\u0627\u0626\u0646 iconhelp.edit= \u062a\u062d\u0631\u064a\u0631 \u0643\u0627\u0626\u0646 iconhelp.tracker= \u0645\u062d\u0644 ... \u0646\u0642\u0637\u0629 \u0623\u0648 \u0645\u0633\u062a\u0642\u064a\u0645 iconhelp.objecttracker= \u0645\u062d\u0644 -\u0623\u0648\u062a\u0648\u0645\u0627\u062a\u064a\u0643\u064a- \u0646\u0642\u0637\u0629 \u0623\u0648 \u0645\u0633\u062a\u0642\u064a\u0645 iconhelp.parallel= \u0645\u0633\u062a\u0642\u064a\u0645 \u0645\u0648\u0627\u0632\u064a iconhelp.plumb= \u0645\u0633\u062a\u0642\u064a\u0645 \u0639\u0645\u0648\u062f\u064a iconhelp.circle3= \u062f\u0627\u0626\u0631\u0629 \u0645\u0639\u064a\u064a\u0646\u0629 \u0628\u0646\u0635\u0641 \u0642\u0637\u0631 \u0648 \u0645\u0631\u0643\u0632 \u0623\u064a \u0628\u062b\u0644\u0627\u062b \u0646\u0642\u0637 iconhelp.midpoint= \u0645\u0646\u062a\u0635\u0641 \u0642\u0637\u0639\u0629 iconhelp.quadric= \u0642\u0637\u0639 \u0645\u062e\u0631\u0648\u0637\u064a \u0645\u0639\u064a\u064a\u0646 \u0628\u062e\u0645\u0633 \u0646\u0642\u0637 iconhelp.angle= \u0632\u0627\u0648\u064a\u0629 iconhelp.boundedpoint= \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0643\u0627\u0626\u0646 iconhelp.hidden= (F9) \u0625\u062e\u0641\u0627\u0621\u0623\u0648\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0627\u0644\u0645\u062e\u0641\u064a\u0629 iconhelp.color= \u0644\u0648\u0646 \u0625\u0641\u062a\u0631\u0627\u0636\u064a iconhelp.type= (Ctrl-5,6,7,8,9,0) \u0646\u0645\u0637 \u0627\u0644\u0646\u0642\u0637 iconhelp.type0= \u0646\u0645\u0637 \u0627\u0644\u0646\u0642\u0637 \u0625\u0641\u062a\u0631\u0627\u0636\u064a iconhelp.thickness= (Alt-5,6,7) \u0633\u0645\u0643 \u0625\u0641\u062a\u0631\u0627\u0636\u064a iconhelp.back= (<-) \u062d\u0630\u0641 \u0622\u062e\u0631 \u0643\u0627\u0626\u0646 iconhelp.thickness0= \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0633\u0645\u0643 \u0625\u0641\u062a\u0631\u0627\u0636\u064a iconhelp.partial= (Ctrl-F9) \u062f\u0627\u0626\u0631\u0629 \u063a\u064a\u0631 \u062a\u0627\u0645\u0629 iconhelp.plines= (Ctrl-F10) \u0645\u0633\u062a\u0642\u064a\u0645 \u063a\u064a\u0631 \u062a\u0627\u0645 iconhelp.arrow= (Ctrl-F11) \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0642\u0637\u0639 \u0627\u0644\u0645\u0633\u062a\u0642\u064a\u0645\u0629 \u0643\u0623\u0634\u0639\u0629 \u0625\u0641\u062a\u0631\u0627\u0636\u064a\u0627 iconhelp.showcolor= (Alt-1,2,3,4) \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0623\u0644\u0648\u0627\u0646 \u0627\u0644\u0645\u062d\u062f\u062f\u0629 \u0641\u0642\u0637 iconhelp.runmacro= \u062a\u0646\u0641\u064a\u0630 \u0645\u0627\u0643\u0631\u0648 iconhelp.macro= (7,8,Ctrl-5) \u062a\u0639\u064a\u064a\u0646 \u0648\u0633\u0627\u0626\u0637 \u0627\u0644\u0645\u0627\u0643\u0631\u0648 \u060c \u0623\u0647\u062f\u0627\u0641\u0647\u0627 \u060c \u062a\u0639\u0631\u064a\u0641\u0647\u0627 iconhelp.expression= (x) \u0639\u0628\u0627\u0631\u0629 \u062d\u0633\u0627\u0628\u064a\u0629 iconhelp.showvalue= (Ctrl-F7) \u0625\u0638\u0647\u0627\u0631 \u0642\u064a\u0645 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0625\u0641\u062a\u0631\u0627\u0636\u064a\u0627 iconhelp.showname= (Ctrl-F6) \u0625\u0638\u0647\u0627\u0631 \u0623\u0633\u0645\u0627\u0621 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0625\u0641\u062a\u0631\u0627\u0636\u064a\u0627 iconhelp.obtuse= (Ctrl-F12) \u0625\u0646\u0634\u0627\u0621 \u0632\u0627\u0648\u064a\u0629 \u0623\u0643\u0628\u0631 \u0645\u0646 180 \u062f\u0631\u062c\u0629 iconhelp.solid= \u0639\u062f\u0645 \u0625\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0634\u0641\u0627\u0641\u064a\u0629 \u0625\u0641\u062a\u0631\u0627\u0636\u064a\u0627 iconhelp.longnames= (Ctrl-F8) \u0625\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0623\u0633\u0645\u0627\u0621 \u0627\u0644\u0637\u0648\u064a\u0644\u0629 iconhelp.grid= (F12) \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0645\u062d\u0627\u0648\u0631 iconhelp.comment= (F10) \u0625\u0638\u0647\u0627\u0631 \u0648 \u062a\u062d\u0631\u064a\u0631 \u062a\u0639\u0644\u064a\u0642 iconhelp.defaults= \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0625\u0641\u062a\u0631\u0627\u0636\u064a\u0629 iconhelp.macro0=(7,8,Ctrl-5) \u062a\u0639\u064a\u064a\u0646 \u0648\u0633\u0627\u0626\u0637 \u0627\u0644\u0645\u0627\u0643\u0631\u0648 \u060c \u0623\u0647\u062f\u0627\u0641\u0647\u0627 \u060c \u062a\u0639\u0631\u064a\u0641\u0647\u0627 iconhelp.visual= \u062a\u0628\u062f\u064a\u0644 \u0646\u0645\u0637 \u0627\u0644\u0639\u0645\u0644 iconhelp.replay= \u0625\u0639\u0627\u062f\u0629 \u0631\u0624\u064a\u0629 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 iconhelp.oneforward= \u0625\u0644\u0649 \u0627\u0644\u0627\u0645\u0627\u0645 iconhelp.fastforward= \u0625\u0644\u0649 \u0627\u0644\u0623\u0645\u0627\u0645 \u0628\u0633\u0631\u0639\u0629 iconhelp.allforward= \u0625\u0644\u0649 \u0627\u0644\u0646\u0647\u0627\u064a\u0629 iconhelp.oneback= \u0625\u0644\u0649 \u0627\u0644\u062e\u0644\u0641 iconhelp.fastback= \u0625\u0644\u0649 \u0627\u0644\u062e\u0644\u0641 \u0628\u0633\u0631\u0639\u0629 iconhelp.allback= \u0625\u0644\u0649 \u0627\u0644\u0628\u062f\u0627\u064a\u0629 iconhelp.close= \u0625\u063a\u0644\u0627\u0642 iconhelp.area= \u0645\u0636\u0644\u0639 iconhelp.text= \u0646\u0635 \u0639\u0628\u0631 \u0633\u0637\u0648\u0631 iconhelp.fixedcircle= \u062f\u0627\u0626\u0631\u0629 \u0628\u0646\u0635\u0641 \u0642\u0637\u0631 \u062b\u0627\u0628\u062a iconhelp.fixedangle= \u0632\u0627\u0648\u064a\u0629 \u062b\u0627\u0628\u062a\u0629 iconhelp.fixedsegment= \u0642\u0637\u0639\u0629 \u062b\u0627\u0628\u062a\u0629 \u0627\u0644\u0637\u0648\u0644 iconhelp.animate= \u062a\u062d\u0631\u064a\u0643 \u0646\u0642\u0637\u0629 iconhelp.delete= (Suppr) \u062d\u0630\u0641 \u0627\u0644\u0643\u0627\u0626\u0646 \u0648 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0627\u0644\u0645\u0631\u062a\u0628\u0637\u0629 \u0628\u0647 iconhelp.undo= (Ctrl-z) \u0625\u0644\u063a\u0627\u0621 \u0627\u0644\u062d\u0630\u0641 \u0627\u0644\u0623\u062e\u064a\u0631 iconhelp.nextbreak= \u0642\u0641\u0632 \u0625\u0644\u0649 \u0646\u0642\u0637\u0629 \u0627\u0644\u062a\u0648\u0642\u0641 \u0627\u0644\u062a\u0627\u0644\u064a\u0629 iconhelp.setbreak= \u0648\u0636\u0639 \u0623\u0648 \u062d\u0630\u0641 \u0646\u0642\u0637\u0629 \u062a\u0648\u0642\u0641 iconhelp.zoom= \u062a\u0643\u0628\u064a\u0631\u0623\u0648 \u062a\u0635\u063a\u064a\u0631 \u0628\u0627\u0644\u0641\u0623\u0631\u0629 shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel= shortcuts.plumb= shortcuts.circle3= shortcuts.midpoint= shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint= shortcuts.definejob= shortcuts.parameter= shortcuts.targets= shortcuts.runmacro= shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.showcolor.4= shortcuts.showcolor.5= shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) menu.file=\u0645\u0644\u0641 menu.file.clearmacros= \u062d\u0630\u0641 \u0627\u0644\u0645\u0627\u0643\u0631\u0648\u0627\u062a \u0627\u0644\u0634\u062e\u0635\u064a\u0629 menu.file.load= (Ctrl-o) \u0641\u062a\u062d \u0625\u0646\u0634\u0627\u0621 menu.file.loadjob= (Ctrl-j) \u0641\u062a\u062d \u062a\u0645\u0631\u064a\u0646 menu.file.savejob= (Ctrl-k) \u062d\u0641\u0638 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 \u0643\u062a\u0645\u0631\u064a\u0646 menu.file.save= (Ctrl-s) \u062d\u0641\u0638 \u0647\u0630\u0627 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 menu.file.saveas= (Ctrl-a) \u062d\u0641\u0638 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 \u0628\u0627\u0633\u0645 menu.file.includemacros= \u062a\u0636\u0645\u064a\u0646 \u0643\u0644 \u0627\u0644\u0645\u0627\u0643\u0631\u0648\u0627\u062a menu.file.exit= (Alt-F4) \u0625\u0646\u0647\u0627\u0621 menu.file.print= \u0637\u0628\u0639 menu.file.print.isoscale= 1:1 \u0633\u0644\u0645 menu.file.savebmp= (BMP) \u062d\u0641\u0638 \u0627\u0644\u0634\u0643\u0644 \u0628\u0627\u0644\u062a\u0646\u0633\u064a\u0642 menu.file.savefig= (FIG) \u062d\u0641\u0638 \u0627\u0644\u0634\u0643\u0644 \u0628\u0627\u0644\u062a\u0646\u0633\u064a\u0642 menu.file.loadrun= (Ctrl-r) \u0641\u062a\u062d \u0625\u0646\u0634\u0627\u0621 menu.file.editrun= (Ctrl-x) \u062a\u062d\u0631\u064a\u0631 \u0625\u0646\u0634\u0627\u0621 menu.actions=\u062a\u062d\u0631\u064a\u0631 menu.actions.elementary= \u0623\u062f\u0648\u0627\u062a \u0623\u0633\u0627\u0633\u064a\u0629 menu.actions.complex= \u0623\u062f\u0648\u0627\u062a \u0645\u062a\u0642\u062f\u0645\u0629 menu.actions.move= \u0623\u062f\u0648\u0627\u062a \u0627\u0644\u062a\u062d\u0631\u064a\u0643 menu.actions.decorative= \u0643\u0627\u0626\u0646\u0627\u062a \u062a\u0632\u064a\u0646\u064a\u0629 menu.options= \u062e\u064a\u0627\u0631\u0627\u062a menu.options.visual= (Ctrl-F6) \u062a\u0628\u062f\u064a\u0644 \u0646\u0645\u0637 \u0627\u0644\u0639\u0645\u0644 menu.options.hidden= (F9) \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0627\u0644\u0645\u062e\u0641\u064a\u0629 menu.options.comment= (F10) \u062a\u062d\u0631\u064a\u0631 \u062a\u0639\u0644\u064a\u0642 menu.options.constructiondisplay= (F11) \u0625\u0638\u0647\u0627\u0631 \u0645\u0631\u0627\u062d\u0644 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 menu.options.grid= (F12) \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0634\u0628\u0643\u0629 menu.options.setgrid= \u062a\u062d\u062f\u064a\u062f \u0639\u0631\u0636 \u0627\u0644\u0634\u0628\u0643\u0629 menu.options.showcolor= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0644\u0648\u0646 menu.options.defaultcolor= \u0644\u0648\u0646 \u0625\u0641\u062a\u0631\u0627\u0636\u064a menu.options.defaultthickness= \u0633\u0645\u0643 \u0625\u0641\u062a\u0631\u0627\u0636\u064a menu.options.defaulttype= \u0646\u0645\u0637 \u0627\u0644\u0646\u0642\u0637 \u0625\u0641\u062a\u0631\u0627\u0636\u064a menu.options.all= \u0627\u0644\u0643\u0644 menu.options.setdigits= \u0639\u062f\u062f \u0627\u0644\u0623\u0631\u0642\u0627\u0645 \u0627\u0644\u0639\u0634\u0631\u064a\u0629 menu.options.shownames= (Ctrl-F6) \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u062a\u0633\u0645\u064a\u0629 menu.options.longnames= (Ctrl-F8) \u0623\u0633\u0645\u0627\u0621 \u0637\u0648\u064a\u0644\u0629 menu.options.obtuse= (Ctrl-F12) \u0625\u0633\u062a\u0639\u0645\u0627\u0644 \u0632\u0648\u0627\u064a\u0627 \u0623\u0643\u0628\u0631 \u0645\u0646 180 \u062f\u0631\u062c\u0629 menu.options.solid= \u0639\u062f\u0645 \u0625\u0633\u062a\u0639\u0645\u0627\u0644 \u0627\u0644\u0634\u0641\u0627\u0641\u064a\u0629 menu.options.showvalues= (Ctrl-F7) \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0642\u064a\u0645 menu.options.partial= (Ctrl-F9) \u062f\u0627\u0626\u0631\u0629 \u063a\u064a\u0631 \u062a\u0627\u0645\u0629 (\u0623\u0642\u0648\u0627\u0633 \u0641\u0642\u0637) menu.options.plines= (Ctrl-F10) \u0645\u0633\u062a\u0642\u064a\u0645 \u063a\u064a\u0631 \u062a\u0627\u0645 (\u062c\u0632\u0621 \u0645\u0646 \u0645\u0633\u062a\u0642\u064a\u0645) menu.options.arrow= (Ctrl-F11) \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0642\u0637\u0639 \u0627\u0644\u0645\u0633\u062a\u0642\u064a\u0645\u0629 \u0643\u0623\u0634\u0639\u0629 menu.options.editicons= \u062a\u062e\u0635\u064a\u0635 \u0639\u0644\u0628\u0629 \u0627\u0644\u0623\u062f\u0648\u0627\u062a menu.options.back= (<-) \u062d\u0630\u0641 \u0622\u062e\u0631 \u0643\u0627\u0626\u0646 menu.options.undo= (Ctrl-z) \u0625\u0644\u063a\u0627\u0621 \u0627\u0644\u062d\u0630\u0641 menu.zoom= \u062a\u0643\u0628\u064a\u0631\u0623\u0648 \u062a\u0635\u063a\u064a\u0631 menu.zoom.in= (+) \u062a\u0643\u0628\u064a\u0631 menu.zoom.out= (-) \u062a\u0635\u063a\u064a\u0631 menu.zoom.left= \u0625\u0644\u0649 \u0627\u0644\u064a\u0633\u0627\u0631 menu.zoom.right= \u0625\u0644\u0649 \u0627\u0644\u064a\u0645\u064a\u0646 menu.zoom.up= \u0625\u0644\u0649 \u0627\u0644\u064a\u0645\u064a\u0646 menu.zoom.down= \u0625\u0644\u0649 \u0627\u0644\u0623\u0633\u0641\u0644 menu.macros= \u0627\u0644\u0645\u0627\u0643\u0631\u0648\u0627\u062a menu.special.definemacro= (Ctrl-F5) \u062a\u0639\u0631\u064a\u0641 \u0645\u0627\u0643\u0631\u0648 menu.special.runmacro= \u062a\u0646\u0641\u064a\u0630 \u0645\u0627\u0643\u0631\u0648 menu.special.savemacros= \u062d\u0641\u0638 \u0627\u0644\u0645\u0627\u0643\u0631\u0648\u0627\u062a menu.special.loadmacros= \u062a\u062d\u0645\u064a\u0644 \u0645\u0627\u0643\u0631\u0648 menu.special.deletemacros= \u062d\u0630\u0641 \u0645\u0627\u0643\u0631\u0648 menu.special= \u062e\u0627\u0635 menu.special.testjob= (Ctrl-F1) \u062c\u0631\u0628 \u0647\u0630\u0627 \u0627\u0644\u062a\u0645\u0631\u064a\u0646 menu.special.jobcomment= (F8) \u0646\u0635 \u0627\u0644\u062a\u0645\u0631\u064a\u0646 menu.special.export= (Ctrl-e) \u0625\u0646\u0634\u0627\u0621 \u0645\u0644\u0641 \u0644\u0644\u0639\u0631\u0636 \u0639\u0644\u0649 \u0627\u0644\u0648\u0627\u0628 menu.special.replay= \u0625\u0639\u0627\u062f\u0629 \u0631\u0624\u064a\u0629 \u0645\u0631\u0627\u062d\u0644 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 menu.help= \u062a\u0639\u0644\u064a\u0645\u0627\u062a menu.help.about= \u062d\u0648\u0644 \u0647\u0630\u0627 \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062c menu.help.browser= \u0625\u0633\u062a\u0643\u0634\u0627\u0641 \u0627\u0644\u062a\u0639\u0644\u064a\u0645\u0627\u062a \u0648 \u0627\u0644\u0627\u0645\u062b\u0644\u0629 menu.help.text= \u062a\u0639\u0644\u064a\u0645\u0627\u062a \u0628\u0633\u064a\u0637\u0629 menu.help.configure= \u0625\u0639\u062f\u0627\u062f \u0627\u0644\u0645\u0628\u062d\u0631 menu.help.help= (F1) \u062a\u0639\u0644\u064a\u0645\u0627\u062a menu.help.macros= \u062d\u0648\u0644 \u0627\u0644\u0645\u0627\u0643\u0631\u0648\u0627\u062a menu.help.tools= \u0627\u0644\u0623\u062f\u0648\u0627\u062a menu.help.gui= \u0648\u0627\u062c\u0647\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 menu.help.interactive= \u0646\u0645\u0637 \u0648\u0635\u0641\u064a (\u0625\u062f\u062e\u0627\u0644 \u0627\u0644\u0623\u0648\u0627\u0645\u0631) menu.help.tips= \u062a\u0644\u0645\u064a\u062d\u0627\u062a menu.settings= \u062e\u064a\u0627\u0631\u0627\u062a \u062e\u0627\u0635\u0629 menu.settings.fullicons= \u0639\u0631\u0636 \u0634\u0631\u064a\u0637\u064a \u0623\u062f\u0648\u0627\u062a menu.settings.utf= UTF-8 \u0625\u0633\u062a\u0639\u0645\u0644 \u0627\u0644\u062a\u0634\u0641\u064a\u0631\u0629 menu.settings.autohide= \u0625\u062e\u0641\u0627\u0621 \u0646\u0642\u0637\u0629 \u0627\u0644\u062a\u0642\u0627\u0637\u0639 \u0627\u0644\u062b\u0627\u0646\u064a\u0629 menu.settings.iconbartop= \u0623\u0634\u0631\u0637\u0629 \u0644\u0627\u0623\u062f\u0648\u0627\u062a \u0641\u0648\u0642 \u0627\u0644\u0634\u0643\u0644 menu.settings.showtips= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u062a\u0644\u0645\u064a\u062d\u0627\u062a menu.settings.simplegraphics= \u0625\u0633\u062a\u062e\u062f\u0627\u0645 \u063a\u0631\u0627\u0641\u064a\u0643\u0633 \u0628\u0633\u064a\u0637 menu.settings.sure= \u0623\u0637\u0644\u0628 \u0627\u0644\u062a\u0623\u0643\u064a\u062f \u0642\u0628\u0644 \u0627\u0644\u0641\u062a\u062d \u0648 \u0627\u0644\u063a\u0644\u0642 menu.settings.pointon= \u0623\u0637\u0644\u0628 \u0627\u0644\u062a\u0623\u0643\u064a\u062f \u0642\u0628\u0644 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0627\u0644\u0643\u0627\u0626\u0646 menu.settings.intersection= \u0627\u0637\u0644\u0628 \u0627\u0644\u062a\u0623\u0643\u064a\u062f\u0642\u0628\u0644 \u0625\u0646\u0634\u0627\u0621 \u062a\u0642\u0627\u0637\u0639 menu.settings.choice= \u0625\u0638\u0647\u0627\u0631 \u0639\u0644\u0628\u0629 \u062d\u0648\u0627\u0631 \u0644\u0644\u0643\u0627\u0626\u0646\u0627\u062a menu.settings.movename= \u0625\u0638\u0647\u0627\u0631 \u0642\u064a\u0645 \u0627\u0644\u0643\u0627\u0626\u0646 \u0639\u0646\u062f \u062a\u062d\u0631\u064a\u0643\u0647 menu.settings.movefixname= \u0625\u0638\u0647\u0627\u0631 \u0642\u064a\u0645 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0627\u0644\u062b\u0627\u0628\u062a\u0629 \u0639\u0646\u062f \u062a\u062d\u0631\u0643\u0647\u0627 menu.settings.restricted= \u0646\u0645\u0637 \u0639\u0645\u0644 \u0627\u0644\u062a\u0644\u0645\u064a\u0630 menu.colors= \u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0627\u0644\u0648\u0627\u0646 colors.default= \u0625\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0627\u0644\u0648\u0627\u0646 \u0627\u0644\u0625\u0641\u062a\u0631\u0627\u0636\u064a\u0629 colors.color0= \u0627\u0644\u0644\u0648\u0646 1 \u0623\u0633\u0648\u062f colors.color1= \u0627\u0644\u0644\u0648\u0646 2 \u0623\u062e\u0636\u0631 colors.color2= \u0627\u0644\u0644\u0648\u0646 3 \u0627\u0644\u0623\u0632\u0631\u0642 colors.color3= \u0627\u0644\u0644\u0648\u0646 4 \u0628\u0646\u064a colors.color4= \u0627\u0644\u0644\u0648\u0646 5 \u0633\u064a\u0627\u0646 colors.color5= \u0627\u0644\u0644\u0648\u0646 6 \u0627\u0644\u0623\u062d\u0645\u0631 colors.background= \u0627\u0644\u062e\u0644\u0641\u064a\u0629 colors.select= \u062a\u062d\u062f\u064a\u062f colors.target= \u0647\u062f\u0641 myfiledialog.dir= \u0645\u062c\u0644\u062f myfiledialog.file= \u0645\u0644\u0641 myfiledialog.pattern= \u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u0645\u0644\u0641\u0627\u062a filedialog.open= \u0641\u062a\u062d filedialog.saveas= \u062d\u0641\u0638 \u0628\u0627\u0633\u0645 filedialog.open.action= \u0641\u062a\u062d filedialog.saveas.action= \u062d\u0641\u0638 filedialog.htmlsave= HTML \u062d\u0641\u0638 \u0628\u062a\u0646\u0633\u064a\u0642 filedialog.htmlsave.action= \u062d\u0641\u0638 pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save= \u062d\u0641\u0638 load= \u062a\u062d\u0645\u064a\u0644 abort= \u0625\u0644\u063a\u0627\u0621 bound.release= \u0623\u0641\u0635\u0644 \u0627\u0644\u0646\u0642\u0637\u0629 bound.bind= \u0631\u0628\u0637 \u0628\u0627\u0644\u0643\u0627\u0626\u0646 (\u062a\u062b\u0628\u064a\u062a \u0639\u0644\u0649 \u0643\u0627\u0626\u0646) bound.error= \u0643\u0627\u0626\u0646 \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f \u0642\u0628\u0644 \u0627\u0644\u062a\u0642\u0627\u0637\u0639 constructiondisplay.edit= \u062a\u062d\u0631\u064a\u0631 \u0643\u0627\u0626\u0646 constructiondisplay.copy= \u0646\u0633\u062e \u0641\u064a \u0627\u0644\u062d\u0627\u0641\u0638\u0629 edit.Title= \u062e\u064a\u0627\u0631\u0627\u062a edit.name= \u062a\u0633\u0645\u064a\u0629 edit.hidden= \u0645\u062e\u0641\u064a edit.text= \u0646\u0635 edit.fixed= \u062b\u0627\u0628\u062a edit.color= \u0644\u0648\u0646 edit.ok= \u0646\u0639\u0645 edit.cancel= \u0625\u0644\u063a\u0627\u0621 edit.showname= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0623\u0633\u0645\u0627\u0621 edit.point.title= \u062a\u062d\u0631\u064a\u0631 : \u0646\u0642\u0637\u0629 edit.point.type= \u0646\u0645\u0637 edit.point.x=X edit.point.y=Y edit.point.intersection= \u0645\u062e\u062a\u0644\u0641 \u0639\u0646 edit.point.showvalue= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0625\u062d\u062f\u0627\u062b\u064a\u064a\u0646 edit.point.colortype= \u0627\u0644\u0633\u0645\u0643 edit.point.bound= \u0631\u0628\u0637 edit.point.away= \u0628\u0639\u064a\u062f \u0639\u0646 edit.point.close= \u0642\u0631\u064a\u0628 \u0645\u0646 edit.point.free= \u0645\u0633\u062a\u0642\u0644 edit.line.title= \u062a\u062d\u0631\u064a\u0631 : \u0645\u0633\u062a\u0642\u064a\u0645 .. \u0646\u0635\u0641 \u0645\u0633\u062a\u0642\u064a\u0645 ..\u0642\u0637\u0639\u0629 edit.line.normal= \u0639\u0627\u062f\u064a edit.line.thick= \u0633\u0645\u064a\u0643 edit.line.thin= \u0631\u0642\u064a\u0642 edit.line.invisible= \u0645\u062e\u0641\u064a edit.line.type= \u0646\u0645\u0637 edit.segment.length= \u0637\u0648\u0644 edit.segment.showvalue= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0637\u0648\u0644 edit.circle.title= \u062a\u062d\u0631\u064a\u0631 \u062f\u0627\u0626\u0631\u0629 edit.circle.length= \u0646\u0635\u0641 \u0627\u0644\u0642\u0637\u0631 edit.circle.partial= \u062c\u0632\u0626\u064a edit.circle.range= \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0645\u062c\u0627\u0644 edit.circle.killrange= \u062d\u0630\u0641 \u0627\u0644\u0645\u062c\u0627\u0644 edit.plumb.restricted= \u062b\u0627\u0628\u062a edit.angle.title= \u062a\u062d\u0631\u064a\u0631 \u0632\u0627\u0648\u064a\u0629 edit.angle.length= \u0642\u064a\u0627\u0633 edit.angle.displaysize= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0623\u0628\u0639\u0627\u062f edit.angle.normal= \u0639\u0627\u062f\u064a edit.angle.small= \u0635\u063a\u064a\u0631\u0629 edit.angle.large= \u0643\u0628\u064a\u0631\u0629 edit.expression.title= \u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0639\u0628\u0627\u0631\u0629 edit.expression= \u0639\u0628\u0627\u0631\u0629 \u062d\u0633\u0627\u0628\u064a\u0629 edit.expression.prompt= \u0634\u0631\u062d edit.area.title= \u062a\u062d\u0631\u064a\u0631 \u0645\u0636\u0644\u0639 edit.area.back= \u0641\u064a \u0627\u0644\u062e\u0644\u0641\u064a\u0629 export.title= \u062a\u0635\u062f\u064a\u0631 \u0643\u0648\u0631\u0642\u0629 \u0648\u0627\u0628 export.pagetitle= \u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0635\u0641\u062d\u0629 export.width= \u0639\u0631\u0636 export.height= \u0625\u0631\u062a\u0641\u0627\u0639 export.jar= Jar \u0645\u0644\u0641 export.comment= \u062d\u0641\u0638 \u0627\u0644\u062a\u0639\u0644\u064a\u0642 export.file= \u0645\u0644\u0641 \u0625\u0646\u0634\u0627\u0621 export.job= \u0625\u0638\u0647\u0627\u0631 \u0643\u062a\u0645\u0631\u064a\u0646 export.color= \u0644\u0648\u0646 export.backgroundcolor= \u0625\u0633\u062a\u062e\u062f\u0645\u0647\u0627 \u0643\u062e\u0644\u0641\u064a\u0629 \u0644\u0644\u0648\u0631\u0642\u0629 export.appletcolor= \u0625\u0633\u062a\u062e\u062f\u0645\u0647\u0627 \u0643\u062e\u0644\u0641\u064a\u0629 \u0644\u0644\u0623\u0628\u0644\u0627\u062a export.plain= \u0628\u0633\u064a\u0637 export.3D= \u062d\u062f\u0648\u062f export.breaks= \u0625\u0639\u0627\u062f\u0629 \u0631\u0624\u064a\u0629 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 \u0645\u0639 \u0646\u0642\u0637 \u0627\u0644\u062a\u0648\u0642\u0641 export.icons= \u062d\u062f\u0648\u062f \u0648 \u0623\u064a\u0642\u0648\u0646\u0627\u062a export.full= \u062d\u062f\u0648\u062f \u0648 \u0623\u064a\u0642\u0648\u0646\u0627\u062a \u0648 \u0634\u0631\u064a\u0637 \u0627\u0644\u062d\u0627\u0644\u0629 export.nonvisual= \u062d\u062f\u0648\u062f \u0648 \u0623\u064a\u0642\u0648\u0646\u0627\u062a \u0648 \u062e\u0637 \u0627\u0644\u0623\u0648\u0627\u0645\u0631 export.style= Applet\u0646\u0645\u0637 \u0623\u0628\u0644\u0627\u062a export.setcolor= \u0625\u062e\u062a\u064a\u0627\u0631 \u0627\u0644\u0644\u0648\u0646 export.savefirst= \u0627\u0644\u0645\u0644\u0641 \u063a\u064a\u0631 \u0645\u062d\u0641\u0648\u0638 \u0628\u0639\u062f export.soltext= \u0646\u0635 \u0627\u0644\u062d\u0644 export.stylesheet= CSS \u0645\u0644\u0641 \u0628\u062a\u0646\u0633\u064a\u0642 export.solution= \u0645\u0644\u0641 \u062d\u0644 export.jumpsol= \u0627\u0644\u0630\u0647\u0627\u0628 \u0625\u0644\u0649 \u0627\u0644\u062d\u0644 export.linksol= \u0627\u0644\u0631\u0628\u0637 \u0628\u0627\u0644\u062d\u0644 export.savesol= \u062d\u0641\u0638 \u0645\u0644\u0641 \u0627\u0644\u062d\u0644 export.track= \u0645\u062d\u0644 export.digits= \u062d\u0641\u0638 \u062f\u0642\u0629 \u0638\u0647\u0648\u0631 \u0627\u0644\u0623\u0631\u0642\u0627\u0645 export.setsize= \u0645\u0642\u0627\u0633 export.signature=Created with C.a.R. by R. Grothmann export.colors= \u062d\u0641\u0638 \u0627\u0644\u0623\u0644\u0648\u0627\u0646 export.background= \u062d\u0641\u0638 \u0627\u0644\u062e\u0644\u0641\u064a\u0629 help.title= \u062a\u0639\u0644\u064a\u0645\u0627\u062a help.error= \u0639\u062f\u0645 \u0625\u0645\u0643\u0627\u0646\u064a\u0629 \u0641\u062a\u062d \u0627\u0644\u0645\u0644\u0641 help.file=ar_schoolgeometry.txt coloreditor.title= \u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0644\u0648\u0646 coloreditor.red= \u0623\u062d\u0645\u0631 coloreditor.green= \u0623\u062e\u0636\u0631 coloreditor.blue= \u0623\u0632\u0631\u0642 coloreditor.color= \u0644\u0648\u0646\u0643 \u0627\u0644\u0645\u062e\u062a\u0627\u0631 comment.title= \u0627\u0644\u062a\u0639\u0644\u064a\u0642 \u0639\u0644\u0649 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 comment.set= \u0646\u0639\u0645 comment.cancel= \u0625\u0644\u063a\u0627\u0621 comment.close= \u0625\u063a\u0644\u0627\u0642 iconedit.title= \u062a\u0634\u062e\u064a\u0635 \u0634\u0631\u064a\u0637 \u0627\u0644\u0623\u062f\u0648\u0627\u062a iconedit.twobars= \u0634\u0631\u064a\u0637\u0627 \u0623\u062f\u0648\u0627\u062a jobcomment.title= \u062a\u0645\u0631\u064a\u0646 select.title= \u062a\u062d\u062f\u064a\u062f select.ok= \u0646\u0639\u0645 select.cancel= \u0625\u0644\u063a\u0627\u0621 select.comment= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u062a\u0639\u0644\u064a\u0642 select.all= \u0627\u0644\u0643\u0644 message.circle.midpoint= \u062f\u0627\u0626\u0631\u0629 : \u0645\u0646\u062a\u0635\u0641 \u0642\u0637\u0639\u0629 \u061f message.circle.radius= \u062f\u0627\u0626\u0631\u0629 : \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0627\u0644\u062f\u0627\u0626\u0631\u0629 \u061f - \u0632\u0631 \u0634\u064a\u0641\u062a \u0646\u0635\u0641 \u0642\u0637\u0631 \u062b\u0627\u0628\u062a message.fixedcircle.midpoint= \u062f\u0627\u0626\u0631\u0629 : \u0630\u0627\u062a \u0646\u0635\u0641 \u0642\u0637\u0631 \u062b\u0627\u0628\u062a \u0645\u0646\u062a\u0635\u0641 \u0642\u0637\u0639\u0629 \u061f message.fixedcircle.radius= \u062f\u0627\u0626\u0631\u0629 : \u0630\u0627\u062a \u0646\u0635\u0641 \u0642\u0637\u0631 \u062b\u0627\u0628\u062a \u0646\u0635\u0641 \u0627\u0644\u0642\u0637\u0631 \u061f message.edit= \u062a\u062d\u0631\u064a\u0631 : \u0643\u0627\u0626\u0646 \u061f message.line.first= \u0645\u0633\u062a\u0642\u064a\u0645 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 \u061f message.line.second= \u0645\u0633\u062a\u0642\u064a\u0645 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u062b\u0627\u0646\u064a\u0629 \u061f message.ray.first= \u0646\u0635\u0641 \u0645\u0633\u062a\u0642\u064a\u0645 : \u0627\u0644\u0645\u0628\u062f\u0623 \u061f message.ray.second= \u0646\u0635\u0641 \u0645\u0633\u062a\u0642\u064a\u0645 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u062b\u0627\u0646\u064a\u0629 \u061f message.move.select= \u062d\u0631\u0643\u0629 : \u0627\u062e\u062a\u0631 \u0643\u0627\u0626\u0646 \u061f - \u0632\u0631 \u0634\u064a\u0641\u062a \u0623\u0643\u062b\u0631 \u0645\u0646 \u0643\u0627\u0626\u0646 message.move.move= \u062d\u0631\u0643\u0629 : \u062d\u0631\u0643 \u0627\u0644\u0646\u0642\u0637\u0629 \u061f message.point= \u0646\u0642\u0637\u0629 : \u0623\u0646\u0634\u0649\u0621 \u0646\u0642\u0637\u0629 - \u0632\u0631 \u0634\u064a\u0641\u062a \u0646\u0642\u0637\u0629 \u062b\u0627\u0628\u062a\u0629 message.segment.first= \u0642\u0637\u0639\u0629 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 \u061f message.segment.second= \u0642\u0637\u0639\u0629 \u0645\u0633\u062a\u0642\u064a\u0645\u0629 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u062b\u0627\u0646\u064a\u0629 \u061f - \u0632\u0631 \u0634\u064a\u0641\u062a \u0637\u0648\u0644 \u062b\u0627\u0628\u062a message.fixedsegment.first= \u0642\u0637\u0639\u0629 \u0645\u0633\u062a\u0642\u064a\u0645\u0629 \u062b\u0627\u0628\u062a\u0629 \u0627\u0644\u0637\u0648\u0644 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 \u061f message.fixedsegment.second= \u0642\u0637\u0639\u0629 \u0645\u0633\u062a\u0642\u064a\u0645\u0629 \u062b\u0627\u0628\u062a\u0629 \u0627\u0644\u0637\u0648\u0644 : \u0623\u0646\u0642\u0631 \u0641\u064a \u0645\u0643\u0627\u0646 \u0645\u0627 message.intersection.first= \u062a\u0642\u0627\u0637\u0639 : \u0627\u0644\u0643\u0627\u0626\u0646 \u0627\u0644\u0623\u0648\u0644 \u0623\u0648 \u062a\u0642\u0627\u0637\u0639 \u061f message.intersection.second= \u062a\u0642\u0627\u0637\u0639 : \u0627\u0644\u0643\u0627\u0626\u0646 \u0627\u0644\u0623\u0648\u0644 \u061f message.hide= \u0625\u0638\u0647\u0627\u0631 \u0623\u0648 \u0625\u062e\u0641\u0627\u0621 : \u062d\u062f\u062f \u0643\u0627\u0626\u0646 message.tracker.select= \u0645\u062d\u0644 : \u0646\u0642\u0637\u0629 \u0623\u0648 \u0645\u0633\u062a\u0642\u064a\u0645 - \u0632\u0631 \u0634\u064a\u0641\u062a \u062a\u062d\u062f\u064a\u062f \u0643\u0627\u0626\u0646 \u0622\u062e\u0631 message.tracker.selectpoint= \u0645\u062d\u0644 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0645\u062a\u062d\u0631\u0643\u0629 \u061f message.tracker.move= \u0645\u062d\u0644 : \u062d\u0631\u0643 \u0627\u0644\u0646\u0642\u0637\u0629 message.objecttracker.select= \u0645\u062d\u0644 (\u0623\u0648\u062a\u0648\u0645\u0627\u062a\u064a\u0643\u064a) : \u0646\u0642\u0637\u0629 \u0623\u0648 \u0645\u0633\u062a\u0642\u064a\u0645 - \u0632\u0631 \u0634\u064a\u0641\u062a \u062d\u062f\u062f \u0643\u0627\u0626\u0646 \u0622\u062e\u0631 message.objecttracker.object= \u0645\u062d\u0644 \u0623\u0648\u062a\u0648\u0645\u0627\u062a\u064a\u0643\u064a : \u0639\u0644\u0649 \u0627\u064a \u0645\u0633\u062a\u0642\u064a\u0645 \u0623\u0648 \u062f\u0627\u0626\u0631\u0629 \u061f message.objecttracker.selectpoint= \u0645\u062d\u0644 \u0623\u0648\u062a\u0648\u0645\u0627\u062a\u064a\u0643\u064a : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0645\u062a\u062d\u0631\u0643\u0629 \u061f message.objecttracker.selectanypoint= \u0645\u062d\u0644 \u0623\u0648\u062a\u0648\u0645\u0627\u062a\u064a\u0643\u064a : \u0646\u0642\u0637\u0629 \u0622\u062e\u0631\u0649 \u0644\u0644\u062d\u0631\u0643\u0629 \u061f message.objecttracker.move= \u0645\u062d\u0644 \u0623\u0648\u062a\u0648\u0645\u0627\u062a\u064a\u0643\u064a : \u062d\u0631\u0643 \u0627\u0644\u0646\u0642\u0637\u0629 message.objecttracker.start= \u0645\u062d\u0644 \u0623\u0648\u062a\u0648\u0645\u0627\u062a\u064a\u0643\u064a : \u0625\u0628\u062f\u0623 \u0627\u0644\u062d\u0631\u0643\u0629 \u061f message.parallel.first= \u0645\u0648\u0627\u0632\u064a : \u0645\u0633\u062a\u0642\u064a\u0645 \u061f message.parallel.second= \u0645\u0648\u0627\u0632\u064a : \u0646\u0642\u0637\u0629 \u061f message.plumb.first= \u0639\u0645\u0648\u062f\u064a : \u0645\u0633\u062a\u0642\u064a\u0645 \u061f message.plumb.second= \u0639\u0645\u0648\u062f\u064a : \u0646\u0642\u0637\u0629 \u061f message.circle3.first= \u062f\u0627\u0626\u0631\u0629 : \u0623\u0648\u0644 \u0646\u0642\u0637\u0629 \u0646\u0635\u0641 \u0627\u0644\u0642\u0637\u0631\u061f message.circle3.second= \u062f\u0627\u0626\u0631\u0629 : \u062b\u0627\u0646\u064a \u0646\u0642\u0637\u0629 \u0646\u0635\u0641 \u0627\u0644\u0642\u0637\u0631 \u061f message.circle3.midpoint= \u062f\u0627\u0626\u0631\u0629 : \u0645\u0646\u062a\u0635\u0641 \u0642\u0637\u0639\u0629 \u061f message.midpoint.first= \u0645\u0646\u062a\u0635\u0641 \u0642\u0637\u0639\u0629 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0627\u0648\u0644\u0649 \u061f message.midpoint.second= \u0645\u0646\u062a\u0635\u0641 \u0642\u0637\u0639\u0629 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u062b\u0627\u0646\u064a\u0629 \u061f message.quadric= \u0642\u0637\u0639 \u0645\u062e\u0631\u0648\u0637\u064a : \u0646\u0642\u0637\u0629 \u0631\u0642\u0645 message.angle.first= \u0632\u0627\u0648\u064a\u0629 : \u0623\u0648\u0644 \u0646\u0642\u0637\u0629 \u0645\u0646 \u0627\u0644\u0632\u0627\u0648\u064a\u0629 \u061f message.angle.root= \u0627\u0644\u0632\u0627\u0648\u064a\u0629 : \u0627\u0644\u0631\u0623\u0633 \u061f message.angle.second= \u0632\u0627\u0648\u064a\u0629 : \u0622\u062e\u0631 \u0646\u0642\u0637\u0629 \u0645\u0646 \u0627\u0644\u0632\u0627\u0648\u064a\u0629 \u061f - \u0632\u0631 \u0634\u064a\u0641\u062a \u0632\u0627\u0648\u064a\u0629 \u062b\u0627\u0628\u062a\u0629 message.fixedangle.first= \u0632\u0627\u0648\u064a\u0629 \u062b\u0627\u0628\u062a\u0629 : \u0623\u0648\u0644 \u0646\u0642\u0637\u0629 \u0645\u0646 \u0627\u0644\u0632\u0627\u0648\u064a\u0629 \u061f message.fixedangle.root= \u0632\u0627\u0648\u064a\u0629 \u062b\u0627\u0628\u062a\u0629 : \u0627\u0644\u0631\u0623\u0633 \u061f message.fixedangle.second= \u0632\u0627\u0648\u064a\u0629 \u062b\u0627\u0628\u062a\u0629 : \u0623\u0646\u0642\u0631 \u0641\u064a \u0645\u0643\u0627\u0646 \u0622\u062e\u0631 message.label.select= \u0646\u0642\u0644 \u062a\u0633\u0645\u064a\u0629 : \u0625\u062e\u062a\u0631 \u062a\u0633\u0645\u064a\u0629 message.label.move= \u0646\u0642\u0644 \u062a\u0633\u0645\u064a\u0629 : \u0623\u0646\u0642\u0644 \u0627\u0644\u062a\u0633\u0645\u064a\u0629 message.boundedpoint= \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0643\u0627\u0626\u0646 : \u062f\u0627\u0626\u0631\u0629 \u0623\u0648 \u0645\u0633\u062a\u0642\u064a\u0645 \u061f - \u0632\u0631 \u0634\u064a\u0641\u062a \u063a\u064a\u0631 \u062b\u0627\u0628\u062a\u0629 message.parameters= \u0645\u0627\u0643\u0631\u0648 : \u0643\u0627\u0626\u0646\u0627\u062a \u0625\u0628\u062a\u062f\u0627\u0626\u064a\u0629 \u061f message.targets= \u0645\u0627\u0643\u0631\u0648 : \u0643\u0627\u0626\u0646\u0627\u062a \u0646\u0647\u0627\u0626\u064a\u0629 \u061f message.savejob.first= \u062a\u0639\u064a\u064a\u0646 \u062a\u0645\u0631\u064a\u0646 : \u0622\u062e\u0631 \u0643\u0627\u0626\u0646 \u0638\u0627\u0647\u0631 \u0645\u0646 \u0627\u0644\u062a\u0645\u0631\u064a\u0646 \u061f message.savejob.second= \u062a\u0639\u064a\u064a\u0646 \u062a\u0645\u0631\u064a\u0646 : \u0643\u0627\u0626\u0646 \u0647\u062f\u0641 \u061f - \u0632\u0631 \u0634\u064a\u0641\u062a \u0628\u062f\u0648\u0646 \u062a\u062d\u0642\u064a\u0642 message.savejob.third= \u062a\u0639\u064a\u064a\u0646 \u062a\u0645\u0631\u064a\u0646 : \u0643\u0627\u0626\u0646\u0627\u062a \u0623\u062e\u0631\u0649 \u0644\u0644\u0625\u0638\u0647\u0627\u0631 \u061f message.runmacro= %: %. % - % \u0645\u0627\u0643\u0631\u0648 message.runmacro.return= ( \u0625\u062e\u062a\u064a\u0627\u0631 SPACE \u0627\u0644\u0632\u0631 ) message.runmacro.fixes=( \u062a\u062b\u0628\u064a\u062a \u0627\u0644\u062a\u062d\u062f\u064a\u062f SHIFT \u0627\u0644\u0632\u0631) message.delete= \u062d\u0630\u0641 : \u062d\u062f\u062f \u0627\u0644\u0643\u0627\u0626\u0646 message.reorder= \u0625\u0639\u0627\u062f\u0629 \u0627\u0644\u062a\u0631\u062a\u064a\u0628 : \u0625\u062e\u062a\u0631 \u0643\u0627\u0626\u0646 message.expression= \u0639\u0628\u0627\u0631\u0629 \u062d\u0633\u0627\u0628\u064a\u0629 : \u062d\u062f\u062f \u0645\u0643\u0627\u0646 message.area= \u0645\u0636\u0644\u0639 \u0645\u0644\u0648\u0646 : \u0631\u0623\u0633 \u061f message.text= \u0646\u0635 : \u062d\u062f\u062f \u0645\u0643\u0627\u0646 message.animator.point= \u062d\u0631\u0643\u0629 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0645\u062a\u062d\u0631\u0643\u0629 \u061f message.animator.segment= \u062d\u0631\u0643\u0629 : \u062f\u0627\u0626\u0631\u0629 \u0627\u0648 \u0646\u0635\u0641 \u0645\u0633\u062a\u0642\u064a\u0645 \u061f message.animator.running= \u062d\u0631\u0643\u0629 : \u062a\u0646\u0641\u0630 ... \u0623\u0646\u0642\u0631 \u0628\u0627\u0644\u0645\u0627\u0648\u0633 \u0644\u0625\u064a\u0642\u0627\u0641 \u0627\u0644\u062d\u0631\u0643\u0629 message.range.first= \u0642\u0648\u0633 : \u0631\u0633\u0645 \u0627\u0644\u062f\u0627\u0626\u0631\u0629 \u0625\u0628\u062a\u062f\u0627\u0621\u0627 \u0645\u0646 message.range.second= \u0642\u0648\u0633 : ... \u0625\u0644\u0649 \u0627\u0644\u0646\u0642\u0637\u0629 \u061f message.setaway.away= \u062d\u0628\u0633 \u0627\u0644\u062a\u0642\u0627\u0637\u0639 \u0628\u0639\u064a\u062f \u0639\u0646 \u0627\u0644\u0646\u0642\u0637\u0629 \u061f message.setaway.close= \u062d\u0628\u0633 \u0627\u0644\u062a\u0642\u0627\u0637\u0639 \u0642\u0631\u064a\u0628 \u0645\u0646 \u0627\u0644\u0646\u0642\u0637\u0629 \u061f objectsedit.title= \u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u062e\u064a\u0627\u0631\u0627\u062a point.type.square= \u0645\u0631\u0628\u0639 point.type.diamond= \u0645\u0639\u064a\u0646 point.type.circle= \u062f\u0627\u0626\u0631\u0629 point.type.dot= \u0646\u0642\u0637\u0629 color.type.normal= \u0639\u0627\u062f\u064a color.type.thick= \u0633\u0645\u064a\u0643 color.type.thin= \u0631\u0642\u064a\u0642 color.type.invisible= \u0645\u062e\u0641\u064a text.point= % , % \u0646\u0642\u0637\u0629 \u0641\u064a text.line= % , % \u0645\u0633\u062a\u0642\u064a\u0645 \u0634\u0627\u0645\u0644 \u0644\u0644\u0646\u0642\u0637\u062a\u064a\u0646 text.segment= % , % \u0642\u0637\u0639\u0629 \u0645\u0633\u062a\u0642\u064a\u0645 \u0645\u0646 text.segment.fixed= % , % \u0645\u0633\u062a\u0642\u064a\u0645 \u0634\u0627\u0645\u0644 \u0644\u0644\u0646\u0642\u0637\u062a\u064a\u0646 text.ray= % , % \u0646\u0635\u0641 \u0645\u0633\u062a\u0642\u064a\u0645 \u0645\u0646 text.intersection= % , % \u062a\u0642\u0627\u0637\u0639 \u0628\u064a\u0646 text.circle= \u062f\u0627\u0626\u0631\u0629 \u0630\u0627\u062a \u0645\u0631\u0643\u0632 \u0648 \u0627\u0644\u0634\u0627\u0645\u0644\u0629 \u0644\u0644\u0646\u0642\u0637\u0629 text.circle.fixed= \u062f\u0627\u0626\u0631\u0629 \u0630\u0627\u062a \u0627\u0644\u0645\u0631\u0643\u0632 \u0648 \u0627\u0644\u0634\u0627\u0645\u0644\u0629 \u0644\u0644\u0646\u0642\u0637\u0629 \u0648 \u0646\u0635\u0641 \u0627\u0644\u0642\u0637\u0631 \u0627\u0644\u062b\u0627\u0628\u062a text.fixedcircle= \u062f\u0627\u0626\u0631\u0629 \u0630\u0627\u062a \u0627\u0644\u0645\u0631\u0643\u0632 \u0648 \u0646\u0635\u0641 \u0627\u0644\u0642\u0637\u0631 text.circle3= \u062f\u0627\u0626\u0631\u0629 \u0628\u062b\u0644\u0627\u062b \u0646\u0642\u0637 \u0630\u0627\u062a \u0627\u0644\u0645\u0631\u0643\u0632 \u0648 \u0646\u0635\u0641 \u0627\u0644\u0642\u0637\u0631 \u0645\u0639\u064a\u0646 \u0628\u0627\u0644\u0646\u0642\u0637\u062a\u064a\u0646 text.parallel= \u0645\u0633\u062a\u0642\u064a\u0645 \u0645\u0648\u0627\u0632\u064a \u0627\u0646\u0637\u0644\u0627\u0642\u0627 \u0645\u0646 \u0625\u0644\u0649 text.midpoint= \u0645\u0646\u062a\u0635\u0641 \u0642\u0637\u0639\u0629 \u0628\u064a\u0646 \u0627\u0644\u0646\u0642\u0637\u062a\u064a\u0646 text.quadric= \u0642\u0637\u0639 \u0645\u0643\u0627\u0641\u0649\u0621 \u0645\u0646 \u062e\u0644\u0627\u0644 \u0627\u0644\u0646\u0642\u0637 text.plumb= \u0645\u0633\u062a\u0642\u064a\u0645 \u0639\u0645\u0648\u062f\u064a \u0645\u0646 \u062e\u0644\u0627\u0644 \u0627\u0644\u0646\u0642\u0637\u062a\u064a\u0646 text.angle= % - % - % \u0627\u0644\u0632\u0627\u0648\u064a\u0629 text.angle.fixed= \u0632\u0627\u0648\u064a\u0629 \u0628\u062b\u0644\u0627\u062b \u0646\u0642\u0637 \u0648 \u0642\u064a\u0627\u0633 text.boundedpoint= \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 text.expression= \u0639\u0628\u0627\u0631\u0629 \u0639\u0646\u062f text.area=Polygon text.fixedangle= \u0632\u0627\u0648\u064a\u0629 \u062b\u0627\u0628\u062a\u0629 name.Point= \u0646\u0642\u0637\u0629 name.Intersection= \u062a\u0642\u0627\u0637\u0639 name.OtherIntersection= \u062a\u0642\u0627\u0637\u0639 \u0622\u062e\u0631 name.Circle= \u062f\u0627\u0626\u0631\u0629 name.Circle3= \u062f\u0627\u0626\u0631\u0629 name.Segment= \u0642\u0637\u0639\u0629 \u0645\u0633\u062a\u0642\u064a\u0645\u0629 name.Ray= \u0646\u0635\u0641 \u0645\u0633\u062a\u0642\u064a\u0645 name.Line= \u0645\u0633\u062a\u0642\u064a\u0645 name.TwoPointLine= \u0645\u0633\u062a\u0642\u064a\u0645 \u0645\u0639\u064a\u0646 \u0628\u0646\u0642\u0637\u062a\u064a\u0646 name.Parallel= \u0645\u0648\u0627\u0632\u064a name.Midpoint= \u0645\u0646\u062a\u0635\u0641 \u0642\u0637\u0639\u0629 name.Quadric= \u0642\u0637\u0639 \u0645\u0643\u0627\u0641\u064a\u0621 name.Plumb= \u0639\u0645\u0648\u062f\u064a name.Angle= \u0632\u0627\u0648\u064a\u0629 name.PointOn= \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 name.Expression= \u0639\u0628\u0627\u0631\u0629 name.Polygon= \u0645\u0636\u0644\u0639 prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.angle==a(,,) prompt.area=A(,,) prompt.quadric=quadric(,,,,) prompt.function=function(,,,,,) name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=pl name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=p name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=poly name.short.Function=f popup.hidden= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0627\u0644\u0645\u062e\u0641\u064a\u0629 popup.replay= \u0625\u0639\u0627\u062f\u0629 \u0631\u0624\u064a\u0629 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 popup.empty= --- \u0645\u0627\u0643\u0631\u0648\u0627\u062a --- replay.title= \u0625\u0639\u0627\u062f\u0629 \u0631\u0624\u064a\u0629 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 reorder.title= \u062a\u0631\u062a\u064a\u0628 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a reorder.message = \u0631\u062a\u0628 \u0628\u0639\u062f reorder.notfound= \u0643\u0627\u0626\u0646 \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f reorder.warning= \u063a\u064a\u0631 \u0645\u0645\u0643\u0646 setgrid.title= \u0639\u0631\u0636 \u0627\u0644\u0634\u0628\u0643\u0629 setgrid.prompt= \u0623\u062f\u062e\u0644 \u0627\u0644\u0639\u0631\u0636 \u0627\u0644\u062c\u062f\u064a\u062f \u0644\u0644\u0634\u0628\u0643\u0629 setgrid.set= \u0646\u0639\u0645 definemacro.title= \u062a\u0639\u064a\u064a\u0646 \u0645\u0627\u0643\u0631\u0648 definemacro.name= \u062a\u0633\u0645\u064a\u0629 definemacro.comment= \u062a\u0639\u0644\u064a\u0642 \u0639\u0644\u0649 \u0627\u0644\u0645\u0627\u0643\u0631\u0648 definemacro.noparams= \u0643\u0627\u0626\u0646\u0627\u062a \u0625\u0628\u062a\u062f\u0627\u0626\u064a\u0629 \u0644\u0644\u0645\u0627\u0643\u0631\u0648 definemacro.nomacro= \u0644\u0627 \u062a\u0648\u062c\u062f \u0645\u0627\u0643\u0631\u0648 \u0644\u0644\u062a\u0646\u0641\u064a\u0630 definemacro.targetsonly= \u0625\u062e\u0641\u0627\u0621 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 definemacro.invisible= \u0625\u062e\u0641\u0627\u0621 \u0643\u0644\u064a definemacro.promptfor= \u0637\u0644\u0628 \u0642\u064a\u0645\u0629 macro.replace.title= \u0625\u0639\u0627\u062f\u0629 \u062a\u0633\u0645\u064a\u0629 \u0627\u0644\u0645\u0627\u0643\u0631\u0648 macro.replace= \u0625\u0639\u0627\u062f\u0629 \u062a\u0633\u0645\u064a\u0629 \u0627\u0644\u0645\u0627\u0643\u0631\u0648 macro.replace.all= \u0627\u0644\u0643\u0644 macro.usage= \u0625\u0633\u062a\u062e\u062f\u0627\u0645 \u062e\u0627\u0637\u064a\u0621 \u0644\u0644\u0645\u0627\u0643\u0631\u0648 - \u0623\u0646\u0638\u0631 \u0627\u0644\u062a\u0644\u0645\u064a\u062d\u0627\u062a macro.prompt.title= \u0648\u0633\u0627\u0626\u0637 macro.prompt.prompt= \u0623\u062f\u062e\u0644 \u0642\u064a\u0645\u0629 \u0644\u0644\u0648\u0633\u064a\u0637 macro.prompt.illegal= \u0642\u064a\u0645\u0629 \u0645\u0631\u0641\u0648\u0636\u0629 digits.title= \u0639\u062f\u062f \u0627\u0644\u0627\u0631\u0642\u0627\u0645 \u0627\u0644\u0639\u0634\u0631\u064a\u0629 \u0627\u0644\u0638\u0627\u0647\u0631\u0629 digits.edit= \u062a\u062d\u0631\u064a\u0631 digits.lengths= \u0625\u0638\u0647\u0627\u0631 digits.angles= \u0632\u0648\u0627\u064a\u0627 editrun.title= \u062a\u062d\u0631\u064a\u0631 \u0625\u0646\u0634\u0627\u0621 editrun.run= \u0625\u062d\u0641\u0638 \u0648 \u0646\u0641\u0630 editrun.load= \u0625\u0646\u0634\u0627\u0621\u0627\u062a \u0622\u062e\u0631\u0649 sure.title= \u0647\u0644 \u0623\u0646\u062a \u0645\u062a\u0623\u0643\u062f \u061f sure.macros= \u062d\u0630\u0641 \u0643\u0644 \u0627\u0644\u0645\u0627\u0643\u0631\u0648\u0627\u062a \u0627\u0644\u0634\u062e\u0635\u064a\u0629 \u061f sure.delete= \u0625\u0644\u063a\u0627\u0621 \u062d\u0641\u0638 \u0627\u0644\u062a\u063a\u064a\u0631\u0627\u062a \u0627\u0644\u062c\u062f\u064a\u062f\u0629 \u061f close.title= \u0646\u0647\u0627\u064a\u0629 close.prompt= \u0647\u0644 \u0623\u0646\u062a \u0645\u062a\u0623\u0643\u062f \u0645\u0646 \u0625\u0646\u0647\u0627\u0621 \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062c \u061f file.exists.title= \u0627\u0644\u0645\u0644\u0641 \u0645\u0648\u062c\u0648\u062f \u0645\u0633\u0628\u0642\u0627 file.exists.overwrite= \u0627\u0644\u0645\u0644\u0641 \u0645\u0648\u062c\u0648\u062f \u0645\u0633\u0628\u0642\u0627 . \u0627\u0644\u0643\u062a\u0627\u0628\u0629 \u0639\u0644\u064a\u0647\u061f - \u064a\u0639\u0646\u064a \u062d\u0630\u0641 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0623\u0635\u0644\u064a exception.nparams= \u0639\u062f\u062f \u0627\u0644\u0648\u0633\u0627\u0626\u0637 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644 exception.notfound= \u0643\u0627\u0626\u0646 \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f \u0623\u0648 \u0623\u0646\u0634\u0649\u0621 \u0628\u0639\u062f \u0627\u0644\u0639\u0628\u0627\u0631\u0629 exception.type= \u0643\u0627\u0626\u0646 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644 exception.expression= \u0639\u0628\u0627\u0631\u0629 \u063a\u064a\u0631 \u0635\u062d\u064a\u062d\u0629 exception.canfix= \u0643\u0627\u0626\u0646 \u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u062b\u0628\u064a\u062a\u0647 exception.fix= \u0642\u064a\u0645\u0629 \u063a\u064a\u0631 \u0635\u062d\u064a\u062d\u0629 exception.novalue= \u0642\u064a\u0645\u0629 \u063a\u064a\u0631 \u0635\u062d\u064a\u062d\u0629 exception.elementary= \u0639\u0646\u0635\u0631 \u063a\u064a\u0631 \u0635\u062d\u064a\u062d \u0641\u064a \u0627\u0644\u0639\u0628\u0627\u0631\u0629 exception.bracket= \u062a\u0646\u0642\u0635 \u0642\u0648\u0633 \u0641\u064a \u0627\u0644\u0639\u0628\u0627\u0631\u0629 exception.quotes= \u062a\u0646\u0642\u0635 \u0645\u0632\u062f\u0648\u062c\u0629 \u0641\u064a \u0627\u0644\u0639\u0628\u0627\u0631\u0629 exception.dot= \u0641\u0627\u0635\u0644\u062a\u064a\u0646 \u0639\u0634\u0631\u064a\u062a\u064a\u0646 \u0641\u064a \u0639\u062f\u062f exception.nodigit= \u0644\u0627 \u064a\u0648\u062c\u062f \u0631\u0642\u0645 \u0641\u064a \u0647\u0630\u0627 \u0627\u0644\u0639\u062f\u062f exception.function= \u062f\u0627\u0644\u0629 \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641\u0629 exception.parameter= \u0648\u0633\u0627\u0626\u0637 \u062f\u0627\u0644\u0629 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644\u0629 exception.macro= \u0648\u0633\u0627\u0626\u0637 \u0645\u0627\u0643\u0631\u0648 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644\u0629 exception.name= \u062a\u0646\u0642\u0635 \u062a\u0633\u0645\u064a\u0629 exception.job= \u0648\u0633\u0627\u0626\u0637 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644\u0629 exception.track= \u0648\u0633\u0627\u0626\u0637 \u0627\u0644\u0645\u062d\u0644 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644\u0629 exception.animate= \u0648\u0633\u0627\u0626\u0637 \u062d\u0631\u0643\u0629 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644\u0629 exception.boolean= false \u0623\u0648 true \u0642\u064a\u0645\u0629 \u0644\u0627 \u0628\u062f \u0623\u0646 \u062a\u0643\u0648\u0646 exception.value= \u0642\u064a\u0645\u0629 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644\u0629 exception.color= \u0644\u0648\u0646 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644 exception.colortype= \u0633\u0645\u0643 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644 exception.type= \u0646\u0645\u0637 \u0646\u0642\u0637\u0629 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644 exception.macroparameter= \u0643\u0627\u0626\u0646\u0627\u062a \u0625\u0628\u062a\u062f\u0627\u0626\u064a\u0629 \u0644\u0644\u0645\u0627\u0643\u0631\u0648 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644\u0629 exception.macrotarget= \u0643\u0627\u0626\u0646\u0627\u062a \u0646\u0647\u0627\u0626\u064a\u0629 \u0644\u0644\u0645\u0627\u0643\u0631\u0648 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644\u0629 exception.prompt= \u0637\u0644\u0628 \u0643\u0627\u0626\u0646 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644 exception.prompt.parameter= \u0637\u0644\u0628 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644 exception.parameters= \u0648\u0633\u064a\u0637 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644 exception.brackets= \u062e\u0637\u0623 \u0641\u064a \u0627\u0644\u0623\u0642\u0648\u0627\u0633 exception.double= \u062a\u0633\u0645\u064a\u0629 \u063a\u064a\u0631 \u0648\u062d\u064a\u062f\u0629 error.setaway= \u0647\u0630\u0647 \u0627\u0644\u0646\u0642\u0637\u0629 \u063a\u064a\u0631 \u0645\u0639\u0631\u0641\u0629 \u0642\u0628\u0644 \u0627\u0644\u062a\u0642\u0627\u0637\u0639 error.objecttracker.depends= \u0627\u0644\u0646\u0642\u0637\u0629 \u0645\u0631\u062a\u0628\u0637\u0629 \u0628\u0643\u0627\u0626\u0646 \u0622\u062e\u0631 constructiondisplay.title= \u0627\u0644\u0625\u0646\u0634\u0627\u0621 function.hide=hide function.hide.short=hide function.rename=name function.rename.short=name function.value=value function.value.short=value function.window=window function.window.short=W function.color=Color function.color.short=col function.thickness=thikness function.thickness.short=th function.type=Type function.type.short=type function.partial=Partial function.partial.short=part function.fill=Fill function.fill.short=fill function.back=Background function.back.short=back function.acute=Acute function.acute.short=acute function.obtuse=Obtuse function.obtuse.short=obtuse function.solid=Solid function.solid.short=solid function restrict=Restrict function restrict.short=restrict expression.value= \u0642\u064a\u0645\u0629 configure.title= \u0627\u0644\u0645\u0628\u062d\u0631 configure.prompt= \u0623\u062f\u062e\u0644 \u0637\u0644\u0628\u064a\u0629 \u0627\u0644\u0645\u0628\u062d\u0631 # New Resources: background.error= \u0639\u062f\u0645 \u0625\u0645\u0643\u0627\u0646\u064a\u0629 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0635\u0648\u0631\u0629 menu.background= \u0627\u0644\u062e\u0644\u0641\u064a\u0629 menu.background.grab= \u062d\u0641\u0638 \u0627\u0644\u0635\u0648\u0631\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629 \u0643\u062e\u0644\u0641\u064a\u0629 menu.background.clear= \u062d\u0630\u0641 \u0627\u0644\u062e\u0644\u0641\u064a\u0629 menu.background.load= \u062a\u062d\u0645\u064a\u0644 \u0635\u0648\u0631\u0629 \u062e\u0644\u0641\u064a\u0629 menu.background.usesize= \u062a\u0642\u0648\u064a\u0645 \u0627\u0644\u0623\u0628\u0639\u0627\u062f \u0644\u0644\u0635\u0648\u0631\u0629 menu.background.tile= \u0646\u0642\u0634 menu.background.center= \u062a\u0648\u0633\u064a\u0637 \u0627\u0644\u062e\u0644\u0641\u064a\u0629 iconhelp.grab= \u062a\u0639\u064a\u064a\u0646 \u0623\u0648 \u062d\u0630\u0641 \u0627\u0644\u062e\u0644\u0641\u064a\u0629 filedialog.backgroundload= \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u062e\u0644\u0641\u064a\u0629 filedialog.backgroundload.action= \u062a\u062d\u0645\u064a\u0644 # New Resources in Version 2.14 menu.file.compress= \u062f\u0627\u0626\u0645\u0627 \u0625\u0638\u063a\u0637 menu.file.savesvg= (SVG) \u062d\u0641\u0638 \u0627\u0644\u0635\u0648\u0631\u0629 \u0628\u062a\u0646\u0633\u064a\u0642 # Version 2.15 loading= .... \u062a\u062d\u0645\u064a\u0644 \u060c \u062a\u0631\u064a\u062b # Version 2.18 and 2.19 menu.settings.font.default= \u062e\u0637 \u0625\u0641\u062a\u0631\u0627\u0636\u064a menu.settings.font.bold= \u062e\u0637 \u0633\u0645\u064a\u0643 menu.settings.font.large= \u062e\u0637 \u0639\u0631\u064a\u0636 menu.file.saveeps= (EPS) \u062d\u0641\u0638 \u0627\u0644\u0635\u0648\u0631\u0629 \u0628\u062a\u0646\u0633\u064a\u0642 menu.fonts=Font # Version 2.20 bmpscaler.title= (Bmp) \u0636\u0639\u0647\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0644\u0645 bmpscaler.width= \u0627\u0644\u0639\u0631\u0636 bmpscaler.height= \u0627\u0644\u0625\u0631\u062a\u0641\u0627\u0639 bmpscaler.scale= \u0627\u0644\u0633\u0644\u0645 \u0625\u0638\u063a\u0637 \u0639\u0644\u0649 \u0632\u0631 \u0627\u0644\u0625\u062f\u062e\u0627\u0644 bmpscaler.illegal= \u0642\u064a\u0645\u0629 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644\u0629 # Version 2.21 renamemacro.title= \u0625\u0639\u0627\u062f\u0629 \u062a\u0633\u0645\u064a\u0629 \u0627\u0644\u0645\u0627\u0643\u0631\u0648 renamemacro.name= \u0625\u0633\u0645 \u062c\u062f\u064a\u062f \u0644\u0644\u0645\u0627\u0643\u0631\u0648 menu.special.renamemacro= \u0625\u0639\u0627\u062f\u0629 \u062a\u0633\u0645\u064a\u0629 \u0627\u0644\u0645\u0627\u0643\u0631\u0648 # Version 2.23 savequestion.title= \u062d\u0641\u0638 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 savequestion.qsave= \u062d\u0641\u0638 \u0627\u0644\u062a\u063a\u064a\u0631\u0627\u062a \u061f # Version 2.25 exception.printsize= \u0627\u0644\u0635\u0641\u062d\u0629 \u0623\u0642\u0644 \u0645\u0646 \u0647\u0630\u0627 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 iconhelp.nohelp= \u0645\u0633\u0627\u0639\u062f\u0629 \u063a\u064a\u0631 \u0645\u062a\u0648\u0641\u0631\u0629 iconhelp.type?= \u0646\u0645\u0637 \u0627\u0644\u0646\u0642\u0637\u0629 iconhelp.thickness?= \u0633\u0645\u0643 iconhelp.color?= \u0644\u0648\u0646 iconhelp.filled= \u0643\u0627\u0626\u0646 \u0645\u0644\u0648\u0646 iconhelp.isback= \u0631\u0633\u0645 \u0641\u064a \u0627\u0644\u062e\u0644\u0641\u064a\u0629 iconhelp.inverse= \u0632\u0627\u0648\u064a\u0629 \u0645\u0639\u0627\u0643\u0633\u0629 iconhelp.angle?= \u0642\u064a\u0633 # Version 2.28 message.objecttracker.stop= \u0645\u062d\u0644 \u0623\u0648\u062a\u0648\u0645\u0627\u062a\u064a\u0643\u064a : \u0623\u0646\u0642\u0631 \u0644\u0625\u064a\u0642\u0627\u0641\u0647\u0627 # Version 2.31 menu.settings.indicate= \u0645\u0639\u0627\u064a\u0646\u0629 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a menu.options.other= \u062e\u064a\u0627\u0631\u0627\u062a \u0645\u062a\u0642\u062f\u0645\u0629 menu.help.welcome= \u062c\u062f\u064a\u062f \u0647\u0630\u0627 \u0627\u0644\u0625\u0635\u062f\u0627\u0631 iconhelp.twolines= \u0634\u0631\u064a\u0637\u0627 \u0623\u062f\u0648\u0627\u062a iconhelp.qintersection= \u0637\u0644\u0628 \u0627\u0644\u062a\u0623\u0643\u064a\u062f \u0642\u0628\u0644 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u062a\u0642\u0627\u0637\u0639 iconhelp.qchoice= \u0625\u0638\u0647\u0627\u0631 \u0639\u0644\u0628\u0629 \u0627\u0644\u062d\u0648\u0627\u0631 \u0644\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a iconhelp.qpointon= \u0637\u0644\u0628 \u0627\u0644\u062a\u0623\u0643\u064a\u062f \u0642\u0628\u0644 \u0625\u0646\u0634\u0627\u0621 \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0643\u0627\u0626\u0646 iconhelp.noindicate= \u0639\u062f\u0645 \u0627\u0644\u0625\u0634\u0627\u0631\u0629 \u0625\u0644\u0649 \u0627\u0644\u0643\u0627\u0626\u0646 \u0639\u0646\u062f \u062a\u0645\u0631\u064a\u0631 \u0645\u0624\u0634\u0631 \u0627\u0644\u0641\u0623\u0631\u0629 \u0639\u0644\u064a\u0647 # Version 2.33 menu.file.new= (Ctrl-n) \u0625\u0646\u0634\u0627\u0621 \u062c\u062f\u064a\u062f # Version 2.34 edit.text.title= \u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0646\u0635 edit.text.settings= \u062e\u064a\u0627\u0631\u0627\u062a menu.settings.filedialog= \u0625\u0633\u062a\u0628\u062f\u0644 \u0639\u0644\u0628 \u062d\u0648\u0627\u0631 \u0627\u0644\u0646\u0638\u0627\u0645 # Version 2.35 menu.settings.bitmapbackground= \u0625\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u062e\u0644\u0641\u064a\u0629 \u0641\u064a \u0627\u0644\u0635\u0648\u0631 \u0627\u0644\u0646\u0642\u0637\u064a\u0629 # Version 2.36 menu.file.savegraphics= \u062d\u0641\u0638 \u0627\u0644\u0635\u0648\u0631 bmpscaler.title= \u0633\u0644\u0645 # Version 2.37 menu.file.savepdf= (as PDF) \u062d\u0641\u0638 \u0627\u0644\u0635\u0648\u0631\u0629 \u0628\u062a\u0646\u0633\u064a\u0642 iconhelp.chord= \u0645\u062b\u0644 \u0643\u0642\u0637\u0639\u0629 \u0645\u0633\u062a\u0642\u064a\u0645\u0629 # Version 2.39 message.setfixedangle.first= \u062a\u0639\u064a\u064a\u0646 \u0632\u0627\u0648\u064a\u0629 \u062b\u0627\u0628\u0629 :\u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 \u061f message.setfixedangle.second= \u062a\u0639\u064a\u064a\u0646 \u0632\u0627\u0648\u064a\u0629 \u062b\u0627\u0628\u062a\u0629 : \u0631\u0623\u0633 \u0627\u0644\u0632\u0627\u0648\u064a\u0629 \u061f message.setfixedangle.third= \u062a\u0639\u064a\u064a\u0646 \u0632\u0627\u0648\u064a\u0629 \u062b\u0627\u0628\u062a\u0629 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u062b\u0627\u0644\u062b\u0629 \u061f edit.fixedangle.set= \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0642\u064a\u0633 message.setfixedcircle.first= \u062b\u0628\u062a \u0646\u0635\u0641 \u0627\u0644\u0642\u0637\u0631 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 \u061f message.setfixedcircle.second= \u062b\u0628\u062a \u0646\u0635\u0641 \u0627\u0644\u0642\u0637\u0631 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u062b\u0627\u0646\u064a\u0629 \u061f edit.fixedcircle.set= \u062b\u0628\u062a \u0646\u0635\u0641 \u0627\u0644\u0642\u0637\u0631 # Version 2.40 minpointsize.title= \u062b\u0628\u062a \u0639\u0631\u0636 \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0623\u0635\u063a\u0631\u064a minpointsize.prompt= \u0639\u0631\u0636 \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0623\u0635\u063a\u0631\u064a \u0627\u0644\u0625\u0641\u062a\u0631\u0627\u0636\u064a 3 menu.settings.font.minpointsize= \u0639\u0631\u0636 \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0623\u0635\u063a\u0631\u064a # Version 2.41 name.short.Track=Tr text.track= \u0645\u062d\u0644 \u0627\u0644\u0643\u0627\u0626\u0646 \u0633 \u0639\u0646\u062f\u0645\u0627 \u0639 \u064a\u062a\u062d\u0631\u0643 \u0639\u0644\u0649 \u0627\u0644\u0643\u0627\u0626\u0646 \u0635 trackquestion.keep= \u062d\u0641\u0638 \u0627\u0644\u062d\u0631\u0643\u0629 \u0639\u0644\u0649 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 \u061f trackquestion.title= \u0625\u062d\u0641\u0638 \u0627\u0644\u062d\u0631\u0643\u0629 menu.options.track= \u062d\u0641\u0638 \u0627\u0644\u062d\u0631\u0643\u0629 \u0632\u0631 \u0634\u064a\u0641\u062a - \u0625\u062f\u062e\u0627\u0644 iconhelp.indicate= \u0645\u0639\u0627\u064a\u0646\u0629 \u0646\u062a\u0627\u0626\u062c \u0627\u0644\u0625\u0646\u0634\u0627\u0621 iconhelp.nohelp= \u0645\u0633\u0627\u0639\u062f\u0629 \u063a\u064a\u0631 \u0645\u062a\u0648\u0641\u0631\u0629 # Version 2.42 objects.draw= \u0627\u0644\u0631\u0633\u0645 \u0628\u0627\u0644\u0641\u0623\u0631\u0629 menu.options.cleardraw= (Esc) \u0645\u062d\u0648 (\u062d\u0630\u0641) \u0631\u0633\u0645 \u0627\u0644\u0641\u0623\u0631\u0629 iconhelp.draw= \u0627\u0644\u0631\u0633\u0645 \u0628\u0627\u0644\u0641\u0623\u0631\u0629 message.draw= \u0627\u0644\u0631\u0633\u0645 \u0628\u0627\u0644\u0641\u0623\u0631\u0629 shortcuts.draw=; # Version 2.43 message.rename= \u0625\u0639\u0627\u062f\u0629 \u0627\u0644\u062a\u0633\u0645\u064a\u0629 : \u062d\u062f\u062f \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a iconhelp.rename= \u0623\u0639\u0627\u062f\u0629 \u0627\u0644\u062a\u0633\u0645\u064a\u0629 objects.rename= \u0623\u0639\u0627\u062f\u0629 \u0627\u0644\u062a\u0633\u0645\u064a\u0629 shortcuts.rename=: iconhelp.anglereduce= \u0644\u0627 \u062a\u0638\u0647\u0631 \u0636\u0644\u0639 \u0627\u0644\u0632\u0627\u0648\u064a\u0629 # Version 2.45 menu.settings.smartboard= \u0646\u0645\u0637 \u0634\u0631\u064a\u0637 \u0627\u0644\u0623\u062f\u0648\u0627\u062a \u0645\u0628\u0633\u0637 shortcuts.zoom=% objects.zoom= \u062a\u0643\u0628\u064a\u0631 \u0648 \u062a\u0635\u063a\u064a\u0631 \u0628\u0627\u0644\u0641\u0623\u0631\u0629 message.zoom= \u062a\u062d\u0631\u064a\u0643 \u0627\u0644\u0645\u0631\u0643\u0632 \u0623\u0648 \u062a\u0643\u0628\u064a\u0631 \u0648 \u062a\u0635\u063a\u064a\u0631 # Version 2.46 menu.special.restricticons= \u0634\u0631\u064a\u0637 \u0623\u062f\u0648\u0627\u062a \u0645\u0628\u0633\u0637 # Version 2.47 menu.settings.indicate.simple= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0646\u0642\u0637 \u0641\u0642\u0637 \u0623\u062b\u0646\u0627\u0621 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 menu.settings.beginner= \u0646\u0645\u0637 \u0627\u0644\u0645\u0628\u062a\u062f\u0623 question.again= \u062f\u0627\u0626\u0645\u0627 \u0625\u0637\u0631\u062d \u0627\u0644\u0633\u0624\u0627\u0644 # Version 2.49 definemacro.parameters= \u0648\u0633\u0627\u0626\u0637 \u0627\u0644\u0637\u0644\u0628\u064a\u0629 # Version 2.53 menu.actions.angles= \u0632\u0648\u0627\u064a\u0627 menu.actions.circles= \u062f\u0648\u0627\u0626\u0631 menu.actions.lines= \u0645\u0633\u062a\u0642\u064a\u0645\u0627\u062a menu.actions.points= \u0646\u0642\u0637 # Version 3.00 info.title= \u0645\u0633\u0627\u0639\u062f\u0629 \u0641\u064a \u0633\u064a\u0627\u0642 \u0627\u0644\u0639\u0645\u0644 info.related= \u0645\u0648\u0627\u0636\u064a\u0639 \u0645\u0631\u062a\u0628\u0637\u0629 info.notfound= \u0645\u0648\u0636\u0648\u0639 \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f info.noresults= \u0643\u0644\u0645\u0629 \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f\u0629 info.searchresults=- \u0646\u062a\u0627\u0626\u062c \u0627\u0644\u0628\u062d\u062b - info.select=- \u062a\u062d\u062f\u064a\u062f - info.search= \u0628\u062d\u062b info.back= \u0644\u0644\u062e\u0644\u0641 info.start= \u0628\u062f\u0627\u064a\u0629 iconhelp.info= \u0645\u0633\u0627\u0639\u062f\u0629 \u0641\u064a \u0633\u064a\u0627\u0642 \u0627\u0644\u0639\u0645\u0644 menu.help.info= \u0645\u0633\u0627\u0639\u062f\u0629 \u0641\u064a \u0633\u064a\u0627\u0642 \u0627\u0644\u0639\u0645\u0644 myfiledialog.homedir=CaR \u0645\u0644\u0641\u0627\u062a myfiledialog.windowshome= \u0645\u062c\u0644\u062f \u0627\u0644\u0645\u0644\u0641\u0627\u062a \u0627\u0644\u0634\u062e\u0635\u064a\u0629 myfiledialog.mkdir= \u0625\u0646\u0634\u0627\u0621 \u0645\u062c\u0644\u062f myfiledialog.back= \u0644\u0644\u062e\u0644\u0641 menu.file.alwaysclearmacros= \u062d\u0630\u0641 \u0627\u0644\u0645\u0627\u0643\u0631\u0648\u0627\u062a \u0642\u0628\u0644 \u0627\u0644\u062a\u062d\u0645\u064a\u0644 about.language= \u0627\u0644\u0639\u0631\u0628\u064a\u0629 bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups= \u0623\u0631\u0634\u0641\u0629 # Version 3.02 menu.options.hideduplicates= \u0625\u062e\u0641\u0627\u0621 \u0627\u0644\u0643\u0627\u0626\u0646 \u0627\u0644\u0645\u0636\u0627\u0639\u0641 # Version 3.03 menu.options.function= \u062f\u0627\u0644\u0629 text.function=Function ( % , % ) function.varmin= \u0623\u0635\u063a\u0631 \u0642\u064a\u0645\u0629 \u0644\u0644\u0645\u062a\u063a\u064a\u0631 function.varmax= \u0623\u0643\u0628\u0631 \u0642\u064a\u0645\u0629 \u0644\u0644\u0645\u062a\u063a\u064a\u0631 function.dvar= \u0627\u0644\u062e\u0637\u0648\u0629 function.var= \u0627\u0644\u062d\u0631\u0641 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0644\u0644\u0645\u062a\u063a\u064a\u0631 function.x=X function.y=Y iconhelp.function= \u0643\u062a\u0627\u0628\u0629 \u062f\u0627\u0644\u0629 menu.options.editlast= \u062a\u062d\u0631\u064a\u0631 \u0622\u062e\u0631 \u0643\u0627\u0626\u0646 iconhelp.control.edit= \u062a\u062d\u0631\u064a\u0631 \u0622\u062e\u0631 \u0643\u0627\u0626\u0646 iconhelp.control.hide= \u0625\u062e\u0641\u0627\u0621 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0627\u0644\u0645\u0636\u0627\u0639\u0641\u0629 edit.function.title= \u062f\u0627\u0644\u0629 \u0623\u0648 \u0645\u0646\u062d\u0646\u064a \u0648\u0633\u064a\u0637\u064a iconhelp.control.runmacro= \u062a\u0646\u0641\u064a\u0630 \u0622\u062e\u0631 \u0645\u0627\u0643\u0631\u0648 \u0645\u0631\u0629 \u0623\u062e\u0631\u0649 # Version 3.05 point.type.cross= \u0631\u0645\u0632 \u0627\u0644\u062c\u0645\u0639 point.type.dcross= \u0631\u0645\u0632 \u0627\u0644\u062c\u062f\u0627\u0621 shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit= \u0627\u0644\u0648\u062d\u062f\u0629 menu.special.break= \u0646\u0642\u0637 \u0627\u0644\u062a\u0648\u0642\u0641 menu.bp.setbreak= \u062a\u0639\u064a\u064a\u0646 \u0646\u0642\u0637\u0629 \u062a\u0648\u0642\u0641 menu.bp.clearbreak= \u062d\u0630\u0641 \u0646\u0642\u0637\u0629 \u0627\u0644\u062a\u0648\u0642\u0641 menu.bp.sethidingbreak= \u062a\u0639\u064a\u064a\u0646 \u0646\u0642\u0637 \u062a\u0648\u0642\u0641 \u0645\u062e\u0641\u064a\u0629 menu.bp.animatebreak= \u062d\u0631\u0643\u0629 \u0646\u0642\u0637 \u0627\u0644\u062a\u0648\u0642\u0641 iconhelp.animatebreak= \u062d\u0631\u0643\u0629 \u0646\u0642\u0637 \u0627\u0644\u062a\u0648\u0642\u0641 message.animatebreak= \u062d\u0631\u0643\u0629 \u0646\u0642\u0637 \u0627\u0644\u062a\u0648\u0642\u0641 : \u0623\u0646\u0642\u0631 \u0644\u0644\u0648\u0642\u0641 \u0627\u0644\u062d\u0631\u0643\u0629 - \u0632\u0631 \u0634\u064a\u0641\u062a \u064a\u0645\u064a\u0646 \u062a\u0633\u0631\u064a\u0639 \u064a\u0633\u0627\u0631 \u062a\u0628\u0637\u064a\u0621 menu.special.exporttemplate= \u062a\u0635\u062f\u064a\u0631 \u0628\u062a\u0646\u0633\u064a\u0642 \u0648\u0627\u0628 \u0648\u0641\u0642 \u0623\u0646\u0645\u0648\u0630\u062c templateload.open= Template \u062a\u062d\u0645\u064a\u0644 \u0623\u0646\u0645\u0648\u0630\u062c templateload.open.action= \u0641\u062a\u062d menu.settings.doubleclick= \u0623\u0646\u0642\u0631 \u0645\u0631\u062a\u064a\u0646 \u0644\u0644\u0645\u0627\u0643\u0631\u0648 export.codebase=Codebase # Version 3.12 edit.equation= \u0645\u0639\u0627\u062f\u0644\u0629 # Version 3.23 menu.settings.squarepoints= \u0634\u0643\u0644 \u0627\u0644\u0646\u0642\u0637 \u0645\u0631\u0628\u0639\u0627\u062a # Version 3.37 menu.options.export= \u062e\u064a\u0627\u0631\u0627\u062a \u062a\u0635\u062f\u064a\u0631 \u0627\u0644\u0635\u0648\u0631\u0629 menu.settings.minwidth= \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u062e\u0637 1 menu.settings.minpointsize= \u062d\u0641\u0638 \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u0646\u0642\u0637\u0629 menu.settings.minfontsize= \u062d\u0641\u0638 \u0627\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u062e\u0637 minfontsize.title= \u062a\u0639\u064a\u064a\u0646 \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u062e\u0637 minfontsize.prompt= \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u062e\u0637 12 menu.options.minpointsize= \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u0646\u0642\u0637\u0629 menu.options.minfontsize= \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u062e\u0637 # Version 3.38 menu.settings.scalepdf= PDF \u060c EPS \u062a\u0635\u062f\u064a\u0631 \u0628\u0633\u0644\u0645 1:1 \u0644\u0643\u0644 \u0645\u0646 # Version 3.41 menu.file.clip= \u0642\u0635 \u0627\u0644\u0635\u0648\u0631\u0629 \u0627\u0644\u0645\u0635\u062f\u0631\u0629 clip.title= \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0642\u0635\u0627\u0635\u0629 clip.width= \u0639\u0631\u0636 clip.height= \u0625\u0631\u062a\u0641\u0627\u0639 clip.screen= \u0644\u0627 \u062a\u0642\u0635 # Version 3.42 menu.options.arrowsize= \u0639\u0631\u0636 \u0627\u0644\u0633\u0647\u0645 arrowsize.title= \u0639\u0631\u0636 \u0627\u0644\u0633\u0647\u0645 # Version 3.44 iconhelp.large= \u062e\u0637 \u0639\u0631\u064a\u0636 iconhelp.bold= \u062e\u0637 \u0633\u0645\u064a\u0643 menu.options.largefont= \u062e\u0637 \u0639\u0631\u064a\u0636 menu.options.boldfont= \u062e\u0637 \u0633\u0645\u064a\u0643 warning.previewframe= \u0647\u0630\u0627 \u0627\u0644\u062c\u0632\u0621 \u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0646\u0627\u0641\u0630\u0629 message.move.select= \u062d\u0631\u0643 \u0627\u0644\u0646\u0642\u0637\u0629 # Version 3.46 iconbar.showseparators= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0641\u0627\u0635\u0644 # Version 3.48 menu.sizes= \u0627\u0644\u0623\u0628\u0639\u0627\u062f menu.options.minlinesize= \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u062e\u0637 minlinesize.title= \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u062e\u0637 minlinesize.prompt= \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u062e\u0637 \u0625\u0641\u062a\u0631\u0627\u0636\u064a 1 arrowsize.prompt= \u0639\u0631\u0636 \u0627\u0644\u0633\u0647\u0645 \u0625\u0641\u062a\u0631\u0627\u0636\u064a 10 menu.options.printscaler= \u0623\u0628\u0639\u0627\u062f \u0627\u0644\u062a\u0635\u062f\u064a\u0631 menu.options.exportsettings= \u062e\u064a\u0627\u0631\u0627\u062a \u062a\u0635\u062f\u064a\u0631 \u062e\u0627\u0635\u0629 printscaler.title= \u0623\u0628\u0639\u0627\u062f \u0627\u0644\u062a\u0635\u062f\u064a\u0631 printscaler.width= (cm) \u0648\u062d\u062f\u0629 \u0627\u0644\u0639\u0631\u0636 printscaler.height= (cm) \u0648\u062d\u062f\u0629 \u0627\u0644\u0625\u0631\u062a\u0641\u0627\u0639 printscaler.dpi= \u0627\u0644\u062f\u0642\u0629 \u0646\u0642\u0637 \u0639\u0644\u0649 \u0627\u0644\u0628\u0648\u0635\u0629 \u0625\u0641\u062a\u0631\u0627\u0636\u064a 300 printscaler.linewidth= \u0639\u0631\u0636 \u0627\u0644\u062e\u0637 \u0628\u0627\u0644\u0633\u0646\u062a\u0645\u062a\u0631 \u0625\u0641\u062a\u0631\u0627\u0636\u064a 0.02 printscaler.pointsize= \u0627\u0628\u0639\u0627\u062f \u0627\u0644\u0646\u0642\u0637\u0629 \u0628\u0627\u0644\u0633\u0646\u062a\u0645\u062a\u0631 \u0625\u0641\u062a\u0631\u0627\u0636\u064a 0.07 printscaler.textsize= \u0628\u0639\u062f \u0627\u0644\u0646\u0635 \u0628\u0627\u0644\u0633\u0646\u062a\u0645\u062a\u0631 \u0625\u0641\u062a\u0631\u0627\u0636\u064a 0.03 # Version 3.49 printscaler.screen=300 DPI printscaler.w= (pixel) \u0639\u0631\u0636 printscaler.h= (pixel) \u0625\u0631\u062a\u0641\u0627\u0639 printscaler.scale= \u0633\u0644\u0645 \u0646\u0633\u0628\u0629 \u0639\u0644\u0649 \u0627\u0644\u0634\u0627\u0634\u0629 printscaler.middle=Cut out (do not rescale) printscaler.sizes= \u0623\u0628\u0639\u0627\u062f \u0627\u0644\u062e\u0637\u0648\u0637 \u060c\u0627\u0644\u0646\u0642\u0637 menu.file.savepng= PNG \u062d\u0641\u0638 \u0627\u0644\u0635\u0648\u0631\u0629 \u0628\u062a\u0646\u0633\u064a\u0642 warning.preview= \u0627\u0644\u0645\u0639\u0627\u064a\u0646\u0629 \u063a\u064a\u0631 \u0645\u0645\u0643\u0646\u0629 \u0628 \u062c\u0627\u0641\u0627 1.1 iconedit.showseparators= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0641\u0627\u0635\u0644 printscaler.aspect= \u0625\u062d\u0641\u0638 \u0627\u0644\u0646\u0633\u0628\u0629 printscaler.presets= \u0636\u0628\u0637 \u0627\u0644\u0633\u0644\u0645 printscaler.preset= \u0625\u062e\u062a\u064a\u0627\u0631 printscaler.preset.300dpi= \u0628\u0627\u0644\u0636\u0628\u0637 300 \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0627\u0644\u0628\u0648\u0635\u0629 printscaler.preset.300dpi6= \u0633\u062a\u0629 \u0633\u0646\u062a\u0645\u062a\u0631 \u0639\u0631\u0636 \u0641\u064a\u0647\u0627 300 \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0627\u0644\u0628\u0648\u0635\u0629 printscaler.preset.300dpi16= \u0633\u062a\u0629 \u0639\u0634\u0631 \u0633\u0646\u062a\u064a\u0645\u062a\u0631 \u0639\u0631\u0636 printscaler.preset.window= \u0623\u0628\u0639\u0627\u062f \u0627\u0644\u0646\u0627\u0641\u0630\u0629 printscaler.preset.clip50= \u0646\u0635\u0641 \u0627\u0644\u0646\u0627\u0641\u0630\u0629 \u0638\u0627\u0647\u0631 message.saving= \u0625\u0646\u062a\u0638\u0631 \u0645\u0646 \u0641\u0636\u0644\u0643 menu.options.printscalepreview= \u062a\u0635\u062f\u064a\u0631 date=Build # Version 3.51 help= \u0645\u0633\u0627\u0639\u062f\u0629 # Version 3.61 editconditionals.title= \u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0634\u0631\u0648\u0637 editconditionals.hidden= \u0645\u062e\u0641\u064a editconditionals.superhidden= \u0645\u062e\u0641\u064a \u0643\u0644\u064a\u0627 editconditionals.visible= \u0639\u0627\u062f\u064a editconditionals.showname= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u062a\u0633\u0645\u064a\u0629 editconditionals.showvalue= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0642\u064a\u0645\u0629 editconditionals.background= \u062e\u0644\u0641\u064a\u0629 editconditionals.solid= \u063a\u064a\u0631 \u0634\u0641\u0627\u0641 exception.superfluous= \u0646\u0635 \u063a\u0627\u0645\u0636 \u0641\u064a \u0627\u0644\u0639\u0628\u0627\u0631\u0629 # Version 3.62 menu.options.selectionsize= \u062a\u0639\u064a\u064a\u0646 \u0639\u0631\u0636 \u0627\u0644\u062a\u062d\u062f\u064a\u062f selectionsize.title= \u0639\u0631\u0636 \u0627\u0644\u062a\u062d\u062f\u064a\u062f selectionsize.prompt= \u0639\u0631\u0636 \u0627\u0644\u062a\u062d\u062f\u064a\u062f \u0625\u0641\u062a\u0631\u0627\u0636\u064a 1.5 # Version 3.63 select.comment.title= \u062a\u0639\u0644\u064a\u0642 \u0639\u0644\u0649 \u0627\u0644\u0645\u0627\u0643\u0631\u0648 # Version 3.68 edit.area.area= \u0645\u0633\u0627\u062d\u0629 # Version 3.73 myfiledialog.oldfiles= \u0645\u0644\u0641\u0627\u062a \u0642\u062f\u064a\u0645\u0629 # Version 3.74 iconhelp.load= (Ctrl-o) \u062a\u062d\u0645\u064a\u0644 \u0625\u0646\u0634\u0627\u0621 iconhelp.save= (Ctrl-s) \u062d\u0641\u0638 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 iconhelp.new= (Ctrl-n) \u0625\u0646\u0634\u0627\u0621 \u062c\u062f\u064a\u062f # Version 3.81 warning.loadbackground= \u062e\u0637\u0623 \u0639\u0646\u062f \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u062e\u0644\u0641\u064a\u0629 # Version 3.9 function.x= \u062a\u0643\u0648\u0646 \u0641\u0627\u0631\u063a\u0629 \u0645\u0646 \u0623\u062c\u0644 \u062f\u0627\u0644\u0629 \u0625\u0644\u0627 \u0641\u064a \u062d\u0627\u0644\u0629 \u0645\u0646\u062d\u0646\u064a \u0648\u0633\u064a\u0637\u064a X \u0639\u0628\u0627\u0631\u0629 # Version 3.91 constructiondisplay.select= \u062a\u062d\u062f\u064a\u062f constructiondisplay.all= \u0643\u0644 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a constructiondisplay.visible= \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u063a\u064a\u0631 \u0627\u0644\u0645\u062e\u0641\u064a\u0629 constructiondisplay.points= \u0627\u0644\u0646\u0642\u0637 constructiondisplay.lines= \u0627\u0644\u0645\u0633\u062a\u0642\u064a\u0645\u0627\u062a constructiondisplay.circles= \u0627\u0644\u062f\u0648\u0627\u0626\u0631 constructiondisplay.angles= \u0627\u0644\u0632\u0648\u0627\u064a\u0627 constructiondisplay.other= \u0643\u0627\u0626\u0646\u0627\u062a \u0623\u062e\u0631\u0649 menu.file.copypng= \u0646\u0633\u062e \u0625\u0644\u0649 \u0627\u0644\u062d\u0627\u0641\u0638\u0629 exception.clipboardcopy= \u0625\u062e\u0641\u0627\u0642 \u0641\u064a \u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u0646\u0633\u062e menu.options.finegrid= \u0627\u0644\u0645\u062d\u0627\u0648\u0631 \u0641\u0642\u0637 # Vesion 3.93 edit.function.center= \u0627\u0644\u0645\u0631\u0643\u0632 edit.function.free= \u062a\u0633\u0631\u064a\u062d \u0627\u0644\u0645\u0631\u0643\u0632 message.setcenter= \u062d\u062f\u062f \u0627\u0644\u0645\u0631\u0643\u0632 # Vesion 3.94 message.edit= \u062a\u062d\u0631\u064a\u0631 : \u0643\u0627\u0626\u0646 \u061f - \u0627\u0644\u0632\u0631 \u0634\u064a\u0641\u062a \u0643\u0627\u0626\u0646\u0627\u062a \u0623\u062e\u0631\u0649 - \u0627\u0644\u0632\u0631 \u0643\u0646\u062a\u0631\u0644 \u0627\u0644\u0634\u0631\u0648\u0637 # Version 3.97 error.image= \u0627\u0644\u0635\u0648\u0631\u0629 \u0644\u064a\u0633\u062a \u0641\u064a \u0646\u0641\u0633 \u0645\u062c\u0644\u062f \u0627\u0644\u0625\u0646\u0634\u0627\u0621 filedialog.imageload= \u062a\u062d\u0645\u064a\u0644 \u0635\u0648\u0631\u0629 filedialog.imageload.action= \u062a\u062d\u0645\u064a\u0644 prompt.image= \u0635\u0648\u0631\u0629 ... objects.image= \u0635\u0648\u0631\u0629 shortcuts.image=_ # Version 3.98 exception.depends= \u0627\u0644\u0643\u0627\u0626\u0646 \u0627\u0644\u0645\u0631\u062a\u0628\u0637 \u0628\u0647\u0630\u0627 \u0627\u0644\u0643\u0627\u0626\u0646 error.depends= \u0627\u0644\u0643\u0627\u0626\u0646 \u0627\u0644\u0645\u0631\u062a\u0628\u0637 \u0628\u0647\u0630\u0627 \u0627\u0644\u0643\u0627\u0626\u0646 constructiondisplay.sorted= \u062a\u0631\u062a\u064a\u0628 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0628\u062d\u0633\u0628 \u0625\u0646\u0634\u0627\u0626\u0647\u0627 # Version 3.99 edit.alias= \u0625\u0633\u0645 \u0645\u0633\u062a\u0639\u0627\u0631 constructiondisplay.expressions= \u0639\u0628\u0627\u0631\u0627\u062a # Version 4.00 iconhelp.image= \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0635\u0648\u0631\u0629 message.image= \u0646\u0642\u0637\u0629 \u062a\u062b\u0628\u064a\u062a \u0627\u0644\u0635\u0648\u0631\u0629 message.image.last= \u0622\u062e\u0631 \u0646\u0642\u0637\u0629 \u062a\u062b\u0628\u064a\u062a \u0627\u0644\u0635\u0648\u0631\u0629 editconditionals.z=Z-Buffer Value # Version 4.01 name.FixedAngle= \u0632\u0627\u0648\u064a\u0629 \u062b\u0627\u0628\u062a\u0629 # Version 4.04 menu.moresettings= \u062e\u064a\u0627\u0631\u0627\u062a \u0645\u062a\u0642\u062f\u0645\u0629 menu.settings.language= \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0644\u063a\u0629 language.title= \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0644\u063a\u0629 language.prompt= \u0644\u063a\u0629 \u0627\u0644\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0642\u0627\u062f\u0645 \u0644\u0644\u062a\u0637\u0628\u064a\u0642 # Version 4.05 constructiondisplay.invalid= \u0643\u0627\u0626\u0646\u0627\u062a \u063a\u064a\u0631 \u0645\u0644\u0627\u0626\u0645\u0629 # Version 4.08 menu.settings.constructiondisplay= (F11) \u0638\u0647\u0648\u0631 \u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 # Version 4.09 constructiondisplay.editconditions= \u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0634\u0631\u0648\u0637 constructiondisplay.delete= \u062d\u0630\u0641 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0627\u0644\u0645\u062d\u062f\u062f\u0629 constructiondisplay.hide= \u0625\u0638\u0647\u0627\u0631 \u0623\u0648 \u0625\u062e\u0641\u0627\u0621 constructiondisplay.superhide= \u0625\u062e\u0641\u0627\u0621 \u062a\u0627\u0645 # Version 4.2 edit.expression.slider= \u0625\u0638\u0647\u0627\u0631 \u0632\u0631 \u0627\u0644\u062a\u062d\u0643\u0645 menu.grid.options= \u062e\u064a\u0627\u0631\u0627\u062a \u0627\u0644\u0634\u0628\u0643\u0629 menu.options.leftsnap= \u062e\u0637\u0641 \u0627\u0648 \u0646\u0632\u0639 \u0628\u0632\u0631 \u0627\u0644\u0641\u0623\u0631\u0629 \u0627\u0644\u0623\u064a\u0633\u0631 menu.settings.boundingbox= (bb) \u0625\u0646\u0634\u0627\u0621 \u0639\u0644\u0628\u0629 \u0645\u0631\u062a\u0628\u0637\u0629 # Version 4.3 latexsettings.title= LATEX \u062a\u0635\u062f\u064a\u0631 \u0625\u0644\u0649 \u0644\u0627\u062a\u0643\u0633 latexsettings.boundingbox= (bb) \u0625\u0646\u0634\u0627\u0621 \u0639\u0644\u0628\u0629 \u0645\u0631\u062a\u0628\u0637\u0629 latexsettings.latexinput= LATEX \u0625\u0646\u0634\u0627\u0621 \u0645\u0644\u0641 \u0644\u0627\u062a\u0643\u0633 latexsettings.doubledollar= LATEX $$.. \u0644\u0627\u062a\u0643\u0633 \u064a\u0642\u0648\u0645 \u0628 $$ latexsettings.dollar= LATEX $...$ \u0644\u0627\u062a\u0643\u0633 \u064a\u0642\u0648\u0645 \u0628 latexsettings.nodollar= \u0644\u0627\u062a\u0643\u0633 \u064a\u0642\u0648\u0645 \u0628\u0643\u0644 \u0627\u0644\u0643\u0644\u0645\u0627\u062a \u0627\u0644\u0627\u062e\u0631\u0649 latexsettings.fullpath= \u0625\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u0645\u0633\u0627\u0631 \u0627\u0644\u0643\u0644\u064a \u0644\u0644\u0645\u0644\u0641 printscaler.preset.latex10= \u0644\u0627\u062a\u0643\u0633 \u0628 10 \u0646\u0642\u0637 printscaler.preset.300dpi12= \u062b\u0644\u0627\u062b\u0629 \u0645\u0626\u0629 \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0625\u062b\u0646\u064a \u0639\u0634\u0631 \u0633\u0646\u062a\u064a\u0645\u062a\u0631 \u0639\u0631\u0636 printscaler.latex= LaTeX \u0625\u062d\u0641\u0638 \u0644\u0644\u0627\u062a\u0643\u0633 menu.background.usewidth= \u062a\u0633\u0648\u064a\u0629 \u0627\u0644\u0625\u0631\u062a\u0641\u0627\u0639 \u0641\u0642\u0637 # Version 4.4 menu.options.restricted= \u062a\u0642\u0627\u0637\u0639 menu.options.sizes= \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0623\u0628\u0639\u0627\u062f sizesdialog.title= \u0623\u0628\u0639\u0627\u062f minlinesize.prompt= \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u0645\u0646\u062d\u0646\u064a\u0627\u062a - \u0625\u0641\u062a\u0631\u0627\u0636\u064a 1 minpointsize.prompt= \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u0646\u0642\u0637\u0629 - \u0625\u0641\u062a\u0631\u0627\u0636\u064a 1.5 minfontsize.prompt= \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u062e\u0637 - \u0625\u0641\u062a\u0631\u0627\u0636\u064a 12 arrowsize.prompt= \u0639\u0631\u0636 \u0627\u0644\u0633\u0647\u0645 - \u0625\u0641\u062a\u0631\u0627\u0636\u064a 10 selectionsize.prompt= \u0623\u0628\u0639\u0627\u062f \u0627\u0644\u062a\u062d\u062f\u064a\u062f - \u0625\u0641\u062a\u0631\u0627\u0636\u064a 1.5 warning.loadmacros= \u062e\u0637\u0623 \u0639\u0646\u062f \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0627\u0643\u0631\u0648 warning.macrodefinition= \u0647\u0630\u0627 \u0627\u0644\u0643\u0627\u0626\u0646 \u0645\u0633\u062a\u062e\u062f\u0645 \u0644\u0643\u0646\u0647 \u063a\u064a\u0631 \u0645\u0639\u0631\u0641 \u0641\u064a \u0627\u0644\u0645\u0627\u0643\u0631\u0648 edit.circle.bounds= \u0623\u0642\u0648\u0627\u0633 \u0641\u0642\u0637 edit.circle.range= \u0623\u0642\u0648\u0627\u0633 # Version 4.5 edit.track.dmin= \u0623\u0635\u063a\u0631 \u062e\u0637\u0648\u0629 - \u0625\u0641\u062a\u0631\u0627\u0636\u064a 0.001 # Version 4.6 menu.settings.smallicons= \u0625\u0633\u062a\u062e\u062f\u0645 \u0623\u064a\u0642\u0648\u0646\u0627\u062a \u0635\u063a\u064a\u0631\u0629 menu.settings.oldicons= \u0625\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0623\u064a\u0642\u0648\u0646\u0627\u062a \u0627\u0644\u0642\u062f\u064a\u0645\u0629 # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof= \u0645\u062d\u0644 \u0643\u0627\u0626\u0646 \u0633 \u0639\u0646\u062f \u062a\u063a\u064a\u0631 \u0627\u0644\u0643\u0627\u0626\u0646 \u0639 # Version 5 # Fix error.image edit.discrete= \u0645\u062a\u0642\u0637\u0639 error.fixedsegment= \u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u062b\u0628\u064a\u062a \u0647\u0630\u0647 \u0627\u0644\u0642\u0637\u0639\u0629 export.zoom= \u062a\u0643\u0628\u064a\u0631 \u0648 \u062a\u0635\u063a\u064a\u0631 \u0628\u0627\u0644\u0641\u0623\u0631\u0629 export.popup= \u0642\u0627\u0626\u0645\u0629 \u0645\u0646\u0633\u062f\u0644\u0629 \u062d\u0633\u0628 \u0627\u0644\u0633\u064a\u0627\u0642 - \u0628\u0632\u0631 \u0627\u0644\u0641\u0623\u0631\u0629 \u0627\u0644\u0623\u064a\u0645\u0646 # Version 5.1 edit.intersection.alternate= \u064a\u0645\u0643\u0646 \u0627\u0644\u062a\u0628\u062f\u064a\u0644 export.restrictedmove= \u062d\u0631\u0643\u0627\u062a \u0645\u062d\u062f\u0648\u062f\u0629 #Version 5.3 #Fix message.boundedpoint message.bindpoint=\u062a\u062b\u0628\u064a\u062a \u0627\u0644\u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0627\u0644\u0643\u0627\u0626\u0646 edit.point.inside=\u062f\u0627\u062e\u0644 \u0627\u0644\u0643\u0627\u0626\u0646 edit.point.increment=\u062a\u0648\u0633\u064a\u0639 \u0627\u0644\u0634\u0628\u0643\u0629 edit.more= \u0623\u0643\u062b\u0631 menu.settings.more= \u0625\u0638\u0647\u0627\u0631 \u0632\u0631 \u0627\u0644\u062a\u0646\u0633\u064a\u0642 \u0627\u0644\u0634\u0631\u0637\u064a menu.file.loadexamples= \u062a\u062d\u0645\u064a\u0644 \u0623\u0645\u062b\u0644\u0629 menu.options.editgrid= \u062a\u062d\u0631\u064a\u0631 \u0634\u0628\u0643\u0629 \u0627\u0644\u0625\u062d\u062f\u0627\u062b\u064a\u0627\u062a ./src/rene/zirkel/docs/CVS/RevisionCache/ZirkelProperties_pt.properties#1.10000644000175000017500000010775411144764476025553 0ustar yvesyveslanguage=pt_ version=Verso homefile=index.html homepage=http://www.ntegravatai.relrs.g12.br/progr/ReC/ about.title=Sobre o R&C about.name=Geometria Escolar about.programmed=Programado por title=Geometria Escolar close=Fechar ok=OK cancel=Cancelar done=Feito! message=Mensagem yes=Sim no=No abort=Cancela true=verdadeiro false=falso warning.nojob=Isto no um exerccio! warning.print=Falha na impresso! warning.reset=Opo vlida ao reiniciar o programa! question.title=Pergunta question.intersection=Criar essa interseco? question.pointon=Criar ponto neste objeto? colors.black=Preto colors.blue=Azul colors.green=Verde colors.brown=Marrom colors.cyan=Ciano colors.red=Vermelho objects.point=Ponto objects.segment=Segmento objects.line=Reta objects.ray=Semi-Reta objects.circle=Crculo objects.intersection=Interseco objects.move=Mover Ponto objects.hide=Ocultar Objeto objects.edit=Editar Ponto objects.tracker=Rastrear Ponto ou Reta objects.objecttracker=Rastrear Ponto ou Reta sobre Objeto objects.parallel=Reta Paralela objects.plumb=Reta Perpendicular objects.circle3=Compasso objects.midpoint=Ponto Mdio objects.quadric=Cnica objects.angle=ngulo objects.boundedpoint=Ponto sobre Objeto objects.parameter=Definir Parmetros de Macro objects.targets=Definir Alvos de Macro objects.definejob=Definir Exerccios objects.runmacro=Rodar uma Macro objects.delete=Eliminar Objetos objects.reorder=Enviar Objetos Para Trs objects.animate=Animao objects.expression=Expresso Aritmtica objects.area=Polgono objects.text=Texto objects.fixedcircle=Crculo com Lado Definido objects.fixedangle=ngulo Definido objects.fixedsegment=Segmento com Lado Definido iconhelp.point=Ponto iconhelp.segment=Segmento iconhelp.line=Reta iconhelp.ray=Semi-Reta iconhelp.circle=Crculo iconhelp.intersection=Interseco iconhelp.move=Mover Ponto iconhelp.hide=Ocultar Objeto iconhelp.edit=Editar Objeto iconhelp.tracker=Rastrear Ponto ou Reta iconhelp.objecttracker=Rastreio Automtico de Ponto ou Reta iconhelp.parallel=Paralela iconhelp.plumb=Perpendicular iconhelp.circle3=Compasso iconhelp.midpoint=Ponto Mdio iconhelp.quadric=Seco Cnica passando por 5 Pontos iconhelp.angle=ngulo iconhelp.boundedpoint=Ponto sobre Objeto iconhelp.hidden=Exibir Objetos Ocultos iconhelp.color=Cor Padro do Objeto iconhelp.type=Tipo Padro do Ponto iconhelp.thickness=Espessura Padro do Objeto iconhelp.back=Eliminar ltimo Objeto iconhelp.type0=Tipo Padro do Ponto iconhelp.thickness0=Espessura Padro do Objeto iconhelp.partial=Crculos Parciais iconhelp.plines=Linhas Parciais iconhelp.arrow=Segmentos como Vetores iconhelp.showcolor=Exibir Cores Selecionadas iconhelp.runmacro=Rodar Macro iconhelp.macro=Parmetros de Macro/Objetos/Definies iconhelp.expression=Expresso Aritmtica iconhelp.showvalue=Mostar Valores dos Objetos iconhelp.showname=Exibir Nomes dos Objetos iconhelp.obtuse=Usar ngulos > 180 iconhelp.solid=Sem transparncia iconhelp.longnames=Nomes Extensos para Objetos iconhelp.grid=Exibir Grade iconhelp.comment=Exibir Comentrio iconhelp.defaults=Configurao Padro iconhelp.macro0=Parmetros de Macro/Objetos/Definies iconhelp.visual=Construo Visual iconhelp.replay=Repetir Construo iconhelp.oneforward=Avanar iconhelp.fastforward=Avanar Vrios Passos iconhelp.allforward=Avanar Tudo iconhelp.oneback=Voltar iconhelp.fastback=Voltar Vrios Passos iconhelp.allback=Voltar Tudo iconhelp.close=Fechar iconhelp.area=Polgono iconhelp.text=Texto iconhelp.fixedcircle=Crculo com Raio Fixo iconhelp.fixedangle=ngulo de Amplitude Fixa iconhelp.fixedsegment=Segmento com Comprimento Fixo iconhelp.animate=Animar um Ponto iconhelp.delete=Eliminar Objeto iconhelp.undo=Desfazer ltimas Remoes iconhelp.nextbreak=Prximo Ponto de Parada iconhelp.setbreak=Marcar/Desmarcar Ponto de Parada iconhelp.zoom=Zoom com mouse (%) shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shurtcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.polygon=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) menu.file=Arquivo menu.file.new=Nova Construo menu.file.clearmacros=Apagar Todas as Macros menu.file.load=Carregar Construo... (Ctrl-o) menu.file.loadjob=Carregar Exerccio... (Ctrl-j) menu.file.savejob=Guardar Exerccio como... (Ctrl-k) menu.file.save=Guardar Construo (Ctrl-s) menu.file.saveas=Guardar Construo como... (Ctrl-a) menu.file.includemacros=Incluir Macros menu.file.exit=Sair (Alt-F4) menu.file.print=Imprimir... menu.file.print.isoscale=Escala 1:1 em cm menu.file.savebmp=figura BMP menu.file.savefig=figura FIG menu.file.loadrun=Carregar Construo Descritiva (Ctrl-r) menu.file.editrun=Editar Construo Descritiva (Ctrl-x) menu.actions=Aes menu.actions.elementary=Ferramentas Bsicas menu.actions.complex=Ferramentas Avanadas menu.actions.fixed=Objetos Fixos menu.actions.move=Ferramentas de Movimento menu.actions.decorative=Objetos Decorativos menu.options=Opes menu.options.visual=Modo Visual menu.options.hidden=Exibir Objetos Ocultos (F9) menu.options.comment=Comentrio (F10) menu.options.constructiondisplay=Descrio menu.options.grid=Exibir Grade (F12) menu.options.setgrid=Alterar Largura da Grade menu.options.showcolor=Exibir Cor menu.options.defaultcolor=Cor Padro menu.options.defaultthickness=Espessura Padro menu.options.defaulttype=Estilo de Ponto menu.options.all=Tudo menu.options.setdigits=Alterar Algarismos Decimais menu.options.shownames=Exibir Nomes de Objetos (Ctrl-F6) menu.options.longnames=No Abreviar Nomes de Objetos (Ctrl-F8) menu.options.obtuse=Usar ngulos > 180 (Ctrl-F12) menu.options.solid=No Usar Transparncia menu.options.showvalues=Exibir Valores de Objetos (Ctrl-F7) menu.options.partial=Crculos Parciais (Ctrl-F9) menu.options.plines=Retas Parciais (Ctrl-F10) menu.options.arrow=Vetores (Ctrl-F11) menu.options.editicons=Editar Barra de cones menu.options.back=Eliminar ltimo Objeto (<-) menu.options.undo=Desfazer ltima Remoo (Ctrl-z) menu.zoom=Campo de Visualizao menu.zoom.in=Aproximar (+) menu.zoom.out=Afastar (-) menu.zoom.left=Esquerda (seta para esquerda) menu.zoom.right=Direita (seta para direita) menu.zoom.up=Acima (seta para cima) menu.zoom.down=Abaixo (seta para baixo) menu.macros=Macros menu.special.definemacro=Definir Macro (Ctrl-F5) menu.special.runmacro=Rodar Macro (F5) menu.special.savemacros=Guardar Macros menu.special.loadmacros=Carregar Macros menu.special.deletemacros=Eliminar Macros menu.special=Especial menu.special.testjob=Testar Exerccios (Ctrl-F1) menu.special.jobcomment=Texto do Exerccio (F8) menu.special.export=Exportar para HTML (Ctrl-e) menu.special.replay=Repetir Construo menu.help=Ajuda menu.help.about=Sobre o programa menu.help.browser=Ajuda e Demos menu.help.text=Ajuda Simples menu.help.configure=Configurar Browser (Atalho na Internet) menu.help.help=Ajuda (F1) menu.help.macros=Como Criar e Usar Macros menu.help.tools=Sobre as Ferramentas menu.help.gui=Sobre a Interface com o Usurio menu.help.interactive=Sobre Construes Descritivas menu.help.tips=Algumas Dicas menu.settings=Configuraes Especiais menu.settings.fullicons=Duas Barras de cones menu.settings.utf=Usar Codificao UTF-8 menu.settings.autohide=Ocultar o Segundo Ponto de Interseco menu.settings.iconbartop=Barra de cones Acima da rea de Construo menu.settings.showtips=Exibir Nome das Ferramentas menu.settings.simplegraphics=Sempre Usar Grficos Simples menu.settings.sure=Confirmar antes de Abrir e Fechar Arquivos menu.settings.pointon=Alertar ao criar um Ponto sobre Objeto menu.settings.intersection=Alertar ao criar uma Interseco menu.settings.choice=Exibir seleo Dilogo para Objetos menu.settings.movename=Exibir Valores dos Objetos ao Mov-los menu.settings.movefixname=Ajustar Valores dos Objetos ao Mov-los menu.settings.restricted=Modo Escola menu.colors=Modificar as Cores colors.default=Usar Padres colors.color0=Cor 1 (Preto) colors.color1=Cor 2 (Verde) colors.color2=Cor 3 (Azul) colors.color3=Cor 4 (Marrom) colors.color4=Cor 5 (Ciano) colors.color5=Cor 6 (Vermelho) colors.background=Cor de Fundo colors.select=Escolher colors.target=Objeto myfiledialog.dir=Diretrio myfiledialog.file=Nome do Arquivo myfiledialog.pattern=Padro filedialog.open=Abrir filedialog.saveas=Guardar como... filedialog.open.action=Abrir filedialog.saveas.action=Guardar filedialog.htmlsave=Criar pgina HTML filedialog.htmlsave.action=Guardar pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Guardar load=Abrir abort=Cancela bound.release=Tornar Ponto Livre bound.bind=Colocar Ponto sobre Objeto bound.error=Objeto no encontrado! constructiondisplay.edit=Editar Objeto constructiondisplay.copy=Copiar para rea de Transferncia (Clipboard) edit.Title=Propriedades edit.name=Nome edit.hidden=Oculto edit.text=Texto edit.fixed=Fixo edit.color=Cor edit.ok=OK edit.cancel=Cancelar edit.showname=Exibir Nome edit.point.title=Editar Ponto edit.point.type=Tipo edit.point.x=X edit.point.y=Y edit.point.intersection=Diferente de edit.point.showvalue=Exibir Coordenadas edit.point.colortype=Espessura edit.point.bound=Colocar sobre Objeto edit.point.away=Longe de edit.point.close=Perto de edit.point.free=Livre edit.line.title=Editar Reta, Semi-Reta, Segmento edit.line.normal=Normal edit.line.thick=Grosso edit.line.thin=Fino edit.line.invisible=Invisvel edit.line.type=Tipo edit.segment.length=Comprimento edit.segment.showvalue=Exibir Comprimento edit.circle.title=Editar Crculo edit.circle.length=Raio edit.circle.partial=Crculo Parcial edit.circle.range=Definir Intervalo edit.circle.killrange=Apagar Intervalo edit.plumb.restricted=Restrito edit.angle.title=Editar ngulo edit.angle.length=Tamanho edit.angle.displaysize=Exibir Tamanho edit.angle.normal=Normal edit.angle.small=Pequeno edit.angle.large=Grande edit.expression.title=Editar Expresso edit.expression=Expresso Aritmtica edit.expression.prompt=Explanao edit.area.title=Editar Polgono edit.area.back=No Fundo export.title=Exportar HTML export.pagetitle=Ttulo da Pgina export.width=Largura export.height=Altura export.jar=Arquivo Jar export.comment=Com Comentrio export.file=Arquivo de Construo export.job=Exibir como Exerccio export.color=Cor de Fundo da Pgina export.backgroundcolor=Usar como fundo de pgina export.appletcolor=Usar como fundo de applet export.plain=Plano export.3D=Borda export.breaks=Repetir com Quebras export.icons=Borda e cones export.full=Borda, cones e Status export.nonvisual=Borda, cones e Linha de Entrada export.style=Estilo de Applet export.setcolor=Escolher Cor export.savefirst=Arquivo no foi salvo! export.soltext=Soluo export.stylesheet=Folha de estilo CSS export.solution=Arquivo Soluo export.jumpsol=Pular para Soluo export.linksol=Link para Soluo export.savesol=Guardar Arquivo Soluo export.track=Rastrear Ponto export.digits=Com Algarismos export.setsize=Pegar Tamanho export.signature=Criado com R&C export.colors=Com Cores Escolhidas export.background=Com Fundo Escolhido help.title=Ajuda help.error=O arquivo Ajuda no pde ser aberto! help.file=schoolgeometry.txt coloreditor.title=Editar Cor coloreditor.red=Vermelho coloreditor.green=Verde coloreditor.blue=Azul coloreditor.color=Sua Cor comment.title=Comentrio da Construo comment.set=Definir comment.cancel=Cancelar comment.close=Fechar iconedit.title=Editar Barra de cones iconedit.twobars=Barra de cones tem 2 linhas jobcomment.title=Exerccio select.title=Escolha select.ok=OK select.cancel=Cancela select.comment=Exibir Comentrio select.all=Tudo message.circle.midpoint=Crculo: Escolha o centro! message.circle.radius=Crculo: Passa em que ponto? (Shift: para raio fixo) message.fixedcircle.midpoint=Crculo de raio fixo: Escolha o centro! message.fixedcircle.radius=Crculo de lado definido: Clique em algum lugar! message.edit=Editar: Escolha um objeto! message.line.first=Reta: Escolha o primeiro ponto! message.line.second=Reta: Escolha o segundo ponto! message.ray.first=Semi-Reta: Escolha o primeiro ponto! message.ray.second=Semi-Reta: Escolha o segundo ponto! message.move.select=Mover: Escolha um ponto! message.move.move=Mover: Mova o ponto! message.point=Ponto: Defina um ponto! message.segment.first=Segmento: Escolha o primeiro ponto! message.segment.second=Segmento: Segundo ponto (use shift para definir comprimento)! message.fixedsegment.first=Segmento com comprimento fixo: Primeiro ponto! message.fixedsegment.second=Segmento com comprimento fixo: Clique em algum lugar! message.intersection.first=Interseco: Escolha o primeiro objeto ou a interseco! message.intersection.second=Interseco: Com que objeto? message.hide=Ocultar/Exibir: Escolha um objeto! message.tracker.select=Trilha: Escolha o ponto ou reta! message.tracker.selectpoint=Trilha: Mover que ponto? message.tracker.move=Trilha: Mova o ponto! message.objecttracker.select=Rastrear automaticamente: Escolha um ponto a trilhar! (Shift: seleciona mais pontos) message.objecttracker.object=Rastrear automaticamente: Escolha uma linha ou crculo! message.objecttracker.selectpoint=Rastrear automaticamente: Que ponto mover? message.objecttracker.selectanypoint=Rastrear automaticamente: Escolha outros ponto a mover! message.objecttracker.move=Rastrear automaticamente: Mova o ponto! message.objecttracker.start=Rastrear automaticamente: Iniciar Animao! message.objecttracker.stop=Rastrear automaticamente: Parar Animao! message.parallel.first=Reta Paralela: A quem? (reta, semi-reta ou segmento) message.parallel.second=Reta Paralela: Escolha um ponto! message.plumb.first=Reta Perpendicular: A quem? (reta, semi-reta ou segmento) message.plumb.second=Reta Perpendicular: Escolha um ponto! message.circle3.first=Compasso: Escolha o primeiro ponto do raio! message.circle3.second=Compasso: Escolha o segundo ponto do raio! message.circle3.midpoint=Compasso: Escolha o centro! message.midpoint.first=Ponto Mdio: Escolha o primeiro ponto! message.midpoint.second=Ponto Mdio: Escolha o segundo ponto! message.quadric=Seco Cnica: Escolha o ponto de nmero message.angle.first=ngulo: Escolha o primeiro ponto! message.angle.root=ngulo: Escolha o vrtice! message.angle.second=ngulo: Escolha o segundo ponto (shift: fixa amplitude)! message.fixedangle.first=ngulo de amplitude fixa: Escolha o primeiro ponto! message.fixedangle.root=ngulo de amplitude fixa: Escolha o vrtice! message.fixedangle.second=ngulo de amplitude fixa: Escolha o segundo ponto! message.label.select=Mover Etiqueta: Escolha uma etiqueta! message.label.move=Mover Etiqueta: Mova a etiqueta! message.boundedpoint=Ponto sobre Objeto: Escolha um crculo ou uma linha! message.parameters=Parmetros de Macro: Escolha objetos! message.targets=Alvos de Macro: Escolha objetos! message.savejob.first=Definir Atributos: Escolha ltimo objeto exibido! message.savejob.second=Definir Atributos: Escolha um objeto alvo! message.savejob.third=Definir Atributos: Escolha mais objetos a serem exibidos! message.runmacro=Macro %: %. (Entre %) % message.runmacro.return=(BARRA DE ESPAO escolhe %) message.runmacro.fixes=(SHIFT corrige seleo) message.delete=Eliminar: Qual objeto? message.reorder=Reordenar: Qual objeto? message.expression=Expresso Aritmtica: Onde colocar? message.area=Polgono Preenchido: Escolha um vrtice do polgono! message.text=Texto: Onde colocar? message.animator.point=Animao: Que ponto animar? message.animator.segment=Animao: Sobre qual objeto? (crculo ou segmento!) message.animator.running=Animao: Rodando (clique para parar)! message.range.first=Arco desse ponto... message.range.second=... at que ponto? message.setaway.away=Afastada de que ponto? message.setaway.close=Prxima a que ponto? objectsedit.title=Editar Propriedades point.type.square=Quadrado point.type.diamond=Diamante point.type.circle=Crculo point.type.dot=Ponto color.type.normal=Normal color.type.thick=Grosso color.type.thin=Fino color.type.invisible=Invisvel text.point=Ponto em %, % text.line=Reta passando por % e % text.segment=Segmento entre % e % text.segment.fixed=Segmento entre % e % com comprimento % text.ray=Semi-Reta de % passando por % text.intersection=Interseco entre % e % text.circle=Crculo de centro em % passando por % text.circle.fixed=Crculo de centro em % passando por % com raio % text.fixedcircle=Crculo ao redor de % com raio % text.circle3=Crculo com centro em % com raio determinado pelo segmento entre % e % text.parallel=Reta passando por % e paralela a % text.midpoint=Ponto Mdio entre % e % text.quadric=Seo Cnica passando por % text.plumb=Reta passando por % e perpendicular a % text.angle=ngulo % - % - % text.angle.fixed=ngulo % - % - % de valor % text.boundedpoint=Ponto sobre % text.expression=Expresso "%" em %, % text.area=Polgono text.fixedangle=ngulo % - % de valor % name.Point=Ponto name.Intersection=Interseco name.OtherIntersection=Interseco name.Circle=Crculo name.Circle3=Crculo name.Segment=Segmento name.Ray=Semi-Reta name.Line=Reta name.TwoPointLine=Reta passando por dois Pontos name.Parallel=Reta Paralela name.Midpoint=Ponto Mdio name.Quadric=Cnica name.Plumb=Reta Perpendicular name.Angle=ngulo name.PointOn=Ponto sobre Objeto name.Expression=Expresso name.Polygon=Polgono name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=p name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=pl name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=poli name.short.Function=f prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.angle==a(,,) prompt.area=A(,,) prompt.quadric=quadric(,,,,) prompt.function=funo(,,,,,) popup.hidden=Mostra objetos ocultos popup.replay=Repetir construo popup.empty=--- Macros --- replay.title=Repete reorder.title=Enviar para trs reorder.message=Inserir depois de reorder.notfound=Objeto no encontrado! reorder.warning=No pde ser feito! setgrid.title=Largura da Grade setgrid.prompt=Nova largura de grade setgrid.set=Definir definemacro.title=Definir Macro definemacro.name=Nome definemacro.comment=Comentrio de Macro definemacro.parameters=Mensagem de solicitao (Prompt) definemacro.noparams=Faltam os parmetros da macro! definemacro.nomacro=No h macro definida! definemacro.targetsonly=Exibir apenas os objetos finais definemacro.invisible=No incluir construes intermedirias definemacro.promptfor=Solicitao para macro.replace.title=Substituio de Macro macro.replace=Substituir Macro: macro.replace.all=Tudo macro.usage=Uso incorreto de macro (Ver dicas)! macro.prompt.title=Solicitao de Parmetro macro.prompt.prompt=Escreva um valor para o parmetro macro.prompt.illegal=Valor invlido! digits.title=Quantos algarismos aps a vrgula? digits.edit=Editar digits.lengths=Exibir digits.angles=ngulos editrun.title=Editar Construo Descritiva editrun.run=Guardar e Rodar editrun.load=Outra Descrio sure.title=Tem certeza? sure.macros=Apagar todas as macros? sure.delete=Ignorar modificaes? close.title=Fim close.prompt=Fechar o programa? file.exists.title=Arquivo existente file.exists.overwrite=Arquivo j existe! Substitu-lo? exception.nparams=Nmero Invlido de Parmetros! exception.notfound=Objeto no foi encontrado, ou foi definido aps expresso! exception.type=Tipo Invlido de Objeto! exception.expression=Expresso Invlida! exception.canfix=Objeto no pode ser corrigido! exception.fix=Valor invlido! exception.novalue=Valor invlido! exception.elementary=Elemento invlido na expresso! exception.bracket=Faltam parnteses! exception.quotes=Faltam aspas! exception.dot=O nmero tem dois ou mais pontos decimais! exception.nodigit=No encontrado algarismo no nmero! exception.function=Funo desconhecida! exception.parameter=Parmetro de funo invlido! exception.macro=Parmetro de macro invlido! exception.name=Escreva um Nome! exception.job=Parmetros Invlidos de Exerccio! exception.track=Intervalo de Parmetros Invlido! exception.animate=Parmetros Invlidos de Animao! exception.boolean=Valor Booleano deve ser verdadeiro ou falso! exception.value=Valor Ilegal! exception.color=Cor Ilegal! exception.colortype=Espessura Ilegal! exception.type=Tipo de Ponto Ilegal! exception.macroparameter=Parmetro Ilegal de Macro! exception.macrotarget=Objeto Final da Macro Invlido! exception.prompt=Nome de Objeto Invlido! exception.prompt.parameter=O nome do objeto no pode ser um parmetro! exception.parameters=Parmetro Invlido! exception.brackets=Parnteses Invlidos! exception.double=Este nome j existe! error.setaway=Este ponto no est definido antes da interseco! error.objecttracker.depends=O ponto est ligado a outro objeto! constructiondisplay.title=Construo function.hide=Ocultar function.hide.short=ocultar function.rename=Nome function.rename.short=nome function.value=Valor function.value.short=valor function.window=Janela function.window.short=J function.color=Cor function.color.short=cor function.thickness=Espessura function.thickness.short=esp function.type=Tipo function.type.short=tipo function.partial=Parcial function.partial.short=parc function.fill=Preencher function.fill.short=cheio function.back=Fundo function.back.short=fundo function.acute=Convexo function.acute.short=convexo function.obtuse=Cncavo function.obtuse.short=concavo function.solid=Opaco function.solid.short=opaco function restrict=Restrito function restrict.short=restr expression.value=Valor configure.title=Escolher Navegador (Browser) configure.prompt=Comando do Navegador (Browser) # New Resources: background.error=No foi possvel carregar a imagem (GIF ou JPG!). menu.background=Imagem de Fundo menu.background.grab=Construo atual como imagem de fundo menu.background.clear=Apagar imagem de fundo menu.background.load=Escolher imagem de fundo menu.background.usesize=Ajustar janela imagem de fundo menu.background.tile=Lado a Lado (ladrilhar) menu.background.center=Centralizar imagem de fundo iconhelp.grab=Definir imagem de fundo filedialog.backgroundload=Carregar Imagem de Fundo filedialog.backgroundload.action=Carregar # New Resources (Ver. 2.14 a 2.19) menu.file.compress=Sempre Comprimir menu.file.savesvg=figura SVG loading=A carregar... Aguarde, por favor! menu.settings.font.default=Fonte Normal menu.settings.font.bold=Negrito menu.settings.font.large=Grande menu.file.saveeps=figura EPS menu.fonts=Fonte # Ver. 2.20 a 2.23 bmpscaler.title=Escala Bitmap bmpscaler.width=Largura bmpscaler.height=Altura bmpscaler.scale=Fator (pressione Enter) bmpscaler.illegal=Valor invlido renamemacro.title=Renomear Macro renamemacro.name=Novo nome da macro menu.special.renamemacro=Renomear Macro... savequestion.title=Construo savequestion.qsave=Guardar alteraes? # Ver. 2.25 exception.printsize=Pgina muito pequena para essa construo! iconhelp.nohelp=Sem ajuda disponvel iconhelp.type?=Tipo de ponto iconhelp.thickness?=Espessura iconhelp.color?=Cor iconhelp.filled=Objeto preenchido iconhelp.isback=Desenhar no fundo iconhelp.inverse=ngulo refletido iconhelp.angle?=Tamanho # Ver. 2.31 a 2.34 menu.settings.indicate=Visualizar objetos criados menu.options.other=Configuraes menu.help.welcome=Novidades desta verso iconhelp.twolines=cones em duas linhas iconhelp.qintersection=Avisar se deseja criar interseco iconhelp.qchoice=Exibir dilogo para seleo de objeto iconhelp.qpointon=Perguntar ao criar ponto sobre objeto iconhelp.noindicate=No indicar objetos sob o mouse (rato) menu.file.new=Nova Construo (Ctrl-n) edit.text.title=Configuraes de Texto edit.text.settings=Outras Configuraes menu.settings.filedialog=Substituir dilogo do arquivo de sistema # Ver. 2.35 a 2.39 menu.settings.bitmapbackground=Colorir Fundo ao Exportar como BMP menu.file.savegraphics=Exportar Imagem como ... bmpscaler.title=Escala de Imagem menu.file.savepdf=Arquivo PDF iconhelp.chord=Exibir como segmento message.setfixedangle.first=Definir ngulo fixo: Primeiro ponto? message.setfixedangle.second=Definir ngulo fixo: Ponto base? message.setfixedangle.third=Definir ngulo fixo: Terceiro ponto? edit.fixedangle.set=Definir tamanho ... message.setfixedcircle.first=Definir circulo fixo: Primeiro ponto? message.setfixedcircle.second=Definir circulo fixo: Segundo ponto? edit.fixedcircle.set=Definir tamanho ... # Ver. 2.40 a 2.47 minpointsize.title=Definir Tamanho do Ponto Mnimo minpointsize.prompt=Tamanho do ponto mnimo (padro: 3) menu.settings.font.minpointsize=Tamanho do Ponto Mnimo ... name.short.Track=Tr text.track=Traar de % enquanto % mover sobre % trackquestion.keep=Manter Trao na Construo? trackquestion.title=Manter Trao menu.options.track=Manter Trao (Shift-Enter) iconhelp.indicate=Visualizar finalizao da construo iconhelp.nohelp=Sem ajuda disponvel! objects.draw=Desenhar com Mouse menu.options.cleardraw=Apagar Rabisco (Esc) iconhelp.draw=Desenhar com Mouse message.draw=Desenhar com Mouse (ESC para apagar) shortcuts.draw=; message.move.select=Mover: Selecione um ponto (shift: exibe estado anterior)! message.rename=Renomear A,B,C,...: Selecione objetos! iconhelp.rename=Renomear A,B,C,... objects.rename=Renomear A,B,C,... shortcuts.rename=: iconhelp.anglereduce=No exibir raio do ngulo menu.settings.smartboard=Modo Smartboard shortcuts.zoom=% objects.zoom=Ampliar com Mouse message.zoom=Arrastar centro ou ampliar e reduzir menu.special.restricticons=Barra de cones Simples menu.settings.indicate.simple=Indicar Somente Pontos menu.settings.beginner=Modo Novato question.again=Sempre fazer essa pergunta. # Version 2.49 e 2.53 definemacro.parameters=Prompt(s) de Parmetro ("=nome" fixos) menu.actions.angles=ngulos menu.actions.circles=Crculos menu.actions.lines=Linhas menu.actions.points=Pontos # Version 3.00 info.title=Ajuda Contextual info.related=Tpicos Relacionados info.notfound=Tpico no encontrado! info.noresults=No encontrado! info.searchresults=- Resultados da Busca - info.select=- Selecione - info.search=Busca info.back=Voltar info.start=Iniciar iconhelp.info=Ajuda contextual menu.help.info=Ajuda contextual myfiledialog.homedir=Arquivos R&C myfiledialog.windowshome=Meus Documentos myfiledialog.mkdir=Criar Diretrio myfiledialog.back=Voltar menu.file.alwaysclearmacros=Apagar Macros antes de Carregar about.language=Portugus bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 a 3.03 menu.settings.backups=Backups menu.options.hideduplicates=Ocultar Cpias menu.options.function=Criar Funo text.function=Funo ( % , % ) function.varmin=De function.varmax=a function.dvar=Passo function.var=Varivel function.x=X function.y=Y iconhelp.function=Criar uma Funo menu.options.editlast=Editar ltimo Objeto iconhelp.control.edit=Editar ltimo Objeto iconhelp.control.hide=Ocultar Cpias edit.function.title=Funo ou Curva iconhelp.control.runmacro=Rodar ltima macro de novo # Version 3.05 point.type.cross=Cruz point.type.dcross=Cruz deitada shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Unidade menu.special.break=Pontos de Parada menu.bp.setbreak=Definir Ponto de Parada menu.bp.clearbreak=Apagar Ponto de Parada menu.bp.sethidingbreak=Definir Ponto de Parada Oculto menu.bp.animatebreak=Animar Pontos de Parada iconhelp.animatebreak=Animar Ponto de Parada message.animatebreak=Animar Pontos de Parada: clique para parar (use setas esquerda/direita para rapidez)! menu.special.exporttemplate=Exportar HTML com Modelos templateload.open=Usar Modelos templateload.open.action=Abrir menu.settings.doubleclick=Duplo Clique para Macros export.codebase=Codebase # Version 3.12 e 3.23 edit.equation=Equao menu.settings.squarepoints=Desenhar pontos como quadrados # Version 3.37 menu.options.export=Exportar imagens (Config.) menu.settings.minwidth=Menor largura 1 menu.settings.minpointsize=Tamanho do menor ponto menu.settings.minfontsize=Tamanho da menor fonte minfontsize.title=Definir menor tamanho de fonte minfontsize.prompt=Menor fonte (padro: 12) menu.options.minpointsize=Menor Ponto menu.options.minfontsize=Menor Fonte # Version 3.38 a 3.42 menu.settings.scalepdf=Escala 1:1 para PDF e EPS menu.file.clip=Ajustes para Imagens ... clip.title=Definir Ajustes clip.width=Largura clip.height=Altura clip.screen=Sem Ajustes menu.options.arrowsize=Setas (tamanho) ... arrowsize.title=Tamanho das Setas # Version 3.44 e 3.46 iconhelp.large=Use fontes grandes iconhelp.bold=Use negrito menu.options.largefont=Tamanho da Fonte menu.options.boldfont=Fonte Negrito warning.previewframe=Quadro maior que janela! message.move.select=Move: Selecione ponto (shift: mais pontos, ctrl: estado anterior)! iconbar.showseparators=Ver Separadores # Version 3.48 menu.sizes=Tamanhos menu.options.minlinesize=Linha (menor largura) minlinesize.title=Largura Mnima minlinesize.prompt=Largura Mnima (Padro 1) arrowsize.prompt=Largura de Seta (Padro: 10) menu.options.printscaler=Tamanho ao exportar ... menu.options.exportsettings=Exportar (Def. Especiais) ... printscaler.title=Def. Tamanho (Exp.) printscaler.width=Largura (cm) printscaler.height=Altura (cm) printscaler.dpi=Resoluo (dpi, padro 300) printscaler.linewidth=Largura de Linha (cm, padro 0.02) printscaler.pointsize=Tamanho do Ponto (cm, padro 0.07) printscaler.textsize=Tamanho do Texto (cm, padro 3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=Largura (em pixel) printscaler.h=Altura (em pixel) printscaler.scale=Escala (proporcional tela) printscaler.middle=Manter (no redimensionar) printscaler.sizes=Escalar linhas, fonte e pontos menu.file.savepng=Salvar como PNG warning.preview=Visualizao no funcionar bem com Java 1.1 iconedit.showseparators=Exibir separadores printscaler.aspect=Manter Proporo printscaler.presets=Definies printscaler.preset=Escolha! printscaler.preset.300dpi=Ajusta para 300 DPI printscaler.preset.300dpi6=6 cm Largura para 300 DPI printscaler.preset.300dpi16=16 cm Largura para 300 DPI printscaler.preset.window=Tamanho da Janela printscaler.preset.clip50=Tamanho da Janela em 50% message.saving=Aguarde! menu.options.printscalepreview=Previsualizao (Ctrl-F3) date=Criado em # Version 3.51 help=Ajuda # Version 3.61 editconditionals.title=Editar Condicionais editconditionals.hidden=Oculto editconditionals.superhidden=Completamente Oculto editconditionals.visible=Normal editconditionals.showname=Exibir Nome editconditionals.showvalue=Exibir Valor editconditionals.background=Fundo editconditionals.solid=No Transparente exception.superfluous=Texto Suprfluo na Expresso # Version 3.62 e 3.63 menu.options.selectionsize=Mudar Tamanho da Seleo selectionsize.title=Tamanho da Seleo selectionsize.prompt=Tamanho da Seleo (padro 1.5) select.comment.title=Comentrio de Macro # Version 3.68 edit.area.area=rea # Version 3.73 myfiledialog.oldfiles=Histrico # Version 3.74 iconhelp.load=Carregar Construo (Ctrl-o) iconhelp.save=Guardar Construo (Ctrl-s) iconhelp.new=Nova Construo (Ctrl-n) # Version 3.81 warning.loadbackground=Erro ao carregar fundo # Version 3.9 function.x=Expresso para X (vazio para funes) # Version 3.91 constructiondisplay.select=Selecionar constructiondisplay.all=Todos os Objetos constructiondisplay.visible=Objetos Visveis constructiondisplay.points=Pontos constructiondisplay.lines=Linhas constructiondisplay.circles=Crculos constructiondisplay.angles=ngulos constructiondisplay.other=Outros Objetos menu.file.copypng=Copiar para Clipboard exception.clipboardcopy=Falhou ao copiar! menu.options.finegrid=Somente eixos # Vesion 3.93 edit.function.center=Definir Centro edit.function.free=Liberar Centro message.setcenter=Selecionar o ponto central! # Vesion 3.94 message.edit=Editar: Objeto (shift: mais objetos, ctrl: condicionais)? # Version 3.95 edit.function.special=Pontos somente # Version 3.97 error.image=Erro ao carregar uma imagem! filedialog.imageload=Carregar Imagem filedialog.imageload.action=Carregar prompt.image=imagem(,,,) objects.image=Imagem shortcuts.image=_ # Version 3.98 exception.depends=Objeto % depende do objeto corrente. error.depends=Objeto % depende do objeto corrente. constructiondisplay.sorted=Classificado por generao # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Expresses # Version 4.00 iconhelp.image=Carregar Imagem (_) message.image=Ponto-ncora da imagem % message.image.last=ltimo ponto-ncora da imagem (ou escolha ponto selecionado) editconditionals.z=Valor Z-Buffer # Version 4.01 name.FixedAngle=ngulo Fixo # Version 4.04 menu.moresettings=Configuraes menu.settings.language=Mudar Idioma language.title=Use cdigo de duas letras language.prompt=Para ter efeito, reinicie o R&C! # Version 4.05 constructiondisplay.invalid=Objetos Invlidos # Version 4.08 menu.settings.constructiondisplay=Lista de Objetos (F11) # Version 4.09 constructiondisplay.editconditions=Editar Condies constructiondisplay.delete=Deletar Objetos Selecionados constructiondisplay.hide=Ocultar/Exibir constructiondisplay.superhide=Super Ocultar # Version 4.2 edit.expression.slider=Usar como Slider (boto deslizante) menu.grid.options=Opes de Grade menu.options.leftsnap=Snap with Left Button Drag menu.settings.boundingbox=Criar arquivo Bounding Box (bb) # Version 4.3 latexsettings.title=Definir exportao LaTeX latexsettings.boundingbox=Criar arquivo-bb Bounding box latexsettings.latexinput=Criar arquivo-idx LaTeX latexsettings.doubledollar=LaTeX faz $$...$$ latexsettings.dollar=LaTeX faz $...$ latexsettings.nodollar=LaTeX faz todas as outras strings latexsettings.fullpath=Usar caminho de arquivo printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=12 cm de largura com 300 DPI printscaler.latex=Guardar como LaTeX menu.background.usewidth=Ajustar apenas altura # Version 4.4 menu.options.restricted=Interseces Restritas menu.options.sizes=Definir Tamanhos ... sizesdialog.title=Tamanhos minlinesize.prompt=Largura mnima da linha (padro: 1) minpointsize.prompt=Tamanho mnimo do ponto (padro: 3) minfontsize.prompt=Tamanho mnimo da fonte (padro: 12) arrowsize.prompt=Tamanho da seta (padro: 10) selectionsize.prompt=Tamanho da seleo (padro: 1.5) warning.loadmacros=Erro ao carregar uma macro! warning.macrodefinition=% usado, mas no em macro! edit.circle.bounds=Exibir como Arco edit.circle.range=Definir Arco ... # Version 4.5 edit.track.dmin=Passo mnimo (padro 0.001) # Version 4.6 menu.settings.smallicons=cones pequenos menu.settings.oldicons=cones antigos./src/rene/zirkel/docs/CVS/RevisionCache/ZirkelProperties.properties#1.20000644000175000017500000010744311150602753025026 0ustar yvesyvesprogram.name=CaRMetal program.version=2.9.8 program.date=2009-02 version=Version homefile=index.html homepage=http://www.z-u-l.de/ about.title=About this Program about.name=School Geometry about.programmed=Programmed by title=School Geometry close=Close ok=OK cancel=Cancel done=Well Done! message=Message yes=Yes no=No abort=Abort true=true false=false warning.nojob=This isn't an Assignment! warning.print=Printing failed! warning.reset=This option is enabled for the next start of Z.u.L.! question.title=Question question.intersection=Create this intersection? question.pointon=Create a point on this object? colors.black=Black colors.blue=Blue colors.green=Green colors.brown=Brown colors.cyan=Cyan colors.red=Red objects.point=Point objects.segment=Segment objects.line=Line objects.ray=Ray objects.circle=Circle objects.intersection=Intersection objects.move=Move Point objects.hide=Hide Object objects.edit=Edit Point objects.tracker=Track a Point or a Line objects.objecttracker=Track a Point or a Line on an Object objects.parallel=Parallel Line objects.plumb=Perpendicular Line objects.circle3=Circle from 3 Points objects.midpoint=Midpoint objects.quadric=Conic Section objects.angle=Angle objects.boundedpoint=Point on an Object objects.parameter=Set Macro Parameters objects.targets=Set Macro Targets objects.definejob=Define an Assignment objects.runmacro=Run a Macro objects.delete=Delete Objects and their Children objects.reorder=Push Objects to the Background objects.animate=Animation objects.expression=Arithmetic Expression objects.area=Polygon objects.text=Text objects.fixedcircle=Circle with fixed Size objects.fixedangle=Fixed Angle objects.fixedsegment=Segment with fixed Length iconhelp.point=Point (p) iconhelp.segment=Segment (s) iconhelp.line=Line (g) iconhelp.ray=Ray (r) iconhelp.circle=Circle (c) iconhelp.intersection=Intersection (i) iconhelp.move=Move a point (m)+Ctrl (Points): Show old construction+Ctrl: Move fixed objects+Shift: Move more than one object iconhelp.hide=Hide objects (h)+Shift: Hide completely iconhelp.edit=Edit objects (e)+Shift: Edit more objects+Ctrl: Edit last object iconhelp.tracker=Track a point or a line (t) iconhelp.objecttracker=Automatic track of a point or a line (o)+Strg: Keep Track (Shift-Enter) iconhelp.parallel=Parallel line (1) iconhelp.plumb=Perpendicular line (2) iconhelp.circle3=Circle from 3 points (3) iconhelp.midpoint=Midpoint (4) iconhelp.quadric=Conic section through 5 points ($) iconhelp.angle=Angle (a) iconhelp.boundedpoint=Create a point on an abject (5)+Shift: Not fixed on object iconhelp.hidden=Show or hide hidden objects (F9) iconhelp.color=Set default object color (Ctrl-1,2,3,4) iconhelp.type=Set default point type (Ctrl-5,6,7,8,9,0) iconhelp.type0=Set default point type iconhelp.thickness=Set default object thickness (Alt-5,6,7) iconhelp.back=Delete last object (<-) iconhelp.thickness0=Set default object thickness iconhelp.partial=Create partial circles by default (Ctrl-F9) iconhelp.plines=Create partial lines by default (Ctrl-F10) iconhelp.arrow=Create segments as vectors by default (Ctrl-F11) iconhelp.showcolor=Show selected colors only (Alt-1,2,3,4) iconhelp.runmacro=Run a macro (9)+Ctrl: Run last Macro iconhelp.macro=Set macro parameters, targets and definition (7,8,Ctrl-5) iconhelp.expression=Arithmetic expression (x) iconhelp.showvalue=Show object values by default (Ctrl-F7) iconhelp.showname=Show object names by default (Ctrl-F6) iconhelp.obtuse=Create angles larger than 180\u00B0 by default (Ctrl-F12) iconhelp.solid=Do not use transparency by default iconhelp.longnames=Use long object names by default (Ctrl-F8) iconhelp.grid=Show the grid (F12) iconhelp.comment=Show and edit comment (F10) iconhelp.defaults=Default settings iconhelp.macro0=Set macro parameters, targets and definition iconhelp.visual=Toggle visual construction mode iconhelp.replay=Replay the construction iconhelp.oneforward=Forward iconhelp.fastforward=Fast forward iconhelp.allforward=To the end iconhelp.oneback=Back iconhelp.fastback=Fast back iconhelp.allback=To the start iconhelp.close=Close iconhelp.area=Polygon (0) iconhelp.text=Multiline text (b) iconhelp.fixedcircle=Circle with fixed radius (,) iconhelp.fixedangle=Angle with fixed size (.) iconhelp.fixedsegment=Segment with fixed length (#) iconhelp.animate=Animation of a point (") iconhelp.delete=Delete objects and their children (Del) iconhelp.undo=Undo last removals (Ctrl-z) iconhelp.nextbreak=Jump to next break iconhelp.setbreak=Toggle break+Shift: Hidden breakpoint iconhelp.zoom=Zoom with the mouse (%) shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.showcolor.4= shortcuts.showcolor.5= shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) menu.file=File menu.file.clearmacros=Clear User Macros menu.file.load=Load a Construction ... (Ctrl-o) menu.file.loadjob=Load an Assignment ... (Ctrl-j) menu.file.savejob=Save as Assignment ... (Ctrl-k) menu.file.save=Save this Construction (Ctrl-s) menu.file.saveas=Save this Construction to ... (Ctrl-a) menu.file.includemacros=Include all Macros menu.file.exit=Exit (Alt-F4) menu.file.print=Print ... menu.file.print.isoscale=Scale 1:1 in cm menu.file.savebmp=Save Graphics (as BMP) ... menu.file.savefig=Save Graphics (as FIG) ... menu.file.loadrun=Load a Decriptive Construction ... (Ctrl-r) menu.file.editrun=Edit a Descriptive Construction ... (Ctrl-x) menu.actions=Edit menu.actions.elementary=Elementary Tools menu.actions.complex=More Complex Tools menu.actions.move=Moving Tools menu.actions.decorative=Decorative Objects menu.options=Options menu.options.visual=Toggle Visual Mode (Ctrl-F6) menu.options.hidden=Show hidden Objects (F9) menu.options.comment=Edit Comment (F10) menu.options.constructiondisplay=Show Description menu.options.grid=Show Grid (F12) menu.options.setgrid=Set Grid Width ... menu.options.showcolor=Show Color menu.options.defaultcolor=Default Color menu.options.defaultthickness=Default Thickness menu.options.defaulttype=Default Point Type menu.options.all=All menu.options.setdigits=Set Digits menu.options.shownames=Show Object Names (Ctrl-F6) menu.options.longnames=Long Object Names (Ctrl-F8) menu.options.obtuse=Use Angles larger than 180\u00B0 (Ctrl-F12) menu.options.solid=Do not use Transparency menu.options.showvalues=Show Object Values (Ctrl-F7) menu.options.partial=Partial Circles (Ctrl-F9) menu.options.plines=Partial Lines (Ctrl-F10) menu.options.arrow=Arrows (Ctrl-F11) menu.options.editicons=Edit the Toolbox menu.options.back=Delete last Object (<-) menu.options.undo=Undo Delete (Ctrl-z) menu.zoom=Zoom menu.zoom.in=In (+) menu.zoom.out=Out (-) menu.zoom.left=Left (Cursor-Left) menu.zoom.right=Right (Cursor-Right) menu.zoom.up=Up (Cursor-Up) menu.zoom.down=Down (Cursor-Down) menu.macros=Macros menu.special.definemacro=Define a Macro (Ctrl-F5) menu.special.runmacro=Run a Macro ... (F5) menu.special.savemacros=Save Macros ... menu.special.loadmacros=Load Macros ... menu.special.deletemacros=Delete Macros ... menu.special=Special menu.special.testjob=Test this Assignment (Ctrl-F1) menu.special.jobcomment=Set Assignment Text ... (F8) menu.special.export=Create an HTML File ... (Ctrl-e) menu.special.replay=Replay this Construction menu.help=Help menu.help.about=About this program menu.help.browser=Explore Help and Demos menu.help.text=Simple Help menu.help.configure=Configure the Browser menu.help.help=Help (F1) menu.help.macros=About Macros menu.help.tools=The Tools menu.help.gui=User Interface menu.help.interactive=Descriptive Constructions menu.help.tips=Some Tips menu.settings=Special Settings menu.settings.fullicons=Use two full icon bars menu.settings.utf=Use UTF-8 encoding menu.settings.autohide=Hide second intersection point menu.settings.iconbartop=Iconbar above construction menu.settings.showtips=Show tooltips menu.settings.simplegraphics=Use simpler graphics menu.settings.sure=Confirm before loading and closing menu.settings.pointon=Ask before creating a point on an object menu.settings.intersection=Ask before creating an intersection menu.settings.choice=Show selection dialog for objects menu.settings.movename=Show object values when moving menu.settings.movefixname=Show fixed object values when moving menu.settings.restricted=Toggle school mode menu.colors=Set the Colors colors.default=Use Default Colors colors.color0=Color 1 (Black) colors.color1=Color 2 (Green) colors.color2=Color 3 (Blue) colors.color3=Color 4 (Brown) colors.color4=Color 5 (Cyan) colors.color5=Color 6 (Red) colors.background=Background colors.select=Select colors.target=Target myfiledialog.dir=Directory myfiledialog.file=File myfiledialog.pattern=Extensions filedialog.open=Open filedialog.saveas=Save as ... filedialog.open.action=Open filedialog.saveas.action=Save filedialog.htmlsave=Save HTML filedialog.htmlsave.action=Save pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Save load=Load abort=Abort bound.release=Release Point bound.bind=Bind to Object bound.error=Object not found before intersection! constructiondisplay.edit=Edit Object constructiondisplay.copy=Copy to Clipboard edit.Title=Properties edit.name=Name edit.hidden=Hidden edit.text=Text edit.fixed=Fixed edit.color=Color edit.ok=OK edit.cancel=Cancel edit.showname=Show Name edit.point.title=Edit Point edit.point.type=Type edit.point.x=X edit.point.y=Y edit.point.intersection=Different from edit.point.showvalue=Show Coordinates edit.point.colortype=Thickness edit.point.bound=Bound edit.point.away=Away from edit.point.close=Close to edit.point.free=Free edit.line.title=Edit Line, Ray, Segment edit.line.normal=Normal edit.line.thick=Thick edit.line.thin=Thin edit.line.invisible=Invisible edit.line.type=Type edit.segment.length=Length edit.segment.showvalue=Show Length edit.circle.title=Edit Circle edit.circle.length=Radius edit.circle.partial=Partial Display edit.plumb.restricted=Restricted edit.angle.title=Edit Angle edit.angle.length=Size edit.angle.displaysize=Display Size edit.angle.normal=Normal edit.angle.small=Small edit.angle.large=Large edit.expression.title=Edit Expression edit.expression=Arithmetic Expression edit.expression.prompt=Explanation edit.area.title=Edit Polygon edit.area.back=In Background export.title=HTML Export export.pagetitle=Title of Page export.width=Width export.height=Height export.jar=Jar file export.comment=Save comment export.file=Construction File export.job=Display as Assignment export.color=Color export.backgroundcolor=Use for page background export.appletcolor=Use for applet background export.plain=Plain export.3D=Border export.breaks=Replay with Breakpoints export.icons=Border and Icons export.full=Border, Icons and Status export.nonvisual=Border, Icons and Input Line export.style=Applet Style export.setcolor=Choose Color export.savefirst=File has not been saved! export.soltext=Solution export.stylesheet=CSS Style File export.solution=Solution File export.jumpsol=Jump to Solution export.linksol=Link to Solution export.savesol=Save Solution File export.track=Track Point export.digits=Save Digits export.setsize=Get Size export.signature=Created using C.a.R. export.colors=Save defined Colors export.background=Save defined Background help.title=Help help.error=Could not open the help file! help.file=schoolgeometry.txt coloreditor.title=Edit Color coloreditor.red=Red coloreditor.green=Green coloreditor.blue=Blue coloreditor.color=Your Color comment.title=Construction Comment comment.set=Set comment.cancel=Cancel comment.close=Close iconedit.title=Edit Icon Bar iconedit.twobars=Icon box has two lines jobcomment.title=Assignment select.title=Selection select.ok=OK select.cancel=Cancel select.comment=Show Comment select.all=All message.circle.midpoint=Circle: Midpoint? message.circle.radius=Circle: Point on the circle (shift: fix radius)? message.fixedcircle.midpoint=Circle with fixed size: Midpoint? message.fixedcircle.radius=Circle with fixed size: Radius? message.line.first=Line: First point? message.line.second=Line: Second point? message.ray.first=Ray: Root point? message.ray.second=Ray: Second point? message.move.select=Move: Select an object (shift: more)! message.move.move=Move: Move the point? message.point=Point: Set a point (shift: fix)! message.segment.first=Segment: First point? message.segment.second=Segment: Second point (shift: fixed length)? message.fixedsegment.first=Segment with fixed length: First point? message.fixedsegment.second=Segment with fixed length: Click somewhere! message.intersection.first=Intersection: First object or the intersection? message.intersection.second=Intersection: First object? message.hide=Hide/Show: Select an object! message.tracker.select=Track: Point or line to track (shift: more)? message.tracker.selectpoint=Track: Point to move? message.tracker.move=Track: Move the point! message.objecttracker.select=Autotrack: Point or line to track (shift: more)? message.objecttracker.object=Autotrack: Line or circle, point on object, slider? message.objecttracker.selectpoint=Autotrack: Point to be moved on line or circle? message.objecttracker.selectanypoint=Autotrack: Any other point to move? message.objecttracker.move=Autotrack: Move the point! message.objecttracker.start=Autotrack: Start the Animation! message.parallel.first=Parallel: Line? message.parallel.second=Parallel: Point? message.plumb.first=Perpendicular: Line? message.plumb.second=Perpendicular: Point? message.circle3.first=Circle: First radius point? message.circle3.second=Circle: Second radius point? message.circle3.midpoint=Circle: Midpoint? message.midpoint.first=Midpoint: First point? message.midpoint.second=Midpoint: Second point? message.quadric=Conic Section: Point number message.angle.first=Angle: First angle point? message.angle.root=Angle: Corner point? message.angle.second=Angle: Second angle point (shift: fixed size)? message.fixedangle.first=Angle with fixed size: First angle point? message.fixedangle.root=Angle with fixed size: Base point? message.fixedangle.second=Angle with fixed size: Click somewhere! message.label.select=Move Label: Select a label! message.label.move=Move Label: Move the label! message.boundedpoint=Point on Object: Circle or line object (shift: continuous, ctrl: inside)? message.parameters=Macro Parameters: Parameter objects? message.targets=Macro Targets: Target objects? message.savejob.first=Define Assignment: Last displayed object? message.savejob.second=Define Assignment: Target object (shift: don't check)? message.savejob.third=Define Assignment: Further objects to be displayed? message.runmacro=Macro %: %. % - % message.runmacro.return=(SPACE chooses %) message.runmacro.fixes=(SHIFT fixes selection) message.delete=Delete: Select an object! message.reorder=Reorder: Select an object! message.expression=Arithmetic Expression: Select a place! message.area=Filled polygon: Corner point? message.text=Text: Select a place! message.animator.point=Animation: Point to animate? message.animator.segment=Animation: Circle or a segment? message.animator.running=Animation: Running (click to stop)! message.range.first=Set range: Draw the circle from which point ... message.range.second=Set range: ... to which point? message.setaway.away=Keep the intersection away from which point? message.setaway.close=Keep the intersection close to which point? objectsedit.title=Edit Properties point.type.square=Square point.type.diamond=Diamond point.type.circle=Circle point.type.dot=Dot color.type.normal=Normal color.type.thick=Thick color.type.thin=Thin color.type.invisible=Invisible text.point=Point at %, % text.line=Line through % and % text.segment=Line segment from % to % text.segment.fixed=Line segment from % to % with length % text.ray=Ray from % pointing to % text.intersection=Intersection between % and % text.circle=Circle around % through % text.circle.fixed=Circle around % through % with radius % text.fixedcircle=Circle around % with radius % text.circle3=Circle around % with radius from % to % text.parallel=Parallel line through % to % text.midpoint=Midpoint between % and % text.quadric=Conic section through % text.plumb=Perpendicular line through % to % text.angle=Angle % - % - % text.angle.fixed=Angle % - % - % with size % text.boundedpoint=Point on % text.expression=Expression "%" at %, % text.area=Polygon text.fixedangle=Angle % - % with size % name.Point=Point name.Intersection=Intersection name.OtherIntersection=Intersection name.Circle=Circle name.Circle3=Circle name.Segment=Segment name.Ray=Ray name.Line=Line name.TwoPointLine=Line with two Points name.Parallel=Parallel name.Midpoint=Midpoint name.Quadric=Quadric name.Plumb=Plumb name.Angle=Angle name.PointOn=ObjectPoint name.Expression=Expression name.Polygon=Polygon prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.angle==a(,,) prompt.area=A(,,) prompt.quadric=quadric(,,,,) prompt.function=function(,,,,,) name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=pl name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=p name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=poly name.short.Function=f popup.hidden=Show hidden objects popup.replay=Replay construction popup.empty=--- Macros --- replay.title=Replay reorder.title=Push objects reorder.message=insert after reorder.notfound=Object not found! reorder.warning=Could not do that! setgrid.title=Grid Width setgrid.prompt=Enter new grid width setgrid.set=Set definemacro.title=Define Macro definemacro.name=Name definemacro.comment=Macro Comment definemacro.noparams=Need parameters for the macro! definemacro.nomacro=There is no macro to run! definemacro.targetsonly=Hide construction definemacro.invisible=Hide completely definemacro.promptfor=Prompt for macro.replace.title=Macro Replacement macro.replace=Replace Macro: macro.replace.all=All macro.usage=Wrong use of macro (see tips)! macro.prompt.title=Parameter Prompt macro.prompt.prompt=Enter a value for the parameter macro.prompt.illegal=Illegal value! digits.title=Set Digits digits.edit=Edit digits.lengths=Display digits.angles=Angles editrun.title=Edit Descriptive Construction editrun.run=Save and Run editrun.load=Other Description sure.title=Are you sure? sure.macros=Delete all user macros? sure.delete=Forget current changes? close.title=End close.prompt=Really close this program? file.exists.title=File Exists file.exists.overwrite=File exists! Overwrite? exception.nparams=Illegal number of Parameters! exception.notfound=Object not found, or defined after expression! exception.type=Illegal Object Type! exception.expression=Invalid Expression! exception.canfix=Object cannot be fixed! exception.fix=Value invalid! exception.novalue=Value invalid! exception.elementary=Invalid element in expression! exception.bracket=Closing brackets missing! exception.quotes=Closing quotes missing! exception.dot=Two dots in number! exception.nodigit=No digit found in number! exception.function=Unknown function! exception.parameter=Illegal function parameter! exception.macro=Illegal macro parameter! exception.name=Need a Name! exception.job=Illegal Job Paramters! exception.track=Illegal Track Parameters! exception.animate=Illegal Animation Parameters! exception.boolean=Boolean Value must be true of false! exception.value=Illegal Value! exception.color=Illegal Color! exception.colortype=Illegal Thickness! exception.type=Illegal Point Type! exception.macroparameter=Illegal Macro Parameter! exception.macrotarget=Illegal Macro Target! exception.prompt=Illegal prompt oject! exception.prompt.parameter=Prompt object may not be a parameter! exception.parameters=Illegal Parameter! exception.brackets=Illegal Brackets! exception.double=Name is not unique! error.setaway=This point is not defined before the intersection! error.objecttracker.depends=The point is bound to another object! constructiondisplay.title=Construction function.hide=Hide function.hide.short=hide function.rename=Name function.rename.short=name function.value=Value function.value.short=value function.window=Window function.window.short=W function.color=Color function.color.short=col function.thickness=Thickness function.thickness.short=th function.type=Type function.type.short=type function.partial=Partial function.partial.short=part function.fill=Fill function.fill.short=fill function.back=Background function.back.short=back function.acute=Acute function.acute.short=acute function.obtuse=Obtuse function.obtuse.short=obtuse function.solid=Solid function.solid.short=solid function restrict=Restrict function restrict.short=restrict expression.value=Value configure.title=Set Browser configure.prompt=Enter Browser Command # New Resources: background.error=Could not load the Image (GIF or JPG!). menu.background=Background menu.background.grab=Current as Background menu.background.clear=Clear Background menu.background.load=Load Background Picture ... menu.background.usesize=Resize to Picture menu.background.tile=Tile Background menu.background.center=Center Background iconhelp.grab=Set or Clear Background filedialog.backgroundload=Load Background filedialog.backgroundload.action=Load # New Resources in Version 2.14 menu.file.compress=Compress always menu.file.savesvg=Save graphics (as SVG) ... # Version 2.15 loading=Loading, please wait! # Version 2.18 and 2.19 menu.settings.font.default=Default font menu.settings.font.bold=Bold font menu.settings.font.large=Large font menu.file.saveeps=Save graphics (as EPS) ... menu.fonts=Font # Version 2.20 bmpscaler.title=Scale Bitmap bmpscaler.width=Width bmpscaler.height=Height bmpscaler.scale=Factor (press Return) bmpscaler.illegal=Illegal Value # Version 2.21 renamemacro.title=Rename Macro renamemacro.name=New macro name menu.special.renamemacro=Rename Macro ... # Version 2.23 savequestion.title=Save Construction savequestion.qsave=Save Changes? # Version 2.25 exception.printsize=Page too small for this construction! iconhelp.nohelp=No help available iconhelp.type?=Point type iconhelp.thickness?=Thickness iconhelp.color?=Color iconhelp.filled=Filled object iconhelp.isback=Draws in background iconhelp.inverse=Reflected angle iconhelp.angle?=Size # Version 2.28 message.objecttracker.stop=Autotrack: Click to stop (shift left/right for speed)! # Version 2.31 menu.settings.indicate=Preview generated objects menu.options.other=Settings menu.help.welcome=News on current version iconhelp.twolines=Icons in two lines iconhelp.qintersection=Ask for intersections iconhelp.qchoice=Show dialog for object selection iconhelp.qpointon=Ask to create point on object iconhelp.noindicate=Do not indicate objects under mouse # Version 2.33 menu.file.new=New Construction (Ctrl-n) # Version 2.34 edit.text.title=Text Settings edit.text.settings=Further Settings menu.settings.filedialog=Replace system file dialog # Version 2.35 menu.settings.bitmapbackground=Use Background Color in Bitmaps # Version 2.36 menu.file.savegraphics=Save Graphics as ... bmpscaler.title=Scale Graphics # Version 2.37 menu.file.savepdf=Save Graphics (as PDF) iconhelp.chord=Show as segment # Version 2.39 message.setfixedangle.first=Set fixed angle: First point? message.setfixedangle.second=Set fixed angle: Base point? message.setfixedangle.third=Set fixed angle: Third point? edit.fixedangle.set=Set Size ... message.setfixedcircle.first=Set fixed circle: First point? message.setfixedcircle.second=Set fixed circle: Second point? edit.fixedcircle.set=Set Size ... # Version 2.41 name.short.Track=Tr text.track=Track of % when % moves on % trackquestion.keep=Keep Track in Construction? trackquestion.title=Keep Track menu.options.track=Keep Track (Shift-Enter) iconhelp.indicate=Preview of construction results iconhelp.nohelp=No help available! # Version 2.42 objects.draw=Paint with Mouse menu.options.cleardraw=Clear Painting (Esc) iconhelp.draw=Paint with Mouse message.draw=Paint with Mouse (ESC to clear) shortcuts.draw=; # Version 2.43 message.rename=Rename A,B,C,...: Select objects! iconhelp.rename=Rename A,B,C,... objects.rename=Rename A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Don't show angle ray # Version 2.45 menu.settings.smartboard=Smartboard Mode shortcuts.zoom=% objects.zoom=Zoom with Mouse message.zoom=Drag center, or zoom in and out # Version 2.46 menu.special.restricticons=Restricted Icon Set # Version 2.47 menu.settings.indicate.simple=Indicate Points only menu.settings.beginner=Beginner Mode question.again=Always ask this question. # Version 2.49 definemacro.parameters=Parameter Prompt(s) ("=name" fixes) # Version 2.53 menu.actions.angles=Angles menu.actions.circles=Circles menu.actions.lines=Lines menu.actions.points=Points # Version 3.00 info.title=Context Help info.related=Related Topics info.notfound=Topic not found! info.noresults=String not found! info.searchresults=- Search results - info.select=- Select - info.search=Search info.back=Back info.start=Start iconhelp.info=Context help menu.help.info=Context help myfiledialog.homedir=CaR Files myfiledialog.windowshome=My Documents myfiledialog.mkdir=Make Directory myfiledialog.back=Back menu.file.alwaysclearmacros=Clear Macros before Loading about.language=Language bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Backups # Version 3.02 menu.options.hideduplicates=Hide Duplicates # Version 3.03 menu.options.function=Create a function or curve text.function=Function ( % , % ) function.varmin=From function.varmax=To function.dvar=Step function.var=Variable function.y=Expression for Y iconhelp.function=Create a Function+(Ctrl: Create a user defined function) menu.options.editlast=Edit last Object iconhelp.control.edit=Edit last Object iconhelp.control.hide=Hide Duplicates edit.function.title=Function or Curve iconhelp.control.runmacro=Run last macro again # Version 3.05 point.type.cross=Cross point.type.dcross=Diagonal Cross shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Unit menu.special.break=Breakpoints menu.bp.setbreak=Set Breakpoint menu.bp.clearbreak=Clear Breakpoint menu.bp.sethidingbreak=Set Hiding Breakpoint menu.bp.animatebreak=Animate Breakpoints iconhelp.animatebreak=Animate breakpoints message.animatebreak=Animate breakpoints: click to stop (shift left/right for speed)! menu.special.exporttemplate=HTML Export with Templates templateload.open=Load Template templateload.open.action=Open menu.settings.doubleclick=Double click for macros export.codebase=Codebase # Version 3.12 edit.equation=Equation # Version 3.23 menu.settings.squarepoints=Draw points always as squares # Version 3.37 menu.options.export=Graphic Export Settings menu.settings.minwidth=Minimal line width is 1 menu.settings.minpointsize=Respect minimal point size menu.settings.minfontsize=Respect minimal font size menu.options.minpointsize=Minimal Point Size menu.options.minfontsize=Minimal Font Size # Version 3.38 menu.settings.scalepdf=Scale PDF and EPS output 1:1 # Version 3.41 menu.file.clip=Clip for Graphics Output ... clip.title=Set Clipping clip.width=Width clip.height=Height clip.screen=No Clipping # Version 3.44 iconhelp.large=Use large font size iconhelp.bold=Use bold font menu.options.largefont=Large Font Size menu.options.boldfont=Bold Font warning.previewframe=Frame larger than window! message.move.select=Move: Select a point (shift: more points, ctrl: show old state)! # Version 3.46 iconbar.showseparators=Show Separators # Version 3.48 menu.options.printscaler=Set Export Size ... menu.options.exportsettings=Special Export Settings ... printscaler.title=Set Export Size printscaler.width=Width (in cm) printscaler.height=Height (in cm) printscaler.dpi=Resolution (in dpi, default 300) printscaler.linewidth=Line Width (in cm, default 0.02) printscaler.pointsize=Point Size (in cm, default 0.07) printscaler.textsize=Text Size (in cm, default 0.3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=Width (in pixel) printscaler.h=Height (in pixel) printscaler.scale=Scale (relativ to screen) printscaler.middle=Cut out from screen printscaler.sizes=Use Values menu.file.savepng=Save Graphics as PNG warning.preview=Preview will not work completely with Java 1.1 iconedit.showseparators=Show Separators printscaler.aspect=Keep Aspect Ratio printscaler.presets=Presets printscaler.preset=Make a Choice printscaler.preset.300dpi=Exactly scaled with 300 DPI printscaler.preset.300dpi6=6 cm Width with 300 DPI printscaler.preset.300dpi16=16 cm Width with 300 DPI printscaler.preset.window=Window Size printscaler.preset.clip50=Window Size Clipped 50% message.saving=Please wait! menu.options.printscalepreview=Export Preview (Ctrl-F3) date=Build # Version 3.51 help=Help # Version 3.61 editconditionals.title=Edit Conditionals editconditionals.hidden=Hidden editconditionals.superhidden=Completely Hidden editconditionals.visible=Normal editconditionals.showname=Show Name editconditionals.showvalue=Show Value editconditionals.background=Background editconditionals.solid=Not Transparent exception.superfluous=Superfluous Text in Expression # Version 3.63 select.comment.title=Macro Comment # Version 3.68 edit.area.area=Area # Version 3.73 myfiledialog.oldfiles=Old Files # Version 3.74 iconhelp.load=Load Construction (Ctrl-o) iconhelp.save=Save Construction (Ctrl-s) iconhelp.new=New Construction (Ctrl-n)+Ctrl: Load defaults # Version 3.81 warning.loadbackground=Error loading background # Version 3.9 function.x=Expression for X (empty for functions) # Version 3.91 constructiondisplay.select=Select constructiondisplay.all=All Objects constructiondisplay.visible=Visible Objects (Alt-Ctrl-9) constructiondisplay.points=Points constructiondisplay.lines=Lines constructiondisplay.circles=Circles constructiondisplay.angles=Angles constructiondisplay.other=Other Objects menu.file.copypng=Copy to Clipboard exception.clipboardcopy=Copy failed! menu.options.finegrid=Axis only # Vesion 3.93 edit.function.center=Set Center edit.function.free=Release Center message.setcenter=Select the center point! # Vesion 3.94 message.edit=Edit: Objekt (shift: more objects, ctrl: conditionals)? # Version 3.97 error.image=Image not in same folder as construction? filedialog.imageload=Load Image filedialog.imageload.action=Load prompt.image=image(,,,) objects.image=Image shortcuts.image=_ # Version 3.98 exception.depends=Object % depends on current object. error.depends=Object % depends on current object. constructiondisplay.sorted=Sorted by Order of Construction (Alt-Ctrl-0) # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Expressions # Version 4.00 iconhelp.image=Load Image (_) message.image=Image anchor point % message.image.last=Last image anchor point (or choose selected point) editconditionals.z=Z-Buffer Value # Version 4.01 name.FixedAngle=Fixed Angle # Version 4.04 menu.moresettings=Settings menu.settings.language=Set Language language.title=Set Language language.prompt=Language for next program start # Version 4.05 constructiondisplay.invalid=Invalid Objects # Version 4.08 menu.settings.constructiondisplay=Permanent Construction Display (F11) # Version 4.09 constructiondisplay.editconditions=Edit Conditions constructiondisplay.delete=Delete selected Objects constructiondisplay.hide=Hide or Show (Alt-Ctrl-4) constructiondisplay.superhide=Super Hide (Alt-Ctrl-5) # Version 4.2 edit.expression.slider=Show as Slider menu.grid.options=Grid Options menu.options.leftsnap=Snap with Left Button Drag menu.settings.boundingbox=Create Bounding Box (bb) file # Version 4.3 latexsettings.title=Setup LaTeX export latexsettings.boundingbox=Create Bounding box bb-file latexsettings.latexinput=Create LaTeX idx-file latexsettings.doubledollar=LaTeX does $$...$$ latexsettings.dollar=LaTeX does $...$ latexsettings.nodollar=LaTeX does all other strings latexsettings.fullpath=Use file path printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=12 cm width with 300 DPI printscaler.latex=Save for LaTeX menu.background.usewidth=Adjust height only # Version 4.4 menu.options.restricted=Restrict Intersections menu.options.sizes=Set Sizes ... sizesdialog.title=Sizes minlinesize.prompt=Minimal line width (default: 1) minpointsize.prompt=Minimal point size (default: 3) minfontsize.prompt=Minimal font size (default: 12) arrowsize.prompt=Arrow size (default: 10) selectionsize.prompt=Selection size (default: 1.5) warning.loadmacros=Error while loading a macro! warning.macrodefinition=% is used, but is not in macro! edit.circle.bounds=Show as Arc edit.circle.range=Set Arc ... # Version 4.5 edit.track.dmin=Minimal step (default 0.001) # Version 4.6 menu.settings.smallicons=Use small icons menu.settings.oldicons=Use old icons # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof=Track of % when % changes # Version 5 # Fix error.image edit.discrete=Discrete error.fixedsegment=Cannot fix this segment! export.zoom=Zoom with mouse export.popup=Popup menu # Version 5.1 edit.intersection.alternate=Can alternate export.restrictedmove=Restrict Movements # Version 6.0 # Fix message.boundedpoint # Fix iconhelp.new message.bindpoint=Bind point to object (Shift: continuous, Ctrl: inside object) edit.point.inside=Inside object edit.point.increment=Grid increment (0=free) edit.more=More ... menu.settings.more=Show button for conditional formats menu.file.loadexamples=Load Example ... menu.options.editgrid=Edit coordinate grid ... # Version 6.1 constructiondisplay.description=Show Description (Alt-Ctrl-1) constructiondisplay.size=Show Size or Coordinates (Alt-Ctrl-2) constructiondisplay.formula=Show Formula (Alt-Ctrl-3) menu.settings.germanpoints=Use | in coordinates # Version 6.2 # fix iconhelp.function menu.options.userfunction=User defined Function function.vars=Variables function.f=Function expression # Version 6.4 menu.special.macrobar=Macro bar menu.special.defaultmacrosinbar=Show default macros help.related=Related topics help.nexttopic=Next topic ./src/rene/zirkel/docs/CVS/RevisionCache/ZirkelProperties_es.properties#1.10000644000175000017500000011231611144764476025525 0ustar yvesyveslanguage=es_ version=Version homefile=index.html homepage=http://www.z-u-l.de/ about.title=Acerca de este programa about.name=Geometra Escolar about.programmed=Desarrollado por title=Geometra Escolar close=Cerrar ok=OK cancel=Cancelar done=Muy bien! message=Mensaje yes=Si no=No abort=anular true=verdadero false=falso warning.nojob=Esto no es un ejercicio! warning.print=No se puede imprimir! warning.reset=Esta opcin estar disponible la prxima vez que abra R.y.C.! question.title=Pregunta question.intersection=Crear esta interseccin? question.pointon=Crear punto en este objeto? colors.black=Negro colors.blue=Azul colors.green=Verde colors.brown=Cafe colors.cyan=Turqueza colors.red=Amarillo objects.point=Punto objects.segment=Segmento objects.line=Recta objects.ray=Semirrecta objects.circle=Crculo objects.intersection=Interseccin objects.move=Mover Punto objects.hide=Ocultar Objeto objects.edit=Editar Punto objects.tracker=Traza de Punto objects.objecttracker=Traza de Punto sobre Objeto objects.parallel=Recta paralela objects.plumb=Recta perpendicular objects.circle3=Comps objects.midpoint=Punto medio objects.quadric=Cnica objects.angle=Angulo objects.boundedpoint=Punto sobre Objeto objects.parameter=Definir parmetros de Macro objects.targets=Definir objetivos de Macro objects.definejob=Definir Ejercicio objects.runmacro=Ejecutar una Macro objects.delete=Borrar objetos y sus hijos objects.reorder=Reordenar objetos objects.animate=Animacin objects.expression=Frmula objects.area=Polgono objects.text=Texto objects.fixedcircle=Crculo de radio fijo objects.fixedangle=Angulo fijo objects.fixedsegment=Segmento de longitud fija iconhelp.point=Punto iconhelp.segment=Segmento iconhelp.line=Recta iconhelp.ray=Semirrecta iconhelp.circle=Crculo iconhelp.intersection=Interseccin iconhelp.move=Mover Punto iconhelp.hide=Ocultar Objeto iconhelp.edit=Editar Objeto iconhelp.tracker=Traza de Punto iconhelp.objecttracker= Traza Automtica iconhelp.parallel=Recta paralela iconhelp.plumb=Recta perpendicular iconhelp.circle3=Comps iconhelp.midpoint=Punto medio iconhelp.quadric=Cnica iconhelp.angle=Angulo iconhelp.boundedpoint=Punto sobre Objeto iconhelp.hidden=Mostrar u Ocultar Objetos ocultos iconhelp.color= Color predeterminado de Objeto iconhelp.type= Tipo predeterminado de Punto iconhelp.thickness=Grosor predeterminado de Objeto iconhelp.back=Borrar el ltimo Objeto iconhelp.type0=Tipo predeterminado de Punto iconhelp.thickness0=Grosor predeterminado de Objeto iconhelp.partial=Crculos Truncados iconhelp.plines=Rectas Truncadas iconhelp.arrow=Segmentos como Vectores iconhelp.showcolor=Mostrar colores seleccionados iconhelp.runmacro=Ejecutar Macro iconhelp.macro=Macro Parmetros/Objetivos/Definicin iconhelp.expression=Frmula iconhelp.showvalue=Mostrar valores de objetos iconhelp.showname=Mostrar nombre de objetos iconhelp.obtuse=Usar ngulos obtusos iconhelp.solid=No usar transparencia iconhelp.longnames=Nombres largos iconhelp.grid=Mostrar cuadrcula iconhelp.comment=Mostrar comentario iconhelp.defaults=Configuracin predeterminada iconhelp.macro0=Macro Parmetros/Objetivos/Definicin iconhelp.visual=Construccin Visual iconhelp.replay=Revisar Construccin iconhelp.oneforward=Adelante iconhelp.fastforward=Adelantar varios pasos iconhelp.allforward=Ir al fin iconhelp.oneback=Atras iconhelp.fastback=Atrasar varios pasos iconhelp.allback=Ir al comienzo iconhelp.close=Cerrar iconhelp.area=Polgono iconhelp.text=Texto iconhelp.fixedcircle=Crculo de radio fijo iconhelp.fixedangle=Angulo de amplitud fija iconhelp.fixedsegment=Segmento de longitud fija iconhelp.animate=Animar un punto iconhelp.delete=Borrar un objeto iconhelp.undo=Deshacer borrar iconhelp.nextbreak=Ir al siguiente alto iconhelp.setbreak=Toggle Break iconhelp.zoom=Zoom con el raton shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shurtcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.polygon=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.4=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) menu.file=Archivo menu.file.clearmacros=Borrar todas las macros menu.file.load=Abrir Construccin ... (Ctrl-o) menu.file.loadjob=Abrir Ejercicio ... (Ctrl-j) menu.file.savejob=Guardar Ejercicio como ... (Ctrl-k) menu.file.save=Guardar Construccin (Ctrl-s) menu.file.saveas=Guardar Construccin como ... (Ctrl-a) menu.file.includemacros=Incluir Macros menu.file.exit=Salir (Alt-F4) menu.file.print=Imprimir ... menu.file.print.isoscale=Escala 1:1 en cm menu.file.loadrun=Abrir Construccin Descriptiva (Ctrl-r) menu.file.savefig=FIG menu.file.editrun=Editar Construccin Descriptiva (Ctrl-x) menu.file.savebmp=BMP menu.actions=Acciones menu.actions.elementary=Herramientas bsicas menu.actions.complex=Herramientas complejas menu.actions.fixed=Objetos Fijos menu.actions.move=Herramientas de Movimiento menu.actions.decorative=Objetos Decorativos menu.options=Opciones menu.options.visual=Modo Visual menu.options.hidden=Mostrar objetos ocultos (F9) menu.options.comment=Comentario (F10) menu.options.constructiondisplay=Descripcin (F11) menu.options.grid=Mostrar Cuadrcula (F12) menu.options.setgrid=Definir ancho de cuadrcula ... menu.options.showcolor=Mostrar Color menu.options.defaultcolor=Color predeterminado menu.options.defaultthickness=Grosor predeterminado menu.options.defaulttype=Tipo predeterminado de punto menu.options.all=todos menu.options.setdigits=Nmero de dgitos menu.options.shownames=Mostrar nombres objetos (Ctrl-F6) menu.options.longnames=Nombres largos (Ctrl-F8) menu.options.obtuse=Usar ngulos obtusos (Ctrl-F12) menu.options.solid=No usar transparencia menu.options.showvalues=Mostrar valores (Ctrl-F7) menu.options.partial=crculos truncados (Ctrl-F9) menu.options.plines=Rectas Truncadas (Ctrl-F10) menu.options.arrow=Vector (Ctrl-F11) menu.options.editicons=Editar las herramientas menu.options.back=Borrar ltimo objeto (<-) menu.options.undo=Deshacer borrar (Ctrl-z) menu.zoom=Zoom menu.zoom.in=In (+) menu.zoom.out=Out (-) menu.zoom.left=Izquierda (Cursor-Left) menu.zoom.right=Derecha (Cursor-Right) menu.zoom.up=Arriba (Cursor-Up) menu.zoom.down=Abajo (Cursor-Down) menu.macros=Macros menu.special.definemacro=Definir Macro (Ctrl-F5) menu.special.runmacro=Ejecutar Macro (F5) menu.special.savemacros=Guardar Macros menu.special.loadmacros=Abrir Macros menu.special.deletemacros=Borrar Macros menu.special=Especial menu.special.testjob=Probar Ejercicio (Ctrl-F1) menu.special.jobcomment=Texto del Ejercicio (Ctrl-F10) menu.special.export=Exportar como HTML (Ctrl-e) menu.special.replay=Revisar Construccin menu.help=Ayuda menu.help.about=Acerca de este programa menu.help.browser=Explorar la Ayuda y Demos menu.help.text=Ayuda corta menu.help.configure=Configurar el navegador menu.help.help=Ayuda (F1) menu.help.macros=Las Macros menu.help.tools=Las Herramientas menu.help.gui=La Interface menu.help.interactive=Construcciones Descriptivas menu.help.tips=Consejos menu.settings=Propiedades especiales menu.settings.fullicons=Dos barras de iconos menu.settings.utf=Usar codificacin UTF-8 menu.settings.autohide=Ocultar la segunda interseccin menu.settings.iconbartop=Barra de herramientas arriba menu.settings.showtips=Mostrar nombre herramientas menu.settings.simplegraphics=Usar siempre Grficas simples menu.settings.sure=Confirmar antes de Abrir o cerrar menu.settings.simplegraphics=Grficas simples menu.settings.pointon=Confirmar creacin punto sobre objeto menu.settings.intersection=Confirmar creacin punto de interseccin menu.settings.choice=Mostrar lista de objetos menu.settings.movename=Mostrar los valores mientras se mueven menu.settings.movefixname=Mostrar los valores de objetos fijos menu.settings.restricted=Modo Escolar menu.colors=Editar los colores colors.default=Predefinidos colors.color0=Color 1 (negro) colors.color1=Color 2 (verde) colors.color2=Color 3 (azul) colors.color3=Color 4 (caf) colors.color4=Color 5 (Turqueza) colors.color5=Color 6 (Amarillo) colors.background=Fondo colors.select=Seleccionar colors.target=Objetivo myfiledialog.dir=Directorio myfiledialog.file=Archivo myfiledialog.pattern=tipo de archivo filedialog.open=Abrir filedialog.saveas=Guardar como ... filedialog.open.action=Abrir filedialog.saveas.action=Guardar filedialog.htmlsave=Guardar como HTML filedialog.htmlsave.action=Guardar pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Guardar load=Abrir abort=anular bound.release=Independizar Punto bound.bind=Atar a Objeto bound.error=No se encontr el objeto! constructiondisplay.edit=Editar Objeto constructiondisplay.copy=Copiar al portapapeles edit.Title=Propiedades edit.name=Nombre edit.hidden=Oculto edit.text=Texto edit.fixed=Fijo edit.color=Color edit.ok=OK edit.cancel=Cancelar edit.showname=Mostrar Nombre edit.point.title=Propiedades Punto edit.point.type=Tipo edit.point.x=X edit.point.y=Y edit.point.intersection=Diferente de edit.point.showvalue=Mostrar Coordenadas edit.point.colortype=Grosor edit.point.bound=Objeto al que pertenece edit.point.away=Lejos de edit.point.close=Cerca a edit.point.free=Libre edit.line.title=Propiedades Recta, semirrecta, segmento edit.line.normal=Normal edit.line.thick=Grueso edit.line.thin=Delgado edit.line.type=Tipo edit.segment.length=Longitud edit.segment.showvalue=Mostrar Longitud edit.circle.title=Propiedades crculo edit.circle.length=Radio edit.circle.partial=Truncada edit.circle.range=Definir rango edit.circle.killrange=Borrar rango edit.plumb.restricted=Restringida edit.angle.title=Propiedades Angulo edit.angle.length=Amplitud edit.angle.displaysize=Mostrar amplitud edit.angle.normal=Normal edit.angle.small=Pequeo edit.angle.large=Grande edit.expression.title=Editar Frmula edit.expression=Expresin Aritmtica edit.expression.prompt=Explicacin edit.area.title=Editar Area edit.area.back=En el fondo export.title=Exportar como HTML export.pagetitle=Titulo de la pgina export.width=Ancho export.height=Alto export.jar=Archivo Jar export.comment=Guardar comentario export.file=Archivo de construccin export.job=Mostrar como Ejercicio export.color=Color export.backgroundcolor=Usar como fondo export.appletcolor=Usar como fondo del applet export.plain=Plano export.3D=Borde export.breaks=Revisar con saltos export.icons=Borde e Iconos export.full=Borde, Iconos y Estado export.nonvisual=Borde, Iconos y linea de entrada export.style=Estilo del applet export.setcolor=Seleccionar Color export.savefirst=El archivo no se ha guardado! export.soltext=Solucin export.stylesheet=Archivo de estilo CSS export.solution=Archivo de solucin export.jumpsol=Ir a la Solucin export.linksol=Enlace a la Solucin export.savesol=Guardar Archivo de solucin export.track=Traza de Punto export.digits=Guardar Dgitos export.setsize=Definir Tamao export.signature=Creado con R.y.C. export.colors=Guardar Colores Definidos export.background=Guardar Fondo Definido help.title=Ayuda help.error=No puede abrirse el archivo! help.file=schoolgeometry.txt coloreditor.title=Editar Color coloreditor.red=Rojo coloreditor.green=Verde coloreditor.blue=Azul coloreditor.color=Color personalizado comment.title=Comentario de la construccin comment.set=Definir comment.cancel=Cancelar comment.close=Cerrar iconedit.title=Barra de herramientas iconedit.twobars=Barra de dos lneas jobcomment.title=Ejercicio select.title=Seleccion select.ok=OK select.cancel=Cancelar select.comment=Mostrar Comentario select.all=Todo message.circle.midpoint=crculo: Seleccione el centro! message.circle.radius=crculo: Seleccione un Punto para el radio del crculo! message.fixedcircle.midpoint=crculo de radio fijo: Seleccione el centro! message.fixedcircle.radius=crculo de radio fijo: Haga clic en cualquier parte! message.edit=Editar: Seleccione un objeto! message.line.first=Recta definida por dos puntos: Seleccione el primer Punto! message.line.second=Recta definida por dos puntos: Seleccione el segundo Punto! message.ray.first=Semirrecta: Seleccione el extremo! message.ray.second=Semirrecta: Seleccione un punto de la semirrecta! message.move.select=Mover: Seleccione un Punto! message.move.move=Mover: Mueva el Punto! message.point=Punto: Haga clic en la pantalla! message.segment.first=Segmento: Seleccione el primer Punto! message.segment.second=Segmento: Seleccione el segundo Punto! message.fixedsegment.first=Segmento de longitud fija: Primer extremo! message.fixedsegment.second=Segmento de longitud fija: Segundo extremo! message.intersection.first=Interseccin de dos objetos: Seleccione el primer objeto o el punto de interseccin! message.intersection.second=Interseccin: Seleccione el segundo objeto! message.hide=Ocultar/Mostrar: Seleccione un objeto! message.tracker.select=Traza: Seleccione el punto a trazar! message.tracker.selectpoint=Traza: Seleccione el punto mvil! message.tracker.move=Traza: Mueva el punto! message.objecttracker.select=Traza Automatica: Seleccione el punto a trazar (maysculas si es mas de uno)! message.objecttracker.object=Traza Automatica: Seleccione una Recta, un segmento, una semirrecta o un crculo! message.objecttracker.selectpoint=Traza Automatica: Seleccione el punto mvil! message.objecttracker.selectanypoint=Traza Automatica: Seleccione cualquier otro punto mvil! message.objecttracker.move=Traza Automatica: Mueva el Punto! message.objecttracker.start=Traza Automtica: Comenzar la animacin! message.parallel.first=Paralela: a quin? (recta, segmento, semirrecta)! message.parallel.second=Paralela: por donde? (punto)! message.plumb.first=Recta perpendicular: a quin? (recta, segmento, semirrecta)! message.plumb.second=Recta perpendicular: por donde? (punto)! message.circle3.first=Compas: Seleccione el primer punto del radio! message.circle3.second=Compas: Seleccione el segundo punto del radio! message.circle3.midpoint=Compas: Seleccione el centro! message.midpoint.first=Punto medio: Seleccione el primer Punto! message.midpoint.second=Punto medio: Seleccione el segundo Punto! message.quadric=Cnica: seleccione punto message.angle.first=Angulo: Seleccione el primer punto! message.angle.root=Angulo: Seleccione vrtice! message.angle.second=Angulo: Seleccione el segundo punto! message.fixedangle.first=Angulo de amplitud fija: Primer punto! message.fixedangle.root=Angulo de amplitud fija: Vrtice! message.fixedangle.second=Angulo de amplitud fija: Tercer punto! message.label.select=Mover Etiqueta: Seleccione una etiqueta! message.label.move=Mover Etiqueta: Mueva la etiqueta! message.boundedpoint=Punto sobre Objeto: Seleccione un crculo, un segmento, una semirrecta o una recta! message.parameters=Parmetros de la Macro: Seleccione objetos! message.targets=Objetivos de la Macro: Seleccione objetos! message.savejob.first=Definir Ejercicio: Seleccione el ltimo objeto a mostrar! message.savejob.second=Definir Ejercicio: Seleccione el objeto a construir! message.savejob.third=Definir Ejercicio: Seleccione otros objetos a mostrar! message.runmacro=Macro %: %. (Enter %) % message.runmacro.return=(Enter selecciona %) message.runmacro.fixes=(Mayscula fija la seleccin) message.delete=Borrar: Seleccione un objeto! message.reorder=Reordenar: Seleccione un objeto! message.expression=Frmula: Seleccione un lugar! message.area=Polgono: Seale uno a uno los vrtices! message.text=Text: Seleccione un lugar! message.animator.point=Animacin: animar qu punto? message.animator.segment=Animacin: Sobre qu objeto? (segmento o crculo) message.animator.running=Animacin: funcionando message.range.first=Arco desde este punto ... message.range.second=... hasta este punto! message.setaway.away=Lejos de este punto! message.setaway.close=Cerca a este punto! objectsedit.title=Editar Propiedades point.type.square=Cuadrado point.type.diamond=Diamante point.type.circle=crculo point.type.dot=Punto color.type.normal=Normal color.type.thick=Grueso color.type.thin=Delgado text.point=Punto en %, % text.line=Recta por % y % text.segment=Segmento entre % y % text.segment.fixed=Segmento desde % hasta % con longitud % text.ray=Semirrecta desde % que pasa por % text.intersection=Interseccin entre % y % text.circle=crculo de centro % por % text.circle.fixed=crculo de centro % por % con radio % text.fixedcircle=crculo de centro % con radio % text.circle3=crculo de centro % con radio desde % hasta % text.parallel=Recta por % paralela a % text.midpoint=Punto medio entre % y % text.quadric=Cnica por % text.plumb=Recta por % perpendicular a % text.angle=Angulo % - % - % text.angle.fixed=Angulo % - % - % de amplitud % text.boundedpoint=Punto sobre % text.expression=Frmula "%" en %, % text.area=Polgono text.fixedangle=Angulo % - % de % name.Point=Punto name.Intersection=Interseccin name.OtherIntersection=Interseccin name.Circle=crculo name.Circle3=crculo name.Segment=Segmento name.Ray=Semirrecta name.Line=Recta name.TwoPointLine=Recta con dos puntos name.Parallel=Paralela name.Midpoint=Punto medio name.Quadric=Cnica name.Plumb=Perpendicular name.Angle=Angulo name.PointOn=Punto sobre objeto name.Expression=Frmula name.Polygon=Polgono name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=sr name.short.Line=r name.short.Parallel=par name.short.Midpoint=M name.short.Quadric=Con name.short.Plumb=per name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=pol prompt.point==P prompt.pointon==P() prompt.line==r(,) prompt.segment==s(,) prompt.ray==sr(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Con(,,,,) prompt.parallel==par(,) prompt.plumb==per(,) prompt.angle==a(,,) prompt.area=Pol(,,) popup.hidden=Mostrar objetos ocultos popup.replay=Revisar Construccin popup.empty=--- Macros --- replay.title=Revisar construccin reorder.title=Enviar al fondo reorder.message=Insertar despues de reorder.notfound=No encuentro el objeto! reorder.warning=No puedo hacer eso! setgrid.title=Ancho de cuadrcula setgrid.prompt=Nuevo ancho de cuadricula setgrid.set=Definir definemacro.title=Definir Macro definemacro.name=Nombre definemacro.comment=Comentario de Macro definemacro.parameters=Mensaje de parmetro(s) definemacro.noparams=Faltan los parmetros de la macro! definemacro.nomacro=No hay ninguna macro! definemacro.targetsonly=Solo mostrar objetivos definemacro.invisible=Ocultar totalmente definemacro.promptfor=Mensaje para usuario macro.replace.title=Remplazar Macro macro.replace=Remplazar Macro: macro.replace.all=Todos macro.usage=Uso incorrecto de macro (ver consejos)! macro.prompt.title=Mensaje parmetros macro.prompt.prompt=Escriba un valor para el parmetro macro.prompt.illegal=Valor no vlido! digits.title=Definir dgitos digits.edit=Editar digits.lengths=Mostrar digits.angles=Angulos editrun.title=Editar Construccin Descriptiva editrun.run=Guardar y Ejecutar editrun.load=Otra Descripcin sure.title=Est seguro? sure.macros=Borrar todas las macros? sure.delete=Descartar los cambios? close.title=Fin close.prompt=Quiere cerrar el programa? file.exists.title=Archivo existente file.exists.overwrite=Ya existe el archivo! Sobreescribir? exception.nparams=Nnmero de parmetros no vlido! exception.notfound=No encuentro el objeto, o fue definido despues de la expresin! exception.type=Tipo de Objeto no vlido! exception.expression=Frmula no vlida! exception.canfix=Objeto no puede fijarse! exception.fix=Valor no vlido! exception.novalue=Valor no vlido! exception.elementary=Elemento no vlido en Frmula! exception.bracket=Falta un parntesis! exception.quotes=Faltan comillas! exception.dot=Dos puntos en un nmero! exception.nodigit=No hay dgitos en nmero! exception.function=Funcin desconocida! exception.parameter=Parmetro de funcin no vlido! exception.macro=Parmetro de macro no vlido! exception.name=Escriba un nombre! exception.job=Parmetro de ejercicio no vlido! exception.track=Parmetro de traza no vlido! exception.animate=Parmetros de animacin no vlidos! exception.boolean=Valor Booleano debe ser verdadero o falso! exception.value=Valor no vlido! exception.color=Color no vlido! exception.colortype=Grosor no vlido! exception.type=Tipo de punto no vlido! exception.macroparameter=Parmetro no vlido! exception.macrotarget=Objetivo no vlido! exception.prompt=No puede nombrarse as ese objeto! exception.prompt.parameter=El nombre del objeto no puede ser un parmetro! exception.parameters=Parmetro no vlido! exception.brackets=Parntesis no vlido! exception.double=Ese nombre no es nico! error.setaway=Este punto no est definido antes de la interseccin! error.objecttracker.depends=El punto depende de otro objeto! constructiondisplay.title=Construccin function.hide=Ocultar function.hide.short=ocultar function.rename=Nombre function.rename.short=nombre function.value=Valor function.value.short=valor function.window=Ventana function.window.short=V function.color=Color function.color.short=col function.thickness=Grosor function.thickness.short=gr function.type=Tipo function.type.short=tipo function.partial=Truncar function.partial.short=trunc function.fill=Rellenar function.fill.short=llenar function.back=Fondo function.back.short=fondo function.acute=Agudo function.acute.short=agudo function.obtuse=Obtuso function.obtuse.short=obtuso function.solid=Slido function.solid.short=slido function.restrict=Restringir function.restrict.short=restringir expression.value=Valor configure.title=Seleccionar Navegador configure.prompt=Comando del navegador # New Resources: background.error=No puedo abrir la imagen (GIF or JPG!). menu.background=Fondo menu.background.grab=poner esta imagen de fondo menu.background.clear=Borrar el fondo menu.background.load=Abrir imagen de fondo ... menu.background.usesize=adaptar el tamao a la imagen menu.background.tile=fondo teselado menu.background.center=Centrar el fondo iconhelp.grab=definir o borrar el fondo filedialog.backgroundload=Abrir fondo filedialog.backgroundload.action=Abrir # New Resources in Version 2.14 menu.file.compress=Comprimir siempre menu.file.savesvg=SVG # Version 2.15 loading=abriendo, por favor esperar! # Version 2.18 and 2.19 menu.settings.font.default=fuente predeterminada menu.settings.font.bold=fuente Negrita menu.settings.font.large=fuente ancha menu.file.saveeps=EPS menu.fonts=Fuente # Version 2.20 bmpscaler.title=Bitmap a escala bmpscaler.width=ancho bmpscaler.height=Alto bmpscaler.scale=Factor (presione Enter) bmpscaler.illegal=Valor no vlido # Version 2.21 renamemacro.title=Cambiar nombre Macro renamemacro.name=nuevo nombre Macro menu.special.renamemacro=Cambiar nombre... # Version 2.23 savequestion.title=Guardar la construccin savequestion.qsave=Guardar los cambios? # Version 2.25 exception.printsize=La construccin no cabe en la pgina! iconhelp.nohelp=No hay ayuda disponible iconhelp.type?=tipo de punto iconhelp.thickness?=grosor iconhelp.color?=Color iconhelp.filled=Relleno iconhelp.isback=Dibujar en el fondo iconhelp.inverse=Reflected angle iconhelp.angle?=Tamao # Version 2.28 message.objecttracker.stop=Traza: detener la animacin (shift left/right for speed)! # Version 2.31 menu.settings.indicate=Vista previa de objetos menu.options.other=configuracion menu.help.welcome=Novedades de esta versin iconhelp.twolines=Iconos en dos lneas iconhelp.qintersection=Preguntar antes de crear intersecciones iconhelp.qchoice=Mostrar ventana de seleccin de objetos iconhelp.qpointon=Preguntar antes de crear punto sobre objeto iconhelp.noindicate=NO indicar objetos bajo el ratn # Version 2.33 menu.file.new=Nueva Construccin (Ctrl-n) # Version 2.34 edit.text.title=Configuracin de textos edit.text.settings=Otras opciones menu.settings.filedialog=Remplazar el sistema de archivos # Version 2.35 menu.settings.bitmapbackground=Usar Color de fondo en Bitmaps # Version 2.36 menu.file.savegraphics=Guardar como ... bmpscaler.title=redimensionar # Version 2.37 menu.file.savepdf=PDF iconhelp.chord=Mostrar como segmento # Version 2.39 message.setfixedangle.first=Angulo fijo: Primer punto? message.setfixedangle.second=Angulo fijo: punto central? message.setfixedangle.third=Angulo fijo:tercer punto? edit.fixedangle.set=Definir tamao ... message.setfixedcircle.first=Circulo fijo: primer punto? message.setfixedcircle.second=Circulo fijo: Segundo punto? edit.fixedcircle.set=Definir tamao ... # Version 2.40 minpointsize.title=Definir tamao mnimo de puntos minpointsize.prompt=Tamao mnimo (predeterminado: 3) menu.settings.font.minpointsize=Tamao mnimo ... # Version 2.41 name.short.Track=Tr text.track=Traza de % cuando % se mueve sobre % trackquestion.keep=Mantener la traza? trackquestion.title=Mantener la traza menu.options.track=Mantener lugar geometrico (Shift-Enter) iconhelp.indicate=Vista previa de la construccin iconhelp.nohelp=No hay ayuda disponible! # Version 2.42 objects.draw=Dibujar con el raton menu.options.cleardraw=Borrar el dibujo (Esc) iconhelp.draw=Dibujar con el raton message.draw=dibujar con el raton (ESC para borrar) shortcuts.draw=; # Version 2.43 message.move.select=Mover: Seleccione un punto (Mayusucla: muestra el estado anterior) message.rename=Cambiar nombre A,B,C,...: Seleccione un objeto! iconhelp.rename=Cambiar nombre A,B,C,... objects.rename=Cambiar nombre A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Ocultar la semirrecta del angulo # Version 2.45 menu.settings.smartboard=Modo Smartboard shortcuts.zoom=% objects.zoom=Zoom con el raton message.zoom=Arrastre el centro, o haga zoom # Version 2.46 menu.special.restricticons=Herramientas reducidas # Version 2.47 menu.settings.indicate.simple=Indica solo puntos menu.settings.beginner=Modo Principiante question.again=Preguntar siempre. # Version 2.49 definemacro.parameters=Mensajes ("=name" fixes) # Version 2.53 menu.actions.angles=Angulos menu.actions.circles=Circulos menu.actions.lines=Rectas menu.actions.points=Puntos # Version 3.00 info.title=Ayuda info.related=Temas Relacionados info.notfound=No encuentro este tema! info.noresults=No encuentro esa palabra! info.searchresults=- buscando - info.select=- seleccionar - info.search=Buscar info.back=Atras info.start=Comenzar iconhelp.info=Ayuda menu.help.info=Ayuda myfiledialog.homedir=Archivos RyC myfiledialog.windowshome=Mis documentos myfiledialog.mkdir=Crear Directorio myfiledialog.back=Atras menu.file.alwaysclearmacros=Borrar las macros antes de abrir about.language=Idioma bmpscaler.72dpi=72 dpi bmpscaler.72dpi=300 dpi # Version 3.01 menu.settings.backups=Backups # Version 3.02 menu.options.hideduplicates=Ocultar duplicados # Version 3.03 menu.options.function=Crear una Funcin text.function=Funcin ( % , % ) function.varmin=Desde function.varmax=Hasta function.dvar=Paso function.var=Variable function.x=X function.y=Y iconhelp.function=Crear una Funcin menu.options.editlast=Editar ltimo objeto iconhelp.control.edit=Editar ltimo objeto iconhelp.control.hide=Ocultar duplicados edit.function.title=Funcin o curva iconhelp.control.runmacro=Ejecutar macro de nuevo # Version 3.05 point.type.cross=Cruz point.type.dcross=Cruz diagonal shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Unidad menu.special.break=salto menu.bp.setbreak=definir salto menu.bp.clearbreak=borrar salto menu.bp.sethidingbreak=definir salto oculto menu.bp.animatebreak=Animacin con saltos iconhelp.animatebreak=Animar saltos message.animatebreak=Animar saltos: clic para parar (shift izqu/der para velocidad)! menu.special.exporttemplate=Exportar HTML con modelos templateload.open=Abrir modelo templateload.open.action=abrir menu.settings.doubleclick=Doble Clic para macros export.codebase=Codebase # Version 3.12 edit.equation=Ecuacin # Version 3.23 menu.settings.squarepoints=Dibujar puntos siempre como cuadrados # Version 3.37 menu.options.export=Propiedades de exportacin de grficas menu.settings.minwidth=Ancho mnimo de lneas es 1 menu.settings.minpointsize=Respetar el tamao mnimo de punto menu.settings.minfontsize=Respetar el tamao mnimo de fuente minfontsize.title=Definir tamao mnimo de fuente minfontsize.prompt=Tamao mnimo de fuente (predeterminado: 12) menu.options.minpointsize=Tamao mnimo de punto menu.options.minfontsize=Tamao mnimo de punto # Version 3.38 menu.settings.scalepdf=Escala de PDF y EPS 1:1 # Version 3.41 menu.file.clip=Clip for Graphics Output ... clip.title=Set Clipping clip.width=ancho clip.height=alto clip.screen=No Clipping # Version 3.42 menu.options.arrowsize=Tamao flecha ... arrowsize.title=Tamao flecha # Version 3.44 iconhelp.large=Usar tamao grande de fuente iconhelp.bold=Usar negrita menu.options.largefont=Tamao grande de fuente menu.options.boldfont=Negrita warning.previewframe=El cuadro sale de la ventana! message.move.select=Mover: Seleccione un punto (shift: mas puntos, ctrl: muestra la posicin original)! # Version 3.46 iconbar.showseparators=Mostrar separadores # Version 3.48 menu.sizes=Definir tamaos menu.options.minlinesize=Ancho mnimo de lneas ... minlinesize.title=Ancho mnimo de lneas minlinesize.prompt=Ancho mnimo de lneas (Predeterminado 1) arrowsize.prompt=Definir tamao de flechas (Predeterminado: 10) menu.options.printscaler=Definir tamao de Exportacin ... menu.options.exportsettings=Propiedades especiales de exportacin ... printscaler.title=Definir Tamao de Exportacin printscaler.width=Ancho (en cm) printscaler.height=Alto (en cm) printscaler.dpi=Resolucin (en dpi, predeterminado 300) printscaler.linewidth=Ancho lnea (en cm, predeterminado 0.02) printscaler.pointsize=Tamao punto (en cm, predeterminado 0.07) printscaler.textsize=Tamao Texto (en cm, predeterminado 0.3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=Ancho (en pixeles) printscaler.h=Alto (en pixeles) printscaler.scale=Escala (con respecto a la pantalla) printscaler.middle=Cortar (no ajustar) printscaler.sizes=Ajustar lneas, fuentes y puntos menu.file.savepng=Guardar Graficas como PNG warning.preview=Vista Previa no funciona en Java 1.1 iconedit.showseparators=Mostrar Separadores printscaler.aspect=Mantener escala printscaler.presets=Valores predefinidos printscaler.preset=Seleccionar printscaler.preset.300dpi=Escala exacta con 300 DPI printscaler.preset.300dpi6=6 cm de ancho con 300 DPI printscaler.preset.300dpi16=16 cm de ancho con 300 DPI printscaler.preset.window=Tamao Ventana printscaler.preset.clip50=Tamao ventana a 50% message.saving=Espere! menu.options.printscalepreview=Vista Previa de Exportacin (Ctrl-F3) date=construir # Version 3.51 help=Ayuda # Version 3.61 editconditionals.title=Editar Condiciones editconditionals.hidden=Ocultos editconditionals.superhidden=Totalmente ocultos editconditionals.visible=Normal editconditionals.showname=Mostrar Nombre editconditionals.showvalue=Mostrar Valor editconditionals.background=Fondo editconditionals.solid=Opaco exception.superfluous=Texto sobrante en frmula # Version 3.62 menu.options.selectionsize=Definir tamao Seleccin selectionsize.title=Tamao Seleccin selectionsize.prompt=Tamao seleccin (predeterminado 1.5) # Version 3.63 select.comment.title=Comentario Macro # Version 3.68 edit.area.area=Area # Version 3.73 myfiledialog.oldfiles=Archivos existentes # Version 3.74 iconhelp.load=Abrir construccin (Ctrl-o) iconhelp.save=Guardar construccin (Ctrl-s) iconhelp.new=Nueva construccin (Ctrl-n) # Version 3.81 warning.loadbackground=Error al abrir el fondo # Version 3.9 function.x=Expresin para X (vaco para funciones) # Version 3.91 constructiondisplay.select=Seleccionar constructiondisplay.all=Todos los objetos constructiondisplay.visible=Objetos Visibles constructiondisplay.points=Puntos constructiondisplay.lines=Rectas constructiondisplay.circles=Crculos constructiondisplay.angles=Angulos constructiondisplay.other=Otros objetos menu.file.copypng=Copiar al portapapeles exception.clipboardcopy=Fallo la copia! menu.options.finegrid=Slo los ejes # Vesion 3.93 edit.function.center=Definir el centro edit.function.free=Liberar el centro message.setcenter=Seleccione el punto centro! # Vesion 3.94 message.edit=Editar: Objeto (May: ms objetos, ctrl: condiciones)? # Version 3.95 edit.function.special=Slo puntos # Version 3.97 error.image=Error al abrir la imagen! filedialog.imageload=Abri Imagen filedialog.imageload.action=Abrir prompt.image=imagen(,,,) objects.image=Imagen shortcuts.image=_ # Version 3.98 exception.depends=Objeto % depende del objeto actual. error.depends=Objeto % dependde del objeto actual. constructiondisplay.sorted=en orden de creacin # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Expresiones # Version 4.00 iconhelp.image=Abrir Imagen (_) message.image=Amarrar imagen al punto % message.image.last=Punto de amarre ltima imagen (o punto seleccionado) editconditionals.z=Z-Buffer Value # Version 4.01 name.FixedAngle=Angulo fijo # Version 4.04 menu.moresettings=Propiedades menu.settings.language=Idioma language.title=Idioma language.prompt=Idioma prxima sesin # Version 4.05 constructiondisplay.invalid=Objetos no vlidos # Version 4.08 menu.settings.constructiondisplay=Descripcin permanente (F11) # Version 4.09 constructiondisplay.editconditions=Editar Condiciones constructiondisplay.delete=borrar objetos seleccionados constructiondisplay.hide=ocultar/Mostrar constructiondisplay.superhide=Super Ocultar # Version 4.2 edit.expression.slider=Mostrar como cursor menu.grid.options=Opciones de cuadrcula menu.options.leftsnap=Mover por cuadricula con boton izquierdo menu.settings.boundingbox=Create Bounding Box (bb) file # Version 4.3 latexsettings.title=Setup LaTeX export latexsettings.boundingbox=Create Bounding box bb-file latexsettings.latexinput=Create LaTeX idx-file latexsettings.doubledollar=LaTeX does $$...$$ latexsettings.dollar=LaTeX does $...$ latexsettings.nodollar=LaTeX does all other strings latexsettings.fullpath=Use file path printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=12 cm width with 300 DPI printscaler.latex=Save for LaTeX menu.background.usewidth=Ajustar slo la altura # Version 4.4 menu.options.restricted=Restringir intersecciones menu.options.sizes=definir tamaos ... sizesdialog.title=tamaos minlinesize.prompt=espesor mnimo de lneas (default: 1) minpointsize.prompt=tamao mnimo de punto (default: 3) minfontsize.prompt=tamao mnimo de letra (default: 12) arrowsize.prompt=tamao de flecha (default: 10) selectionsize.prompt=tamao de seleccin (default: 1.5) warning.loadmacros=Error al abrir macro! warning.macrodefinition=% fue usado, pero no est en la macro! edit.circle.bounds=mostrar como arco edit.circle.range=definir arco ... # Version 4.5 edit.track.dmin=paso mnimo (predefinido 0.001) # Version 4.6 menu.settings.smallicons=Usar iconos pequeos menu.settings.oldicons=Usar antiguos iconos # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof=Traza de % cuando % cambia # Version 5 # Fix error.image edit.discrete=Discreto error.fixedsegment=no puedo fijar ese segmento! export.zoom=Zoom con el ratn export.popup=menu Popup # Version 5.1 edit.intersection.alternate=pueden intercambiarse export.restrictedmove=Restringir movimiento # Version 6.0 # Fix message.boundedpoint # Fix iconhelp.new message.bindpoint=Ligar el punto al objeto (May: borde, Ctrl: interior) edit.point.inside=Dentro del objeto edit.point.increment=Incremento de cuadricula (0=free) edit.more=Mas ... menu.settings.more=Mostrar boton para formato condicional menu.file.loadexamples=Abrir ejemplo ... menu.options.editgrid=Editar la cuadricula ... # Version 6.1 constructiondisplay.description=Mostrar descripcin (Alt-Ctrl-1) constructiondisplay.size=Mostrar tamao o coordenadas (Alt-Ctrl-2) constructiondisplay.formula=Mostrar Formula (Alt-Ctrl-3) menu.settings.germanpoints=Usar | en coordenadas ./src/rene/zirkel/docs/CVS/RevisionCache/ZirkelProperties_ru.properties#1.10000644000175000017500000027204111144764476025546 0ustar yvesyveslanguage=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 (ru) version=\u0412\u0435\u0440\u0441\u0438\u044f homefile=index.html homepage=http://mathsrv.ku-eichstaett.de/MGF/homes/grothmann/java/zirkel/doc_ru/ about.title=\u041e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 about.name=Zirkel (\u0426\u0438\u0440\u043a\u0443\u043b\u044c) about.programmed=\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430... title=\u0428\u043a\u043e\u043b\u044c\u043d\u0430\u044f \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c ok=OK cancel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c done=\u0413\u043e\u0442\u043e\u0432\u043e! message=\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 yes=\u0414\u0430 no=\u041d\u0435\u0442 abort=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c true=\u0412\u0435\u0440\u043d\u043e false=\u041d\u0435\u0432\u0435\u0440\u043d\u043e warning.nojob=\u041d\u0435\u0442 \u0437\u0430\u0434\u0430\u043d\u0438\u044f! warning.print=\u041f\u0435\u0447\u0430\u0442\u044c \u043f\u0440\u0435\u0440\u0432\u0430\u043d\u0430. warning.reset=\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u043e\u0448\u043b\u043e \u0432 \u0441\u0438\u043b\u0443. question.title=\u0412\u043e\u043f\u0440\u043e\u0441 question.intersection=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435? question.pointon=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u043d\u0430 \u044d\u0442\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0435? colors.black=\u0427\u0435\u0440\u043d\u044b\u0439 colors.blue=\u0421\u0438\u043d\u0438\u0439 colors.green=\u0417\u0435\u043b\u0435\u043d\u044b\u0439 colors.brown=\u041a\u043e\u0440\u0438\u0447\u043d\u0435\u0432\u044b\u0439 colors.cyan=\u0413\u043e\u043b\u0443\u0431\u043e\u0439 colors.red=\u041a\u0440\u0430\u0441\u043d\u044b\u0439 objects.point=\u0422\u043e\u0447\u043a\u0430 objects.segment=\u041e\u0442\u0440\u0435\u0437\u043e\u043a objects.line=\u041f\u0440\u044f\u043c\u0430\u044f objects.ray=\u041b\u0443\u0447 objects.circle=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c objects.intersection=\u041f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 objects.move=\u0421\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443 objects.hide=\u0421\u043a\u0440\u044b\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 objects.edit=\u041f\u0440\u0430\u0432\u043a\u0430 \u0442\u043e\u0447\u043a\u0438 objects.tracker=\u0422\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u043a\u0438 \u0438\u043b\u0438 \u043b\u0438\u043d\u0438\u0438 objects.objecttracker=\u0422\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u043a\u0438 \u0438\u043b\u0438 \u043b\u0438\u043d\u0438\u0438 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 objects.parallel=\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u044f\u043c\u0430\u044f objects.plumb=\u041f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440 objects.circle3=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u0442\u0440\u0451\u043c \u0442\u043e\u0447\u043a\u0430\u043c objects.midpoint=\u0421\u0440\u0435\u0434\u0438\u043d\u043d\u0430 objects.quadric=\u041a\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u0435\u0447\u0435\u043d\u0438\u0435 objects.angle=\u0423\u0433\u043e\u043b objects.boundedpoint=\u0422\u043e\u0447\u043a\u0430 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 objects.parameter=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b objects.targets=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0446\u0435\u043b\u0435\u0432\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b objects.definejob=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435 objects.runmacro=\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 objects.delete=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0438\u0445 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432 objects.reorder=\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0444\u043e\u043d\u043e\u043c objects.animate=\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f objects.expression=\u0410\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 objects.area=\u041c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a objects.text=\u0422\u0435\u043a\u0441\u0442 objects.fixedcircle=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 objects.fixedangle=\u0424\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0443\u0433\u043e\u043b objects.fixedsegment=\u041e\u0442\u0440\u0435\u0437\u043e\u043a \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 iconhelp.point=\u0422\u043e\u0447\u043a\u0430 iconhelp.segment=\u041e\u0442\u0440\u0435\u0437\u043e\u043a iconhelp.line=\u041f\u0440\u044f\u043c\u0430\u044f iconhelp.ray=\u041b\u0443\u0447 iconhelp.circle=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c iconhelp.intersection=\u041f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 iconhelp.move=\u0414\u0432\u0438\u0433\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443 iconhelp.hide=\u0421\u043a\u0440\u044b\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 iconhelp.edit=\u041f\u0440\u0430\u0432\u043a\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 iconhelp.tracker=\u0422\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u043a\u0438 \u0438\u043b\u0438 \u043f\u0440\u044f\u043c\u043e\u0439 iconhelp.objecttracker=\u0410\u0432\u0442\u043e\u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u043a\u0438 \u0438\u043b\u0438 \u043f\u0440\u044f\u043c\u043e\u0439 iconhelp.parallel=\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u044f\u043c\u0430\u044f iconhelp.plumb=\u041f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440 iconhelp.circle3=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u0442\u0440\u0451\u043c \u0442\u043e\u0447\u043a\u0430\u043c iconhelp.midpoint=\u0421\u0440\u0435\u0434\u0438\u043d\u0430 iconhelp.quadric=\u041a\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u044f\u0442\u0438 \u0442\u043e\u0447\u043a\u0430\u043c iconhelp.angle=\u0423\u0433\u043e\u043b iconhelp.boundedpoint=\u0422\u043e\u0447\u043a\u0430 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 iconhelp.hidden=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c/\u0441\u043a\u0440\u044b\u0442\u044c \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b iconhelp.color=\u0426\u0432\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e iconhelp.type=\u0422\u0438\u043f \u0442\u043e\u0447\u043a\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e iconhelp.type0=\u0422\u0438\u043f \u0442\u043e\u0447\u043a\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e iconhelp.thickness=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e iconhelp.back=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 iconhelp.thickness0=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e iconhelp.partial=\u041d\u0435\u043f\u043e\u043b\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438 iconhelp.plines=\u0427\u0430\u0441\u0442\u0438 \u043f\u0440\u044f\u043c\u044b\u0445 iconhelp.arrow=\u041e\u0442\u0440\u0435\u0437\u043a\u0438 \u0432 \u0432\u0438\u0434\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 iconhelp.showcolor=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430 iconhelp.runmacro=\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 iconhelp.macro=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 (\u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442) iconhelp.expression=\u0410\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 iconhelp.showvalue=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430 iconhelp.showname=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 iconhelp.obtuse=\u0421\u0442\u0440\u043e\u0438\u0442\u044c \u0443\u0433\u043b\u044b \u0431\u043e\u043b\u044c\u0448\u0435 180\u00b0 iconhelp.solid=\u041d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c iconhelp.longnames=\u041f\u043e\u043b\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 iconhelp.grid=\u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043d\u0430\u044f \u0441\u0435\u0442\u043a\u0430 iconhelp.comment=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 iconhelp.defaults=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e iconhelp.macro0=\u041c\u0430\u043a\u0440\u043e\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b/\u0426\u0435\u043b\u0435\u0432\u044b\u0435 \u041e\u0431\u044a\u0435\u043a\u0442\u044b/\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 iconhelp.visual=\u0411\u0435\u0437 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u0432\u043e\u0434\u0430 iconhelp.replay=\u041f\u0440\u043e\u0438\u0433\u0440\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 iconhelp.oneforward=\u0412\u043f\u0435\u0440\u0435\u0434 iconhelp.fastforward=\u041f\u0435\u0440\u0435\u043c\u043e\u0442\u043a\u0430 \u0432\u043f\u0435\u0440\u0435\u0434 iconhelp.allforward=\u0412 \u043a\u043e\u043d\u0435\u0446 iconhelp.oneback=\u041d\u0430\u0437\u0430\u0434 iconhelp.fastback=\u041f\u0435\u0440\u0435\u043c\u043e\u0442\u043a\u0430 \u043d\u0430\u0437\u0430\u0434 iconhelp.allback=\u0412 \u043d\u0430\u0447\u0430\u043b\u043e iconhelp.close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c iconhelp.area=\u041c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a iconhelp.text=\u041c\u043d\u043e\u0433\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 iconhelp.fixedcircle=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0440\u0430\u0434\u0438\u0443\u0441\u043e\u043c iconhelp.fixedangle=\u0423\u0433\u043e\u043b \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b iconhelp.fixedsegment=\u041e\u0442\u0440\u0435\u0437\u043e\u043a \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 iconhelp.animate=\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0442\u043e\u0447\u043a\u0438 iconhelp.delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043c\u043a\u0430\u043c\u0438 iconhelp.undo=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 iconhelp.nextbreak=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044e iconhelp.setbreak=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0438 shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.showcolor.4= shortcuts.showcolor.5= shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) menu.file=\u0424\u0430\u0439\u043b menu.file.clearmacros=\u0423\u0431\u0440\u0430\u0442\u044c \u0432\u0430\u0448\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u044b menu.file.load=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435...(Ctrl-o) menu.file.loadjob=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435...(Ctrl-j) menu.file.savejob=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435...(Ctrl-k) menu.file.save=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 (Ctrl-s) menu.file.saveas=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043a\u0430\u043a...(Ctrl-a) menu.file.includemacros=\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0441\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b menu.file.exit=\u0412\u044b\u0445\u043e\u0434 (Alt-F4) menu.file.print=\u041f\u0435\u0447\u0430\u0442\u044c... menu.file.print.isoscale=\u041c\u0430\u0441\u0448\u0442\u0430\u0431 1:1 \u0432 \u0441\u043c menu.file.savebmp=BMP-\u0444\u0430\u0439\u043b... menu.file.savefig=FIG-\u0444\u0430\u0439\u043b... menu.file.loadrun=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c run-\u0444\u0430\u0439\u043b...(Ctrl-r) menu.file.editrun=\u041f\u0440\u0430\u0432\u043a\u0430 run-\u0444\u0430\u0439\u043b\u0430...(Ctrl-x) menu.actions=\u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f menu.actions.elementary=\u041f\u0440\u043e\u0441\u0442\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b menu.actions.complex=\u0421\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b menu.actions.fixed=\u0424\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b menu.actions.move=\u0414\u0438\u043d\u0430\u043c\u0438\u043a\u0430 menu.actions.decorative=\u0421\u043b\u043e\u0436\u043d\u044b\u0435/\u0434\u0435\u043a\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b menu.options=\u0421\u0442\u0438\u043b\u044c menu.options.visual=\u0411\u0435\u0437 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u0432\u043e\u0434\u0430 (Ctrl-F6) menu.options.hidden=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b (F9) menu.options.comment=\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 (F10) menu.options.constructiondisplay=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 (F11) menu.options.grid=\u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043d\u0430\u044f \u0441\u0435\u0442\u043a\u0430 (F12) menu.options.setgrid=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0448\u0438\u0440\u0438\u043d\u0443 \u0441\u0435\u0442\u043a\u0438... menu.options.showcolor=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0446\u0432\u0435\u0442 menu.options.defaultcolor=\u0426\u0432\u0435\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e menu.options.defaultthickness=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e menu.options.defaulttype=\u0422\u0438\u043f \u0442\u043e\u0447\u043a\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e menu.options.all=\u0412\u0441\u0435 menu.options.setdigits=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c menu.options.shownames=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (Ctrl-F6) menu.options.longnames= \u041f\u043e\u043b\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (Ctrl-F8) menu.options.obtuse=\u0421\u0442\u0440\u043e\u0438\u0442\u044c \u0443\u0433\u043e\u043b\u044b \u0431\u043e\u043b\u044c\u0448\u0435 180\u00b0 (Ctrl-F12) menu.options.solid=\u041d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c menu.options.showvalues=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430 (Ctrl-F7) menu.options.partial=\u041d\u0435\u043f\u043e\u043b\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438 (Ctrl-F9) menu.options.plines=\u0427\u0430\u0441\u0442\u0438 \u043f\u0440\u044f\u043c\u044b\u0445 (Ctrl-F10) menu.options.arrow=\u0421\u0442\u0440\u0435\u043b\u043a\u0438 (Ctrl-F11) menu.options.editicons=\u041f\u0440\u0430\u0432\u043a\u0430 \u043d\u0430\u0431\u043e\u0440\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 menu.options.back=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 menu.options.undo=\u041e\u0442\u043c\u0435\u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f (Ctrl-z) menu.zoom=\u041c\u0430\u0441\u0448\u0442\u0430\u0431 \u0438 \u0441\u0434\u0432\u0438\u0433 menu.zoom.in=\u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 (+) menu.zoom.out=\u0423\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 (-) menu.zoom.left=\u0412\u043b\u0435\u0432\u043e (\u043a\u0443\u0440\u0441\u043e\u0440-\u0432\u043b\u0435\u0432\u043e) menu.zoom.right=\u0412\u043f\u0440\u0430\u0432\u043e (\u043a\u0443\u0440\u0441\u043e\u0440-\u0432\u043f\u0440\u0430\u0432\u043e) menu.zoom.up=\u0412\u0432\u0435\u0440\u0445 (\u043a\u0443\u0440\u0441\u043e\u0440-\u0432\u0432\u0435\u0440\u0445) menu.zoom.down=\u0412\u043d\u0438\u0437 (\u043a\u0443\u0440\u0441\u043e\u0440-\u0432\u043d\u0438\u0437) menu.macros=\u041c\u0430\u043a\u0440\u043e\u0441 menu.special.definemacro=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 (Ctrl-F5) menu.special.runmacro=\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441...(F5) menu.special.savemacros=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441... menu.special.loadmacros=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 ... menu.special.deletemacros=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441... menu.special=\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 menu.special.testjob=\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435 (Ctrl-F1) menu.special.jobcomment=\u0422\u0435\u043a\u0441\u0442 \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f... (F8) menu.special.export=\u0412 \u0432\u0438\u0434\u0435 HTML... (Ctrl-e) menu.special.replay=\u041f\u0440\u043e\u0438\u0433\u0440\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 menu.help=\u041f\u043e\u043c\u043e\u0449\u044c menu.help.about=\u041e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 menu.help.browser=\u041f\u043e\u043c\u043e\u0449\u044c \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 menu.help.text=\u041f\u0435\u0440\u0432\u0430\u044f \u043f\u043e\u043c\u043e\u0449\u044c menu.help.configure=\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 menu.help.help=\u041f\u043e\u043c\u043e\u0449\u044c (F1) menu.help.macros=\u041e \u043c\u0430\u043a\u0440\u043e\u0441\u0435 menu.help.tools=\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b menu.help.gui=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 menu.help.interactive=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f menu.help.tips=\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0432\u0435\u0442\u044b menu.settings=\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 menu.settings.fullicons=\u0414\u0432\u0430 \u043f\u043e\u043b\u043d\u044b\u0445 \u0440\u044f\u0434\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 menu.settings.utf=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 UTF-8 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438 menu.settings.autohide=\u0421\u043a\u0440\u044b\u0442\u044c \u0432\u0442\u043e\u0440\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f menu.settings.iconbartop=\u041f\u0430\u043d\u0435\u043b\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430\u0434 \u0447\u0435\u0440\u0442\u0435\u0436\u043e\u043c menu.settings.showtips=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 menu.settings.simplegraphics=\u0412\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0433\u0440\u0430\u0444\u0438\u043a\u0443 menu.settings.sure=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435\u043c menu.settings.pointon=\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0442\u043e\u0447\u043a\u0438 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 menu.settings.intersection=\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f menu.settings.choice=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u0438\u0430\u043b\u043e\u0433 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 menu.settings.movename=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f menu.settings.movefixname=\u0417\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f menu.settings.restricted=\u0428\u043a\u043e\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c menu.colors=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0446\u0432\u0435\u0442\u0430 colors.default=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e colors.color0=\u0426\u0432\u0435\u0442 1 (\u0427\u0435\u0440\u043d\u044b\u0439) colors.color1=\u0426\u0432\u0435\u0442 2 (\u0417\u0435\u043b\u0435\u043d\u044b\u0439) colors.color2=\u0426\u0432\u0435\u0442 3 (\u0421\u0438\u043d\u0438\u0439) colors.color3=\u0426\u0432\u0435\u0442 4 (\u041a\u043e\u0440\u0438\u0447\u043d\u0435\u0432\u044b\u0439) colors.color4=\u0426\u0432\u0435\u0442 5 (\u0413\u043e\u043b\u0443\u0431\u043e\u0439) colors.color5=\u0426\u0432\u0435\u0442 6 (\u041a\u0440\u0430\u0441\u043d\u044b\u0439) colors.background=\u0424\u043e\u043d colors.select=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0446\u0432\u0435\u0442 colors.target=\u0417\u0430\u0434\u0430\u0442\u044c \u0446\u0432\u0435\u0442 myfiledialog.dir=\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f myfiledialog.file=\u0424\u0430\u0439\u043b myfiledialog.pattern=\u0428\u0430\u0431\u043b\u043e\u043d filedialog.open=\u041e\u0442\u043a\u0440\u044b\u0442\u044c filedialog.saveas=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a... filedialog.open.action=\u041e\u0442\u043a\u0440\u044b\u0442\u044c filedialog.saveas.action=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c filedialog.htmlsave=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 HTML filedialog.htmlsave.action=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c load=\u041e\u0442\u043a\u0440\u044b\u0442\u044c abort=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c bound.release=\u041e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443 bound.bind=\u0421\u0432\u044f\u0437\u0430\u0442\u044c \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c bound.error=\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435\u043c! constructiondisplay.edit=\u041f\u0440\u0430\u0432\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 constructiondisplay.copy=\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440 edit.Title=\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 edit.name=\u0418\u043c\u044f edit.hidden=\u0421\u043a\u0440\u044b\u0442\u044c edit.text=\u0422\u0435\u043a\u0441\u0442 edit.fixed=\u0417\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c edit.color=\u0426\u0432\u0435\u0442 edit.ok=OK edit.cancel=\u041e\u0442\u043c\u0435\u043d\u0430 edit.showname=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u044f edit.point.title=\u041f\u0440\u0430\u0432\u043a\u0430 \u0442\u043e\u0447\u043a\u0438 edit.point.type=\u0422\u0438\u043f edit.point.x=X edit.point.y=Y edit.point.intersection=\u041e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u043e\u0442 edit.point.showvalue=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b edit.point.colortype=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 edit.point.bound=\u0413\u0440\u0430\u043d\u0438\u0446\u0430 edit.point.away=\u0414\u0430\u043b\u0435\u043a\u043e \u043e\u0442 edit.point.close= \u0411\u043b\u0438\u0437\u043a\u043e \u043a edit.point.free=\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 edit.line.title=\u041f\u0440\u0430\u0432\u043a\u0430 \u043f\u0440\u044f\u043c\u043e\u0439, \u043b\u0443\u0447\u0430, \u043e\u0442\u0440\u0435\u0437\u043a\u0430 edit.line.normal=\u041e\u0431\u044b\u0447\u043d\u0430\u044f\u0430\u044f edit.line.thick=\u0422\u043e\u043b\u0441\u0442\u0430\u044f edit.line.thin=\u0422\u043e\u043d\u043a\u0430\u044f edit.line.type=\u0422\u0438\u043f edit.segment.length=\u0414\u043b\u0438\u043d\u0430 edit.segment.showvalue=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u043b\u0438\u043d\u0443 edit.circle.title=\u041f\u0440\u0430\u0432\u043a\u0430 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438 edit.circle.length=\u0420\u0430\u0434\u0438\u0443\u0441 edit.circle.partial=\u041d\u0435\u043f\u043e\u043b\u043d\u044b\u0439 \u044d\u043a\u0440\u0430\u043d edit.circle.range=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d edit.circle.killrange=\u0423\u0431\u0440\u0430\u0442\u044c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d edit.plumb.restricted=\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 edit.angle.title=\u041f\u0440\u0430\u0432\u043a\u0430 \u0443\u0433\u043b\u0430 edit.angle.length=\u0420\u0430\u0437\u043c\u0435\u0440 edit.angle.displaysize=\u0420\u0430\u0437\u043c\u0435\u0440 \u043e\u043a\u043d\u0430 edit.angle.normal=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 edit.angle.small=\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c edit.angle.large=\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c edit.expression.title=\u041f\u0440\u0430\u0432\u043a\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f edit.expression=\u0410\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 edit.expression.prompt=\u041f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435 edit.area.title=\u041f\u0440\u0430\u0432\u043a\u0430 \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 edit.area.back=\u041d\u0430 \u0444\u043e\u043d\u0435 export.title=\u0412 \u0432\u0438\u0434\u0435 HTML export.pagetitle=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b export.width=\u0428\u0438\u0440\u0438\u043d\u0430 export.height=\u0412\u044b\u0441\u043e\u0442\u0430 export.jar=Jar-\u0444\u0430\u0439\u043b export.comment=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 export.file=\u0424\u0430\u0439\u043b \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f export.job=\u041e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435 export.color=\u0426\u0432\u0435\u0442 export.backgroundcolor=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0444\u043e\u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b export.appletcolor=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0444\u043e\u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b export.plain=\u041f\u043b\u043e\u0441\u043a\u0438\u0439 export.3D=\u0413\u0440\u0430\u043d\u0438\u0446\u0430 export.breaks=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0441 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f\u043c\u0438 export.icons=\u0413\u0440\u0430\u043d\u0438\u0446\u0430 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b export.full=\u0413\u0440\u0430\u043d\u0438\u0446\u0430, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u0441\u0442\u0430\u0442\u0443\u0441 export.nonvisual=\u0413\u0440\u0430\u043d\u0438\u0446\u0430, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u0432\u043e\u0434\u0430 export.style=\u0421\u0442\u0438\u043b\u044c \u0430\u043f\u043f\u043b\u0435\u0442\u0430 export.setcolor=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0446\u0432\u0435\u0442 export.savefirst=\u0424\u0430\u0439\u043b \u043d\u0435 \u0431\u044b\u043b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d! export.soltext=\u0420\u0435\u0448\u0435\u043d\u0438\u0435 export.stylesheet=\u0422\u0438\u043f \u0444\u0430\u0439\u043b\u0430 CSS export.solution=\u0424\u0430\u0439\u043b \u0440\u0435\u0448\u0435\u043d\u0438\u044f export.jumpsol=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e export.linksol=\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e export.savesol=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0444\u0430\u0439\u043b \u0440\u0435\u0448\u0435\u043d\u0438\u044f export.track=\u0422\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0442\u043e\u0447\u043a\u0438 export.digits=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0446\u0438\u0444\u0440\u044b export.setsize=\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 export.signature=\u0421\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044c Zirkel'\u044f \u0420. \u0413\u0440\u043e\u0442\u043c\u0430\u043d export.colors=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430 export.background=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0444\u043e\u043d help.title=\u041f\u043e\u043c\u043e\u0449\u044c help.error=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b \u043f\u043e\u043c\u043e\u0449\u0438! help.file=schoolgeometry.txt coloreditor.title=\u041f\u0440\u0430\u0432\u043a\u0430 \u0446\u0432\u0435\u0442\u0430 coloreditor.red=\u041a\u0440\u0430\u0441\u043d\u044b\u0439 coloreditor.green=\u0417\u0435\u043b\u0435\u043d\u044b\u0439 coloreditor.blue=\u0421\u0438\u043d\u0438\u0439 coloreditor.color=\u0415\u0449\u0451 \u0446\u0432\u0435\u0442\u0430 comment.title=\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044e comment.set=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c comment.cancel=\u041e\u0442\u043c\u0435\u043d\u0430 comment.close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c iconedit.title=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 iconedit.twobars=\u041f\u0430\u043d\u0435\u043b\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u0434\u0432\u0443\u043c\u044f \u0440\u044f\u0434\u0430\u043c\u0438 jobcomment.title=\u0423\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435 select.title=\u0412\u044b\u0431\u0440\u0430\u0442\u044c select.ok=OK select.cancel=\u041e\u0442\u043c\u0435\u043d\u0430 select.comment=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 select.all=\u0412\u0441\u0435 message.circle.midpoint=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c: \u0426\u0435\u043d\u0442\u0440? message.circle.radius=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c:\u0422\u043e\u0447\u043a\u0430 \u043d\u0430 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438 (SHIFT: \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0434\u0438\u0443\u0441)? message.fixedcircle.midpoint=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430: \u0426\u0435\u043d\u0442\u0440? message.fixedcircle.radius=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430:\u0420\u0430\u0434\u0438\u0443\u0441? message.edit=\u041f\u0440\u0430\u0432\u043a\u0430: \u043e\u0431\u044a\u0435\u043a\u0442? message.line.first=\u041f\u0440\u044f\u043c\u0430\u044f: \u041f\u0435\u0440\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430? message.line.second=\u041f\u0440\u044f\u043c\u0430\u044f: \u0412\u0442\u043e\u0440\u0430\u044f \u0442\u043e\u0447\u043a\u0430? message.ray.first=\u041b\u0443\u0447: \u043d\u0430\u0447\u0430\u043b\u043e? message.ray.second=\u041b\u0443\u0447: \u0432\u0442\u043e\u0440\u0430\u044f \u0442\u043e\u0447\u043a\u0430? message.move.select=\u0414\u0432\u0438\u0436\u0435\u043d\u0438\u0435: \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442! message.move.move=\u0414\u0432\u0438\u0436\u0435\u043d\u0438\u0435: \u0414\u0432\u0438\u0433\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443? message.point=\u0422\u043e\u0447\u043a\u0430: \u041f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443 (SHIFT: \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c)! message.segment.first=\u041e\u0442\u0440\u0435\u0437\u043e\u043a: \u041f\u0435\u0440\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430? message.segment.second=\u041e\u0442\u0440\u0435\u0437\u043e\u043a: \u0412\u0442\u043e\u0440\u0430\u044f \u0442\u043e\u0447\u043a\u0430 (SHIFT: \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u0438\u043d\u0443)? message.fixedsegment.first=\u041e\u0442\u0440\u0435\u0437\u043e\u043a \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b: \u041f\u0435\u0440\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430? message.fixedsegment.second=\u041e\u0442\u0440\u0435\u0437\u043e\u043a \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b: \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u0433\u0434\u0435-\u043d\u0438\u0431\u0443\u0434\u044c! message.intersection.first=\u041f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435: \u043f\u0435\u0440\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f? \u043cessage.intersection.second=\u041f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435: \u041f\u0435\u0440\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442? message.hide=\u0421\u043a\u0440\u044b\u0442\u044c/\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c: \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043e\u0431\u044a\u0435\u043a\u0442! message.tracker.select=\u0422\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f: \u0422\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0442\u043e\u0447\u043a\u0438 \u0438\u043b\u0438 \u043f\u0440\u044f\u043c\u043e\u0439? message.tracker.selectpoint=\u0422\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f: \u0442\u043e\u0447\u043a\u0430-\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c (SHIFT: \u0431\u043e\u043b\u044c\u0448\u0435)? message.tracker.move=\u0422\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f: \u0434\u0432\u0438\u0433\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443! message.objecttracker.select=\u0410\u0432\u0442\u043e\u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f: \u0412\u0435\u0434\u043e\u043c\u0430\u044f \u0442\u043e\u0447\u043a\u0430 (SHIFT: \u0431\u043e\u043b\u044c\u0448\u0435)? message.objecttracker.object=\u0410\u0432\u0442\u043e\u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f: \u041f\u0440\u044f\u043c\u0430\u044f \u0438\u043b\u0438 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c? message.objecttracker.selectpoint=\u0410\u0432\u0442\u043e\u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f: \u0442\u043e\u0447\u043a\u0430-\u0432\u043e\u0434\u0438\u0435\u043b\u044c? message.objecttracker.selectanypoint=\u0410\u0432\u0442\u043e\u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f: \u0415\u0449\u0451 \u0432\u0435\u0434\u043e\u043c\u0430\u044f \u0442\u043e\u0447\u043a\u0430? message.objecttracker.move=\u0410\u0432\u0442\u043e\u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f: \u0414\u0432\u0438\u0433\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443! message.objecttracker.start=\u0410\u0432\u0442\u043e\u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f: \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e! message.parallel.first=\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c: \u041f\u0440\u044f\u043c\u0430\u044f? message.parallel.second=\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c: \u0442\u043e\u0447\u043a\u0430? message.plumb.first=\u041f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440: \u041f\u0440\u044f\u043c\u0430\u044f? message.plumb.second=\u041f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440: \u0422\u043e\u0447\u043a\u0430? message.circle3.first=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c: \u041d\u0430\u0447\u0430\u043b\u043e \u0440\u0430\u0434\u0438\u0443\u0441\u0430? message.circle3.second=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c: \u041a\u043e\u043d\u0435\u0446 \u0440\u0430\u0434\u0438\u0443\u0441\u0430? message.circle3.midpoint=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c: \u0426\u0435\u043d\u0442\u0440? message.midpoint.first=\u0421\u0440\u0435\u0434\u0438\u043d\u0430: \u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043d\u0435\u0446? message.midpoint.second=\u0421\u0440\u0435\u0434\u0438\u043d\u0430: \u0412\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u043d\u0435\u0446? message.quadric=\u041a\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u0435\u0447\u0435\u043d\u0438\u0435: \u0422\u043e\u0447\u043a\u0430 \u043d\u043e\u043c\u0435\u0440 message.angle.first=\u0423\u0433\u043e\u043b: \u041f\u0435\u0440\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0443\u0433\u043b\u0430? message.angle.root=\u0423\u0433\u043e\u043b: \u0412\u0435\u0440\u0448\u0438\u043d\u0430 \u0443\u0433\u043b\u0430? message.angle.second=\u0423\u0433\u043e\u043b: \u0412\u0442\u043e\u0440\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0443\u0433\u043b\u0430 (SHIFT: \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440)? message.fixedangle.first=\u0423\u0433\u043e\u043b \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b: \u041f\u0435\u0440\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0443\u0433\u043b\u0430? message.fixedangle.root=\u0423\u0433\u043e\u043b \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b: \u0412\u0435\u0440\u0448\u0438\u043d\u0430 \u0443\u0433\u043b\u0430? message.fixedangle.second=\u0423\u0433\u043e\u043b \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b: \u0429\u0435\u043b\u043a\u043d\u0438\u0442\u0435 \u0435\u0449\u0451 \u0433\u0434\u0435-\u043d\u0438\u0431\u0443\u0434\u044c? message.label.select=\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u0434\u043f\u0438\u0441\u044c: \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0430\u0434\u043f\u0438\u0441\u044c! message.label.move=\u0421\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u0434\u043f\u0438\u0441\u044c: \u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u0434\u043f\u0438\u0441\u044c! message.boundedpoint=\u0422\u043e\u0447\u043a\u0430 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0435: \u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u043b\u0438 \u043f\u0440\u044f\u043c\u0430\u044f (SHIFT: \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c)? message.parameters=\u041c\u0430\u043a\u0440\u043e\u0441: \u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u0435\u043a\u0442\u044b? message.targets=\u041c\u0430\u043a\u0440\u043e\u0441: \u0426\u0435\u043b\u0435\u0432\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b? message.savejob.first=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435: \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442? message.savejob.second=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435: \u0426\u0435\u043b\u0435\u0432\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 (SHIFT: \u043d\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c)? message.savejob.third=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435: \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f? message.runmacro=\u041c\u0430\u043a\u0440\u043e\u0441 %: %. % - % message.runmacro.return=(\u041f\u0420\u041e\u0411\u0415\u041b \u0432\u044b\u0431\u043e\u0440 %) message.runmacro.fixes=(SHIFT - \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0431\u043e\u0440) message.delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c: \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442! message.reorder=\u041f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0438\u0442\u044c: \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442! message.expression=\u0410\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435: \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043c\u0435\u0441\u0442\u043e! message.area=\u0417\u0430\u043a\u0440\u0430\u0448\u0435\u043d\u043d\u044b\u0439 \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a: \u0432\u0435\u0440\u0448\u0438\u043d\u0430? message.text=\u0422\u0435\u043a\u0441\u0442: \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043c\u0435\u0441\u0442\u043e! message.animator.point=\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f: \u0410\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443? message.animator.segment=\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f: \u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u043b\u0438 \u043e\u0442\u0440\u0435\u0437\u043e\u043a? message.animator.running=\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f: \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c! message.range.first=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d: \u041f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0437 \u044d\u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0438... message.range.second=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d:... \u0434\u043b\u044f \u043a\u0430\u043a\u043e\u0439 \u0442\u043e\u0447\u043a\u0438? message.setaway.away=\u0414\u0430\u043b\u0435\u043a\u043e \u043e\u0442 \u044d\u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0438! message.setaway.close=\u0411\u043b\u0438\u0437\u043a\u043e \u043a \u044d\u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0438! objectsedit.title=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0430\u0442\u0440\u044b point.type.square=\u041a\u0432\u0430\u0434\u0440\u0430\u0442 point.type.diamond=\u0420\u043e\u043c\u0431 point.type.circle=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c point.type.dot=\u0422\u043e\u0447\u043a\u0430 color.type.normal=\u041e\u0431\u044b\u0447\u043d\u0430\u044f color.type.thick=\u0422\u043e\u043b\u0441\u0442\u0430\u044f color.type.thin=\u0422\u043e\u043d\u043a\u0430\u044f text.point=\u0422\u043e\u0447\u043a\u0430 \u043d\u0430 %, % text.line=\u041f\u0440\u044f\u043c\u0430\u044f \u0447\u0435\u0440\u0435\u0437 % \u0438 % text.segment=\u041e\u0442\u0440\u0435\u0437\u043e\u043a \u043e\u0442 % \u0434\u043e % text.segment.fixed=\u041e\u0442\u0440\u0435\u0437\u043e\u043a \u043e\u0442 % \u0434\u043e % \u0434\u043b\u0438\u043d\u044b % text.ray=\u041b\u0443\u0447 \u043e\u0442 % \u0447\u0435\u0440\u0435\u0437 % text.intersection=\u041f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 % \u0441 % text.circle=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u043a\u0440\u0443\u0433 % \u0447\u0435\u0440\u0435\u0437 % text.circle.fixed=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u043a\u0440\u0443\u0433 % \u0447\u0435\u0440\u0435\u0437 % \u0441 \u0440\u0430\u0434\u0438\u0443\u0441\u043e\u043c % text.fixedcircle=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u043a\u0440\u0443\u0433 % \u0441 \u0440\u0430\u0434\u0438\u0443\u0441\u043e\u043c % text.circle3=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u043a\u0440\u0443\u0433 % \u0441 \u0440\u0430\u0434\u0438\u0443\u0441\u043e\u043c \u043e\u0442 % \u0434\u043e % text.parallel=\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u044f\u043c\u0430\u044f \u0438\u0437 % \u043a % text.midpoint=\u0421\u0435\u0440\u0435\u0434\u0438\u043d\u0430 \u043c\u0435\u0436\u0434\u0443 % \u0438 % text.quadric=\u041a\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 % text.plumb=\u041f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440 \u0438\u0437 % \u043a % text.angle=\u0423\u0433\u043e\u043b % - % - % text.angle.fixed=\u0423\u0433\u043e\u043b % - % - % \u0440\u0430\u0432\u043d\u044b\u0439 % text.boundedpoint=\u0422\u043e\u0447\u043a\u0430 \u043d\u0430 % text.expression=\u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 "%" \u043d\u0430 %, % text.area=\u041c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a text.fixedangle=\u0423\u0433\u043e\u043b % - % \u0440\u0430\u0437\u043c\u0435\u0440\u0430 % name.Point=\u0422\u043e\u0447\u043a\u0430 name.Intersection=\u041f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 name.OtherIntersection=\u041f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 name.Circle=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c name.Circle3=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c name.Segment=\u041e\u0442\u0440\u0435\u0437\u043e\u043a name.Ray=\u041b\u0443\u0447 name.Line=\u041f\u0440\u044f\u043c\u0430\u044f name.TwoPointLine=\u041f\u0440\u044f\u043c\u0430\u044f \u0447\u0435\u0440\u0435\u0437 \u0434\u0432\u0435 \u0442\u043e\u0447\u043a\u0438 name.Parallel=\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c name.Midpoint=\u0421\u0435\u0440\u0435\u0434\u0438\u043d\u0430 name.Quadric=\u041a\u0432\u0430\u0434\u0440\u0430\u0442 name.Plumb=\u041f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440 name.Angle=\u0423\u0433\u043e\u043b name.PointOn=\u0422\u043e\u0447\u043a\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 name.Expression=\u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 name.Polygon=\u041c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=p name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=pl name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=poly prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.angle==a(,,) prompt.area=A(,,) popup.hidden=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b popup.replay=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 popup.empty=--- \u041c\u0430\u043a\u0440\u043e\u0441 --- replay.title=\u041f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044c reorder.title=\u0412\u0434\u0430\u0432\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 reorder.message=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435 reorder.notfound=\u041e\u0431\u044a\u0435\u043a\u0442 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d! reorder.warning=\u042d\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c! setgrid.title=\u0428\u0438\u0440\u0438\u043d\u0430 \u0441\u0435\u0442\u043a\u0438 setgrid.prompt=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u043e\u0432\u0443\u044e \u0448\u0438\u0440\u0438\u043d\u0443 \u0441\u0435\u0442\u043a\u0438 setgrid.set=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c definemacro.title=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 definemacro.name=\u0418\u043c\u044f definemacro.comment=\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043a \u043c\u0430\u043a\u0440\u043e\u0441\u0443 definemacro.parameters=\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c definemacro.noparams=\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u0430! definemacro.nomacro=\u041d\u0435\u0442 \u043c\u0430\u043a\u0440\u043e\u0441\u0430! definemacro.targetsonly=\u0421\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 definemacro.invisible=\u0421\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e definemacro.promptfor=\u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u0434\u043b\u044f... macro.replace.title=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 macro.replace=\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441: macro.replace.all=\u0412\u0441\u0435 macro.usage=\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u043c\u0430\u043a\u0440\u043e\u0441 (\u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438)! macro.prompt.title=\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c macro.prompt.prompt=\u0412\u0432\u0435\u0441\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 macro.prompt.illegal=\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435! digits.title=\u0420\u0430\u0441\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u0430 digits.edit=\u041f\u0440\u0430\u0432\u043a\u0430 digits.lengths=\u042d\u043a\u0440\u0430\u043d digits.angles=\u0423\u0433\u043b\u044b editrun.title=\u041f\u0440\u0430\u0432\u043a\u0430 run-\u0444\u0430\u0439\u043b\u0430 editrun.run=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c editrun.load=\u0414\u0440\u0443\u0433\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f sure.title=\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b? sure.macros=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b? sure.delete=\u041f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f? close.title=\u041a\u043e\u043d\u0435\u0446 close.prompt=\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443? file.exists.title=\u0424\u0430\u0439\u043b \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 file.exists.overwrite=\u0424\u0430\u0439\u043b \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442! \u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e? exception.nparams=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0447\u0438\u0441\u043b\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432! exception.notfound=\u041e\u0431\u044a\u0435\u043a\u0442 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d, \u0438\u043b\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f! exception.type=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0442\u0438\u043f \u043e\u0431\u044a\u0435\u043a\u0442\u0430! exception.expression=\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435! exception.canfix=\u041e\u0431\u044a\u0435\u043a\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d! exception.fix=\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435! exception.novalue=\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435! exception.elementary=\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438! exception.bracket=\u041f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u044b \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441\u043a\u043e\u0431\u043a\u0438! exception.quotes=\u041f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u044b \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043a\u0430\u0432\u044b\u0447\u043a\u0438! exception.dot=\u0412 \u0447\u0438\u0441\u043b\u0435 \u0434\u0432\u0435 \u0442\u043e\u0447\u043a\u0438! exception.nodigit=\u0412 \u0447\u0438\u0441\u043b\u0435 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0446\u0438\u0444\u0440\u044b! exception.function=\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f! exception.parameter=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438! exception.macro=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043c\u0430\u043a\u0440\u043e\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440! exception.name=\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u0438\u043c\u044f! exception.job=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440! exception.track=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u0438! exception.animate=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438! exception.boolean=\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0438\u0441\u0442\u0438\u043d\u043d\u044b\u043c \u0438\u043b\u0438 \u043b\u043e\u0436\u043d\u044b\u043c! exception.value=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435! exception.color=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0446\u0432\u0435\u0442! exception.colortype=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0442\u043e\u043b\u0449\u0438\u043d\u0430! exception.type=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0442\u0438\u043f \u0442\u043e\u0447\u043a\u0438! exception.macroparameter=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043c\u0430\u043a\u0440\u043e\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440! exception.macrotarget=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043c\u0430\u043a\u0440\u043e\u0437\u0430\u0434\u0430\u043d\u0438\u0435! exception.prompt=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442! exception.prompt.parameter=\u0418\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c! exception.parameters=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440! exception.brackets=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0441\u043a\u043e\u0431\u043a\u0438! exception.double=\u0422\u0430\u043a\u043e\u0435 \u0438\u043c\u044f \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442! error.setaway=\u042d\u0442\u0430 \u0442\u043e\u0447\u043a\u0430 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430! error.objecttracker.depends=\u0422\u043e\u0447\u043a\u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c! constructiondisplay.title=\u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 function.hide=\u0421\u043a\u0440\u044b\u0442\u044c function.hide.short=\u0441\u043a\u0440\u044b\u0442\u044c function.rename=\u0418\u043c\u044f function.rename.short=\u0438\u043c\u044f function.value=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 function.value.short=\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 function.window=\u041e\u043a\u043d\u043e function.window.short=\u043e\u043a\u043d\u043e function.color=\u0426\u0432\u0435\u0442 function.color.short=\u0446\u0432\u0435\u0442 function.thickness=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 function.thickness.short=\u0442\u043e\u043b\u0449\u0438\u043d\u0430 function.type=\u0422\u0438\u043f function.type.short=\u0442\u0438\u043f function.partial=\u0427\u0430\u0441\u0442\u0438\u0447\u043d\u044b\u0439 function.partial.short=\u0447\u0430\u0441\u0442\u0438\u0447\u043d\u044b\u0439 function.fill=\u0417\u0430\u043b\u0438\u0442\u044c function.fill.short=\u0437\u0430\u043b\u0438\u0442\u044c function.back=\u0424\u043e\u043d function.back.short=\u0444\u043e\u043d function.acute=\u041e\u0441\u0442\u0440\u044b\u0439 function.acute.short=\u043e\u0441\u0442\u0440\u044b\u0439 function.obtuse=\u0422\u0443\u043f\u043e\u0439 function.obtuse.short=\u0442\u0443\u043f\u043e\u0439 function.solid=\u0417\u0430\u043a\u0440\u0430\u0448\u0435\u043d\u043d\u044b\u0439 function.solid.short=\u0437\u0430\u043a\u0440\u0430\u0448\u0435\u043d\u043d\u044b\u0439 function restrict=\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 function restrict.short=\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 expression.value=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 configure.title=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440 configure.prompt=\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 # \u041d\u043e\u0432\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b: background.error=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 (GIF or JPG!). menu.background=\u0424\u043e\u043d menu.background.grab=\u0421\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043d\u0430 \u0444\u043e\u043d menu.background.clear=\u0421\u0442\u0438\u0440\u0435\u0442\u044c \u0444\u043e\u043d menu.background.load=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u043e\u043d\u043e\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 menu.background.usesize=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 menu.background.tile=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0444\u043e\u043d\u0430 menu.background.center=\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0444\u043e\u043d \u043f\u043e \u0446\u0435\u043d\u0442\u0440\u0443 iconhelp.grab=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u043b\u0438 \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0444\u043e\u043d filedialog.backgroundload=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u043e\u043d filedialog.backgroundload.action=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c # \u041d\u043e\u0432\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 2.14 menu.file.compress=\u0412\u0441\u0435\u0433\u0434\u0430 \u0441\u0436\u0438\u043c\u0430\u0442\u044c menu.file.savesvg=SVG-\u0444\u0430\u0439\u043b # \u0412\u0435\u0440\u0441\u0438\u044f 2.15 loading=\u0418\u0434\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430, \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435! # \u0412\u0435\u0440\u0441\u0438\u044f 2.18 \u0438 2.19 menu.settings.font.default=\u0428\u0440\u0438\u0444\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e menu.settings.font.bold=\u0416\u0438\u0440\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442 menu.settings.font.large=\u041a\u0440\u0443\u043f\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442 menu.file.saveeps=EPS-\u0444\u0430\u0439\u043b menu.fonts=\u0428\u0440\u0438\u0444\u0442 # \u0412\u0435\u0440\u0441\u0438\u044f 2.20 bmpscaler.title=\u0420\u0430\u0437\u043c\u0435\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f bmpscaler.width=\u0428\u0438\u0440\u0438\u043d\u0430 bmpscaler.height=\u0412\u044b\u0441\u043e\u0442\u0430 bmpscaler.scale=\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 (\u043d\u0430\u0436\u043c\u0438\u0442\u0435 "ENTER") bmpscaler.illegal=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 # \u0412\u0435\u0440\u0441\u0438\u044f 2.21 renamemacro.title=\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 renamemacro.name=\u041d\u043e\u0432\u043e\u0435 \u0438\u043c\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u0430 menu.special.renamemacro=\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441... # \u0412\u0435\u0440\u0441\u0438\u044f 2.23 savequestion.title=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 savequestion.qsave=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f? # \u0412\u0435\u0440\u0441\u0438\u044f 2.25 exception.printsize=\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f! iconhelp.nohelp=\u041f\u043e\u043c\u043e\u0449\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430! iconhelp.type?=\u0422\u0438\u043f \u0442\u043e\u0447\u043a\u0438 iconhelp.thickness?=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 iconhelp.color?=\u0426\u0432\u0435\u0442 iconhelp.filled=\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 iconhelp.isback=\u041d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0444\u043e\u043d\u0435 iconhelp.inverse=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0443\u0433\u043e\u043b iconhelp.angle?=\u0420\u0430\u0437\u043c\u0435\u0440 # \u0412\u0435\u0440\u0441\u0438\u044f 2.28 message.objecttracker.stop=\u0410\u0432\u0442\u043e\u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f: \u041f\u0440\u0435\u0440\u0432\u0430\u0442\u044c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e (SHIFT \u043f\u0440\u0430\u0432\u044b\u0439/\u043b\u0435\u0432\u044b\u0439 \u0434\u043b\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438)! # \u0412\u0435\u0440\u0441\u0438\u044f 2.31 menu.settings.indicate=\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043f\u043e\u0440\u043e\u0436\u0434\u0451\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 menu.options.other=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 menu.help.welcome=\u041d\u043e\u0432\u043e\u0441\u0442\u0438 \u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 iconhelp.twolines=\u041f\u0430\u043d\u0435\u043b\u044c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0440\u044f\u0434\u043e\u0432 iconhelp.qintersection=\u0421\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u043e \u0442\u043e\u0447\u043a\u0435 \u043d\u0430 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0438 iconhelp.qchoice=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u0438\u0430\u043b\u043e\u0433 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 iconhelp.qpointon=\u0421\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u043e \u0442\u043e\u0447\u043a\u0435 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 iconhelp.noindicate=\u041d\u0435 \u043e\u0442\u043c\u0435\u0447\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u043e\u0434 \u043c\u044b\u0448\u044c\u044e # \u0412\u0435\u0440\u0441\u0438\u044f 2.33 menu.file.new=\u041d\u043e\u0432\u043e\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 (Ctrl-n) # \u0412\u0435\u0440\u0441\u0438\u044f 2.34 edit.text.title=\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 edit.text.settings=\u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 menu.settings.filedialog=\u041e\u0442\u043c\u0435\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e-\u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u0434\u0438\u0430\u043b\u043e\u0433\u0430 # \u0412\u0435\u0440\u0441\u0438\u044f 2.35 menu.settings.bitmapbackground=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u043e\u043d\u043e\u0432\u044b\u0435 \u0446\u0432\u0435\u0442\u0430 \u0432 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 # \u0412\u0435\u0440\u0441\u0438\u044f 2.36 menu.file.savegraphics=\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443... menu.file.savepng=\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 (PNG-\u0444\u0430\u0439\u043b) bmpscaler.title=\u041c\u0430\u0441\u0448\u0442\u0430\u0431 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 # \u0412\u0435\u0440\u0441\u0438\u044f 2.37 menu.file.savepdf=PDF-\u0444\u0430\u0439\u043b iconhelp.chord=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0442\u0440\u0435\u0437\u043e\u043a # \u0412\u0435\u0440\u0441\u0438\u044f 2.39 message.setfixedangle.first=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0443\u0433\u043e\u043b: \u041f\u0435\u0440\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430? message.setfixedangle.second=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0443\u0433\u043e\u043b: \u0412\u0435\u0440\u0448\u0438\u043d\u0430? message.setfixedangle.third=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0443\u0433\u043e\u043b: \u0422\u0440\u0435\u0442\u044c\u044f \u0442\u043e\u0447\u043a\u0430? edit.fixedangle.set=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440... message.setfixedcircle.first=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c:\u041f\u0435\u0440\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430? message.setfixedcircle.second=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c:\u0412\u0442\u043e\u0440\u0430\u044f \u0442\u043e\u0447\u043a\u0430? edit.fixedcircle.set=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440... # \u0412\u0435\u0440\u0441\u0438\u044f 2.40 minpointsize.title=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u043e\u0447\u043a\u0438 minpointsize.prompt=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u043e\u0447\u043a\u0438 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 0.3) menu.settings.font.minpointsize=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u043e\u0447\u043a\u0438... # \u0412\u0435\u0440\u0441\u0438\u044f 2.41 name.short.Track=\u0422\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f text.track=\u0422\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f % \u043f\u043e\u043a\u0430 % \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f \u043f\u043e % trackquestion.keep=\u041f\u0440\u0435\u0440\u0432\u0430\u0442\u044c \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0432 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438? trackquestion.title=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044e menu.options.track=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044e (SHIFT-ENTER) iconhelp.indicate=\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f iconhelp.nohelp=\u041f\u043e\u043c\u043e\u0449\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430! # \u0412\u0435\u0440\u0441\u0438\u044f 2.42 objects.draw=\u0420\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043c\u044b\u0448\u044c\u044e menu.options.cleardraw=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0435 (Esc) iconhelp.draw=\u0420\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043c\u044b\u0448\u044c\u044e message.draw=\u0420\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043c\u044b\u0448\u044c\u044e (ESC \u0441\u0442\u0438\u0440\u0435\u0442\u044c) shortcuts.draw=; # \u0412\u0435\u0440\u0441\u0438\u044f 2.43 message.move.select=\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c: \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443 (SHIFT: \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435) message.rename=\u041d\u0430\u0437\u0432\u0430\u0442\u044c A,B,C,...: \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 iconhelp.rename=\u041d\u0430\u0437\u0432\u0430\u0442\u044c A,B,C,... objects.rename= \u041d\u0430\u0437\u0432\u0430\u0442\u044c A,B,C,... shortcuts.rename=: iconhelp.anglereduce=\u041d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043b\u0443\u0447 \u0443\u0433\u043b\u0430 # \u0412\u0435\u0440\u0441\u0438\u044f 2.45 menu.settings.smartboard=\u0420\u0435\u0436\u0438\u043c \u00abSmartboard\u00bb shortcuts.zoom=% objects.zoom=\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u044b\u0448\u044c\u044e message.zoom=\u0420\u0430\u0441\u0442\u044f\u043d\u0443\u0442\u044c \u0446\u0435\u043d\u0442\u0440, \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431 # \u0412\u0435\u0440\u0441\u0438\u044f 2.46 menu.special.restricticons=\u041c\u0430\u043b\u0430\u044f \u043f\u0430\u043d\u0435\u043b\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 # \u0412\u0435\u0440\u0441\u0438\u044f 2.47 menu.settings.indicate.simple=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0447\u043a\u0438 menu.settings.beginner=\u041d\u0430\u0447\u0430\u043b\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u043e\u0439\u043a\u0430 question.again=\u0412\u0441\u0435\u0433\u0434\u0430 \u044d\u0442\u043e \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0430\u0442\u044c. # \u0412\u0435\u0440\u0441\u0438\u044f 2.49 definemacro.parameters=\u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b: # \u0412\u0435\u0440\u0441\u0438\u044f 2.53 menu.actions.angles=\u0423\u0433\u043b\u044b menu.actions.circles=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438 menu.actions.lines=\u041f\u0440\u044f\u043c\u044b\u0435 menu.actions.points=\u0422\u043e\u0447\u043a\u0438 # \u0412\u0435\u0440\u0441\u0438\u044f 3.00 info.title=\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u0430\u044f \u043f\u043e\u043c\u043e\u0449\u044c info.related=\u0421\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b info.notfound=\u0420\u0430\u0437\u0434\u0435\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d! info.noresults=\u0421\u0442\u0440\u043e\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430! info.searchresults=- \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430 - info.select=- \u0412\u044b\u0431\u043e\u0440 - info.search=\u041f\u043e\u0438\u0441\u043a info.back=\u041d\u0430\u0437\u0430\u0434 info.start=\u0417\u0430\u043f\u0443\u0441\u043a iconhelp.info=\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u0430\u044f \u043f\u043e\u043c\u043e\u0449\u044c menu.help.info=\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u0430\u044f \u043f\u043e\u043c\u043e\u0449\u044c myfiledialog.homedir=\u0424\u0430\u0439\u043b\u044b Zirkel'\u044f myfiledialog.windowshome=\u041c\u043e\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b myfiledialog.mkdir=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e myfiledialog.back=\u041d\u0430\u0437\u0430\u0434 menu.file.alwaysclearmacros=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 about.language=\u042f\u0437\u044b\u043a bmpscaler.72dpi=72 dpi bmpscaler.72dpi=300 dpi # \u0412\u0435\u0440\u0441\u0438\u044f 3.01 menu.settings.backups=\u0420\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0435 \u043a\u043e\u043f\u0438\u0438 # \u0412\u0435\u0440\u0441\u0438\u044f 3.02 menu.options.hideduplicates=\u0421\u043a\u0440\u044b\u0442\u044c \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b # \u0412\u0435\u0440\u0441\u0438\u044f 3.03 menu.options.function=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e text.function=\u0424\u0443\u043d\u043a\u0446\u0438\u044f ( % , % ) function.varmin=\u041e\u0442 function.varmax=\u0414\u043e function.dvar=\u0428\u0430\u0433 function.var=\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f function.x=X function y=Y iconhelp.function=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e menu.options.editlast=\u041f\u0440\u0430\u0432\u043a\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 iconhelp.control.edit=\u041f\u0440\u0430\u0432\u043a\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 iconhelp.control.hide=\u0421\u043a\u0440\u044b\u0442\u044c \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b edit.function.title=\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u043b\u0438 \u043a\u0440\u0438\u0432\u0430\u044f iconhelp.control.runmacro=\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u0441\u043d\u043e\u0432\u0430 # \u0412\u0435\u0440\u0441\u0438\u044f 3.05 point.type.cross=\u041a\u0440\u0435\u0441\u0442 point.type.dcross=\u041a\u0440\u0435\u0441\u0442\u0438\u043a shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=\u0415\u0434\u0438\u043d\u0438\u0446\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f menu.special.break=\u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0438 menu.bp.setbreak=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0438 menu.bp.clearbreak=\u0423\u0431\u0440\u0430\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0438 menu.bp.sethidingbreak=\u0421\u043a\u0440\u044b\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c menu.bp.animatebreak=\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u043f\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f\u043c iconhelp.animatebreak=\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u043f\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f\u043c message.animatebreak=\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u043f\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f\u043c: \u0449\u0451\u043b\u0447\u043e\u043a \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 (SHIFT \u043a\u0443\u0440\u0441\u043e\u0440 \u0432\u043b\u0435\u0432\u043e/\u0432\u043f\u0440\u0430\u0432\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c)! menu.special.exporttemplate=\u0421\u0434\u0435\u043b\u0430\u0442\u044c HTML-\u0444\u0430\u0439\u043b \u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c templateload.open=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d templateload.open.action= \u041e\u0442\u043a\u0440\u044b\u0442\u044c menu.settings.doubleclick=\u0414\u043b\u044f \u043c\u0430\u043a\u0440\u043e\u0441 \u0449\u0451\u043b\u043a\u043d\u0443\u0442\u044c \u0434\u0432\u044f \u0440\u0430\u0437\u0430 export.codebase=Codebase??? # \u0412\u0435\u0440\u0441\u0438\u044f 3.12 edit.equation=\u0423\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 # \u0412\u0435\u0440\u0441\u0438\u044f 3.23 menu.settings.squarepoints=\u041e\u0442\u043c\u0435\u0447\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0438 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u043a\u043e\u043c # \u0412\u0435\u0440\u0441\u0438\u044f 3.37 menu.options.export=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a menu.settings.minwidth=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u043e\u043b\u0449\u0438\u043d\u0430 \u043b\u0438\u043d\u0438\u0439 1 menu.settings.minpointsize=\u0422\u043e\u0442 \u0436\u0435 \u043c\u0438\u043d\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u043e\u0447\u0435\u043a menu.settings.minfontsize=\u0422\u043e\u0442 \u0436\u0435 \u043c\u0438\u043d\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 minfontsize.title=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 minfontsize.prompt=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430(\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 12) menu.options.minpointsize=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u043e\u0447\u0435\u043a menu.options.minfontsize=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 # \u0412\u0435\u0440\u0441\u0438\u044f 3.38 menu.settings.scalepdf=\u041c\u0430\u0441\u0448\u0442\u0430\u0431 \u0434\u043b\u044f PDF \u0438 EPS \u0432\u044b\u0432\u043e\u0434\u0430 1:1 # \u0412\u0435\u0440\u0441\u0438\u044f 3.41 menu.file.clip=\u0420\u0435\u0437\u043a\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 ... clip.title=\u0420\u0435\u0437\u043a\u0430 clip.width=\u0428\u0438\u0440\u0438\u043d\u0430 clip.height=\u0412\u044b\u0441\u043e\u0442\u0430 clip.screen=\u0411\u0435\u0437 \u0440\u0435\u0437\u043a\u0438 # \u0412\u0435\u0440\u0441\u0438\u044f 3.42 menu.options.arrowsize=\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0435\u043b\u043a\u0438 ... arrowsize.title=\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0435\u043b\u043a\u0438 # \u0412\u0435\u0440\u0441\u0438\u044f 3.44 iconhelp.large=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0440\u0443\u043f\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442 iconhelp.bold=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0436\u0438\u0440\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442 menu.options.largefont=\u041a\u0440\u0443\u043f\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442 menu.options.boldfont=\u0416\u0438\u0440\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442 warning.previewframe=\u0420\u0430\u043c\u043a\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u043a\u043d\u0430! message.move.select=\u0414\u0432\u0438\u0433\u0430\u0442\u044c: \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443 (SHIFT: \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u043e\u0447\u0435\u043a, ctrl: \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u043e \u043f\u0440\u0430\u0432\u043a\u0438)! # \u0412\u0435\u0440\u0441\u0438\u044f 3.46 iconbar.showseparators=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0438 # \u0412\u0435\u0440\u0441\u0438\u044f 3.48 menu.sizes=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u044b menu.options.minlinesize=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u043e\u043b\u0449\u0438\u043d\u0430 \u043b\u0438\u043d\u0438\u0439... minlinesize.title=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u043e\u043b\u0449\u0438\u043d\u0430 \u043b\u0438\u043d\u0438\u0439 minlinesize.prompt=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u043e\u043b\u0449\u0438\u043d\u0430 \u043b\u0438\u043d\u0438\u0439 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 1) arrowsize.prompt=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0435\u043b\u043a\u0438 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 10) menu.options.printscaler=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 menu.options.exportsettings=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a... printscaler.title=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 printscaler.width=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 (\u0432 cm) printscaler.height=\u0412\u044b\u0441\u043e\u0442\u0430 (\u0432 cm) printscaler.dpi=\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 (\u0432 dpi, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 300) printscaler.linewidth=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u043b\u0438\u043d\u0438\u0439(\u0432 cm, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 0.02) printscaler.pointsize=\u0420\u0430\u0437\u043c\u0435\u0440 \u0442\u043e\u0447\u0435\u043a (\u0432 cm, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 0.07) printscaler.textsize=\u0420\u0430\u0437\u043c\u0435\u0440 \u0442\u0435\u043a\u0441\u0442\u0430 (\u0432 cm, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 0.3) # \u0412\u0435\u0440\u0441\u0438\u044f 3.49 printscaler.screen=300 dpi printscaler.w=\u0428\u0438\u0440\u0438\u043d\u0430 (\u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445) printscaler.h=\u0412\u044b\u0441\u043e\u0442\u0430 (\u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445) printscaler.scale=\u041c\u0430\u0441\u0448\u0442\u0430\u0431 (\u043f\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044e \u043a \u044d\u043a\u0440\u0430\u043d\u0443) printscaler.middle=\u0423\u0440\u0435\u0437\u0430\u0442\u044c (\u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430) printscaler.sizes=\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u044f\u043c\u044b\u0435, \u0448\u0440\u0438\u0444\u0442\u044b \u0438 \u0442\u043e\u0447\u043a\u0438 menu.file.savepng=\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 (PNG-\u0444\u0430\u0439\u043b) warning.preview=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u043d\u043e\u0441\u0442\u044c\u044e \u0441 Java 1.1 iconedit.showseparators=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0438 printscaler.aspect=\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 printscaler.presets=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 printscaler.preset=\u0412\u044b\u0431\u043e\u0440 printscaler.preset.300dpi=\u0422\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 300 dpi printscaler.preset.300dpi6= \u0428\u0438\u0440\u0438\u043d\u0430 6 cm \u0441 300 dpi printscaler.preset.300dpi16=\u0428\u0438\u0440\u0438\u043d\u0430 16 cm \u0441 300 dpi printscaler.preset.window=\u0420\u0430\u0437\u043c\u0435\u0440 \u043e\u043a\u043d\u0430 printscaler.preset.clip50=\u0423\u0440\u0435\u0437\u0430\u0442\u044c \u043e\u043a\u043d\u043e \u043d\u0430 50% message.saving=\u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435! menu.options.printscalepreview=\u041f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a (Ctrl-F3) date=\u0421\u0434\u0435\u043b\u0430\u043d\u043e # \u0412\u0435\u0440\u0441\u0438\u044f 3.51 help=\u041f\u043e\u043c\u043e\u0449\u044c ./src/rene/zirkel/docs/CVS/RevisionCache/ZirkelProperties_no.properties#1.10000644000175000017500000010657011144764476025537 0ustar yvesyveslanguage=no_ version=Versjon homefile=index.html homepage=http://www.z-u-l.de/ about.title=Om programmet about.name=JavaPasser about.programmed=Programmet er skrevet av title=Passer close=Lukk ok=OK cancel=Avbryt abort=Avbryt done=Bra! Oppgaven er lst message=Melding warning=Advarsel yes=Ja no=Nei true=Sant false=Feil warning.nojob=Dette er ikke en oppgave warning.print=Feil ved utskrift warning.reset=Valget fr virkning neste gang programmet startes question.title=Sprsml question.intersection=Skal skjringen konstrueres? question.pointon=Konstrur et punkt p dette objektet? colors.black=Sort colors.blue=Bl colors.green=Grnn colors.brown=Brun colors.cyan=Turkis colors.red=Rd objects.point=Punkt objects.segment=Linjestykke objects.line=Linje objects.ray=Strle objects.circle=Sirkel objects.intersection=Skjringspunkt objects.move=Flytt punkt objects.hide=Skjul objekt objects.edit=Egenskaper objects.tracker=Spor objects.objecttracker=Automatisk spor objects.parallel=Parallell objects.plumb=Normal objects.circle3=Sirkel ut fra r og s objects.midpoint=Midtpunkt objects.quadric=Kjeglesnitt objects.angle=Vinkel objects.boundedpoint=Punkt p objekt objects.parameter=Angi makro-parameter objects.targets=Angi makroens ml objects.definejob=Definer en oppgave objects.runmacro=Kjr makro objects.delete=Slett objekter og deres avhengige objects.reorder=Flytt objekt opp p listen objects.animate=Animasjon objects.expression=Beregningsuttrykk objects.area=Polygon objects.text=Tekst objects.fixedcircle=Sirkel med fast radius objects.fixedangle=Vinkel med fast gradetall objects.fixedsegment=Linjestykke med fast lengde iconhelp.point=Punkt iconhelp.segment=Linjestykke iconhelp.line=Linje iconhelp.ray=Strle iconhelp.circle=Sirkel iconhelp.intersection=Skjringspunkt iconhelp.move=Flytt punkt iconhelp.hide=Skjul objekt iconhelp.edit=Endre objektegenskaper iconhelp.tracker=Spor iconhelp.objecttracker=Automatisk spor iconhelp.parallel=Parallell iconhelp.plumb=Normal iconhelp.circle3=Sirkel ut fra r og s iconhelp.midpoint=Midtpunkt iconhelp.quadric=Kjeglesnitt iconhelp.angle=Marker vinkel iconhelp.boundedpoint=Punkt p objekt iconhelp.hidden=Vis skjulte objekter iconhelp.color=Farge p neste objekt iconhelp.type=Type av neste punkt iconhelp.thickness=Bredde p neste objekt iconhelp.back=Slett siste objekt iconhelp.type0=Type av neste punkt iconhelp.thickness0=Bredde p neste objekt iconhelp.partial=Delvis synlige sirkler iconhelp.plines=Delvis synlige linjer iconhelp.arrow=Linjestykker som vektorer iconhelp.showcolor=Vis utvalgte farger iconhelp.runmacro=Kjr makro iconhelp.macro=Makro parametre/ml/definer iconhelp.expression=Beregningsuttryk iconhelp.showvalue=Vis objektenes verdier iconhelp.showname=Vis objektnavnet iconhelp.longnames=Lange objektnavn iconhelp.obtuse=Tillat vinkler over 180 iconhelp.solid=Ingen gennomsiktige flater iconhelp.grid=Vis rutenett iconhelp.comment=Kommentar iconhelp.defaults=Standardinnstillinger iconhelp.macro0=Makrodefinition iconhelp.visual=Konstruksjon med mus iconhelp.replay=Vis konstruksjon trinnvis iconhelp.oneforward=Fremover iconhelp.fastforward=Hurtig fremover iconhelp.allforward=Helt frem iconhelp.oneback=Tilbake iconhelp.fastback=Hurtig tilbake iconhelp.allback=Til start iconhelp.close=Lukk iconhelp.area=Fylt polygon iconhelp.text=Tekst med flere linjer iconhelp.fixedcircle=Sirkel med fast radius iconhelp.fixedangle=Vinkelbein iconhelp.fixedsegment=Linjestykke med fast lengde iconhelp.animate=Animasjon av punkt iconhelp.delete=Slett objekt og avhengige objekter iconhelp.undo=Angre iconhelp.nextbreak=G til neste pause iconhelp.setbreak=Sett inn pause/slett pause iconhelp.zoom=Zoom med mus (%) shortcuts.point=p shortcuts.segment=s shortcuts.line=l shortcuts.ray=h shortcuts.circle=c shortcuts.intersection=x shortcuts.move=f shortcuts.hide=g shortcuts.edit=r shortcuts.tracker=i shortcuts.objecttracker=j shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=k shortcuts.angle=v shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=u shortcuts.area=a shortcuts.text=t shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) menu.file=Fil menu.file.new=Ny konstruksjon menu.file.clearmacros=Slett alle makroer menu.file.load=pne konstruksjon... (Ctrl-o) menu.file.loadjob=pne oppgave... (Ctrl-j) menu.file.savejob=Lagre som oppgave... (Ctrl-k) menu.file.save=Lagre konstruksjon (Ctrl-s) menu.file.saveas=Lagre som... (Ctrl-a) menu.file.includemacros=Lagre med makroer menu.file.exit=Avslutt programmet (Alt-F4) menu.file.print=Skriv ut ... menu.file.print.isoscale=Forhold 1:1 i cm menu.file.savebmp=Lagre som bitmap (BMP) ... menu.file.savefig=Lagre grafikk (som FIG) ... menu.file.loadrun=pne beskrivende konstruksjon (Ctrl-r) menu.file.editrun=Rediger beskrivende konstruksjon (Ctrl-x) menu.actions=Utfr menu.actions.elementary=Enkle verkty menu.actions.complex=Avanserte verkty menu.actions.fixed=Faste objekter menu.actions.move=Verkty som beveges menu.actions.decorative=Dekorative objekter menu.options=Innstillinger menu.options.visual=Konstruksjon med mus (Ctrl-F6) menu.options.hidden=Vis skjulte objekter (F9) menu.options.comment=Kommentar ... (F10) menu.options.constructiondisplay=Beskrivelse (F11) menu.options.grid=Vis rutenett (F12) menu.options.showcolor=Vis Farge menu.options.defaultcolor=Farge menu.options.defaultthickness=Standardbredde menu.options.defaulttype=Vis punkt som menu.options.setgrid=Endre rutestrrelse ... menu.options.shownames=Vis objektnavn (Ctrl-F6) menu.options.longnames=Lange objektnavn (Ctrl-F7) menu.options.obtuse=Tillat vinkler over 180 (Ctrl-F12) menu.options.solid=Ingen gjennomsiktige flater menu.options.showvalues=Vis objekters verdier (Ctrl-F8) menu.options.partial=Delvis synlige sirkler (Ctrl-F9) menu.options.plines=Delvis synlige linjer (Ctrl-F10) menu.options.arrow=Linjestykker som vektorer (Ctrl-F11) menu.options.editicons=Rediger verktyspanel menu.options.all=Alle menu.options.setdigits=Desimaler ... menu.options.back=Tilbake (<--) menu.options.undo=Angre (Ctrl-z) menu.zoom=Zoom menu.zoom.in=Zoom inn (+) menu.zoom.out=Zoom ut (-) menu.zoom.left=Til venstre (Venstrepil) menu.zoom.right=Til hyre (Hyrepil) menu.zoom.up=Opp (Pil opp) menu.zoom.down=Ned (Pil ned) menu.macros=Makroer menu.special.definemacro=Definer makro (Ctrl-F5) menu.special.runmacro=Kjr makro (F5) menu.special.savemacros=Lagre makroer menu.special.loadmacros=pne makroer menu.special.deletemacros=Slett makroer menu.special=Funksjoner menu.special.testjob=Prv oppgave (Ctrl-F1) menu.special.jobcomment=Oppgavetekst ... (F8) menu.special.export=Exporter som HTML (Ctrl-e) menu.special.replay=Vis konstruksjon trinnvis menu.help=Hjelp menu.help.about=Om programmet menu.help.help=Hjelp (F1) menu.help.browser=HTML-hjelp og demoer menu.help.configure=Innstill browser menu.help.text=Korte hjelpetekster menu.help.macros=Makroer menu.help.tools=Verkty menu.help.gui=Brukergrensesnitt menu.help.interactive=Kommandotilstand menu.help.tips=Tips menu.settings=Programinnstillinger menu.settings.fullicons=To fulle verktylinjer menu.settings.utf=Bruk UTF8-kodning (uten , , ) menu.settings.autohide=Skjul andre skjringspunkt menu.settings.iconbartop=Verktypanel verst menu.settings.showtips=Vis verktytips menu.settings.simplegraphics=Bruk enkel grafikk menu.settings.sure=Bekreft fr pne og lukke menu.settings.pointon=Spr fr konstruksjon av punkt p et objekt menu.settings.intersection=Spr fr konstruksjon av skjringspunkt menu.settings.choice=Vis dialogen "Velg objekt" menu.settings.movename=Vis objektverdier under flytting menu.settings.movefixname=Faste objektverdier under flytting menu.settings.restricted=Enkle innstillinger til skolebruk menu.colors=Angi farger colors.default=Standardfarger colors.color0=Farge 1 (sort) colors.color1=Farge 2 (grnn) colors.color2=Farge 3 (bl) colors.color3=Farge 4 (brun) colors.color4=Farge 5 (turkis) colors.color5=Farge 6 (rd) colors.background=Bakgrunn colors.select=Marker colors.target=Ml myfiledialog.dir=Mappe myfiledialog.file=Filnavn myfiledialog.pattern=Filtype filedialog.open=pne filedialog.saveas=Lagre som ... filedialog.open.action=pne filedialog.saveas.action=Lagre filedialog.htmlsave=Lagre som HTML filedialog.htmlsave.action=Lagre save=Lagre load=pne abort=Avbryt bound.release=Frigjr fra objekt bound.bind=Bind til objekt bound.error=Objekt ikke funnet fr skjring constructiondisplay.edit=Rediger objekt constructiondisplay.copy=Kopier til utklippstavle edit.Title=Egenskaper edit.name=Navn edit.text=Beskrivelse edit.hidden=Skjult edit.fixed=Fast edit.color=Farge edit.ok=OK edit.cancel=Avbryt edit.showname=Vis navn edit.point.title=Punkt edit.point.x=X edit.point.y=Y edit.point.type=Type edit.point.showvalue=Vis koordinater edit.point.intersection=Forskjellig fra edit.point.bound=Bundet objekt edit.point.away=Bort fra edit.point.close=Tett p edit.point.free=Fri edit.line.title=Linje, strle, linjestykke edit.line.normal=Mellom edit.line.thick=Bred edit.line.thin=Smal edit.line.type=Type edit.circle.title=Sirkel edit.circle.length=Radius edit.circle.partial=Kun delvis synlig edit.circle.range=Angi tegngrenser edit.circle.killrange=Opphev tegngrenser edit.point.colortype=Tykkelse edit.segment.length=Lengde edit.segment.showvalue=Vis lengde edit.plumb.restricted=Begrenset edit.angle.title=Vinkel edit.angle.length=Strrelse edit.angle.displaysize=Vis vinklens strrelse edit.angle.normal=Normal edit.angle.small=Liten edit.angle.large=Stor edit.expression.title=Uttrykk edit.expression=Beregningsuttrykk edit.expression.prompt=Beskrivelse edit.text.title=Tekst edit.area.title=Polygon edit.area.back=I bakgrunnen export.title=Lagre som HTML export.pagetitle=Tittel p siden export.width=Bredde export.height=Hyde export.jar=Java-arkiv export.comment=Bruk kommentar som HTML-tekst export.file=Konstruksjonsfil export.job=Oppgave export.color=Farge export.backgroundcolor=Bruk som bakgrunnsfarge export.appletcolor=Bruk som Farge p applet export.plain=Uten ramme export.3D=Ramme export.breaks=Spill av med pauser export.icons=Ramme og ikoner export.full=Ramme, ikoner og status export.nonvisual=Ramme, ikoner og inntastningslinje export.style=Applet-Stil export.setcolor=Velg Farge export.savefirst=Konstruksjonen skal skjules frst export.soltext=Lsning export.stylesheet=CSS-fil export.solution=Lsningsfil export.jumpsol=G til lsning export.linksol=Link til lsning export.savesol=Lagre lsningsfil export.track=Spor export.digits=Skjul antall desimaler export.setsize=Sett strrelse export.signature=Skrevet med JavaPasser av R. Grothmann export.colors=Skjul brukerdefinerte farger export.background=Skjul definert bakgrunn help.title=Hjelp help.error=Hjelpefilen ikke funnet help.file=no_schoolgeometry.txt coloreditor.title=Endre fargen coloreditor.red=Rd coloreditor.green=Grnn coloreditor.blue=Bl coloreditor.color=Brukerdefinert comment.title=Kommentar comment.set=OK comment.cancel=Avbryt comment.close=Lukk iconedit.title=Rediger verktypanel iconedit.twobars=Verkty i to linjer jobcomment.title=Oppgave select.title=Velg objekt select.ok=OK select.cancel=Avbryt select.comment=Vis kommentar select.all=Alle message.circle.midpoint=Sirkel: Velg senter message.circle.radius=Sirkel: Punkt p periferi (Shift: Fast radius) message.fixedcircle.midpoint=Sirkel med fast radius: Velg sentrum message.fixedcircle.radius=Sirkel med fast radius: Klikk et sted message.edit=Egenskaper: Velg et objekt message.line.first=Linje: Velg frste punkt message.line.second=Linje: Velg andre punkt message.move.select=Flytt: Velg et punkt message.move.move=Flytt: Flytt punktet message.point=Punkt: Sett et punkt message.segment.first=Linjestykke: Velg frste punkt message.segment.second=Linjestykke: Velg andre punkt (Shift: Fast lengde) message.fixedsegment.first=Linjestykke med fast lengde: Frste punkt message.fixedsegment.second=Linjestykke med fast lengde: Andre punkt message.ray.first=Strle: Velg utgangspunktet message.ray.second=Strle: Velg andre punkt message.intersection.first=Skjringspunkt: Velg frste objekt eller skjringen message.intersection.second=Skjringspunkt: Velg andre objekt message.hide=Skjul/vis: Velg et objekt message.tracker.select=Spor: Velg punkt eller linje message.tracker.selectpoint=Spor: Velg punktet som skal flyttes message.tracker.move=Spor: Flytt punktet message.objecttracker.select=Automatisk spor: Velg et punkt eller en linje message.objecttracker.object=Automatisk spor: Velg en linje eller sirkel message.objecttracker.selectpoint=Automatisk spor: Velg det punkt som skal beveges message.objecttracker.selectanypoint=Automatisk spor: Velg et andre punkt som skal beveges message.objecttracker.move=Automatisk spor: Beveg punktet message.objecttracker.start=Automatisk spor: Start animasjonen message.objecttracker.stop=Automatisk spor: Stopp animasjonen message.parallel.first=Parallell: Velg en linje message.parallel.second=Parallell: Velg et punkt message.plumb.first=Normal: Velg en linje message.plumb.second=Normal: Velg et punkt message.circle3.first=Sirkel: Velg frste radiuspunkt message.circle3.second=Sirkel: Velg andre radiuspunkt message.circle3.midpoint=Sirkel: Velg sentrum message.midpoint.first=Midtpunkt: Velg frste punkt message.midpoint.second=Midtpunkt: Velg andre punkt message.quadric=Keglesnit: Velg punkt nummer message.angle.first=Marker vinkel: Velg et punkt p frste ben message.angle.root=Marker vinkel: Velg vinkelspiss message.angle.second=Marker vinkel: Punkt p andre ben (Shift-tast: Fast strrelse) message.fixedangle.first=Vinkelbein: Velg et punkt p frste vinkelbein message.fixedangle.root=Vinkelbein: Velg vinkelspiss message.fixedangle.second=Vinkelbein: Velg et punkt p andre vinkelbein message.label.select=Flytt tekst: Velg teksten message.label.move=Flytt tekst: Flytt teksten message.boundedpoint=Punkt p et objekt: Velg en linje eller sirkel message.parameters=Makroparameter: Velg objekter message.targets=Makro mlobjekter: Velg objekter message.savejob.first=Definer oppgave: Velg det siste objekt som skal vises message.savejob.second=Definer oppgave: Velg mlobjektet message.savejob.third=Definer oppgave: Velg hvilke andre objekter som skal vises message.runmacro=Makro %: %. (type %) % message.runmacro.return=(Mellomromstast velger %) message.runmacro.fixes=(Shift for velge flere objekter) message.delete=Slett objekt: Velg objekt message.reorder=Flytt objekt bakover: Velg et objekt message.expression=Beregningsuttrykk: Velg et sted message.area=Utfylt polygon: Velg et punkt, avslutt med Klikk p et tidligere valgt punkt message.text=Tekst: Velg et sted message.animator.point=Animation: Velg et punkt message.animator.segment=Animasjon: Velg linjestykker eller sirkler message.animator.running=Animasjon: Er i gang message.range.first=Tegn sirkel fra punkt ... message.range.second=... til punkt message.setaway.away=Bort fra punktet message.setaway.close=Mot punktet objectsedit.title=Rediger egenskaper point.type.square=Kvadrat point.type.diamond=Ruter point.type.circle=Sirkel point.type.dot=Prikk color.type.normal=Normal color.type.thick=Bred color.type.thin=Smal text.point=Punkt i %, % text.line=Linje gjennom % og % text.segment=Linjestykke fra % til % text.segment.fixed=Linjestykke fra % til % med lengden % text.ray=Strle fra % i retning mot % text.intersection=Skjring mellom % og % text.circle=Sirkel om % gjennom % text.circle.fixed=Sirkel om % gjennom % med radius % text.fixedcircle=Sirkel om % med radius % text.circle3=Sirkel om % med radius fra % til % text.parallel=Parallell gjennom % til % text.midpoint=Midtpunkt mellom % og % text.quadric=Kjeglesnitt gjennom % text.plumb=Normal gjennom % til % text.angle=Marker vinkel % - % - % text.angle.fixed=Vinkelbein % - % - % med strrelsen % text.boundedpoint=Punkt p % text.expression=Beregningsuttrykk "%" i %, % text.area=Polygon text.fixedangle=Vinkelbein % - % med strrelsen % name.Point=Punkt name.Intersection=Skjring name.OtherIntersection=Skjring name.Circle=Sirkel name.Circle3=Sirkel name.Segment=Linjestykke name.Ray=Strle name.TwoPointLine=Linje gjennom to punkter name.Line=Linje name.Parallel=Parallell name.Midpoint=Midtpunkt name.Quadric=Kjeglesnitt name.Plumb=Normal name.Angle=Vinkel name.PointOn=Punkt p objekt name.Expression=Beregningsuttrykk name.Polygon=Polygon name.short.Point=P name.short.Intersection=S name.short.OtherIntersection=S name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=h name.short.Line=l name.short.Parallel=p name.short.Midpoint=M name.short.Quadric=K name.short.Plumb=n name.short.Angle=v name.short.PointOn=Pp name.short.Expression=U name.short.Polygon=A prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==h(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==S(,) prompt.midpoint==M(,) prompt.quadric==K(,,,,) prompt.parallel==p(,) prompt.plumb==n(,) prompt.angle==v(,,) prompt.area=A(,,) prompt.expression=U popup.hidden=Vis skjulte objekter popup.replay=G trinnvis gjennom konstruksjonen popup.empty=--- Makroer --- replay.title=Trinnvis reorder.title=Flytt objekt bakover reorder.message=Sett inn etter reorder.notfound=Objektet ble ikke funnet reorder.warning=Operasjonen kan ikke utfres setgrid.title=Rutebredde setgrid.prompt=Ny rutebredde setgrid.set=Sett definemacro.title=Makrodefinisjon definemacro.name=Navn definemacro.comment=Kommentar definemacro.parameters=Spr etter parametre definemacro.noparams=Ingen parameter definert definemacro.nomacro=Ingen makro definert definemacro.targetsonly=Kun mlene ses definemacro.invisible=Skjul helt definemacro.promptfor=Spr etter: macro.replace.title=Erstatt makro macro.replace=Erstatt makro: macro.replace.all=Alle macro.usage=Feil bruk av makroen (se tips) macro.prompt.title=Parameterangivelse macro.prompt.prompt=Angi en verdi for parameteren macro.prompt.illegal=Ugyldig verdi digits.title=Antall desimaler digits.edit=I egenskapsdialogen digits.lengths=Til visning digits.angles=Til vinkler editrun.title=Behandle konstruksjonsbeskrivelsen editrun.run=Lagre og utfr editrun.load=Annen beskrivelse sure.title=Er du sikker? sure.macros=Slett alle makroer? sure.delete=Glem alle endringer? close.title=Lukk close.prompt=Vil du avslutte programmet? file.exists.title=Filen finnes file.exists.overwrite=Det eksisterer allerede en fil med det navnet Overskrive? exception.nparams=Feil antall parametre exception.notfound=Objekt ikke funnet eller uttrykk ikke definert exception.type=Feil parametertype exception.expression=Ugyldig uttrykk exception.canfix=Objektet kan ikke lses fast exception.fix=Feil verdi exception.novalue=Feil verdi exception.elementary=Feil element i uttrykket exception.bracket=Hyreparentes mangler exception.quotes=Avsluttende " mangler exception.dot=Feil tallformat exception.nodigit=Tallet inneholder ingen sifre exception.function=Ukjent funksjon exception.parameter=Feil parameter exception.macro=Feil makroparameter exception.macrotarget=Feil mlobjekt exception.name=Du m angi et navn exception.prompt=Feil objekt som det sprres etter exception.prompt.parameter=Kan ikke vre en parameter exception.parameters=Feil parameter exception.brackets=Feil i parenteser exception.job=Feil oppgaveparameter exception.track=Feil sporparameter exception.animate=Feil animasjonsparameter exception.boolean=Verdien sann eller feil var ventet exception.value=Ugyldig verdi exception.color=Ugyldig farge exception.colortype=Ugyldig bredde exception.type=Ugyldig punkttype exception.macroparameter=Feil makroparameter exception.macrotarget=Feil mlobjekt exception.double=Navnet finnes allerede error.setaway=Dette punkt er ikke definert fr skjringen error.objecttracker.depends=Punktet er bundet til et andre objekt constructiondisplay.title=Konstruktsjnsbeskrivelse function.hide=Skjul function.hide.short=skjul function.rename=Navn function.rename.short=navn function.value=verdi function.value.short=verdi function.window=Vindu function.window.short=Vindu function.color=Farge function.color.short=Farge function.thickness=Bredde function.thickness.short=bredde function.type=Type function.type.short=type function.partial=delvis function.partial.short=delvis function.fill=Utfylt function.fill.short=fylt function.back=tilbake function.back.short=tilb function.away=Langtfra function.away.short=langt function.closeto=Nrme function.closeto.short=mot function.acute=Spiss function.acute.short=spiss function.obtuse=Stump function.obtuse.short=stump function.solid=ikke-transparent function.solid.short=fylt function restrict=utsnitt function restrict.short=utsnitt expression.value=verdi parameter=Parameter parameter.short=Param target=ml target.short=ml macro=Makro macro.short=makro away=langtfra away.short=fra end=Slutt end.short=slutt invisible=Usynlig invisible.short=usynlig showall=Synlig showall.short=synlig configure.title=Angi nettleser configure.prompt=Nettleserkommando background.error=Kunne ikke pne bildet (GIF eller JPG). menu.background=Bakgrunn menu.background.grab=Gjr konstruksjon til bakgrunn menu.background.clear=Slett bakgrunn menu.background.load=pne bakgrunnsbilde ... menu.background.tile=Side ved side menu.background.center=Sentrer menu.background.usesize=Tilpass vinduet iconhelp.grab=Sett eller Slett bakgrunn filedialog.backgroundload=pne bakgrunnsbilde filedialog.backgroundload.action=pne # New Resources in Version 2.14 menu.file.compress=Komprimer alltid menu.file.savesvg=Lagre grafikk (som SVG) ... # Version 2.15 loading=pner konstruksjon, vennligst vent... # Version 2.18 and 2.19 menu.settings.font.default=Normal menu.settings.font.bold=Fet menu.settings.font.large=Stor menu.file.saveeps=Lagre grafikk (som EPS) ... menu.fonts=Skrifttype # Version 2.20 bmpscaler.title=Skaler bitmap bmpscaler.width=Bredde bmpscaler.height=Hyde bmpscaler.scale=Faktor (trykk enter) bmpscaler.illegal=Verdi uten for grensene # Version 2.21 renamemacro.title=Endre navn til makro renamemacro.name=Nytt makronavn menu.special.renamemacro=Endre navn til makro ... # Version 2.23 savequestion.title=Lagre konstruksjon savequestion.qsave=Lagre endringer? # Version 2.25 exception.printsize=Konstruksjonen kan ikke vre p siden iconhelp.nohelp=Det er ikke hjelp til dette emne iconhelp.type?=Punkt-type iconhelp.thickness?=Bredde iconhelp.color?=Farge iconhelp.filled=Fargelagt objekt iconhelp.isback=Tegn som bakgrunn iconhelp.inverse=Speil vinkelen iconhelp.angle?=Strrelse # Version 2.31 menu.settings.indicate=Fremhev objekter fr valg menu.options.other=Andre innstillinger menu.help.welcome=Nytt i denne versjon iconhelp.twolines=Ikoner i to linjer iconhelp.qintersection=Spr om skjring skal konstrueres iconhelp.qchoice=Vis dialogen "Velg objekt" iconhelp.qpointon=Spr fr konstruksjon av punkt p objekt iconhelp.noindicate=Fremhev ikke objekter under markr # Version 2.33 menu.file.new=Ny konstruksjon (Ctrl-n) # Version 2.34 edit.text.title=Rediger tekst edit.text.settings=Tekstegenskaper menu.settings.filedialog=Bruk ikke systemets fil-dialog # Version 2.35 menu.settings.bitmapbackground=Bruk bakgrunnsfargen i bitmaps # Version 2.36 menu.file.savegraphics=Lagre grafikk som ... menu.file.savepng=Lagre grafikk (som PNG) bmpscaler.title=Skaler grafikk # Version 2.37 menu.file.savepdf=Lagre grafikk (som PDF)... iconhelp.chord=Vis som linjestykke # Version 2.39 message.setfixedangle.first=Sett vinkelen: Frste punkt? message.setfixedangle.second=Sett vinkelen: Vinkelspiss? message.setfixedangle.third=Sett vinkelen: Tredje punkt? edit.fixedangle.set=Angi strrelse... message.setfixedcircle.first=Angi sirklens radius: Frste punkt? message.setfixedcircle.second=Angi sirklens radius: andre punkt? edit.fixedcircle.set=Angi strrelse... # Version 2.40 minpointsize.title=Angi minste punktstrrelse minpointsize.prompt=Angi minste punktstrrelse (standard: 3) menu.settings.font.minpointsize=Minste punktstrrelse... # Version 2.41 name.short.Track=Tr text.track=Spor av % mens % beveges p % trackquestion.keep=Behold sporet i konstruksjonen? trackquestion.title=Behold sporet menu.options.track=Behold sporet (Shift-Enter) iconhelp.indicate=Vis konstruksjonsresultat fr klikk iconhelp.nohelp=Ingen hjelp til dette emne # Version 2.42 objects.draw=Tegn med musen menu.options.cleardraw=Slett tegningen (Esc) iconhelp.draw=Tegn med musen message.draw=Tegn med musen (Slett med ESC) shortcuts.draw=; # Version 2.43 message.move.select=Flytt: Velg et punkt (shift: vis utgangsposisjon) message.rename=Endre navn til A,B,C,...: Velg objekter iconhelp.rename=Endre navn til A,B,C,... objects.rename=Endre navn til A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Vis ikke vinkelbein # Version 2.45 menu.settings.smartboard=Smartboard-modus shortcuts.zoom=% objects.zoom=Zoom med musen message.zoom=Trekk senter eller zoom inn og ut # Version 2.46 menu.special.restricticons=Begrenset verktypanel # Version 2.47 menu.settings.indicate.simple=Fremhev kun punkter fr konstruksjon menu.settings.beginner=Begynnermodus question.again=Spr alltid # Version 2.49 definemacro.parameters=Spr etter parametre ("=Navn" for alltid bruke dette objektet) # Version 2.53 menu.actions.angles=Vinkler menu.actions.circles=Sirkler menu.actions.lines=Linjer menu.actions.points=Punkter # Version 3.00 info.title=Kontekst Hjelp info.related=Relaterte Emner info.notfound=Fant ikke noe om emnet! info.noresults=Fant ikke noe! info.searchresults=- Ske resultater - info.select=- Velg - info.search=Sk info.back=Tilbake info.start=Start iconhelp.info=Hjelp menu.help.info=Hjelp myfiledialog.homedir=CaR Filer myfiledialog.windowshome=Mine Dokumenter myfiledialog.mkdir=Lag Mappe myfiledialog.back=Tilbake menu.file.alwaysclearmacros=Nullstill Makroer fr Lasting about.language=Sprk bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Sikkerhetskopier # Version 3.02 menu.options.hideduplicates=Skjul Duplikater # Version 3.03 menu.options.function=Lag en Funksjon text.function=Funksjon ( % , % ) function.varmin=Fra function.varmax=Til function.dvar=Steg function.var=Variabel function.y=Uttrykk for Y iconhelp.function=Lag en Funksjon menu.options.editlast=Endre siste Objekt iconhelp.control.edit=Endre siste Objekt iconhelp.control.hide=skjul Duplikater edit.function.title=Funksjon eller Kurve iconhelp.control.runmacro=Kjr siste makro igjen # Version 3.05 point.type.cross=Kryss point.type.dcross=Diagonalt Kryss shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Enhet menu.special.break=Bruddpunkt menu.bp.setbreak=Sett bruddpunkt menu.bp.clearbreak=Nullstill bruddpunkt menu.bp.sethidingbreak=Sett Skjult bruddpunkt menu.bp.animatebreak=Animer bruddpunkt iconhelp.animatebreak=Animer bruddpunkt message.animatebreak=Animer bruddpunkt: klikk for stoppe (shift venstre/hyre for hastighet)! menu.special.exporttemplate=HTML Eksport med Templates templateload.open=pne Template templateload.open.action=pne menu.settings.doubleclick=Dobbelklikk for Makroer export.codebase=Kodebase # Version 3.12 edit.equation=Formel # Version 3.23 menu.settings.squarepoints=Tegn alltid punkter som kvadrater # Version 3.37 menu.options.export=Grafikk Eksport Innstillinger menu.settings.minwidth=Minimal linje bredde er 1 menu.settings.minpointsize=Respekter minimal point strrelse menu.settings.minfontsize=Respekter minimal font strrelse minfontsize.title=Sett Minimum Font Strrelse minfontsize.prompt=Minimal font strrelse (standard: 12) menu.options.minpointsize=Minimal Punkt Strrelse menu.options.minfontsize=Minimal Font Strrelse # Version 3.38 menu.settings.scalepdf=Skaler PDF og EPS 1:1 # Version 3.41 menu.file.clip=Klipp til Grafikk Output ... clip.title=Sett Klipping clip.width=Bredde clip.height=Hyde clip.screen=ingen Klipping # Version 3.42 menu.options.arrowsize=Pil-strrelse ... arrowsize.title=Pil-strrelse # Version 3.44 iconhelp.large=Bruk stor font strrelse iconhelp.bold=Bruk fet font menu.options.largefont=Stor Font Strrelse menu.options.boldfont=Fet Font warning.previewframe=Ramme strre enn vindu! message.move.select=Flytt: Velg et punkt (shift: flere punkter, ctrl: vis tidligere tilstand)! # Version 3.46 iconbar.showseparators=Vis Separatorer # Version 3.48 menu.sizes=Sett Strrelser menu.options.minlinesize=Minimal Linje Bredde ... minlinesize.title=Minimal Linje Bredde minlinesize.prompt=Minimal Linje Bredde (Standard 1) arrowsize.prompt=Sett Pil-strrelse (Standard: 10) menu.options.printscaler=Sett Eksport Strrelse ... menu.options.exportsettings=Eksport Innstillinger ... printscaler.title=Sett Eksport Strrelse printscaler.width=Bredde (i cm) printscaler.height=Hyde (i cm) printscaler.dpi=Resolution (i dpi, standard 300) printscaler.linewidth=Linje Bredde (i cm, standard 0.02) printscaler.pointsize=Punkt Strrelse (i cm, standard 0.07) printscaler.textsize=Tekst Strrelse (i cm, standard 0.3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=Bredde (i pixler) printscaler.h=Hyde (i pixler) printscaler.scale=Skaler (relativt til skjerm) printscaler.middle=Skjr ut (ingen reskalering) printscaler.sizes=Skaler linjer, fonter, og punkter menu.file.savepng=Lagre Grafikk som PNG warning.preview=Forhndsvisning vil ikke virke fullstendig med Java 1.1 iconedit.showseparators=Vis verktylinjedeler printscaler.aspect=Behold relativt strrelsesforhold printscaler.presets=Forhndsinstillinger printscaler.preset=Gjr et valg printscaler.preset.300dpi=Eksakt skalert med 300 DPI printscaler.preset.300dpi6=6 cm Bredde med 300 DPI printscaler.preset.300dpi16=16 cm Bredde med 300 DPI printscaler.preset.window=Vindu Strrelse printscaler.preset.clip50=Vindu Strrelse kuttet 50% message.saving=Vennligst vent! menu.options.printscalepreview=Forhnsdvis Eksport (Ctrl-F3) date=Build # Version 3.51 help=Hjelp # Version 3.61 editconditionals.title=Endre Betingelser editconditionals.hidden=Skjult editconditionals.superhidden=Fullstendig skjult editconditionals.visible=Normal editconditionals.showname=Vis Navn editconditionals.showvalue=Vis Verdi editconditionals.background=Bakgrunn editconditionals.solid=Fylt exception.superfluous=Overfldig Tekst i Uttrykk # Version 3.62 menu.options.selectionsize=Sett standard strrelse p valgt omrde selectionsize.title=Strrelse p valgt omrde selectionsize.prompt=Strrelse p valgt omrde (standard 1.5) # Version 3.63 select.comment.title=Makro Kommentar # Version 3.68 edit.area.area=Areal # Version 3.73 myfiledialog.oldfiles=Gamle Filer # Version 3.74 iconhelp.load=pne Konstruksjon (Ctrl-o) iconhelp.save=Lagre Konstruksjon (Ctrl-s) iconhelp.new=Ny Konstruksjon (Ctrl-n) # Version 3.81 warning.loadbackground=Feil ved lasting av bakgrunn # Version 3.9 function.x=Uttrykk for X (tom for funksjoner) # Version 3.91 constructiondisplay.select=Velg constructiondisplay.all=Alle Objekter constructiondisplay.visible=Synlige Objekter constructiondisplay.points=Punkter constructiondisplay.lines=Linjer constructiondisplay.circles=Sirkler constructiondisplay.angles=Vinkler constructiondisplay.other=Andre Objekter menu.file.copypng=Kopier til utklippstavle exception.clipboardcopy=Kopiering feilet! menu.options.finegrid=Kun akser # Version 3.93 edit.function.center=Sett Senter edit.function.free=Flyttbart Senter message.setcenter=Velg senterpunkt! # Version 3.94 message.edit=Endre: Objekt (shift: flere objekter, ctrl: betingelser)? # Version 3.95 edit.function.special=Kun punkter # Version 3.97 error.image=Feil ved innlasting av bilde! filedialog.imageload=Last inn Bilde filedialog.imageload.action=Last message.image=Bildepunkt prompt.image=bilde(,,,) objects.image=Bilde shortcuts.image=_ # Version 3.98 exception.depends=% avhenger av objektet. error.depends=% avhenger av objektet. constructiondisplay.sorted=Sortert ved generering # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Uttrykk # Version 4.00 iconhelp.image=Last inn bilde(_) message.image=Bilde anker punkt % message.image.last=Siste bilde anker punkt (eller bruk valgt punkt) # Version 4.01 name.FixedAngle=Fast vinkel # Version 4.04 menu.moresettings=Settings menu.settings.language=Velg sprk language.title=Velg sprk language.prompt=Sprk ved neste programstart # Version 4.05 constructiondisplay.invalid=Ugyldig Objekt # Version 4.08 menu.settings.constructiondisplay=Vis Konstruksjon kontinuerlig (F11) # Version 4.09 constructiondisplay.editconditions=Endre betingelser constructiondisplay.delete=Slett valgte objekter constructiondisplay.hide=Skjul / Vis constructiondisplay.superhide=Skjul helt # Version 4.2 edit.expression.slider=Vis som glider menu.grid.options=Rutenett innstillinger menu.options.leftsnap=Snap with Left Button Drag menu.settings.boundingbox=Lag Bounding Box (bb) fil # Version 4.3 latexsettings.title=Oppsett av LaTeX eksport latexsettings.boundingbox=Lag Bounding box bb-fil latexsettings.latexinput=Lag LaTeX idx-fil latexsettings.doubledollar=LaTeX utfres $$...$$ latexsettings.dollar=LaTeX utfres $...$ latexsettings.nodollar=LaTeX utfrer alle strenger latexsettings.fullpath=Bruk filsti printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=12 cm bredde med 300 DPI printscaler.latex=Lagre for LaTeX menu.background.usewidth=Tilpass kun hyden # Version 4.4 menu.options.restricted=Begrens skjringer menu.options.sizes=Bestem strrelser ... sizesdialog.title=Strrelser minlinesize.prompt=Minimal linje bredde (standard: 1) minpointsize.prompt=Minimal punkt strrelse (standard: 3) minfontsize.prompt=Minimal font strrelse (standard: 12) arrowsize.prompt=Pil strrelse (standard: 10) selectionsize.prompt=Utvalg strrelse (standard: 1.5) warning.loadmacros=Error under lasting av makro! warning.macrodefinition=% er brukt, men er ikke i makro! edit.circle.bounds=Vis som bue edit.circle.range=Bestem buestrrelse # Version 4.5 edit.track.dmin=Minimale skritt (standard: 0.001) # Version 4.6 menu.settings.smallicons=Bruk sm ikoner menu.settings.oldicons=Bruk gamle ikoner # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof=Spor av % nr % endres # Version 5 # Fix error.image edit.discrete=Diskrete error.fixedsegment=Kan ikke fikse dette segmentet!./src/rene/zirkel/docs/CVS/RevisionCache/ZirkelProperties_da.properties#1.10000644000175000017500000006415311144764476025507 0ustar yvesyveslanguage=da_ homefile=index.html about.title=Om programmet about.name=JavaPasser about.programmed=Programmet er skrevet af title=Passer close=Luk ok=OK cancel=Annuller abort=Annuller done=Godt! Opgaven er lst message=Meddelelse warning=Advarsel yes=Ja no=Nej true=sand false=falsk warning.nojob=Dette er ikke en opgave warning.print=Udskrivningsfejl warning.reset=Valget fr virkning nste gang programmet startes question.title=Sprgsml question.intersection=Skal skringen konstrueres? question.pointon=Konstrur et punkt p dette objekt? colors.black=Sort colors.blue=Bl colors.green=Grn colors.brown=Brun colors.cyan=Turkis colors.red=Rd objects.point=Punkt objects.segment=Linjestykke objects.line=Linje objects.ray=Halvlinje objects.circle=Cirkel objects.intersection=Skringspunkt objects.move=Flyt punkt objects.hide=Skjul objekt objects.edit=Egenskaber objects.tracker=Spor objects.objecttracker=Automatisk spor objects.parallel=Parallel objects.plumb=Normal objects.circle3=Cirkel ud fra r og C objects.midpoint=Midtpunkt objects.quadric=Keglesnit objects.angle=Vinkel objects.boundedpoint=Punkt p objekt objects.parameter=Angiv makro-parameter objects.targets=Angiv makroens ml objects.definejob=Definer en opgave objects.runmacro=Kr makro objects.delete=Slet objekter og deraf afhngige objects.reorder=Flyt objekt opad p listen objects.animate=Animation objects.expression=Beregningsudtryk objects.area=Polygon objects.text=Tekst objects.fixedcircle=Cirkel med fast radius objects.fixedangle=Vinkel med fast gradtal objects.fixedsegment=Linjestykke med fast lngde iconhelp.point=Punkt iconhelp.segment=Linjestykke iconhelp.line=Linje iconhelp.ray=Halvlinje iconhelp.circle=Cirkel iconhelp.intersection=Skringspunkt iconhelp.move=Flyt punkt iconhelp.hide=Skjul objekt iconhelp.edit=Indstil objektegenskaber iconhelp.tracker=Spor iconhelp.objecttracker=Automatisk spor iconhelp.parallel=Parallel iconhelp.plumb=Normal iconhelp.circle3=Cirkel ud fra r og M iconhelp.midpoint=Midtpunkt iconhelp.quadric=Keglesnit iconhelp.angle=Marker vinkel iconhelp.boundedpoint=Punkt p objekt iconhelp.hidden=Vis skjulte objekter iconhelp.color=Farve p nste objekt iconhelp.type=Type af nste punkt iconhelp.thickness=Bredde p nste objekt iconhelp.back=Slet sidste objekt iconhelp.type0=Type af nste punkt iconhelp.thickness0=Bredde p nste objekt iconhelp.partial=Delvist synlige cirkler iconhelp.plines=Delvist synlige linjer iconhelp.arrow=Linjestykker som vektorer iconhelp.showcolor=Vis udvalgte farver iconhelp.runmacro=Kr makro iconhelp.macro=Makro parametre/ml/definer iconhelp.expression=Beregningsudtryk iconhelp.showvalue=Vis objekternes vrdier iconhelp.showname=Vis objektnavne iconhelp.longnames=Lange objektnavne iconhelp.obtuse=Tillad vinkler over 180 iconhelp.solid=Ingen gennemsigtige flader iconhelp.grid=Vis gitter iconhelp.comment=Kommentar iconhelp.defaults=Standardindstillinger iconhelp.macro0=Makrodefinition iconhelp.visual=Konstruktion med mus iconhelp.replay=Vis konstruktion trinvis iconhelp.oneforward=Fremad iconhelp.fastforward=Hurtigt fremad iconhelp.allforward=Til slutningen iconhelp.oneback=Tilbage iconhelp.fastback=Hurtigt tilbage iconhelp.allback=Til start iconhelp.close=Luk iconhelp.area=Udfyldt polygon iconhelp.text=Tekst med flere linjer iconhelp.fixedcircle=Cirkel med fast radius iconhelp.fixedangle=Vinkelben iconhelp.fixedsegment=Linjestykke med fast lngde iconhelp.animate=Animation af punkt iconhelp.delete=Slet objekt og afhngige objekter iconhelp.undo=Fortryd sidste slet iconhelp.nextbreak=G til nste pause iconhelp.setbreak=Indst pause/slet pause shortcuts.point=p shortcuts.segment=s shortcuts.line=l shortcuts.ray=h shortcuts.circle=c shortcuts.intersection=x shortcuts.move=f shortcuts.hide=g shortcuts.edit=r shortcuts.tracker=i shortcuts.objecttracker=j shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=k shortcuts.angle=v shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=u shortcuts.area=a shortcuts.text=t shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) menu.file=Filer menu.file.new=Ny konstruktion menu.file.clearmacros=Slet alle makroer menu.file.load=bn konstruktion... (Ctrl-o) menu.file.loadjob=bn opgave... (Ctrl-j) menu.file.savejob=Gem som opgave... (Ctrl-k) menu.file.save=Gem konstruktion (Ctrl-s) menu.file.saveas=Gem som... (Ctrl-a) menu.file.includemacros=Gem med makroer menu.file.exit=Afslut programmet (Alt-F4) menu.file.print=Udskriv ... menu.file.print.isoscale=Forhold 1:1 i cm menu.file.savebmp=Gem som bitmap (BMP) ... menu.file.savefig=Gem grafik (som FIG) ... menu.file.loadrun=bn beskrivende konstruktion (Ctrl-r) menu.file.editrun=Rediger beskrivende konstruktion (Ctrl-x) menu.actions=Udfr menu.actions.elementary=Simple vrktjer menu.actions.complex=Sammensatte vrktjer menu.actions.fixed=Faste objekter menu.actions.move=Vrktjer der flytter menu.actions.decorative=Dekorative objekter menu.options=Indstillinger menu.options.visual=Konstruktion med mus (Ctrl-F6) menu.options.hidden=Vis skjulte objekter (F9) menu.options.comment=Kommentar ... (F10) menu.options.constructiondisplay=Beskrivelse (F11) menu.options.grid=Vis gitter (F12) menu.options.showcolor=Vis farve menu.options.defaultcolor=Farve menu.options.defaultthickness=Standardbredde menu.options.defaulttype=Vis punkt som menu.options.setgrid=Indstil gitterbredde ... menu.options.shownames=Vis objektnavn (Ctrl-F6) menu.options.longnames=Lange objektnavne (Ctrl-F7) menu.options.obtuse=Tillad vinkler over 180 (Ctrl-F12) menu.options.solid=Ingen gennemsigtige flader menu.options.showvalues=Vis objekters vrdier (Ctrl-F8) menu.options.partial=Delvis synlige cirkler (Ctrl-F9) menu.options.plines=Delvis synlige linjer (Ctrl-F10) menu.options.arrow=Linjestykker som vektorer (Ctrl-F11) menu.options.editicons=Rediger vrktjspalet menu.options.all=Alle menu.options.setdigits=Decimaler ... menu.options.back=Slet sidste objekt (<--) menu.options.undo=Fortryd slet (Ctrl-z) menu.zoom=Zoom menu.zoom.in=Zoom ind (+) menu.zoom.out=Zoom ud (-) menu.zoom.left=Til venstre (Venstrepil) menu.zoom.right=Til hjre (Hjrepil) menu.zoom.up=Op (Pil op) menu.zoom.down=Ned (Pil ned) menu.macros=Makroer menu.special.definemacro=Definer makro (Ctrl-F5) menu.special.runmacro=Afspil makro (F5) menu.special.savemacros=Gem makroer menu.special.loadmacros=bn makroer menu.special.deletemacros=Slet makroer menu.special=Funktioner menu.special.testjob=Afprv opgave (Ctrl-F1) menu.special.jobcomment=Opgavetekst ... (F8) menu.special.export=Gem som HTML (Ctrl-e) menu.special.replay=Vis konstruktion trinvis menu.help=Hjlp menu.help.about=Om programmet menu.help.help=Hjlp (F1) menu.help.browser=HTML-hjlp og demoer menu.help.configure=Indstil browser menu.help.text=Korte hjlpetekster menu.help.macros=Makroer menu.help.tools=Vrktjer menu.help.gui=Brugerflade menu.help.interactive=Kommandotilstand menu.help.tips=Tips menu.settings=Programindstillinger menu.settings.fullicons=To fulde vrktjslinjer menu.settings.utf=Brug UTF8-kodning (uden , , ) menu.settings.autohide=Skjul andet skringspunkt menu.settings.iconbartop=Vrktjspanel verst menu.settings.showtips=Vis vrktjstips menu.settings.simplegraphics=Brug enkel grafik menu.settings.sure=Bekrft fr bne og lukke menu.settings.pointon=Sprg fr konstruktion af punkt p et objekt menu.settings.intersection=Sprg fr konstruktion af skringspunkt menu.settings.choice=Vis dialogen "Vlg objekt" menu.settings.movename=Vis objektvrdier mens der flyttes menu.settings.movefixname=Faste objektvrdier mens der flyttes menu.settings.restricted=Enkle indstillinger til skolebrug menu.colors=Angiv farver colors.default=Standardfarver colors.color0=Farve 1 (sort) colors.color1=Farve 2 (grn) colors.color2=Farve 3 (bl) colors.color3=Farve 4 (brun) colors.color4=Farve 5 (turkis) colors.color5=Farve 6 (rd) colors.background=Baggrund colors.select=Markering colors.target=Ml myfiledialog.dir=Mappe myfiledialog.file=Filnavn myfiledialog.pattern=Filtype filedialog.open=bn filedialog.saveas=Gem som ... filedialog.open.action=bn filedialog.saveas.action=Gem filedialog.htmlsave=Gem som HTML filedialog.htmlsave.action=Gem save=Gem load=bn abort=Fortryd bound.release=Frigr fra objekt bound.bind=Fastgr til objekt bound.error=Objekt ikke fundet fr skring constructiondisplay.edit=Rediger objekt constructiondisplay.copy=Kopier til udklipsholder edit.Title=Egenskaber edit.name=Navn edit.text=Beskrivelse edit.hidden=Skjult edit.fixed=Fast edit.color=Farve edit.ok=OK edit.cancel=Annuller edit.showname=Vis navn edit.point.title=Punkt edit.point.x=X edit.point.y=Y edit.point.type=Type edit.point.showvalue=Vis koordinater edit.point.intersection=Forskellig fra edit.point.bound=P objekt edit.point.away=Vk fra edit.point.close=Tt p edit.point.free=Frit edit.line.title=Linje, halvlinje, linjestykke edit.line.normal=Mellem edit.line.thick=Bred edit.line.thin=Smal edit.line.type=Type edit.circle.title=Cirkel edit.circle.length=Radius edit.circle.partial=Kun delvis synlig edit.circle.range=Angiv tegnegrnser edit.circle.killrange=Ophv tegnegrnser edit.point.colortype=Tykkelse edit.segment.length=Lngde edit.segment.showvalue=Vis lngde edit.plumb.restricted=Begrnset edit.angle.title=Vinkel edit.angle.length=Strrelse edit.angle.displaysize=Vis vinklens strrelse edit.angle.normal=Normal edit.angle.small=Lille edit.angle.large=Stor edit.expression.title=Udtryk edit.expression=Beregningsudtryk edit.expression.prompt=Beskrivelse edit.text.title=Tekst edit.area.title=Polygon edit.area.back=I baggrunden export.title=Gem som HTML export.pagetitle=Titel p siden export.width=Bredde export.height=Hjde export.jar=Java-arkiv export.comment=Brug kommentar som HTML-tekst export.file=Konstruktionsfil export.job=Opgave export.color=Farve export.backgroundcolor=Brug som baggrundsfarve export.appletcolor=Brug som farve p applet export.plain=Uden ramme export.3D=Ramme export.breaks=Afspil med pauser export.icons=Ramme og ikoner export.full=Ramme, ikoner og status export.nonvisual=Ramme, ikoner og indtastningslinje export.style=Applet-Stil export.setcolor=Vlg farve export.savefirst=Konstruktionen skal gemmes frst export.soltext=Lsning export.stylesheet=CSS-fil export.solution=Lsningsfil export.jumpsol=G til lsning export.linksol=Link til lsning export.savesol=Gem lsningsfil export.track=Spor export.digits=Gem antal decimaler export.setsize=Indst strrelse export.signature=Skrevet med JavaPasser export.colors=Gem brugerdefinerede farver export.background=Gem defineret baggrund help.title=Hjlp help.error=Hjlpefilen ikke fundet help.file=schoolgeometry.txt coloreditor.title=Juster farven coloreditor.red=Rd coloreditor.green=Grn coloreditor.blue=Bl coloreditor.color=Brugerdefineret comment.title=Kommentar comment.set=OK comment.cancel=Fortryd comment.close=Luk iconedit.title=Rediger vrktjspanel iconedit.twobars=Vrktjer i to linjer jobcomment.title=Opgave select.title=Vlg objekt select.ok=OK select.cancel=Annuller select.comment=Vis kommentar select.all=Alle message.circle.midpoint=Cirkel: Vlg centrum message.circle.radius=Cirkel: Punkt p periferi (Skift: Fast radius) message.fixedcircle.midpoint=Cirkel med fast radius: Vlg centrum message.fixedcircle.radius=Cirkel med fast radius: Klik et sted message.edit=Egenskaber: Vlg et objekt message.line.first=Linje: Vlg frste punkt message.line.second=Linje: Vlg andet punkt message.move.select=Flyt: Vlg et punkt message.move.move=Flyt: Flyt punktet message.point=Punkt: Afst et punkt message.segment.first=Linjestykke: Vlg frste punkt message.segment.second=Linjestykke: Andet punkt (Skift: Fast lngde) message.fixedsegment.first=Linjestykke med fast lngde: Frste punkt message.fixedsegment.second=Linjestykke med fast lngde: Klik et sted message.ray.first=Halvlinje: Vlg udgangspunktet message.ray.second=Halvlinje: Vlg andet punkt message.intersection.first=Skringspunkt: Vlg frste objekt eller skringen message.intersection.second=Skringspunkt: Vlg andet objekt message.hide=Skjul/vis: Vlg et objekt message.tracker.select=Spor: Vlg punkt eller linje message.tracker.selectpoint=Spor: Vlg det punkt der skal flyttes message.tracker.move=Spor: Flyt punktet message.objecttracker.select=Automatisk spor: Vlg et punkt eller en linje message.objecttracker.object=Automatisk spor: Vlg en linje eller cirkel message.objecttracker.selectpoint=Automatisk spor: Vlg det punkt der skal bevges message.objecttracker.selectanypoint=Automatisk spor: Vlg et andet punkt der skal bevges message.objecttracker.move=Automatisk spor: Bevg punktet message.objecttracker.start=Automatisk spor: Start animationen message.objecttracker.stop=Automatisk spor: Stop animationen message.parallel.first=Parallel: Vlg en linje message.parallel.second=Parallel: Vlg et punkt message.plumb.first=Normal: Vlg en linje message.plumb.second=Normal: Vlg et punkt message.circle3.first=Cirkel: Vlg frste radiuspunkt message.circle3.second=Cirkel: Vlg andet radiuspunkt message.circle3.midpoint=Cirkel: Vlg centrum message.midpoint.first=Midtpunkt: Vlg frste punkt message.midpoint.second=Midtpunkt: Vlg andet punkt message.quadric=Keglesnit: Vlg punkt nummer message.angle.first=Marker vinkel: Vlg et punkt p frste ben message.angle.root=Marker vinkel: Vlg vinkelspids message.angle.second=Marker vinkel: Punkt p andet ben (Skift-tast: Fast strrelse) message.fixedangle.first=Vinkelben: Vlg et punkt p frste ben message.fixedangle.root=Vinkelben: Vlg vinkelspids message.fixedangle.second=Vinkelben: Klik et sted message.label.select=Flyt tekst: Vlg teksten message.label.move=Flyt tekst: Flyt teksten message.boundedpoint=Punkt p et objekt: Vlg en linje eller cirkel message.parameters=Makroparameter: Vlg objekter message.targets=Makro mlobjekter: Vlg objekter message.savejob.first=Definer opgave: Vlg det sidste objekt der skal vises message.savejob.second=Definer opgave: Vlg mlobjektet message.savejob.third=Definer opgave: Vlg hvilke andre objekter der skal vises message.runmacro=Makro %: %. (type %) % message.runmacro.return=(Mellemrumstast vlger %) message.runmacro.fixes=(Skift for at vlge flere objekter) message.delete=Slet objekt: Vlg objekt message.reorder=Flyt objekt bagud: Vlg et objekt message.expression=Beregningsudtryk: Vlg et sted message.area=Udfyldt polygon: Vlg et punkt, afslut med klik p et valgt message.text=Tekst: Vlg et sted message.animator.point=Animation: Vlg et punkt message.animator.segment=Animation: Vlg linjestykker eller cirkler message.animator.running=Animation: Er i gang message.range.first=Tegn cirkel fra punkt ... message.range.second=... til punkt message.setaway.away=Vk fra punktet message.setaway.close=Hen til punktet objectsedit.title=Rediger egenskaber point.type.square=Kvadrat point.type.diamond=Ruder point.type.circle=Cirkel point.type.dot=Prik color.type.normal=Normal color.type.thick=Bred color.type.thin=Smal text.point=Punkt i %, % text.line=Linje gennem % og % text.segment=Linjestykke fra % til % text.segment.fixed=Linjestykke fra % til % med lngden % text.ray=Halvlinje fra % i retning mod % text.intersection=Skring mellem % og % text.circle=Cirkel om % gennem % text.circle.fixed=Cirkel om % gennem % med radius % text.fixedcircle=Cirkel om % med radius % text.circle3=Cirkel om % med radius fra % til % text.parallel=Parallel gennem % til % text.midpoint=Midtpunktmellem % og % text.quadric=Keglesnit gennem % text.plumb=Normal gennem % til % text.angle=Marker vinkel % - % - % text.angle.fixed=Vinkelben % - % - % med strrelsen % text.boundedpoint=Punkt p % text.expression=Beregningsudtryk "%" i %, % text.area=Polygon text.fixedangle=Vinkelben % - % med strrelsen % name.Point=Punkt name.Intersection=Skring name.OtherIntersection=Skring name.Circle=Cirkel name.Circle3=Cirkel name.Segment=Linjestykke name.Ray=Halvlinje name.TwoPointLine=Linje gennem to punkter name.Line=Linje name.Parallel=Parallel name.Midpoint=Midtpunkt name.Quadric=Keglesnit name.Plumb=Normal name.Angle=Vinkel name.PointOn=Punkt p objekt name.Expression=Beregningsudtryk name.Polygon=Polygon name.short.Point=P name.short.Intersection=S name.short.OtherIntersection=S name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=h name.short.Line=l name.short.Parallel=p name.short.Midpoint=M name.short.Quadric=K name.short.Plumb=n name.short.Angle=v name.short.PointOn=Pp name.short.Expression=U name.short.Polygon=A prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==h(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==S(,) prompt.midpoint==M(,) prompt.quadric==K(,,,,) prompt.parallel==p(,) prompt.plumb==n(,) prompt.angle==v(,,) prompt.area=A(,,) prompt.expression=U popup.hidden=Vis skjulte objekter popup.replay=G trinvis gennem konstruktionen popup.empty=--- Makroer --- replay.title=Trinvis reorder.title=Flyt objekt bagud reorder.message=st ind efter reorder.notfound=Objektet blev ikke fundet reorder.warning=Operationen kan ikke udfres setgrid.title=Gitterbredde setgrid.prompt=Ny gitterbredde setgrid.set=St definemacro.title=Makrodefinition definemacro.name=Navn definemacro.comment=Kommentar definemacro.parameters=Sprg efter parametre definemacro.noparams=Ingen parameter defineret definemacro.nomacro=Ingen makro defineret definemacro.targetsonly=Kun mlene ses definemacro.invisible=Skjul helt definemacro.promptfor=Sprg efter: macro.replace.title=Erstat makro macro.replace=Erstat makro: macro.replace.all=Alle macro.usage=Forkert brug af makroen (se tips) macro.prompt.title=Parameterangivelse macro.prompt.prompt=Angiv en vrdi for parameteren macro.prompt.illegal=Ugyldig vrdi digits.title=Antal decimaler digits.edit=I egenskabsdialogen digits.lengths=Til visning digits.angles=Til vinkler editrun.title=Behandl konstruktionsbeskrivelsen editrun.run=Gem og udfr editrun.load=Anden beskrivelse sure.title=Er du sikker? sure.macros=Slet alle makroer? sure.delete=Glem alle ndringer? close.title=Luk close.prompt=Vil du afslutte programmet? file.exists.title=Filen findes file.exists.overwrite=Der eksisterer allerede en fil med det navn Overskriv? exception.nparams=Forkert antal parametre exception.notfound=Objekt ikke fundet eller udtryk ikke defineret exception.type=Forkert parametertype exception.expression=Ugyldigt udtryk exception.canfix=Objektet kan ikke lses fast exception.fix=Forkert vrdi exception.novalue=Forkert vrdi exception.elementary=Forkert element i udtrykket exception.bracket=Hjreparentes mangler exception.quotes=Afsluttende " mangler exception.dot=Forkert talformat exception.nodigit=Tallet indeholder ingen cifre exception.function=Ukendt funktion exception.parameter=Forkert parameter exception.macro=Forkert makroparameter exception.macrotarget=Forkert mlobjekt exception.name=Der skal angives et navn exception.prompt=Forkert objekt i Sprg efter exception.prompt.parameter=Kan ikke vre en parameter exception.parameters=Forkert parameter exception.brackets=Fejl i parenteser exception.job=Forkert opgaveparameter exception.track=Forkert sporparameter exception.animate=Forkert animationsparameter exception.boolean=Vrdien sand eller falsk var ventet exception.value=Ugyldig vrdi exception.color=Ugyldig farve exception.colortype=Ugyldig bredde exception.type=Ugyldig punkttype exception.macroparameter=Forkert makroparameter exception.macrotarget=Forkert mlobjekt exception.double=Navnet findes allerede error.setaway=Dette punkt er ikke defineret fr skringen error.objecttracker.depends=Punktet er bundet til et andet objekt constructiondisplay.title=Konstruktionsbeskrivelse function.hide=Skjul function.hide.short=skjul function.rename=Navn function.rename.short=navn function.value=Vrdi function.value.short=vrdi function.window=Vindue function.window.short=Vindue function.color=Farve function.color.short=farve function.thickness=Bredde function.thickness.short=bredde function.type=Type function.type.short=type function.partial=delvis function.partial.short=partiel function.fill=Udfyldt function.fill.short=fyldt function.back=tilbage function.back.short=tilb function.away=Langtfra function.away.short=langt function.closeto=Hentil function.closeto.short=hen function.acute=Spids function.acute.short=spids function.obtuse=Stump function.obtuse.short=stump function.solid=ikke-transparent function.solid.short=opak function restrict=udsnit function restrict.short=udsnit expression.value=Vrdi parameter=Parameter parameter.short=Param target=ml target.short=ml macro=Makro macro.short=makro away=langtfra away.short=fra end=Slut end.short=slut invisible=Usynlig invisible.short=usynlig showall=Synlig showall.short=synlig configure.title=Angiv browser configure.prompt=Browserkommando background.error=Kunne ikke bne billedet (GIF eller JPG). menu.background=Baggrund menu.background.grab=Gr konstruktion til baggrund menu.background.clear=Slet baggrund menu.background.load=bn baggrundsbillede ... menu.background.tile=Side om side menu.background.center=Centreret menu.background.usesize=Tilpas vinduet iconhelp.grab=St eller slet baggrund filedialog.backgroundload=bn baggrundsbillede filedialog.backgroundload.action=bn # New Resources in Version 2.14 menu.file.compress=Komprimr altid menu.file.savesvg=Gem grafik (som SVG) ... # Version 2.15 loading=bner konstruktion, vent venligst # Version 2.18 and 2.19 menu.settings.font.default=Normal menu.settings.font.bold=Fed menu.settings.font.large=Stor menu.file.saveeps=Gem grafik (som EPS) ... menu.fonts=Skrifttype # Version 2.20 bmpscaler.title=Skaler bitmap bmpscaler.width=Bredde bmpscaler.height=Hjde bmpscaler.scale=Faktor (tryk retur) bmpscaler.illegal=Vrdi uden for grnserne # Version 2.21 renamemacro.title=Omdb makro renamemacro.name=Nyt makronavn menu.special.renamemacro=Omdb makro ... # Version 2.23 savequestion.title=Gem konstruktion savequestion.qsave=Gem ndringer? # Version 2.25 exception.printsize=Konstruktionen kan ikke vre p siden iconhelp.nohelp=Der er ingen hjlp til dette emne iconhelp.type?=Punkt-type iconhelp.thickness?=Bredde iconhelp.color?=Farve iconhelp.filled=Udfyldt objekt iconhelp.isback=Tegn som baggrund iconhelp.inverse=Spejl vinklen iconhelp.angle?=Strrelse # Version 2.31 menu.settings.indicate=Fremhv objekter fr der vlges menu.options.other=Andre indstillinger menu.help.welcome=Nyt i denne version iconhelp.twolines=Ikoner i to linjer iconhelp.qintersection=Sprg om skring skal konstrueres iconhelp.qchoice=Vis dialogen "Vlg objekt" iconhelp.qpointon=Sprg fr konstruktion af punkt p objekt iconhelp.noindicate=Fremhv ikke objekter under markr # Version 2.33 menu.file.new=Ny konstruktion (Ctrl-n) # Version 2.34 edit.text.title=Rediger tekst edit.text.settings=Tekstegenskaber menu.settings.filedialog=Brug ikke systemets fil-dialog # Version 2.35 menu.settings.bitmapbackground=Anvend baggrundsfarven i bitmaps # Version 2.36 menu.file.savegraphics=Gem grafik som ... menu.file.savepng=Gem grafik (som PNG) bmpscaler.title=Skaler grafik # Version 2.37 menu.file.savepdf=Gem grafik (som PDF) iconhelp.chord=Vis som linjestykke # Version 2.39 message.setfixedangle.first=Fastlg vinklen: Frste punkt? message.setfixedangle.second=Fastlg vinklen: Vinkelspids? message.setfixedangle.third=Fastlg vinklen: Tredje punkt? edit.fixedangle.set=Angiv strrelse... message.setfixedcircle.first=Angiv cirklens radius: Frste punkt? message.setfixedcircle.second=Angiv cirklens radius: Andet punkt? edit.fixedcircle.set=Angiv strrelse... # Version 2.40 minpointsize.title=Angiv mindste punktstrrelse minpointsize.prompt=Angiv mindste punktstrrelse (standard: 3) menu.settings.font.minpointsize=Mindste punktstrrelse... # Version 2.41 name.short.Track=Tr text.track=Spor af % mens % bevges p % trackquestion.keep=Behold sporet i konstruktionen? trackquestion.title=Behold sporet menu.options.track=Behold sporet (Skift-Enter) iconhelp.indicate=Vis konstruktionsresultaterne fr der klikkes iconhelp.nohelp=Ingen hjlp til dette emne # Version 2.42 objects.draw=Tegn med musen menu.options.cleardraw=Slet tegningen (Esc) iconhelp.draw=Tegn med musen message.draw=Tegn med musen (Slet med ESC) shortcuts.draw=; # Version 2.43 message.move.select=Flyt: Vlg et punkt (skift: vis udgangsposition) message.rename=Omdb A,B,C,...: Vlg objekter iconhelp.rename=Omdb A,B,C,... objects.rename=Omdb A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Vis ikke vinkelben # Version 2.45 menu.settings.smartboard=Smartboard-modus shortcuts.zoom=% objects.zoom=Zoom med musen message.zoom=Trk centret eller zoom ind og ud # Version 2.46 menu.special.restricticons=Begrnset vrktjspanel # Version 2.47 menu.settings.indicate.simple=Fremhv kun punkter fr konstruktion menu.settings.beginner=Begyndermodus question.again=Sprg altid # Version 2.49 definemacro.parameters=Sprg efter parametre ("=Navn" for altid at bruge dette objekt) # Version 2.53 menu.actions.angles=Vinkler menu.actions.circles=Cirkler menu.actions.lines=Linjer menu.actions.points=Punkter ./src/rene/zirkel/docs/CVS/RevisionCache/ZirkelProperties.properties#1.10000644000175000017500000010744311144764476025043 0ustar yvesyvesprogram.name=CaRMetal program.version=2.9.7 program.date=2008-12 version=Version homefile=index.html homepage=http://www.z-u-l.de/ about.title=About this Program about.name=School Geometry about.programmed=Programmed by title=School Geometry close=Close ok=OK cancel=Cancel done=Well Done! message=Message yes=Yes no=No abort=Abort true=true false=false warning.nojob=This isn't an Assignment! warning.print=Printing failed! warning.reset=This option is enabled for the next start of Z.u.L.! question.title=Question question.intersection=Create this intersection? question.pointon=Create a point on this object? colors.black=Black colors.blue=Blue colors.green=Green colors.brown=Brown colors.cyan=Cyan colors.red=Red objects.point=Point objects.segment=Segment objects.line=Line objects.ray=Ray objects.circle=Circle objects.intersection=Intersection objects.move=Move Point objects.hide=Hide Object objects.edit=Edit Point objects.tracker=Track a Point or a Line objects.objecttracker=Track a Point or a Line on an Object objects.parallel=Parallel Line objects.plumb=Perpendicular Line objects.circle3=Circle from 3 Points objects.midpoint=Midpoint objects.quadric=Conic Section objects.angle=Angle objects.boundedpoint=Point on an Object objects.parameter=Set Macro Parameters objects.targets=Set Macro Targets objects.definejob=Define an Assignment objects.runmacro=Run a Macro objects.delete=Delete Objects and their Children objects.reorder=Push Objects to the Background objects.animate=Animation objects.expression=Arithmetic Expression objects.area=Polygon objects.text=Text objects.fixedcircle=Circle with fixed Size objects.fixedangle=Fixed Angle objects.fixedsegment=Segment with fixed Length iconhelp.point=Point (p) iconhelp.segment=Segment (s) iconhelp.line=Line (g) iconhelp.ray=Ray (r) iconhelp.circle=Circle (c) iconhelp.intersection=Intersection (i) iconhelp.move=Move a point (m)+Ctrl (Points): Show old construction+Ctrl: Move fixed objects+Shift: Move more than one object iconhelp.hide=Hide objects (h)+Shift: Hide completely iconhelp.edit=Edit objects (e)+Shift: Edit more objects+Ctrl: Edit last object iconhelp.tracker=Track a point or a line (t) iconhelp.objecttracker=Automatic track of a point or a line (o)+Strg: Keep Track (Shift-Enter) iconhelp.parallel=Parallel line (1) iconhelp.plumb=Perpendicular line (2) iconhelp.circle3=Circle from 3 points (3) iconhelp.midpoint=Midpoint (4) iconhelp.quadric=Conic section through 5 points ($) iconhelp.angle=Angle (a) iconhelp.boundedpoint=Create a point on an abject (5)+Shift: Not fixed on object iconhelp.hidden=Show or hide hidden objects (F9) iconhelp.color=Set default object color (Ctrl-1,2,3,4) iconhelp.type=Set default point type (Ctrl-5,6,7,8,9,0) iconhelp.type0=Set default point type iconhelp.thickness=Set default object thickness (Alt-5,6,7) iconhelp.back=Delete last object (<-) iconhelp.thickness0=Set default object thickness iconhelp.partial=Create partial circles by default (Ctrl-F9) iconhelp.plines=Create partial lines by default (Ctrl-F10) iconhelp.arrow=Create segments as vectors by default (Ctrl-F11) iconhelp.showcolor=Show selected colors only (Alt-1,2,3,4) iconhelp.runmacro=Run a macro (9)+Ctrl: Run last Macro iconhelp.macro=Set macro parameters, targets and definition (7,8,Ctrl-5) iconhelp.expression=Arithmetic expression (x) iconhelp.showvalue=Show object values by default (Ctrl-F7) iconhelp.showname=Show object names by default (Ctrl-F6) iconhelp.obtuse=Create angles larger than 180\u00B0 by default (Ctrl-F12) iconhelp.solid=Do not use transparency by default iconhelp.longnames=Use long object names by default (Ctrl-F8) iconhelp.grid=Show the grid (F12) iconhelp.comment=Show and edit comment (F10) iconhelp.defaults=Default settings iconhelp.macro0=Set macro parameters, targets and definition iconhelp.visual=Toggle visual construction mode iconhelp.replay=Replay the construction iconhelp.oneforward=Forward iconhelp.fastforward=Fast forward iconhelp.allforward=To the end iconhelp.oneback=Back iconhelp.fastback=Fast back iconhelp.allback=To the start iconhelp.close=Close iconhelp.area=Polygon (0) iconhelp.text=Multiline text (b) iconhelp.fixedcircle=Circle with fixed radius (,) iconhelp.fixedangle=Angle with fixed size (.) iconhelp.fixedsegment=Segment with fixed length (#) iconhelp.animate=Animation of a point (") iconhelp.delete=Delete objects and their children (Del) iconhelp.undo=Undo last removals (Ctrl-z) iconhelp.nextbreak=Jump to next break iconhelp.setbreak=Toggle break+Shift: Hidden breakpoint iconhelp.zoom=Zoom with the mouse (%) shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.showcolor.4= shortcuts.showcolor.5= shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) menu.file=File menu.file.clearmacros=Clear User Macros menu.file.load=Load a Construction ... (Ctrl-o) menu.file.loadjob=Load an Assignment ... (Ctrl-j) menu.file.savejob=Save as Assignment ... (Ctrl-k) menu.file.save=Save this Construction (Ctrl-s) menu.file.saveas=Save this Construction to ... (Ctrl-a) menu.file.includemacros=Include all Macros menu.file.exit=Exit (Alt-F4) menu.file.print=Print ... menu.file.print.isoscale=Scale 1:1 in cm menu.file.savebmp=Save Graphics (as BMP) ... menu.file.savefig=Save Graphics (as FIG) ... menu.file.loadrun=Load a Decriptive Construction ... (Ctrl-r) menu.file.editrun=Edit a Descriptive Construction ... (Ctrl-x) menu.actions=Edit menu.actions.elementary=Elementary Tools menu.actions.complex=More Complex Tools menu.actions.move=Moving Tools menu.actions.decorative=Decorative Objects menu.options=Options menu.options.visual=Toggle Visual Mode (Ctrl-F6) menu.options.hidden=Show hidden Objects (F9) menu.options.comment=Edit Comment (F10) menu.options.constructiondisplay=Show Description menu.options.grid=Show Grid (F12) menu.options.setgrid=Set Grid Width ... menu.options.showcolor=Show Color menu.options.defaultcolor=Default Color menu.options.defaultthickness=Default Thickness menu.options.defaulttype=Default Point Type menu.options.all=All menu.options.setdigits=Set Digits menu.options.shownames=Show Object Names (Ctrl-F6) menu.options.longnames=Long Object Names (Ctrl-F8) menu.options.obtuse=Use Angles larger than 180\u00B0 (Ctrl-F12) menu.options.solid=Do not use Transparency menu.options.showvalues=Show Object Values (Ctrl-F7) menu.options.partial=Partial Circles (Ctrl-F9) menu.options.plines=Partial Lines (Ctrl-F10) menu.options.arrow=Arrows (Ctrl-F11) menu.options.editicons=Edit the Toolbox menu.options.back=Delete last Object (<-) menu.options.undo=Undo Delete (Ctrl-z) menu.zoom=Zoom menu.zoom.in=In (+) menu.zoom.out=Out (-) menu.zoom.left=Left (Cursor-Left) menu.zoom.right=Right (Cursor-Right) menu.zoom.up=Up (Cursor-Up) menu.zoom.down=Down (Cursor-Down) menu.macros=Macros menu.special.definemacro=Define a Macro (Ctrl-F5) menu.special.runmacro=Run a Macro ... (F5) menu.special.savemacros=Save Macros ... menu.special.loadmacros=Load Macros ... menu.special.deletemacros=Delete Macros ... menu.special=Special menu.special.testjob=Test this Assignment (Ctrl-F1) menu.special.jobcomment=Set Assignment Text ... (F8) menu.special.export=Create an HTML File ... (Ctrl-e) menu.special.replay=Replay this Construction menu.help=Help menu.help.about=About this program menu.help.browser=Explore Help and Demos menu.help.text=Simple Help menu.help.configure=Configure the Browser menu.help.help=Help (F1) menu.help.macros=About Macros menu.help.tools=The Tools menu.help.gui=User Interface menu.help.interactive=Descriptive Constructions menu.help.tips=Some Tips menu.settings=Special Settings menu.settings.fullicons=Use two full icon bars menu.settings.utf=Use UTF-8 encoding menu.settings.autohide=Hide second intersection point menu.settings.iconbartop=Iconbar above construction menu.settings.showtips=Show tooltips menu.settings.simplegraphics=Use simpler graphics menu.settings.sure=Confirm before loading and closing menu.settings.pointon=Ask before creating a point on an object menu.settings.intersection=Ask before creating an intersection menu.settings.choice=Show selection dialog for objects menu.settings.movename=Show object values when moving menu.settings.movefixname=Show fixed object values when moving menu.settings.restricted=Toggle school mode menu.colors=Set the Colors colors.default=Use Default Colors colors.color0=Color 1 (Black) colors.color1=Color 2 (Green) colors.color2=Color 3 (Blue) colors.color3=Color 4 (Brown) colors.color4=Color 5 (Cyan) colors.color5=Color 6 (Red) colors.background=Background colors.select=Select colors.target=Target myfiledialog.dir=Directory myfiledialog.file=File myfiledialog.pattern=Extensions filedialog.open=Open filedialog.saveas=Save as ... filedialog.open.action=Open filedialog.saveas.action=Save filedialog.htmlsave=Save HTML filedialog.htmlsave.action=Save pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Save load=Load abort=Abort bound.release=Release Point bound.bind=Bind to Object bound.error=Object not found before intersection! constructiondisplay.edit=Edit Object constructiondisplay.copy=Copy to Clipboard edit.Title=Properties edit.name=Name edit.hidden=Hidden edit.text=Text edit.fixed=Fixed edit.color=Color edit.ok=OK edit.cancel=Cancel edit.showname=Show Name edit.point.title=Edit Point edit.point.type=Type edit.point.x=X edit.point.y=Y edit.point.intersection=Different from edit.point.showvalue=Show Coordinates edit.point.colortype=Thickness edit.point.bound=Bound edit.point.away=Away from edit.point.close=Close to edit.point.free=Free edit.line.title=Edit Line, Ray, Segment edit.line.normal=Normal edit.line.thick=Thick edit.line.thin=Thin edit.line.invisible=Invisible edit.line.type=Type edit.segment.length=Length edit.segment.showvalue=Show Length edit.circle.title=Edit Circle edit.circle.length=Radius edit.circle.partial=Partial Display edit.plumb.restricted=Restricted edit.angle.title=Edit Angle edit.angle.length=Size edit.angle.displaysize=Display Size edit.angle.normal=Normal edit.angle.small=Small edit.angle.large=Large edit.expression.title=Edit Expression edit.expression=Arithmetic Expression edit.expression.prompt=Explanation edit.area.title=Edit Polygon edit.area.back=In Background export.title=HTML Export export.pagetitle=Title of Page export.width=Width export.height=Height export.jar=Jar file export.comment=Save comment export.file=Construction File export.job=Display as Assignment export.color=Color export.backgroundcolor=Use for page background export.appletcolor=Use for applet background export.plain=Plain export.3D=Border export.breaks=Replay with Breakpoints export.icons=Border and Icons export.full=Border, Icons and Status export.nonvisual=Border, Icons and Input Line export.style=Applet Style export.setcolor=Choose Color export.savefirst=File has not been saved! export.soltext=Solution export.stylesheet=CSS Style File export.solution=Solution File export.jumpsol=Jump to Solution export.linksol=Link to Solution export.savesol=Save Solution File export.track=Track Point export.digits=Save Digits export.setsize=Get Size export.signature=Created using C.a.R. export.colors=Save defined Colors export.background=Save defined Background help.title=Help help.error=Could not open the help file! help.file=schoolgeometry.txt coloreditor.title=Edit Color coloreditor.red=Red coloreditor.green=Green coloreditor.blue=Blue coloreditor.color=Your Color comment.title=Construction Comment comment.set=Set comment.cancel=Cancel comment.close=Close iconedit.title=Edit Icon Bar iconedit.twobars=Icon box has two lines jobcomment.title=Assignment select.title=Selection select.ok=OK select.cancel=Cancel select.comment=Show Comment select.all=All message.circle.midpoint=Circle: Midpoint? message.circle.radius=Circle: Point on the circle (shift: fix radius)? message.fixedcircle.midpoint=Circle with fixed size: Midpoint? message.fixedcircle.radius=Circle with fixed size: Radius? message.line.first=Line: First point? message.line.second=Line: Second point? message.ray.first=Ray: Root point? message.ray.second=Ray: Second point? message.move.select=Move: Select an object (shift: more)! message.move.move=Move: Move the point? message.point=Point: Set a point (shift: fix)! message.segment.first=Segment: First point? message.segment.second=Segment: Second point (shift: fixed length)? message.fixedsegment.first=Segment with fixed length: First point? message.fixedsegment.second=Segment with fixed length: Click somewhere! message.intersection.first=Intersection: First object or the intersection? message.intersection.second=Intersection: First object? message.hide=Hide/Show: Select an object! message.tracker.select=Track: Point or line to track (shift: more)? message.tracker.selectpoint=Track: Point to move? message.tracker.move=Track: Move the point! message.objecttracker.select=Autotrack: Point or line to track (shift: more)? message.objecttracker.object=Autotrack: Line or circle, point on object, slider? message.objecttracker.selectpoint=Autotrack: Point to be moved on line or circle? message.objecttracker.selectanypoint=Autotrack: Any other point to move? message.objecttracker.move=Autotrack: Move the point! message.objecttracker.start=Autotrack: Start the Animation! message.parallel.first=Parallel: Line? message.parallel.second=Parallel: Point? message.plumb.first=Perpendicular: Line? message.plumb.second=Perpendicular: Point? message.circle3.first=Circle: First radius point? message.circle3.second=Circle: Second radius point? message.circle3.midpoint=Circle: Midpoint? message.midpoint.first=Midpoint: First point? message.midpoint.second=Midpoint: Second point? message.quadric=Conic Section: Point number message.angle.first=Angle: First angle point? message.angle.root=Angle: Corner point? message.angle.second=Angle: Second angle point (shift: fixed size)? message.fixedangle.first=Angle with fixed size: First angle point? message.fixedangle.root=Angle with fixed size: Base point? message.fixedangle.second=Angle with fixed size: Click somewhere! message.label.select=Move Label: Select a label! message.label.move=Move Label: Move the label! message.boundedpoint=Point on Object: Circle or line object (shift: continuous, ctrl: inside)? message.parameters=Macro Parameters: Parameter objects? message.targets=Macro Targets: Target objects? message.savejob.first=Define Assignment: Last displayed object? message.savejob.second=Define Assignment: Target object (shift: don't check)? message.savejob.third=Define Assignment: Further objects to be displayed? message.runmacro=Macro %: %. % - % message.runmacro.return=(SPACE chooses %) message.runmacro.fixes=(SHIFT fixes selection) message.delete=Delete: Select an object! message.reorder=Reorder: Select an object! message.expression=Arithmetic Expression: Select a place! message.area=Filled polygon: Corner point? message.text=Text: Select a place! message.animator.point=Animation: Point to animate? message.animator.segment=Animation: Circle or a segment? message.animator.running=Animation: Running (click to stop)! message.range.first=Set range: Draw the circle from which point ... message.range.second=Set range: ... to which point? message.setaway.away=Keep the intersection away from which point? message.setaway.close=Keep the intersection close to which point? objectsedit.title=Edit Properties point.type.square=Square point.type.diamond=Diamond point.type.circle=Circle point.type.dot=Dot color.type.normal=Normal color.type.thick=Thick color.type.thin=Thin color.type.invisible=Invisible text.point=Point at %, % text.line=Line through % and % text.segment=Line segment from % to % text.segment.fixed=Line segment from % to % with length % text.ray=Ray from % pointing to % text.intersection=Intersection between % and % text.circle=Circle around % through % text.circle.fixed=Circle around % through % with radius % text.fixedcircle=Circle around % with radius % text.circle3=Circle around % with radius from % to % text.parallel=Parallel line through % to % text.midpoint=Midpoint between % and % text.quadric=Conic section through % text.plumb=Perpendicular line through % to % text.angle=Angle % - % - % text.angle.fixed=Angle % - % - % with size % text.boundedpoint=Point on % text.expression=Expression "%" at %, % text.area=Polygon text.fixedangle=Angle % - % with size % name.Point=Point name.Intersection=Intersection name.OtherIntersection=Intersection name.Circle=Circle name.Circle3=Circle name.Segment=Segment name.Ray=Ray name.Line=Line name.TwoPointLine=Line with two Points name.Parallel=Parallel name.Midpoint=Midpoint name.Quadric=Quadric name.Plumb=Plumb name.Angle=Angle name.PointOn=ObjectPoint name.Expression=Expression name.Polygon=Polygon prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.angle==a(,,) prompt.area=A(,,) prompt.quadric=quadric(,,,,) prompt.function=function(,,,,,) name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=pl name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=p name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=poly name.short.Function=f popup.hidden=Show hidden objects popup.replay=Replay construction popup.empty=--- Macros --- replay.title=Replay reorder.title=Push objects reorder.message=insert after reorder.notfound=Object not found! reorder.warning=Could not do that! setgrid.title=Grid Width setgrid.prompt=Enter new grid width setgrid.set=Set definemacro.title=Define Macro definemacro.name=Name definemacro.comment=Macro Comment definemacro.noparams=Need parameters for the macro! definemacro.nomacro=There is no macro to run! definemacro.targetsonly=Hide construction definemacro.invisible=Hide completely definemacro.promptfor=Prompt for macro.replace.title=Macro Replacement macro.replace=Replace Macro: macro.replace.all=All macro.usage=Wrong use of macro (see tips)! macro.prompt.title=Parameter Prompt macro.prompt.prompt=Enter a value for the parameter macro.prompt.illegal=Illegal value! digits.title=Set Digits digits.edit=Edit digits.lengths=Display digits.angles=Angles editrun.title=Edit Descriptive Construction editrun.run=Save and Run editrun.load=Other Description sure.title=Are you sure? sure.macros=Delete all user macros? sure.delete=Forget current changes? close.title=End close.prompt=Really close this program? file.exists.title=File Exists file.exists.overwrite=File exists! Overwrite? exception.nparams=Illegal number of Parameters! exception.notfound=Object not found, or defined after expression! exception.type=Illegal Object Type! exception.expression=Invalid Expression! exception.canfix=Object cannot be fixed! exception.fix=Value invalid! exception.novalue=Value invalid! exception.elementary=Invalid element in expression! exception.bracket=Closing brackets missing! exception.quotes=Closing quotes missing! exception.dot=Two dots in number! exception.nodigit=No digit found in number! exception.function=Unknown function! exception.parameter=Illegal function parameter! exception.macro=Illegal macro parameter! exception.name=Need a Name! exception.job=Illegal Job Paramters! exception.track=Illegal Track Parameters! exception.animate=Illegal Animation Parameters! exception.boolean=Boolean Value must be true of false! exception.value=Illegal Value! exception.color=Illegal Color! exception.colortype=Illegal Thickness! exception.type=Illegal Point Type! exception.macroparameter=Illegal Macro Parameter! exception.macrotarget=Illegal Macro Target! exception.prompt=Illegal prompt oject! exception.prompt.parameter=Prompt object may not be a parameter! exception.parameters=Illegal Parameter! exception.brackets=Illegal Brackets! exception.double=Name is not unique! error.setaway=This point is not defined before the intersection! error.objecttracker.depends=The point is bound to another object! constructiondisplay.title=Construction function.hide=Hide function.hide.short=hide function.rename=Name function.rename.short=name function.value=Value function.value.short=value function.window=Window function.window.short=W function.color=Color function.color.short=col function.thickness=Thickness function.thickness.short=th function.type=Type function.type.short=type function.partial=Partial function.partial.short=part function.fill=Fill function.fill.short=fill function.back=Background function.back.short=back function.acute=Acute function.acute.short=acute function.obtuse=Obtuse function.obtuse.short=obtuse function.solid=Solid function.solid.short=solid function restrict=Restrict function restrict.short=restrict expression.value=Value configure.title=Set Browser configure.prompt=Enter Browser Command # New Resources: background.error=Could not load the Image (GIF or JPG!). menu.background=Background menu.background.grab=Current as Background menu.background.clear=Clear Background menu.background.load=Load Background Picture ... menu.background.usesize=Resize to Picture menu.background.tile=Tile Background menu.background.center=Center Background iconhelp.grab=Set or Clear Background filedialog.backgroundload=Load Background filedialog.backgroundload.action=Load # New Resources in Version 2.14 menu.file.compress=Compress always menu.file.savesvg=Save graphics (as SVG) ... # Version 2.15 loading=Loading, please wait! # Version 2.18 and 2.19 menu.settings.font.default=Default font menu.settings.font.bold=Bold font menu.settings.font.large=Large font menu.file.saveeps=Save graphics (as EPS) ... menu.fonts=Font # Version 2.20 bmpscaler.title=Scale Bitmap bmpscaler.width=Width bmpscaler.height=Height bmpscaler.scale=Factor (press Return) bmpscaler.illegal=Illegal Value # Version 2.21 renamemacro.title=Rename Macro renamemacro.name=New macro name menu.special.renamemacro=Rename Macro ... # Version 2.23 savequestion.title=Save Construction savequestion.qsave=Save Changes? # Version 2.25 exception.printsize=Page too small for this construction! iconhelp.nohelp=No help available iconhelp.type?=Point type iconhelp.thickness?=Thickness iconhelp.color?=Color iconhelp.filled=Filled object iconhelp.isback=Draws in background iconhelp.inverse=Reflected angle iconhelp.angle?=Size # Version 2.28 message.objecttracker.stop=Autotrack: Click to stop (shift left/right for speed)! # Version 2.31 menu.settings.indicate=Preview generated objects menu.options.other=Settings menu.help.welcome=News on current version iconhelp.twolines=Icons in two lines iconhelp.qintersection=Ask for intersections iconhelp.qchoice=Show dialog for object selection iconhelp.qpointon=Ask to create point on object iconhelp.noindicate=Do not indicate objects under mouse # Version 2.33 menu.file.new=New Construction (Ctrl-n) # Version 2.34 edit.text.title=Text Settings edit.text.settings=Further Settings menu.settings.filedialog=Replace system file dialog # Version 2.35 menu.settings.bitmapbackground=Use Background Color in Bitmaps # Version 2.36 menu.file.savegraphics=Save Graphics as ... bmpscaler.title=Scale Graphics # Version 2.37 menu.file.savepdf=Save Graphics (as PDF) iconhelp.chord=Show as segment # Version 2.39 message.setfixedangle.first=Set fixed angle: First point? message.setfixedangle.second=Set fixed angle: Base point? message.setfixedangle.third=Set fixed angle: Third point? edit.fixedangle.set=Set Size ... message.setfixedcircle.first=Set fixed circle: First point? message.setfixedcircle.second=Set fixed circle: Second point? edit.fixedcircle.set=Set Size ... # Version 2.41 name.short.Track=Tr text.track=Track of % when % moves on % trackquestion.keep=Keep Track in Construction? trackquestion.title=Keep Track menu.options.track=Keep Track (Shift-Enter) iconhelp.indicate=Preview of construction results iconhelp.nohelp=No help available! # Version 2.42 objects.draw=Paint with Mouse menu.options.cleardraw=Clear Painting (Esc) iconhelp.draw=Paint with Mouse message.draw=Paint with Mouse (ESC to clear) shortcuts.draw=; # Version 2.43 message.rename=Rename A,B,C,...: Select objects! iconhelp.rename=Rename A,B,C,... objects.rename=Rename A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Don't show angle ray # Version 2.45 menu.settings.smartboard=Smartboard Mode shortcuts.zoom=% objects.zoom=Zoom with Mouse message.zoom=Drag center, or zoom in and out # Version 2.46 menu.special.restricticons=Restricted Icon Set # Version 2.47 menu.settings.indicate.simple=Indicate Points only menu.settings.beginner=Beginner Mode question.again=Always ask this question. # Version 2.49 definemacro.parameters=Parameter Prompt(s) ("=name" fixes) # Version 2.53 menu.actions.angles=Angles menu.actions.circles=Circles menu.actions.lines=Lines menu.actions.points=Points # Version 3.00 info.title=Context Help info.related=Related Topics info.notfound=Topic not found! info.noresults=String not found! info.searchresults=- Search results - info.select=- Select - info.search=Search info.back=Back info.start=Start iconhelp.info=Context help menu.help.info=Context help myfiledialog.homedir=CaR Files myfiledialog.windowshome=My Documents myfiledialog.mkdir=Make Directory myfiledialog.back=Back menu.file.alwaysclearmacros=Clear Macros before Loading about.language=Language bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Backups # Version 3.02 menu.options.hideduplicates=Hide Duplicates # Version 3.03 menu.options.function=Create a function or curve text.function=Function ( % , % ) function.varmin=From function.varmax=To function.dvar=Step function.var=Variable function.y=Expression for Y iconhelp.function=Create a Function+(Ctrl: Create a user defined function) menu.options.editlast=Edit last Object iconhelp.control.edit=Edit last Object iconhelp.control.hide=Hide Duplicates edit.function.title=Function or Curve iconhelp.control.runmacro=Run last macro again # Version 3.05 point.type.cross=Cross point.type.dcross=Diagonal Cross shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Unit menu.special.break=Breakpoints menu.bp.setbreak=Set Breakpoint menu.bp.clearbreak=Clear Breakpoint menu.bp.sethidingbreak=Set Hiding Breakpoint menu.bp.animatebreak=Animate Breakpoints iconhelp.animatebreak=Animate breakpoints message.animatebreak=Animate breakpoints: click to stop (shift left/right for speed)! menu.special.exporttemplate=HTML Export with Templates templateload.open=Load Template templateload.open.action=Open menu.settings.doubleclick=Double click for macros export.codebase=Codebase # Version 3.12 edit.equation=Equation # Version 3.23 menu.settings.squarepoints=Draw points always as squares # Version 3.37 menu.options.export=Graphic Export Settings menu.settings.minwidth=Minimal line width is 1 menu.settings.minpointsize=Respect minimal point size menu.settings.minfontsize=Respect minimal font size menu.options.minpointsize=Minimal Point Size menu.options.minfontsize=Minimal Font Size # Version 3.38 menu.settings.scalepdf=Scale PDF and EPS output 1:1 # Version 3.41 menu.file.clip=Clip for Graphics Output ... clip.title=Set Clipping clip.width=Width clip.height=Height clip.screen=No Clipping # Version 3.44 iconhelp.large=Use large font size iconhelp.bold=Use bold font menu.options.largefont=Large Font Size menu.options.boldfont=Bold Font warning.previewframe=Frame larger than window! message.move.select=Move: Select a point (shift: more points, ctrl: show old state)! # Version 3.46 iconbar.showseparators=Show Separators # Version 3.48 menu.options.printscaler=Set Export Size ... menu.options.exportsettings=Special Export Settings ... printscaler.title=Set Export Size printscaler.width=Width (in cm) printscaler.height=Height (in cm) printscaler.dpi=Resolution (in dpi, default 300) printscaler.linewidth=Line Width (in cm, default 0.02) printscaler.pointsize=Point Size (in cm, default 0.07) printscaler.textsize=Text Size (in cm, default 0.3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=Width (in pixel) printscaler.h=Height (in pixel) printscaler.scale=Scale (relativ to screen) printscaler.middle=Cut out from screen printscaler.sizes=Use Values menu.file.savepng=Save Graphics as PNG warning.preview=Preview will not work completely with Java 1.1 iconedit.showseparators=Show Separators printscaler.aspect=Keep Aspect Ratio printscaler.presets=Presets printscaler.preset=Make a Choice printscaler.preset.300dpi=Exactly scaled with 300 DPI printscaler.preset.300dpi6=6 cm Width with 300 DPI printscaler.preset.300dpi16=16 cm Width with 300 DPI printscaler.preset.window=Window Size printscaler.preset.clip50=Window Size Clipped 50% message.saving=Please wait! menu.options.printscalepreview=Export Preview (Ctrl-F3) date=Build # Version 3.51 help=Help # Version 3.61 editconditionals.title=Edit Conditionals editconditionals.hidden=Hidden editconditionals.superhidden=Completely Hidden editconditionals.visible=Normal editconditionals.showname=Show Name editconditionals.showvalue=Show Value editconditionals.background=Background editconditionals.solid=Not Transparent exception.superfluous=Superfluous Text in Expression # Version 3.63 select.comment.title=Macro Comment # Version 3.68 edit.area.area=Area # Version 3.73 myfiledialog.oldfiles=Old Files # Version 3.74 iconhelp.load=Load Construction (Ctrl-o) iconhelp.save=Save Construction (Ctrl-s) iconhelp.new=New Construction (Ctrl-n)+Ctrl: Load defaults # Version 3.81 warning.loadbackground=Error loading background # Version 3.9 function.x=Expression for X (empty for functions) # Version 3.91 constructiondisplay.select=Select constructiondisplay.all=All Objects constructiondisplay.visible=Visible Objects (Alt-Ctrl-9) constructiondisplay.points=Points constructiondisplay.lines=Lines constructiondisplay.circles=Circles constructiondisplay.angles=Angles constructiondisplay.other=Other Objects menu.file.copypng=Copy to Clipboard exception.clipboardcopy=Copy failed! menu.options.finegrid=Axis only # Vesion 3.93 edit.function.center=Set Center edit.function.free=Release Center message.setcenter=Select the center point! # Vesion 3.94 message.edit=Edit: Objekt (shift: more objects, ctrl: conditionals)? # Version 3.97 error.image=Image not in same folder as construction? filedialog.imageload=Load Image filedialog.imageload.action=Load prompt.image=image(,,,) objects.image=Image shortcuts.image=_ # Version 3.98 exception.depends=Object % depends on current object. error.depends=Object % depends on current object. constructiondisplay.sorted=Sorted by Order of Construction (Alt-Ctrl-0) # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Expressions # Version 4.00 iconhelp.image=Load Image (_) message.image=Image anchor point % message.image.last=Last image anchor point (or choose selected point) editconditionals.z=Z-Buffer Value # Version 4.01 name.FixedAngle=Fixed Angle # Version 4.04 menu.moresettings=Settings menu.settings.language=Set Language language.title=Set Language language.prompt=Language for next program start # Version 4.05 constructiondisplay.invalid=Invalid Objects # Version 4.08 menu.settings.constructiondisplay=Permanent Construction Display (F11) # Version 4.09 constructiondisplay.editconditions=Edit Conditions constructiondisplay.delete=Delete selected Objects constructiondisplay.hide=Hide or Show (Alt-Ctrl-4) constructiondisplay.superhide=Super Hide (Alt-Ctrl-5) # Version 4.2 edit.expression.slider=Show as Slider menu.grid.options=Grid Options menu.options.leftsnap=Snap with Left Button Drag menu.settings.boundingbox=Create Bounding Box (bb) file # Version 4.3 latexsettings.title=Setup LaTeX export latexsettings.boundingbox=Create Bounding box bb-file latexsettings.latexinput=Create LaTeX idx-file latexsettings.doubledollar=LaTeX does $$...$$ latexsettings.dollar=LaTeX does $...$ latexsettings.nodollar=LaTeX does all other strings latexsettings.fullpath=Use file path printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=12 cm width with 300 DPI printscaler.latex=Save for LaTeX menu.background.usewidth=Adjust height only # Version 4.4 menu.options.restricted=Restrict Intersections menu.options.sizes=Set Sizes ... sizesdialog.title=Sizes minlinesize.prompt=Minimal line width (default: 1) minpointsize.prompt=Minimal point size (default: 3) minfontsize.prompt=Minimal font size (default: 12) arrowsize.prompt=Arrow size (default: 10) selectionsize.prompt=Selection size (default: 1.5) warning.loadmacros=Error while loading a macro! warning.macrodefinition=% is used, but is not in macro! edit.circle.bounds=Show as Arc edit.circle.range=Set Arc ... # Version 4.5 edit.track.dmin=Minimal step (default 0.001) # Version 4.6 menu.settings.smallicons=Use small icons menu.settings.oldicons=Use old icons # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof=Track of % when % changes # Version 5 # Fix error.image edit.discrete=Discrete error.fixedsegment=Cannot fix this segment! export.zoom=Zoom with mouse export.popup=Popup menu # Version 5.1 edit.intersection.alternate=Can alternate export.restrictedmove=Restrict Movements # Version 6.0 # Fix message.boundedpoint # Fix iconhelp.new message.bindpoint=Bind point to object (Shift: continuous, Ctrl: inside object) edit.point.inside=Inside object edit.point.increment=Grid increment (0=free) edit.more=More ... menu.settings.more=Show button for conditional formats menu.file.loadexamples=Load Example ... menu.options.editgrid=Edit coordinate grid ... # Version 6.1 constructiondisplay.description=Show Description (Alt-Ctrl-1) constructiondisplay.size=Show Size or Coordinates (Alt-Ctrl-2) constructiondisplay.formula=Show Formula (Alt-Ctrl-3) menu.settings.germanpoints=Use | in coordinates # Version 6.2 # fix iconhelp.function menu.options.userfunction=User defined Function function.vars=Variables function.f=Function expression # Version 6.4 menu.special.macrobar=Macro bar menu.special.defaultmacrosinbar=Show default macros help.related=Related topics help.nexttopic=Next topic ./src/rene/zirkel/docs/CVS/RevisionCache/ZirkelProperties_pl.properties#1.10000644000175000017500000007634011144764476025537 0ustar yvesyveslanguage=pl_ version=Wersja homefile=index.html homepage=http://mathsrv.ku-eichstaett.de/MGF/homes/grothmann/java/zirkel/doc_en/ about.title=O programie C.a.R. about.name=Szkolna geometria about.programmed=Zaprogramowa\u0142 title=Szkolna geometria close=Zamknij ok=OK cancel=Anuluj done=Wykonano pomy\u015blnie! message=Wiadomo\u015b\u0107 warning=Ostrze\u017cenie yes=Tak no=Nie true=true false=false warning.nojob=To nie jest zadanie! warning.print=Drukowanie nie powiod\u0142o si\u0119! warning.reset=Opcja b\u0119dzie aktywna po ponownym uruchomieniu programu! question.title=Pytanie question.intersection=Czy utworzy\u0107 tutaj punkt przeci\u0119cia? question.pointon=Czy utworzy\u0107 punkt na tym obiekcie? colors.black=Czarny colors.blue=Niebieski colors.green=Zielony colors.brown=Br\u0105zowy colors.cyan=Turkusowy colors.red=Czerwony objects.point=Punkt objects.segment=Odcinek objects.line=Prosta objects.ray=P\u00f3\u0142prosta objects.circle=Okr\u0105g objects.intersection=Punkt przeci\u0119cia objects.move=Przesu\u0144 punkt objects.hide=Ukryj obiekt objects.edit=Edytuj punkt objects.tracker=\u015alad punktu lub prostej objects.objecttracker=Automatyczny \u015blad punktu lub prostej objects.parallel=Prosta r\u00f3wnoleg\u0142a objects.plumb=Prosta prostopad\u0142a objects.circle3=Okr\u0105g dany przez odcinek d\u0142ugo\u015bci promienia i \u015brodek objects.midpoint=\u015arodek odcinka objects.quadric=Sto\u017ckowa objects.angle=K\u0105t objects.boundedpoint=Punkt na obiekcie objects.parameter=Ustaw parametry makroprogramu objects.targets=Ustaw cele makroprogramu objects.definejob=Zdefinuj zadanie objects.runmacro=Uruchom makroprogram objects.delete=Usu\u0144 obiekty i im potomne objects.reorder=Przesu\u0144 obiekty w t\u0142o objects.animate=Animacja punktu objects.expression=Wyra\u017cenie arytmetyczne objects.area=Wielok\u0105t objects.text=Tekst objects.fixedcircle=Okr\u0105g o sta\u0142ym promieniu objects.fixedangle=K\u0105t o sta\u0142ej mierze objects.fixedsegment=Odcinek o sta\u0142ej d\u0142ugo\u015bci iconhelp.point=Punkt iconhelp.segment=Odcinek iconhelp.line=Prosta iconhelp.ray=P\u00f3\u0142prosta iconhelp.circle=Okr\u0105g iconhelp.intersection=Punkt przeci\u0119cia iconhelp.move=Przesu\u0144 punkt iconhelp.hide=Ukryj obiekt iconhelp.edit=Edytuj obiekt iconhelp.tracker=\u015alad punktu lub prostej iconhelp.objecttracker=Automatyczny \u015blad punktu lub prostej iconhelp.parallel=Prosta r\u00f3wnoleg\u0142a iconhelp.plumb=Prosta prostopad\u0142a iconhelp.circle3=Okr\u0105g dany przez odcinek d\u0142ugo\u015bci promienia i \u015brodek iconhelp.midpoint=\u015arodek odcinka iconhelp.quadric=Sto\u017ckowa iconhelp.angle=K\u0105t iconhelp.boundedpoint=Punkt na obiekcie iconhelp.hidden=Prze\u0142\u0105cz wy\u015bwietlanie ukrytych obiekt\u00f3w iconhelp.color=Domy\u015blny kolor obiektu iconhelp.type=Domy\u015blny typ punktu iconhelp.type0=Domy\u015blny typ punktu iconhelp.thickness=Domy\u015blna grubo\u015b\u0107 obiektu iconhelp.back=Usu\u0144 ostatni obiekt iconhelp.thickness0=Domy\u015blna grubo\u015b\u0107 obiektu iconhelp.partial=Cz\u0119\u015bciowo widoczne okr\u0119gi iconhelp.plines=Cz\u0119\u015bciowo widoczne proste iconhelp.arrow=Odcinki jako wektory iconhelp.showcolor=Poka\u017c wybrane kolory iconhelp.runmacro=Uruchom makroprogram iconhelp.macro=Parametry/cele/definicja makroprogramu iconhelp.expression=Wyra\u017cenie arytmetyczne iconhelp.showvalue=Poka\u017c warto\u015bci obiekt\u00f3w iconhelp.showname=Poka\u017c nazwy obiekt\u00f3w iconhelp.obtuse=U\u017cyj k\u0105t\u00f3w wi\u0119kszych ni\u017c 180 iconhelp.solid=Nie u\u017cywaj przezroczysto\u015bci iconhelp.longnames=D\u0142ugie nazwy obiekt\u00f3w iconhelp.grid=Poka\u017c siatk\u0119 iconhelp.comment=Poka\u017c komentarz do konstrukcji iconhelp.defaults=Domy\u015blne ustawienia iconhelp.macro0=Parametry/cele/definicja makroprogramu iconhelp.visual=Konstrukcja wizualna iconhelp.replay=Przeprowad\u017a ponownie konstrukcj\u0119 iconhelp.oneforward=Krok naprz\u00f3d iconhelp.fastforward=Szybko do przodu iconhelp.allforward=Do ko\u0144ca iconhelp.oneback=Krok wstecz iconhelp.fastback=Szybko do ty\u0142u iconhelp.allback=Do pocz\u0105tku iconhelp.close=Zamknij iconhelp.area=Wielok\u0105t iconhelp.text=Tekst iconhelp.fixedcircle=Okr\u0105g o sta\u0142ym promieniu iconhelp.fixedangle=K\u0105t o sta\u0142ej mierze iconhelp.fixedsegment=Odcinek o sta\u0142ej d\u0142ugo\u015bci iconhelp.animate=Animacja punktu iconhelp.delete=Usu\u0144 obiekt i jemu potomne iconhelp.undo=Cofnij ostatnie usuni\u0119cie iconhelp.nextbreak=Id\u017a do nast\u0119pnego wstrzymania iconhelp.setbreak=Prze\u0142\u0105cz wstrzymanie menu.file=Plik menu.file.clearmacros=Wyczy\u015b\u0107 makroprogramy menu.file.load=Otw\u00f3rz konstrukcj\u0119... (Ctrl-o) menu.file.loadjob=Otw\u00f3rz zadanie... (Ctrl-j) menu.file.savejob=Zapisz jako zadanie... (Ctrl-k) menu.file.save=Zapisz konstrukcj\u0119 (Ctrl-s) menu.file.saveas=Zapisz konstrukcj\u0119 jako... (Ctrl-a) menu.file.includemacros=Do\u0142\u0105cz makroprogramy do konstrukcji menu.file.exit=Zako\u0144cz (Alt-F4) menu.file.print=Drukuj... menu.file.print.isoscale=Skaluj 1:1 w centymetrach menu.file.savebmp=Zapisz grafik\u0119 jako BMP... menu.file.savefig=Zapisz grafik\u0119 jako FIG... menu.file.loadrun=Otw\u00f3rz konstrukcj\u0119 opisow\u0105... (Ctrl-r) menu.file.editrun=Edytuj konstrukcj\u0119 opisow\u0105... (Ctrl-x) menu.actions=Akcje menu.actions.elementary=Podstawowe narz\u0119dzia menu.actions.complex=Bardziej z\u0142o\u017cone narz\u0119dzia menu.actions.fixed=Obiekty o sta\u0142ym parametrze menu.actions.move=Narz\u0119dzia przesuwaj\u0105ce menu.actions.decorative=Obiekty ozdobne menu.options=Opcje menu.options.visual=Tryb wizualny (Ctrl-F6) menu.options.hidden=Poka\u017c ukryte obiekty (F9) menu.options.comment=Komentarz do konstrukcji... (F10) menu.options.constructiondisplay=Opis konstrukcji... (F11) menu.options.grid=Poka\u017c siatk\u0119 (F12) menu.options.setgrid=Ustaw g\u0119sto\u015b\u0107 siatki... menu.options.showcolor=Poka\u017c kolor menu.options.defaultcolor=Domy\u015blny kolor menu.options.defaultthickness=Domy\u015blna grubo\u015b\u0107 menu.options.defaulttype=Domy\u015blny typ punktu menu.options.all=Wszystkie menu.options.setdigits=Ustaw precyzj\u0119 dziesi\u0119tn\u0105... menu.options.shownames=Poka\u017c nazwy obiekt\u00f3w (Ctrl-F6) menu.options.longnames=D\u0142ugie nazwy obiekt\u00f3w (Ctrl-F8) menu.options.obtuse=U\u017cyj k\u0105t\u00f3w wi\u0119kszych ni\u017c 180 (Ctrl-F12) menu.options.solid=Nie u\u017cywaj przezroczysto\u015bci menu.options.showvalues=Poka\u017c warto\u015bci obiekt\u00f3w (Ctrl-F7) menu.options.partial=Cz\u0119\u015bciowo widoczne okr\u0119gi (Ctrl-F9) menu.options.plines=Cz\u0119\u015bciowo widoczne proste (Ctrl-F10) menu.options.arrow=Strza\u0142ki (Ctrl-F11) menu.options.editicons=Edytuj pasek narz\u0119dzi... menu.options.back=Usu\u0144 ostatni obiekt (<-) menu.options.undo=Cofnij ostatnie usuni\u0119cie (Ctrl-z) menu.zoom=Powi\u0119kszenie menu.zoom.in=Powi\u0119ksz (+) menu.zoom.out=Pomniejsz (-) menu.zoom.left=Przesu\u0144 w lewo (strza\u0142ka w lewo) menu.zoom.right=Przesu\u0144 w prawo (strza\u0142ka w prawo) menu.zoom.up=Przesu\u0144 w g\u00f3r\u0119 (strza\u0142ka w g\u00f3r\u0119) menu.zoom.down=Przesu\u0144 w d\u00f3\u0142 (strza\u0142ka w d\u00f3\u0142) menu.macros=Makroprogramy menu.special.definemacro=Zdefinuj makroprogram (Ctrl-F5) menu.special.runmacro=Uruchom makroprogram... (F5) menu.special.savemacros=Zapisz makroprogramy... menu.special.loadmacros=Otw\u00f3rz makroprogramy... menu.special.deletemacros=Usu\u0144 makroprogram... menu.special=Specjalne menu.special.testjob=Testuj zadanie (Ctrl-F1) menu.special.jobcomment=Tre\u015b\u0107 zadania... (F8) menu.special.export=Eksport do pliku HTML... (Ctrl-e) menu.special.replay=Przeprowad\u017a ponownie konstrukcj\u0119 menu.help=Pomoc menu.help.about=O programie C.a.R.... menu.help.browser=Przegl\u0105daj pomoc i przyk\u0142ady menu.help.text=Prosta pomoc menu.help.configure=Konfiguruj przegl\u0105dark\u0119... menu.help.help=Pomoc (F1) menu.help.macros=Makroprogramy menu.help.tools=Narz\u0119dzia menu.help.gui=Interfejs u\u017cytkownika menu.help.interactive=Konstrukcje opisowe menu.help.tips=Gar\u015b\u0107 wskaz\u00f3wek menu.settings=Ustawienia specjalne... menu.settings.fullicons=Dwa pe\u0142ne wiersze paska narz\u0119dzi menu.settings.utf=U\u017cyj kodowania UTF-8 (Unikod) menu.settings.autohide=Ukrywaj drugi punkt przeci\u0119cia menu.settings.iconbartop=Pasek narz\u0119dzi nad konstrukcj\u0105 menu.settings.showtips=Poka\u017c etykietki narz\u0119dzi menu.settings.simplegraphics=Zawsze u\u017cywaj prostej grafiki menu.settings.sure=Potwierdzaj porzucenie niezapisanej konstrukcji menu.settings.pointon=Pytaj przed utworzeniem punktu na obiekcie menu.settings.intersection=Pytaj przed utworzeniem punktu przeci\u0119cia menu.settings.choice=Poka\u017c okno wyboru dla obiekt\u00f3w menu.settings.movename=Poka\u017c warto\u015bci obiekt\u00f3w podczas ich przesuwania menu.settings.movefixname=Sta\u0142e warto\u015bci obiekt\u00f3w podczas ich przesuwania menu.settings.restricted=Tryb szkolny menu.colors=Ustaw kolory colors.default=U\u017cyj domy\u015blnych colors.color0=Kolor 1 (Czarny)... colors.color1=Kolor 2 (Zielony)... colors.color2=Kolor 3 (Niebieski)... colors.color3=Kolor 4 (Br\u0105zowy)... colors.color4=Kolor 5 (Turkusowy)... colors.color5=Kolor 6 (Czerwony)... colors.background=Kolor t\u0142a... colors.select=Wybierz... colors.target=Cel... myfiledialog.dir=Katalog myfiledialog.file=Plik myfiledialog.pattern=Maska filedialog.open=Otw\u00f3rz filedialog.saveas=Zapisz jako... filedialog.open.action=Otw\u00f3rz filedialog.saveas.action=Zapisz filedialog.htmlsave=Zapisz do pliku HTML filedialog.htmlsave.action=Zapisz save=Zapisz load=Otw\u00f3rz abort=Anuluj bound.release=Zwolnij punkt bound.bind=Na obiekcie bound.error=Obiekt nie zosta\u0142 znaleziony przed przeci\u0119ciem! constructiondisplay.edit=Edytuj obiekt constructiondisplay.copy=Kopiuj do Schowka edit.Title=W\u0142a\u015bciwo\u015bci edit.name=Nazwa edit.hidden=Ukryty edit.text=Opis edit.fixed=Ustalony edit.color=Kolor edit.ok=OK edit.cancel=Anuluj edit.showname=Poka\u017c nazw\u0119 edit.point.title=Edytuj punkt edit.point.type=Typ edit.point.x=X edit.point.y=Y edit.point.intersection=R\u00f3\u017cny od edit.point.showvalue=Poka\u017c wsp\u00f3\u0142rz\u0119dne edit.point.colortype=Grubo\u015b\u0107 edit.point.bound=Na obiekcie edit.point.away=Z dala od edit.point.close=Blisko edit.point.free=Swobodny edit.line.title=Edytuj prost\u0105, p\u00f3\u0142prost\u0105 lub odcinek edit.line.normal=Normalny edit.line.thick=Gruby edit.line.thin=Cienki edit.line.type=Typ edit.segment.length=D\u0142ugo\u015b\u0107 edit.segment.showvalue=Poka\u017c d\u0142ugo\u015b\u0107 edit.circle.title=Edytuj okr\u0105g edit.circle.length=Promie\u0144 edit.circle.partial=Cz\u0119\u015bciowe wy\u015bwietlanie edit.circle.range=Ustaw zakres kre\u015blenia edit.circle.killrange=Wyczy\u015b\u0107 zakres kre\u015blenia edit.plumb.restricted=Ograniczony edit.angle.title=Edytuj k\u0105t edit.angle.length=Rozmiar edit.angle.displaysize=Wy\u015bwietlany rozmiar edit.angle.normal=Normalny edit.angle.small=Ma\u0142y edit.angle.large=Du\u017cy edit.expression.title=Edytuj wyra\u017cenie arytmetyczne edit.expression=Wyra\u017cenie arytmetyczne edit.expression.prompt=Wyja\u015bnienie edit.area.title=Edytuj wielok\u0105t edit.area.back=W tle export.title=Eksport do pliku HTML export.pagetitle=Tytu\u0142 strony export.width=Szeroko\u015b\u0107 export.height=Wysoko\u015b\u0107 export.jar=Plik JAR export.comment=Zapisz komentarz do konstrukcji export.file=Plik konstrukcji export.job=Wy\u015bwietl jako zadanie export.color=Kolor export.backgroundcolor=U\u017cyj jako t\u0142o strony export.appletcolor=U\u017cyj jako t\u0142o appletu export.plain=Pozbawiony dodatk\u00f3w export.3D=Obramowanie export.breaks=Przeprowad\u017a ponownie z wstrzymaniami export.icons=Obramowanie i pasek narz\u0119dzi export.full=Obramowanie, pasek narz\u0119dzi i wiersz stanu export.nonvisual=Obramowanie, pasek narz\u0119dzi i wiersz polece\u0144 export.style=Styl appletu export.setcolor=Wybierz kolor export.savefirst=Plik nie zosta\u0142 zapisany! export.soltext=Rozwi\u0105zanie export.stylesheet=Plik kaskadowego arkusza styli (CSS) export.solution=Plik z rozwi\u0105zaniem export.jumpsol=Id\u017a do rozwi\u0105zania export.linksol=Odno\u015bnik do rozwi\u0105zania export.savesol=Zapisz plik z rozwi\u0105zaniem export.track=\u015alad punktu export.digits=Zapisz precyzj\u0119 dziesi\u0119tn\u0105 export.setsize=Pobierz rozmiar export.signature=Utworzony przy u\u017cyciu C.a.R. export.colors=Zapisz zdefiniowane kolory export.background=Zapisz zdefiniowane t\u0142o help.title=Pomoc help.error=Nie mo\u017cna otworzy\u0107 pliku pomocy! help.file=schoolgeometry.txt coloreditor.title=Edytuj kolor coloreditor.red=Czerwony coloreditor.green=Zielony coloreditor.blue=Niebieski coloreditor.color=Tw\u00f3j kolor comment.title=Komentarz do konstrukcji comment.set=Ustaw comment.cancel=Anuluj comment.close=Zamknij iconedit.title=Edytuj pasek narz\u0119dzi iconedit.twobars=Pasek narz\u0119dzi w dw\u00f3ch wierszach jobcomment.title=Zadanie select.title=Wyb\u00f3r select.ok=OK select.cancel=Anuluj select.comment=Poka\u017c komentarz do konstrukcji select.all=Wszystkie message.circle.midpoint=Okr\u0105g: \u015arodek? message.circle.radius=Okr\u0105g: Punkt na okr\u0119gu (Shift: ustal promie\u0144)? message.fixedcircle.midpoint=Okr\u0105g o sta\u0142ym promieniu: \u015arodek? message.fixedcircle.radius=Okr\u0105g o sta\u0142ym promieniu: Promie\u0144? message.edit=Edytuj: Obiekt? message.line.first=Prosta: Pierwszy punkt? message.line.second=Prosta: Drugi punkt? message.ray.first=P\u00f3\u0142prosta: Pierwszy punkt? message.ray.second=P\u00f3\u0142prosta: Drugi punkt? message.move.move=Przesu\u0144: Przesu\u0144 punkt! message.point=Punkt: Postaw punkt (Shift: ustal)! message.segment.first=Odcinek: Pierwszy punkt? message.segment.second=Odcinek: Drugi punkt (Shift: ustal d\u0142ugo\u015b\u0107)? message.fixedsegment.first=Odcinek o sta\u0142ej d\u0142ugo\u015bci: Pierwszy punkt? message.fixedsegment.second=Odcinek o sta\u0142ej d\u0142ugo\u015bci: Punkt wskazuj\u0105cy kierunek? message.intersection.first=Punkt przeci\u0119cia: Pierwszy obiekt lub punkt przeci\u0119cia? message.intersection.second=Punkt przeci\u0119cia: Drugi obiekt? message.hide=Poka\u017c/ukryj: Obiekt? message.tracker.select=\u015alad: Punkt lub prosta do \u015bledzenia? message.tracker.selectpoint=\u015alad: Punkt do przesuni\u0119cia (Shift: wi\u0119cej)? message.tracker.move=\u015alad: Przesu\u0144 punkt! message.objecttracker.select=Automatyczny \u015blad: Punkt do \u015bledzenia (Shift: wi\u0119cej)? message.objecttracker.object=Automatyczny \u015blad: Prosta lub odcinek? message.objecttracker.selectpoint=Automatyczny \u015blad: Punkt do przesuni\u0119cia? message.objecttracker.selectanypoint=Automatyczny \u015blad: Kolejny punkt do przesuni\u0119cia? message.objecttracker.move=Automatyczny \u015blad: Przesu\u0144 punkt! message.objecttracker.start=Automatyczny \u015blad: Rozpocznij animacj\u0119! message.parallel.first=Prosta r\u00f3wnoleg\u0142a: Prosta? message.parallel.second=Prosta r\u00f3wnoleg\u0142a: Punkt? message.plumb.first=Prosta prostopad\u0142a: Prosta? message.plumb.second=Prosta prostopad\u0142a: Punkt? message.circle3.first=Okr\u0105g: Pierwszy punkt wyznaczaj\u0105cy promie\u0144? message.circle3.second=Okr\u0105g: Drugi punkt wyznaczaj\u0105cy promie\u0144? message.circle3.midpoint=Okr\u0105g: \u015arodek? message.midpoint.first=\u015arodek odcinka: Pierwszy punkt? message.midpoint.second=\u015arodek odcinka: Drugi punkt? message.quadric=Sto\u017ckowa: Punkt nr message.angle.first=K\u0105t: Punkt pierwszego ramienia? message.angle.root=K\u0105t: Wierzcho\u0142ek? message.angle.second=K\u0105t: Punkt drugiego ramienia (Shift: ustal miar\u0119)? message.fixedangle.first=K\u0105t o sta\u0142ej mierze: Punkt pierwszego ramienia? message.fixedangle.root=K\u0105t o sta\u0142ej mierze: Wierzcho\u0142ek? message.fixedangle.second=K\u0105t o sta\u0142ej mierze: Miara? message.label.select=Przesu\u0144 etykiet\u0119: Etykieta? message.label.move=Przesu\u0144 etykiet\u0119: Przesu\u0144 etykiet\u0119! message.boundedpoint=Punkt na obiekcie: Okr\u0105g lub prosta (Shift: ustal)? message.parameters=Parametry makroprogramu: Obiekty b\u0119d\u0105ce parametrami? message.targets=Cele makroprogramu: Obiekty b\u0119d\u0105ce celami? message.savejob.first=Zdefinuj zadanie: Ostatni wy\u015bwietlany obiekt? message.savejob.second=Zdefinuj zadanie: Obiekt docelowy (Shift: nie sprawdzaj)? message.savejob.third=Zdefinuj zadanie: Dalsze obiekty do wy\u015bwietlenia? message.runmacro=Makroprogram %: %. (Wprowad\u017a %) % message.runmacro.return=(Spacja wybiera %) message.runmacro.fixes=(Shift ustala zaznaczenie) message.delete=Usu\u0144: Obiekt? message.reorder=Przesu\u0144 obiekty: Obiekt? message.expression=Wyra\u017cenie arytmetyczne: Okre\u015bl po\u0142o\u017cenie! message.area=Wielok\u0105t: Wierzcho\u0142ek? message.text=Tekst: Okre\u015bl po\u0142o\u017cenie! message.animator.point=Animacja: Punkt do animacji? message.animator.segment=Animacja: Okr\u0105g lub odcinek? message.animator.running=Animacja: W toku! message.range.first=Ustaw zakres kre\u015blenia: Punkt pocz\u0105tkowy? message.range.second=Ustaw zakres kre\u015blenia: Punkt ko\u0144cowy? message.setaway.away=Z dala od tego punktu! message.setaway.close=Blisko tego punktu! objectsedit.title=Edytuj w\u0142a\u015bciwo\u015bci point.type.square=Kwadrat point.type.diamond=Romb point.type.circle=Okr\u0105g point.type.dot=Kropka color.type.normal=Normalny color.type.thick=Gruby color.type.thin=Cienki text.point=Punkt na wsp\u00f3\u0142rz\u0119dnych %, % text.line=Prosta przechodz\u0105ca przez % i % text.segment=Odcinek \u0142\u0105cz\u0105cy punkty % i % text.segment.fixed=Odcinek \u0142\u0105cz\u0105cy punkty % i %, d\u0142ugo\u015bci % text.ray=P\u00f3\u0142prosta wychodz\u0105ca z % i przechodz\u0105ca przez % text.intersection=Punkt przeci\u0119cia % i % text.circle=Okr\u0105g o \u015brodku % przechodz\u0105cy przez % text.circle.fixed=Okr\u0105g o \u015brodku % przechodz\u0105cy przez % i promieniu % text.fixedcircle=Okr\u0105g o \u015brodku % i promieniu % text.circle3=Okr\u0105g o \u015brodku % i promieniu d\u0142ugo\u015bci odcinka % - % text.parallel=Prosta r\u00f3wnoleg\u0142a do % przechodz\u0105ca przez % text.midpoint=\u015arodek odcinka % - % text.quadric=Sto\u017ckowa opisana na % text.plumb=Prosta prostopad\u0142a do % przechodz\u0105ca przez % text.angle=K\u0105t % - % - % text.angle.fixed=K\u0105t % - % - % miary % text.boundedpoint=Punkt na % text.expression=Wyra\u017cenie arytmetyczne "%" na wsp\u00f3\u0142rz\u0119dnych %, % text.area=Wielok\u0105t text.fixedangle=K\u0105t od\u0142o\u017cony od % - % miary % name.Point=Punkt name.Intersection=Punkt przeci\u0119cia name.OtherIntersection=Punkt przeci\u0119cia name.Circle=Okr\u0105g name.Circle3=Okr\u0105g name.Segment=Odcinek name.Ray=P\u00f3\u0142prosta name.Line=Prosta name.TwoPointLine=Prosta zadana przez dwa punkty name.Parallel=Prosta r\u00f3wnoleg\u0142a name.Midpoint=\u015arodek odcinka name.Quadric=Sto\u017ckowa name.Plumb=Prosta prostopad\u0142a name.Angle=K\u0105t name.PointOn=Punkt na obiekcie name.Expression=Wyra\u017cenie arytmetyczne name.Polygon=Wielok\u0105t popup.hidden=Poka\u017c ukryte obiekty popup.replay=Przeprowad\u017a ponownie konstrukcj\u0119 popup.empty=--- Makroprogramy --- replay.title=Przeprowad\u017a ponownie reorder.title=Przesu\u0144 obiekty reorder.message=wstaw po reorder.notfound=Obiekt nie zosta\u0142 znaleziony! reorder.warning=Nie mo\u017cna tego uczyni\u0107! setgrid.title=G\u0119sto\u015b\u0107 siatki setgrid.prompt=Wprowad\u017a now\u0105 g\u0119sto\u015b\u0107 siatki setgrid.set=Ustaw definemacro.title=Zdefinuj makroprogram definemacro.name=Nazwa definemacro.comment=Komentarz do makroprogramu definemacro.noparams=Makroprogram wymaga parametru! definemacro.nomacro=Brak makroprogramu do uruchomienia! definemacro.targetsonly=Ukryj konstrukcj\u0119 definemacro.invisible=Ukryj ca\u0142kowicie definemacro.promptfor=\u017b\u0105daj podania warto\u015bci dla macro.replace.title=Zast\u0105pienie makroprogramu macro.replace=Zast\u0105p makroprogram: macro.replace.all=Wszystkie macro.usage=Z\u0142e u\u017cycie makroprogramu (zobacz wskaz\u00f3wki)! macro.prompt.title=\u017b\u0105danie parametru macro.prompt.prompt=Wprowad\u017a now\u0105 warto\u015b\u0107 parametru macro.prompt.illegal=Niedozwolona warto\u015b\u0107! digits.title=Ustaw precyzj\u0119 dziesi\u0119tn\u0105 digits.edit=Edytuj digits.lengths=Wy\u015bwietl digits.angles=K\u0105ty editrun.title=Edytuj konstrukcj\u0119 opisow\u0105 editrun.run=Zapisz i uruchom editrun.load=Inny opis konstrukcji sure.title=Czy jeste\u015b pewien? sure.macros=Usun\u0105\u0107 wszystkie makroprogramy? sure.delete=Porzuci\u0107 wykonane zmiany? close.title=Koniec close.prompt=Zako\u0144czy\u0107 prac\u0119 z C.a.R.? file.exists.title=Plik istnieje file.exists.overwrite=Plik istnieje! Nadpisa\u0107? exception.nparams=Niedozwolona liczba parametr\u00f3w! exception.notfound=Obiekt nie zosta\u0142 znaleziony, lub zosta\u0142 zdefiniowany po wyra\u017ceniu! exception.expression=Niedozwolone wyra\u017cenie! exception.canfix=Obiekt nie mo\u017ce by\u0107 ustalony! exception.fix=Niedozwolona warto\u015b\u0107! exception.novalue=Niedozwolona warto\u015b\u0107! exception.elementary=Niedozwolony element wyra\u017cenia! exception.bracket=Brak nawiasu zamykaj\u0105cego! exception.quotes=Brak cudzys\u0142owu zamykaj\u0105cego! exception.dot=Dwie kropki w liczbie! exception.nodigit=Nie znaleziono cyfry w liczbie! exception.function=Nieznana funkcja! exception.parameter=Niedozwolony parametr funkcji! exception.macro=Niedozwolony parametr makroprogramu! exception.name=Nazwa jest konieczna! exception.job=Niedozwolone parametry zadania! exception.track=Niedozwolone parametry \u015bladu! exception.animate=Niedozwolone parametry animacji! exception.boolean=Warto\u015b\u0107 logiczna musi by\u0107 r\u00f3wna true albo false! exception.value=Niedozwolona warto\u015b\u0107! exception.color=Niedozwolony kolor! exception.colortype=Niedozwolona grubo\u015b\u0107! exception.type=Niedozwolony typ obiektu! exception.macroparameter=Niedozwolony parametr makroprogramu! exception.macrotarget=Niedozwolony cel makroprogramu! exception.prompt=Niedozwolony \u017c\u0105dany obiekt! exception.prompt.parameter=\u017b\u0105dany obiekt nie mo\u017ce by\u0107 parametrem! exception.parameters=Niedozwolony parametr! exception.brackets=Niedozwolone nawiasy! exception.double=Nazwa by\u0142a ju\u017c u\u017cyta! error.setaway=Ten punkt nie zosta\u0142 zdefiniowany przed przeci\u0119ciem! error.objecttracker.depends=Ten punkt jest na innym obiekcie! constructiondisplay.title=Konstrukcja function.hide=Ukryj function.rename=Nazwa function.value=Warto\u015b\u0107 function.window=Okno function.color=Kolor function.thickness=Grubo\u015b\u0107 function.type=Typ function.partial=Cz\u0119\u015bciowo function.fill=Wype\u0142nienie function.back=Kolor t\u0142a function.acute=Wypuk\u0142y function.obtuse=Wkl\u0119s\u0142y function.solid=Nieprzezroczysty function restrict=Ogranicz expression.value=Warto\u015b\u0107 configure.title=Ustaw przegl\u0105dark\u0119 configure.prompt=Polecenie przegl\u0105darki # New Resources: background.error=Nie mo\u017cna otworzy\u0107 obrazka (obs\u0142ugiwane s\u0105 GIF i JPEG)! menu.background=Kolor t\u0142a menu.background.grab=Bie\u017c\u0105cy jako t\u0142o menu.background.clear=Wyczy\u015b\u0107 t\u0142o menu.background.load=Otw\u00f3rz obrazek t\u0142a... menu.background.usesize=Dopasuj rozmiarem do obrazka menu.background.tile=Wy\u015bwietl t\u0142o s\u0105siaduj\u0105co menu.background.center=Wycentruj t\u0142o iconhelp.grab=Ustaw lub wyczy\u015b\u0107 t\u0142o filedialog.backgroundload=Otw\u00f3rz t\u0142o filedialog.backgroundload.action=Otw\u00f3rz # New Resources in Version 2.14 menu.file.compress=Zawsze kompresuj zapisywane pliki menu.file.savesvg=Zapisz grafik\u0119 jako SVG... # Version 2.15 loading=\u0141adowanie, prosz\u0119 czeka\u0107! # Version 2.18 and 2.19 menu.settings.font.default=Domy\u015blna czcionka menu.settings.font.bold=Czcionka pogrubiona menu.settings.font.large=Czcionka powi\u0119kszona menu.file.saveeps=Zapisz grafik\u0119 jako EPS... menu.fonts=Czcionka # Version 2.20 bmpscaler.width=Szeroko\u015b\u0107 bmpscaler.height=Wysoko\u015b\u0107 bmpscaler.scale=Wsp\u00f3\u0142czynnik (naci\u015bnij Enter) bmpscaler.illegal=Niedozwolona warto\u015b\u0107! # Version 2.21 renamemacro.title=Zmie\u0144 nazw\u0119 makroprogramu renamemacro.name=Nowa nazwa makroprogramu menu.special.renamemacro=Zmie\u0144 nazw\u0119 makroprogramu... # Version 2.23 savequestion.title=Zapisz konstrukcj\u0119 savequestion.qsave=Zapisa\u0107 zmiany? # Version 2.25 exception.printsize=Strona za ma\u0142a dla tej konstrucji! iconhelp.type?=Typ punktu iconhelp.thickness?=Grubo\u015b\u0107 iconhelp.color?=Kolor iconhelp.filled=Wype\u0142niony obiekt iconhelp.isback=Rysuj w tle iconhelp.inverse=K\u0105t odbity iconhelp.angle?=Rozmiar # Version 2.28 message.objecttracker.stop=Automatyczny \u015blad: Zatrzymaj animacj\u0119 (Shift-strza\u0142ki w bok: zmie\u0144 szybko\u015b\u0107)! # Version 2.31 menu.settings.indicate=Pod\u015bwietlaj generowane obiekty menu.options.other=Ustawienia menu.help.welcome=Nowo\u015bci w bie\u017c\u0105cej wersji iconhelp.twolines=Pasek narz\u0119dzi w dw\u00f3ch wierszach iconhelp.qintersection=Pytaj przed utworzeniem punktu przeci\u0119cia iconhelp.qchoice=Poka\u017c okno wyboru obiektu iconhelp.qpointon=Pytaj przed utworzeniem punktu na obiekcie iconhelp.noindicate=Nie pod\u015bwietlaj obiekt\u00f3w wskazanych mysz\u0105 # Version 2.33 menu.file.new=Nowa konstrukcja (Ctrl-n) # Version 2.34 edit.text.title=Ustawienia tekstu edit.text.settings=Dalsze ustawienia menu.settings.filedialog=Zast\u0105p systemowe okna wyboru plik\u00f3w # Version 2.35 menu.settings.bitmapbackground=U\u017cyj koloru t\u0142a w mapach bitowych # Version 2.36 menu.file.savegraphics=Zapisz grafik\u0119 menu.file.savepng=Zapisz grafik\u0119 jako PNG... bmpscaler.title=Skaluj grafik\u0119 # Version 2.37 menu.file.savepdf=Zapisz grafik\u0119 jako PDF... iconhelp.chord=Poka\u017c jako odcinek ko\u0142owy # Version 2.39 message.setfixedangle.first=Ustaw miar\u0119: Punkt pierwszego ramienia? message.setfixedangle.second=Ustaw miar\u0119: Wierzcho\u0142ek? message.setfixedangle.third=Ustaw miar\u0119: Punkt drugiego ramienia? edit.fixedangle.set=Ustaw miar\u0119... message.setfixedcircle.first=Ustaw promie\u0144: Pierwszy punkt? message.setfixedcircle.second=Ustaw promie\u0144: Drugi punkt? edit.fixedcircle.set=Ustaw promie\u0144... # Version 2.40 minpointsize.title=Ustaw minimalny rozmiar punktu minpointsize.prompt=Minimalny rozmiar punktu (domy\u015blnie: 3) menu.settings.font.minpointsize=Minimalny rozmiar punktu... # Version 2.41 name.short.Track=Tr text.track=\u015alad % podczas gdy % przesuwa si\u0119 po % trackquestion.keep=Zachowa\u0107 \u015blad w konstrukcji? trackquestion.title=Zachowaj \u015blad menu.options.track=Zachowaj \u015blad (Shift-Enter) iconhelp.indicate=Podgl\u0105d rezultat\u00f3w konstrukcji iconhelp.nohelp=Pomoc nie jest dost\u0119pna! # Version 2.42 objects.draw=Rysuj mysz\u0105 menu.options.cleardraw=Wyczy\u015b\u0107 rysunek (Esc) iconhelp.draw=Rysuj mysz\u0105 message.draw=Rysuj mysz\u0105 (Esc: wyczy\u015b\u0107) shortcuts.draw=; # Version 2.43 message.move.select=Przesu\u0144: Punkt (Shift: poka\u017c stare po\u0142o\u017cenie)? message.rename=Nazwij kolejnymi literami alfabetu: Obiekt? iconhelp.rename=Nazwij kolejnymi literami alfabetu objects.rename=Nazwij kolejnymi literami alfabetu shortcuts.rename=: iconhelp.anglereduce=Nie pokazuj p\u00f3\u0142prostej wyznaczonej przez k\u0105t # Version 2.45 menu.settings.smartboard=Tryb bia\u0142ej tablicy shortcuts.zoom=% objects.zoom=Przesu\u0144, powi\u0119ksz lub pomniejsz mysz\u0105 message.zoom=Przesu\u0144 przeci\u0105gaj\u0105c \u015brodek, powi\u0119ksz lub pomniejsz przeci\u0105gaj\u0105c obrze\u017ce konstrukcji # Version 2.46 menu.special.restricticons=Ograniczony pasek narz\u0119dzi # Version 2.47 menu.settings.indicate.simple=Pokazuj przy podgl\u0105dzie tylko punkty menu.settings.beginner=Tryb dla pocz\u0105tkuj\u0105cych question.again=Zawsze zadawaj to pytanie # Version 2.49 definemacro.parameters=\u017b\u0105danie parametr\u00f3w (podanie "=nazwy" obiektu ustala go) # Version 2.53 menu.actions.angles=K\u0105ty menu.actions.circles=Okr\u0119gi menu.actions.lines=Proste, p\u00f3\u0142proste i odcinki menu.actions.points=Punkty # Version 3.00 info.title=Pomoc kontekstowa info.related=Tematy pokrewne info.notfound=Temat nie zost\u0105\u0142 znaleziony! info.noresults=Szukany tekst nie zosta\u0142 znaleziony! info.searchresults=- Wyniki wyszukiwania - info.select=- Wybierz - info.search=Szukaj info.back=Wstecz info.start=Start iconhelp.info=Pomoc kontekstowa menu.help.info=Pomoc kontekstowa myfiledialog.homedir=Katalog C.a.R. myfiledialog.windowshome=Moje dokumenty myfiledialog.mkdir=Utw\u00f3rz katalog myfiledialog.back=Wstecz menu.file.alwaysclearmacros=Wyczy\u015b\u0107 makroprogramy przy otwarciu konstrukcji about.language=J\u0119zyk bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Zapisuj z kopi\u0105 zapasow\u0105 # Version 3.02 menu.options.hideduplicates=Ukryj duplikaty # Version 3.03 menu.options.function=Wykres funkcji... text.function=Funkcja f(%)=% function.varmin=Od function.varmax=Do function.dvar=Krok function.var=Zmienna function.x=X function.y=Y iconhelp.function=Wykres funkcji menu.options.editlast=Edytuj ostatni obiekt... iconhelp.control.edit=Edytuj ostatni obiekt iconhelp.control.hide=Ukryj duplikaty edit.function.title=Wykres funkcji lub krzywa iconhelp.control.runmacro=Uruchom ponownie ostatni makroprogram # Version 3.05 point.type.cross=Krzy\u017cyk point.type.dcross=Uko\u015bny krzy\u017cyk shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Jednostka menu.special.break=Punkty przerwania menu.bp.setbreak=Ustaw punkt przerwania menu.bp.clearbreak=Usu\u0144 punkt przerwania menu.bp.sethidingbreak=Ustaw ukrywaj\u0105cy punkt przerwania menu.bp.animatebreak=Animuj punkty przerwania iconhelp.animatebreak=Animuj punkty przerwania message.animatebreak=Animuj punkty przerwania: Zatrzymaj animacj\u0119 (Shift-strza\u0142ki w bok: zmie\u0144 szybko\u015b\u0107)! menu.special.exporttemplate=Eksport do pliku HTML przy u\u017cyciu szablonu... templateload.open=Otw\u00f3rz szablon templateload.open.action=Otw\u00f3rz menu.settings.doubleclick=Podw\u00f3jne klikni\u0119cie wy\u015bwietla makroprogramy ./src/rene/zirkel/docs/CVS/RevisionCache/ZirkelProperties.properties#1.40000644000175000017500000010744511240652034025027 0ustar yvesyvesprogram.name=CaRMetal program.version=2.9.8.4 program.date=2009-02 version=Version homefile=index.html homepage=http://www.z-u-l.de/ about.title=About this Program about.name=School Geometry about.programmed=Programmed by title=School Geometry close=Close ok=OK cancel=Cancel done=Well Done! message=Message yes=Yes no=No abort=Abort true=true false=false warning.nojob=This isn't an Assignment! warning.print=Printing failed! warning.reset=This option is enabled for the next start of Z.u.L.! question.title=Question question.intersection=Create this intersection? question.pointon=Create a point on this object? colors.black=Black colors.blue=Blue colors.green=Green colors.brown=Brown colors.cyan=Cyan colors.red=Red objects.point=Point objects.segment=Segment objects.line=Line objects.ray=Ray objects.circle=Circle objects.intersection=Intersection objects.move=Move Point objects.hide=Hide Object objects.edit=Edit Point objects.tracker=Track a Point or a Line objects.objecttracker=Track a Point or a Line on an Object objects.parallel=Parallel Line objects.plumb=Perpendicular Line objects.circle3=Circle from 3 Points objects.midpoint=Midpoint objects.quadric=Conic Section objects.angle=Angle objects.boundedpoint=Point on an Object objects.parameter=Set Macro Parameters objects.targets=Set Macro Targets objects.definejob=Define an Assignment objects.runmacro=Run a Macro objects.delete=Delete Objects and their Children objects.reorder=Push Objects to the Background objects.animate=Animation objects.expression=Arithmetic Expression objects.area=Polygon objects.text=Text objects.fixedcircle=Circle with fixed Size objects.fixedangle=Fixed Angle objects.fixedsegment=Segment with fixed Length iconhelp.point=Point (p) iconhelp.segment=Segment (s) iconhelp.line=Line (g) iconhelp.ray=Ray (r) iconhelp.circle=Circle (c) iconhelp.intersection=Intersection (i) iconhelp.move=Move a point (m)+Ctrl (Points): Show old construction+Ctrl: Move fixed objects+Shift: Move more than one object iconhelp.hide=Hide objects (h)+Shift: Hide completely iconhelp.edit=Edit objects (e)+Shift: Edit more objects+Ctrl: Edit last object iconhelp.tracker=Track a point or a line (t) iconhelp.objecttracker=Automatic track of a point or a line (o)+Strg: Keep Track (Shift-Enter) iconhelp.parallel=Parallel line (1) iconhelp.plumb=Perpendicular line (2) iconhelp.circle3=Circle from 3 points (3) iconhelp.midpoint=Midpoint (4) iconhelp.quadric=Conic section through 5 points ($) iconhelp.angle=Angle (a) iconhelp.boundedpoint=Create a point on an abject (5)+Shift: Not fixed on object iconhelp.hidden=Show or hide hidden objects (F9) iconhelp.color=Set default object color (Ctrl-1,2,3,4) iconhelp.type=Set default point type (Ctrl-5,6,7,8,9,0) iconhelp.type0=Set default point type iconhelp.thickness=Set default object thickness (Alt-5,6,7) iconhelp.back=Delete last object (<-) iconhelp.thickness0=Set default object thickness iconhelp.partial=Create partial circles by default (Ctrl-F9) iconhelp.plines=Create partial lines by default (Ctrl-F10) iconhelp.arrow=Create segments as vectors by default (Ctrl-F11) iconhelp.showcolor=Show selected colors only (Alt-1,2,3,4) iconhelp.runmacro=Run a macro (9)+Ctrl: Run last Macro iconhelp.macro=Set macro parameters, targets and definition (7,8,Ctrl-5) iconhelp.expression=Arithmetic expression (x) iconhelp.showvalue=Show object values by default (Ctrl-F7) iconhelp.showname=Show object names by default (Ctrl-F6) iconhelp.obtuse=Create angles larger than 180\u00B0 by default (Ctrl-F12) iconhelp.solid=Do not use transparency by default iconhelp.longnames=Use long object names by default (Ctrl-F8) iconhelp.grid=Show the grid (F12) iconhelp.comment=Show and edit comment (F10) iconhelp.defaults=Default settings iconhelp.macro0=Set macro parameters, targets and definition iconhelp.visual=Toggle visual construction mode iconhelp.replay=Replay the construction iconhelp.oneforward=Forward iconhelp.fastforward=Fast forward iconhelp.allforward=To the end iconhelp.oneback=Back iconhelp.fastback=Fast back iconhelp.allback=To the start iconhelp.close=Close iconhelp.area=Polygon (0) iconhelp.text=Multiline text (b) iconhelp.fixedcircle=Circle with fixed radius (,) iconhelp.fixedangle=Angle with fixed size (.) iconhelp.fixedsegment=Segment with fixed length (#) iconhelp.animate=Animation of a point (") iconhelp.delete=Delete objects and their children (Del) iconhelp.undo=Undo last removals (Ctrl-z) iconhelp.nextbreak=Jump to next break iconhelp.setbreak=Toggle break+Shift: Hidden breakpoint iconhelp.zoom=Zoom with the mouse (%) shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.showcolor.4= shortcuts.showcolor.5= shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) menu.file=File menu.file.clearmacros=Clear User Macros menu.file.load=Load a Construction ... (Ctrl-o) menu.file.loadjob=Load an Assignment ... (Ctrl-j) menu.file.savejob=Save as Assignment ... (Ctrl-k) menu.file.save=Save this Construction (Ctrl-s) menu.file.saveas=Save this Construction to ... (Ctrl-a) menu.file.includemacros=Include all Macros menu.file.exit=Exit (Alt-F4) menu.file.print=Print ... menu.file.print.isoscale=Scale 1:1 in cm menu.file.savebmp=Save Graphics (as BMP) ... menu.file.savefig=Save Graphics (as FIG) ... menu.file.loadrun=Load a Decriptive Construction ... (Ctrl-r) menu.file.editrun=Edit a Descriptive Construction ... (Ctrl-x) menu.actions=Edit menu.actions.elementary=Elementary Tools menu.actions.complex=More Complex Tools menu.actions.move=Moving Tools menu.actions.decorative=Decorative Objects menu.options=Options menu.options.visual=Toggle Visual Mode (Ctrl-F6) menu.options.hidden=Show hidden Objects (F9) menu.options.comment=Edit Comment (F10) menu.options.constructiondisplay=Show Description menu.options.grid=Show Grid (F12) menu.options.setgrid=Set Grid Width ... menu.options.showcolor=Show Color menu.options.defaultcolor=Default Color menu.options.defaultthickness=Default Thickness menu.options.defaulttype=Default Point Type menu.options.all=All menu.options.setdigits=Set Digits menu.options.shownames=Show Object Names (Ctrl-F6) menu.options.longnames=Long Object Names (Ctrl-F8) menu.options.obtuse=Use Angles larger than 180\u00B0 (Ctrl-F12) menu.options.solid=Do not use Transparency menu.options.showvalues=Show Object Values (Ctrl-F7) menu.options.partial=Partial Circles (Ctrl-F9) menu.options.plines=Partial Lines (Ctrl-F10) menu.options.arrow=Arrows (Ctrl-F11) menu.options.editicons=Edit the Toolbox menu.options.back=Delete last Object (<-) menu.options.undo=Undo Delete (Ctrl-z) menu.zoom=Zoom menu.zoom.in=In (+) menu.zoom.out=Out (-) menu.zoom.left=Left (Cursor-Left) menu.zoom.right=Right (Cursor-Right) menu.zoom.up=Up (Cursor-Up) menu.zoom.down=Down (Cursor-Down) menu.macros=Macros menu.special.definemacro=Define a Macro (Ctrl-F5) menu.special.runmacro=Run a Macro ... (F5) menu.special.savemacros=Save Macros ... menu.special.loadmacros=Load Macros ... menu.special.deletemacros=Delete Macros ... menu.special=Special menu.special.testjob=Test this Assignment (Ctrl-F1) menu.special.jobcomment=Set Assignment Text ... (F8) menu.special.export=Create an HTML File ... (Ctrl-e) menu.special.replay=Replay this Construction menu.help=Help menu.help.about=About this program menu.help.browser=Explore Help and Demos menu.help.text=Simple Help menu.help.configure=Configure the Browser menu.help.help=Help (F1) menu.help.macros=About Macros menu.help.tools=The Tools menu.help.gui=User Interface menu.help.interactive=Descriptive Constructions menu.help.tips=Some Tips menu.settings=Special Settings menu.settings.fullicons=Use two full icon bars menu.settings.utf=Use UTF-8 encoding menu.settings.autohide=Hide second intersection point menu.settings.iconbartop=Iconbar above construction menu.settings.showtips=Show tooltips menu.settings.simplegraphics=Use simpler graphics menu.settings.sure=Confirm before loading and closing menu.settings.pointon=Ask before creating a point on an object menu.settings.intersection=Ask before creating an intersection menu.settings.choice=Show selection dialog for objects menu.settings.movename=Show object values when moving menu.settings.movefixname=Show fixed object values when moving menu.settings.restricted=Toggle school mode menu.colors=Set the Colors colors.default=Use Default Colors colors.color0=Color 1 (Black) colors.color1=Color 2 (Green) colors.color2=Color 3 (Blue) colors.color3=Color 4 (Brown) colors.color4=Color 5 (Cyan) colors.color5=Color 6 (Red) colors.background=Background colors.select=Select colors.target=Target myfiledialog.dir=Directory myfiledialog.file=File myfiledialog.pattern=Extensions filedialog.open=Open filedialog.saveas=Save as ... filedialog.open.action=Open filedialog.saveas.action=Save filedialog.htmlsave=Save HTML filedialog.htmlsave.action=Save pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Save load=Load abort=Abort bound.release=Release Point bound.bind=Bind to Object bound.error=Object not found before intersection! constructiondisplay.edit=Edit Object constructiondisplay.copy=Copy to Clipboard edit.Title=Properties edit.name=Name edit.hidden=Hidden edit.text=Text edit.fixed=Fixed edit.color=Color edit.ok=OK edit.cancel=Cancel edit.showname=Show Name edit.point.title=Edit Point edit.point.type=Type edit.point.x=X edit.point.y=Y edit.point.intersection=Different from edit.point.showvalue=Show Coordinates edit.point.colortype=Thickness edit.point.bound=Bound edit.point.away=Away from edit.point.close=Close to edit.point.free=Free edit.line.title=Edit Line, Ray, Segment edit.line.normal=Normal edit.line.thick=Thick edit.line.thin=Thin edit.line.invisible=Invisible edit.line.type=Type edit.segment.length=Length edit.segment.showvalue=Show Length edit.circle.title=Edit Circle edit.circle.length=Radius edit.circle.partial=Partial Display edit.plumb.restricted=Restricted edit.angle.title=Edit Angle edit.angle.length=Size edit.angle.displaysize=Display Size edit.angle.normal=Normal edit.angle.small=Small edit.angle.large=Large edit.expression.title=Edit Expression edit.expression=Arithmetic Expression edit.expression.prompt=Explanation edit.area.title=Edit Polygon edit.area.back=In Background export.title=HTML Export export.pagetitle=Title of Page export.width=Width export.height=Height export.jar=Jar file export.comment=Save comment export.file=Construction File export.job=Display as Assignment export.color=Color export.backgroundcolor=Use for page background export.appletcolor=Use for applet background export.plain=Plain export.3D=Border export.breaks=Replay with Breakpoints export.icons=Border and Icons export.full=Border, Icons and Status export.nonvisual=Border, Icons and Input Line export.style=Applet Style export.setcolor=Choose Color export.savefirst=File has not been saved! export.soltext=Solution export.stylesheet=CSS Style File export.solution=Solution File export.jumpsol=Jump to Solution export.linksol=Link to Solution export.savesol=Save Solution File export.track=Track Point export.digits=Save Digits export.setsize=Get Size export.signature=Created using C.a.R. export.colors=Save defined Colors export.background=Save defined Background help.title=Help help.error=Could not open the help file! help.file=schoolgeometry.txt coloreditor.title=Edit Color coloreditor.red=Red coloreditor.green=Green coloreditor.blue=Blue coloreditor.color=Your Color comment.title=Construction Comment comment.set=Set comment.cancel=Cancel comment.close=Close iconedit.title=Edit Icon Bar iconedit.twobars=Icon box has two lines jobcomment.title=Assignment select.title=Selection select.ok=OK select.cancel=Cancel select.comment=Show Comment select.all=All message.circle.midpoint=Circle: Midpoint? message.circle.radius=Circle: Point on the circle (shift: fix radius)? message.fixedcircle.midpoint=Circle with fixed size: Midpoint? message.fixedcircle.radius=Circle with fixed size: Radius? message.line.first=Line: First point? message.line.second=Line: Second point? message.ray.first=Ray: Root point? message.ray.second=Ray: Second point? message.move.select=Move: Select an object (shift: more)! message.move.move=Move: Move the point? message.point=Point: Set a point (shift: fix)! message.segment.first=Segment: First point? message.segment.second=Segment: Second point (shift: fixed length)? message.fixedsegment.first=Segment with fixed length: First point? message.fixedsegment.second=Segment with fixed length: Click somewhere! message.intersection.first=Intersection: First object or the intersection? message.intersection.second=Intersection: First object? message.hide=Hide/Show: Select an object! message.tracker.select=Track: Point or line to track (shift: more)? message.tracker.selectpoint=Track: Point to move? message.tracker.move=Track: Move the point! message.objecttracker.select=Autotrack: Point or line to track (shift: more)? message.objecttracker.object=Autotrack: Line or circle, point on object, slider? message.objecttracker.selectpoint=Autotrack: Point to be moved on line or circle? message.objecttracker.selectanypoint=Autotrack: Any other point to move? message.objecttracker.move=Autotrack: Move the point! message.objecttracker.start=Autotrack: Start the Animation! message.parallel.first=Parallel: Line? message.parallel.second=Parallel: Point? message.plumb.first=Perpendicular: Line? message.plumb.second=Perpendicular: Point? message.circle3.first=Circle: First radius point? message.circle3.second=Circle: Second radius point? message.circle3.midpoint=Circle: Midpoint? message.midpoint.first=Midpoint: First point? message.midpoint.second=Midpoint: Second point? message.quadric=Conic Section: Point number message.angle.first=Angle: First angle point? message.angle.root=Angle: Corner point? message.angle.second=Angle: Second angle point (shift: fixed size)? message.fixedangle.first=Angle with fixed size: First angle point? message.fixedangle.root=Angle with fixed size: Base point? message.fixedangle.second=Angle with fixed size: Click somewhere! message.label.select=Move Label: Select a label! message.label.move=Move Label: Move the label! message.boundedpoint=Point on Object: Circle or line object (shift: continuous, ctrl: inside)? message.parameters=Macro Parameters: Parameter objects? message.targets=Macro Targets: Target objects? message.savejob.first=Define Assignment: Last displayed object? message.savejob.second=Define Assignment: Target object (shift: don't check)? message.savejob.third=Define Assignment: Further objects to be displayed? message.runmacro=Macro %: %. % - % message.runmacro.return=(SPACE chooses %) message.runmacro.fixes=(SHIFT fixes selection) message.delete=Delete: Select an object! message.reorder=Reorder: Select an object! message.expression=Arithmetic Expression: Select a place! message.area=Filled polygon: Corner point? message.text=Text: Select a place! message.animator.point=Animation: Point to animate? message.animator.segment=Animation: Circle or a segment? message.animator.running=Animation: Running (click to stop)! message.range.first=Set range: Draw the circle from which point ... message.range.second=Set range: ... to which point? message.setaway.away=Keep the intersection away from which point? message.setaway.close=Keep the intersection close to which point? objectsedit.title=Edit Properties point.type.square=Square point.type.diamond=Diamond point.type.circle=Circle point.type.dot=Dot color.type.normal=Normal color.type.thick=Thick color.type.thin=Thin color.type.invisible=Invisible text.point=Point at %, % text.line=Line through % and % text.segment=Line segment from % to % text.segment.fixed=Line segment from % to % with length % text.ray=Ray from % pointing to % text.intersection=Intersection between % and % text.circle=Circle around % through % text.circle.fixed=Circle around % through % with radius % text.fixedcircle=Circle around % with radius % text.circle3=Circle around % with radius from % to % text.parallel=Parallel line through % to % text.midpoint=Midpoint between % and % text.quadric=Conic section through % text.plumb=Perpendicular line through % to % text.angle=Angle % - % - % text.angle.fixed=Angle % - % - % with size % text.boundedpoint=Point on % text.expression=Expression "%" at %, % text.area=Polygon text.fixedangle=Angle % - % with size % name.Point=Point name.Intersection=Intersection name.OtherIntersection=Intersection name.Circle=Circle name.Circle3=Circle name.Segment=Segment name.Ray=Ray name.Line=Line name.TwoPointLine=Line with two Points name.Parallel=Parallel name.Midpoint=Midpoint name.Quadric=Quadric name.Plumb=Plumb name.Angle=Angle name.PointOn=ObjectPoint name.Expression=Expression name.Polygon=Polygon prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.angle==a(,,) prompt.area=A(,,) prompt.quadric=quadric(,,,,) prompt.function=function(,,,,,) name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=pl name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=p name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=poly name.short.Function=f popup.hidden=Show hidden objects popup.replay=Replay construction popup.empty=--- Macros --- replay.title=Replay reorder.title=Push objects reorder.message=insert after reorder.notfound=Object not found! reorder.warning=Could not do that! setgrid.title=Grid Width setgrid.prompt=Enter new grid width setgrid.set=Set definemacro.title=Define Macro definemacro.name=Name definemacro.comment=Macro Comment definemacro.noparams=Need parameters for the macro! definemacro.nomacro=There is no macro to run! definemacro.targetsonly=Hide construction definemacro.invisible=Hide completely definemacro.promptfor=Prompt for macro.replace.title=Macro Replacement macro.replace=Replace Macro: macro.replace.all=All macro.usage=Wrong use of macro (see tips)! macro.prompt.title=Parameter Prompt macro.prompt.prompt=Enter a value for the parameter macro.prompt.illegal=Illegal value! digits.title=Set Digits digits.edit=Edit digits.lengths=Display digits.angles=Angles editrun.title=Edit Descriptive Construction editrun.run=Save and Run editrun.load=Other Description sure.title=Are you sure? sure.macros=Delete all user macros? sure.delete=Forget current changes? close.title=End close.prompt=Really close this program? file.exists.title=File Exists file.exists.overwrite=File exists! Overwrite? exception.nparams=Illegal number of Parameters! exception.notfound=Object not found, or defined after expression! exception.type=Illegal Object Type! exception.expression=Invalid Expression! exception.canfix=Object cannot be fixed! exception.fix=Value invalid! exception.novalue=Value invalid! exception.elementary=Invalid element in expression! exception.bracket=Closing brackets missing! exception.quotes=Closing quotes missing! exception.dot=Two dots in number! exception.nodigit=No digit found in number! exception.function=Unknown function! exception.parameter=Illegal function parameter! exception.macro=Illegal macro parameter! exception.name=Need a Name! exception.job=Illegal Job Paramters! exception.track=Illegal Track Parameters! exception.animate=Illegal Animation Parameters! exception.boolean=Boolean Value must be true of false! exception.value=Illegal Value! exception.color=Illegal Color! exception.colortype=Illegal Thickness! exception.type=Illegal Point Type! exception.macroparameter=Illegal Macro Parameter! exception.macrotarget=Illegal Macro Target! exception.prompt=Illegal prompt oject! exception.prompt.parameter=Prompt object may not be a parameter! exception.parameters=Illegal Parameter! exception.brackets=Illegal Brackets! exception.double=Name is not unique! error.setaway=This point is not defined before the intersection! error.objecttracker.depends=The point is bound to another object! constructiondisplay.title=Construction function.hide=Hide function.hide.short=hide function.rename=Name function.rename.short=name function.value=Value function.value.short=value function.window=Window function.window.short=W function.color=Color function.color.short=col function.thickness=Thickness function.thickness.short=th function.type=Type function.type.short=type function.partial=Partial function.partial.short=part function.fill=Fill function.fill.short=fill function.back=Background function.back.short=back function.acute=Acute function.acute.short=acute function.obtuse=Obtuse function.obtuse.short=obtuse function.solid=Solid function.solid.short=solid function restrict=Restrict function restrict.short=restrict expression.value=Value configure.title=Set Browser configure.prompt=Enter Browser Command # New Resources: background.error=Could not load the Image (GIF or JPG!). menu.background=Background menu.background.grab=Current as Background menu.background.clear=Clear Background menu.background.load=Load Background Picture ... menu.background.usesize=Resize to Picture menu.background.tile=Tile Background menu.background.center=Center Background iconhelp.grab=Set or Clear Background filedialog.backgroundload=Load Background filedialog.backgroundload.action=Load # New Resources in Version 2.14 menu.file.compress=Compress always menu.file.savesvg=Save graphics (as SVG) ... # Version 2.15 loading=Loading, please wait! # Version 2.18 and 2.19 menu.settings.font.default=Default font menu.settings.font.bold=Bold font menu.settings.font.large=Large font menu.file.saveeps=Save graphics (as EPS) ... menu.fonts=Font # Version 2.20 bmpscaler.title=Scale Bitmap bmpscaler.width=Width bmpscaler.height=Height bmpscaler.scale=Factor (press Return) bmpscaler.illegal=Illegal Value # Version 2.21 renamemacro.title=Rename Macro renamemacro.name=New macro name menu.special.renamemacro=Rename Macro ... # Version 2.23 savequestion.title=Save Construction savequestion.qsave=Save Changes? # Version 2.25 exception.printsize=Page too small for this construction! iconhelp.nohelp=No help available iconhelp.type?=Point type iconhelp.thickness?=Thickness iconhelp.color?=Color iconhelp.filled=Filled object iconhelp.isback=Draws in background iconhelp.inverse=Reflected angle iconhelp.angle?=Size # Version 2.28 message.objecttracker.stop=Autotrack: Click to stop (shift left/right for speed)! # Version 2.31 menu.settings.indicate=Preview generated objects menu.options.other=Settings menu.help.welcome=News on current version iconhelp.twolines=Icons in two lines iconhelp.qintersection=Ask for intersections iconhelp.qchoice=Show dialog for object selection iconhelp.qpointon=Ask to create point on object iconhelp.noindicate=Do not indicate objects under mouse # Version 2.33 menu.file.new=New Construction (Ctrl-n) # Version 2.34 edit.text.title=Text Settings edit.text.settings=Further Settings menu.settings.filedialog=Replace system file dialog # Version 2.35 menu.settings.bitmapbackground=Use Background Color in Bitmaps # Version 2.36 menu.file.savegraphics=Save Graphics as ... bmpscaler.title=Scale Graphics # Version 2.37 menu.file.savepdf=Save Graphics (as PDF) iconhelp.chord=Show as segment # Version 2.39 message.setfixedangle.first=Set fixed angle: First point? message.setfixedangle.second=Set fixed angle: Base point? message.setfixedangle.third=Set fixed angle: Third point? edit.fixedangle.set=Set Size ... message.setfixedcircle.first=Set fixed circle: First point? message.setfixedcircle.second=Set fixed circle: Second point? edit.fixedcircle.set=Set Size ... # Version 2.41 name.short.Track=Tr text.track=Track of % when % moves on % trackquestion.keep=Keep Track in Construction? trackquestion.title=Keep Track menu.options.track=Keep Track (Shift-Enter) iconhelp.indicate=Preview of construction results iconhelp.nohelp=No help available! # Version 2.42 objects.draw=Paint with Mouse menu.options.cleardraw=Clear Painting (Esc) iconhelp.draw=Paint with Mouse message.draw=Paint with Mouse (ESC to clear) shortcuts.draw=; # Version 2.43 message.rename=Rename A,B,C,...: Select objects! iconhelp.rename=Rename A,B,C,... objects.rename=Rename A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Don't show angle ray # Version 2.45 menu.settings.smartboard=Smartboard Mode shortcuts.zoom=% objects.zoom=Zoom with Mouse message.zoom=Drag center, or zoom in and out # Version 2.46 menu.special.restricticons=Restricted Icon Set # Version 2.47 menu.settings.indicate.simple=Indicate Points only menu.settings.beginner=Beginner Mode question.again=Always ask this question. # Version 2.49 definemacro.parameters=Parameter Prompt(s) ("=name" fixes) # Version 2.53 menu.actions.angles=Angles menu.actions.circles=Circles menu.actions.lines=Lines menu.actions.points=Points # Version 3.00 info.title=Context Help info.related=Related Topics info.notfound=Topic not found! info.noresults=String not found! info.searchresults=- Search results - info.select=- Select - info.search=Search info.back=Back info.start=Start iconhelp.info=Context help menu.help.info=Context help myfiledialog.homedir=CaR Files myfiledialog.windowshome=My Documents myfiledialog.mkdir=Make Directory myfiledialog.back=Back menu.file.alwaysclearmacros=Clear Macros before Loading about.language=Language bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Backups # Version 3.02 menu.options.hideduplicates=Hide Duplicates # Version 3.03 menu.options.function=Create a function or curve text.function=Function ( % , % ) function.varmin=From function.varmax=To function.dvar=Step function.var=Variable function.y=Expression for Y iconhelp.function=Create a Function+(Ctrl: Create a user defined function) menu.options.editlast=Edit last Object iconhelp.control.edit=Edit last Object iconhelp.control.hide=Hide Duplicates edit.function.title=Function or Curve iconhelp.control.runmacro=Run last macro again # Version 3.05 point.type.cross=Cross point.type.dcross=Diagonal Cross shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Unit menu.special.break=Breakpoints menu.bp.setbreak=Set Breakpoint menu.bp.clearbreak=Clear Breakpoint menu.bp.sethidingbreak=Set Hiding Breakpoint menu.bp.animatebreak=Animate Breakpoints iconhelp.animatebreak=Animate breakpoints message.animatebreak=Animate breakpoints: click to stop (shift left/right for speed)! menu.special.exporttemplate=HTML Export with Templates templateload.open=Load Template templateload.open.action=Open menu.settings.doubleclick=Double click for macros export.codebase=Codebase # Version 3.12 edit.equation=Equation # Version 3.23 menu.settings.squarepoints=Draw points always as squares # Version 3.37 menu.options.export=Graphic Export Settings menu.settings.minwidth=Minimal line width is 1 menu.settings.minpointsize=Respect minimal point size menu.settings.minfontsize=Respect minimal font size menu.options.minpointsize=Minimal Point Size menu.options.minfontsize=Minimal Font Size # Version 3.38 menu.settings.scalepdf=Scale PDF and EPS output 1:1 # Version 3.41 menu.file.clip=Clip for Graphics Output ... clip.title=Set Clipping clip.width=Width clip.height=Height clip.screen=No Clipping # Version 3.44 iconhelp.large=Use large font size iconhelp.bold=Use bold font menu.options.largefont=Large Font Size menu.options.boldfont=Bold Font warning.previewframe=Frame larger than window! message.move.select=Move: Select a point (shift: more points, ctrl: show old state)! # Version 3.46 iconbar.showseparators=Show Separators # Version 3.48 menu.options.printscaler=Set Export Size ... menu.options.exportsettings=Special Export Settings ... printscaler.title=Set Export Size printscaler.width=Width (in cm) printscaler.height=Height (in cm) printscaler.dpi=Resolution (in dpi, default 300) printscaler.linewidth=Line Width (in cm, default 0.02) printscaler.pointsize=Point Size (in cm, default 0.07) printscaler.textsize=Text Size (in cm, default 0.3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=Width (in pixel) printscaler.h=Height (in pixel) printscaler.scale=Scale (relativ to screen) printscaler.middle=Cut out from screen printscaler.sizes=Use Values menu.file.savepng=Save Graphics as PNG warning.preview=Preview will not work completely with Java 1.1 iconedit.showseparators=Show Separators printscaler.aspect=Keep Aspect Ratio printscaler.presets=Presets printscaler.preset=Make a Choice printscaler.preset.300dpi=Exactly scaled with 300 DPI printscaler.preset.300dpi6=6 cm Width with 300 DPI printscaler.preset.300dpi16=16 cm Width with 300 DPI printscaler.preset.window=Window Size printscaler.preset.clip50=Window Size Clipped 50% message.saving=Please wait! menu.options.printscalepreview=Export Preview (Ctrl-F3) date=Build # Version 3.51 help=Help # Version 3.61 editconditionals.title=Edit Conditionals editconditionals.hidden=Hidden editconditionals.superhidden=Completely Hidden editconditionals.visible=Normal editconditionals.showname=Show Name editconditionals.showvalue=Show Value editconditionals.background=Background editconditionals.solid=Not Transparent exception.superfluous=Superfluous Text in Expression # Version 3.63 select.comment.title=Macro Comment # Version 3.68 edit.area.area=Area # Version 3.73 myfiledialog.oldfiles=Old Files # Version 3.74 iconhelp.load=Load Construction (Ctrl-o) iconhelp.save=Save Construction (Ctrl-s) iconhelp.new=New Construction (Ctrl-n)+Ctrl: Load defaults # Version 3.81 warning.loadbackground=Error loading background # Version 3.9 function.x=Expression for X (empty for functions) # Version 3.91 constructiondisplay.select=Select constructiondisplay.all=All Objects constructiondisplay.visible=Visible Objects (Alt-Ctrl-9) constructiondisplay.points=Points constructiondisplay.lines=Lines constructiondisplay.circles=Circles constructiondisplay.angles=Angles constructiondisplay.other=Other Objects menu.file.copypng=Copy to Clipboard exception.clipboardcopy=Copy failed! menu.options.finegrid=Axis only # Vesion 3.93 edit.function.center=Set Center edit.function.free=Release Center message.setcenter=Select the center point! # Vesion 3.94 message.edit=Edit: Objekt (shift: more objects, ctrl: conditionals)? # Version 3.97 error.image=Image not in same folder as construction? filedialog.imageload=Load Image filedialog.imageload.action=Load prompt.image=image(,,,) objects.image=Image shortcuts.image=_ # Version 3.98 exception.depends=Object % depends on current object. error.depends=Object % depends on current object. constructiondisplay.sorted=Sorted by Order of Construction (Alt-Ctrl-0) # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Expressions # Version 4.00 iconhelp.image=Load Image (_) message.image=Image anchor point % message.image.last=Last image anchor point (or choose selected point) editconditionals.z=Z-Buffer Value # Version 4.01 name.FixedAngle=Fixed Angle # Version 4.04 menu.moresettings=Settings menu.settings.language=Set Language language.title=Set Language language.prompt=Language for next program start # Version 4.05 constructiondisplay.invalid=Invalid Objects # Version 4.08 menu.settings.constructiondisplay=Permanent Construction Display (F11) # Version 4.09 constructiondisplay.editconditions=Edit Conditions constructiondisplay.delete=Delete selected Objects constructiondisplay.hide=Hide or Show (Alt-Ctrl-4) constructiondisplay.superhide=Super Hide (Alt-Ctrl-5) # Version 4.2 edit.expression.slider=Show as Slider menu.grid.options=Grid Options menu.options.leftsnap=Snap with Left Button Drag menu.settings.boundingbox=Create Bounding Box (bb) file # Version 4.3 latexsettings.title=Setup LaTeX export latexsettings.boundingbox=Create Bounding box bb-file latexsettings.latexinput=Create LaTeX idx-file latexsettings.doubledollar=LaTeX does $$...$$ latexsettings.dollar=LaTeX does $...$ latexsettings.nodollar=LaTeX does all other strings latexsettings.fullpath=Use file path printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=12 cm width with 300 DPI printscaler.latex=Save for LaTeX menu.background.usewidth=Adjust height only # Version 4.4 menu.options.restricted=Restrict Intersections menu.options.sizes=Set Sizes ... sizesdialog.title=Sizes minlinesize.prompt=Minimal line width (default: 1) minpointsize.prompt=Minimal point size (default: 3) minfontsize.prompt=Minimal font size (default: 12) arrowsize.prompt=Arrow size (default: 10) selectionsize.prompt=Selection size (default: 1.5) warning.loadmacros=Error while loading a macro! warning.macrodefinition=% is used, but is not in macro! edit.circle.bounds=Show as Arc edit.circle.range=Set Arc ... # Version 4.5 edit.track.dmin=Minimal step (default 0.001) # Version 4.6 menu.settings.smallicons=Use small icons menu.settings.oldicons=Use old icons # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof=Track of % when % changes # Version 5 # Fix error.image edit.discrete=Discrete error.fixedsegment=Cannot fix this segment! export.zoom=Zoom with mouse export.popup=Popup menu # Version 5.1 edit.intersection.alternate=Can alternate export.restrictedmove=Restrict Movements # Version 6.0 # Fix message.boundedpoint # Fix iconhelp.new message.bindpoint=Bind point to object (Shift: continuous, Ctrl: inside object) edit.point.inside=Inside object edit.point.increment=Grid increment (0=free) edit.more=More ... menu.settings.more=Show button for conditional formats menu.file.loadexamples=Load Example ... menu.options.editgrid=Edit coordinate grid ... # Version 6.1 constructiondisplay.description=Show Description (Alt-Ctrl-1) constructiondisplay.size=Show Size or Coordinates (Alt-Ctrl-2) constructiondisplay.formula=Show Formula (Alt-Ctrl-3) menu.settings.germanpoints=Use | in coordinates # Version 6.2 # fix iconhelp.function menu.options.userfunction=User defined Function function.vars=Variables function.f=Function expression # Version 6.4 menu.special.macrobar=Macro bar menu.special.defaultmacrosinbar=Show default macros help.related=Related topics help.nexttopic=Next topic ./src/rene/zirkel/docs/CVS/RevisionCache/ZirkelProperties.properties#1.50000644000175000017500000010744111257511750025033 0ustar yvesyvesprogram.name=CaRMetal program.version=3.0 program.date=2009-08 version=Version homefile=index.html homepage=http://www.z-u-l.de/ about.title=About this Program about.name=School Geometry about.programmed=Programmed by title=School Geometry close=Close ok=OK cancel=Cancel done=Well Done! message=Message yes=Yes no=No abort=Abort true=true false=false warning.nojob=This isn't an Assignment! warning.print=Printing failed! warning.reset=This option is enabled for the next start of Z.u.L.! question.title=Question question.intersection=Create this intersection? question.pointon=Create a point on this object? colors.black=Black colors.blue=Blue colors.green=Green colors.brown=Brown colors.cyan=Cyan colors.red=Red objects.point=Point objects.segment=Segment objects.line=Line objects.ray=Ray objects.circle=Circle objects.intersection=Intersection objects.move=Move Point objects.hide=Hide Object objects.edit=Edit Point objects.tracker=Track a Point or a Line objects.objecttracker=Track a Point or a Line on an Object objects.parallel=Parallel Line objects.plumb=Perpendicular Line objects.circle3=Circle from 3 Points objects.midpoint=Midpoint objects.quadric=Conic Section objects.angle=Angle objects.boundedpoint=Point on an Object objects.parameter=Set Macro Parameters objects.targets=Set Macro Targets objects.definejob=Define an Assignment objects.runmacro=Run a Macro objects.delete=Delete Objects and their Children objects.reorder=Push Objects to the Background objects.animate=Animation objects.expression=Arithmetic Expression objects.area=Polygon objects.text=Text objects.fixedcircle=Circle with fixed Size objects.fixedangle=Fixed Angle objects.fixedsegment=Segment with fixed Length iconhelp.point=Point (p) iconhelp.segment=Segment (s) iconhelp.line=Line (g) iconhelp.ray=Ray (r) iconhelp.circle=Circle (c) iconhelp.intersection=Intersection (i) iconhelp.move=Move a point (m)+Ctrl (Points): Show old construction+Ctrl: Move fixed objects+Shift: Move more than one object iconhelp.hide=Hide objects (h)+Shift: Hide completely iconhelp.edit=Edit objects (e)+Shift: Edit more objects+Ctrl: Edit last object iconhelp.tracker=Track a point or a line (t) iconhelp.objecttracker=Automatic track of a point or a line (o)+Strg: Keep Track (Shift-Enter) iconhelp.parallel=Parallel line (1) iconhelp.plumb=Perpendicular line (2) iconhelp.circle3=Circle from 3 points (3) iconhelp.midpoint=Midpoint (4) iconhelp.quadric=Conic section through 5 points ($) iconhelp.angle=Angle (a) iconhelp.boundedpoint=Create a point on an abject (5)+Shift: Not fixed on object iconhelp.hidden=Show or hide hidden objects (F9) iconhelp.color=Set default object color (Ctrl-1,2,3,4) iconhelp.type=Set default point type (Ctrl-5,6,7,8,9,0) iconhelp.type0=Set default point type iconhelp.thickness=Set default object thickness (Alt-5,6,7) iconhelp.back=Delete last object (<-) iconhelp.thickness0=Set default object thickness iconhelp.partial=Create partial circles by default (Ctrl-F9) iconhelp.plines=Create partial lines by default (Ctrl-F10) iconhelp.arrow=Create segments as vectors by default (Ctrl-F11) iconhelp.showcolor=Show selected colors only (Alt-1,2,3,4) iconhelp.runmacro=Run a macro (9)+Ctrl: Run last Macro iconhelp.macro=Set macro parameters, targets and definition (7,8,Ctrl-5) iconhelp.expression=Arithmetic expression (x) iconhelp.showvalue=Show object values by default (Ctrl-F7) iconhelp.showname=Show object names by default (Ctrl-F6) iconhelp.obtuse=Create angles larger than 180\u00B0 by default (Ctrl-F12) iconhelp.solid=Do not use transparency by default iconhelp.longnames=Use long object names by default (Ctrl-F8) iconhelp.grid=Show the grid (F12) iconhelp.comment=Show and edit comment (F10) iconhelp.defaults=Default settings iconhelp.macro0=Set macro parameters, targets and definition iconhelp.visual=Toggle visual construction mode iconhelp.replay=Replay the construction iconhelp.oneforward=Forward iconhelp.fastforward=Fast forward iconhelp.allforward=To the end iconhelp.oneback=Back iconhelp.fastback=Fast back iconhelp.allback=To the start iconhelp.close=Close iconhelp.area=Polygon (0) iconhelp.text=Multiline text (b) iconhelp.fixedcircle=Circle with fixed radius (,) iconhelp.fixedangle=Angle with fixed size (.) iconhelp.fixedsegment=Segment with fixed length (#) iconhelp.animate=Animation of a point (") iconhelp.delete=Delete objects and their children (Del) iconhelp.undo=Undo last removals (Ctrl-z) iconhelp.nextbreak=Jump to next break iconhelp.setbreak=Toggle break+Shift: Hidden breakpoint iconhelp.zoom=Zoom with the mouse (%) shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.showcolor.4= shortcuts.showcolor.5= shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) menu.file=File menu.file.clearmacros=Clear User Macros menu.file.load=Load a Construction ... (Ctrl-o) menu.file.loadjob=Load an Assignment ... (Ctrl-j) menu.file.savejob=Save as Assignment ... (Ctrl-k) menu.file.save=Save this Construction (Ctrl-s) menu.file.saveas=Save this Construction to ... (Ctrl-a) menu.file.includemacros=Include all Macros menu.file.exit=Exit (Alt-F4) menu.file.print=Print ... menu.file.print.isoscale=Scale 1:1 in cm menu.file.savebmp=Save Graphics (as BMP) ... menu.file.savefig=Save Graphics (as FIG) ... menu.file.loadrun=Load a Decriptive Construction ... (Ctrl-r) menu.file.editrun=Edit a Descriptive Construction ... (Ctrl-x) menu.actions=Edit menu.actions.elementary=Elementary Tools menu.actions.complex=More Complex Tools menu.actions.move=Moving Tools menu.actions.decorative=Decorative Objects menu.options=Options menu.options.visual=Toggle Visual Mode (Ctrl-F6) menu.options.hidden=Show hidden Objects (F9) menu.options.comment=Edit Comment (F10) menu.options.constructiondisplay=Show Description menu.options.grid=Show Grid (F12) menu.options.setgrid=Set Grid Width ... menu.options.showcolor=Show Color menu.options.defaultcolor=Default Color menu.options.defaultthickness=Default Thickness menu.options.defaulttype=Default Point Type menu.options.all=All menu.options.setdigits=Set Digits menu.options.shownames=Show Object Names (Ctrl-F6) menu.options.longnames=Long Object Names (Ctrl-F8) menu.options.obtuse=Use Angles larger than 180\u00B0 (Ctrl-F12) menu.options.solid=Do not use Transparency menu.options.showvalues=Show Object Values (Ctrl-F7) menu.options.partial=Partial Circles (Ctrl-F9) menu.options.plines=Partial Lines (Ctrl-F10) menu.options.arrow=Arrows (Ctrl-F11) menu.options.editicons=Edit the Toolbox menu.options.back=Delete last Object (<-) menu.options.undo=Undo Delete (Ctrl-z) menu.zoom=Zoom menu.zoom.in=In (+) menu.zoom.out=Out (-) menu.zoom.left=Left (Cursor-Left) menu.zoom.right=Right (Cursor-Right) menu.zoom.up=Up (Cursor-Up) menu.zoom.down=Down (Cursor-Down) menu.macros=Macros menu.special.definemacro=Define a Macro (Ctrl-F5) menu.special.runmacro=Run a Macro ... (F5) menu.special.savemacros=Save Macros ... menu.special.loadmacros=Load Macros ... menu.special.deletemacros=Delete Macros ... menu.special=Special menu.special.testjob=Test this Assignment (Ctrl-F1) menu.special.jobcomment=Set Assignment Text ... (F8) menu.special.export=Create an HTML File ... (Ctrl-e) menu.special.replay=Replay this Construction menu.help=Help menu.help.about=About this program menu.help.browser=Explore Help and Demos menu.help.text=Simple Help menu.help.configure=Configure the Browser menu.help.help=Help (F1) menu.help.macros=About Macros menu.help.tools=The Tools menu.help.gui=User Interface menu.help.interactive=Descriptive Constructions menu.help.tips=Some Tips menu.settings=Special Settings menu.settings.fullicons=Use two full icon bars menu.settings.utf=Use UTF-8 encoding menu.settings.autohide=Hide second intersection point menu.settings.iconbartop=Iconbar above construction menu.settings.showtips=Show tooltips menu.settings.simplegraphics=Use simpler graphics menu.settings.sure=Confirm before loading and closing menu.settings.pointon=Ask before creating a point on an object menu.settings.intersection=Ask before creating an intersection menu.settings.choice=Show selection dialog for objects menu.settings.movename=Show object values when moving menu.settings.movefixname=Show fixed object values when moving menu.settings.restricted=Toggle school mode menu.colors=Set the Colors colors.default=Use Default Colors colors.color0=Color 1 (Black) colors.color1=Color 2 (Green) colors.color2=Color 3 (Blue) colors.color3=Color 4 (Brown) colors.color4=Color 5 (Cyan) colors.color5=Color 6 (Red) colors.background=Background colors.select=Select colors.target=Target myfiledialog.dir=Directory myfiledialog.file=File myfiledialog.pattern=Extensions filedialog.open=Open filedialog.saveas=Save as ... filedialog.open.action=Open filedialog.saveas.action=Save filedialog.htmlsave=Save HTML filedialog.htmlsave.action=Save pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Save load=Load abort=Abort bound.release=Release Point bound.bind=Bind to Object bound.error=Object not found before intersection! constructiondisplay.edit=Edit Object constructiondisplay.copy=Copy to Clipboard edit.Title=Properties edit.name=Name edit.hidden=Hidden edit.text=Text edit.fixed=Fixed edit.color=Color edit.ok=OK edit.cancel=Cancel edit.showname=Show Name edit.point.title=Edit Point edit.point.type=Type edit.point.x=X edit.point.y=Y edit.point.intersection=Different from edit.point.showvalue=Show Coordinates edit.point.colortype=Thickness edit.point.bound=Bound edit.point.away=Away from edit.point.close=Close to edit.point.free=Free edit.line.title=Edit Line, Ray, Segment edit.line.normal=Normal edit.line.thick=Thick edit.line.thin=Thin edit.line.invisible=Invisible edit.line.type=Type edit.segment.length=Length edit.segment.showvalue=Show Length edit.circle.title=Edit Circle edit.circle.length=Radius edit.circle.partial=Partial Display edit.plumb.restricted=Restricted edit.angle.title=Edit Angle edit.angle.length=Size edit.angle.displaysize=Display Size edit.angle.normal=Normal edit.angle.small=Small edit.angle.large=Large edit.expression.title=Edit Expression edit.expression=Arithmetic Expression edit.expression.prompt=Explanation edit.area.title=Edit Polygon edit.area.back=In Background export.title=HTML Export export.pagetitle=Title of Page export.width=Width export.height=Height export.jar=Jar file export.comment=Save comment export.file=Construction File export.job=Display as Assignment export.color=Color export.backgroundcolor=Use for page background export.appletcolor=Use for applet background export.plain=Plain export.3D=Border export.breaks=Replay with Breakpoints export.icons=Border and Icons export.full=Border, Icons and Status export.nonvisual=Border, Icons and Input Line export.style=Applet Style export.setcolor=Choose Color export.savefirst=File has not been saved! export.soltext=Solution export.stylesheet=CSS Style File export.solution=Solution File export.jumpsol=Jump to Solution export.linksol=Link to Solution export.savesol=Save Solution File export.track=Track Point export.digits=Save Digits export.setsize=Get Size export.signature=Created using C.a.R. export.colors=Save defined Colors export.background=Save defined Background help.title=Help help.error=Could not open the help file! help.file=schoolgeometry.txt coloreditor.title=Edit Color coloreditor.red=Red coloreditor.green=Green coloreditor.blue=Blue coloreditor.color=Your Color comment.title=Construction Comment comment.set=Set comment.cancel=Cancel comment.close=Close iconedit.title=Edit Icon Bar iconedit.twobars=Icon box has two lines jobcomment.title=Assignment select.title=Selection select.ok=OK select.cancel=Cancel select.comment=Show Comment select.all=All message.circle.midpoint=Circle: Midpoint? message.circle.radius=Circle: Point on the circle (shift: fix radius)? message.fixedcircle.midpoint=Circle with fixed size: Midpoint? message.fixedcircle.radius=Circle with fixed size: Radius? message.line.first=Line: First point? message.line.second=Line: Second point? message.ray.first=Ray: Root point? message.ray.second=Ray: Second point? message.move.select=Move: Select an object (shift: more)! message.move.move=Move: Move the point? message.point=Point: Set a point (shift: fix)! message.segment.first=Segment: First point? message.segment.second=Segment: Second point (shift: fixed length)? message.fixedsegment.first=Segment with fixed length: First point? message.fixedsegment.second=Segment with fixed length: Click somewhere! message.intersection.first=Intersection: First object or the intersection? message.intersection.second=Intersection: First object? message.hide=Hide/Show: Select an object! message.tracker.select=Track: Point or line to track (shift: more)? message.tracker.selectpoint=Track: Point to move? message.tracker.move=Track: Move the point! message.objecttracker.select=Autotrack: Point or line to track (shift: more)? message.objecttracker.object=Autotrack: Line or circle, point on object, slider? message.objecttracker.selectpoint=Autotrack: Point to be moved on line or circle? message.objecttracker.selectanypoint=Autotrack: Any other point to move? message.objecttracker.move=Autotrack: Move the point! message.objecttracker.start=Autotrack: Start the Animation! message.parallel.first=Parallel: Line? message.parallel.second=Parallel: Point? message.plumb.first=Perpendicular: Line? message.plumb.second=Perpendicular: Point? message.circle3.first=Circle: First radius point? message.circle3.second=Circle: Second radius point? message.circle3.midpoint=Circle: Midpoint? message.midpoint.first=Midpoint: First point? message.midpoint.second=Midpoint: Second point? message.quadric=Conic Section: Point number message.angle.first=Angle: First angle point? message.angle.root=Angle: Corner point? message.angle.second=Angle: Second angle point (shift: fixed size)? message.fixedangle.first=Angle with fixed size: First angle point? message.fixedangle.root=Angle with fixed size: Base point? message.fixedangle.second=Angle with fixed size: Click somewhere! message.label.select=Move Label: Select a label! message.label.move=Move Label: Move the label! message.boundedpoint=Point on Object: Circle or line object (shift: continuous, ctrl: inside)? message.parameters=Macro Parameters: Parameter objects? message.targets=Macro Targets: Target objects? message.savejob.first=Define Assignment: Last displayed object? message.savejob.second=Define Assignment: Target object (shift: don't check)? message.savejob.third=Define Assignment: Further objects to be displayed? message.runmacro=Macro %: %. % - % message.runmacro.return=(SPACE chooses %) message.runmacro.fixes=(SHIFT fixes selection) message.delete=Delete: Select an object! message.reorder=Reorder: Select an object! message.expression=Arithmetic Expression: Select a place! message.area=Filled polygon: Corner point? message.text=Text: Select a place! message.animator.point=Animation: Point to animate? message.animator.segment=Animation: Circle or a segment? message.animator.running=Animation: Running (click to stop)! message.range.first=Set range: Draw the circle from which point ... message.range.second=Set range: ... to which point? message.setaway.away=Keep the intersection away from which point? message.setaway.close=Keep the intersection close to which point? objectsedit.title=Edit Properties point.type.square=Square point.type.diamond=Diamond point.type.circle=Circle point.type.dot=Dot color.type.normal=Normal color.type.thick=Thick color.type.thin=Thin color.type.invisible=Invisible text.point=Point at %, % text.line=Line through % and % text.segment=Line segment from % to % text.segment.fixed=Line segment from % to % with length % text.ray=Ray from % pointing to % text.intersection=Intersection between % and % text.circle=Circle around % through % text.circle.fixed=Circle around % through % with radius % text.fixedcircle=Circle around % with radius % text.circle3=Circle around % with radius from % to % text.parallel=Parallel line through % to % text.midpoint=Midpoint between % and % text.quadric=Conic section through % text.plumb=Perpendicular line through % to % text.angle=Angle % - % - % text.angle.fixed=Angle % - % - % with size % text.boundedpoint=Point on % text.expression=Expression "%" at %, % text.area=Polygon text.fixedangle=Angle % - % with size % name.Point=Point name.Intersection=Intersection name.OtherIntersection=Intersection name.Circle=Circle name.Circle3=Circle name.Segment=Segment name.Ray=Ray name.Line=Line name.TwoPointLine=Line with two Points name.Parallel=Parallel name.Midpoint=Midpoint name.Quadric=Quadric name.Plumb=Plumb name.Angle=Angle name.PointOn=ObjectPoint name.Expression=Expression name.Polygon=Polygon prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.angle==a(,,) prompt.area=A(,,) prompt.quadric=quadric(,,,,) prompt.function=function(,,,,,) name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=pl name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=p name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=poly name.short.Function=f popup.hidden=Show hidden objects popup.replay=Replay construction popup.empty=--- Macros --- replay.title=Replay reorder.title=Push objects reorder.message=insert after reorder.notfound=Object not found! reorder.warning=Could not do that! setgrid.title=Grid Width setgrid.prompt=Enter new grid width setgrid.set=Set definemacro.title=Define Macro definemacro.name=Name definemacro.comment=Macro Comment definemacro.noparams=Need parameters for the macro! definemacro.nomacro=There is no macro to run! definemacro.targetsonly=Hide construction definemacro.invisible=Hide completely definemacro.promptfor=Prompt for macro.replace.title=Macro Replacement macro.replace=Replace Macro: macro.replace.all=All macro.usage=Wrong use of macro (see tips)! macro.prompt.title=Parameter Prompt macro.prompt.prompt=Enter a value for the parameter macro.prompt.illegal=Illegal value! digits.title=Set Digits digits.edit=Edit digits.lengths=Display digits.angles=Angles editrun.title=Edit Descriptive Construction editrun.run=Save and Run editrun.load=Other Description sure.title=Are you sure? sure.macros=Delete all user macros? sure.delete=Forget current changes? close.title=End close.prompt=Really close this program? file.exists.title=File Exists file.exists.overwrite=File exists! Overwrite? exception.nparams=Illegal number of Parameters! exception.notfound=Object not found, or defined after expression! exception.type=Illegal Object Type! exception.expression=Invalid Expression! exception.canfix=Object cannot be fixed! exception.fix=Value invalid! exception.novalue=Value invalid! exception.elementary=Invalid element in expression! exception.bracket=Closing brackets missing! exception.quotes=Closing quotes missing! exception.dot=Two dots in number! exception.nodigit=No digit found in number! exception.function=Unknown function! exception.parameter=Illegal function parameter! exception.macro=Illegal macro parameter! exception.name=Need a Name! exception.job=Illegal Job Paramters! exception.track=Illegal Track Parameters! exception.animate=Illegal Animation Parameters! exception.boolean=Boolean Value must be true of false! exception.value=Illegal Value! exception.color=Illegal Color! exception.colortype=Illegal Thickness! exception.type=Illegal Point Type! exception.macroparameter=Illegal Macro Parameter! exception.macrotarget=Illegal Macro Target! exception.prompt=Illegal prompt oject! exception.prompt.parameter=Prompt object may not be a parameter! exception.parameters=Illegal Parameter! exception.brackets=Illegal Brackets! exception.double=Name is not unique! error.setaway=This point is not defined before the intersection! error.objecttracker.depends=The point is bound to another object! constructiondisplay.title=Construction function.hide=Hide function.hide.short=hide function.rename=Name function.rename.short=name function.value=Value function.value.short=value function.window=Window function.window.short=W function.color=Color function.color.short=col function.thickness=Thickness function.thickness.short=th function.type=Type function.type.short=type function.partial=Partial function.partial.short=part function.fill=Fill function.fill.short=fill function.back=Background function.back.short=back function.acute=Acute function.acute.short=acute function.obtuse=Obtuse function.obtuse.short=obtuse function.solid=Solid function.solid.short=solid function restrict=Restrict function restrict.short=restrict expression.value=Value configure.title=Set Browser configure.prompt=Enter Browser Command # New Resources: background.error=Could not load the Image (GIF or JPG!). menu.background=Background menu.background.grab=Current as Background menu.background.clear=Clear Background menu.background.load=Load Background Picture ... menu.background.usesize=Resize to Picture menu.background.tile=Tile Background menu.background.center=Center Background iconhelp.grab=Set or Clear Background filedialog.backgroundload=Load Background filedialog.backgroundload.action=Load # New Resources in Version 2.14 menu.file.compress=Compress always menu.file.savesvg=Save graphics (as SVG) ... # Version 2.15 loading=Loading, please wait! # Version 2.18 and 2.19 menu.settings.font.default=Default font menu.settings.font.bold=Bold font menu.settings.font.large=Large font menu.file.saveeps=Save graphics (as EPS) ... menu.fonts=Font # Version 2.20 bmpscaler.title=Scale Bitmap bmpscaler.width=Width bmpscaler.height=Height bmpscaler.scale=Factor (press Return) bmpscaler.illegal=Illegal Value # Version 2.21 renamemacro.title=Rename Macro renamemacro.name=New macro name menu.special.renamemacro=Rename Macro ... # Version 2.23 savequestion.title=Save Construction savequestion.qsave=Save Changes? # Version 2.25 exception.printsize=Page too small for this construction! iconhelp.nohelp=No help available iconhelp.type?=Point type iconhelp.thickness?=Thickness iconhelp.color?=Color iconhelp.filled=Filled object iconhelp.isback=Draws in background iconhelp.inverse=Reflected angle iconhelp.angle?=Size # Version 2.28 message.objecttracker.stop=Autotrack: Click to stop (shift left/right for speed)! # Version 2.31 menu.settings.indicate=Preview generated objects menu.options.other=Settings menu.help.welcome=News on current version iconhelp.twolines=Icons in two lines iconhelp.qintersection=Ask for intersections iconhelp.qchoice=Show dialog for object selection iconhelp.qpointon=Ask to create point on object iconhelp.noindicate=Do not indicate objects under mouse # Version 2.33 menu.file.new=New Construction (Ctrl-n) # Version 2.34 edit.text.title=Text Settings edit.text.settings=Further Settings menu.settings.filedialog=Replace system file dialog # Version 2.35 menu.settings.bitmapbackground=Use Background Color in Bitmaps # Version 2.36 menu.file.savegraphics=Save Graphics as ... bmpscaler.title=Scale Graphics # Version 2.37 menu.file.savepdf=Save Graphics (as PDF) iconhelp.chord=Show as segment # Version 2.39 message.setfixedangle.first=Set fixed angle: First point? message.setfixedangle.second=Set fixed angle: Base point? message.setfixedangle.third=Set fixed angle: Third point? edit.fixedangle.set=Set Size ... message.setfixedcircle.first=Set fixed circle: First point? message.setfixedcircle.second=Set fixed circle: Second point? edit.fixedcircle.set=Set Size ... # Version 2.41 name.short.Track=Tr text.track=Track of % when % moves on % trackquestion.keep=Keep Track in Construction? trackquestion.title=Keep Track menu.options.track=Keep Track (Shift-Enter) iconhelp.indicate=Preview of construction results iconhelp.nohelp=No help available! # Version 2.42 objects.draw=Paint with Mouse menu.options.cleardraw=Clear Painting (Esc) iconhelp.draw=Paint with Mouse message.draw=Paint with Mouse (ESC to clear) shortcuts.draw=; # Version 2.43 message.rename=Rename A,B,C,...: Select objects! iconhelp.rename=Rename A,B,C,... objects.rename=Rename A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Don't show angle ray # Version 2.45 menu.settings.smartboard=Smartboard Mode shortcuts.zoom=% objects.zoom=Zoom with Mouse message.zoom=Drag center, or zoom in and out # Version 2.46 menu.special.restricticons=Restricted Icon Set # Version 2.47 menu.settings.indicate.simple=Indicate Points only menu.settings.beginner=Beginner Mode question.again=Always ask this question. # Version 2.49 definemacro.parameters=Parameter Prompt(s) ("=name" fixes) # Version 2.53 menu.actions.angles=Angles menu.actions.circles=Circles menu.actions.lines=Lines menu.actions.points=Points # Version 3.00 info.title=Context Help info.related=Related Topics info.notfound=Topic not found! info.noresults=String not found! info.searchresults=- Search results - info.select=- Select - info.search=Search info.back=Back info.start=Start iconhelp.info=Context help menu.help.info=Context help myfiledialog.homedir=CaR Files myfiledialog.windowshome=My Documents myfiledialog.mkdir=Make Directory myfiledialog.back=Back menu.file.alwaysclearmacros=Clear Macros before Loading about.language=Language bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Backups # Version 3.02 menu.options.hideduplicates=Hide Duplicates # Version 3.03 menu.options.function=Create a function or curve text.function=Function ( % , % ) function.varmin=From function.varmax=To function.dvar=Step function.var=Variable function.y=Expression for Y iconhelp.function=Create a Function+(Ctrl: Create a user defined function) menu.options.editlast=Edit last Object iconhelp.control.edit=Edit last Object iconhelp.control.hide=Hide Duplicates edit.function.title=Function or Curve iconhelp.control.runmacro=Run last macro again # Version 3.05 point.type.cross=Cross point.type.dcross=Diagonal Cross shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Unit menu.special.break=Breakpoints menu.bp.setbreak=Set Breakpoint menu.bp.clearbreak=Clear Breakpoint menu.bp.sethidingbreak=Set Hiding Breakpoint menu.bp.animatebreak=Animate Breakpoints iconhelp.animatebreak=Animate breakpoints message.animatebreak=Animate breakpoints: click to stop (shift left/right for speed)! menu.special.exporttemplate=HTML Export with Templates templateload.open=Load Template templateload.open.action=Open menu.settings.doubleclick=Double click for macros export.codebase=Codebase # Version 3.12 edit.equation=Equation # Version 3.23 menu.settings.squarepoints=Draw points always as squares # Version 3.37 menu.options.export=Graphic Export Settings menu.settings.minwidth=Minimal line width is 1 menu.settings.minpointsize=Respect minimal point size menu.settings.minfontsize=Respect minimal font size menu.options.minpointsize=Minimal Point Size menu.options.minfontsize=Minimal Font Size # Version 3.38 menu.settings.scalepdf=Scale PDF and EPS output 1:1 # Version 3.41 menu.file.clip=Clip for Graphics Output ... clip.title=Set Clipping clip.width=Width clip.height=Height clip.screen=No Clipping # Version 3.44 iconhelp.large=Use large font size iconhelp.bold=Use bold font menu.options.largefont=Large Font Size menu.options.boldfont=Bold Font warning.previewframe=Frame larger than window! message.move.select=Move: Select a point (shift: more points, ctrl: show old state)! # Version 3.46 iconbar.showseparators=Show Separators # Version 3.48 menu.options.printscaler=Set Export Size ... menu.options.exportsettings=Special Export Settings ... printscaler.title=Set Export Size printscaler.width=Width (in cm) printscaler.height=Height (in cm) printscaler.dpi=Resolution (in dpi, default 300) printscaler.linewidth=Line Width (in cm, default 0.02) printscaler.pointsize=Point Size (in cm, default 0.07) printscaler.textsize=Text Size (in cm, default 0.3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=Width (in pixel) printscaler.h=Height (in pixel) printscaler.scale=Scale (relativ to screen) printscaler.middle=Cut out from screen printscaler.sizes=Use Values menu.file.savepng=Save Graphics as PNG warning.preview=Preview will not work completely with Java 1.1 iconedit.showseparators=Show Separators printscaler.aspect=Keep Aspect Ratio printscaler.presets=Presets printscaler.preset=Make a Choice printscaler.preset.300dpi=Exactly scaled with 300 DPI printscaler.preset.300dpi6=6 cm Width with 300 DPI printscaler.preset.300dpi16=16 cm Width with 300 DPI printscaler.preset.window=Window Size printscaler.preset.clip50=Window Size Clipped 50% message.saving=Please wait! menu.options.printscalepreview=Export Preview (Ctrl-F3) date=Build # Version 3.51 help=Help # Version 3.61 editconditionals.title=Edit Conditionals editconditionals.hidden=Hidden editconditionals.superhidden=Completely Hidden editconditionals.visible=Normal editconditionals.showname=Show Name editconditionals.showvalue=Show Value editconditionals.background=Background editconditionals.solid=Not Transparent exception.superfluous=Superfluous Text in Expression # Version 3.63 select.comment.title=Macro Comment # Version 3.68 edit.area.area=Area # Version 3.73 myfiledialog.oldfiles=Old Files # Version 3.74 iconhelp.load=Load Construction (Ctrl-o) iconhelp.save=Save Construction (Ctrl-s) iconhelp.new=New Construction (Ctrl-n)+Ctrl: Load defaults # Version 3.81 warning.loadbackground=Error loading background # Version 3.9 function.x=Expression for X (empty for functions) # Version 3.91 constructiondisplay.select=Select constructiondisplay.all=All Objects constructiondisplay.visible=Visible Objects (Alt-Ctrl-9) constructiondisplay.points=Points constructiondisplay.lines=Lines constructiondisplay.circles=Circles constructiondisplay.angles=Angles constructiondisplay.other=Other Objects menu.file.copypng=Copy to Clipboard exception.clipboardcopy=Copy failed! menu.options.finegrid=Axis only # Vesion 3.93 edit.function.center=Set Center edit.function.free=Release Center message.setcenter=Select the center point! # Vesion 3.94 message.edit=Edit: Objekt (shift: more objects, ctrl: conditionals)? # Version 3.97 error.image=Image not in same folder as construction? filedialog.imageload=Load Image filedialog.imageload.action=Load prompt.image=image(,,,) objects.image=Image shortcuts.image=_ # Version 3.98 exception.depends=Object % depends on current object. error.depends=Object % depends on current object. constructiondisplay.sorted=Sorted by Order of Construction (Alt-Ctrl-0) # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Expressions # Version 4.00 iconhelp.image=Load Image (_) message.image=Image anchor point % message.image.last=Last image anchor point (or choose selected point) editconditionals.z=Z-Buffer Value # Version 4.01 name.FixedAngle=Fixed Angle # Version 4.04 menu.moresettings=Settings menu.settings.language=Set Language language.title=Set Language language.prompt=Language for next program start # Version 4.05 constructiondisplay.invalid=Invalid Objects # Version 4.08 menu.settings.constructiondisplay=Permanent Construction Display (F11) # Version 4.09 constructiondisplay.editconditions=Edit Conditions constructiondisplay.delete=Delete selected Objects constructiondisplay.hide=Hide or Show (Alt-Ctrl-4) constructiondisplay.superhide=Super Hide (Alt-Ctrl-5) # Version 4.2 edit.expression.slider=Show as Slider menu.grid.options=Grid Options menu.options.leftsnap=Snap with Left Button Drag menu.settings.boundingbox=Create Bounding Box (bb) file # Version 4.3 latexsettings.title=Setup LaTeX export latexsettings.boundingbox=Create Bounding box bb-file latexsettings.latexinput=Create LaTeX idx-file latexsettings.doubledollar=LaTeX does $$...$$ latexsettings.dollar=LaTeX does $...$ latexsettings.nodollar=LaTeX does all other strings latexsettings.fullpath=Use file path printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=12 cm width with 300 DPI printscaler.latex=Save for LaTeX menu.background.usewidth=Adjust height only # Version 4.4 menu.options.restricted=Restrict Intersections menu.options.sizes=Set Sizes ... sizesdialog.title=Sizes minlinesize.prompt=Minimal line width (default: 1) minpointsize.prompt=Minimal point size (default: 3) minfontsize.prompt=Minimal font size (default: 12) arrowsize.prompt=Arrow size (default: 10) selectionsize.prompt=Selection size (default: 1.5) warning.loadmacros=Error while loading a macro! warning.macrodefinition=% is used, but is not in macro! edit.circle.bounds=Show as Arc edit.circle.range=Set Arc ... # Version 4.5 edit.track.dmin=Minimal step (default 0.001) # Version 4.6 menu.settings.smallicons=Use small icons menu.settings.oldicons=Use old icons # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof=Track of % when % changes # Version 5 # Fix error.image edit.discrete=Discrete error.fixedsegment=Cannot fix this segment! export.zoom=Zoom with mouse export.popup=Popup menu # Version 5.1 edit.intersection.alternate=Can alternate export.restrictedmove=Restrict Movements # Version 6.0 # Fix message.boundedpoint # Fix iconhelp.new message.bindpoint=Bind point to object (Shift: continuous, Ctrl: inside object) edit.point.inside=Inside object edit.point.increment=Grid increment (0=free) edit.more=More ... menu.settings.more=Show button for conditional formats menu.file.loadexamples=Load Example ... menu.options.editgrid=Edit coordinate grid ... # Version 6.1 constructiondisplay.description=Show Description (Alt-Ctrl-1) constructiondisplay.size=Show Size or Coordinates (Alt-Ctrl-2) constructiondisplay.formula=Show Formula (Alt-Ctrl-3) menu.settings.germanpoints=Use | in coordinates # Version 6.2 # fix iconhelp.function menu.options.userfunction=User defined Function function.vars=Variables function.f=Function expression # Version 6.4 menu.special.macrobar=Macro bar menu.special.defaultmacrosinbar=Show default macros help.related=Related topics help.nexttopic=Next topic ./src/rene/zirkel/docs/CVS/Root0000644000175000017500000000007411132354034015217 0ustar yvesyves:ext:erichake@carmetal.cvs.sourceforge.net:/cvsroot/carmetal./src/rene/zirkel/docs/ZirkelProperties_de.properties0000770000175000017500000012157410655647770022057 0ustar yvesyveslanguage=de_ homefile=index.html codepage.help=CP1252 about.title=ber dieses Programm about.name=Zirkel about.programmed=Programmiert von title=Zirkel close=Schlieen ok=OK cancel=Abbruch abort=Abbruch done=Aufgabe erledigt, sehr schn! message=Nachricht warning=Warnung yes=Ja no=Nein true=wahr false=falsch warning.nojob=Dies ist keine Aufgabe! warning.print=Druck ist gescheitert! warning.reset=Option wirkt erst beim nchsten Programmstart! question.title=Frage question.intersection=Soll der Schnitt erzeugt werden? question.pointon=Punkt auf Objekt erzeugen? colors.black=Schwarz colors.blue=Blau colors.green=Grn colors.brown=Braun colors.cyan=Trkis colors.red=Rot objects.point=Punkt objects.segment=Strecke objects.line=Gerade objects.ray=Strahl objects.circle=Kreis objects.intersection=Schnitt objects.move=Punkt bewegen objects.hide=Objekt verstecken objects.edit=Eigenschaften objects.tracker=Ortslinie oder Hllkurve objects.objecttracker=Automatische Ortslinie objects.parallel=Parallele objects.plumb=Lot objects.circle3=Kreis aus r und M objects.midpoint=Mitte objects.quadric=Kegelschnitt objects.angle=Winkel objects.boundedpoint=Punkt auf Objekt objects.parameter=Definiere Makro-Parameter objects.targets=Definiere Makro-Ziele objects.definejob=Aufgabe definieren objects.runmacro=Makro starten objects.delete=Objekte und deren Kinder lschen objects.reorder=Reihenfolge ndern objects.animate=Animation objects.expression=Arithmetischer Ausdruck objects.area=Vieleck objects.text=Text objects.fixedcircle=Kreis mit festem Radius objects.fixedangle=Fester Winkel objects.fixedsegment=Strecke mit fester Lnge shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.circle=k shortcuts.ray=l shortcuts.intersection=i shortcuts.move=b shortcuts.hide=v shortcuts.edit=e shortcuts.tracker=o shortcuts.objecttracker=r shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.angle=w shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Entf shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=t shortcuts.color.0=(Strg-1) shortcuts.color.1=(Strg-2) shortcuts.color.2=(Strg-3) shortcuts.color.3=(Strg-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.pointtype.0=(Strg-5) shortcuts.pointtype.1=(Strg-6) shortcuts.pointtype.2=(Strg-7) shortcuts.pointtype.3=(Strg-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) iconhelp.point=Punkt (p)+Freier Punkt, Punkt auf Objekt oder Schnittpunkt iconhelp.segment=Strecke (s)+Strecke mit zwei Endpunkten iconhelp.line=Gerade (g)+Gerade durch zwei Punkte iconhelp.ray=Strahl, Halbgerade (l)+Strahl von einem Punkt aus durch einen anderen iconhelp.circle=Kreis (k)+Kreis mit Mittelpunkt und Punkt auf Kreislinie iconhelp.intersection=Schnitt (i)+Schnitt von Kreisen und Geraden iconhelp.move=Bewege Objekte (b)+Bewege Punkte, feste Kreise und Winkel, Label+Strg-Taste (Punkte): Zeige alte Konstruktion+Strg-Taste (feste Objekte): Bewege feste Objekte+Shift: Mehr als ein Objekt bewegen iconhelp.hide=Objekte verstecken oder anzeigen (v)+Umschalttaste: Total verstecken iconhelp.edit=Objekteigenschaften einstellen (e)+Umschalttaste: Mehrere Objekte einstellen+Strg: Letztes Objekt einstellen iconhelp.tracker=Ortslinie oder Hllkurve (o)+1. Punkte oder Geraden, deren Ortslinie gezeichnet wird+2. Punkt bewegen iconhelp.objecttracker=Automatische Ortslinie oder Hllkurve (r)+1. Punkte oder Geraden, deren Ortslinie gezeichnet wird+2. Kreis oder Gerade, Punkt auf Objekt, Schieber+3. Evtl. Punkt der darauf luft+Strg: bernimm Ortslinie (Umschalt-Eingabe) iconhelp.parallel=Parallele (1)+Parallele zu einer Geraden durch einen Punkt iconhelp.plumb=Lot (2)+Lot auf eine Gerade durch einen Punkt iconhelp.circle3=Kreis aus Radius und Mittelpunkt (3)+1. Endpunkte der Strecke, deren Lnge der Radius ist+2. Mittelpunkt des Kreises iconhelp.midpoint=Mitte zwischen zwei Punkten (4) iconhelp.quadric=Kegelschnitt durch 5 Punkte ($)+Ellipsen oder Hyperbeln iconhelp.angle=Winkel (w)+Winkel mit zwei Schenkelpunkten und Scheitelpunkt+Nur zur Dekoration iconhelp.boundedpoint=Punkt auf Objekt (5)+Umschalttaste: Nicht relativ zum Objekt fixieren iconhelp.hidden=Zeige versteckte Objekte (F9) iconhelp.color=Farbe fr nchstes Objekt (Strg-1,2,3,4)+Defaulteinstellung iconhelp.type=Typ des nchsten Punktes (Strg-5,6,7,8,9,0)+Defaulteinstellung iconhelp.thickness=Dicke des nchsten Objektes (Alt-5,6,7)+Defaulteinstellung iconhelp.back=Letztes sichtbares Objekt lschen (<-)+Entfernt auch alle versteckten Objekte dahinter! iconhelp.type0=Typ des nchsten Punktes+Defaulteinstellung iconhelp.thickness0=Strke des nchsten Objektes+Defaulteinstellung iconhelp.partial=Partiell sichtbare Kreise (Strg-F9)+Defaulteinstellung iconhelp.plines=Partiell sichtbare Geraden (Strg-F10)+Defaulteinstellung iconhelp.arrow=Strecken als Vektoren (Strg-F11)+Defaulteinstellung iconhelp.showcolor=Ausgewhlte Farben zeigen (Alt-1,2,3,4)+Schwarz wird immer angezeigt! iconhelp.runmacro=Makro starten (9)+Start nach Eingabe aller Parameter+Umschalttaste: Fixiere Parameter+Leertaste: Whle denselben Parameter wie beim letzten Mal+Strg: Letztes Makro erneut aufrufen iconhelp.macro=Makro Parameter/Ziele/Definition (7,8,Strg-F5)+Werkzeug mehrmals anwhlen:+1. Parameter der Musterkonstruktion+2. Ziele der Musterkonstruktion+3. Makrodialog iconhelp.expression=Arithmetischer Ausdruck (x)+Berechneter Ausdruck in Konstruktion iconhelp.showvalue=Objektwerte zeigen (Strg-F7)+Defaulteinstellung iconhelp.showname=Objektnamen zeigen (Strg-F6)+Defaulteinstellung iconhelp.longnames=Lange Objektnamen verwenden (Strg-F8)+Defaulteinstellung iconhelp.obtuse=Winkel grer 180 verwenden (Strg-F12)+Defaulteinstellung iconhelp.solid=Keine Transparenz verwenden+Defaulteinstellung iconhelp.grid=Zeige Gitter (F12) iconhelp.comment=Kommentar (F10)+Kommentar der Konstruktion iconhelp.macro0=Makrodefinition iconhelp.visual=Zwischen visueller und beschreibender Konstruktion umschalten iconhelp.replay=Konstruktion schrittweise durchgehen iconhelp.oneforward=Vor iconhelp.fastforward=Schnell vor iconhelp.allforward=Zum Ende iconhelp.oneback=Zurck iconhelp.fastback=Schnell zurck iconhelp.allback=Zum Anfang iconhelp.close=Schlieen iconhelp.area=Geflltes Vieleck (0)+Eckpunkte, Ende mit Doppelklick iconhelp.text=Mehrzeiliger Text (t) iconhelp.fixedcircle=Kreis mit festem Radius (,)+Mittelpunkt und Punkt auf der Kreislinie iconhelp.fixedangle=Winkel mit fester Gre (.)+Schenkelpunkt, Scheitelpunkt und Punkt auf zweitem Schenkel iconhelp.fixedsegment=Strecke mit fester Lnge (#)+Erster und zweiter Endpunkt iconhelp.animate=Animation eines Punktes (")+1. Animierter Punkt+2. Strecken oder Kreise, Ende mit Doppelklick iconhelp.delete=Objekt und davon abhngige Objekte lschen (Entf) iconhelp.undo=Vorherige Lschaktion rckgngig machen (Strg-z) iconhelp.nextbreak=Zum nchsten Haltepunkt Springen iconhelp.setbreak=Haltepunkt Setzen und Entfernen+Umschalttaste: Versteckender Haltepunkt iconhelp.zoom=Mit der Maus zoomen und verschieben (%)+In der Mitte verschieben, auen zoomen menu.file=Datei menu.file.clearmacros=Alle Benutzermakros lschen menu.file.load=Konstruktion laden ... (Strg-o) menu.file.loadjob=Aufgabe laden ... (Strg-j) menu.file.savejob=Aufgabe speichern als ... (Strg-k) menu.file.save=Konstruktion speichern (Strg-s) menu.file.saveas=Speichern als ... (Strg-a) menu.file.includemacros=Mit Makros speichern menu.file.delete=Objekte lschen (Entf) menu.file.exit=Programm beenden (Alt-F4) menu.file.print=Drucken ... menu.file.print.isoscale=Druck 1:1 skalieren menu.file.savebmp=Als Bild (BMP) speichern ... menu.file.savefig=Als Bild (FIG) speichern ... menu.file.loadrun=Beschreibende Konstruktion laden ... (Strg-r) menu.file.editrun=Beschreibende Konstruktion bearbeiten ... (Strg-x) menu.actions=Bearbeiten menu.actions.elementary=Elementare Werkzeuge menu.actions.complex=Komplexere Werkzeuge menu.actions.fixed=Fixierte Objekte menu.actions.move=Werkzeuge zum Bewegen menu.actions.decorative=Dekorative Objekte menu.options=Optionen menu.options.visual=Visueller Modus menu.options.hidden=Versteckte Objekte anzeigen (F9) menu.options.comment=Kommentar bearbeiten ... (F10) menu.options.constructiondisplay=Konstruktionsbeschreibung menu.options.grid=Gitter anzeigen (F12) menu.options.setgrid=Gitterweite einstellen ... menu.options.shownames=Objektnamen anzeigen (Strg-F6) menu.options.longnames=Lange Objektnamen verwenden (Strg-F8) menu.options.obtuse=Winkel grer 180 verwenden (Strg-F12) menu.options.solid=Keine Transparenz menu.options.showvalues=Objektwerte zeigen (Strg-F7) menu.options.partial=Partiell sichtbare Kreise (Strg-F9) menu.options.plines=Partiell sichtbare Geraden (Strg-F10) menu.options.arrow=Strecken als Vektoren (Strg-F11) menu.options.showcolor=Sichtbare Farben menu.options.defaultcolor=Farbe menu.options.defaultthickness=Strke menu.options.defaulttype=Stil fr Punkte menu.options.editicons=Werkzeugleiste einrichten ... menu.options.all=Alle menu.options.setdigits=Nachkommastellen ... menu.options.back=Letzes Objekt lschen (<--) menu.options.undo=Lschen rckgngig machen (Strg-z) menu.zoom=Bildausschnitt menu.zoom.in=Vergrern (+) menu.zoom.out=Verkleinern (-) menu.zoom.left=Nach links (Pfeiltaste-Links) menu.zoom.right=Nach rechts (Pfeiltaste-Rechts) menu.zoom.up=Nach oben (Pfeiltaste-Auf) menu.zoom.down=Nach unten (Pfeiltaste-Ab) menu.macros=Makros menu.special.definemacro=Makro definieren (Strg-F5) menu.special.runmacro=Makroaufruf ... (F5) menu.special.savemacros=Makros speichern ... menu.special.loadmacros=Makros laden ... menu.special.deletemacros=Makros lschen ... menu.special=Spezielles menu.special.testjob=Aufgabe testen (Strg-F1) menu.special.jobcomment=Aufgabenstellung ... (F8) menu.special.export=HTML Export ... (Strg-e) menu.special.replay=Konstruktion wiedergeben menu.help=Hilfe menu.help.about=ber dieses Programm menu.help.help=Hilfe (F1) menu.help.browser=Hilfe und Demos menu.help.configure=Browser Konfigurieren menu.help.text=Texthilfe menu.help.macros=Makros menu.help.tools=Konstruktionswerkzeuge menu.help.gui=Benutzeroberflche menu.help.interactive=Beschreibende Konstruktionen menu.help.tips=Einige Tips menu.settings=Spezielle Einstellungen menu.settings.fullicons=Zwei volle Werkzeugleisten menu.settings.utf=Benutze UTF8-Kodierung menu.settings.autohide=Zweiten Schnittpunkt verstecken menu.settings.iconbartop=Werkzeugleiste oben menu.settings.showtips=Werkzeugtips anzeigen menu.settings.simplegraphics=Immer nur einfache Grafik menu.settings.sure=Vor dem Lschen nachfragen menu.settings.pointon=Fr Punkt auf Objekt nachfragen menu.settings.intersection=Fr Schnitt nachfragen menu.settings.choice=Auswahldialog fr Objekte anzeigen menu.settings.movename=Objektdaten beim Bewegen anzeigen menu.settings.movefixname=Fixierte Objektdaten beim Bewegen anzeigen menu.settings.restricted=Schulmodus menu.colors=Farben setzen colors.default=Normale Farben colors.color0=Farbe 1 (Schwarz) colors.color1=Farbe 2 (Grn) colors.color2=Farbe 3 (Blau) colors.color3=Farbe 4 (Braun) colors.color4=Farbe 5 (Trkis) colors.color5=Farbe 6 (Rot) colors.background=Hintergrund colors.select=Auswahl colors.target=Ziel save=Speichern load=Laden bound.release=Von Objekt Lsen ... bound.bind=An Objekt binden ... bound.error=Objekt nicht vor Schnitt gefunden! edit.Title=Eigenschaften edit.name=Name edit.text=Beschreibung edit.hidden=Versteckt edit.fixed=Fixiert edit.color=Farbe edit.ok=OK edit.cancel=Abbruch edit.showname=Zeige Namen edit.point.title=Punkt edit.point.x=X edit.point.y=Y edit.point.type=Typ edit.point.showvalue=Zeige Koordinaten edit.point.intersection=Verschieden von edit.point.bound=Auf Objekt edit.point.away=Weg von edit.point.close=Hin zu edit.point.free=Frei edit.line.title=Gerade, Strahl, Strecke edit.line.normal=Normal edit.line.thick=Dick edit.line.thin=Dnn edit.line.invisible=Unsichtbar edit.line.type=Typ edit.circle.title=Kreis edit.circle.length=Radius edit.circle.partial=Nur partiell sichtbar edit.point.colortype=Strke edit.segment.length=Lnge edit.segment.showvalue=Zeige Lnge edit.plumb.restricted=Eingeschrnkt edit.angle.title=Winkel edit.angle.length=Gre edit.angle.displaysize=Darstellung edit.angle.normal=Normal edit.angle.small=Klein edit.angle.large=Gro edit.expression.title=Ausdruck edit.expression=Arithmetischer Ausdruck edit.expression.prompt=Beschreibung edit.text.title=Text edit.area.title=Vieleck edit.area.back=Im Hintergrund export.title=HTML Export export.pagetitle=Seitentitel export.width=Breite export.height=Hhe export.jar=Zirkel-Archiv export.comment=Kommentar anzeigen export.file=Konstruktionsdatei export.job=Aufgabe export.color=Farbe export.backgroundcolor=Fr Hintergrund export.appletcolor=Fr Applet export.plain=Eingebettet export.3D=Rand export.breaks=Wiedergabe mit Haltepunkten export.icons=Rand und Icons export.full=Rand, Icons und Status export.nonvisual=Rand, Icons und Eingabezeile export.style=Applet-Stil export.setcolor=Farbe whlen export.savefirst=Die Konstruktion muss erst gespeichert werden! export.soltext=Lsung export.stylesheet=CSS Stil-Datei export.solution=Lsungsdatei export.jumpsol=Springe zur Lsung export.linksol=Link zur Lsung export.savesol=Lsungsdatei speichern export.track=Ortslinie von Punkt oder Gerade export.digits=Nachkommastellen speichern export.setsize=Gre Einsetzen export.signature=Erzeugt mit Z.u.L. export.colors=Konstruktionsfarben speichern export.background=Konstruktionshintergrund speichern help.title=Hilfe help.error=Konnte die Hilfedatei nicht finden! help.file=zirkel.txt coloreditor.title=Farbe Bearbeiten coloreditor.red=Rot coloreditor.green=Grn coloreditor.blue=Blau coloreditor.color=Ihre Farbe constructiondisplay.edit=Objekteigenschaften constructiondisplay.copy=Auf Zwischenablage comment.title=Kommentar comment.set=Setzen comment.cancel=Abbruch iconedit.title=Werkzeugleiste Einrichten iconedit.twobars=Zweizeilige Werkzeugleiste reorder.title=Objekte nach hinten legen reorder.message=einfgen nach reorder.notfound=Objekt wurde nicht gefunden! reorder.warning=Die Operation kann nicht ausgefhrt werden! select.title=Objektauswahl select.ok=OK select.cancel=Abbruch select.comment=Zeige Kommentar select.all=Alle message.point=Neuer Punkt, Schnittpunkt oder Punkt auf Objekt. (Shift: fixiert) message.intersection.first=Schnitt zwischen Kreisen und Geraden. message.intersection.second=Zweites Schnittobjekt? message.circle.midpoint=Kreismittelpunkt? message.circle.radius=Punkt auf Kreis? message.fixedcircle.midpoint=Mittelpunkt eines Kreises mit festem Radius? message.fixedcircle.radius=Punkt auf dem Umfang des festen Kreises? message.line.first=Erster Punkt der Geraden? message.line.second=Zweiter Punkt der Geraden? message.move.move=Punkte oder andere Objekte bewegen. message.segment.first=Erster Endpunkt der Strecke? message.segment.second=Zweiter Endpunkt der Strecke? (Shift: feste Lnge) message.fixedsegment.first=Erster Endpunkt der festen Strecke? message.fixedsegment.second=Zweiter Endpunkt der festen Strecke? message.ray.first=Anfangspunkt des Strahls? message.ray.second=Punkt auf dem Strahl? message.hide=Verstecken/Anzeigen von Objekten? message.tracker.select=Punkt fr Ortslinie, oder Gerade fr Hllkurve? (Shift: mehr) message.tracker.selectpoint=Punkt, der bewegt wird? message.tracker.move=Bewegen Sie den Punkt! message.objecttracker.select=Punkt fr Ortslinie, oder Gerade fr Hllkurve? (Shift: mehr) message.objecttracker.object=Gerade oder Kreis, wo der Punkt wandern soll, Punkt auf Objekt, Schieber? message.objecttracker.selectpoint=Punkt, der wandern soll? message.objecttracker.selectanypoint=Bewegen Sie den Punkt selbst! message.objecttracker.move=Bewegen Sie den Punkt! message.objecttracker.start=Animation mit Klick starten! message.objecttracker.stop=Animation mit Klick anhalten! (Shift links/rechts: Geschw.) message.parallel.first=Gerade, zu der Parallele erzeugt werden soll? message.parallel.second=Punkt auf der Parallelen? message.plumb.first=Gerade, zu der das Lot erzeugt werden soll? message.plumb.second=Punkt auf dem Lot? message.circle3.first=Erster Punkt der Strecke, die den Radius ergibt? message.circle3.second=Zweiter Punkt der Strecke, die den Radius ergibt? message.circle3.midpoint=Mittelpunkt des Kreises? message.midpoint.first=Erster Punkt der Strecke, die halbiert werden soll? message.midpoint.second=Zweiter Punkt der Strecke, die halbiert werden soll? message.quadric=Kegelschnitt aus 5 Punkten, Punkt Nummer message.angle.first=Punkt auf dem ersten Schenkel des Winkels? message.angle.root=Scheitelpunkt des Winkels? message.angle.second=Punkt auf dem zweiten Schenkel des Winkels? (Shift: Feste Gre) message.fixedangle.first=Punkt auf dem ersten Schenkel des festen Winkels? message.fixedangle.root=Scheitelpunkt des festen Winkels? message.fixedangle.second=Punkt auf dem zweiten Schenkel des festen Winkels? message.label.select=Text verschieben. message.label.move=Verschieben Sie den Text! message.boundedpoint=Punkt auf Gerade oder Kreis erzeugen (Shift: stetig, Strg: innerhalb)? message.parameters=Parameter der Musterkonstruktion fr das Makro? message.targets=Ziele der Musterkonstruktion fr das Makro? message.savejob.first=Letztes anzuzeigende Objekt fr die Aufgabe? message.savejob.second=Zielobjekte der Aufgabe? (Shift: Nicht berprfen!) message.savejob.third=Weitere anzuzeigende Objekte? message.runmacro=Parameter fr Makro %: %. % - % message.runmacro.return=(Leertaste whlt %) message.runmacro.fixes=(Shift: Fixiert Parameter) message.delete=Lsche ein Objekt und alle abhngigen Objekte. message.reorder=Lege ein Objekt in der Reihenfolge nach vorne. message.expression=Berechneten Ausdruck in der Konstruktion anzeigen. message.area=Punkte fr das geflltes Vieleck? (Doppelklick: Letzter Punkt) message.text=Mehrzeiligen Text in der Konstruktion anzeigen. message.animator.point=Punkt, der animiert werden soll? message.animator.segment=Strecken oder Kreise, auf denen der Punkt luft? (Doppelklick: Ende) message.animator.running=Animation mit Klick anhalten! (Shift: Umkehren) message.range.first=Beginne Kreissegment am Punkt ... message.range.second=Ende Kreissegment am Punkt ... message.setaway.away=Schnittpunkt soll weg vom Punkt ... message.setaway.close=Schnittpunkt soll hin zum Punkt ... myfiledialog.dir=Verzeichnis myfiledialog.file=Datei myfiledialog.pattern=Erweiterungen filedialog.open=ffnen filedialog.saveas=Speichern unter ... filedialog.open.action=ffnen filedialog.saveas.action=Speichern filedialog.htmlsave=HTML-Datei Speichern filedialog.htmlsave.action=Speichern objectsedit.title=Eigenschaften bearbeiten point.type.square=Quadrat point.type.diamond=Raute point.type.circle=Kreis point.type.dot=Punkt color.type.normal=Normal color.type.thick=Dick color.type.thin=Dnn color.type.invisible=Unsichtbar text.point=Punkt in %, % text.line=Gerade durch % und % text.segment=Strecke von % nach % text.segment.fixed=Strecke von % nach % mit Lnge % text.segmen text.ray=Strahl von % in Richtung % text.intersection=Schnitt zwischen % und % text.circle=Kreis um % durch % text.circle.fixed=Kreis um % durch % mit Radius % text.fixedcircle=Kreis um % mit Radius % text.circle3=Kreis um % mit Radius von % nach % text.parallel=Parallele durch % zu % text.midpoint=Mitte zwischen % und % text.quadric=Kegelschnitt durch % text.plumb=Lot durch % zu % text.angle=Winkel % - % - % text.angle.fixed=Winkel % - % - % mit Gre % text.boundedpoint=Punkt auf % text.expression=Ausdruck "%" in %, % text.area=Vieleck text.fixedangle=Fester Winkel % - % mit Gre % name.Point=Punkt name.Intersection=Schnitt name.OtherIntersection=Schnitt name.Circle=Kreis name.Circle3=Kreis name.Segment=Strecke name.Ray=Strahl name.TwoPointLine=Gerade aus zwei Punkten name.Line=Gerade name.Parallel=Parallele name.Midpoint=Mitte name.Quadric=Quadrik name.Plumb=Lot name.Angle=Winkel name.PointOn=Objektpunkt name.Expression=Ausdruck name.Polygon=Polygon prompt.point==P prompt.pointon==P() prompt.line==g(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==k(,) prompt.circle3==k(,,) prompt.intersection==S(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==p(,) prompt.plumb==l(,) prompt.angle==w(,,) prompt.area=A(,,) prompt.expression=AD() prompt.function=F(,,,,,) name.short.Point=P name.short.Intersection=S name.short.OtherIntersection=S name.short.Circle=k name.short.Circle3=k name.short.Segment=s name.short.Ray=r name.short.Line=g name.short.Parallel=p name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=l name.short.Angle=w name.short.PointOn=OP name.short.Expression=AD name.short.Polygon=A name.short.Function=F popup.hidden=Zeige versteckte Objekte popup.replay=Schrittweise durch Konstruktion gehen popup.empty=--- Makros --- setgrid.title=Gitterweite setgrid.prompt=Neue Gitterweite setgrid.set=Setzen definemacro.title=Makrodefinition definemacro.name=Name definemacro.comment=Kommentar definemacro.noparams=Es sind keine Parameter definiert! definemacro.nomacro=Es ist kein Makro definiert! definemacro.targetsonly=Verstecke Konstruktion definemacro.invisible=Vollstndig Verstecken definemacro.promptfor=Benutzer gibt ein: editrun.title=Bearbeite Konstruktionsbechreibung editrun.run=Speichern und Ausfhren editrun.load=Andere Beschreibung macro.replace.title=Makro macro.replace=Ersetze Makro: macro.replace.all=Alle macro.usage=Falsche Benutzung des Makros (siehe Tips)! macro.prompt.title=Parameter Eingabe macro.prompt.prompt=Geben Sie einen Wert fr den Parameter ein. macro.prompt.illegal=Ungltiger Wert! sure.title=Sind Sie sicher? sure.delete=Alle nderungen wirklich wegwerfen? digits.title=Nachkommastellen digits.edit=Im Eigenschaftendialog digits.lengths=Fr die Anzeige digits.angles=Fr Winkel close.title=Schlieen close.prompt=Wollen Sie das Programm beenden? file.exists.title=Datei Vorhanden file.exists.overwrite=Die Datei gibt es schon! berschreiben? exception.nparams=Falsche Parameterzahl! exception.notfound=Objekt nicht gefunden oder nach Ausdruck definiert! exception.type=Falscher Parametertyp! exception.expression=Ungltiger Ausdruck! exception.canfix=Objekt kann nicht fixiert werden! exception.fix=Falscher Wert! exception.novalue=Falscher Wert! exception.elementary=Falsches Element im Ausdruck! exception.bracket=Schlieende Klammer fehlt! exception.quotes=Schlieendes " fehlt! exception.dot=Falsches Zahlformat! exception.nodigit=Keine Ziffer in Zahl! exception.function=Unbekannte Funktion! exception.parameter=Falscher Parameter! exception.macro=Falscher Makroparameter! exception.macrotarget=Falsches Zielobjekt! exception.name=Kein Name angegeben! exception.prompt=Falsches Objekt fr Prompt! exception.prompt.parameter=Prompt darf kein Parameter sein! exception.parameters=Falsche Parameter! exception.brackets=Klammern falsch! exception.job=Falsche Jobparameter! exception.track=Falsche Trackparameter! exception.animate=Falsche Animationsparameter! exception.boolean=Wahr oder Falsch erwartet! exception.value=Falscher Wert! exception.color=Falsche Farbe! exception.colortype=Falsche Strke! exception.type=Falscher Punkttyp! exception.macroparameter=Falsche Makroparameter! exception.macrotarget=Falsches Makroziel! exception.double=Name schon vorhanden! error.setaway=Dieser Punkt ist nicht vor dem Schnitt definiert! error.objecttracker.depends=Der Punkt ist an ein anderes Objekt gebunden! constructiondisplay.title=Konstruktionsbeschreibung function.hide=Verstecken function.hide.short=v function.rename=Name function.rename.short=name function.value=Wert function.value.short=wert function.window=Fenster function.window.short=fenster function.color=Farbe function.color.short=farbe function.thickness=Dicke function.thickness.short=dicke function.type=Typ function.type.short=typ function.partial=Partiell function.partial.short=part function.fill=Voll function.fill.short=voll function.back=Zurck function.back.short=zur function.away=Verschieden function.away.short=weg function.acute=Spitz function.acute.short=spitz function.obtuse=Stumpf function.obtuse.short=stumpf function.solid=Solid function.solid.short=solid function.restrict=Beschrnkt function.restrict.short=beschrnkt expression.value=Wert replay.title=Wiedergabe parameter=Parameter parameter.short=Param target=Ziel target.short=Ziel macro=Makro macro.short=Makro away=Verschieden away.short=verschieden end=Ende end.short=ende invisible=Unsichtbar invisible.short=unsichtbar showall=Sichtbar showall.short=sichtbar configure.title=Browser Konfigurieren configure.prompt=Browserkommando background.error=Konnte Bild nicht laden (GIF oder JPG!). menu.background=Hintergrund menu.background.grab=Konstruktion als Hintergrund menu.background.clear=Hintergrund lschen menu.background.load=Hintergrundbild laden ... menu.background.tile=Gekachelt menu.background.center=Zentriert menu.background.usesize=Fenstergre anpassen iconhelp.grab=Setzt oder lscht Hintergrund+bernimmt Konstruktion in den Hintergrund filedialog.backgroundload=Hintergrundbild laden filedialog.backgroundload.action=Laden # New Resources in Version 2.14 menu.file.compress=Immer komprimieren menu.file.savesvg=Als Bild (SVG) speichern ... # 2.15 loading=Konstruktion wird geladen, bitte warten! # Version 2.18 und 2.19 menu.settings.font.default=Normalen Zeichensatz verwenden menu.settings.font.bold=Text fett anzeigen menu.settings.font.large=Text grer anzeigen menu.file.saveeps=Als Bild (EPS) speichern ... menu.fonts=Zeichensatz # Version 2.20 bmpscaler.width=Breite bmpscaler.height=Hhe bmpscaler.scale=Faktor (mit Eingabetaste) bmpscaler.illegal=Wert nicht mglich # Version 2.21 renamemacro.title=Makro umbenennen renamemacro.name=Neuer Name menu.special.renamemacro=Makro umbenennen ... # Version 2.23 savequestion.title=Speichern savequestion.qsave=nderungen speichern? # Version 2.25 exception.printsize=Druckseite zu klein! iconhelp.nohelp=No help available iconhelp.type?=Darstellung iconhelp.thickness?=Strke iconhelp.color?=Farbe iconhelp.filled=Ausgeflltes Objekt iconhelp.isback=Objekt erscheint im Hintergrund iconhelp.inverse=Gespiegelter Winkel iconhelp.angle?=Winkelgre # Version 2.31 menu.settings.indicate=Vorschau von erzeugten Objekten menu.options.other=Einstellungen menu.help.welcome=Neuigkeiten dieser Version iconhelp.twolines=Zweizeilige Iconleiste iconhelp.qintersection=Fr automatische Schnitte fragen iconhelp.qchoice=Dialog fr Objektauswahl anzeigen iconhelp.qpointon=Fr Punkt auf Objekt fragen iconhelp.noindicate=Objekte unter Maus nicht hervorheben # Version 2.33 menu.file.new=Neue Konstruktion (Strg-n) # Version 2.34 edit.text.title=Texteinstellungen edit.text.settings=Weitere Einstellungen menu.settings.filedialog=Dateidialog des Systems ersetzen # Version 2.35 menu.settings.bitmapbackground=Hintergrundfarbe in Bitmaps verwenden # Version 2.36 menu.file.savegraphics=Grafik speichern als ... bmpscaler.title=Grafikgre # Version 2.37 menu.file.savepdf=Als Bild (PDF) speichern ... iconhelp.chord=Als Kreissegment anzeigen # Version 2.39 message.setfixedangle.first=Punkt auf dem ersten Schenkel des abzutragenden Winkels? message.setfixedangle.second=Scheitelpunkt des abzutragenden Winkels? message.setfixedangle.third=Punkt auf dem zweiten Schenkel des abzutragenden Winkels? edit.fixedangle.set=Winkel abtragen ... message.setfixedcircle.first=Erster Punkt der abzutragenden Strecke, Strecke oder Kreis? message.setfixedcircle.second=Zweiter Punkt der abzutragenden Strecke? edit.fixedcircle.set=Gre abtragen ... # Version 2.40 minpointsize.title=Minimale Punktgre minpointsize.prompt=Minimale Punktgre (Default: 3) menu.settings.font.minpointsize=Minimale Punktgre ... # Version 2.41 name.short.Track=Tr text.track=Spur von % whrend % sich auf % bewegt trackquestion.keep=Ortslinie in Konstruktion bernehmen? trackquestion.title=Ortslinie Speichern menu.options.track=Ortslinie bernehmen (Shift-Eingabe) iconhelp.indicate=Vorschau von Konstruktionsergebnissen iconhelp.nohelp=Keine Hilfe verfgbar! # Version 2.42 objects.draw=Mit der Maus malen menu.options.cleardraw=Gemaltes lschen (Esc) iconhelp.draw=Mit der Maus malen+Escape: Gemaltes lschen message.draw=Mit der Maus malen. (Esc: Lschen) shortcuts.draw=; # Version 2.43 message.rename=Objekte alphabetisch umbennen. (Shift: Neuer Start) iconhelp.rename=Umbennen zu A,B,C,...+Alphabetisches Umbenennen von Punkten, Strecken und Winkeln objects.rename=Umbennen zu A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Zeige den Schenkel nicht an. # Version 2.45 menu.settings.smartboard=Smartboard-Modus shortcuts.zoom=% objects.zoom=Mit der Maus zoomen message.zoom=Verschieben in der Mitte, oder zoomen am Rand. # Version 2.46 menu.special.restricticons=Eingeschrnkte Werkzeugauswahl # Version 2.47 menu.settings.indicate.simple=Nur Vorschau von Punkten menu.settings.beginner=Anfngermodus question.again=Diese Frage erneut stellen. # Version 2.48 definemacro.parameters=Prompt fr die Parameter ("=Name" fixiert) # Version 2.53 menu.actions.angles=Winkel menu.actions.circles=Kreise menu.actions.lines=Geraden menu.actions.points=Punkte # Version 3.00 info.title=Kontexthilfe info.related=Siehe auch ... info.notfound=Hilfethema wurde nicht gefunden! info.noresults=Keine Fundstellen! info.searchresults=- Fundstellen - info.select=- Auswahl - info.search=Suchen info.back=Zurck info.start=Start iconhelp.info=Kontexthilfe (F1)+Hilfe zum gewhlten Werkzeug menu.help.info=Kontexthilfe (F1) myfiledialog.home=Eigene myfiledialog.homedir=ZuL Dateien myfiledialog.windowshome=Eigene Dateien myfiledialog.mkdir=Neues Verzeichnis myfiledialog.back=Zurck menu.file.alwaysclearmacros=Makros vor dem Laden Lschen sure.macros=Alle Benutzermakros lschen? about.language=Sprache bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Backups # Version 3.02 menu.options.hideduplicates=Duplikate verstecken # Version 3.03 menu.options.function=Funktion oder Kurve text.function=Funktion ( % , % ) function.varmin=Von function.varmax=Bis function.dvar=Schrittweite function.var=Variable function.y=Ausdruck fr Y-Wert iconhelp.function=Funktion oder Kurve+(Strg: Benutzerdefinierte Funktion) menu.options.editlast=Letztes Objekt bearbeiten iconhelp.control.edit=Letztes Objekt bearbeiten iconhelp.control.hide=Verstecke Duplikate+bereinanderliegende Objekte verstecken edit.function.title=Funktion oder Kurve iconhelp.control.runmacro=Letztes Makro erneut aufrufen # Version 3.05 point.type.cross=Kreuz point.type.dcross=Diagonales Kreuz shortcuts.pointtype.4=(Strg-9) shortcuts.pointtype.5=(Strg-0) edit.unit=Einheit function.valid=Gltig function.valid.short=gltig function.close=Nahe function.close.short=nahe menu.special.break=Haltepunkte menu.bp.setbreak=Haltepunkt setzen menu.bp.clearbreak=Haltepunkt lschen menu.bp.sethidingbreak=Versteckenden Haltepunkt setzen menu.bp.animatebreak=Haltepunkte animieren iconhelp.animatebreak=Animiere Haltepunkte+Anhalten mit Mausklick message.animatebreak=Animation mit Klick anhalten. (Shift links/rechts: Geschw.) menu.special.exporttemplate=HTML Export mit Vorlage templateload.open=Lade Vorlage templateload.open.action=ffnen menu.settings.doubleclick=Doppelklick fr Makros export.codebase=Codebase # Version 3.12 edit.equation=Gleichung # Version 3.13 warning.load=Beim Laden der Datei kam es zu einem Fehler! warning.save=Beim Speichern der Datei kam es zu einem Fehler! warning.save.backup=Beim Backup der Datei kam es zu einem Fehler! warning.template=Beim Bearbeiten der Vorlage kam es zu einem Fehler! myfiledialog.olddirs=Letzte Verzeichnisse # Version 3.23 menu.settings.minwidth=Minimaleinstellungen bei Grafikexport einhalten menu.settings.squarepoints=Punkte immer als Quadrate zeichnen # Version 3.37 menu.options.export=Einstellungen fr Grafikexport menu.settings.minwidth=Minimale Linienbreite ist 1 menu.settings.minpointsize=Minimale Punktgre respektieren menu.settings.minfontsize=Minimale Schriftgre respektieren minfontsize.title=Minimale Schriftgre einstellen minfontsize.prompt=Minimale Schriftgre (Normalgre: 12) menu.options.minpointsize=Minimale Punktgre ... menu.options.minfontsize=Minimale Schriftgre ... # Version 3.38 menu.settings.scalepdf=Scaliere PDF und EPS 1:1 # Version 3.41 menu.file.clip=Fenster fr Grafikausgabe ... clip.title=Fenster Setzen clip.width=Breite clip.height=Hhe clip.screen=Kein Fenster # Version 3.42 menu.options.arrowsize=Pfeilgre ... arrowsize.title=Pfeilgre arrowsize.prompt=Pfeilgre # Version 3.44 iconhelp.large=Groer Font iconhelp.bold=Fetter Font menu.options.largefont=Groe Schrift menu.options.boldfont=Fette Schrift warning.previewframe=Fenster grer als Zeichenflche! message.move.select=Bewege Punkt oder anderes Objekt (Shift: Mehr Objekte, Strg: Altes sichtbar) # Version 3.46 iconbar.showseparators=Zeige Trennelemente # Version 3.5 menu.sizes=Minimalgren menu.options.minlinesize=Minimale Linienbreite ... minlinesize.title=Minimale Linienbriete minlinesize.prompt=Minimale Linienbreite (Default: 1) arrowsize.prompt=Pfeilgre (Default: 10) menu.options.printscaler=Gren fr Grafikexport setzen ... menu.options.exportsettings=Spezielle Einstellungen fr Grafikexport ... printscaler.title=Grafikexport printscaler.width=Breite (in cm) printscaler.height=Hhe (in cm) printscaler.dpi=Auflsung (in dpi, normalerweise 300) printscaler.linewidth=Linienbreite (in cm, normalerweise 0.02) printscaler.pointsize=Punktgre (in cm, normalerweise 0.07) printscaler.textsize=Textgre (in cm, normalerweise 0.3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=Breite (in Pixel) printscaler.h=Hhe (in Pixel) printscaler.scale=Skalierung (Relativ zum Schirm) printscaler.middle=Aus dem Bildschirm ausschneiden printscaler.sizes=Greneinstellungen verwenden menu.file.savepng=Bild als PNG speichern ... warning.preview=Die Vorschau funktioniert erst ab Java 1.4 vollstndig iconedit.showseparators=Trennlinien printscaler.aspect=Seitenverhltnis beibehalten printscaler.presets=Vorgaben printscaler.preset=Bitte Auswhlen ... printscaler.preset.300dpi=1:1 skaliert mit 300 dpi printscaler.preset.300dpi6=6 cm Breite mit 300 dpi printscaler.preset.300dpi16=16 cm Breite mit 300 dpi printscaler.preset.window=Fenstergre (fr Webgrafiken) printscaler.preset.clip50=50% Fenstergre, ausgeschnitten message.saving=Bitte warten! menu.options.printscalepreview=Vorschau fr Grafikexport (Strg-F3) date=Erstellungsdatum # Version 3.51 help=Hilfe # Version 3.61 editconditionals.title=Bedingte Formatierung editconditionals.hidden=Verstecken editconditionals.superhidden=Vollstndig verstecken editconditionals.visible=Normal editconditionals.showname=Namen anzeigen editconditionals.showvalue=Wert anzeigen editconditionals.background=Hintergrund editconditionals.solid=Nicht Transparent exception.superfluous=berflssiger Text im Ausdruck # Version 3.62 menu.options.selectionsize=Auswahlbereich setzen selectionsize.title=Auswahlbereich selectionsize.prompt=Auswahlbereich (normalerweise 1.5 Punkte) # Version 3.63 select.comment.title=Makrokommentar jobcomment.title=Aufgabenstellung # Version 3.68 edit.area.area=Flche # Version 3.73 myfiledialog.oldfiles=Vorherige Dateien # Version 3.74 iconhelp.load=Konstruktion laden (Strg-o) iconhelp.save=Konstruktion speichern (Strg-s) iconhelp.new=Neue Konstruktion (Strg-n)+Strg: Defaults laden # Version 3.81 warning.loadbackground=Fehler beim Laden des Hintergrunds # Version 3.9 function.x=Ausdruck fr X-Wert (leer bei Funktionen) # Version 3.91 constructiondisplay.select=Auswahl constructiondisplay.all=Alle Objekte constructiondisplay.visible=Sichtbare Objekte (Alt-Strg-9) constructiondisplay.points=Punkte constructiondisplay.lines=Geraden und Strecken constructiondisplay.circles=Kreise constructiondisplay.angles=Winkel constructiondisplay.other=Andere Objekte menu.file.copypng=Grafik auf Zwischenablage exception.clipboardcopy=Fehler beim Kopieren auf die Zwischenablage! menu.options.finegrid=Nur Koordinatenachsen # Vesion 3.93 edit.function.center=Zentrum whlen edit.function.free=Zentrum im Ursprung message.setcenter=Whlen Sie das Zentrum der Kurve! # Vesion 3.94 message.edit=Eigenschaften von Objekten? (Shift: mehr Objekte, Strg: Bedingungen) # Version 3.97 error.image=Bild nicht im selben Verzeichnis wie Konstruktion? filedialog.imageload=Bild Laden filedialog.imageload.action=Laden message.image=Ankerpunkt fr Bild prompt.image=image(,,,) objects.image=Bild shortcuts.image=_ # Version 3.98 exception.depends=Objekt % hngt von diesem Objekt ab. error.depends=Objekt % hngt von diesem Objekt ab. constructiondisplay.sorted=Sortiert nach Erzeugung (Alt-Strg-0) # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Ausdrcke # Version 4.00 iconhelp.image=Bild hinzufgen (_)+2 oder 3 Ankerpunkte message.image=Ankerpunkt % fr Bild message.image.last=Letzter Ankerpunkt (wahlweise) editconditionals.z=Z-Wert # Version 4.01 name.FixedAngle=Fester Winkel # Version 4.04 menu.moresettings=Einstellungen menu.settings.language=Sprache whlen language.title=Sprache whlen language.prompt=Sprache fr den nchsten Programmstart # Version 4.05 constructiondisplay.invalid=Ungltige Objekte # Version 4.08 menu.settings.constructiondisplay=Dauerhafte Objektliste (F11) constructiondisplay.editconditions=Bedingungen bearbeiten constructiondisplay.delete=Lsche ausgewhlte Objekte constructiondisplay.hide=Verstecken oder Anzeigen (Alt-Strg-4) constructiondisplay.superhide=Vollstndig Verstecken (Alt-Strg-5) # Version 4.2 edit.expression.slider=Als Schieber menu.grid.options=Gitteroptionen menu.options.leftsnap=Einschnappen mit linker Maustaste menu.settings.boundingbox=Bounding Box (bb) Datei erzeugen # Version 4.3 latexsettings.title=LaTeX Einstellungen latexsettings.boundingbox=Erzeuge bb-Datei latexsettings.latexinput=Erzeuge ztx-Datei latexsettings.doubledollar=LaTeX erzeugt $$...$$ latexsettings.dollar=LaTeX erzeugt $...$ latexsettings.nodollar=LaTeX erzeugt alle anderen Strings latexsettings.fullpath=Pfad zur Datei ausgeben printscaler.preset.latex10=LaTeX mit 10pt printscaler.preset.300dpi12=12 cm Breite mit 300dpi printscaler.latex=Fr LaTeX Speichern menu.background.usewidth=Nur Hhe anpassen # Version 4.4 menu.options.restricted=Eingeschrnkte Schnitte menu.options.sizes=Gren ... sizesdialog.title=Gren minlinesize.prompt=Minimale Linienbreite (Default: 1) minpointsize.prompt=Minimale Punktgre (Default: 3) minfontsize.prompt=Minimale Schriftgre (Default: 12) arrowsize.prompt=Pfeilgre (Default: 10) selectionsize.prompt=Auswahlbereich (Default: 1.5) warning.load.macros=Fehler beim Laden von Makros! warning.macrodefinition=% wird benutzt, ist aber nicht im Makro enthalten! edit.circle.bounds=Kreisbogen edit.circle.range=Kreisbogen setzen ... # Version 4.5 edit.track.dmin=Minimale Schrittweite (normal: 0.001) # Version 4.6 menu.settings.smallicons=Kleine Icons verwenden menu.settings.oldicons=Alte Icons verwenden # Version 4.7 text.trackof=Ortslinie von % wenn sich % verndert # Version 5 # Fix error.image edit.discrete=Diskret error.fixedsegment=Diese Strecke kann nicht fixiert werden! export.zoom=Zoom mit Maus export.popup=Popup Menu # Version 5.1 edit.intersection.alternate=Kann wechseln export.restrictedmove=Eingeschrnkte Bewegung # Version 5.3 message.bindpoint=Binde Punkt an Objekt (Shift: stetig, Strg: innerhalb) edit.point.inside=Innerhalb edit.point.increment=Gitterweite (0=frei) edit.more=Mehr ... menu.settings.more=Knopf fr bedingte Formatierung menu.file.loadexamples=Lade Beispiel ... menu.options.editgrid=Gitter einstellen ... constructiondisplay.description=Zeige Beschreibung (Alt-Strg-1) constructiondisplay.size=Zeige Gre oder Koordinaten (Alt-Strg-2) constructiondisplay.formula=Zeige Formel (Alt-Strg-3) menu.settings.germanpoints=Verwende | in Koordinaten # Version 6.2 # fix iconhelp.function menu.options.userfunction=Benutzerdefinierte Funktion function.vars=Variable function.f=Funktionsausdruck # Version 6.4 menu.special.macrobar=Makrozeile menu.special.defaultmacrosinbar=Zeige Defaultmakros help.related=Siehe auch help.nexttopic=Nchstes Thema ./src/rene/zirkel/docs/ZirkelProperties_sl.properties0000770000175000017500000012251410655647770022100 0ustar yvesyveslanguage=sl_ version=Verzija homefile=index.html homepage=http://ris.gimptuj.si/ codepage.help=CP1250 about.title=O programu about.name=Geometrija v \u0161oli about.programmed=Avtor programa title=Geometrija v \u0161oli close=Zapri ok=V redu cancel=Prekini done=Narejeno! message=Sporo\u010dilo warning=Opozorilo yes=Da no=Ne abort=Prekini true=res je false=ni res warning.nojob=To ni naloga! warning.print=Tiskanje ni uspelo! warning.reset=Opcija veljavna pri naslednjem zagonu R.i.\u0160.! question.title=Vpra\u0161anje question.intersection=Ustvarim tu prese\u010di\u0161\u010de? question.pointon=Ustvarim to\u010dko na tem objektu? colors.black=\u010crna colors.blue=Modra colors.green=Zelena colors.brown=Rjava colors.cyan=Turkizna colors.yellow=Rumena colors.red=Rde\u010da objects.point=To\u010dka objects.segment=Daljica objects.line=Premica objects.ray=Poltrak objects.circle=Kro\u017enica objects.intersection=Prese\u010di\u0161\u010de objects.move=Premikanje to\u010dke objects.hide=Skrivanje objekov objects.edit=Urejanje to\u010dke objects.tracker=Sled to\u010dke ali premice objects.objecttracker=Sled to\u010dke ali premice na objektu objects.parallel=Vzporednica objects.plumb=Pravokotnica objects.circle3=Kro\u017enica s polmerom-daljico in to\u010dko-sredi\u0161\u010dem objects.midpoint=Sredi\u0161\u010de daljice objects.quadric=Sto\u017enica objects.angle=Kot objects.boundedpoint=To\u010dka na objektu objects.parameter=Nastavi parametre za makro objects.targets=Nastavi cilj za makro objects.definejob=Definicija naloge objects.runmacro=Za\u017eeni makro objects.delete=Zbri\u0161i objekt in vse kar je povezano z njim objects.reorder=Spremeni vrstni red objektov objects.animate=Animacija objects.expression=Aritmeti\u010dni izraz objects.area=Mnogokotnik objects.text=Tekst objects.fixedcircle=Kro\u017enica s konstantnim polmerom objects.fixedangle=Kot s konstantno velikostjo objects.fixedsegment=Daljica s konstantno dol\u017eino iconhelp.point=To\u010dka(p)+prosta to\u010dka, to\u010dka na objektu, prese\u010di\u0161\u010de iconhelp.segment=Daljica(s)+daljica z dvema to\u010dkama iconhelp.line=Premica(l)+premica skozi dve to\u010dki iconhelp.ray=Poltrak(r)+Poltrak z vrhom v to\u010dki skozi drugo to\u010dko iconhelp.circle=Kro\u017enica(c)+kro\u017enica s sredi\u0161\u010dem v dani to\u010dki skozi to\u010dko na obodu iconhelp.intersection=Prese\u010di\u0161\u010de(i)+prese\u010di\u0161\u010de premice in kro\u017enice iconhelp.move=Premikanje objektov+premikanje to\u010dk, kro\u017enic z danim polmerom, oznak+Ctrl-to\u010dka - prikaz stare lokacije+Ctrl-fiksni objekti premikanje in spreminjanje le-teh iconhelp.hide=Skrivanje objektov iconhelp.edit=Urejanje objektov iconhelp.tracker=Sled to\u010dke ali premice iconhelp.objecttracker=Dinami\u010dno sledenje to\u010dke ali premice iconhelp.parallel=Vzporednica iconhelp.plumb=Pravokotnica iconhelp.circle3=Kro\u017enica s polmerom-daljico in to\u010dko-sredi\u0161\u010dem iconhelp.midpoint=Sredi\u0161\u010de daljice iconhelp.quadric=Sto\u017enica podana s 5 to\u010dkami iconhelp.angle=Kot iconhelp.boundedpoint=To\u010dka na objektu iconhelp.hidden=Prikazovanje/skrivanje objektov iconhelp.color=Za\u010detna barva objekta iconhelp.type=Za\u010detni tip to\u010dke iconhelp.thickness=Za\u010detna debelina objekta iconhelp.back=Brisanje zadnjega objekta iconhelp.type0=Za\u010detni tip to\u010dke iconhelp.thickness0=Za\u010detna debelina objekta iconhelp.partial=Kro\u017enica po delih iconhelp.plines=Skraj\u0161ana premica iconhelp.arrow=Daljica kot vektor iconhelp.showcolor=Prika\u017ei le objekte dolo\u010dene barve iconhelp.runmacro=Za\u017eeni makro iconhelp.macro=Makro parametri->ciljni objekt - definicija iconhelp.expression=Aritmeti\u010dni izraz iconhelp.showvalue=Prika\u017ei vrednosti objektov iconhelp.showname=Prika\u017ei imena objektov iconhelp.obtuse=Uporabljaj kote ve\u010dje od 180\u00b0 iconhelp.solid=Ne uporabljaj prozornosti iconhelp.longnames=Dolga imena objektov iconhelp.grid=Prika\u017ei mre\u017eo iconhelp.comment=Prika\u017ei komentar iconhelp.defaults=Za\u010detne nastavitve iconhelp.macro0=Makro parametri->ciljni objekt - definicija iconhelp.visual=Ukazna konstrukcija iconhelp.replay=Prikaz poteka konstrukcije iconhelp.oneforward=Korak naprej iconhelp.fastforward=Hitro naprej iconhelp.allforward=Na konec iconhelp.oneback=Korak nazaj iconhelp.fastback=Hitro nazaj iconhelp.allback=Na za\u010detek iconhelp.close=Zapri iconhelp.area=Mnogokotnik iconhelp.text=Tekst v ve\u010d vrsticah iconhelp.fixedcircle=Kro\u017enica s konstantnim polmerom iconhelp.fixedangle=Kot s konstantno velikostjo iconhelp.fixedsegment=Daljica s konstantno dol\u017eino iconhelp.animate=Animacija to\u010dke iconhelp.delete=Zbri\u0161i objekt (in vse ki so od njega odvisni) iconhelp.undo=Prekli\u010di zadnje brisanje iconhelp.nextbreak=Do naslednje prekinitvene to\u010dke iconhelp.setbreak=Dolo\u010di/spremeni prekinitveno to\u010dko iconhelp.zoom=Spreminjanje pogleda z mi\u0161ko shortcuts.point=p shortcuts.segment=s shortcuts.line=l shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) menu.file=Datoteke menu.file.new=Nova konstrukcija menu.file.clearmacros=Izbri\u0161i vse makroje menu.file.load=Odpri konstrukcijo ... (Ctrl-o) menu.file.loadjob=Odpri nalogo ... (Ctrl-j) menu.file.savejob=Shrani kot nalogo ... (Ctrl-k) menu.file.save=Shrani konstrukcijo (Ctrl-s) menu.file.saveas=Shrani konstrukcijo kot ... (Ctrl-a) menu.file.includemacros=Vklju\u010di makroje menu.file.exit=Izhod (Alt-F4) menu.file.print=Natisni ... menu.file.print.isoscale=Razmerje 1:1 v cm menu.file.savebmp=... datoteko BMP menu.file.savefig=... datoteko FIG menu.file.loadrun=Odpri opisno konstrukcijo (Ctrl-r) menu.file.editrun=Uredi opisno konstrukcijo (Ctrl-x) menu.actions=Ukazi menu.actions.elementary=Osnovna orodja menu.actions.complex=Sestavljena orodja menu.actions.fixed=Objekti s konstantnimi parametri menu.actions.move=Orodja za premikanje menu.actions.decorative=Izgled objektov menu.options=Mo\u017enosti menu.options.visual=Vizualni na\u010din menu.options.hidden=Poka\u017ei skrite objekte (F9) menu.options.comment=Komentar (F10) menu.options.constructiondisplay=Opis (F11) menu.options.grid=Poka\u017ei mre\u017eo (F12) menu.options.other=Ostale nastavitve menu.options.setgrid=Gostota mre\u017ee ... menu.options.showcolor=Poka\u017ei barve menu.options.defaultcolor=Izbira barve menu.options.defaultthickness=Izbira debeline menu.options.defaulttype=Izbira ozna\u010dbe to\u010dke menu.options.all=Vse menu.options.setdigits=Nastavi decimalna mesta menu.options.shownames=Poka\u017ei imena objektov (Ctrl-F6) menu.options.longnames=Dolga imena objektov (Ctrl-F8) menu.options.obtuse=Koti ve\u010dji od 180\u00b0 (Ctrl-F12) menu.options.solid=Ne uporabljaj prozornosti menu.options.showvalues=Poka\u017ei vrednosti objektov (Ctrl-F7) menu.options.partial=Kro\u017enica po delih (Ctrl-F9) menu.options.plines=Skraj\u0161ana premica (Ctrl-F10) menu.options.arrow=Daljica kot vektor (Ctrl-F11) menu.options.editicons=Uredi orodja menu.options.back=Zbri\u0161i zadnji objekt (<-)o menu.options.undo=Povrni brisanje (Ctrl-z) menu.zoom=Zoom menu.zoom.in=Bli\u017ee (+) menu.zoom.out=Dalje (-) menu.zoom.left=Levo (smernik-levo) menu.zoom.right=Desno (smernik-desno) menu.zoom.up=Gor (smernik-gor) menu.zoom.down=Dol (smernik-dol) menu.macros=Makroji menu.special.definemacro=Definiraj makro (Ctrl-F5) menu.special.runmacro=Po\u017eeni makro (F5) menu.special.savemacros=Shrani makro menu.special.loadmacros=Preberi makro menu.special.deletemacros=Zbri\u0161i makro menu.special=Posebnosti menu.special.testjob=Test naloge (Ctrl-F1) menu.special.jobcomment=Opis naloge (F8) menu.special.export=Izvoz v HTML (Ctrl-e) menu.special.replay=Ponovi konstrukcijo menu.help=Pomo\u010d menu.help.about=O tem programu menu.help.browser=Razi\u0161\u010di pomo\u010d in primere menu.help.text=Enostavna pomo\u010d menu.help.configure=Oblikuj brskalnik menu.help.help=Pomo\u010d (F1) menu.help.macros=O makrojih menu.help.tools=Orodja menu.help.gui=Uporabni\u0161ki vmesnik menu.help.interactive=Opisna konstrukcija menu.help.tips=Nekaj nasvetov menu.settings=Posebne nastavitve menu.settings.choice=Poka\u017ei izbirni dialog za objekte menu.settings.fullicons=Vse ikone v dveh vrstah menu.settings.utf=Uporabi UTF-8 kodiranje menu.settings.autohide=Skrij drugo prese\u010di\u0161\u010de menu.settings.iconbartop=Ikone nad konstrukcijsko povr\u0161ino menu.settings.showtips=Poka\u017ei nasvete ob orodjih menu.settings.simplegraphics=Vedno uporabi enostavno grafiko menu.settings.sure=Potrjevanje shranjevanja in zapiranja menu.settings.pointon=Potrdi konstrukcijo to\u010dke na objektu menu.settings.intersection=Potrjevanje dolo\u010danja prese\u010di\u0161\u010da menu.settings.movename=Prikazovanje objektov med premikanjem menu.settings.movefixname=Stalne vrednosti objektov med premikanjem menu.settings.restricted=\u0160olski na\u010din menu.colors=Nastavitev barv colors.default=Uporaba osnovnih barv colors.color0=Barva 1 (\u010crna) colors.color1=Barva 2 (Zelena) colors.color2=Barva 3 (Modra) colors.color3=Barva 4 (Rjava) colors.color4=Barva 5 (Turkizna) colors.color5=Barva 6 (Rde\u010da) colors.background=Ozadje colors.select=Izbira colors.target=Cilj myfiledialog.dir=Mapa myfiledialog.file=Datoteke myfiledialog.pattern=Vzorci filedialog.open=Odpri filedialog.saveas=Shrani kot ... filedialog.open.action=Odpri filedialog.saveas.action=Shrani filedialog.htmlsave=Shrani kot HTML filedialog.htmlsave.action=Shrani pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Shrani load=Odpri abort=Prekini bound.release=Sprosti to\u010dko bound.bind=Pove\u017ei z objektom bound.error=Ne najdem objekta za prese\u010di\u0161\u010de ! constructiondisplay.edit=Uredi objekt constructiondisplay.copy=Kopiraj na odlo\u017ei\u0161\u010de edit.Title=Lastnosti edit.name=Ime edit.hidden=Skrito edit.text=Tekst edit.fixed=Konstantno edit.color=Barva edit.ok=V redu edit.cancel=Prekini edit.showname=Poka\u017ei ime edit.point.title=Uredi to\u010dko edit.point.type=Oblika edit.point.x=X edit.point.y=Y edit.point.intersection=Razli\u010dno od edit.point.showvalue=Poka\u017ei koordinate edit.point.colortype=Debelina edit.point.bound=Povezava edit.point.away=Razlo\u010di od edit.point.close=Povezana edit.point.free=Prosta edit.line.title=Uredi premico, poltrak, daljico edit.line.normal=Privzeta edit.line.thick=Debela edit.line.thin=Tanka edit.line.invisible=Nevidna edit.line.type=Oblika edit.segment.length=Dol\u017eina edit.segment.showvalue=Prikaz dol\u017eine edit.circle.title=Urejanje kro\u017enice edit.circle.length=Polmer edit.circle.partial=Prikaz lokov edit.circle.range=Nastavitev obsega edit.circle.killrange=Brisanje obsega edit.plumb.restricted=Omejeno edit.angle.title=Ureditev kota edit.angle.length=Velikost edit.angle.displaysize=Prikaz velikosti edit.angle.normal=Privzeto edit.angle.small=Majhno edit.angle.large=Veliko edit.expression.title=Urejanje izraza edit.expression=Aritmeti\u010dni izraz edit.expression.prompt=Opis izraza edit.area.title=Urejanje mnogokotnika edit.area.back=V ozadje export.title=HTML izvoz export.pagetitle=Naslov strani export.width=\u0160irina export.height=Vi\u0161ina export.jar=Datoteka jar export.comment=Shrani komentar export.file=Datoteka s konstrukcijo export.job=Prika\u017ei nalogo export.color=Barva export.backgroundcolor=Uporabi za ozadje strani export.appletcolor=Uporabi za ozadje appleta export.plain=Ravnina export.3D=Okvir export.breaks=Ponovitev s prekinitvenimi to\u010dkami export.icons=Okvir in ikona export.full=Okvir, ikone in stanje export.nonvisual=Okvir, ikone in vnosna vrstica export.style=Slog appleta export.setcolor=Izbira barve export.savefirst=Datoteka \u0161e ni shranjena! export.soltext=Re\u0161itev export.stylesheet=Datoteka s CSS stili export.solution=Re\u0161itev export.jumpsol=Skok na re\u0161itev export.linksol=Povezava na re\u0161itev export.savesol=Shrani datoteko z re\u0161itvijo export.track=Sled to\u010dke export.digits=Shrani \u0161tevilo mest export.setsize=Dolo\u010di velikost export.signature=Narejeno z R.i.\u0160. export.colors=Shrani definirane barve export.background=Shrani definirano ozadje help.title=Pomo\u010d help.error=Ne morem odpreti datoteke s pomo\u010djo! help.file=sl_schoolgeometry.txt coloreditor.title=Uredi barvo coloreditor.red=Rde\u010da coloreditor.green=Zelena coloreditor.blue=Modra coloreditor.color=Va\u0161a barva comment.title=Komentar konstrukcije comment.set=Dolo\u010di comment.cancel=Prekini comment.close=Zapri iconedit.title=Uredi ikono iconedit.twobars=Ikone v dveh vrsticah jobcomment.title=Naloga select.title=Izbira select.ok=V redu select.cancel=Prekini select.comment=Prika\u017ei opombo select.all=Vse message.circle.midpoint=Kro\u017enica: Sredi\u0161\u010de? message.circle.radius=Kro\u017enica: to\u010dka na kro\u017enici (Dvigalka: dolo\u010di polmer)? message.fixedcircle.midpoint=Kro\u017enica s konstantnim polmerom: sredi\u0161\u010de? message.fixedcircle.radius=Kro\u017enica s konstantnim polmerom: polmer? message.edit=Uredi: objekt? message.line.first=Premica: Prva to\u010dka? message.line.second=Premica: Druga to\u010dka? message.ray.first=Poltrak: izhodi\u0161\u010de? message.ray.second=Poltrak: druga to\u010dka? message.move.select=Premakni: Izberi to\u010dko! message.move.move=Premikanje: Premakni to\u010dko? message.point=To\u010dka: postavi to\u010dko! message.segment.first=Daljica: Za\u010detna to\u010dka? message.segment.second=Daljica: druga to\u010dka (Dvigalka: dolo\u010di dol\u017eino)? message.fixedsegment.first=Daljica z dolo\u010deno dol\u017eino: za\u010detna to\u010dka? message.fixedsegment.second=Daljica s konstantno dol\u017eino: klikni kjerkoli! message.intersection.first=Prese\u010di\u0161\u010de: prvi objekt ali prese\u010di\u0161\u010de? message.intersection.second=Prese\u010di\u0161\u010de: prvi objekt? message.hide=Prika\u017ei/skrij: izberi objekt! message.tracker.select=Sled: to\u010dka ali premica, ki dolo\u010da sled? message.tracker.selectpoint=Sled: to\u010dka za premikanje (Dvigalka: ve\u010d)? message.tracker.move=Sled: to\u010dka za premikanje! message.objecttracker.select=Samosled: to\u010dka za sled (Dvigalka: ve\u010d)? message.objecttracker.object=Samosled: premica ali kro\u017enica? message.objecttracker.selectpoint=Samosled: To\u010dka za premikanje? message.objecttracker.selectanypoint=Samosled: \u0160e katera to\u010dka? message.objecttracker.move=Samosled: Premakni to\u010dko! message.objecttracker.start=Samosled: Za\u017eeni animacijo! message.objecttracker.stop=Samosled: Ustavi animacijo! message.parallel.first=Vzporednica: premica? message.parallel.second=Vzporednica: To\u010dka? message.plumb.first=Pravokotnica: Premica? message.plumb.second=Pravokotnica: To\u010dka? message.circle3.first=Kro\u017enica: Prva to\u010dka polmera? message.circle3.second=Kro\u017enica: Druga to\u010dka polmera? message.circle3.midpoint=Kro\u017enica: Sredi\u0161\u010de? message.midpoint.first=Sredi\u0161\u010de: Prva to\u010dka? message.midpoint.second=Sredi\u0161\u010de: Druga to\u010dka? message.quadric=Sto\u017enica: \u0160tevilo to\u010dk message.angle.first=Kot: Prva to\u010dka za kot? message.angle.root=Kot: Vrh kota? message.angle.second=Kot: Druga to\u010dka za kot (Dvigalka: dolo\u010dena velikost)? message.fixedangle.first=Kot s konstantno velikostjo: Prva to\u010dka kota? message.fixedangle.root=Kot s konstantno velikostjo: Vrh? message.fixedangle.second=Kot s konstantno velikostjo: Klikni kjerkoli! message.label.select=Premakni oznako: Izberi oznako! message.label.move=Premakni oznako: Premakni oznako! message.boundedpoint=To\u010dka na objektu: Kro\u017enica ali premica (Dvigalka: dolo\u010dena)? message.parameters=Makro parametri: Parameter objekta? message.targets=Cilj makra: Ciljni objekt? message.savejob.first=Definiraj nalogo: Zadnji prikazani objekt? message.savejob.second=Definiraj nalogo: Ciljni objekt? message.savejob.third=Definiraj nalogo: Nadaljnji objekti, ki naj bodo prikazani? message.runmacro=Makro %: %. (Vnesi %) % message.runmacro.return=(preslednica izbere %) message.runmacro.fixes=(Dvigalka dolo\u010di izbor) message.delete=Brisanje: Izberi objekt! message.reorder=Spreminjanje vrstnega reda objektov: Izberi objekt! message.expression=Aritmeti\u010dni izraz: Izberi mesto! message.area=Obarvani mnogokotnik: Ogli\u0161\u010de? message.text=Tekst: Izberi prostor! message.animator.point=Animacija: To\u010dka za animacijo? message.animator.segment=Animacija: Kro\u017enica ali daljica? message.animator.running=Animacija: Te\u010de! message.range.first=Nari\u0161i kro\u017enico od te to\u010dke ... message.range.second=... do te to\u010dke! message.setaway.away=Stran od te to\u010dke! message.setaway.close=Zapri do te to\u010dke! objectsedit.title=Uredi lastnosti point.type.square=Kvadratek point.type.diamond=Karo point.type.circle=Kro\u017eec point.type.dot=Pika color.type.normal=Privzeta color.type.thick=Debela color.type.thin=Tanka color.type.invisible=Nevidna text.point=To\u010dka s koordinatama %, % text.line=Premica skozi % in % text.segment=Daljica od % do % text.segment.fixed=Daljica od % do % z dol\u017eino % text.ray=Poltrak z vrhom v % v smeri % text.intersection=Prese\u010di\u0161\u010de % in % text.circle=Kro\u017enica s sredi\u0161\u010dem v to\u010dki % skozi to\u010dko % text.circle.fixed=Kro\u017enica s sredi\u0161\u010dem v to\u010dki % skozi % s polmerom % text.fixedcircle=Kro\u017enica s sredi\u0161\u010dem v to\u010dki % s polmerom % text.circle3=Kro\u017enica s sredi\u0161\u010dem v to\u010dki % s polmerom od % do % text.parallel=Vzporednica skozi % k % text.midpoint=Sredi\u0161\u010de daljice, dolo\u010dene s to\u010dkama % in % text.quadric=Sto\u017enica skozi % text.plumb=Pravokotnica skozi % na % text.angle=Kot % - % - % text.angle.fixed=Kot % - % - % velikosti % text.boundedpoint=To\u010dka na % text.expression=Izraz "%" pri %, % text.area=Mnogokotnik text.fixedangle=Kot % - % z velikostjo % name.Point=To\u010dka name.Intersection=Prese\u010di\u0161\u010de name.OtherIntersection=Prese\u010di\u0161\u010de name.Circle=Kro\u017enica name.Circle3=Kro\u017enica name.Segment=Daljica name.Ray=Poltrak name.Line=Premica name.TwoPointLine=Premica skozi dve to\u010dki name.Parallel=Vzporednica name.Midpoint=Sredi\u0161\u010de name.Quadric=Kadrat name.Plumb=Pravokotnica name.Angle=Kot name.PointOn=To\u010dka-objekt name.Expression=Izraz name.Polygon=Mnogokotnik name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=p name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=pl name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=poligon prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.angle==a(,,) prompt.area=A(,,) popup.hidden=Prika\u017ei skrite objekte popup.replay=Ponovi konstrukcijo popup.empty=-- Makroji -- replay.title=Potek konstrukcije reorder.title=Postavi objekt reorder.message=vrini za reorder.notfound=Ne najdem objekta! reorder.warning=Ne morem narediti tega! setgrid.title=\u0160irina mre\u017ee setgrid.prompt=Nova \u0161irina mre\u017ee setgrid.set=Dolo\u010di definemacro.title=Definicija makroja definemacro.name=Ime definemacro.comment=Komentar za makro definemacro.parameters=Vnos parametra(ov) definemacro.noparams=Potrebujem parametre za makro! definemacro.nomacro=Ni makroja za zagon! definemacro.targetsonly=Skrij konstrukcijo definemacro.invisible=Skrij vse definemacro.promptfor=Sprejmi macro.replace.title=Zamenjava makroja macro.replace=Zamenjaj makro: macro.replace.all=Vse macro.usage=Napa\u010dna uporaba makroja (glej namige)! macro.prompt.title=Vnos parametrov macro.prompt.prompt=Vnesi vrednost za parameter macro.prompt.illegal=Neustrezna vrednost! digits.title=Nastavljanje decimalnih mest digits.edit=Uredi digits.lengths=Prikaz digits.angles=Koti editrun.title=Urejanje opisne konstrukcije editrun.run=Shrani in za\u017eeni editrun.load=Drugi opisi sure.title=Zbri\u0161em vse makroje? sure.macros=Si prepri\u010dan? sure.delete=Pozabim trenutne spremembe? close.title=Konec close.prompt=Zares zaprem program? file.exists.title=Datoteka obstaja file.exists.overwrite=Datoteka obstaja! Pi\u0161em preko nje? exception.nparams=Neustrezno \u0161tevilo parametrov! exception.notfound=Ne najdem objekta, ali je pa definiran za objektom! exception.type=Napa\u010dna vrsta objekta! exception.expression=Napa\u010den izraz! exception.canfix=Ne morem dolo\u010diti vrednosti objektu ! exception.fix=Napa\u010dna vrednost! exception.novalue=Napa\u010dna vrednost! exception.elementary=Neustrezen element v objektu! exception.bracket=Manjka zaklepaj! exception.quotes=Manjka narekovaj! exception.dot=Dve decimalni piki v \u0161tevilu! exception.nodigit=Ne najdem decimalnih mest v \u0161tevilu! exception.function=Neznana funkcija! exception.parameter=Neustrezni parametri funkcije! exception.macro=Neustrezni parametri za makro! exception.name=Potrebno je ime! exception.job=Neustrezni parametri za nalogo! exception.track=Neustrezni parametri za sled! exception.animate=Neustrezni parametri za animacijo! exception.boolean=Boolean spremenljivka ima vrednost "je res" ali "ni res"! exception.value=Neustrezna vrednost! exception.color=Neustrezna barva! exception.colortype=Neustrezna debelina! exception.type=Neustrezna oblika to\u010dke! exception.macroparameter=Neustrezni parametri makroja! exception.macrotarget=Neustrezni cilj makroja! exception.prompt=Neustrezen vnos! exception.prompt.parameter=Posredovani objekt ni parameter! exception.parameters=Neveljavni parametri! exception.brackets=Neustrezni oklepaji! exception.double=Ime je \u017ee uporabljeno! error.setaway=To\u010dka ni dolo\u010dena, dokler ni prese\u010di\u0161\u010da! error.objecttracker.depends=To\u010dka je povezana z drugim objektom! constructiondisplay.title=Opis konstrukcije function.hide=Skrij function.hide.short=skrij function.rename=Premenuj function.rename.short=premenuj function.value=Vrednost function.value.short=vrednost function.window=Okno function.window.short=okno function.color=Barva function.color.short=barv function.thickness=Debelina function.thickness.short=deb function.type=Oblika function.type.short=oblika function.partial=Delno function.partial.short=del function.fill=Zapolni function.fill.short=zapolni function.back=V ozadje function.back.short=v ozadje function.away=Razlo\u010di od function.away.short=lo\u010di function.closeto=Bli\u017ee function.closeto.short=bli\u017ee function.acute=Poudarjeno function.acute.short=poudarjeno function.obtuse=Topokotno function.obtuse.short=topokotno function.solid=Enobarvno function.solid.short=enobarvno function.restrict=Omejeno function.restrict.short=omejeno expression.value=Vrednost configure.title=Nastavi brskalnik configure.prompt=Ukaz za brskalnik parameter=Parameter parameter.short=Par target=Cilj target.short=cilj macro=Makro macro.short=makro away=Razlo\u010di od away.short=lo\u010di end=Konec end.short=konec invisible=Skrito invisible.short=skrito showall=Vidno showall.short=vidno # New Resources: background.error=Ne morem nalo\u017eiti slike (GIF ali JPG!). menu.background=Ozadje menu.background.grab=Trenutno kot ozadje menu.background.clear=Zbri\u0161i ozadje menu.background.load=Nalo\u017ei sliko za ozadje ... menu.background.usesize=Velikost okna menu.background.tile=Popolnjeno ozadje menu.background.center=Usredinjeno ozadje iconhelp.grab=Postavi ali zbri\u0161i ozadje filedialog.backgroundload=Nalo\u017ei ozadje filedialog.backgroundload.action=Nalo\u017ei # Novi viri v verziji 2.14 menu.file.compress=Vedno stisni podatke menu.file.savesvg=... datoteko SVG # Novi viri v verziji 2.15 loading=Nalagam konstrukcijo, po\u010dakajte prosim... # Novi viri v verziji 2.18 in 2.19 menu.settings.font.default=Uporabi navadni tekstovni nabor menu.settings.font.bold=Odebeljene \u010drke menu.settings.font.large=Ve\u010dje \u010drke menu.file.saveeps=... datoteko EPS menu.fonts=Pisava # Novi viri v verziji 2.20 bmpscaler.title=Velikost slike bitmap bmpscaler.width=\u0160irina bmpscaler.height=Vi\u0161ina bmpscaler.scale=Faktor (vnos preko tipkovnice) bmpscaler.illegal=Nemogo\u010da vrednost # Novi viri v verziji 2.21 renamemacro.title=Preimenovanje makroja renamemacro.name=Novo ime makroja menu.special.renamemacro=Preimenovanje makroja ... # Version 2.23 savequestion.title=Shrani konstrukcijo savequestion.qsave=Shranim konstrukcijo? # Version 2.25 exception.printsize=Ppremajhna stran za to konstrukcijo! iconhelp.nohelp=Ni pomo\u010di iconhelp.type?=Oblika to\u010dke iconhelp.thickness?=Debelina iconhelp.color?=Barva iconhelp.filled=Zapolnjen objekt iconhelp.isback=Objekt je v ozadju iconhelp.inverse=Zrcaljen kot iconhelp.angle?=Velikost # Version 2.28 message.objecttracker.stop=Sled: Ustavi animacijo (Dvigalka + pu\u0161\u010dica levo/desno za hitrost)! # Version 2.31 menu.settings.indicate=Pregled generiranih objektov menu.options.other=Nastavitve menu.help.welcome=Novosti v trenutni razli\u010dici iconhelp.twolines=Ikone v dveh vrsticah iconhelp.qintersection=Vpra\u0161aj za prese\u010di\u0161\u010de iconhelp.qchoice=Prika\u017ei dialog za izbiro objektov iconhelp.qpointon=Vpra\u0161aj za postavitev to\u010dke na objekt iconhelp.noindicate=Ne ozna\u010duj objektov, ko ji pokriva mi\u0161ka # Version 2.33 menu.file.new=Nova konstrukcija (Ctrl-n) # Version 2.34 edit.text.title=Nastavitve teksta edit.text.settings=Nadaljnje nastavitve menu.settings.filedialog=Posebna izbira datotek # Version 2.35 menu.settings.bitmapbackground=Uporabi barvo ozadja v bitni sliki # Version 2.36 menu.file.savegraphics=Shrani sliko kot ... menu.file.savepng=... datoteko PNG bmpscaler.title=Skaliraj sliko # Version 2.37 menu.file.savepdf=... datoteko PDF iconhelp.chord=prika\u017ei kot odsek # Version 2.39 message.setfixedangle.first=Postavi kot z velikostjo: Prva to\u010dka? message.setfixedangle.second=Postavi kot z velikostjo: Vrh kota? message.setfixedangle.first=Postavi kot z velikostjo: Tretja to\u010dka? edit.fixedangle.set=Nastavi velikost ... message.setfixedcircle.first=Postavi krog s konstantnim premerom: Prva to\u010dka? message.setfixedcircle.second=Postavi krog s konstantnim premerom: Druga to\u010dka? edit.fixedcircle.set=Nastavi velikost ... # Version 2.40 minpointsize.title=Najmanj\u0161a velikost to\u010dke minpointsize.prompt=Najmanj\u0161a velikost to\u010dke (za\u010detna: 3) menu.settings.font.minpointsize=Najmanj\u0161a velikost to\u010dke ... # Version 2.41 name.short.Track=Sl text.track=Sled to\u010dke %, ko se % premika k % trackquestion.keep=Vklju\u010dimo geometrijsko mesto to\u010dk v konstrukcijo? trackquestion.title=Shranim geometrijsko mesto to\u010dk menu.options.track=Prevzem sledi geometrijske lege to\u010dk (Dvigalka-Enter) iconhelp.indicate=Pregled rezultatov konstrukcije iconhelp.nohelp=Nobene pomo\u010di ni na voljo! # Version 2.42 objects.draw=Skiciranje z mi\u0161ko menu.options.cleardraw=Brisanje skiciranega (Esc) iconhelp.draw=Skiciranje z mi\u0161ko message.draw=Skiciranje z mi\u0161ko (Esc za brisanje) shortcuts.draw=; # Version 2.43 message.move.select=Premikanje to\u010dke: Izberi to\u010dko (Dvigalka: Prikazuj izvorni polo\u017eaj)? message.rename=Preimenuj v A,B,C,...: To\u010dke? iconhelp.rename=Preimenovanje v A,B,C,... objects.rename=Preimenovanje v A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Ne prika\u017ei kraka kota # Version 2.45 menu.settings.smartboard=Na\u010din neaktivne risalne povr\u0161ine shortcuts.zoom=% objects.zoom=Spreminjanje pogleda z mi\u0161ko message.zoom=Premik sredi\u0161\u010da ali pove\u010danje/pomanj\u0161anje slike # Version 2.46 menu.special.restricticons=Nastavitev omejenega nabora ikon # Version 2.47 menu.settings.indicate.simple=Le ozna\u010di to\u010dke menu.settings.beginner=Enostavni na\u010din question.again=Vedno vpra\u0161aj. # Version 2.49 definemacro.parameters=Vnos parametrov(s) ("=ime" dolo\u010deno) # Version 2.53 menu.actions.angles=Kot menu.actions.circles=Kro\u017enice menu.actions.lines=Premica menu.actions.points=To\u010dka # Version 2.57 info.title=Teme s pomo\u010djo info.related=Poglej tudi ... info.notfound=Ne najdem teme s pomo\u010djo! info.noresults=Ne najdem iskanega! info.searchresults=- Najdeno - info.select=- Izbira - info.search=I\u0161\u010di info.back=Nazaj info.start=Za\u010dni iconhelp.info=Teme s pomo\u010djo menu.help.info=Teme s pomo\u010djo (F1) myfiledialog.home=Doma\u010da mapa myfiledialog.homedir=R.i.\u00a9 - datoteke myfiledialog.windowshome=Moje datoteke myfiledialog.mkdir=Nova mapa myfiledialog.back=Prekli\u010di menu.file.alwaysclearmacros=Brisanje makrojev pred branjem sure.macros=Zbri\u0161em vse uporabnikove makroje? about.language=Jezik bmpscaler.72dpi=72 dpi bmpscaler.72dpi=300 dpi # Version 3.01 menu.settings.backups=Varnostne kopije # Version 3.02 menu.options.hideduplicates=Skrij podvojen objekt # Version 3.03 menu.options.function=Funkcije ali krivulje text.function=Funkcija ( % , % ) function.varmin=Od function.varmax=Do function.dvar=Korak function.var=Spremenljivka function.x=x function.y=Izraz za y iconhelp.function=Vnos funkcije ali krivulje menu.options.editlast=Uredi zadnji objekt iconhelp.control.edit=Urejanje zadnjega objekta iconhelp.control.hide=Skrivanje podvojenega objekta edit.function.title=Funkcije ali krivulje iconhelp.control.runmacro=Ponovni zagon zadnjega makroja # Version 3.05 point.type.cross=Kri\u017eec point.type.dcross=Diagonalni kri\u017eec shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Enota function.valid=Veljavna function.valid.short=veljavna function.close=Pribli\u017ena function.close.short=pribli\u017ena menu.special.break=Prekinitvene to\u010dke menu.bp.setbreak=Postavljanje prekinitvenih to\u010dk menu.bp.clearbreak=Brisanje prekinitvenih to\u010dk menu.bp.sethidingbreak=Postavljanje skrivnih prekinitvenih to\u010dk menu.bp.animatebreak=Animiranje prekinitvenih to\u010dk iconhelp.animatebreak=Animiranje prekinitvenih to\u010dk message.animatebreak=Prekinitvene to\u010dke: S klikom zadr\u017eimo animacijo (Dvigalka levo/desno za hitrost)! menu.special.exporttemplate=HTML izvoz s predlogo templateload.open=Odpri predlogo templateload.open.action=Odpiranje menu.settings.doubleclick=Dvojni klik za makroje # Version 3.12 edit.equation=Ena\u010dba # Version 3.13 warning.load=Pri branju datoteke je pri\u0161lo do napake! warning.save=Pri shranjevanju datoteke je pri\u0161lo do napake! warning.save.backup=Pri varnostnem shranjevanju datoteke je pri\u0161lo do napake! warning.template=Pri urejanju predloge je pri\u0161lo do napake! myfiledialog.olddirs=Prej\u0161nje mape # Version 3.23 menu.settings.minwidth=shranjene bodo minimalne vrednosti pri izvozu grafike menu.settings.squarepoints=To\u010dke ri\u0161i kot kvadratke # Version 3.37 menu.options.export=Nastavitve za izvoz grafike menu.settings.minwidth=Najmanj\u0161a debelina \u010drte je 1 menu.settings.minpointsize=Upo\u0161tevaj najmanj\u0161o velikost to\u010dke menu.settings.minfontsize=Upo\u0161tevaj najmanj\u0161o velikost pisave minfontsize.title=Nastavitev najmanj\u0161e velikosti pisave minfontsize.prompt=Najmanj\u0161a velikost pisave (privzeta velikost: 12) menu.options.minpointsize=Najmanj\u0161a velikost to\u010dke ... menu.options.minfontsize=Najmanj\u0161a velikost pisave ... # Version 3.38 menu.settings.scalepdf=Razmerje v PDF in EPS sliki 1:1 # Version 3.41 menu.file.clip=Okno za prikaz grafike ... clip.title=Nastavitev okna clip.width=\u0160irina clip.height=Vi\u0161ina clip.screen=Ni okna # Version 3.42 menu.options.arrowsize=Velikost pu\u0161\u010dice ... arrowsize.title=Nastavitev velikosti pu\u0161\u010dice arrowsize.prompt=Velikost pu\u0161\u010dice # Version 3.44 iconhelp.large=Ve\u010dja pisava iconhelp.bold=Krepka pisava menu.options.largefont=Ve\u010dja pisava menu.options.boldfont=Krepka pisava warning.previewframe=Okno je ve\u010dje kot je risalna povr\u0161ina! message.move.select=Premakni to\u010dko ali drug objekt (Dvigalka: ve\u010d objektov, Ctrl: viden original)? # Version 3.46 iconbar.showseparators=Prikaz razmejilnikov orodij # Version 3.5 menu.sizes=Najmanj\u0161e velikosti menu.options.minlinesize=Najmanj\u0161a debelina \u010drte ... minlinesize.title=Nastavitev najmanj\u0161e debeline \u010drte minlinesize.prompt=Najmanj\u0161a debelina \u010drte (Privzeta: 1) arrowsize.prompt=Velikost pu\u0161\u010dice (Privzeta: 10) menu.options.printscaler=Nastavitve velikosti izvoza grafike ... menu.options.exportsettings=Posebne nastavitve velikosti izvoza grafike ... printscaler.title=Izvoz grafike printscaler.width=\u0160irina (v cm) printscaler.height=Vi\u0161ina (v cm) printscaler.dpi=Resolucija (v dpi, obi\u010dajno 300) printscaler.linewidth=Debelina \u010drte (v cm, obi\u010dajno 0.02) printscaler.pointsize=Velikost to\u010dke (v cm, obi\u010dajno 0.07) printscaler.textsize=Velikost teksta (v cm, obi\u010dajno 3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=\u0160irina (v to\u010dkah) printscaler.h=Vi\u0161ina (v to\u010dkah) printscaler.scale=Razmerje (relativno glede na zaslonsko sliko) printscaler.middle=Izrez (nepove\u010dan) printscaler.sizes=Nastavi razmerje za \u010drte, tekst in to\u010dke menu.file.savepng=Shrani sliko v formatu PNG... warning.preview=Predogled v celoti deluje \u0161ele v veriji Jave > 1.4 iconedit.showseparators=Razmejitve ikon printscaler.aspect=Obdr\u017ei razmerje slike printscaler.presets=Predpisane vrednosti printscaler.preset=Izberi ... printscaler.preset.300dpi=natan\u010dno razmerje z 300 dpi printscaler.preset.300dpi6=6 cm \u0161irine s 300 dpi printscaler.preset.300dpi16=16 cm \u0161irine s 300 dpi printscaler.preset.window=Velikost okna printscaler.preset.clip50=50% Velikosti okna, izrezano message.saving=Po\u010dakaj prosim! menu.options.printscalepreview=Predogled izvoza grafike (Ctrl-F3) date=Datum nastanka konstrukcije # Version 3.51 help=Pomo\u010d # Version 3.61 editconditionals.title=Pogojno oblikovanje editconditionals.hidden=Skrito editconditionals.superhidden=Popolnoma skrito editconditionals.visible=Obi\u010dajno editconditionals.showname=Prikaz imena editconditionals.showvalue=Prikaz vrednosti editconditionals.background=Ozadje editconditionals.solid=Neprozorno exception.superfluous=Dodatni tekst v izrazu # Version 3.62 menu.options.selectionsize=Nastavi izbrano obmo\u010dje selectionsize.title=Izbrano obmo\u010dje selectionsize.prompt=Izbrano obmo\u010dje (privzeto 1.5 to\u010dke) # Version 3.63 select.comment.title=Komentar makroja jobcomment.title=Tekst naloge # Version 3.68 edit.area.area=Povr\u0161ina # Version 3.73 myfiledialog.oldfiles=Prej\u0161nje datoteke # Version 3.74 iconhelp.load=Odpri konstrukcijo (Ctrl-o) iconhelp.save=Shrani konstrukcijo (Ctrl-s) iconhelp.new=Nova konstrukcija (Ctrl-n) # Version 3.81 warning.loadbackground=Napaka pri nalaganju ozadja # Version 3.9 function.x=Izraz za x (prazno pri exsplicitni obliki) # Version 3.91 constructiondisplay.select=Izbira constructiondisplay.all=Vsi objekti constructiondisplay.visible=Vidni objekti constructiondisplay.points=To\u010dke constructiondisplay.lines=Premice in daljice constructiondisplay.circles=Kro\u017enice constructiondisplay.angles=Koti constructiondisplay.expressions=Izrazi constructiondisplay.other=Ostali objekti menu.file.copypng=Slika iz odlo\u017ei\u0161\u010da exception.clipboardcopy=Napaka pri shranjevanju na odlo\u017ei\u0161\u010de! menu.options.finegrid=Le koordinatni osi # Vesion 3.93 edit.function.center=Izbira sredi\u0161\u010da edit.function.free=Sredi\u0161\u010de v izhodi\u0161\u010du message.setcenter=Izbira sredi\u0161\u010da krivulje! # Vesion 3.94 message.edit=Lastnosti objektov? (Dvigalka: ve\u010d objektov, Ctrl: pogojno oblikovanje) # Version 3.95 edit.function.special=Le to\u010dke # Version 3.97 error.image=Napaka pri nalaganju slike! filedialog.imageload=Nalaganje slike filedialog.imageload.action=Nalaganje message.image=Vogalna to\u010dka prompt.image=image(,,,) objects.image=Slika shortcuts.image=_ # Version 3.98 exception.depends=Objekt % je odvisen od tega objekta. error.depends=Objekt % je odvisen od tega objekta. constructiondisplay.sorted=Urejanje po nastanku # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Izrazi # Version 4.00 iconhelp.image=Dodajanje slike (_)+2 ali 3 vogalne to\u010dke message.image=Vogalna to\u010dka % za sliko message.image.last=Zadnja vogalna to\u010dka (po izbiri) editconditionals.z=Z-vrednost # Version 4.01 name.FixedAngle=Kot s konstantno velikostjo # Version 4.04 menu.moresettings=Nastavitve menu.settings.language=Nastavi jezik language.title=Nastavi jezik language.prompt=Jezik za naslednji zagon programa # Version 4.05 constructiondisplay.invalid=Neveljavni objekt # Version 4.08 menu.settings.constructiondisplay=Prikaz konstrukcije (F11) menu.settings.constructiondisplay=Prikaz seznama objektov (F11) constructiondisplay.editconditions=Obdelava pogojev constructiondisplay.delete=Brisanje izbranih objektov constructiondisplay.hide=Skrij ali prika\u017ei constructiondisplay.superhide=Dokon\u010dno skrivanje # Version 4.09 constructiondisplay.editconditions=Uredi pogoje constructiondisplay.delete=Zbri\u0161i izbrane objekte constructiondisplay.hide=Skrij ali prika\u017ei constructiondisplay.superhide=Dokon\u010dno skrij # Version 4.2 edit.expression.slider=Prika\u017ei kot sledilnik menu.grid.options=Mo\u017enosti mre\u017ee menu.options.leftsnap=Ne postavljaj to\u010dk diskretno menu.settings.boundingbox=Izdelaj datoteko Bounding Box (bb) # Version 4.3 latexsettings.title=Nastavitev izvoza za LaTeX latexsettings.boundingbox=Izdelaj Bounding box bb-datoteko latexsettings.latexinput=Izdelaj LaTeX idx-datoteko latexsettings.doubledollar=LaTeX za $$...$$ latexsettings.dollar=LaTeX za $...$ latexsettings.nodollar=LaTeX za vse ostale nize latexsettings.fullpath=Uporabi pot datoteke printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=12 cm s \u0161irino 300 DPI printscaler.latex=Shrani za LaTeX menu.background.usewidth=Poravnaj le vi\u0161ino # Version 4.4 menu.options.restricted=Omejena prese\u010di\u0161\u010da menu.options.sizes=Nastavi velikosti ... sizesdialog.title=Velikosti minlinesize.prompt=Minimalna debelina premice (privzeto: 1) minpointsize.prompt=Minimalna velikost to\u010dke(privzeto: 3) minfontsize.prompt=Minimalna velikost pisave (privzeto: 12) arrowsize.prompt=Velikost pu\u0161\u010dice (privzeto: 10) selectionsize.prompt=Velikost izbora (privzeto: 1.5) warning.loadmacros=Napaka med nalaganjem makroja! warning.macrodefinition=% je uporabljeno, a ni v makroju! edit.circle.bounds=Prika\u017ei kot lok edit.circle.range=Nastavi lok ... # Version 4.5 edit.track.dmin=Minimalni korak (privzeto 0.001) # Version 4.6 menu.settings.smallicons=Uporabi manj\u0161e ikone menu.settings.oldicons=Uporabi stare ikone # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof=Spremenjeno geometrijsko mesto % \u010de je % # Version 5 # Fix error.image edit.discrete=Diskretno error.fixedsegment=Ta daljica ne more imeti konstantne velikosti! export.zoom=Zoom z mi\u0161ko export.popup=Popup meni # Version 5.1 edit.intersection.alternate=Izmenjujo\u010de presei\u0161\u010de export.restrictedmove=Ne dovoli premikanja message.bindpoint=Pove\u017ei to\u010dko z objektom (Dvigalka: z mejo, Ctrl: meja in notranjost) edit.point.inside=V notranjosti edit.point.increment=S korakom (0=zvezno) edit.more=Dodatno ..../src/rene/zirkel/docs/ZirkelProperties_es.properties0000770000175000017500000011231610655647770022070 0ustar yvesyveslanguage=es_ version=Version homefile=index.html homepage=http://www.z-u-l.de/ about.title=Acerca de este programa about.name=Geometra Escolar about.programmed=Desarrollado por title=Geometra Escolar close=Cerrar ok=OK cancel=Cancelar done=Muy bien! message=Mensaje yes=Si no=No abort=anular true=verdadero false=falso warning.nojob=Esto no es un ejercicio! warning.print=No se puede imprimir! warning.reset=Esta opcin estar disponible la prxima vez que abra R.y.C.! question.title=Pregunta question.intersection=Crear esta interseccin? question.pointon=Crear punto en este objeto? colors.black=Negro colors.blue=Azul colors.green=Verde colors.brown=Cafe colors.cyan=Turqueza colors.red=Amarillo objects.point=Punto objects.segment=Segmento objects.line=Recta objects.ray=Semirrecta objects.circle=Crculo objects.intersection=Interseccin objects.move=Mover Punto objects.hide=Ocultar Objeto objects.edit=Editar Punto objects.tracker=Traza de Punto objects.objecttracker=Traza de Punto sobre Objeto objects.parallel=Recta paralela objects.plumb=Recta perpendicular objects.circle3=Comps objects.midpoint=Punto medio objects.quadric=Cnica objects.angle=Angulo objects.boundedpoint=Punto sobre Objeto objects.parameter=Definir parmetros de Macro objects.targets=Definir objetivos de Macro objects.definejob=Definir Ejercicio objects.runmacro=Ejecutar una Macro objects.delete=Borrar objetos y sus hijos objects.reorder=Reordenar objetos objects.animate=Animacin objects.expression=Frmula objects.area=Polgono objects.text=Texto objects.fixedcircle=Crculo de radio fijo objects.fixedangle=Angulo fijo objects.fixedsegment=Segmento de longitud fija iconhelp.point=Punto iconhelp.segment=Segmento iconhelp.line=Recta iconhelp.ray=Semirrecta iconhelp.circle=Crculo iconhelp.intersection=Interseccin iconhelp.move=Mover Punto iconhelp.hide=Ocultar Objeto iconhelp.edit=Editar Objeto iconhelp.tracker=Traza de Punto iconhelp.objecttracker= Traza Automtica iconhelp.parallel=Recta paralela iconhelp.plumb=Recta perpendicular iconhelp.circle3=Comps iconhelp.midpoint=Punto medio iconhelp.quadric=Cnica iconhelp.angle=Angulo iconhelp.boundedpoint=Punto sobre Objeto iconhelp.hidden=Mostrar u Ocultar Objetos ocultos iconhelp.color= Color predeterminado de Objeto iconhelp.type= Tipo predeterminado de Punto iconhelp.thickness=Grosor predeterminado de Objeto iconhelp.back=Borrar el ltimo Objeto iconhelp.type0=Tipo predeterminado de Punto iconhelp.thickness0=Grosor predeterminado de Objeto iconhelp.partial=Crculos Truncados iconhelp.plines=Rectas Truncadas iconhelp.arrow=Segmentos como Vectores iconhelp.showcolor=Mostrar colores seleccionados iconhelp.runmacro=Ejecutar Macro iconhelp.macro=Macro Parmetros/Objetivos/Definicin iconhelp.expression=Frmula iconhelp.showvalue=Mostrar valores de objetos iconhelp.showname=Mostrar nombre de objetos iconhelp.obtuse=Usar ngulos obtusos iconhelp.solid=No usar transparencia iconhelp.longnames=Nombres largos iconhelp.grid=Mostrar cuadrcula iconhelp.comment=Mostrar comentario iconhelp.defaults=Configuracin predeterminada iconhelp.macro0=Macro Parmetros/Objetivos/Definicin iconhelp.visual=Construccin Visual iconhelp.replay=Revisar Construccin iconhelp.oneforward=Adelante iconhelp.fastforward=Adelantar varios pasos iconhelp.allforward=Ir al fin iconhelp.oneback=Atras iconhelp.fastback=Atrasar varios pasos iconhelp.allback=Ir al comienzo iconhelp.close=Cerrar iconhelp.area=Polgono iconhelp.text=Texto iconhelp.fixedcircle=Crculo de radio fijo iconhelp.fixedangle=Angulo de amplitud fija iconhelp.fixedsegment=Segmento de longitud fija iconhelp.animate=Animar un punto iconhelp.delete=Borrar un objeto iconhelp.undo=Deshacer borrar iconhelp.nextbreak=Ir al siguiente alto iconhelp.setbreak=Toggle Break iconhelp.zoom=Zoom con el raton shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shurtcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.polygon=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.4=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) menu.file=Archivo menu.file.clearmacros=Borrar todas las macros menu.file.load=Abrir Construccin ... (Ctrl-o) menu.file.loadjob=Abrir Ejercicio ... (Ctrl-j) menu.file.savejob=Guardar Ejercicio como ... (Ctrl-k) menu.file.save=Guardar Construccin (Ctrl-s) menu.file.saveas=Guardar Construccin como ... (Ctrl-a) menu.file.includemacros=Incluir Macros menu.file.exit=Salir (Alt-F4) menu.file.print=Imprimir ... menu.file.print.isoscale=Escala 1:1 en cm menu.file.loadrun=Abrir Construccin Descriptiva (Ctrl-r) menu.file.savefig=FIG menu.file.editrun=Editar Construccin Descriptiva (Ctrl-x) menu.file.savebmp=BMP menu.actions=Acciones menu.actions.elementary=Herramientas bsicas menu.actions.complex=Herramientas complejas menu.actions.fixed=Objetos Fijos menu.actions.move=Herramientas de Movimiento menu.actions.decorative=Objetos Decorativos menu.options=Opciones menu.options.visual=Modo Visual menu.options.hidden=Mostrar objetos ocultos (F9) menu.options.comment=Comentario (F10) menu.options.constructiondisplay=Descripcin (F11) menu.options.grid=Mostrar Cuadrcula (F12) menu.options.setgrid=Definir ancho de cuadrcula ... menu.options.showcolor=Mostrar Color menu.options.defaultcolor=Color predeterminado menu.options.defaultthickness=Grosor predeterminado menu.options.defaulttype=Tipo predeterminado de punto menu.options.all=todos menu.options.setdigits=Nmero de dgitos menu.options.shownames=Mostrar nombres objetos (Ctrl-F6) menu.options.longnames=Nombres largos (Ctrl-F8) menu.options.obtuse=Usar ngulos obtusos (Ctrl-F12) menu.options.solid=No usar transparencia menu.options.showvalues=Mostrar valores (Ctrl-F7) menu.options.partial=crculos truncados (Ctrl-F9) menu.options.plines=Rectas Truncadas (Ctrl-F10) menu.options.arrow=Vector (Ctrl-F11) menu.options.editicons=Editar las herramientas menu.options.back=Borrar ltimo objeto (<-) menu.options.undo=Deshacer borrar (Ctrl-z) menu.zoom=Zoom menu.zoom.in=In (+) menu.zoom.out=Out (-) menu.zoom.left=Izquierda (Cursor-Left) menu.zoom.right=Derecha (Cursor-Right) menu.zoom.up=Arriba (Cursor-Up) menu.zoom.down=Abajo (Cursor-Down) menu.macros=Macros menu.special.definemacro=Definir Macro (Ctrl-F5) menu.special.runmacro=Ejecutar Macro (F5) menu.special.savemacros=Guardar Macros menu.special.loadmacros=Abrir Macros menu.special.deletemacros=Borrar Macros menu.special=Especial menu.special.testjob=Probar Ejercicio (Ctrl-F1) menu.special.jobcomment=Texto del Ejercicio (Ctrl-F10) menu.special.export=Exportar como HTML (Ctrl-e) menu.special.replay=Revisar Construccin menu.help=Ayuda menu.help.about=Acerca de este programa menu.help.browser=Explorar la Ayuda y Demos menu.help.text=Ayuda corta menu.help.configure=Configurar el navegador menu.help.help=Ayuda (F1) menu.help.macros=Las Macros menu.help.tools=Las Herramientas menu.help.gui=La Interface menu.help.interactive=Construcciones Descriptivas menu.help.tips=Consejos menu.settings=Propiedades especiales menu.settings.fullicons=Dos barras de iconos menu.settings.utf=Usar codificacin UTF-8 menu.settings.autohide=Ocultar la segunda interseccin menu.settings.iconbartop=Barra de herramientas arriba menu.settings.showtips=Mostrar nombre herramientas menu.settings.simplegraphics=Usar siempre Grficas simples menu.settings.sure=Confirmar antes de Abrir o cerrar menu.settings.simplegraphics=Grficas simples menu.settings.pointon=Confirmar creacin punto sobre objeto menu.settings.intersection=Confirmar creacin punto de interseccin menu.settings.choice=Mostrar lista de objetos menu.settings.movename=Mostrar los valores mientras se mueven menu.settings.movefixname=Mostrar los valores de objetos fijos menu.settings.restricted=Modo Escolar menu.colors=Editar los colores colors.default=Predefinidos colors.color0=Color 1 (negro) colors.color1=Color 2 (verde) colors.color2=Color 3 (azul) colors.color3=Color 4 (caf) colors.color4=Color 5 (Turqueza) colors.color5=Color 6 (Amarillo) colors.background=Fondo colors.select=Seleccionar colors.target=Objetivo myfiledialog.dir=Directorio myfiledialog.file=Archivo myfiledialog.pattern=tipo de archivo filedialog.open=Abrir filedialog.saveas=Guardar como ... filedialog.open.action=Abrir filedialog.saveas.action=Guardar filedialog.htmlsave=Guardar como HTML filedialog.htmlsave.action=Guardar pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Guardar load=Abrir abort=anular bound.release=Independizar Punto bound.bind=Atar a Objeto bound.error=No se encontr el objeto! constructiondisplay.edit=Editar Objeto constructiondisplay.copy=Copiar al portapapeles edit.Title=Propiedades edit.name=Nombre edit.hidden=Oculto edit.text=Texto edit.fixed=Fijo edit.color=Color edit.ok=OK edit.cancel=Cancelar edit.showname=Mostrar Nombre edit.point.title=Propiedades Punto edit.point.type=Tipo edit.point.x=X edit.point.y=Y edit.point.intersection=Diferente de edit.point.showvalue=Mostrar Coordenadas edit.point.colortype=Grosor edit.point.bound=Objeto al que pertenece edit.point.away=Lejos de edit.point.close=Cerca a edit.point.free=Libre edit.line.title=Propiedades Recta, semirrecta, segmento edit.line.normal=Normal edit.line.thick=Grueso edit.line.thin=Delgado edit.line.type=Tipo edit.segment.length=Longitud edit.segment.showvalue=Mostrar Longitud edit.circle.title=Propiedades crculo edit.circle.length=Radio edit.circle.partial=Truncada edit.circle.range=Definir rango edit.circle.killrange=Borrar rango edit.plumb.restricted=Restringida edit.angle.title=Propiedades Angulo edit.angle.length=Amplitud edit.angle.displaysize=Mostrar amplitud edit.angle.normal=Normal edit.angle.small=Pequeo edit.angle.large=Grande edit.expression.title=Editar Frmula edit.expression=Expresin Aritmtica edit.expression.prompt=Explicacin edit.area.title=Editar Area edit.area.back=En el fondo export.title=Exportar como HTML export.pagetitle=Titulo de la pgina export.width=Ancho export.height=Alto export.jar=Archivo Jar export.comment=Guardar comentario export.file=Archivo de construccin export.job=Mostrar como Ejercicio export.color=Color export.backgroundcolor=Usar como fondo export.appletcolor=Usar como fondo del applet export.plain=Plano export.3D=Borde export.breaks=Revisar con saltos export.icons=Borde e Iconos export.full=Borde, Iconos y Estado export.nonvisual=Borde, Iconos y linea de entrada export.style=Estilo del applet export.setcolor=Seleccionar Color export.savefirst=El archivo no se ha guardado! export.soltext=Solucin export.stylesheet=Archivo de estilo CSS export.solution=Archivo de solucin export.jumpsol=Ir a la Solucin export.linksol=Enlace a la Solucin export.savesol=Guardar Archivo de solucin export.track=Traza de Punto export.digits=Guardar Dgitos export.setsize=Definir Tamao export.signature=Creado con R.y.C. export.colors=Guardar Colores Definidos export.background=Guardar Fondo Definido help.title=Ayuda help.error=No puede abrirse el archivo! help.file=schoolgeometry.txt coloreditor.title=Editar Color coloreditor.red=Rojo coloreditor.green=Verde coloreditor.blue=Azul coloreditor.color=Color personalizado comment.title=Comentario de la construccin comment.set=Definir comment.cancel=Cancelar comment.close=Cerrar iconedit.title=Barra de herramientas iconedit.twobars=Barra de dos lneas jobcomment.title=Ejercicio select.title=Seleccion select.ok=OK select.cancel=Cancelar select.comment=Mostrar Comentario select.all=Todo message.circle.midpoint=crculo: Seleccione el centro! message.circle.radius=crculo: Seleccione un Punto para el radio del crculo! message.fixedcircle.midpoint=crculo de radio fijo: Seleccione el centro! message.fixedcircle.radius=crculo de radio fijo: Haga clic en cualquier parte! message.edit=Editar: Seleccione un objeto! message.line.first=Recta definida por dos puntos: Seleccione el primer Punto! message.line.second=Recta definida por dos puntos: Seleccione el segundo Punto! message.ray.first=Semirrecta: Seleccione el extremo! message.ray.second=Semirrecta: Seleccione un punto de la semirrecta! message.move.select=Mover: Seleccione un Punto! message.move.move=Mover: Mueva el Punto! message.point=Punto: Haga clic en la pantalla! message.segment.first=Segmento: Seleccione el primer Punto! message.segment.second=Segmento: Seleccione el segundo Punto! message.fixedsegment.first=Segmento de longitud fija: Primer extremo! message.fixedsegment.second=Segmento de longitud fija: Segundo extremo! message.intersection.first=Interseccin de dos objetos: Seleccione el primer objeto o el punto de interseccin! message.intersection.second=Interseccin: Seleccione el segundo objeto! message.hide=Ocultar/Mostrar: Seleccione un objeto! message.tracker.select=Traza: Seleccione el punto a trazar! message.tracker.selectpoint=Traza: Seleccione el punto mvil! message.tracker.move=Traza: Mueva el punto! message.objecttracker.select=Traza Automatica: Seleccione el punto a trazar (maysculas si es mas de uno)! message.objecttracker.object=Traza Automatica: Seleccione una Recta, un segmento, una semirrecta o un crculo! message.objecttracker.selectpoint=Traza Automatica: Seleccione el punto mvil! message.objecttracker.selectanypoint=Traza Automatica: Seleccione cualquier otro punto mvil! message.objecttracker.move=Traza Automatica: Mueva el Punto! message.objecttracker.start=Traza Automtica: Comenzar la animacin! message.parallel.first=Paralela: a quin? (recta, segmento, semirrecta)! message.parallel.second=Paralela: por donde? (punto)! message.plumb.first=Recta perpendicular: a quin? (recta, segmento, semirrecta)! message.plumb.second=Recta perpendicular: por donde? (punto)! message.circle3.first=Compas: Seleccione el primer punto del radio! message.circle3.second=Compas: Seleccione el segundo punto del radio! message.circle3.midpoint=Compas: Seleccione el centro! message.midpoint.first=Punto medio: Seleccione el primer Punto! message.midpoint.second=Punto medio: Seleccione el segundo Punto! message.quadric=Cnica: seleccione punto message.angle.first=Angulo: Seleccione el primer punto! message.angle.root=Angulo: Seleccione vrtice! message.angle.second=Angulo: Seleccione el segundo punto! message.fixedangle.first=Angulo de amplitud fija: Primer punto! message.fixedangle.root=Angulo de amplitud fija: Vrtice! message.fixedangle.second=Angulo de amplitud fija: Tercer punto! message.label.select=Mover Etiqueta: Seleccione una etiqueta! message.label.move=Mover Etiqueta: Mueva la etiqueta! message.boundedpoint=Punto sobre Objeto: Seleccione un crculo, un segmento, una semirrecta o una recta! message.parameters=Parmetros de la Macro: Seleccione objetos! message.targets=Objetivos de la Macro: Seleccione objetos! message.savejob.first=Definir Ejercicio: Seleccione el ltimo objeto a mostrar! message.savejob.second=Definir Ejercicio: Seleccione el objeto a construir! message.savejob.third=Definir Ejercicio: Seleccione otros objetos a mostrar! message.runmacro=Macro %: %. (Enter %) % message.runmacro.return=(Enter selecciona %) message.runmacro.fixes=(Mayscula fija la seleccin) message.delete=Borrar: Seleccione un objeto! message.reorder=Reordenar: Seleccione un objeto! message.expression=Frmula: Seleccione un lugar! message.area=Polgono: Seale uno a uno los vrtices! message.text=Text: Seleccione un lugar! message.animator.point=Animacin: animar qu punto? message.animator.segment=Animacin: Sobre qu objeto? (segmento o crculo) message.animator.running=Animacin: funcionando message.range.first=Arco desde este punto ... message.range.second=... hasta este punto! message.setaway.away=Lejos de este punto! message.setaway.close=Cerca a este punto! objectsedit.title=Editar Propiedades point.type.square=Cuadrado point.type.diamond=Diamante point.type.circle=crculo point.type.dot=Punto color.type.normal=Normal color.type.thick=Grueso color.type.thin=Delgado text.point=Punto en %, % text.line=Recta por % y % text.segment=Segmento entre % y % text.segment.fixed=Segmento desde % hasta % con longitud % text.ray=Semirrecta desde % que pasa por % text.intersection=Interseccin entre % y % text.circle=crculo de centro % por % text.circle.fixed=crculo de centro % por % con radio % text.fixedcircle=crculo de centro % con radio % text.circle3=crculo de centro % con radio desde % hasta % text.parallel=Recta por % paralela a % text.midpoint=Punto medio entre % y % text.quadric=Cnica por % text.plumb=Recta por % perpendicular a % text.angle=Angulo % - % - % text.angle.fixed=Angulo % - % - % de amplitud % text.boundedpoint=Punto sobre % text.expression=Frmula "%" en %, % text.area=Polgono text.fixedangle=Angulo % - % de % name.Point=Punto name.Intersection=Interseccin name.OtherIntersection=Interseccin name.Circle=crculo name.Circle3=crculo name.Segment=Segmento name.Ray=Semirrecta name.Line=Recta name.TwoPointLine=Recta con dos puntos name.Parallel=Paralela name.Midpoint=Punto medio name.Quadric=Cnica name.Plumb=Perpendicular name.Angle=Angulo name.PointOn=Punto sobre objeto name.Expression=Frmula name.Polygon=Polgono name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=sr name.short.Line=r name.short.Parallel=par name.short.Midpoint=M name.short.Quadric=Con name.short.Plumb=per name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=pol prompt.point==P prompt.pointon==P() prompt.line==r(,) prompt.segment==s(,) prompt.ray==sr(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Con(,,,,) prompt.parallel==par(,) prompt.plumb==per(,) prompt.angle==a(,,) prompt.area=Pol(,,) popup.hidden=Mostrar objetos ocultos popup.replay=Revisar Construccin popup.empty=--- Macros --- replay.title=Revisar construccin reorder.title=Enviar al fondo reorder.message=Insertar despues de reorder.notfound=No encuentro el objeto! reorder.warning=No puedo hacer eso! setgrid.title=Ancho de cuadrcula setgrid.prompt=Nuevo ancho de cuadricula setgrid.set=Definir definemacro.title=Definir Macro definemacro.name=Nombre definemacro.comment=Comentario de Macro definemacro.parameters=Mensaje de parmetro(s) definemacro.noparams=Faltan los parmetros de la macro! definemacro.nomacro=No hay ninguna macro! definemacro.targetsonly=Solo mostrar objetivos definemacro.invisible=Ocultar totalmente definemacro.promptfor=Mensaje para usuario macro.replace.title=Remplazar Macro macro.replace=Remplazar Macro: macro.replace.all=Todos macro.usage=Uso incorrecto de macro (ver consejos)! macro.prompt.title=Mensaje parmetros macro.prompt.prompt=Escriba un valor para el parmetro macro.prompt.illegal=Valor no vlido! digits.title=Definir dgitos digits.edit=Editar digits.lengths=Mostrar digits.angles=Angulos editrun.title=Editar Construccin Descriptiva editrun.run=Guardar y Ejecutar editrun.load=Otra Descripcin sure.title=Est seguro? sure.macros=Borrar todas las macros? sure.delete=Descartar los cambios? close.title=Fin close.prompt=Quiere cerrar el programa? file.exists.title=Archivo existente file.exists.overwrite=Ya existe el archivo! Sobreescribir? exception.nparams=Nnmero de parmetros no vlido! exception.notfound=No encuentro el objeto, o fue definido despues de la expresin! exception.type=Tipo de Objeto no vlido! exception.expression=Frmula no vlida! exception.canfix=Objeto no puede fijarse! exception.fix=Valor no vlido! exception.novalue=Valor no vlido! exception.elementary=Elemento no vlido en Frmula! exception.bracket=Falta un parntesis! exception.quotes=Faltan comillas! exception.dot=Dos puntos en un nmero! exception.nodigit=No hay dgitos en nmero! exception.function=Funcin desconocida! exception.parameter=Parmetro de funcin no vlido! exception.macro=Parmetro de macro no vlido! exception.name=Escriba un nombre! exception.job=Parmetro de ejercicio no vlido! exception.track=Parmetro de traza no vlido! exception.animate=Parmetros de animacin no vlidos! exception.boolean=Valor Booleano debe ser verdadero o falso! exception.value=Valor no vlido! exception.color=Color no vlido! exception.colortype=Grosor no vlido! exception.type=Tipo de punto no vlido! exception.macroparameter=Parmetro no vlido! exception.macrotarget=Objetivo no vlido! exception.prompt=No puede nombrarse as ese objeto! exception.prompt.parameter=El nombre del objeto no puede ser un parmetro! exception.parameters=Parmetro no vlido! exception.brackets=Parntesis no vlido! exception.double=Ese nombre no es nico! error.setaway=Este punto no est definido antes de la interseccin! error.objecttracker.depends=El punto depende de otro objeto! constructiondisplay.title=Construccin function.hide=Ocultar function.hide.short=ocultar function.rename=Nombre function.rename.short=nombre function.value=Valor function.value.short=valor function.window=Ventana function.window.short=V function.color=Color function.color.short=col function.thickness=Grosor function.thickness.short=gr function.type=Tipo function.type.short=tipo function.partial=Truncar function.partial.short=trunc function.fill=Rellenar function.fill.short=llenar function.back=Fondo function.back.short=fondo function.acute=Agudo function.acute.short=agudo function.obtuse=Obtuso function.obtuse.short=obtuso function.solid=Slido function.solid.short=slido function.restrict=Restringir function.restrict.short=restringir expression.value=Valor configure.title=Seleccionar Navegador configure.prompt=Comando del navegador # New Resources: background.error=No puedo abrir la imagen (GIF or JPG!). menu.background=Fondo menu.background.grab=poner esta imagen de fondo menu.background.clear=Borrar el fondo menu.background.load=Abrir imagen de fondo ... menu.background.usesize=adaptar el tamao a la imagen menu.background.tile=fondo teselado menu.background.center=Centrar el fondo iconhelp.grab=definir o borrar el fondo filedialog.backgroundload=Abrir fondo filedialog.backgroundload.action=Abrir # New Resources in Version 2.14 menu.file.compress=Comprimir siempre menu.file.savesvg=SVG # Version 2.15 loading=abriendo, por favor esperar! # Version 2.18 and 2.19 menu.settings.font.default=fuente predeterminada menu.settings.font.bold=fuente Negrita menu.settings.font.large=fuente ancha menu.file.saveeps=EPS menu.fonts=Fuente # Version 2.20 bmpscaler.title=Bitmap a escala bmpscaler.width=ancho bmpscaler.height=Alto bmpscaler.scale=Factor (presione Enter) bmpscaler.illegal=Valor no vlido # Version 2.21 renamemacro.title=Cambiar nombre Macro renamemacro.name=nuevo nombre Macro menu.special.renamemacro=Cambiar nombre... # Version 2.23 savequestion.title=Guardar la construccin savequestion.qsave=Guardar los cambios? # Version 2.25 exception.printsize=La construccin no cabe en la pgina! iconhelp.nohelp=No hay ayuda disponible iconhelp.type?=tipo de punto iconhelp.thickness?=grosor iconhelp.color?=Color iconhelp.filled=Relleno iconhelp.isback=Dibujar en el fondo iconhelp.inverse=Reflected angle iconhelp.angle?=Tamao # Version 2.28 message.objecttracker.stop=Traza: detener la animacin (shift left/right for speed)! # Version 2.31 menu.settings.indicate=Vista previa de objetos menu.options.other=configuracion menu.help.welcome=Novedades de esta versin iconhelp.twolines=Iconos en dos lneas iconhelp.qintersection=Preguntar antes de crear intersecciones iconhelp.qchoice=Mostrar ventana de seleccin de objetos iconhelp.qpointon=Preguntar antes de crear punto sobre objeto iconhelp.noindicate=NO indicar objetos bajo el ratn # Version 2.33 menu.file.new=Nueva Construccin (Ctrl-n) # Version 2.34 edit.text.title=Configuracin de textos edit.text.settings=Otras opciones menu.settings.filedialog=Remplazar el sistema de archivos # Version 2.35 menu.settings.bitmapbackground=Usar Color de fondo en Bitmaps # Version 2.36 menu.file.savegraphics=Guardar como ... bmpscaler.title=redimensionar # Version 2.37 menu.file.savepdf=PDF iconhelp.chord=Mostrar como segmento # Version 2.39 message.setfixedangle.first=Angulo fijo: Primer punto? message.setfixedangle.second=Angulo fijo: punto central? message.setfixedangle.third=Angulo fijo:tercer punto? edit.fixedangle.set=Definir tamao ... message.setfixedcircle.first=Circulo fijo: primer punto? message.setfixedcircle.second=Circulo fijo: Segundo punto? edit.fixedcircle.set=Definir tamao ... # Version 2.40 minpointsize.title=Definir tamao mnimo de puntos minpointsize.prompt=Tamao mnimo (predeterminado: 3) menu.settings.font.minpointsize=Tamao mnimo ... # Version 2.41 name.short.Track=Tr text.track=Traza de % cuando % se mueve sobre % trackquestion.keep=Mantener la traza? trackquestion.title=Mantener la traza menu.options.track=Mantener lugar geometrico (Shift-Enter) iconhelp.indicate=Vista previa de la construccin iconhelp.nohelp=No hay ayuda disponible! # Version 2.42 objects.draw=Dibujar con el raton menu.options.cleardraw=Borrar el dibujo (Esc) iconhelp.draw=Dibujar con el raton message.draw=dibujar con el raton (ESC para borrar) shortcuts.draw=; # Version 2.43 message.move.select=Mover: Seleccione un punto (Mayusucla: muestra el estado anterior) message.rename=Cambiar nombre A,B,C,...: Seleccione un objeto! iconhelp.rename=Cambiar nombre A,B,C,... objects.rename=Cambiar nombre A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Ocultar la semirrecta del angulo # Version 2.45 menu.settings.smartboard=Modo Smartboard shortcuts.zoom=% objects.zoom=Zoom con el raton message.zoom=Arrastre el centro, o haga zoom # Version 2.46 menu.special.restricticons=Herramientas reducidas # Version 2.47 menu.settings.indicate.simple=Indica solo puntos menu.settings.beginner=Modo Principiante question.again=Preguntar siempre. # Version 2.49 definemacro.parameters=Mensajes ("=name" fixes) # Version 2.53 menu.actions.angles=Angulos menu.actions.circles=Circulos menu.actions.lines=Rectas menu.actions.points=Puntos # Version 3.00 info.title=Ayuda info.related=Temas Relacionados info.notfound=No encuentro este tema! info.noresults=No encuentro esa palabra! info.searchresults=- buscando - info.select=- seleccionar - info.search=Buscar info.back=Atras info.start=Comenzar iconhelp.info=Ayuda menu.help.info=Ayuda myfiledialog.homedir=Archivos RyC myfiledialog.windowshome=Mis documentos myfiledialog.mkdir=Crear Directorio myfiledialog.back=Atras menu.file.alwaysclearmacros=Borrar las macros antes de abrir about.language=Idioma bmpscaler.72dpi=72 dpi bmpscaler.72dpi=300 dpi # Version 3.01 menu.settings.backups=Backups # Version 3.02 menu.options.hideduplicates=Ocultar duplicados # Version 3.03 menu.options.function=Crear una Funcin text.function=Funcin ( % , % ) function.varmin=Desde function.varmax=Hasta function.dvar=Paso function.var=Variable function.x=X function.y=Y iconhelp.function=Crear una Funcin menu.options.editlast=Editar ltimo objeto iconhelp.control.edit=Editar ltimo objeto iconhelp.control.hide=Ocultar duplicados edit.function.title=Funcin o curva iconhelp.control.runmacro=Ejecutar macro de nuevo # Version 3.05 point.type.cross=Cruz point.type.dcross=Cruz diagonal shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Unidad menu.special.break=salto menu.bp.setbreak=definir salto menu.bp.clearbreak=borrar salto menu.bp.sethidingbreak=definir salto oculto menu.bp.animatebreak=Animacin con saltos iconhelp.animatebreak=Animar saltos message.animatebreak=Animar saltos: clic para parar (shift izqu/der para velocidad)! menu.special.exporttemplate=Exportar HTML con modelos templateload.open=Abrir modelo templateload.open.action=abrir menu.settings.doubleclick=Doble Clic para macros export.codebase=Codebase # Version 3.12 edit.equation=Ecuacin # Version 3.23 menu.settings.squarepoints=Dibujar puntos siempre como cuadrados # Version 3.37 menu.options.export=Propiedades de exportacin de grficas menu.settings.minwidth=Ancho mnimo de lneas es 1 menu.settings.minpointsize=Respetar el tamao mnimo de punto menu.settings.minfontsize=Respetar el tamao mnimo de fuente minfontsize.title=Definir tamao mnimo de fuente minfontsize.prompt=Tamao mnimo de fuente (predeterminado: 12) menu.options.minpointsize=Tamao mnimo de punto menu.options.minfontsize=Tamao mnimo de punto # Version 3.38 menu.settings.scalepdf=Escala de PDF y EPS 1:1 # Version 3.41 menu.file.clip=Clip for Graphics Output ... clip.title=Set Clipping clip.width=ancho clip.height=alto clip.screen=No Clipping # Version 3.42 menu.options.arrowsize=Tamao flecha ... arrowsize.title=Tamao flecha # Version 3.44 iconhelp.large=Usar tamao grande de fuente iconhelp.bold=Usar negrita menu.options.largefont=Tamao grande de fuente menu.options.boldfont=Negrita warning.previewframe=El cuadro sale de la ventana! message.move.select=Mover: Seleccione un punto (shift: mas puntos, ctrl: muestra la posicin original)! # Version 3.46 iconbar.showseparators=Mostrar separadores # Version 3.48 menu.sizes=Definir tamaos menu.options.minlinesize=Ancho mnimo de lneas ... minlinesize.title=Ancho mnimo de lneas minlinesize.prompt=Ancho mnimo de lneas (Predeterminado 1) arrowsize.prompt=Definir tamao de flechas (Predeterminado: 10) menu.options.printscaler=Definir tamao de Exportacin ... menu.options.exportsettings=Propiedades especiales de exportacin ... printscaler.title=Definir Tamao de Exportacin printscaler.width=Ancho (en cm) printscaler.height=Alto (en cm) printscaler.dpi=Resolucin (en dpi, predeterminado 300) printscaler.linewidth=Ancho lnea (en cm, predeterminado 0.02) printscaler.pointsize=Tamao punto (en cm, predeterminado 0.07) printscaler.textsize=Tamao Texto (en cm, predeterminado 0.3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=Ancho (en pixeles) printscaler.h=Alto (en pixeles) printscaler.scale=Escala (con respecto a la pantalla) printscaler.middle=Cortar (no ajustar) printscaler.sizes=Ajustar lneas, fuentes y puntos menu.file.savepng=Guardar Graficas como PNG warning.preview=Vista Previa no funciona en Java 1.1 iconedit.showseparators=Mostrar Separadores printscaler.aspect=Mantener escala printscaler.presets=Valores predefinidos printscaler.preset=Seleccionar printscaler.preset.300dpi=Escala exacta con 300 DPI printscaler.preset.300dpi6=6 cm de ancho con 300 DPI printscaler.preset.300dpi16=16 cm de ancho con 300 DPI printscaler.preset.window=Tamao Ventana printscaler.preset.clip50=Tamao ventana a 50% message.saving=Espere! menu.options.printscalepreview=Vista Previa de Exportacin (Ctrl-F3) date=construir # Version 3.51 help=Ayuda # Version 3.61 editconditionals.title=Editar Condiciones editconditionals.hidden=Ocultos editconditionals.superhidden=Totalmente ocultos editconditionals.visible=Normal editconditionals.showname=Mostrar Nombre editconditionals.showvalue=Mostrar Valor editconditionals.background=Fondo editconditionals.solid=Opaco exception.superfluous=Texto sobrante en frmula # Version 3.62 menu.options.selectionsize=Definir tamao Seleccin selectionsize.title=Tamao Seleccin selectionsize.prompt=Tamao seleccin (predeterminado 1.5) # Version 3.63 select.comment.title=Comentario Macro # Version 3.68 edit.area.area=Area # Version 3.73 myfiledialog.oldfiles=Archivos existentes # Version 3.74 iconhelp.load=Abrir construccin (Ctrl-o) iconhelp.save=Guardar construccin (Ctrl-s) iconhelp.new=Nueva construccin (Ctrl-n) # Version 3.81 warning.loadbackground=Error al abrir el fondo # Version 3.9 function.x=Expresin para X (vaco para funciones) # Version 3.91 constructiondisplay.select=Seleccionar constructiondisplay.all=Todos los objetos constructiondisplay.visible=Objetos Visibles constructiondisplay.points=Puntos constructiondisplay.lines=Rectas constructiondisplay.circles=Crculos constructiondisplay.angles=Angulos constructiondisplay.other=Otros objetos menu.file.copypng=Copiar al portapapeles exception.clipboardcopy=Fallo la copia! menu.options.finegrid=Slo los ejes # Vesion 3.93 edit.function.center=Definir el centro edit.function.free=Liberar el centro message.setcenter=Seleccione el punto centro! # Vesion 3.94 message.edit=Editar: Objeto (May: ms objetos, ctrl: condiciones)? # Version 3.95 edit.function.special=Slo puntos # Version 3.97 error.image=Error al abrir la imagen! filedialog.imageload=Abri Imagen filedialog.imageload.action=Abrir prompt.image=imagen(,,,) objects.image=Imagen shortcuts.image=_ # Version 3.98 exception.depends=Objeto % depende del objeto actual. error.depends=Objeto % dependde del objeto actual. constructiondisplay.sorted=en orden de creacin # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Expresiones # Version 4.00 iconhelp.image=Abrir Imagen (_) message.image=Amarrar imagen al punto % message.image.last=Punto de amarre ltima imagen (o punto seleccionado) editconditionals.z=Z-Buffer Value # Version 4.01 name.FixedAngle=Angulo fijo # Version 4.04 menu.moresettings=Propiedades menu.settings.language=Idioma language.title=Idioma language.prompt=Idioma prxima sesin # Version 4.05 constructiondisplay.invalid=Objetos no vlidos # Version 4.08 menu.settings.constructiondisplay=Descripcin permanente (F11) # Version 4.09 constructiondisplay.editconditions=Editar Condiciones constructiondisplay.delete=borrar objetos seleccionados constructiondisplay.hide=ocultar/Mostrar constructiondisplay.superhide=Super Ocultar # Version 4.2 edit.expression.slider=Mostrar como cursor menu.grid.options=Opciones de cuadrcula menu.options.leftsnap=Mover por cuadricula con boton izquierdo menu.settings.boundingbox=Create Bounding Box (bb) file # Version 4.3 latexsettings.title=Setup LaTeX export latexsettings.boundingbox=Create Bounding box bb-file latexsettings.latexinput=Create LaTeX idx-file latexsettings.doubledollar=LaTeX does $$...$$ latexsettings.dollar=LaTeX does $...$ latexsettings.nodollar=LaTeX does all other strings latexsettings.fullpath=Use file path printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=12 cm width with 300 DPI printscaler.latex=Save for LaTeX menu.background.usewidth=Ajustar slo la altura # Version 4.4 menu.options.restricted=Restringir intersecciones menu.options.sizes=definir tamaos ... sizesdialog.title=tamaos minlinesize.prompt=espesor mnimo de lneas (default: 1) minpointsize.prompt=tamao mnimo de punto (default: 3) minfontsize.prompt=tamao mnimo de letra (default: 12) arrowsize.prompt=tamao de flecha (default: 10) selectionsize.prompt=tamao de seleccin (default: 1.5) warning.loadmacros=Error al abrir macro! warning.macrodefinition=% fue usado, pero no est en la macro! edit.circle.bounds=mostrar como arco edit.circle.range=definir arco ... # Version 4.5 edit.track.dmin=paso mnimo (predefinido 0.001) # Version 4.6 menu.settings.smallicons=Usar iconos pequeos menu.settings.oldicons=Usar antiguos iconos # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof=Traza de % cuando % cambia # Version 5 # Fix error.image edit.discrete=Discreto error.fixedsegment=no puedo fijar ese segmento! export.zoom=Zoom con el ratn export.popup=menu Popup # Version 5.1 edit.intersection.alternate=pueden intercambiarse export.restrictedmove=Restringir movimiento # Version 6.0 # Fix message.boundedpoint # Fix iconhelp.new message.bindpoint=Ligar el punto al objeto (May: borde, Ctrl: interior) edit.point.inside=Dentro del objeto edit.point.increment=Incremento de cuadricula (0=free) edit.more=Mas ... menu.settings.more=Mostrar boton para formato condicional menu.file.loadexamples=Abrir ejemplo ... menu.options.editgrid=Editar la cuadricula ... # Version 6.1 constructiondisplay.description=Mostrar descripcin (Alt-Ctrl-1) constructiondisplay.size=Mostrar tamao o coordenadas (Alt-Ctrl-2) constructiondisplay.formula=Mostrar Formula (Alt-Ctrl-3) menu.settings.germanpoints=Usar | en coordenadas ./src/rene/zirkel/docs/ZirkelProperties_ar.properties0000770000175000017500000026364510655647770022077 0ustar yvesyvesversion=\u0627\u0644\u0625\u0635\u062f\u0627\u0631 homefile=index.html homepage=http://mathsrv.ku-eichstaett.de/MGF/homes/grothmann/java/zirkel/doc_en/ about.title= \u0628\u0627\u0644\u0646\u0633\u0628\u0629 \u0644\u0647\u0630\u0627 \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062c about.name= \u0623\u0633\u0627\u0633\u064a\u0627\u062a \u0627\u0644\u0647\u0646\u062f\u0633\u0629 about.programmed= \u0628\u0631\u0645\u062c\u0629 title= \u0627\u0644\u0647\u0646\u062f\u0633\u0629 \u0627\u0644\u0623\u0633\u0627\u0633\u064a\u0629 close= \u0625\u063a\u0644\u0627\u0642 ok= \u0646\u0639\u0645 cancel= \u0625\u0644\u063a\u0627\u0621 done= \u062c\u064a\u062f \u0635\u062d\u064a\u062d message= \u0631\u0633\u0627\u0644\u0629 yes= \u0646\u0639\u0645 no= \u0644\u0627 abort= \u0625\u0644\u063a\u0627\u0621 true= \u0635\u062d\u064a\u062d false= \u062e\u0637\u0623 warning.nojob= \u0647\u0630\u0627 \u0644\u064a\u0633 \u062a\u0645\u0631\u064a\u0646 warning.print= \u0625\u062e\u0641\u0627\u0642 \u0641\u064a \u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u0637\u0628\u0639 warning.reset= \u0633\u062a\u0643\u0648\u0646 \u0647\u0630\u0647 \u0627\u0644\u062e\u0627\u0635\u064a\u0629 \u0633\u0627\u0626\u0631\u0629 \u0627\u0644\u0645\u0641\u0639\u0648\u0644 \u0639\u0646\u062f \u0627\u0644\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0642\u0627\u062f\u0645 question.title= \u0633\u0624\u0627\u0644 question.intersection= \u0647\u0644 \u0623\u0646\u0634\u0649\u0621 \u0647\u0630\u0627 \u0627\u0644\u062a\u0642\u0627\u0637\u0639 \u061f question.pointon= \u0647\u0644 \u0623\u0646\u0634\u0649\u0621 \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u0643\u0627\u0626\u0646 \u061f colors.black= \u0623\u0633\u0648\u062f colors.blue= \u0623\u0632\u0631\u0642 colors.green= \u0623\u062e\u0636\u0631 colors.brown= \u0628\u0646\u064a colors.cyan= \u0633\u064a\u0627\u0646 colors.yellow= \u0623\u062d\u0645\u0631 objects.point= \u0646\u0642\u0637\u0629 objects.segment= \u0642\u0637\u0639\u0629 objects.line= \u0645\u0633\u062a\u0642\u064a\u0645 objects.ray= \u0646\u0635\u0641 \u0645\u0633\u062a\u0642\u064a\u0645 objects.circle= \u062f\u0627\u0626\u0631\u0629 objects.intersection= \u062a\u0642\u0627\u0637\u0639 objects.move= \u062a\u062d\u0631\u064a\u0643 \u0646\u0642\u0637\u0629 objects.hide= \u0625\u062e\u0641\u0627\u0621 \u0643\u0627\u0626\u0646 objects.edit= \u062a\u062d\u0631\u064a\u0631 objects.tracker= \u0645\u062d\u0644 ... \u0646\u0642\u0637\u0629 \u0623\u0648 \u0645\u0633\u062a\u0642\u064a\u0645 objects.objecttracker= \u0645\u062d\u0644 ... \u0646\u0642\u0637\u0629 \u0623\u0648 \u0645\u0633\u062a\u0642\u064a\u0645 \u0639\u0644\u0649 \u0643\u0627\u0626\u0646 objects.parallel= \u0645\u0633\u062a\u0642\u064a\u0645 \u0645\u0648\u0627\u0632\u064a objects.plumb= \u0645\u0633\u062a\u0642\u064a\u0645 \u0639\u0645\u0648\u062f\u064a objects.circle3= \u062f\u0627\u0626\u0631\u0629 \u0645\u0639\u064a\u0646\u0629 \u0628\u0646\u0635\u0641 \u0642\u0637\u0631\u0647\u0627 \u0648 \u0645\u0631\u0643\u0632\u0647\u0627 \u0623\u064a \u0628\u062b\u0644\u0627\u062b \u0646\u0642\u0637 objects.midpoint= \u0645\u0646\u062a\u0635\u0641 \u0642\u0637\u0639\u0629 objects.quadric= \u0642\u0637\u0639 \u0645\u062e\u0631\u0648\u0637\u064a objects.angle= \u0632\u0627\u0648\u064a\u0629 objects.boundedpoint= \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0643\u0627\u0626\u0646 objects.parameter= \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0625\u0628\u062a\u062f\u0627\u0626\u064a\u0629 \u0644\u0644\u0645\u0627\u0643\u0631\u0648 objects.targets= \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0627\u0644\u0646\u0647\u0627\u0626\u064a\u0629 \u0644\u0644\u0645\u0627\u0643\u0631\u0648 objects.definejob= \u062a\u0639\u064a\u064a\u0646 \u062a\u0645\u0631\u064a\u0646 objects.runmacro= \u062a\u0646\u0641\u064a\u0630 \u0645\u0627\u0643\u0631\u0648 objects.delete= \u062d\u0630\u0641 \u0643\u0627\u0626\u0646 \u0648 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0627\u0644\u0645\u0631\u062a\u0628\u0637\u0629 \u0628\u0647 objects.reorder= \u0625\u0631\u062c\u0627\u0639 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0644\u0644\u062e\u0644\u0641\u064a\u0629 objects.animate= \u062d\u0631\u0643\u0629 objects.expression= \u0639\u0628\u0627\u0631\u0629 \u062d\u0633\u0627\u0628\u064a\u0629 objects.area= \u0645\u0636\u0644\u0639 objects.text= \u0646\u0635 objects.fixedcircle= \u062f\u0627\u0626\u0631\u0629 \u0630\u0627\u062a \u0646\u0635\u0641 \u0642\u0637\u0631 \u062b\u0627\u0628\u062a objects.fixedangle= \u0632\u0627\u0648\u064a\u0629 \u062b\u0627\u0628\u062a\u0629 objects.fixedsegment= \u0642\u0637\u0639\u0629 \u0645\u0633\u062a\u0642\u064a\u0645\u0629 \u062b\u0627\u0628\u062a\u0629 \u0627\u0644\u0637\u0648\u0644 iconhelp.point= \u0646\u0642\u0637\u0629 iconhelp.segment= \u0642\u0637\u0639\u0629 \u0645\u0633\u062a\u0642\u064a\u0645\u0629 iconhelp.line= \u0645\u0633\u062a\u0642\u064a\u0645 iconhelp.ray= \u0646\u0635\u0641 \u0645\u0633\u062a\u0642\u064a\u0645 iconhelp.circle= \u062f\u0627\u0626\u0631\u0629 iconhelp.intersection= \u062a\u0642\u0627\u0637\u0639 iconhelp.move= \u062a\u062d\u0631\u064a\u0643 \u0646\u0642\u0637\u0629 iconhelp.hide= \u0625\u062e\u0641\u0627\u0621 \u0627\u0644\u0643\u0627\u0626\u0646 iconhelp.edit= \u062a\u062d\u0631\u064a\u0631 \u0643\u0627\u0626\u0646 iconhelp.tracker= \u0645\u062d\u0644 ... \u0646\u0642\u0637\u0629 \u0623\u0648 \u0645\u0633\u062a\u0642\u064a\u0645 iconhelp.objecttracker= \u0645\u062d\u0644 -\u0623\u0648\u062a\u0648\u0645\u0627\u062a\u064a\u0643\u064a- \u0646\u0642\u0637\u0629 \u0623\u0648 \u0645\u0633\u062a\u0642\u064a\u0645 iconhelp.parallel= \u0645\u0633\u062a\u0642\u064a\u0645 \u0645\u0648\u0627\u0632\u064a iconhelp.plumb= \u0645\u0633\u062a\u0642\u064a\u0645 \u0639\u0645\u0648\u062f\u064a iconhelp.circle3= \u062f\u0627\u0626\u0631\u0629 \u0645\u0639\u064a\u064a\u0646\u0629 \u0628\u0646\u0635\u0641 \u0642\u0637\u0631 \u0648 \u0645\u0631\u0643\u0632 \u0623\u064a \u0628\u062b\u0644\u0627\u062b \u0646\u0642\u0637 iconhelp.midpoint= \u0645\u0646\u062a\u0635\u0641 \u0642\u0637\u0639\u0629 iconhelp.quadric= \u0642\u0637\u0639 \u0645\u062e\u0631\u0648\u0637\u064a \u0645\u0639\u064a\u064a\u0646 \u0628\u062e\u0645\u0633 \u0646\u0642\u0637 iconhelp.angle= \u0632\u0627\u0648\u064a\u0629 iconhelp.boundedpoint= \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0643\u0627\u0626\u0646 iconhelp.hidden= (F9) \u0625\u062e\u0641\u0627\u0621\u0623\u0648\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0627\u0644\u0645\u062e\u0641\u064a\u0629 iconhelp.color= \u0644\u0648\u0646 \u0625\u0641\u062a\u0631\u0627\u0636\u064a iconhelp.type= (Ctrl-5,6,7,8,9,0) \u0646\u0645\u0637 \u0627\u0644\u0646\u0642\u0637 iconhelp.type0= \u0646\u0645\u0637 \u0627\u0644\u0646\u0642\u0637 \u0625\u0641\u062a\u0631\u0627\u0636\u064a iconhelp.thickness= (Alt-5,6,7) \u0633\u0645\u0643 \u0625\u0641\u062a\u0631\u0627\u0636\u064a iconhelp.back= (<-) \u062d\u0630\u0641 \u0622\u062e\u0631 \u0643\u0627\u0626\u0646 iconhelp.thickness0= \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0633\u0645\u0643 \u0625\u0641\u062a\u0631\u0627\u0636\u064a iconhelp.partial= (Ctrl-F9) \u062f\u0627\u0626\u0631\u0629 \u063a\u064a\u0631 \u062a\u0627\u0645\u0629 iconhelp.plines= (Ctrl-F10) \u0645\u0633\u062a\u0642\u064a\u0645 \u063a\u064a\u0631 \u062a\u0627\u0645 iconhelp.arrow= (Ctrl-F11) \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0642\u0637\u0639 \u0627\u0644\u0645\u0633\u062a\u0642\u064a\u0645\u0629 \u0643\u0623\u0634\u0639\u0629 \u0625\u0641\u062a\u0631\u0627\u0636\u064a\u0627 iconhelp.showcolor= (Alt-1,2,3,4) \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0623\u0644\u0648\u0627\u0646 \u0627\u0644\u0645\u062d\u062f\u062f\u0629 \u0641\u0642\u0637 iconhelp.runmacro= \u062a\u0646\u0641\u064a\u0630 \u0645\u0627\u0643\u0631\u0648 iconhelp.macro= (7,8,Ctrl-5) \u062a\u0639\u064a\u064a\u0646 \u0648\u0633\u0627\u0626\u0637 \u0627\u0644\u0645\u0627\u0643\u0631\u0648 \u060c \u0623\u0647\u062f\u0627\u0641\u0647\u0627 \u060c \u062a\u0639\u0631\u064a\u0641\u0647\u0627 iconhelp.expression= (x) \u0639\u0628\u0627\u0631\u0629 \u062d\u0633\u0627\u0628\u064a\u0629 iconhelp.showvalue= (Ctrl-F7) \u0625\u0638\u0647\u0627\u0631 \u0642\u064a\u0645 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0625\u0641\u062a\u0631\u0627\u0636\u064a\u0627 iconhelp.showname= (Ctrl-F6) \u0625\u0638\u0647\u0627\u0631 \u0623\u0633\u0645\u0627\u0621 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0625\u0641\u062a\u0631\u0627\u0636\u064a\u0627 iconhelp.obtuse= (Ctrl-F12) \u0625\u0646\u0634\u0627\u0621 \u0632\u0627\u0648\u064a\u0629 \u0623\u0643\u0628\u0631 \u0645\u0646 180 \u062f\u0631\u062c\u0629 iconhelp.solid= \u0639\u062f\u0645 \u0625\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0634\u0641\u0627\u0641\u064a\u0629 \u0625\u0641\u062a\u0631\u0627\u0636\u064a\u0627 iconhelp.longnames= (Ctrl-F8) \u0625\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0623\u0633\u0645\u0627\u0621 \u0627\u0644\u0637\u0648\u064a\u0644\u0629 iconhelp.grid= (F12) \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0645\u062d\u0627\u0648\u0631 iconhelp.comment= (F10) \u0625\u0638\u0647\u0627\u0631 \u0648 \u062a\u062d\u0631\u064a\u0631 \u062a\u0639\u0644\u064a\u0642 iconhelp.defaults= \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0625\u0641\u062a\u0631\u0627\u0636\u064a\u0629 iconhelp.macro0=(7,8,Ctrl-5) \u062a\u0639\u064a\u064a\u0646 \u0648\u0633\u0627\u0626\u0637 \u0627\u0644\u0645\u0627\u0643\u0631\u0648 \u060c \u0623\u0647\u062f\u0627\u0641\u0647\u0627 \u060c \u062a\u0639\u0631\u064a\u0641\u0647\u0627 iconhelp.visual= \u062a\u0628\u062f\u064a\u0644 \u0646\u0645\u0637 \u0627\u0644\u0639\u0645\u0644 iconhelp.replay= \u0625\u0639\u0627\u062f\u0629 \u0631\u0624\u064a\u0629 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 iconhelp.oneforward= \u0625\u0644\u0649 \u0627\u0644\u0627\u0645\u0627\u0645 iconhelp.fastforward= \u0625\u0644\u0649 \u0627\u0644\u0623\u0645\u0627\u0645 \u0628\u0633\u0631\u0639\u0629 iconhelp.allforward= \u0625\u0644\u0649 \u0627\u0644\u0646\u0647\u0627\u064a\u0629 iconhelp.oneback= \u0625\u0644\u0649 \u0627\u0644\u062e\u0644\u0641 iconhelp.fastback= \u0625\u0644\u0649 \u0627\u0644\u062e\u0644\u0641 \u0628\u0633\u0631\u0639\u0629 iconhelp.allback= \u0625\u0644\u0649 \u0627\u0644\u0628\u062f\u0627\u064a\u0629 iconhelp.close= \u0625\u063a\u0644\u0627\u0642 iconhelp.area= \u0645\u0636\u0644\u0639 iconhelp.text= \u0646\u0635 \u0639\u0628\u0631 \u0633\u0637\u0648\u0631 iconhelp.fixedcircle= \u062f\u0627\u0626\u0631\u0629 \u0628\u0646\u0635\u0641 \u0642\u0637\u0631 \u062b\u0627\u0628\u062a iconhelp.fixedangle= \u0632\u0627\u0648\u064a\u0629 \u062b\u0627\u0628\u062a\u0629 iconhelp.fixedsegment= \u0642\u0637\u0639\u0629 \u062b\u0627\u0628\u062a\u0629 \u0627\u0644\u0637\u0648\u0644 iconhelp.animate= \u062a\u062d\u0631\u064a\u0643 \u0646\u0642\u0637\u0629 iconhelp.delete= (Suppr) \u062d\u0630\u0641 \u0627\u0644\u0643\u0627\u0626\u0646 \u0648 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0627\u0644\u0645\u0631\u062a\u0628\u0637\u0629 \u0628\u0647 iconhelp.undo= (Ctrl-z) \u0625\u0644\u063a\u0627\u0621 \u0627\u0644\u062d\u0630\u0641 \u0627\u0644\u0623\u062e\u064a\u0631 iconhelp.nextbreak= \u0642\u0641\u0632 \u0625\u0644\u0649 \u0646\u0642\u0637\u0629 \u0627\u0644\u062a\u0648\u0642\u0641 \u0627\u0644\u062a\u0627\u0644\u064a\u0629 iconhelp.setbreak= \u0648\u0636\u0639 \u0623\u0648 \u062d\u0630\u0641 \u0646\u0642\u0637\u0629 \u062a\u0648\u0642\u0641 iconhelp.zoom= \u062a\u0643\u0628\u064a\u0631\u0623\u0648 \u062a\u0635\u063a\u064a\u0631 \u0628\u0627\u0644\u0641\u0623\u0631\u0629 shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel= shortcuts.plumb= shortcuts.circle3= shortcuts.midpoint= shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint= shortcuts.definejob= shortcuts.parameter= shortcuts.targets= shortcuts.runmacro= shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.showcolor.4= shortcuts.showcolor.5= shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) menu.file=\u0645\u0644\u0641 menu.file.clearmacros= \u062d\u0630\u0641 \u0627\u0644\u0645\u0627\u0643\u0631\u0648\u0627\u062a \u0627\u0644\u0634\u062e\u0635\u064a\u0629 menu.file.load= (Ctrl-o) \u0641\u062a\u062d \u0625\u0646\u0634\u0627\u0621 menu.file.loadjob= (Ctrl-j) \u0641\u062a\u062d \u062a\u0645\u0631\u064a\u0646 menu.file.savejob= (Ctrl-k) \u062d\u0641\u0638 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 \u0643\u062a\u0645\u0631\u064a\u0646 menu.file.save= (Ctrl-s) \u062d\u0641\u0638 \u0647\u0630\u0627 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 menu.file.saveas= (Ctrl-a) \u062d\u0641\u0638 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 \u0628\u0627\u0633\u0645 menu.file.includemacros= \u062a\u0636\u0645\u064a\u0646 \u0643\u0644 \u0627\u0644\u0645\u0627\u0643\u0631\u0648\u0627\u062a menu.file.exit= (Alt-F4) \u0625\u0646\u0647\u0627\u0621 menu.file.print= \u0637\u0628\u0639 menu.file.print.isoscale= 1:1 \u0633\u0644\u0645 menu.file.savebmp= (BMP) \u062d\u0641\u0638 \u0627\u0644\u0634\u0643\u0644 \u0628\u0627\u0644\u062a\u0646\u0633\u064a\u0642 menu.file.savefig= (FIG) \u062d\u0641\u0638 \u0627\u0644\u0634\u0643\u0644 \u0628\u0627\u0644\u062a\u0646\u0633\u064a\u0642 menu.file.loadrun= (Ctrl-r) \u0641\u062a\u062d \u0625\u0646\u0634\u0627\u0621 menu.file.editrun= (Ctrl-x) \u062a\u062d\u0631\u064a\u0631 \u0625\u0646\u0634\u0627\u0621 menu.actions=\u062a\u062d\u0631\u064a\u0631 menu.actions.elementary= \u0623\u062f\u0648\u0627\u062a \u0623\u0633\u0627\u0633\u064a\u0629 menu.actions.complex= \u0623\u062f\u0648\u0627\u062a \u0645\u062a\u0642\u062f\u0645\u0629 menu.actions.move= \u0623\u062f\u0648\u0627\u062a \u0627\u0644\u062a\u062d\u0631\u064a\u0643 menu.actions.decorative= \u0643\u0627\u0626\u0646\u0627\u062a \u062a\u0632\u064a\u0646\u064a\u0629 menu.options= \u062e\u064a\u0627\u0631\u0627\u062a menu.options.visual= (Ctrl-F6) \u062a\u0628\u062f\u064a\u0644 \u0646\u0645\u0637 \u0627\u0644\u0639\u0645\u0644 menu.options.hidden= (F9) \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0627\u0644\u0645\u062e\u0641\u064a\u0629 menu.options.comment= (F10) \u062a\u062d\u0631\u064a\u0631 \u062a\u0639\u0644\u064a\u0642 menu.options.constructiondisplay= (F11) \u0625\u0638\u0647\u0627\u0631 \u0645\u0631\u0627\u062d\u0644 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 menu.options.grid= (F12) \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0634\u0628\u0643\u0629 menu.options.setgrid= \u062a\u062d\u062f\u064a\u062f \u0639\u0631\u0636 \u0627\u0644\u0634\u0628\u0643\u0629 menu.options.showcolor= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0644\u0648\u0646 menu.options.defaultcolor= \u0644\u0648\u0646 \u0625\u0641\u062a\u0631\u0627\u0636\u064a menu.options.defaultthickness= \u0633\u0645\u0643 \u0625\u0641\u062a\u0631\u0627\u0636\u064a menu.options.defaulttype= \u0646\u0645\u0637 \u0627\u0644\u0646\u0642\u0637 \u0625\u0641\u062a\u0631\u0627\u0636\u064a menu.options.all= \u0627\u0644\u0643\u0644 menu.options.setdigits= \u0639\u062f\u062f \u0627\u0644\u0623\u0631\u0642\u0627\u0645 \u0627\u0644\u0639\u0634\u0631\u064a\u0629 menu.options.shownames= (Ctrl-F6) \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u062a\u0633\u0645\u064a\u0629 menu.options.longnames= (Ctrl-F8) \u0623\u0633\u0645\u0627\u0621 \u0637\u0648\u064a\u0644\u0629 menu.options.obtuse= (Ctrl-F12) \u0625\u0633\u062a\u0639\u0645\u0627\u0644 \u0632\u0648\u0627\u064a\u0627 \u0623\u0643\u0628\u0631 \u0645\u0646 180 \u062f\u0631\u062c\u0629 menu.options.solid= \u0639\u062f\u0645 \u0625\u0633\u062a\u0639\u0645\u0627\u0644 \u0627\u0644\u0634\u0641\u0627\u0641\u064a\u0629 menu.options.showvalues= (Ctrl-F7) \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0642\u064a\u0645 menu.options.partial= (Ctrl-F9) \u062f\u0627\u0626\u0631\u0629 \u063a\u064a\u0631 \u062a\u0627\u0645\u0629 (\u0623\u0642\u0648\u0627\u0633 \u0641\u0642\u0637) menu.options.plines= (Ctrl-F10) \u0645\u0633\u062a\u0642\u064a\u0645 \u063a\u064a\u0631 \u062a\u0627\u0645 (\u062c\u0632\u0621 \u0645\u0646 \u0645\u0633\u062a\u0642\u064a\u0645) menu.options.arrow= (Ctrl-F11) \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0642\u0637\u0639 \u0627\u0644\u0645\u0633\u062a\u0642\u064a\u0645\u0629 \u0643\u0623\u0634\u0639\u0629 menu.options.editicons= \u062a\u062e\u0635\u064a\u0635 \u0639\u0644\u0628\u0629 \u0627\u0644\u0623\u062f\u0648\u0627\u062a menu.options.back= (<-) \u062d\u0630\u0641 \u0622\u062e\u0631 \u0643\u0627\u0626\u0646 menu.options.undo= (Ctrl-z) \u0625\u0644\u063a\u0627\u0621 \u0627\u0644\u062d\u0630\u0641 menu.zoom= \u062a\u0643\u0628\u064a\u0631\u0623\u0648 \u062a\u0635\u063a\u064a\u0631 menu.zoom.in= (+) \u062a\u0643\u0628\u064a\u0631 menu.zoom.out= (-) \u062a\u0635\u063a\u064a\u0631 menu.zoom.left= \u0625\u0644\u0649 \u0627\u0644\u064a\u0633\u0627\u0631 menu.zoom.right= \u0625\u0644\u0649 \u0627\u0644\u064a\u0645\u064a\u0646 menu.zoom.up= \u0625\u0644\u0649 \u0627\u0644\u064a\u0645\u064a\u0646 menu.zoom.down= \u0625\u0644\u0649 \u0627\u0644\u0623\u0633\u0641\u0644 menu.macros= \u0627\u0644\u0645\u0627\u0643\u0631\u0648\u0627\u062a menu.special.definemacro= (Ctrl-F5) \u062a\u0639\u0631\u064a\u0641 \u0645\u0627\u0643\u0631\u0648 menu.special.runmacro= \u062a\u0646\u0641\u064a\u0630 \u0645\u0627\u0643\u0631\u0648 menu.special.savemacros= \u062d\u0641\u0638 \u0627\u0644\u0645\u0627\u0643\u0631\u0648\u0627\u062a menu.special.loadmacros= \u062a\u062d\u0645\u064a\u0644 \u0645\u0627\u0643\u0631\u0648 menu.special.deletemacros= \u062d\u0630\u0641 \u0645\u0627\u0643\u0631\u0648 menu.special= \u062e\u0627\u0635 menu.special.testjob= (Ctrl-F1) \u062c\u0631\u0628 \u0647\u0630\u0627 \u0627\u0644\u062a\u0645\u0631\u064a\u0646 menu.special.jobcomment= (F8) \u0646\u0635 \u0627\u0644\u062a\u0645\u0631\u064a\u0646 menu.special.export= (Ctrl-e) \u0625\u0646\u0634\u0627\u0621 \u0645\u0644\u0641 \u0644\u0644\u0639\u0631\u0636 \u0639\u0644\u0649 \u0627\u0644\u0648\u0627\u0628 menu.special.replay= \u0625\u0639\u0627\u062f\u0629 \u0631\u0624\u064a\u0629 \u0645\u0631\u0627\u062d\u0644 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 menu.help= \u062a\u0639\u0644\u064a\u0645\u0627\u062a menu.help.about= \u062d\u0648\u0644 \u0647\u0630\u0627 \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062c menu.help.browser= \u0625\u0633\u062a\u0643\u0634\u0627\u0641 \u0627\u0644\u062a\u0639\u0644\u064a\u0645\u0627\u062a \u0648 \u0627\u0644\u0627\u0645\u062b\u0644\u0629 menu.help.text= \u062a\u0639\u0644\u064a\u0645\u0627\u062a \u0628\u0633\u064a\u0637\u0629 menu.help.configure= \u0625\u0639\u062f\u0627\u062f \u0627\u0644\u0645\u0628\u062d\u0631 menu.help.help= (F1) \u062a\u0639\u0644\u064a\u0645\u0627\u062a menu.help.macros= \u062d\u0648\u0644 \u0627\u0644\u0645\u0627\u0643\u0631\u0648\u0627\u062a menu.help.tools= \u0627\u0644\u0623\u062f\u0648\u0627\u062a menu.help.gui= \u0648\u0627\u062c\u0647\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 menu.help.interactive= \u0646\u0645\u0637 \u0648\u0635\u0641\u064a (\u0625\u062f\u062e\u0627\u0644 \u0627\u0644\u0623\u0648\u0627\u0645\u0631) menu.help.tips= \u062a\u0644\u0645\u064a\u062d\u0627\u062a menu.settings= \u062e\u064a\u0627\u0631\u0627\u062a \u062e\u0627\u0635\u0629 menu.settings.fullicons= \u0639\u0631\u0636 \u0634\u0631\u064a\u0637\u064a \u0623\u062f\u0648\u0627\u062a menu.settings.utf= UTF-8 \u0625\u0633\u062a\u0639\u0645\u0644 \u0627\u0644\u062a\u0634\u0641\u064a\u0631\u0629 menu.settings.autohide= \u0625\u062e\u0641\u0627\u0621 \u0646\u0642\u0637\u0629 \u0627\u0644\u062a\u0642\u0627\u0637\u0639 \u0627\u0644\u062b\u0627\u0646\u064a\u0629 menu.settings.iconbartop= \u0623\u0634\u0631\u0637\u0629 \u0644\u0627\u0623\u062f\u0648\u0627\u062a \u0641\u0648\u0642 \u0627\u0644\u0634\u0643\u0644 menu.settings.showtips= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u062a\u0644\u0645\u064a\u062d\u0627\u062a menu.settings.simplegraphics= \u0625\u0633\u062a\u062e\u062f\u0627\u0645 \u063a\u0631\u0627\u0641\u064a\u0643\u0633 \u0628\u0633\u064a\u0637 menu.settings.sure= \u0623\u0637\u0644\u0628 \u0627\u0644\u062a\u0623\u0643\u064a\u062f \u0642\u0628\u0644 \u0627\u0644\u0641\u062a\u062d \u0648 \u0627\u0644\u063a\u0644\u0642 menu.settings.pointon= \u0623\u0637\u0644\u0628 \u0627\u0644\u062a\u0623\u0643\u064a\u062f \u0642\u0628\u0644 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0627\u0644\u0643\u0627\u0626\u0646 menu.settings.intersection= \u0627\u0637\u0644\u0628 \u0627\u0644\u062a\u0623\u0643\u064a\u062f\u0642\u0628\u0644 \u0625\u0646\u0634\u0627\u0621 \u062a\u0642\u0627\u0637\u0639 menu.settings.choice= \u0625\u0638\u0647\u0627\u0631 \u0639\u0644\u0628\u0629 \u062d\u0648\u0627\u0631 \u0644\u0644\u0643\u0627\u0626\u0646\u0627\u062a menu.settings.movename= \u0625\u0638\u0647\u0627\u0631 \u0642\u064a\u0645 \u0627\u0644\u0643\u0627\u0626\u0646 \u0639\u0646\u062f \u062a\u062d\u0631\u064a\u0643\u0647 menu.settings.movefixname= \u0625\u0638\u0647\u0627\u0631 \u0642\u064a\u0645 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0627\u0644\u062b\u0627\u0628\u062a\u0629 \u0639\u0646\u062f \u062a\u062d\u0631\u0643\u0647\u0627 menu.settings.restricted= \u0646\u0645\u0637 \u0639\u0645\u0644 \u0627\u0644\u062a\u0644\u0645\u064a\u0630 menu.colors= \u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0627\u0644\u0648\u0627\u0646 colors.default= \u0625\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0627\u0644\u0648\u0627\u0646 \u0627\u0644\u0625\u0641\u062a\u0631\u0627\u0636\u064a\u0629 colors.color0= \u0627\u0644\u0644\u0648\u0646 1 \u0623\u0633\u0648\u062f colors.color1= \u0627\u0644\u0644\u0648\u0646 2 \u0623\u062e\u0636\u0631 colors.color2= \u0627\u0644\u0644\u0648\u0646 3 \u0627\u0644\u0623\u0632\u0631\u0642 colors.color3= \u0627\u0644\u0644\u0648\u0646 4 \u0628\u0646\u064a colors.color4= \u0627\u0644\u0644\u0648\u0646 5 \u0633\u064a\u0627\u0646 colors.color5= \u0627\u0644\u0644\u0648\u0646 6 \u0627\u0644\u0623\u062d\u0645\u0631 colors.background= \u0627\u0644\u062e\u0644\u0641\u064a\u0629 colors.select= \u062a\u062d\u062f\u064a\u062f colors.target= \u0647\u062f\u0641 myfiledialog.dir= \u0645\u062c\u0644\u062f myfiledialog.file= \u0645\u0644\u0641 myfiledialog.pattern= \u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u0645\u0644\u0641\u0627\u062a filedialog.open= \u0641\u062a\u062d filedialog.saveas= \u062d\u0641\u0638 \u0628\u0627\u0633\u0645 filedialog.open.action= \u0641\u062a\u062d filedialog.saveas.action= \u062d\u0641\u0638 filedialog.htmlsave= HTML \u062d\u0641\u0638 \u0628\u062a\u0646\u0633\u064a\u0642 filedialog.htmlsave.action= \u062d\u0641\u0638 pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save= \u062d\u0641\u0638 load= \u062a\u062d\u0645\u064a\u0644 abort= \u0625\u0644\u063a\u0627\u0621 bound.release= \u0623\u0641\u0635\u0644 \u0627\u0644\u0646\u0642\u0637\u0629 bound.bind= \u0631\u0628\u0637 \u0628\u0627\u0644\u0643\u0627\u0626\u0646 (\u062a\u062b\u0628\u064a\u062a \u0639\u0644\u0649 \u0643\u0627\u0626\u0646) bound.error= \u0643\u0627\u0626\u0646 \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f \u0642\u0628\u0644 \u0627\u0644\u062a\u0642\u0627\u0637\u0639 constructiondisplay.edit= \u062a\u062d\u0631\u064a\u0631 \u0643\u0627\u0626\u0646 constructiondisplay.copy= \u0646\u0633\u062e \u0641\u064a \u0627\u0644\u062d\u0627\u0641\u0638\u0629 edit.Title= \u062e\u064a\u0627\u0631\u0627\u062a edit.name= \u062a\u0633\u0645\u064a\u0629 edit.hidden= \u0645\u062e\u0641\u064a edit.text= \u0646\u0635 edit.fixed= \u062b\u0627\u0628\u062a edit.color= \u0644\u0648\u0646 edit.ok= \u0646\u0639\u0645 edit.cancel= \u0625\u0644\u063a\u0627\u0621 edit.showname= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0623\u0633\u0645\u0627\u0621 edit.point.title= \u062a\u062d\u0631\u064a\u0631 : \u0646\u0642\u0637\u0629 edit.point.type= \u0646\u0645\u0637 edit.point.x=X edit.point.y=Y edit.point.intersection= \u0645\u062e\u062a\u0644\u0641 \u0639\u0646 edit.point.showvalue= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0625\u062d\u062f\u0627\u062b\u064a\u064a\u0646 edit.point.colortype= \u0627\u0644\u0633\u0645\u0643 edit.point.bound= \u0631\u0628\u0637 edit.point.away= \u0628\u0639\u064a\u062f \u0639\u0646 edit.point.close= \u0642\u0631\u064a\u0628 \u0645\u0646 edit.point.free= \u0645\u0633\u062a\u0642\u0644 edit.line.title= \u062a\u062d\u0631\u064a\u0631 : \u0645\u0633\u062a\u0642\u064a\u0645 .. \u0646\u0635\u0641 \u0645\u0633\u062a\u0642\u064a\u0645 ..\u0642\u0637\u0639\u0629 edit.line.normal= \u0639\u0627\u062f\u064a edit.line.thick= \u0633\u0645\u064a\u0643 edit.line.thin= \u0631\u0642\u064a\u0642 edit.line.invisible= \u0645\u062e\u0641\u064a edit.line.type= \u0646\u0645\u0637 edit.segment.length= \u0637\u0648\u0644 edit.segment.showvalue= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0637\u0648\u0644 edit.circle.title= \u062a\u062d\u0631\u064a\u0631 \u062f\u0627\u0626\u0631\u0629 edit.circle.length= \u0646\u0635\u0641 \u0627\u0644\u0642\u0637\u0631 edit.circle.partial= \u062c\u0632\u0626\u064a edit.circle.range= \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0645\u062c\u0627\u0644 edit.circle.killrange= \u062d\u0630\u0641 \u0627\u0644\u0645\u062c\u0627\u0644 edit.plumb.restricted= \u062b\u0627\u0628\u062a edit.angle.title= \u062a\u062d\u0631\u064a\u0631 \u0632\u0627\u0648\u064a\u0629 edit.angle.length= \u0642\u064a\u0627\u0633 edit.angle.displaysize= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0623\u0628\u0639\u0627\u062f edit.angle.normal= \u0639\u0627\u062f\u064a edit.angle.small= \u0635\u063a\u064a\u0631\u0629 edit.angle.large= \u0643\u0628\u064a\u0631\u0629 edit.expression.title= \u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0639\u0628\u0627\u0631\u0629 edit.expression= \u0639\u0628\u0627\u0631\u0629 \u062d\u0633\u0627\u0628\u064a\u0629 edit.expression.prompt= \u0634\u0631\u062d edit.area.title= \u062a\u062d\u0631\u064a\u0631 \u0645\u0636\u0644\u0639 edit.area.back= \u0641\u064a \u0627\u0644\u062e\u0644\u0641\u064a\u0629 export.title= \u062a\u0635\u062f\u064a\u0631 \u0643\u0648\u0631\u0642\u0629 \u0648\u0627\u0628 export.pagetitle= \u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0635\u0641\u062d\u0629 export.width= \u0639\u0631\u0636 export.height= \u0625\u0631\u062a\u0641\u0627\u0639 export.jar= Jar \u0645\u0644\u0641 export.comment= \u062d\u0641\u0638 \u0627\u0644\u062a\u0639\u0644\u064a\u0642 export.file= \u0645\u0644\u0641 \u0625\u0646\u0634\u0627\u0621 export.job= \u0625\u0638\u0647\u0627\u0631 \u0643\u062a\u0645\u0631\u064a\u0646 export.color= \u0644\u0648\u0646 export.backgroundcolor= \u0625\u0633\u062a\u062e\u062f\u0645\u0647\u0627 \u0643\u062e\u0644\u0641\u064a\u0629 \u0644\u0644\u0648\u0631\u0642\u0629 export.appletcolor= \u0625\u0633\u062a\u062e\u062f\u0645\u0647\u0627 \u0643\u062e\u0644\u0641\u064a\u0629 \u0644\u0644\u0623\u0628\u0644\u0627\u062a export.plain= \u0628\u0633\u064a\u0637 export.3D= \u062d\u062f\u0648\u062f export.breaks= \u0625\u0639\u0627\u062f\u0629 \u0631\u0624\u064a\u0629 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 \u0645\u0639 \u0646\u0642\u0637 \u0627\u0644\u062a\u0648\u0642\u0641 export.icons= \u062d\u062f\u0648\u062f \u0648 \u0623\u064a\u0642\u0648\u0646\u0627\u062a export.full= \u062d\u062f\u0648\u062f \u0648 \u0623\u064a\u0642\u0648\u0646\u0627\u062a \u0648 \u0634\u0631\u064a\u0637 \u0627\u0644\u062d\u0627\u0644\u0629 export.nonvisual= \u062d\u062f\u0648\u062f \u0648 \u0623\u064a\u0642\u0648\u0646\u0627\u062a \u0648 \u062e\u0637 \u0627\u0644\u0623\u0648\u0627\u0645\u0631 export.style= Applet\u0646\u0645\u0637 \u0623\u0628\u0644\u0627\u062a export.setcolor= \u0625\u062e\u062a\u064a\u0627\u0631 \u0627\u0644\u0644\u0648\u0646 export.savefirst= \u0627\u0644\u0645\u0644\u0641 \u063a\u064a\u0631 \u0645\u062d\u0641\u0648\u0638 \u0628\u0639\u062f export.soltext= \u0646\u0635 \u0627\u0644\u062d\u0644 export.stylesheet= CSS \u0645\u0644\u0641 \u0628\u062a\u0646\u0633\u064a\u0642 export.solution= \u0645\u0644\u0641 \u062d\u0644 export.jumpsol= \u0627\u0644\u0630\u0647\u0627\u0628 \u0625\u0644\u0649 \u0627\u0644\u062d\u0644 export.linksol= \u0627\u0644\u0631\u0628\u0637 \u0628\u0627\u0644\u062d\u0644 export.savesol= \u062d\u0641\u0638 \u0645\u0644\u0641 \u0627\u0644\u062d\u0644 export.track= \u0645\u062d\u0644 export.digits= \u062d\u0641\u0638 \u062f\u0642\u0629 \u0638\u0647\u0648\u0631 \u0627\u0644\u0623\u0631\u0642\u0627\u0645 export.setsize= \u0645\u0642\u0627\u0633 export.signature=Created with C.a.R. by R. Grothmann export.colors= \u062d\u0641\u0638 \u0627\u0644\u0623\u0644\u0648\u0627\u0646 export.background= \u062d\u0641\u0638 \u0627\u0644\u062e\u0644\u0641\u064a\u0629 help.title= \u062a\u0639\u0644\u064a\u0645\u0627\u062a help.error= \u0639\u062f\u0645 \u0625\u0645\u0643\u0627\u0646\u064a\u0629 \u0641\u062a\u062d \u0627\u0644\u0645\u0644\u0641 help.file=ar_schoolgeometry.txt coloreditor.title= \u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0644\u0648\u0646 coloreditor.red= \u0623\u062d\u0645\u0631 coloreditor.green= \u0623\u062e\u0636\u0631 coloreditor.blue= \u0623\u0632\u0631\u0642 coloreditor.color= \u0644\u0648\u0646\u0643 \u0627\u0644\u0645\u062e\u062a\u0627\u0631 comment.title= \u0627\u0644\u062a\u0639\u0644\u064a\u0642 \u0639\u0644\u0649 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 comment.set= \u0646\u0639\u0645 comment.cancel= \u0625\u0644\u063a\u0627\u0621 comment.close= \u0625\u063a\u0644\u0627\u0642 iconedit.title= \u062a\u0634\u062e\u064a\u0635 \u0634\u0631\u064a\u0637 \u0627\u0644\u0623\u062f\u0648\u0627\u062a iconedit.twobars= \u0634\u0631\u064a\u0637\u0627 \u0623\u062f\u0648\u0627\u062a jobcomment.title= \u062a\u0645\u0631\u064a\u0646 select.title= \u062a\u062d\u062f\u064a\u062f select.ok= \u0646\u0639\u0645 select.cancel= \u0625\u0644\u063a\u0627\u0621 select.comment= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u062a\u0639\u0644\u064a\u0642 select.all= \u0627\u0644\u0643\u0644 message.circle.midpoint= \u062f\u0627\u0626\u0631\u0629 : \u0645\u0646\u062a\u0635\u0641 \u0642\u0637\u0639\u0629 \u061f message.circle.radius= \u062f\u0627\u0626\u0631\u0629 : \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0627\u0644\u062f\u0627\u0626\u0631\u0629 \u061f - \u0632\u0631 \u0634\u064a\u0641\u062a \u0646\u0635\u0641 \u0642\u0637\u0631 \u062b\u0627\u0628\u062a message.fixedcircle.midpoint= \u062f\u0627\u0626\u0631\u0629 : \u0630\u0627\u062a \u0646\u0635\u0641 \u0642\u0637\u0631 \u062b\u0627\u0628\u062a \u0645\u0646\u062a\u0635\u0641 \u0642\u0637\u0639\u0629 \u061f message.fixedcircle.radius= \u062f\u0627\u0626\u0631\u0629 : \u0630\u0627\u062a \u0646\u0635\u0641 \u0642\u0637\u0631 \u062b\u0627\u0628\u062a \u0646\u0635\u0641 \u0627\u0644\u0642\u0637\u0631 \u061f message.edit= \u062a\u062d\u0631\u064a\u0631 : \u0643\u0627\u0626\u0646 \u061f message.line.first= \u0645\u0633\u062a\u0642\u064a\u0645 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 \u061f message.line.second= \u0645\u0633\u062a\u0642\u064a\u0645 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u062b\u0627\u0646\u064a\u0629 \u061f message.ray.first= \u0646\u0635\u0641 \u0645\u0633\u062a\u0642\u064a\u0645 : \u0627\u0644\u0645\u0628\u062f\u0623 \u061f message.ray.second= \u0646\u0635\u0641 \u0645\u0633\u062a\u0642\u064a\u0645 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u062b\u0627\u0646\u064a\u0629 \u061f message.move.select= \u062d\u0631\u0643\u0629 : \u0627\u062e\u062a\u0631 \u0643\u0627\u0626\u0646 \u061f - \u0632\u0631 \u0634\u064a\u0641\u062a \u0623\u0643\u062b\u0631 \u0645\u0646 \u0643\u0627\u0626\u0646 message.move.move= \u062d\u0631\u0643\u0629 : \u062d\u0631\u0643 \u0627\u0644\u0646\u0642\u0637\u0629 \u061f message.point= \u0646\u0642\u0637\u0629 : \u0623\u0646\u0634\u0649\u0621 \u0646\u0642\u0637\u0629 - \u0632\u0631 \u0634\u064a\u0641\u062a \u0646\u0642\u0637\u0629 \u062b\u0627\u0628\u062a\u0629 message.segment.first= \u0642\u0637\u0639\u0629 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 \u061f message.segment.second= \u0642\u0637\u0639\u0629 \u0645\u0633\u062a\u0642\u064a\u0645\u0629 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u062b\u0627\u0646\u064a\u0629 \u061f - \u0632\u0631 \u0634\u064a\u0641\u062a \u0637\u0648\u0644 \u062b\u0627\u0628\u062a message.fixedsegment.first= \u0642\u0637\u0639\u0629 \u0645\u0633\u062a\u0642\u064a\u0645\u0629 \u062b\u0627\u0628\u062a\u0629 \u0627\u0644\u0637\u0648\u0644 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 \u061f message.fixedsegment.second= \u0642\u0637\u0639\u0629 \u0645\u0633\u062a\u0642\u064a\u0645\u0629 \u062b\u0627\u0628\u062a\u0629 \u0627\u0644\u0637\u0648\u0644 : \u0623\u0646\u0642\u0631 \u0641\u064a \u0645\u0643\u0627\u0646 \u0645\u0627 message.intersection.first= \u062a\u0642\u0627\u0637\u0639 : \u0627\u0644\u0643\u0627\u0626\u0646 \u0627\u0644\u0623\u0648\u0644 \u0623\u0648 \u062a\u0642\u0627\u0637\u0639 \u061f message.intersection.second= \u062a\u0642\u0627\u0637\u0639 : \u0627\u0644\u0643\u0627\u0626\u0646 \u0627\u0644\u0623\u0648\u0644 \u061f message.hide= \u0625\u0638\u0647\u0627\u0631 \u0623\u0648 \u0625\u062e\u0641\u0627\u0621 : \u062d\u062f\u062f \u0643\u0627\u0626\u0646 message.tracker.select= \u0645\u062d\u0644 : \u0646\u0642\u0637\u0629 \u0623\u0648 \u0645\u0633\u062a\u0642\u064a\u0645 - \u0632\u0631 \u0634\u064a\u0641\u062a \u062a\u062d\u062f\u064a\u062f \u0643\u0627\u0626\u0646 \u0622\u062e\u0631 message.tracker.selectpoint= \u0645\u062d\u0644 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0645\u062a\u062d\u0631\u0643\u0629 \u061f message.tracker.move= \u0645\u062d\u0644 : \u062d\u0631\u0643 \u0627\u0644\u0646\u0642\u0637\u0629 message.objecttracker.select= \u0645\u062d\u0644 (\u0623\u0648\u062a\u0648\u0645\u0627\u062a\u064a\u0643\u064a) : \u0646\u0642\u0637\u0629 \u0623\u0648 \u0645\u0633\u062a\u0642\u064a\u0645 - \u0632\u0631 \u0634\u064a\u0641\u062a \u062d\u062f\u062f \u0643\u0627\u0626\u0646 \u0622\u062e\u0631 message.objecttracker.object= \u0645\u062d\u0644 \u0623\u0648\u062a\u0648\u0645\u0627\u062a\u064a\u0643\u064a : \u0639\u0644\u0649 \u0627\u064a \u0645\u0633\u062a\u0642\u064a\u0645 \u0623\u0648 \u062f\u0627\u0626\u0631\u0629 \u061f message.objecttracker.selectpoint= \u0645\u062d\u0644 \u0623\u0648\u062a\u0648\u0645\u0627\u062a\u064a\u0643\u064a : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0645\u062a\u062d\u0631\u0643\u0629 \u061f message.objecttracker.selectanypoint= \u0645\u062d\u0644 \u0623\u0648\u062a\u0648\u0645\u0627\u062a\u064a\u0643\u064a : \u0646\u0642\u0637\u0629 \u0622\u062e\u0631\u0649 \u0644\u0644\u062d\u0631\u0643\u0629 \u061f message.objecttracker.move= \u0645\u062d\u0644 \u0623\u0648\u062a\u0648\u0645\u0627\u062a\u064a\u0643\u064a : \u062d\u0631\u0643 \u0627\u0644\u0646\u0642\u0637\u0629 message.objecttracker.start= \u0645\u062d\u0644 \u0623\u0648\u062a\u0648\u0645\u0627\u062a\u064a\u0643\u064a : \u0625\u0628\u062f\u0623 \u0627\u0644\u062d\u0631\u0643\u0629 \u061f message.parallel.first= \u0645\u0648\u0627\u0632\u064a : \u0645\u0633\u062a\u0642\u064a\u0645 \u061f message.parallel.second= \u0645\u0648\u0627\u0632\u064a : \u0646\u0642\u0637\u0629 \u061f message.plumb.first= \u0639\u0645\u0648\u062f\u064a : \u0645\u0633\u062a\u0642\u064a\u0645 \u061f message.plumb.second= \u0639\u0645\u0648\u062f\u064a : \u0646\u0642\u0637\u0629 \u061f message.circle3.first= \u062f\u0627\u0626\u0631\u0629 : \u0623\u0648\u0644 \u0646\u0642\u0637\u0629 \u0646\u0635\u0641 \u0627\u0644\u0642\u0637\u0631\u061f message.circle3.second= \u062f\u0627\u0626\u0631\u0629 : \u062b\u0627\u0646\u064a \u0646\u0642\u0637\u0629 \u0646\u0635\u0641 \u0627\u0644\u0642\u0637\u0631 \u061f message.circle3.midpoint= \u062f\u0627\u0626\u0631\u0629 : \u0645\u0646\u062a\u0635\u0641 \u0642\u0637\u0639\u0629 \u061f message.midpoint.first= \u0645\u0646\u062a\u0635\u0641 \u0642\u0637\u0639\u0629 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0627\u0648\u0644\u0649 \u061f message.midpoint.second= \u0645\u0646\u062a\u0635\u0641 \u0642\u0637\u0639\u0629 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u062b\u0627\u0646\u064a\u0629 \u061f message.quadric= \u0642\u0637\u0639 \u0645\u062e\u0631\u0648\u0637\u064a : \u0646\u0642\u0637\u0629 \u0631\u0642\u0645 message.angle.first= \u0632\u0627\u0648\u064a\u0629 : \u0623\u0648\u0644 \u0646\u0642\u0637\u0629 \u0645\u0646 \u0627\u0644\u0632\u0627\u0648\u064a\u0629 \u061f message.angle.root= \u0627\u0644\u0632\u0627\u0648\u064a\u0629 : \u0627\u0644\u0631\u0623\u0633 \u061f message.angle.second= \u0632\u0627\u0648\u064a\u0629 : \u0622\u062e\u0631 \u0646\u0642\u0637\u0629 \u0645\u0646 \u0627\u0644\u0632\u0627\u0648\u064a\u0629 \u061f - \u0632\u0631 \u0634\u064a\u0641\u062a \u0632\u0627\u0648\u064a\u0629 \u062b\u0627\u0628\u062a\u0629 message.fixedangle.first= \u0632\u0627\u0648\u064a\u0629 \u062b\u0627\u0628\u062a\u0629 : \u0623\u0648\u0644 \u0646\u0642\u0637\u0629 \u0645\u0646 \u0627\u0644\u0632\u0627\u0648\u064a\u0629 \u061f message.fixedangle.root= \u0632\u0627\u0648\u064a\u0629 \u062b\u0627\u0628\u062a\u0629 : \u0627\u0644\u0631\u0623\u0633 \u061f message.fixedangle.second= \u0632\u0627\u0648\u064a\u0629 \u062b\u0627\u0628\u062a\u0629 : \u0623\u0646\u0642\u0631 \u0641\u064a \u0645\u0643\u0627\u0646 \u0622\u062e\u0631 message.label.select= \u0646\u0642\u0644 \u062a\u0633\u0645\u064a\u0629 : \u0625\u062e\u062a\u0631 \u062a\u0633\u0645\u064a\u0629 message.label.move= \u0646\u0642\u0644 \u062a\u0633\u0645\u064a\u0629 : \u0623\u0646\u0642\u0644 \u0627\u0644\u062a\u0633\u0645\u064a\u0629 message.boundedpoint= \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0643\u0627\u0626\u0646 : \u062f\u0627\u0626\u0631\u0629 \u0623\u0648 \u0645\u0633\u062a\u0642\u064a\u0645 \u061f - \u0632\u0631 \u0634\u064a\u0641\u062a \u063a\u064a\u0631 \u062b\u0627\u0628\u062a\u0629 message.parameters= \u0645\u0627\u0643\u0631\u0648 : \u0643\u0627\u0626\u0646\u0627\u062a \u0625\u0628\u062a\u062f\u0627\u0626\u064a\u0629 \u061f message.targets= \u0645\u0627\u0643\u0631\u0648 : \u0643\u0627\u0626\u0646\u0627\u062a \u0646\u0647\u0627\u0626\u064a\u0629 \u061f message.savejob.first= \u062a\u0639\u064a\u064a\u0646 \u062a\u0645\u0631\u064a\u0646 : \u0622\u062e\u0631 \u0643\u0627\u0626\u0646 \u0638\u0627\u0647\u0631 \u0645\u0646 \u0627\u0644\u062a\u0645\u0631\u064a\u0646 \u061f message.savejob.second= \u062a\u0639\u064a\u064a\u0646 \u062a\u0645\u0631\u064a\u0646 : \u0643\u0627\u0626\u0646 \u0647\u062f\u0641 \u061f - \u0632\u0631 \u0634\u064a\u0641\u062a \u0628\u062f\u0648\u0646 \u062a\u062d\u0642\u064a\u0642 message.savejob.third= \u062a\u0639\u064a\u064a\u0646 \u062a\u0645\u0631\u064a\u0646 : \u0643\u0627\u0626\u0646\u0627\u062a \u0623\u062e\u0631\u0649 \u0644\u0644\u0625\u0638\u0647\u0627\u0631 \u061f message.runmacro= %: %. % - % \u0645\u0627\u0643\u0631\u0648 message.runmacro.return= ( \u0625\u062e\u062a\u064a\u0627\u0631 SPACE \u0627\u0644\u0632\u0631 ) message.runmacro.fixes=( \u062a\u062b\u0628\u064a\u062a \u0627\u0644\u062a\u062d\u062f\u064a\u062f SHIFT \u0627\u0644\u0632\u0631) message.delete= \u062d\u0630\u0641 : \u062d\u062f\u062f \u0627\u0644\u0643\u0627\u0626\u0646 message.reorder= \u0625\u0639\u0627\u062f\u0629 \u0627\u0644\u062a\u0631\u062a\u064a\u0628 : \u0625\u062e\u062a\u0631 \u0643\u0627\u0626\u0646 message.expression= \u0639\u0628\u0627\u0631\u0629 \u062d\u0633\u0627\u0628\u064a\u0629 : \u062d\u062f\u062f \u0645\u0643\u0627\u0646 message.area= \u0645\u0636\u0644\u0639 \u0645\u0644\u0648\u0646 : \u0631\u0623\u0633 \u061f message.text= \u0646\u0635 : \u062d\u062f\u062f \u0645\u0643\u0627\u0646 message.animator.point= \u062d\u0631\u0643\u0629 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0645\u062a\u062d\u0631\u0643\u0629 \u061f message.animator.segment= \u062d\u0631\u0643\u0629 : \u062f\u0627\u0626\u0631\u0629 \u0627\u0648 \u0646\u0635\u0641 \u0645\u0633\u062a\u0642\u064a\u0645 \u061f message.animator.running= \u062d\u0631\u0643\u0629 : \u062a\u0646\u0641\u0630 ... \u0623\u0646\u0642\u0631 \u0628\u0627\u0644\u0645\u0627\u0648\u0633 \u0644\u0625\u064a\u0642\u0627\u0641 \u0627\u0644\u062d\u0631\u0643\u0629 message.range.first= \u0642\u0648\u0633 : \u0631\u0633\u0645 \u0627\u0644\u062f\u0627\u0626\u0631\u0629 \u0625\u0628\u062a\u062f\u0627\u0621\u0627 \u0645\u0646 message.range.second= \u0642\u0648\u0633 : ... \u0625\u0644\u0649 \u0627\u0644\u0646\u0642\u0637\u0629 \u061f message.setaway.away= \u062d\u0628\u0633 \u0627\u0644\u062a\u0642\u0627\u0637\u0639 \u0628\u0639\u064a\u062f \u0639\u0646 \u0627\u0644\u0646\u0642\u0637\u0629 \u061f message.setaway.close= \u062d\u0628\u0633 \u0627\u0644\u062a\u0642\u0627\u0637\u0639 \u0642\u0631\u064a\u0628 \u0645\u0646 \u0627\u0644\u0646\u0642\u0637\u0629 \u061f objectsedit.title= \u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u062e\u064a\u0627\u0631\u0627\u062a point.type.square= \u0645\u0631\u0628\u0639 point.type.diamond= \u0645\u0639\u064a\u0646 point.type.circle= \u062f\u0627\u0626\u0631\u0629 point.type.dot= \u0646\u0642\u0637\u0629 color.type.normal= \u0639\u0627\u062f\u064a color.type.thick= \u0633\u0645\u064a\u0643 color.type.thin= \u0631\u0642\u064a\u0642 color.type.invisible= \u0645\u062e\u0641\u064a text.point= % , % \u0646\u0642\u0637\u0629 \u0641\u064a text.line= % , % \u0645\u0633\u062a\u0642\u064a\u0645 \u0634\u0627\u0645\u0644 \u0644\u0644\u0646\u0642\u0637\u062a\u064a\u0646 text.segment= % , % \u0642\u0637\u0639\u0629 \u0645\u0633\u062a\u0642\u064a\u0645 \u0645\u0646 text.segment.fixed= % , % \u0645\u0633\u062a\u0642\u064a\u0645 \u0634\u0627\u0645\u0644 \u0644\u0644\u0646\u0642\u0637\u062a\u064a\u0646 text.ray= % , % \u0646\u0635\u0641 \u0645\u0633\u062a\u0642\u064a\u0645 \u0645\u0646 text.intersection= % , % \u062a\u0642\u0627\u0637\u0639 \u0628\u064a\u0646 text.circle= \u062f\u0627\u0626\u0631\u0629 \u0630\u0627\u062a \u0645\u0631\u0643\u0632 \u0648 \u0627\u0644\u0634\u0627\u0645\u0644\u0629 \u0644\u0644\u0646\u0642\u0637\u0629 text.circle.fixed= \u062f\u0627\u0626\u0631\u0629 \u0630\u0627\u062a \u0627\u0644\u0645\u0631\u0643\u0632 \u0648 \u0627\u0644\u0634\u0627\u0645\u0644\u0629 \u0644\u0644\u0646\u0642\u0637\u0629 \u0648 \u0646\u0635\u0641 \u0627\u0644\u0642\u0637\u0631 \u0627\u0644\u062b\u0627\u0628\u062a text.fixedcircle= \u062f\u0627\u0626\u0631\u0629 \u0630\u0627\u062a \u0627\u0644\u0645\u0631\u0643\u0632 \u0648 \u0646\u0635\u0641 \u0627\u0644\u0642\u0637\u0631 text.circle3= \u062f\u0627\u0626\u0631\u0629 \u0628\u062b\u0644\u0627\u062b \u0646\u0642\u0637 \u0630\u0627\u062a \u0627\u0644\u0645\u0631\u0643\u0632 \u0648 \u0646\u0635\u0641 \u0627\u0644\u0642\u0637\u0631 \u0645\u0639\u064a\u0646 \u0628\u0627\u0644\u0646\u0642\u0637\u062a\u064a\u0646 text.parallel= \u0645\u0633\u062a\u0642\u064a\u0645 \u0645\u0648\u0627\u0632\u064a \u0627\u0646\u0637\u0644\u0627\u0642\u0627 \u0645\u0646 \u0625\u0644\u0649 text.midpoint= \u0645\u0646\u062a\u0635\u0641 \u0642\u0637\u0639\u0629 \u0628\u064a\u0646 \u0627\u0644\u0646\u0642\u0637\u062a\u064a\u0646 text.quadric= \u0642\u0637\u0639 \u0645\u0643\u0627\u0641\u0649\u0621 \u0645\u0646 \u062e\u0644\u0627\u0644 \u0627\u0644\u0646\u0642\u0637 text.plumb= \u0645\u0633\u062a\u0642\u064a\u0645 \u0639\u0645\u0648\u062f\u064a \u0645\u0646 \u062e\u0644\u0627\u0644 \u0627\u0644\u0646\u0642\u0637\u062a\u064a\u0646 text.angle= % - % - % \u0627\u0644\u0632\u0627\u0648\u064a\u0629 text.angle.fixed= \u0632\u0627\u0648\u064a\u0629 \u0628\u062b\u0644\u0627\u062b \u0646\u0642\u0637 \u0648 \u0642\u064a\u0627\u0633 text.boundedpoint= \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 text.expression= \u0639\u0628\u0627\u0631\u0629 \u0639\u0646\u062f text.area=Polygon text.fixedangle= \u0632\u0627\u0648\u064a\u0629 \u062b\u0627\u0628\u062a\u0629 name.Point= \u0646\u0642\u0637\u0629 name.Intersection= \u062a\u0642\u0627\u0637\u0639 name.OtherIntersection= \u062a\u0642\u0627\u0637\u0639 \u0622\u062e\u0631 name.Circle= \u062f\u0627\u0626\u0631\u0629 name.Circle3= \u062f\u0627\u0626\u0631\u0629 name.Segment= \u0642\u0637\u0639\u0629 \u0645\u0633\u062a\u0642\u064a\u0645\u0629 name.Ray= \u0646\u0635\u0641 \u0645\u0633\u062a\u0642\u064a\u0645 name.Line= \u0645\u0633\u062a\u0642\u064a\u0645 name.TwoPointLine= \u0645\u0633\u062a\u0642\u064a\u0645 \u0645\u0639\u064a\u0646 \u0628\u0646\u0642\u0637\u062a\u064a\u0646 name.Parallel= \u0645\u0648\u0627\u0632\u064a name.Midpoint= \u0645\u0646\u062a\u0635\u0641 \u0642\u0637\u0639\u0629 name.Quadric= \u0642\u0637\u0639 \u0645\u0643\u0627\u0641\u064a\u0621 name.Plumb= \u0639\u0645\u0648\u062f\u064a name.Angle= \u0632\u0627\u0648\u064a\u0629 name.PointOn= \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 name.Expression= \u0639\u0628\u0627\u0631\u0629 name.Polygon= \u0645\u0636\u0644\u0639 prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.angle==a(,,) prompt.area=A(,,) prompt.quadric=quadric(,,,,) prompt.function=function(,,,,,) name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=pl name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=p name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=poly name.short.Function=f popup.hidden= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0627\u0644\u0645\u062e\u0641\u064a\u0629 popup.replay= \u0625\u0639\u0627\u062f\u0629 \u0631\u0624\u064a\u0629 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 popup.empty= --- \u0645\u0627\u0643\u0631\u0648\u0627\u062a --- replay.title= \u0625\u0639\u0627\u062f\u0629 \u0631\u0624\u064a\u0629 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 reorder.title= \u062a\u0631\u062a\u064a\u0628 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a reorder.message = \u0631\u062a\u0628 \u0628\u0639\u062f reorder.notfound= \u0643\u0627\u0626\u0646 \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f reorder.warning= \u063a\u064a\u0631 \u0645\u0645\u0643\u0646 setgrid.title= \u0639\u0631\u0636 \u0627\u0644\u0634\u0628\u0643\u0629 setgrid.prompt= \u0623\u062f\u062e\u0644 \u0627\u0644\u0639\u0631\u0636 \u0627\u0644\u062c\u062f\u064a\u062f \u0644\u0644\u0634\u0628\u0643\u0629 setgrid.set= \u0646\u0639\u0645 definemacro.title= \u062a\u0639\u064a\u064a\u0646 \u0645\u0627\u0643\u0631\u0648 definemacro.name= \u062a\u0633\u0645\u064a\u0629 definemacro.comment= \u062a\u0639\u0644\u064a\u0642 \u0639\u0644\u0649 \u0627\u0644\u0645\u0627\u0643\u0631\u0648 definemacro.noparams= \u0643\u0627\u0626\u0646\u0627\u062a \u0625\u0628\u062a\u062f\u0627\u0626\u064a\u0629 \u0644\u0644\u0645\u0627\u0643\u0631\u0648 definemacro.nomacro= \u0644\u0627 \u062a\u0648\u062c\u062f \u0645\u0627\u0643\u0631\u0648 \u0644\u0644\u062a\u0646\u0641\u064a\u0630 definemacro.targetsonly= \u0625\u062e\u0641\u0627\u0621 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 definemacro.invisible= \u0625\u062e\u0641\u0627\u0621 \u0643\u0644\u064a definemacro.promptfor= \u0637\u0644\u0628 \u0642\u064a\u0645\u0629 macro.replace.title= \u0625\u0639\u0627\u062f\u0629 \u062a\u0633\u0645\u064a\u0629 \u0627\u0644\u0645\u0627\u0643\u0631\u0648 macro.replace= \u0625\u0639\u0627\u062f\u0629 \u062a\u0633\u0645\u064a\u0629 \u0627\u0644\u0645\u0627\u0643\u0631\u0648 macro.replace.all= \u0627\u0644\u0643\u0644 macro.usage= \u0625\u0633\u062a\u062e\u062f\u0627\u0645 \u062e\u0627\u0637\u064a\u0621 \u0644\u0644\u0645\u0627\u0643\u0631\u0648 - \u0623\u0646\u0638\u0631 \u0627\u0644\u062a\u0644\u0645\u064a\u062d\u0627\u062a macro.prompt.title= \u0648\u0633\u0627\u0626\u0637 macro.prompt.prompt= \u0623\u062f\u062e\u0644 \u0642\u064a\u0645\u0629 \u0644\u0644\u0648\u0633\u064a\u0637 macro.prompt.illegal= \u0642\u064a\u0645\u0629 \u0645\u0631\u0641\u0648\u0636\u0629 digits.title= \u0639\u062f\u062f \u0627\u0644\u0627\u0631\u0642\u0627\u0645 \u0627\u0644\u0639\u0634\u0631\u064a\u0629 \u0627\u0644\u0638\u0627\u0647\u0631\u0629 digits.edit= \u062a\u062d\u0631\u064a\u0631 digits.lengths= \u0625\u0638\u0647\u0627\u0631 digits.angles= \u0632\u0648\u0627\u064a\u0627 editrun.title= \u062a\u062d\u0631\u064a\u0631 \u0625\u0646\u0634\u0627\u0621 editrun.run= \u0625\u062d\u0641\u0638 \u0648 \u0646\u0641\u0630 editrun.load= \u0625\u0646\u0634\u0627\u0621\u0627\u062a \u0622\u062e\u0631\u0649 sure.title= \u0647\u0644 \u0623\u0646\u062a \u0645\u062a\u0623\u0643\u062f \u061f sure.macros= \u062d\u0630\u0641 \u0643\u0644 \u0627\u0644\u0645\u0627\u0643\u0631\u0648\u0627\u062a \u0627\u0644\u0634\u062e\u0635\u064a\u0629 \u061f sure.delete= \u0625\u0644\u063a\u0627\u0621 \u062d\u0641\u0638 \u0627\u0644\u062a\u063a\u064a\u0631\u0627\u062a \u0627\u0644\u062c\u062f\u064a\u062f\u0629 \u061f close.title= \u0646\u0647\u0627\u064a\u0629 close.prompt= \u0647\u0644 \u0623\u0646\u062a \u0645\u062a\u0623\u0643\u062f \u0645\u0646 \u0625\u0646\u0647\u0627\u0621 \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062c \u061f file.exists.title= \u0627\u0644\u0645\u0644\u0641 \u0645\u0648\u062c\u0648\u062f \u0645\u0633\u0628\u0642\u0627 file.exists.overwrite= \u0627\u0644\u0645\u0644\u0641 \u0645\u0648\u062c\u0648\u062f \u0645\u0633\u0628\u0642\u0627 . \u0627\u0644\u0643\u062a\u0627\u0628\u0629 \u0639\u0644\u064a\u0647\u061f - \u064a\u0639\u0646\u064a \u062d\u0630\u0641 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0623\u0635\u0644\u064a exception.nparams= \u0639\u062f\u062f \u0627\u0644\u0648\u0633\u0627\u0626\u0637 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644 exception.notfound= \u0643\u0627\u0626\u0646 \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f \u0623\u0648 \u0623\u0646\u0634\u0649\u0621 \u0628\u0639\u062f \u0627\u0644\u0639\u0628\u0627\u0631\u0629 exception.type= \u0643\u0627\u0626\u0646 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644 exception.expression= \u0639\u0628\u0627\u0631\u0629 \u063a\u064a\u0631 \u0635\u062d\u064a\u062d\u0629 exception.canfix= \u0643\u0627\u0626\u0646 \u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u062b\u0628\u064a\u062a\u0647 exception.fix= \u0642\u064a\u0645\u0629 \u063a\u064a\u0631 \u0635\u062d\u064a\u062d\u0629 exception.novalue= \u0642\u064a\u0645\u0629 \u063a\u064a\u0631 \u0635\u062d\u064a\u062d\u0629 exception.elementary= \u0639\u0646\u0635\u0631 \u063a\u064a\u0631 \u0635\u062d\u064a\u062d \u0641\u064a \u0627\u0644\u0639\u0628\u0627\u0631\u0629 exception.bracket= \u062a\u0646\u0642\u0635 \u0642\u0648\u0633 \u0641\u064a \u0627\u0644\u0639\u0628\u0627\u0631\u0629 exception.quotes= \u062a\u0646\u0642\u0635 \u0645\u0632\u062f\u0648\u062c\u0629 \u0641\u064a \u0627\u0644\u0639\u0628\u0627\u0631\u0629 exception.dot= \u0641\u0627\u0635\u0644\u062a\u064a\u0646 \u0639\u0634\u0631\u064a\u062a\u064a\u0646 \u0641\u064a \u0639\u062f\u062f exception.nodigit= \u0644\u0627 \u064a\u0648\u062c\u062f \u0631\u0642\u0645 \u0641\u064a \u0647\u0630\u0627 \u0627\u0644\u0639\u062f\u062f exception.function= \u062f\u0627\u0644\u0629 \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641\u0629 exception.parameter= \u0648\u0633\u0627\u0626\u0637 \u062f\u0627\u0644\u0629 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644\u0629 exception.macro= \u0648\u0633\u0627\u0626\u0637 \u0645\u0627\u0643\u0631\u0648 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644\u0629 exception.name= \u062a\u0646\u0642\u0635 \u062a\u0633\u0645\u064a\u0629 exception.job= \u0648\u0633\u0627\u0626\u0637 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644\u0629 exception.track= \u0648\u0633\u0627\u0626\u0637 \u0627\u0644\u0645\u062d\u0644 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644\u0629 exception.animate= \u0648\u0633\u0627\u0626\u0637 \u062d\u0631\u0643\u0629 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644\u0629 exception.boolean= false \u0623\u0648 true \u0642\u064a\u0645\u0629 \u0644\u0627 \u0628\u062f \u0623\u0646 \u062a\u0643\u0648\u0646 exception.value= \u0642\u064a\u0645\u0629 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644\u0629 exception.color= \u0644\u0648\u0646 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644 exception.colortype= \u0633\u0645\u0643 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644 exception.type= \u0646\u0645\u0637 \u0646\u0642\u0637\u0629 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644 exception.macroparameter= \u0643\u0627\u0626\u0646\u0627\u062a \u0625\u0628\u062a\u062f\u0627\u0626\u064a\u0629 \u0644\u0644\u0645\u0627\u0643\u0631\u0648 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644\u0629 exception.macrotarget= \u0643\u0627\u0626\u0646\u0627\u062a \u0646\u0647\u0627\u0626\u064a\u0629 \u0644\u0644\u0645\u0627\u0643\u0631\u0648 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644\u0629 exception.prompt= \u0637\u0644\u0628 \u0643\u0627\u0626\u0646 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644 exception.prompt.parameter= \u0637\u0644\u0628 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644 exception.parameters= \u0648\u0633\u064a\u0637 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644 exception.brackets= \u062e\u0637\u0623 \u0641\u064a \u0627\u0644\u0623\u0642\u0648\u0627\u0633 exception.double= \u062a\u0633\u0645\u064a\u0629 \u063a\u064a\u0631 \u0648\u062d\u064a\u062f\u0629 error.setaway= \u0647\u0630\u0647 \u0627\u0644\u0646\u0642\u0637\u0629 \u063a\u064a\u0631 \u0645\u0639\u0631\u0641\u0629 \u0642\u0628\u0644 \u0627\u0644\u062a\u0642\u0627\u0637\u0639 error.objecttracker.depends= \u0627\u0644\u0646\u0642\u0637\u0629 \u0645\u0631\u062a\u0628\u0637\u0629 \u0628\u0643\u0627\u0626\u0646 \u0622\u062e\u0631 constructiondisplay.title= \u0627\u0644\u0625\u0646\u0634\u0627\u0621 function.hide=hide function.hide.short=hide function.rename=name function.rename.short=name function.value=value function.value.short=value function.window=window function.window.short=W function.color=Color function.color.short=col function.thickness=thikness function.thickness.short=th function.type=Type function.type.short=type function.partial=Partial function.partial.short=part function.fill=Fill function.fill.short=fill function.back=Background function.back.short=back function.acute=Acute function.acute.short=acute function.obtuse=Obtuse function.obtuse.short=obtuse function.solid=Solid function.solid.short=solid function restrict=Restrict function restrict.short=restrict expression.value= \u0642\u064a\u0645\u0629 configure.title= \u0627\u0644\u0645\u0628\u062d\u0631 configure.prompt= \u0623\u062f\u062e\u0644 \u0637\u0644\u0628\u064a\u0629 \u0627\u0644\u0645\u0628\u062d\u0631 # New Resources: background.error= \u0639\u062f\u0645 \u0625\u0645\u0643\u0627\u0646\u064a\u0629 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0635\u0648\u0631\u0629 menu.background= \u0627\u0644\u062e\u0644\u0641\u064a\u0629 menu.background.grab= \u062d\u0641\u0638 \u0627\u0644\u0635\u0648\u0631\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629 \u0643\u062e\u0644\u0641\u064a\u0629 menu.background.clear= \u062d\u0630\u0641 \u0627\u0644\u062e\u0644\u0641\u064a\u0629 menu.background.load= \u062a\u062d\u0645\u064a\u0644 \u0635\u0648\u0631\u0629 \u062e\u0644\u0641\u064a\u0629 menu.background.usesize= \u062a\u0642\u0648\u064a\u0645 \u0627\u0644\u0623\u0628\u0639\u0627\u062f \u0644\u0644\u0635\u0648\u0631\u0629 menu.background.tile= \u0646\u0642\u0634 menu.background.center= \u062a\u0648\u0633\u064a\u0637 \u0627\u0644\u062e\u0644\u0641\u064a\u0629 iconhelp.grab= \u062a\u0639\u064a\u064a\u0646 \u0623\u0648 \u062d\u0630\u0641 \u0627\u0644\u062e\u0644\u0641\u064a\u0629 filedialog.backgroundload= \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u062e\u0644\u0641\u064a\u0629 filedialog.backgroundload.action= \u062a\u062d\u0645\u064a\u0644 # New Resources in Version 2.14 menu.file.compress= \u062f\u0627\u0626\u0645\u0627 \u0625\u0638\u063a\u0637 menu.file.savesvg= (SVG) \u062d\u0641\u0638 \u0627\u0644\u0635\u0648\u0631\u0629 \u0628\u062a\u0646\u0633\u064a\u0642 # Version 2.15 loading= .... \u062a\u062d\u0645\u064a\u0644 \u060c \u062a\u0631\u064a\u062b # Version 2.18 and 2.19 menu.settings.font.default= \u062e\u0637 \u0625\u0641\u062a\u0631\u0627\u0636\u064a menu.settings.font.bold= \u062e\u0637 \u0633\u0645\u064a\u0643 menu.settings.font.large= \u062e\u0637 \u0639\u0631\u064a\u0636 menu.file.saveeps= (EPS) \u062d\u0641\u0638 \u0627\u0644\u0635\u0648\u0631\u0629 \u0628\u062a\u0646\u0633\u064a\u0642 menu.fonts=Font # Version 2.20 bmpscaler.title= (Bmp) \u0636\u0639\u0647\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0644\u0645 bmpscaler.width= \u0627\u0644\u0639\u0631\u0636 bmpscaler.height= \u0627\u0644\u0625\u0631\u062a\u0641\u0627\u0639 bmpscaler.scale= \u0627\u0644\u0633\u0644\u0645 \u0625\u0638\u063a\u0637 \u0639\u0644\u0649 \u0632\u0631 \u0627\u0644\u0625\u062f\u062e\u0627\u0644 bmpscaler.illegal= \u0642\u064a\u0645\u0629 \u063a\u064a\u0631 \u0645\u0642\u0628\u0648\u0644\u0629 # Version 2.21 renamemacro.title= \u0625\u0639\u0627\u062f\u0629 \u062a\u0633\u0645\u064a\u0629 \u0627\u0644\u0645\u0627\u0643\u0631\u0648 renamemacro.name= \u0625\u0633\u0645 \u062c\u062f\u064a\u062f \u0644\u0644\u0645\u0627\u0643\u0631\u0648 menu.special.renamemacro= \u0625\u0639\u0627\u062f\u0629 \u062a\u0633\u0645\u064a\u0629 \u0627\u0644\u0645\u0627\u0643\u0631\u0648 # Version 2.23 savequestion.title= \u062d\u0641\u0638 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 savequestion.qsave= \u062d\u0641\u0638 \u0627\u0644\u062a\u063a\u064a\u0631\u0627\u062a \u061f # Version 2.25 exception.printsize= \u0627\u0644\u0635\u0641\u062d\u0629 \u0623\u0642\u0644 \u0645\u0646 \u0647\u0630\u0627 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 iconhelp.nohelp= \u0645\u0633\u0627\u0639\u062f\u0629 \u063a\u064a\u0631 \u0645\u062a\u0648\u0641\u0631\u0629 iconhelp.type?= \u0646\u0645\u0637 \u0627\u0644\u0646\u0642\u0637\u0629 iconhelp.thickness?= \u0633\u0645\u0643 iconhelp.color?= \u0644\u0648\u0646 iconhelp.filled= \u0643\u0627\u0626\u0646 \u0645\u0644\u0648\u0646 iconhelp.isback= \u0631\u0633\u0645 \u0641\u064a \u0627\u0644\u062e\u0644\u0641\u064a\u0629 iconhelp.inverse= \u0632\u0627\u0648\u064a\u0629 \u0645\u0639\u0627\u0643\u0633\u0629 iconhelp.angle?= \u0642\u064a\u0633 # Version 2.28 message.objecttracker.stop= \u0645\u062d\u0644 \u0623\u0648\u062a\u0648\u0645\u0627\u062a\u064a\u0643\u064a : \u0623\u0646\u0642\u0631 \u0644\u0625\u064a\u0642\u0627\u0641\u0647\u0627 # Version 2.31 menu.settings.indicate= \u0645\u0639\u0627\u064a\u0646\u0629 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a menu.options.other= \u062e\u064a\u0627\u0631\u0627\u062a \u0645\u062a\u0642\u062f\u0645\u0629 menu.help.welcome= \u062c\u062f\u064a\u062f \u0647\u0630\u0627 \u0627\u0644\u0625\u0635\u062f\u0627\u0631 iconhelp.twolines= \u0634\u0631\u064a\u0637\u0627 \u0623\u062f\u0648\u0627\u062a iconhelp.qintersection= \u0637\u0644\u0628 \u0627\u0644\u062a\u0623\u0643\u064a\u062f \u0642\u0628\u0644 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u062a\u0642\u0627\u0637\u0639 iconhelp.qchoice= \u0625\u0638\u0647\u0627\u0631 \u0639\u0644\u0628\u0629 \u0627\u0644\u062d\u0648\u0627\u0631 \u0644\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a iconhelp.qpointon= \u0637\u0644\u0628 \u0627\u0644\u062a\u0623\u0643\u064a\u062f \u0642\u0628\u0644 \u0625\u0646\u0634\u0627\u0621 \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0643\u0627\u0626\u0646 iconhelp.noindicate= \u0639\u062f\u0645 \u0627\u0644\u0625\u0634\u0627\u0631\u0629 \u0625\u0644\u0649 \u0627\u0644\u0643\u0627\u0626\u0646 \u0639\u0646\u062f \u062a\u0645\u0631\u064a\u0631 \u0645\u0624\u0634\u0631 \u0627\u0644\u0641\u0623\u0631\u0629 \u0639\u0644\u064a\u0647 # Version 2.33 menu.file.new= (Ctrl-n) \u0625\u0646\u0634\u0627\u0621 \u062c\u062f\u064a\u062f # Version 2.34 edit.text.title= \u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0646\u0635 edit.text.settings= \u062e\u064a\u0627\u0631\u0627\u062a menu.settings.filedialog= \u0625\u0633\u062a\u0628\u062f\u0644 \u0639\u0644\u0628 \u062d\u0648\u0627\u0631 \u0627\u0644\u0646\u0638\u0627\u0645 # Version 2.35 menu.settings.bitmapbackground= \u0625\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u062e\u0644\u0641\u064a\u0629 \u0641\u064a \u0627\u0644\u0635\u0648\u0631 \u0627\u0644\u0646\u0642\u0637\u064a\u0629 # Version 2.36 menu.file.savegraphics= \u062d\u0641\u0638 \u0627\u0644\u0635\u0648\u0631 bmpscaler.title= \u0633\u0644\u0645 # Version 2.37 menu.file.savepdf= (as PDF) \u062d\u0641\u0638 \u0627\u0644\u0635\u0648\u0631\u0629 \u0628\u062a\u0646\u0633\u064a\u0642 iconhelp.chord= \u0645\u062b\u0644 \u0643\u0642\u0637\u0639\u0629 \u0645\u0633\u062a\u0642\u064a\u0645\u0629 # Version 2.39 message.setfixedangle.first= \u062a\u0639\u064a\u064a\u0646 \u0632\u0627\u0648\u064a\u0629 \u062b\u0627\u0628\u0629 :\u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 \u061f message.setfixedangle.second= \u062a\u0639\u064a\u064a\u0646 \u0632\u0627\u0648\u064a\u0629 \u062b\u0627\u0628\u062a\u0629 : \u0631\u0623\u0633 \u0627\u0644\u0632\u0627\u0648\u064a\u0629 \u061f message.setfixedangle.third= \u062a\u0639\u064a\u064a\u0646 \u0632\u0627\u0648\u064a\u0629 \u062b\u0627\u0628\u062a\u0629 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u062b\u0627\u0644\u062b\u0629 \u061f edit.fixedangle.set= \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0642\u064a\u0633 message.setfixedcircle.first= \u062b\u0628\u062a \u0646\u0635\u0641 \u0627\u0644\u0642\u0637\u0631 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 \u061f message.setfixedcircle.second= \u062b\u0628\u062a \u0646\u0635\u0641 \u0627\u0644\u0642\u0637\u0631 : \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u062b\u0627\u0646\u064a\u0629 \u061f edit.fixedcircle.set= \u062b\u0628\u062a \u0646\u0635\u0641 \u0627\u0644\u0642\u0637\u0631 # Version 2.40 minpointsize.title= \u062b\u0628\u062a \u0639\u0631\u0636 \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0623\u0635\u063a\u0631\u064a minpointsize.prompt= \u0639\u0631\u0636 \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0623\u0635\u063a\u0631\u064a \u0627\u0644\u0625\u0641\u062a\u0631\u0627\u0636\u064a 3 menu.settings.font.minpointsize= \u0639\u0631\u0636 \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0623\u0635\u063a\u0631\u064a # Version 2.41 name.short.Track=Tr text.track= \u0645\u062d\u0644 \u0627\u0644\u0643\u0627\u0626\u0646 \u0633 \u0639\u0646\u062f\u0645\u0627 \u0639 \u064a\u062a\u062d\u0631\u0643 \u0639\u0644\u0649 \u0627\u0644\u0643\u0627\u0626\u0646 \u0635 trackquestion.keep= \u062d\u0641\u0638 \u0627\u0644\u062d\u0631\u0643\u0629 \u0639\u0644\u0649 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 \u061f trackquestion.title= \u0625\u062d\u0641\u0638 \u0627\u0644\u062d\u0631\u0643\u0629 menu.options.track= \u062d\u0641\u0638 \u0627\u0644\u062d\u0631\u0643\u0629 \u0632\u0631 \u0634\u064a\u0641\u062a - \u0625\u062f\u062e\u0627\u0644 iconhelp.indicate= \u0645\u0639\u0627\u064a\u0646\u0629 \u0646\u062a\u0627\u0626\u062c \u0627\u0644\u0625\u0646\u0634\u0627\u0621 iconhelp.nohelp= \u0645\u0633\u0627\u0639\u062f\u0629 \u063a\u064a\u0631 \u0645\u062a\u0648\u0641\u0631\u0629 # Version 2.42 objects.draw= \u0627\u0644\u0631\u0633\u0645 \u0628\u0627\u0644\u0641\u0623\u0631\u0629 menu.options.cleardraw= (Esc) \u0645\u062d\u0648 (\u062d\u0630\u0641) \u0631\u0633\u0645 \u0627\u0644\u0641\u0623\u0631\u0629 iconhelp.draw= \u0627\u0644\u0631\u0633\u0645 \u0628\u0627\u0644\u0641\u0623\u0631\u0629 message.draw= \u0627\u0644\u0631\u0633\u0645 \u0628\u0627\u0644\u0641\u0623\u0631\u0629 shortcuts.draw=; # Version 2.43 message.rename= \u0625\u0639\u0627\u062f\u0629 \u0627\u0644\u062a\u0633\u0645\u064a\u0629 : \u062d\u062f\u062f \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a iconhelp.rename= \u0623\u0639\u0627\u062f\u0629 \u0627\u0644\u062a\u0633\u0645\u064a\u0629 objects.rename= \u0623\u0639\u0627\u062f\u0629 \u0627\u0644\u062a\u0633\u0645\u064a\u0629 shortcuts.rename=: iconhelp.anglereduce= \u0644\u0627 \u062a\u0638\u0647\u0631 \u0636\u0644\u0639 \u0627\u0644\u0632\u0627\u0648\u064a\u0629 # Version 2.45 menu.settings.smartboard= \u0646\u0645\u0637 \u0634\u0631\u064a\u0637 \u0627\u0644\u0623\u062f\u0648\u0627\u062a \u0645\u0628\u0633\u0637 shortcuts.zoom=% objects.zoom= \u062a\u0643\u0628\u064a\u0631 \u0648 \u062a\u0635\u063a\u064a\u0631 \u0628\u0627\u0644\u0641\u0623\u0631\u0629 message.zoom= \u062a\u062d\u0631\u064a\u0643 \u0627\u0644\u0645\u0631\u0643\u0632 \u0623\u0648 \u062a\u0643\u0628\u064a\u0631 \u0648 \u062a\u0635\u063a\u064a\u0631 # Version 2.46 menu.special.restricticons= \u0634\u0631\u064a\u0637 \u0623\u062f\u0648\u0627\u062a \u0645\u0628\u0633\u0637 # Version 2.47 menu.settings.indicate.simple= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0646\u0642\u0637 \u0641\u0642\u0637 \u0623\u062b\u0646\u0627\u0621 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 menu.settings.beginner= \u0646\u0645\u0637 \u0627\u0644\u0645\u0628\u062a\u062f\u0623 question.again= \u062f\u0627\u0626\u0645\u0627 \u0625\u0637\u0631\u062d \u0627\u0644\u0633\u0624\u0627\u0644 # Version 2.49 definemacro.parameters= \u0648\u0633\u0627\u0626\u0637 \u0627\u0644\u0637\u0644\u0628\u064a\u0629 # Version 2.53 menu.actions.angles= \u0632\u0648\u0627\u064a\u0627 menu.actions.circles= \u062f\u0648\u0627\u0626\u0631 menu.actions.lines= \u0645\u0633\u062a\u0642\u064a\u0645\u0627\u062a menu.actions.points= \u0646\u0642\u0637 # Version 3.00 info.title= \u0645\u0633\u0627\u0639\u062f\u0629 \u0641\u064a \u0633\u064a\u0627\u0642 \u0627\u0644\u0639\u0645\u0644 info.related= \u0645\u0648\u0627\u0636\u064a\u0639 \u0645\u0631\u062a\u0628\u0637\u0629 info.notfound= \u0645\u0648\u0636\u0648\u0639 \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f info.noresults= \u0643\u0644\u0645\u0629 \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f\u0629 info.searchresults=- \u0646\u062a\u0627\u0626\u062c \u0627\u0644\u0628\u062d\u062b - info.select=- \u062a\u062d\u062f\u064a\u062f - info.search= \u0628\u062d\u062b info.back= \u0644\u0644\u062e\u0644\u0641 info.start= \u0628\u062f\u0627\u064a\u0629 iconhelp.info= \u0645\u0633\u0627\u0639\u062f\u0629 \u0641\u064a \u0633\u064a\u0627\u0642 \u0627\u0644\u0639\u0645\u0644 menu.help.info= \u0645\u0633\u0627\u0639\u062f\u0629 \u0641\u064a \u0633\u064a\u0627\u0642 \u0627\u0644\u0639\u0645\u0644 myfiledialog.homedir=CaR \u0645\u0644\u0641\u0627\u062a myfiledialog.windowshome= \u0645\u062c\u0644\u062f \u0627\u0644\u0645\u0644\u0641\u0627\u062a \u0627\u0644\u0634\u062e\u0635\u064a\u0629 myfiledialog.mkdir= \u0625\u0646\u0634\u0627\u0621 \u0645\u062c\u0644\u062f myfiledialog.back= \u0644\u0644\u062e\u0644\u0641 menu.file.alwaysclearmacros= \u062d\u0630\u0641 \u0627\u0644\u0645\u0627\u0643\u0631\u0648\u0627\u062a \u0642\u0628\u0644 \u0627\u0644\u062a\u062d\u0645\u064a\u0644 about.language= \u0627\u0644\u0639\u0631\u0628\u064a\u0629 bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups= \u0623\u0631\u0634\u0641\u0629 # Version 3.02 menu.options.hideduplicates= \u0625\u062e\u0641\u0627\u0621 \u0627\u0644\u0643\u0627\u0626\u0646 \u0627\u0644\u0645\u0636\u0627\u0639\u0641 # Version 3.03 menu.options.function= \u062f\u0627\u0644\u0629 text.function=Function ( % , % ) function.varmin= \u0623\u0635\u063a\u0631 \u0642\u064a\u0645\u0629 \u0644\u0644\u0645\u062a\u063a\u064a\u0631 function.varmax= \u0623\u0643\u0628\u0631 \u0642\u064a\u0645\u0629 \u0644\u0644\u0645\u062a\u063a\u064a\u0631 function.dvar= \u0627\u0644\u062e\u0637\u0648\u0629 function.var= \u0627\u0644\u062d\u0631\u0641 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0644\u0644\u0645\u062a\u063a\u064a\u0631 function.x=X function.y=Y iconhelp.function= \u0643\u062a\u0627\u0628\u0629 \u062f\u0627\u0644\u0629 menu.options.editlast= \u062a\u062d\u0631\u064a\u0631 \u0622\u062e\u0631 \u0643\u0627\u0626\u0646 iconhelp.control.edit= \u062a\u062d\u0631\u064a\u0631 \u0622\u062e\u0631 \u0643\u0627\u0626\u0646 iconhelp.control.hide= \u0625\u062e\u0641\u0627\u0621 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0627\u0644\u0645\u0636\u0627\u0639\u0641\u0629 edit.function.title= \u062f\u0627\u0644\u0629 \u0623\u0648 \u0645\u0646\u062d\u0646\u064a \u0648\u0633\u064a\u0637\u064a iconhelp.control.runmacro= \u062a\u0646\u0641\u064a\u0630 \u0622\u062e\u0631 \u0645\u0627\u0643\u0631\u0648 \u0645\u0631\u0629 \u0623\u062e\u0631\u0649 # Version 3.05 point.type.cross= \u0631\u0645\u0632 \u0627\u0644\u062c\u0645\u0639 point.type.dcross= \u0631\u0645\u0632 \u0627\u0644\u062c\u062f\u0627\u0621 shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit= \u0627\u0644\u0648\u062d\u062f\u0629 menu.special.break= \u0646\u0642\u0637 \u0627\u0644\u062a\u0648\u0642\u0641 menu.bp.setbreak= \u062a\u0639\u064a\u064a\u0646 \u0646\u0642\u0637\u0629 \u062a\u0648\u0642\u0641 menu.bp.clearbreak= \u062d\u0630\u0641 \u0646\u0642\u0637\u0629 \u0627\u0644\u062a\u0648\u0642\u0641 menu.bp.sethidingbreak= \u062a\u0639\u064a\u064a\u0646 \u0646\u0642\u0637 \u062a\u0648\u0642\u0641 \u0645\u062e\u0641\u064a\u0629 menu.bp.animatebreak= \u062d\u0631\u0643\u0629 \u0646\u0642\u0637 \u0627\u0644\u062a\u0648\u0642\u0641 iconhelp.animatebreak= \u062d\u0631\u0643\u0629 \u0646\u0642\u0637 \u0627\u0644\u062a\u0648\u0642\u0641 message.animatebreak= \u062d\u0631\u0643\u0629 \u0646\u0642\u0637 \u0627\u0644\u062a\u0648\u0642\u0641 : \u0623\u0646\u0642\u0631 \u0644\u0644\u0648\u0642\u0641 \u0627\u0644\u062d\u0631\u0643\u0629 - \u0632\u0631 \u0634\u064a\u0641\u062a \u064a\u0645\u064a\u0646 \u062a\u0633\u0631\u064a\u0639 \u064a\u0633\u0627\u0631 \u062a\u0628\u0637\u064a\u0621 menu.special.exporttemplate= \u062a\u0635\u062f\u064a\u0631 \u0628\u062a\u0646\u0633\u064a\u0642 \u0648\u0627\u0628 \u0648\u0641\u0642 \u0623\u0646\u0645\u0648\u0630\u062c templateload.open= Template \u062a\u062d\u0645\u064a\u0644 \u0623\u0646\u0645\u0648\u0630\u062c templateload.open.action= \u0641\u062a\u062d menu.settings.doubleclick= \u0623\u0646\u0642\u0631 \u0645\u0631\u062a\u064a\u0646 \u0644\u0644\u0645\u0627\u0643\u0631\u0648 export.codebase=Codebase # Version 3.12 edit.equation= \u0645\u0639\u0627\u062f\u0644\u0629 # Version 3.23 menu.settings.squarepoints= \u0634\u0643\u0644 \u0627\u0644\u0646\u0642\u0637 \u0645\u0631\u0628\u0639\u0627\u062a # Version 3.37 menu.options.export= \u062e\u064a\u0627\u0631\u0627\u062a \u062a\u0635\u062f\u064a\u0631 \u0627\u0644\u0635\u0648\u0631\u0629 menu.settings.minwidth= \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u062e\u0637 1 menu.settings.minpointsize= \u062d\u0641\u0638 \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u0646\u0642\u0637\u0629 menu.settings.minfontsize= \u062d\u0641\u0638 \u0627\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u062e\u0637 minfontsize.title= \u062a\u0639\u064a\u064a\u0646 \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u062e\u0637 minfontsize.prompt= \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u062e\u0637 12 menu.options.minpointsize= \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u0646\u0642\u0637\u0629 menu.options.minfontsize= \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u062e\u0637 # Version 3.38 menu.settings.scalepdf= PDF \u060c EPS \u062a\u0635\u062f\u064a\u0631 \u0628\u0633\u0644\u0645 1:1 \u0644\u0643\u0644 \u0645\u0646 # Version 3.41 menu.file.clip= \u0642\u0635 \u0627\u0644\u0635\u0648\u0631\u0629 \u0627\u0644\u0645\u0635\u062f\u0631\u0629 clip.title= \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0642\u0635\u0627\u0635\u0629 clip.width= \u0639\u0631\u0636 clip.height= \u0625\u0631\u062a\u0641\u0627\u0639 clip.screen= \u0644\u0627 \u062a\u0642\u0635 # Version 3.42 menu.options.arrowsize= \u0639\u0631\u0636 \u0627\u0644\u0633\u0647\u0645 arrowsize.title= \u0639\u0631\u0636 \u0627\u0644\u0633\u0647\u0645 # Version 3.44 iconhelp.large= \u062e\u0637 \u0639\u0631\u064a\u0636 iconhelp.bold= \u062e\u0637 \u0633\u0645\u064a\u0643 menu.options.largefont= \u062e\u0637 \u0639\u0631\u064a\u0636 menu.options.boldfont= \u062e\u0637 \u0633\u0645\u064a\u0643 warning.previewframe= \u0647\u0630\u0627 \u0627\u0644\u062c\u0632\u0621 \u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0646\u0627\u0641\u0630\u0629 message.move.select= \u062d\u0631\u0643 \u0627\u0644\u0646\u0642\u0637\u0629 # Version 3.46 iconbar.showseparators= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0641\u0627\u0635\u0644 # Version 3.48 menu.sizes= \u0627\u0644\u0623\u0628\u0639\u0627\u062f menu.options.minlinesize= \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u062e\u0637 minlinesize.title= \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u062e\u0637 minlinesize.prompt= \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u062e\u0637 \u0625\u0641\u062a\u0631\u0627\u0636\u064a 1 arrowsize.prompt= \u0639\u0631\u0636 \u0627\u0644\u0633\u0647\u0645 \u0625\u0641\u062a\u0631\u0627\u0636\u064a 10 menu.options.printscaler= \u0623\u0628\u0639\u0627\u062f \u0627\u0644\u062a\u0635\u062f\u064a\u0631 menu.options.exportsettings= \u062e\u064a\u0627\u0631\u0627\u062a \u062a\u0635\u062f\u064a\u0631 \u062e\u0627\u0635\u0629 printscaler.title= \u0623\u0628\u0639\u0627\u062f \u0627\u0644\u062a\u0635\u062f\u064a\u0631 printscaler.width= (cm) \u0648\u062d\u062f\u0629 \u0627\u0644\u0639\u0631\u0636 printscaler.height= (cm) \u0648\u062d\u062f\u0629 \u0627\u0644\u0625\u0631\u062a\u0641\u0627\u0639 printscaler.dpi= \u0627\u0644\u062f\u0642\u0629 \u0646\u0642\u0637 \u0639\u0644\u0649 \u0627\u0644\u0628\u0648\u0635\u0629 \u0625\u0641\u062a\u0631\u0627\u0636\u064a 300 printscaler.linewidth= \u0639\u0631\u0636 \u0627\u0644\u062e\u0637 \u0628\u0627\u0644\u0633\u0646\u062a\u0645\u062a\u0631 \u0625\u0641\u062a\u0631\u0627\u0636\u064a 0.02 printscaler.pointsize= \u0627\u0628\u0639\u0627\u062f \u0627\u0644\u0646\u0642\u0637\u0629 \u0628\u0627\u0644\u0633\u0646\u062a\u0645\u062a\u0631 \u0625\u0641\u062a\u0631\u0627\u0636\u064a 0.07 printscaler.textsize= \u0628\u0639\u062f \u0627\u0644\u0646\u0635 \u0628\u0627\u0644\u0633\u0646\u062a\u0645\u062a\u0631 \u0625\u0641\u062a\u0631\u0627\u0636\u064a 0.03 # Version 3.49 printscaler.screen=300 DPI printscaler.w= (pixel) \u0639\u0631\u0636 printscaler.h= (pixel) \u0625\u0631\u062a\u0641\u0627\u0639 printscaler.scale= \u0633\u0644\u0645 \u0646\u0633\u0628\u0629 \u0639\u0644\u0649 \u0627\u0644\u0634\u0627\u0634\u0629 printscaler.middle=Cut out (do not rescale) printscaler.sizes= \u0623\u0628\u0639\u0627\u062f \u0627\u0644\u062e\u0637\u0648\u0637 \u060c\u0627\u0644\u0646\u0642\u0637 menu.file.savepng= PNG \u062d\u0641\u0638 \u0627\u0644\u0635\u0648\u0631\u0629 \u0628\u062a\u0646\u0633\u064a\u0642 warning.preview= \u0627\u0644\u0645\u0639\u0627\u064a\u0646\u0629 \u063a\u064a\u0631 \u0645\u0645\u0643\u0646\u0629 \u0628 \u062c\u0627\u0641\u0627 1.1 iconedit.showseparators= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0641\u0627\u0635\u0644 printscaler.aspect= \u0625\u062d\u0641\u0638 \u0627\u0644\u0646\u0633\u0628\u0629 printscaler.presets= \u0636\u0628\u0637 \u0627\u0644\u0633\u0644\u0645 printscaler.preset= \u0625\u062e\u062a\u064a\u0627\u0631 printscaler.preset.300dpi= \u0628\u0627\u0644\u0636\u0628\u0637 300 \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0627\u0644\u0628\u0648\u0635\u0629 printscaler.preset.300dpi6= \u0633\u062a\u0629 \u0633\u0646\u062a\u0645\u062a\u0631 \u0639\u0631\u0636 \u0641\u064a\u0647\u0627 300 \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0627\u0644\u0628\u0648\u0635\u0629 printscaler.preset.300dpi16= \u0633\u062a\u0629 \u0639\u0634\u0631 \u0633\u0646\u062a\u064a\u0645\u062a\u0631 \u0639\u0631\u0636 printscaler.preset.window= \u0623\u0628\u0639\u0627\u062f \u0627\u0644\u0646\u0627\u0641\u0630\u0629 printscaler.preset.clip50= \u0646\u0635\u0641 \u0627\u0644\u0646\u0627\u0641\u0630\u0629 \u0638\u0627\u0647\u0631 message.saving= \u0625\u0646\u062a\u0638\u0631 \u0645\u0646 \u0641\u0636\u0644\u0643 menu.options.printscalepreview= \u062a\u0635\u062f\u064a\u0631 date=Build # Version 3.51 help= \u0645\u0633\u0627\u0639\u062f\u0629 # Version 3.61 editconditionals.title= \u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0634\u0631\u0648\u0637 editconditionals.hidden= \u0645\u062e\u0641\u064a editconditionals.superhidden= \u0645\u062e\u0641\u064a \u0643\u0644\u064a\u0627 editconditionals.visible= \u0639\u0627\u062f\u064a editconditionals.showname= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u062a\u0633\u0645\u064a\u0629 editconditionals.showvalue= \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0642\u064a\u0645\u0629 editconditionals.background= \u062e\u0644\u0641\u064a\u0629 editconditionals.solid= \u063a\u064a\u0631 \u0634\u0641\u0627\u0641 exception.superfluous= \u0646\u0635 \u063a\u0627\u0645\u0636 \u0641\u064a \u0627\u0644\u0639\u0628\u0627\u0631\u0629 # Version 3.62 menu.options.selectionsize= \u062a\u0639\u064a\u064a\u0646 \u0639\u0631\u0636 \u0627\u0644\u062a\u062d\u062f\u064a\u062f selectionsize.title= \u0639\u0631\u0636 \u0627\u0644\u062a\u062d\u062f\u064a\u062f selectionsize.prompt= \u0639\u0631\u0636 \u0627\u0644\u062a\u062d\u062f\u064a\u062f \u0625\u0641\u062a\u0631\u0627\u0636\u064a 1.5 # Version 3.63 select.comment.title= \u062a\u0639\u0644\u064a\u0642 \u0639\u0644\u0649 \u0627\u0644\u0645\u0627\u0643\u0631\u0648 # Version 3.68 edit.area.area= \u0645\u0633\u0627\u062d\u0629 # Version 3.73 myfiledialog.oldfiles= \u0645\u0644\u0641\u0627\u062a \u0642\u062f\u064a\u0645\u0629 # Version 3.74 iconhelp.load= (Ctrl-o) \u062a\u062d\u0645\u064a\u0644 \u0625\u0646\u0634\u0627\u0621 iconhelp.save= (Ctrl-s) \u062d\u0641\u0638 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 iconhelp.new= (Ctrl-n) \u0625\u0646\u0634\u0627\u0621 \u062c\u062f\u064a\u062f # Version 3.81 warning.loadbackground= \u062e\u0637\u0623 \u0639\u0646\u062f \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u062e\u0644\u0641\u064a\u0629 # Version 3.9 function.x= \u062a\u0643\u0648\u0646 \u0641\u0627\u0631\u063a\u0629 \u0645\u0646 \u0623\u062c\u0644 \u062f\u0627\u0644\u0629 \u0625\u0644\u0627 \u0641\u064a \u062d\u0627\u0644\u0629 \u0645\u0646\u062d\u0646\u064a \u0648\u0633\u064a\u0637\u064a X \u0639\u0628\u0627\u0631\u0629 # Version 3.91 constructiondisplay.select= \u062a\u062d\u062f\u064a\u062f constructiondisplay.all= \u0643\u0644 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a constructiondisplay.visible= \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u063a\u064a\u0631 \u0627\u0644\u0645\u062e\u0641\u064a\u0629 constructiondisplay.points= \u0627\u0644\u0646\u0642\u0637 constructiondisplay.lines= \u0627\u0644\u0645\u0633\u062a\u0642\u064a\u0645\u0627\u062a constructiondisplay.circles= \u0627\u0644\u062f\u0648\u0627\u0626\u0631 constructiondisplay.angles= \u0627\u0644\u0632\u0648\u0627\u064a\u0627 constructiondisplay.other= \u0643\u0627\u0626\u0646\u0627\u062a \u0623\u062e\u0631\u0649 menu.file.copypng= \u0646\u0633\u062e \u0625\u0644\u0649 \u0627\u0644\u062d\u0627\u0641\u0638\u0629 exception.clipboardcopy= \u0625\u062e\u0641\u0627\u0642 \u0641\u064a \u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u0646\u0633\u062e menu.options.finegrid= \u0627\u0644\u0645\u062d\u0627\u0648\u0631 \u0641\u0642\u0637 # Vesion 3.93 edit.function.center= \u0627\u0644\u0645\u0631\u0643\u0632 edit.function.free= \u062a\u0633\u0631\u064a\u062d \u0627\u0644\u0645\u0631\u0643\u0632 message.setcenter= \u062d\u062f\u062f \u0627\u0644\u0645\u0631\u0643\u0632 # Vesion 3.94 message.edit= \u062a\u062d\u0631\u064a\u0631 : \u0643\u0627\u0626\u0646 \u061f - \u0627\u0644\u0632\u0631 \u0634\u064a\u0641\u062a \u0643\u0627\u0626\u0646\u0627\u062a \u0623\u062e\u0631\u0649 - \u0627\u0644\u0632\u0631 \u0643\u0646\u062a\u0631\u0644 \u0627\u0644\u0634\u0631\u0648\u0637 # Version 3.97 error.image= \u0627\u0644\u0635\u0648\u0631\u0629 \u0644\u064a\u0633\u062a \u0641\u064a \u0646\u0641\u0633 \u0645\u062c\u0644\u062f \u0627\u0644\u0625\u0646\u0634\u0627\u0621 filedialog.imageload= \u062a\u062d\u0645\u064a\u0644 \u0635\u0648\u0631\u0629 filedialog.imageload.action= \u062a\u062d\u0645\u064a\u0644 prompt.image= \u0635\u0648\u0631\u0629 ... objects.image= \u0635\u0648\u0631\u0629 shortcuts.image=_ # Version 3.98 exception.depends= \u0627\u0644\u0643\u0627\u0626\u0646 \u0627\u0644\u0645\u0631\u062a\u0628\u0637 \u0628\u0647\u0630\u0627 \u0627\u0644\u0643\u0627\u0626\u0646 error.depends= \u0627\u0644\u0643\u0627\u0626\u0646 \u0627\u0644\u0645\u0631\u062a\u0628\u0637 \u0628\u0647\u0630\u0627 \u0627\u0644\u0643\u0627\u0626\u0646 constructiondisplay.sorted= \u062a\u0631\u062a\u064a\u0628 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0628\u062d\u0633\u0628 \u0625\u0646\u0634\u0627\u0626\u0647\u0627 # Version 3.99 edit.alias= \u0625\u0633\u0645 \u0645\u0633\u062a\u0639\u0627\u0631 constructiondisplay.expressions= \u0639\u0628\u0627\u0631\u0627\u062a # Version 4.00 iconhelp.image= \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0635\u0648\u0631\u0629 message.image= \u0646\u0642\u0637\u0629 \u062a\u062b\u0628\u064a\u062a \u0627\u0644\u0635\u0648\u0631\u0629 message.image.last= \u0622\u062e\u0631 \u0646\u0642\u0637\u0629 \u062a\u062b\u0628\u064a\u062a \u0627\u0644\u0635\u0648\u0631\u0629 editconditionals.z=Z-Buffer Value # Version 4.01 name.FixedAngle= \u0632\u0627\u0648\u064a\u0629 \u062b\u0627\u0628\u062a\u0629 # Version 4.04 menu.moresettings= \u062e\u064a\u0627\u0631\u0627\u062a \u0645\u062a\u0642\u062f\u0645\u0629 menu.settings.language= \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0644\u063a\u0629 language.title= \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0644\u063a\u0629 language.prompt= \u0644\u063a\u0629 \u0627\u0644\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0642\u0627\u062f\u0645 \u0644\u0644\u062a\u0637\u0628\u064a\u0642 # Version 4.05 constructiondisplay.invalid= \u0643\u0627\u0626\u0646\u0627\u062a \u063a\u064a\u0631 \u0645\u0644\u0627\u0626\u0645\u0629 # Version 4.08 menu.settings.constructiondisplay= (F11) \u0638\u0647\u0648\u0631 \u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 # Version 4.09 constructiondisplay.editconditions= \u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0634\u0631\u0648\u0637 constructiondisplay.delete= \u062d\u0630\u0641 \u0627\u0644\u0643\u0627\u0626\u0646\u0627\u062a \u0627\u0644\u0645\u062d\u062f\u062f\u0629 constructiondisplay.hide= \u0625\u0638\u0647\u0627\u0631 \u0623\u0648 \u0625\u062e\u0641\u0627\u0621 constructiondisplay.superhide= \u0625\u062e\u0641\u0627\u0621 \u062a\u0627\u0645 # Version 4.2 edit.expression.slider= \u0625\u0638\u0647\u0627\u0631 \u0632\u0631 \u0627\u0644\u062a\u062d\u0643\u0645 menu.grid.options= \u062e\u064a\u0627\u0631\u0627\u062a \u0627\u0644\u0634\u0628\u0643\u0629 menu.options.leftsnap= \u062e\u0637\u0641 \u0627\u0648 \u0646\u0632\u0639 \u0628\u0632\u0631 \u0627\u0644\u0641\u0623\u0631\u0629 \u0627\u0644\u0623\u064a\u0633\u0631 menu.settings.boundingbox= (bb) \u0625\u0646\u0634\u0627\u0621 \u0639\u0644\u0628\u0629 \u0645\u0631\u062a\u0628\u0637\u0629 # Version 4.3 latexsettings.title= LATEX \u062a\u0635\u062f\u064a\u0631 \u0625\u0644\u0649 \u0644\u0627\u062a\u0643\u0633 latexsettings.boundingbox= (bb) \u0625\u0646\u0634\u0627\u0621 \u0639\u0644\u0628\u0629 \u0645\u0631\u062a\u0628\u0637\u0629 latexsettings.latexinput= LATEX \u0625\u0646\u0634\u0627\u0621 \u0645\u0644\u0641 \u0644\u0627\u062a\u0643\u0633 latexsettings.doubledollar= LATEX $$.. \u0644\u0627\u062a\u0643\u0633 \u064a\u0642\u0648\u0645 \u0628 $$ latexsettings.dollar= LATEX $...$ \u0644\u0627\u062a\u0643\u0633 \u064a\u0642\u0648\u0645 \u0628 latexsettings.nodollar= \u0644\u0627\u062a\u0643\u0633 \u064a\u0642\u0648\u0645 \u0628\u0643\u0644 \u0627\u0644\u0643\u0644\u0645\u0627\u062a \u0627\u0644\u0627\u062e\u0631\u0649 latexsettings.fullpath= \u0625\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u0645\u0633\u0627\u0631 \u0627\u0644\u0643\u0644\u064a \u0644\u0644\u0645\u0644\u0641 printscaler.preset.latex10= \u0644\u0627\u062a\u0643\u0633 \u0628 10 \u0646\u0642\u0637 printscaler.preset.300dpi12= \u062b\u0644\u0627\u062b\u0629 \u0645\u0626\u0629 \u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0625\u062b\u0646\u064a \u0639\u0634\u0631 \u0633\u0646\u062a\u064a\u0645\u062a\u0631 \u0639\u0631\u0636 printscaler.latex= LaTeX \u0625\u062d\u0641\u0638 \u0644\u0644\u0627\u062a\u0643\u0633 menu.background.usewidth= \u062a\u0633\u0648\u064a\u0629 \u0627\u0644\u0625\u0631\u062a\u0641\u0627\u0639 \u0641\u0642\u0637 # Version 4.4 menu.options.restricted= \u062a\u0642\u0627\u0637\u0639 menu.options.sizes= \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0623\u0628\u0639\u0627\u062f sizesdialog.title= \u0623\u0628\u0639\u0627\u062f minlinesize.prompt= \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u0645\u0646\u062d\u0646\u064a\u0627\u062a - \u0625\u0641\u062a\u0631\u0627\u0636\u064a 1 minpointsize.prompt= \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u0646\u0642\u0637\u0629 - \u0625\u0641\u062a\u0631\u0627\u0636\u064a 1.5 minfontsize.prompt= \u0623\u0635\u063a\u0631 \u0639\u0631\u0636 \u0644\u0644\u062e\u0637 - \u0625\u0641\u062a\u0631\u0627\u0636\u064a 12 arrowsize.prompt= \u0639\u0631\u0636 \u0627\u0644\u0633\u0647\u0645 - \u0625\u0641\u062a\u0631\u0627\u0636\u064a 10 selectionsize.prompt= \u0623\u0628\u0639\u0627\u062f \u0627\u0644\u062a\u062d\u062f\u064a\u062f - \u0625\u0641\u062a\u0631\u0627\u0636\u064a 1.5 warning.loadmacros= \u062e\u0637\u0623 \u0639\u0646\u062f \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0627\u0643\u0631\u0648 warning.macrodefinition= \u0647\u0630\u0627 \u0627\u0644\u0643\u0627\u0626\u0646 \u0645\u0633\u062a\u062e\u062f\u0645 \u0644\u0643\u0646\u0647 \u063a\u064a\u0631 \u0645\u0639\u0631\u0641 \u0641\u064a \u0627\u0644\u0645\u0627\u0643\u0631\u0648 edit.circle.bounds= \u0623\u0642\u0648\u0627\u0633 \u0641\u0642\u0637 edit.circle.range= \u0623\u0642\u0648\u0627\u0633 # Version 4.5 edit.track.dmin= \u0623\u0635\u063a\u0631 \u062e\u0637\u0648\u0629 - \u0625\u0641\u062a\u0631\u0627\u0636\u064a 0.001 # Version 4.6 menu.settings.smallicons= \u0625\u0633\u062a\u062e\u062f\u0645 \u0623\u064a\u0642\u0648\u0646\u0627\u062a \u0635\u063a\u064a\u0631\u0629 menu.settings.oldicons= \u0625\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0623\u064a\u0642\u0648\u0646\u0627\u062a \u0627\u0644\u0642\u062f\u064a\u0645\u0629 # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof= \u0645\u062d\u0644 \u0643\u0627\u0626\u0646 \u0633 \u0639\u0646\u062f \u062a\u063a\u064a\u0631 \u0627\u0644\u0643\u0627\u0626\u0646 \u0639 # Version 5 # Fix error.image edit.discrete= \u0645\u062a\u0642\u0637\u0639 error.fixedsegment= \u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u062b\u0628\u064a\u062a \u0647\u0630\u0647 \u0627\u0644\u0642\u0637\u0639\u0629 export.zoom= \u062a\u0643\u0628\u064a\u0631 \u0648 \u062a\u0635\u063a\u064a\u0631 \u0628\u0627\u0644\u0641\u0623\u0631\u0629 export.popup= \u0642\u0627\u0626\u0645\u0629 \u0645\u0646\u0633\u062f\u0644\u0629 \u062d\u0633\u0628 \u0627\u0644\u0633\u064a\u0627\u0642 - \u0628\u0632\u0631 \u0627\u0644\u0641\u0623\u0631\u0629 \u0627\u0644\u0623\u064a\u0645\u0646 # Version 5.1 edit.intersection.alternate= \u064a\u0645\u0643\u0646 \u0627\u0644\u062a\u0628\u062f\u064a\u0644 export.restrictedmove= \u062d\u0631\u0643\u0627\u062a \u0645\u062d\u062f\u0648\u062f\u0629 #Version 5.3 #Fix message.boundedpoint message.bindpoint=\u062a\u062b\u0628\u064a\u062a \u0627\u0644\u0646\u0642\u0637\u0629 \u0639\u0644\u0649 \u0627\u0644\u0643\u0627\u0626\u0646 edit.point.inside=\u062f\u0627\u062e\u0644 \u0627\u0644\u0643\u0627\u0626\u0646 edit.point.increment=\u062a\u0648\u0633\u064a\u0639 \u0627\u0644\u0634\u0628\u0643\u0629 edit.more= \u0623\u0643\u062b\u0631 menu.settings.more= \u0625\u0638\u0647\u0627\u0631 \u0632\u0631 \u0627\u0644\u062a\u0646\u0633\u064a\u0642 \u0627\u0644\u0634\u0631\u0637\u064a menu.file.loadexamples= \u062a\u062d\u0645\u064a\u0644 \u0623\u0645\u062b\u0644\u0629 menu.options.editgrid= \u062a\u062d\u0631\u064a\u0631 \u0634\u0628\u0643\u0629 \u0627\u0644\u0625\u062d\u062f\u0627\u062b\u064a\u0627\u062a ./src/rene/zirkel/docs/ZirkelProperties_da.properties0000770000175000017500000006415310655647770022052 0ustar yvesyveslanguage=da_ homefile=index.html about.title=Om programmet about.name=JavaPasser about.programmed=Programmet er skrevet af title=Passer close=Luk ok=OK cancel=Annuller abort=Annuller done=Godt! Opgaven er lst message=Meddelelse warning=Advarsel yes=Ja no=Nej true=sand false=falsk warning.nojob=Dette er ikke en opgave warning.print=Udskrivningsfejl warning.reset=Valget fr virkning nste gang programmet startes question.title=Sprgsml question.intersection=Skal skringen konstrueres? question.pointon=Konstrur et punkt p dette objekt? colors.black=Sort colors.blue=Bl colors.green=Grn colors.brown=Brun colors.cyan=Turkis colors.red=Rd objects.point=Punkt objects.segment=Linjestykke objects.line=Linje objects.ray=Halvlinje objects.circle=Cirkel objects.intersection=Skringspunkt objects.move=Flyt punkt objects.hide=Skjul objekt objects.edit=Egenskaber objects.tracker=Spor objects.objecttracker=Automatisk spor objects.parallel=Parallel objects.plumb=Normal objects.circle3=Cirkel ud fra r og C objects.midpoint=Midtpunkt objects.quadric=Keglesnit objects.angle=Vinkel objects.boundedpoint=Punkt p objekt objects.parameter=Angiv makro-parameter objects.targets=Angiv makroens ml objects.definejob=Definer en opgave objects.runmacro=Kr makro objects.delete=Slet objekter og deraf afhngige objects.reorder=Flyt objekt opad p listen objects.animate=Animation objects.expression=Beregningsudtryk objects.area=Polygon objects.text=Tekst objects.fixedcircle=Cirkel med fast radius objects.fixedangle=Vinkel med fast gradtal objects.fixedsegment=Linjestykke med fast lngde iconhelp.point=Punkt iconhelp.segment=Linjestykke iconhelp.line=Linje iconhelp.ray=Halvlinje iconhelp.circle=Cirkel iconhelp.intersection=Skringspunkt iconhelp.move=Flyt punkt iconhelp.hide=Skjul objekt iconhelp.edit=Indstil objektegenskaber iconhelp.tracker=Spor iconhelp.objecttracker=Automatisk spor iconhelp.parallel=Parallel iconhelp.plumb=Normal iconhelp.circle3=Cirkel ud fra r og M iconhelp.midpoint=Midtpunkt iconhelp.quadric=Keglesnit iconhelp.angle=Marker vinkel iconhelp.boundedpoint=Punkt p objekt iconhelp.hidden=Vis skjulte objekter iconhelp.color=Farve p nste objekt iconhelp.type=Type af nste punkt iconhelp.thickness=Bredde p nste objekt iconhelp.back=Slet sidste objekt iconhelp.type0=Type af nste punkt iconhelp.thickness0=Bredde p nste objekt iconhelp.partial=Delvist synlige cirkler iconhelp.plines=Delvist synlige linjer iconhelp.arrow=Linjestykker som vektorer iconhelp.showcolor=Vis udvalgte farver iconhelp.runmacro=Kr makro iconhelp.macro=Makro parametre/ml/definer iconhelp.expression=Beregningsudtryk iconhelp.showvalue=Vis objekternes vrdier iconhelp.showname=Vis objektnavne iconhelp.longnames=Lange objektnavne iconhelp.obtuse=Tillad vinkler over 180 iconhelp.solid=Ingen gennemsigtige flader iconhelp.grid=Vis gitter iconhelp.comment=Kommentar iconhelp.defaults=Standardindstillinger iconhelp.macro0=Makrodefinition iconhelp.visual=Konstruktion med mus iconhelp.replay=Vis konstruktion trinvis iconhelp.oneforward=Fremad iconhelp.fastforward=Hurtigt fremad iconhelp.allforward=Til slutningen iconhelp.oneback=Tilbage iconhelp.fastback=Hurtigt tilbage iconhelp.allback=Til start iconhelp.close=Luk iconhelp.area=Udfyldt polygon iconhelp.text=Tekst med flere linjer iconhelp.fixedcircle=Cirkel med fast radius iconhelp.fixedangle=Vinkelben iconhelp.fixedsegment=Linjestykke med fast lngde iconhelp.animate=Animation af punkt iconhelp.delete=Slet objekt og afhngige objekter iconhelp.undo=Fortryd sidste slet iconhelp.nextbreak=G til nste pause iconhelp.setbreak=Indst pause/slet pause shortcuts.point=p shortcuts.segment=s shortcuts.line=l shortcuts.ray=h shortcuts.circle=c shortcuts.intersection=x shortcuts.move=f shortcuts.hide=g shortcuts.edit=r shortcuts.tracker=i shortcuts.objecttracker=j shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=k shortcuts.angle=v shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=u shortcuts.area=a shortcuts.text=t shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) menu.file=Filer menu.file.new=Ny konstruktion menu.file.clearmacros=Slet alle makroer menu.file.load=bn konstruktion... (Ctrl-o) menu.file.loadjob=bn opgave... (Ctrl-j) menu.file.savejob=Gem som opgave... (Ctrl-k) menu.file.save=Gem konstruktion (Ctrl-s) menu.file.saveas=Gem som... (Ctrl-a) menu.file.includemacros=Gem med makroer menu.file.exit=Afslut programmet (Alt-F4) menu.file.print=Udskriv ... menu.file.print.isoscale=Forhold 1:1 i cm menu.file.savebmp=Gem som bitmap (BMP) ... menu.file.savefig=Gem grafik (som FIG) ... menu.file.loadrun=bn beskrivende konstruktion (Ctrl-r) menu.file.editrun=Rediger beskrivende konstruktion (Ctrl-x) menu.actions=Udfr menu.actions.elementary=Simple vrktjer menu.actions.complex=Sammensatte vrktjer menu.actions.fixed=Faste objekter menu.actions.move=Vrktjer der flytter menu.actions.decorative=Dekorative objekter menu.options=Indstillinger menu.options.visual=Konstruktion med mus (Ctrl-F6) menu.options.hidden=Vis skjulte objekter (F9) menu.options.comment=Kommentar ... (F10) menu.options.constructiondisplay=Beskrivelse (F11) menu.options.grid=Vis gitter (F12) menu.options.showcolor=Vis farve menu.options.defaultcolor=Farve menu.options.defaultthickness=Standardbredde menu.options.defaulttype=Vis punkt som menu.options.setgrid=Indstil gitterbredde ... menu.options.shownames=Vis objektnavn (Ctrl-F6) menu.options.longnames=Lange objektnavne (Ctrl-F7) menu.options.obtuse=Tillad vinkler over 180 (Ctrl-F12) menu.options.solid=Ingen gennemsigtige flader menu.options.showvalues=Vis objekters vrdier (Ctrl-F8) menu.options.partial=Delvis synlige cirkler (Ctrl-F9) menu.options.plines=Delvis synlige linjer (Ctrl-F10) menu.options.arrow=Linjestykker som vektorer (Ctrl-F11) menu.options.editicons=Rediger vrktjspalet menu.options.all=Alle menu.options.setdigits=Decimaler ... menu.options.back=Slet sidste objekt (<--) menu.options.undo=Fortryd slet (Ctrl-z) menu.zoom=Zoom menu.zoom.in=Zoom ind (+) menu.zoom.out=Zoom ud (-) menu.zoom.left=Til venstre (Venstrepil) menu.zoom.right=Til hjre (Hjrepil) menu.zoom.up=Op (Pil op) menu.zoom.down=Ned (Pil ned) menu.macros=Makroer menu.special.definemacro=Definer makro (Ctrl-F5) menu.special.runmacro=Afspil makro (F5) menu.special.savemacros=Gem makroer menu.special.loadmacros=bn makroer menu.special.deletemacros=Slet makroer menu.special=Funktioner menu.special.testjob=Afprv opgave (Ctrl-F1) menu.special.jobcomment=Opgavetekst ... (F8) menu.special.export=Gem som HTML (Ctrl-e) menu.special.replay=Vis konstruktion trinvis menu.help=Hjlp menu.help.about=Om programmet menu.help.help=Hjlp (F1) menu.help.browser=HTML-hjlp og demoer menu.help.configure=Indstil browser menu.help.text=Korte hjlpetekster menu.help.macros=Makroer menu.help.tools=Vrktjer menu.help.gui=Brugerflade menu.help.interactive=Kommandotilstand menu.help.tips=Tips menu.settings=Programindstillinger menu.settings.fullicons=To fulde vrktjslinjer menu.settings.utf=Brug UTF8-kodning (uden , , ) menu.settings.autohide=Skjul andet skringspunkt menu.settings.iconbartop=Vrktjspanel verst menu.settings.showtips=Vis vrktjstips menu.settings.simplegraphics=Brug enkel grafik menu.settings.sure=Bekrft fr bne og lukke menu.settings.pointon=Sprg fr konstruktion af punkt p et objekt menu.settings.intersection=Sprg fr konstruktion af skringspunkt menu.settings.choice=Vis dialogen "Vlg objekt" menu.settings.movename=Vis objektvrdier mens der flyttes menu.settings.movefixname=Faste objektvrdier mens der flyttes menu.settings.restricted=Enkle indstillinger til skolebrug menu.colors=Angiv farver colors.default=Standardfarver colors.color0=Farve 1 (sort) colors.color1=Farve 2 (grn) colors.color2=Farve 3 (bl) colors.color3=Farve 4 (brun) colors.color4=Farve 5 (turkis) colors.color5=Farve 6 (rd) colors.background=Baggrund colors.select=Markering colors.target=Ml myfiledialog.dir=Mappe myfiledialog.file=Filnavn myfiledialog.pattern=Filtype filedialog.open=bn filedialog.saveas=Gem som ... filedialog.open.action=bn filedialog.saveas.action=Gem filedialog.htmlsave=Gem som HTML filedialog.htmlsave.action=Gem save=Gem load=bn abort=Fortryd bound.release=Frigr fra objekt bound.bind=Fastgr til objekt bound.error=Objekt ikke fundet fr skring constructiondisplay.edit=Rediger objekt constructiondisplay.copy=Kopier til udklipsholder edit.Title=Egenskaber edit.name=Navn edit.text=Beskrivelse edit.hidden=Skjult edit.fixed=Fast edit.color=Farve edit.ok=OK edit.cancel=Annuller edit.showname=Vis navn edit.point.title=Punkt edit.point.x=X edit.point.y=Y edit.point.type=Type edit.point.showvalue=Vis koordinater edit.point.intersection=Forskellig fra edit.point.bound=P objekt edit.point.away=Vk fra edit.point.close=Tt p edit.point.free=Frit edit.line.title=Linje, halvlinje, linjestykke edit.line.normal=Mellem edit.line.thick=Bred edit.line.thin=Smal edit.line.type=Type edit.circle.title=Cirkel edit.circle.length=Radius edit.circle.partial=Kun delvis synlig edit.circle.range=Angiv tegnegrnser edit.circle.killrange=Ophv tegnegrnser edit.point.colortype=Tykkelse edit.segment.length=Lngde edit.segment.showvalue=Vis lngde edit.plumb.restricted=Begrnset edit.angle.title=Vinkel edit.angle.length=Strrelse edit.angle.displaysize=Vis vinklens strrelse edit.angle.normal=Normal edit.angle.small=Lille edit.angle.large=Stor edit.expression.title=Udtryk edit.expression=Beregningsudtryk edit.expression.prompt=Beskrivelse edit.text.title=Tekst edit.area.title=Polygon edit.area.back=I baggrunden export.title=Gem som HTML export.pagetitle=Titel p siden export.width=Bredde export.height=Hjde export.jar=Java-arkiv export.comment=Brug kommentar som HTML-tekst export.file=Konstruktionsfil export.job=Opgave export.color=Farve export.backgroundcolor=Brug som baggrundsfarve export.appletcolor=Brug som farve p applet export.plain=Uden ramme export.3D=Ramme export.breaks=Afspil med pauser export.icons=Ramme og ikoner export.full=Ramme, ikoner og status export.nonvisual=Ramme, ikoner og indtastningslinje export.style=Applet-Stil export.setcolor=Vlg farve export.savefirst=Konstruktionen skal gemmes frst export.soltext=Lsning export.stylesheet=CSS-fil export.solution=Lsningsfil export.jumpsol=G til lsning export.linksol=Link til lsning export.savesol=Gem lsningsfil export.track=Spor export.digits=Gem antal decimaler export.setsize=Indst strrelse export.signature=Skrevet med JavaPasser export.colors=Gem brugerdefinerede farver export.background=Gem defineret baggrund help.title=Hjlp help.error=Hjlpefilen ikke fundet help.file=schoolgeometry.txt coloreditor.title=Juster farven coloreditor.red=Rd coloreditor.green=Grn coloreditor.blue=Bl coloreditor.color=Brugerdefineret comment.title=Kommentar comment.set=OK comment.cancel=Fortryd comment.close=Luk iconedit.title=Rediger vrktjspanel iconedit.twobars=Vrktjer i to linjer jobcomment.title=Opgave select.title=Vlg objekt select.ok=OK select.cancel=Annuller select.comment=Vis kommentar select.all=Alle message.circle.midpoint=Cirkel: Vlg centrum message.circle.radius=Cirkel: Punkt p periferi (Skift: Fast radius) message.fixedcircle.midpoint=Cirkel med fast radius: Vlg centrum message.fixedcircle.radius=Cirkel med fast radius: Klik et sted message.edit=Egenskaber: Vlg et objekt message.line.first=Linje: Vlg frste punkt message.line.second=Linje: Vlg andet punkt message.move.select=Flyt: Vlg et punkt message.move.move=Flyt: Flyt punktet message.point=Punkt: Afst et punkt message.segment.first=Linjestykke: Vlg frste punkt message.segment.second=Linjestykke: Andet punkt (Skift: Fast lngde) message.fixedsegment.first=Linjestykke med fast lngde: Frste punkt message.fixedsegment.second=Linjestykke med fast lngde: Klik et sted message.ray.first=Halvlinje: Vlg udgangspunktet message.ray.second=Halvlinje: Vlg andet punkt message.intersection.first=Skringspunkt: Vlg frste objekt eller skringen message.intersection.second=Skringspunkt: Vlg andet objekt message.hide=Skjul/vis: Vlg et objekt message.tracker.select=Spor: Vlg punkt eller linje message.tracker.selectpoint=Spor: Vlg det punkt der skal flyttes message.tracker.move=Spor: Flyt punktet message.objecttracker.select=Automatisk spor: Vlg et punkt eller en linje message.objecttracker.object=Automatisk spor: Vlg en linje eller cirkel message.objecttracker.selectpoint=Automatisk spor: Vlg det punkt der skal bevges message.objecttracker.selectanypoint=Automatisk spor: Vlg et andet punkt der skal bevges message.objecttracker.move=Automatisk spor: Bevg punktet message.objecttracker.start=Automatisk spor: Start animationen message.objecttracker.stop=Automatisk spor: Stop animationen message.parallel.first=Parallel: Vlg en linje message.parallel.second=Parallel: Vlg et punkt message.plumb.first=Normal: Vlg en linje message.plumb.second=Normal: Vlg et punkt message.circle3.first=Cirkel: Vlg frste radiuspunkt message.circle3.second=Cirkel: Vlg andet radiuspunkt message.circle3.midpoint=Cirkel: Vlg centrum message.midpoint.first=Midtpunkt: Vlg frste punkt message.midpoint.second=Midtpunkt: Vlg andet punkt message.quadric=Keglesnit: Vlg punkt nummer message.angle.first=Marker vinkel: Vlg et punkt p frste ben message.angle.root=Marker vinkel: Vlg vinkelspids message.angle.second=Marker vinkel: Punkt p andet ben (Skift-tast: Fast strrelse) message.fixedangle.first=Vinkelben: Vlg et punkt p frste ben message.fixedangle.root=Vinkelben: Vlg vinkelspids message.fixedangle.second=Vinkelben: Klik et sted message.label.select=Flyt tekst: Vlg teksten message.label.move=Flyt tekst: Flyt teksten message.boundedpoint=Punkt p et objekt: Vlg en linje eller cirkel message.parameters=Makroparameter: Vlg objekter message.targets=Makro mlobjekter: Vlg objekter message.savejob.first=Definer opgave: Vlg det sidste objekt der skal vises message.savejob.second=Definer opgave: Vlg mlobjektet message.savejob.third=Definer opgave: Vlg hvilke andre objekter der skal vises message.runmacro=Makro %: %. (type %) % message.runmacro.return=(Mellemrumstast vlger %) message.runmacro.fixes=(Skift for at vlge flere objekter) message.delete=Slet objekt: Vlg objekt message.reorder=Flyt objekt bagud: Vlg et objekt message.expression=Beregningsudtryk: Vlg et sted message.area=Udfyldt polygon: Vlg et punkt, afslut med klik p et valgt message.text=Tekst: Vlg et sted message.animator.point=Animation: Vlg et punkt message.animator.segment=Animation: Vlg linjestykker eller cirkler message.animator.running=Animation: Er i gang message.range.first=Tegn cirkel fra punkt ... message.range.second=... til punkt message.setaway.away=Vk fra punktet message.setaway.close=Hen til punktet objectsedit.title=Rediger egenskaber point.type.square=Kvadrat point.type.diamond=Ruder point.type.circle=Cirkel point.type.dot=Prik color.type.normal=Normal color.type.thick=Bred color.type.thin=Smal text.point=Punkt i %, % text.line=Linje gennem % og % text.segment=Linjestykke fra % til % text.segment.fixed=Linjestykke fra % til % med lngden % text.ray=Halvlinje fra % i retning mod % text.intersection=Skring mellem % og % text.circle=Cirkel om % gennem % text.circle.fixed=Cirkel om % gennem % med radius % text.fixedcircle=Cirkel om % med radius % text.circle3=Cirkel om % med radius fra % til % text.parallel=Parallel gennem % til % text.midpoint=Midtpunktmellem % og % text.quadric=Keglesnit gennem % text.plumb=Normal gennem % til % text.angle=Marker vinkel % - % - % text.angle.fixed=Vinkelben % - % - % med strrelsen % text.boundedpoint=Punkt p % text.expression=Beregningsudtryk "%" i %, % text.area=Polygon text.fixedangle=Vinkelben % - % med strrelsen % name.Point=Punkt name.Intersection=Skring name.OtherIntersection=Skring name.Circle=Cirkel name.Circle3=Cirkel name.Segment=Linjestykke name.Ray=Halvlinje name.TwoPointLine=Linje gennem to punkter name.Line=Linje name.Parallel=Parallel name.Midpoint=Midtpunkt name.Quadric=Keglesnit name.Plumb=Normal name.Angle=Vinkel name.PointOn=Punkt p objekt name.Expression=Beregningsudtryk name.Polygon=Polygon name.short.Point=P name.short.Intersection=S name.short.OtherIntersection=S name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=h name.short.Line=l name.short.Parallel=p name.short.Midpoint=M name.short.Quadric=K name.short.Plumb=n name.short.Angle=v name.short.PointOn=Pp name.short.Expression=U name.short.Polygon=A prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==h(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==S(,) prompt.midpoint==M(,) prompt.quadric==K(,,,,) prompt.parallel==p(,) prompt.plumb==n(,) prompt.angle==v(,,) prompt.area=A(,,) prompt.expression=U popup.hidden=Vis skjulte objekter popup.replay=G trinvis gennem konstruktionen popup.empty=--- Makroer --- replay.title=Trinvis reorder.title=Flyt objekt bagud reorder.message=st ind efter reorder.notfound=Objektet blev ikke fundet reorder.warning=Operationen kan ikke udfres setgrid.title=Gitterbredde setgrid.prompt=Ny gitterbredde setgrid.set=St definemacro.title=Makrodefinition definemacro.name=Navn definemacro.comment=Kommentar definemacro.parameters=Sprg efter parametre definemacro.noparams=Ingen parameter defineret definemacro.nomacro=Ingen makro defineret definemacro.targetsonly=Kun mlene ses definemacro.invisible=Skjul helt definemacro.promptfor=Sprg efter: macro.replace.title=Erstat makro macro.replace=Erstat makro: macro.replace.all=Alle macro.usage=Forkert brug af makroen (se tips) macro.prompt.title=Parameterangivelse macro.prompt.prompt=Angiv en vrdi for parameteren macro.prompt.illegal=Ugyldig vrdi digits.title=Antal decimaler digits.edit=I egenskabsdialogen digits.lengths=Til visning digits.angles=Til vinkler editrun.title=Behandl konstruktionsbeskrivelsen editrun.run=Gem og udfr editrun.load=Anden beskrivelse sure.title=Er du sikker? sure.macros=Slet alle makroer? sure.delete=Glem alle ndringer? close.title=Luk close.prompt=Vil du afslutte programmet? file.exists.title=Filen findes file.exists.overwrite=Der eksisterer allerede en fil med det navn Overskriv? exception.nparams=Forkert antal parametre exception.notfound=Objekt ikke fundet eller udtryk ikke defineret exception.type=Forkert parametertype exception.expression=Ugyldigt udtryk exception.canfix=Objektet kan ikke lses fast exception.fix=Forkert vrdi exception.novalue=Forkert vrdi exception.elementary=Forkert element i udtrykket exception.bracket=Hjreparentes mangler exception.quotes=Afsluttende " mangler exception.dot=Forkert talformat exception.nodigit=Tallet indeholder ingen cifre exception.function=Ukendt funktion exception.parameter=Forkert parameter exception.macro=Forkert makroparameter exception.macrotarget=Forkert mlobjekt exception.name=Der skal angives et navn exception.prompt=Forkert objekt i Sprg efter exception.prompt.parameter=Kan ikke vre en parameter exception.parameters=Forkert parameter exception.brackets=Fejl i parenteser exception.job=Forkert opgaveparameter exception.track=Forkert sporparameter exception.animate=Forkert animationsparameter exception.boolean=Vrdien sand eller falsk var ventet exception.value=Ugyldig vrdi exception.color=Ugyldig farve exception.colortype=Ugyldig bredde exception.type=Ugyldig punkttype exception.macroparameter=Forkert makroparameter exception.macrotarget=Forkert mlobjekt exception.double=Navnet findes allerede error.setaway=Dette punkt er ikke defineret fr skringen error.objecttracker.depends=Punktet er bundet til et andet objekt constructiondisplay.title=Konstruktionsbeskrivelse function.hide=Skjul function.hide.short=skjul function.rename=Navn function.rename.short=navn function.value=Vrdi function.value.short=vrdi function.window=Vindue function.window.short=Vindue function.color=Farve function.color.short=farve function.thickness=Bredde function.thickness.short=bredde function.type=Type function.type.short=type function.partial=delvis function.partial.short=partiel function.fill=Udfyldt function.fill.short=fyldt function.back=tilbage function.back.short=tilb function.away=Langtfra function.away.short=langt function.closeto=Hentil function.closeto.short=hen function.acute=Spids function.acute.short=spids function.obtuse=Stump function.obtuse.short=stump function.solid=ikke-transparent function.solid.short=opak function restrict=udsnit function restrict.short=udsnit expression.value=Vrdi parameter=Parameter parameter.short=Param target=ml target.short=ml macro=Makro macro.short=makro away=langtfra away.short=fra end=Slut end.short=slut invisible=Usynlig invisible.short=usynlig showall=Synlig showall.short=synlig configure.title=Angiv browser configure.prompt=Browserkommando background.error=Kunne ikke bne billedet (GIF eller JPG). menu.background=Baggrund menu.background.grab=Gr konstruktion til baggrund menu.background.clear=Slet baggrund menu.background.load=bn baggrundsbillede ... menu.background.tile=Side om side menu.background.center=Centreret menu.background.usesize=Tilpas vinduet iconhelp.grab=St eller slet baggrund filedialog.backgroundload=bn baggrundsbillede filedialog.backgroundload.action=bn # New Resources in Version 2.14 menu.file.compress=Komprimr altid menu.file.savesvg=Gem grafik (som SVG) ... # Version 2.15 loading=bner konstruktion, vent venligst # Version 2.18 and 2.19 menu.settings.font.default=Normal menu.settings.font.bold=Fed menu.settings.font.large=Stor menu.file.saveeps=Gem grafik (som EPS) ... menu.fonts=Skrifttype # Version 2.20 bmpscaler.title=Skaler bitmap bmpscaler.width=Bredde bmpscaler.height=Hjde bmpscaler.scale=Faktor (tryk retur) bmpscaler.illegal=Vrdi uden for grnserne # Version 2.21 renamemacro.title=Omdb makro renamemacro.name=Nyt makronavn menu.special.renamemacro=Omdb makro ... # Version 2.23 savequestion.title=Gem konstruktion savequestion.qsave=Gem ndringer? # Version 2.25 exception.printsize=Konstruktionen kan ikke vre p siden iconhelp.nohelp=Der er ingen hjlp til dette emne iconhelp.type?=Punkt-type iconhelp.thickness?=Bredde iconhelp.color?=Farve iconhelp.filled=Udfyldt objekt iconhelp.isback=Tegn som baggrund iconhelp.inverse=Spejl vinklen iconhelp.angle?=Strrelse # Version 2.31 menu.settings.indicate=Fremhv objekter fr der vlges menu.options.other=Andre indstillinger menu.help.welcome=Nyt i denne version iconhelp.twolines=Ikoner i to linjer iconhelp.qintersection=Sprg om skring skal konstrueres iconhelp.qchoice=Vis dialogen "Vlg objekt" iconhelp.qpointon=Sprg fr konstruktion af punkt p objekt iconhelp.noindicate=Fremhv ikke objekter under markr # Version 2.33 menu.file.new=Ny konstruktion (Ctrl-n) # Version 2.34 edit.text.title=Rediger tekst edit.text.settings=Tekstegenskaber menu.settings.filedialog=Brug ikke systemets fil-dialog # Version 2.35 menu.settings.bitmapbackground=Anvend baggrundsfarven i bitmaps # Version 2.36 menu.file.savegraphics=Gem grafik som ... menu.file.savepng=Gem grafik (som PNG) bmpscaler.title=Skaler grafik # Version 2.37 menu.file.savepdf=Gem grafik (som PDF) iconhelp.chord=Vis som linjestykke # Version 2.39 message.setfixedangle.first=Fastlg vinklen: Frste punkt? message.setfixedangle.second=Fastlg vinklen: Vinkelspids? message.setfixedangle.third=Fastlg vinklen: Tredje punkt? edit.fixedangle.set=Angiv strrelse... message.setfixedcircle.first=Angiv cirklens radius: Frste punkt? message.setfixedcircle.second=Angiv cirklens radius: Andet punkt? edit.fixedcircle.set=Angiv strrelse... # Version 2.40 minpointsize.title=Angiv mindste punktstrrelse minpointsize.prompt=Angiv mindste punktstrrelse (standard: 3) menu.settings.font.minpointsize=Mindste punktstrrelse... # Version 2.41 name.short.Track=Tr text.track=Spor af % mens % bevges p % trackquestion.keep=Behold sporet i konstruktionen? trackquestion.title=Behold sporet menu.options.track=Behold sporet (Skift-Enter) iconhelp.indicate=Vis konstruktionsresultaterne fr der klikkes iconhelp.nohelp=Ingen hjlp til dette emne # Version 2.42 objects.draw=Tegn med musen menu.options.cleardraw=Slet tegningen (Esc) iconhelp.draw=Tegn med musen message.draw=Tegn med musen (Slet med ESC) shortcuts.draw=; # Version 2.43 message.move.select=Flyt: Vlg et punkt (skift: vis udgangsposition) message.rename=Omdb A,B,C,...: Vlg objekter iconhelp.rename=Omdb A,B,C,... objects.rename=Omdb A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Vis ikke vinkelben # Version 2.45 menu.settings.smartboard=Smartboard-modus shortcuts.zoom=% objects.zoom=Zoom med musen message.zoom=Trk centret eller zoom ind og ud # Version 2.46 menu.special.restricticons=Begrnset vrktjspanel # Version 2.47 menu.settings.indicate.simple=Fremhv kun punkter fr konstruktion menu.settings.beginner=Begyndermodus question.again=Sprg altid # Version 2.49 definemacro.parameters=Sprg efter parametre ("=Navn" for altid at bruge dette objekt) # Version 2.53 menu.actions.angles=Vinkler menu.actions.circles=Cirkler menu.actions.lines=Linjer menu.actions.points=Punkter ./src/rene/zirkel/docs/ZirkelProperties_no.properties0000770000175000017500000010657010655647770022102 0ustar yvesyveslanguage=no_ version=Versjon homefile=index.html homepage=http://www.z-u-l.de/ about.title=Om programmet about.name=JavaPasser about.programmed=Programmet er skrevet av title=Passer close=Lukk ok=OK cancel=Avbryt abort=Avbryt done=Bra! Oppgaven er lst message=Melding warning=Advarsel yes=Ja no=Nei true=Sant false=Feil warning.nojob=Dette er ikke en oppgave warning.print=Feil ved utskrift warning.reset=Valget fr virkning neste gang programmet startes question.title=Sprsml question.intersection=Skal skjringen konstrueres? question.pointon=Konstrur et punkt p dette objektet? colors.black=Sort colors.blue=Bl colors.green=Grnn colors.brown=Brun colors.cyan=Turkis colors.red=Rd objects.point=Punkt objects.segment=Linjestykke objects.line=Linje objects.ray=Strle objects.circle=Sirkel objects.intersection=Skjringspunkt objects.move=Flytt punkt objects.hide=Skjul objekt objects.edit=Egenskaper objects.tracker=Spor objects.objecttracker=Automatisk spor objects.parallel=Parallell objects.plumb=Normal objects.circle3=Sirkel ut fra r og s objects.midpoint=Midtpunkt objects.quadric=Kjeglesnitt objects.angle=Vinkel objects.boundedpoint=Punkt p objekt objects.parameter=Angi makro-parameter objects.targets=Angi makroens ml objects.definejob=Definer en oppgave objects.runmacro=Kjr makro objects.delete=Slett objekter og deres avhengige objects.reorder=Flytt objekt opp p listen objects.animate=Animasjon objects.expression=Beregningsuttrykk objects.area=Polygon objects.text=Tekst objects.fixedcircle=Sirkel med fast radius objects.fixedangle=Vinkel med fast gradetall objects.fixedsegment=Linjestykke med fast lengde iconhelp.point=Punkt iconhelp.segment=Linjestykke iconhelp.line=Linje iconhelp.ray=Strle iconhelp.circle=Sirkel iconhelp.intersection=Skjringspunkt iconhelp.move=Flytt punkt iconhelp.hide=Skjul objekt iconhelp.edit=Endre objektegenskaper iconhelp.tracker=Spor iconhelp.objecttracker=Automatisk spor iconhelp.parallel=Parallell iconhelp.plumb=Normal iconhelp.circle3=Sirkel ut fra r og s iconhelp.midpoint=Midtpunkt iconhelp.quadric=Kjeglesnitt iconhelp.angle=Marker vinkel iconhelp.boundedpoint=Punkt p objekt iconhelp.hidden=Vis skjulte objekter iconhelp.color=Farge p neste objekt iconhelp.type=Type av neste punkt iconhelp.thickness=Bredde p neste objekt iconhelp.back=Slett siste objekt iconhelp.type0=Type av neste punkt iconhelp.thickness0=Bredde p neste objekt iconhelp.partial=Delvis synlige sirkler iconhelp.plines=Delvis synlige linjer iconhelp.arrow=Linjestykker som vektorer iconhelp.showcolor=Vis utvalgte farger iconhelp.runmacro=Kjr makro iconhelp.macro=Makro parametre/ml/definer iconhelp.expression=Beregningsuttryk iconhelp.showvalue=Vis objektenes verdier iconhelp.showname=Vis objektnavnet iconhelp.longnames=Lange objektnavn iconhelp.obtuse=Tillat vinkler over 180 iconhelp.solid=Ingen gennomsiktige flater iconhelp.grid=Vis rutenett iconhelp.comment=Kommentar iconhelp.defaults=Standardinnstillinger iconhelp.macro0=Makrodefinition iconhelp.visual=Konstruksjon med mus iconhelp.replay=Vis konstruksjon trinnvis iconhelp.oneforward=Fremover iconhelp.fastforward=Hurtig fremover iconhelp.allforward=Helt frem iconhelp.oneback=Tilbake iconhelp.fastback=Hurtig tilbake iconhelp.allback=Til start iconhelp.close=Lukk iconhelp.area=Fylt polygon iconhelp.text=Tekst med flere linjer iconhelp.fixedcircle=Sirkel med fast radius iconhelp.fixedangle=Vinkelbein iconhelp.fixedsegment=Linjestykke med fast lengde iconhelp.animate=Animasjon av punkt iconhelp.delete=Slett objekt og avhengige objekter iconhelp.undo=Angre iconhelp.nextbreak=G til neste pause iconhelp.setbreak=Sett inn pause/slett pause iconhelp.zoom=Zoom med mus (%) shortcuts.point=p shortcuts.segment=s shortcuts.line=l shortcuts.ray=h shortcuts.circle=c shortcuts.intersection=x shortcuts.move=f shortcuts.hide=g shortcuts.edit=r shortcuts.tracker=i shortcuts.objecttracker=j shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=k shortcuts.angle=v shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=u shortcuts.area=a shortcuts.text=t shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) menu.file=Fil menu.file.new=Ny konstruksjon menu.file.clearmacros=Slett alle makroer menu.file.load=pne konstruksjon... (Ctrl-o) menu.file.loadjob=pne oppgave... (Ctrl-j) menu.file.savejob=Lagre som oppgave... (Ctrl-k) menu.file.save=Lagre konstruksjon (Ctrl-s) menu.file.saveas=Lagre som... (Ctrl-a) menu.file.includemacros=Lagre med makroer menu.file.exit=Avslutt programmet (Alt-F4) menu.file.print=Skriv ut ... menu.file.print.isoscale=Forhold 1:1 i cm menu.file.savebmp=Lagre som bitmap (BMP) ... menu.file.savefig=Lagre grafikk (som FIG) ... menu.file.loadrun=pne beskrivende konstruksjon (Ctrl-r) menu.file.editrun=Rediger beskrivende konstruksjon (Ctrl-x) menu.actions=Utfr menu.actions.elementary=Enkle verkty menu.actions.complex=Avanserte verkty menu.actions.fixed=Faste objekter menu.actions.move=Verkty som beveges menu.actions.decorative=Dekorative objekter menu.options=Innstillinger menu.options.visual=Konstruksjon med mus (Ctrl-F6) menu.options.hidden=Vis skjulte objekter (F9) menu.options.comment=Kommentar ... (F10) menu.options.constructiondisplay=Beskrivelse (F11) menu.options.grid=Vis rutenett (F12) menu.options.showcolor=Vis Farge menu.options.defaultcolor=Farge menu.options.defaultthickness=Standardbredde menu.options.defaulttype=Vis punkt som menu.options.setgrid=Endre rutestrrelse ... menu.options.shownames=Vis objektnavn (Ctrl-F6) menu.options.longnames=Lange objektnavn (Ctrl-F7) menu.options.obtuse=Tillat vinkler over 180 (Ctrl-F12) menu.options.solid=Ingen gjennomsiktige flater menu.options.showvalues=Vis objekters verdier (Ctrl-F8) menu.options.partial=Delvis synlige sirkler (Ctrl-F9) menu.options.plines=Delvis synlige linjer (Ctrl-F10) menu.options.arrow=Linjestykker som vektorer (Ctrl-F11) menu.options.editicons=Rediger verktyspanel menu.options.all=Alle menu.options.setdigits=Desimaler ... menu.options.back=Tilbake (<--) menu.options.undo=Angre (Ctrl-z) menu.zoom=Zoom menu.zoom.in=Zoom inn (+) menu.zoom.out=Zoom ut (-) menu.zoom.left=Til venstre (Venstrepil) menu.zoom.right=Til hyre (Hyrepil) menu.zoom.up=Opp (Pil opp) menu.zoom.down=Ned (Pil ned) menu.macros=Makroer menu.special.definemacro=Definer makro (Ctrl-F5) menu.special.runmacro=Kjr makro (F5) menu.special.savemacros=Lagre makroer menu.special.loadmacros=pne makroer menu.special.deletemacros=Slett makroer menu.special=Funksjoner menu.special.testjob=Prv oppgave (Ctrl-F1) menu.special.jobcomment=Oppgavetekst ... (F8) menu.special.export=Exporter som HTML (Ctrl-e) menu.special.replay=Vis konstruksjon trinnvis menu.help=Hjelp menu.help.about=Om programmet menu.help.help=Hjelp (F1) menu.help.browser=HTML-hjelp og demoer menu.help.configure=Innstill browser menu.help.text=Korte hjelpetekster menu.help.macros=Makroer menu.help.tools=Verkty menu.help.gui=Brukergrensesnitt menu.help.interactive=Kommandotilstand menu.help.tips=Tips menu.settings=Programinnstillinger menu.settings.fullicons=To fulle verktylinjer menu.settings.utf=Bruk UTF8-kodning (uten , , ) menu.settings.autohide=Skjul andre skjringspunkt menu.settings.iconbartop=Verktypanel verst menu.settings.showtips=Vis verktytips menu.settings.simplegraphics=Bruk enkel grafikk menu.settings.sure=Bekreft fr pne og lukke menu.settings.pointon=Spr fr konstruksjon av punkt p et objekt menu.settings.intersection=Spr fr konstruksjon av skjringspunkt menu.settings.choice=Vis dialogen "Velg objekt" menu.settings.movename=Vis objektverdier under flytting menu.settings.movefixname=Faste objektverdier under flytting menu.settings.restricted=Enkle innstillinger til skolebruk menu.colors=Angi farger colors.default=Standardfarger colors.color0=Farge 1 (sort) colors.color1=Farge 2 (grnn) colors.color2=Farge 3 (bl) colors.color3=Farge 4 (brun) colors.color4=Farge 5 (turkis) colors.color5=Farge 6 (rd) colors.background=Bakgrunn colors.select=Marker colors.target=Ml myfiledialog.dir=Mappe myfiledialog.file=Filnavn myfiledialog.pattern=Filtype filedialog.open=pne filedialog.saveas=Lagre som ... filedialog.open.action=pne filedialog.saveas.action=Lagre filedialog.htmlsave=Lagre som HTML filedialog.htmlsave.action=Lagre save=Lagre load=pne abort=Avbryt bound.release=Frigjr fra objekt bound.bind=Bind til objekt bound.error=Objekt ikke funnet fr skjring constructiondisplay.edit=Rediger objekt constructiondisplay.copy=Kopier til utklippstavle edit.Title=Egenskaper edit.name=Navn edit.text=Beskrivelse edit.hidden=Skjult edit.fixed=Fast edit.color=Farge edit.ok=OK edit.cancel=Avbryt edit.showname=Vis navn edit.point.title=Punkt edit.point.x=X edit.point.y=Y edit.point.type=Type edit.point.showvalue=Vis koordinater edit.point.intersection=Forskjellig fra edit.point.bound=Bundet objekt edit.point.away=Bort fra edit.point.close=Tett p edit.point.free=Fri edit.line.title=Linje, strle, linjestykke edit.line.normal=Mellom edit.line.thick=Bred edit.line.thin=Smal edit.line.type=Type edit.circle.title=Sirkel edit.circle.length=Radius edit.circle.partial=Kun delvis synlig edit.circle.range=Angi tegngrenser edit.circle.killrange=Opphev tegngrenser edit.point.colortype=Tykkelse edit.segment.length=Lengde edit.segment.showvalue=Vis lengde edit.plumb.restricted=Begrenset edit.angle.title=Vinkel edit.angle.length=Strrelse edit.angle.displaysize=Vis vinklens strrelse edit.angle.normal=Normal edit.angle.small=Liten edit.angle.large=Stor edit.expression.title=Uttrykk edit.expression=Beregningsuttrykk edit.expression.prompt=Beskrivelse edit.text.title=Tekst edit.area.title=Polygon edit.area.back=I bakgrunnen export.title=Lagre som HTML export.pagetitle=Tittel p siden export.width=Bredde export.height=Hyde export.jar=Java-arkiv export.comment=Bruk kommentar som HTML-tekst export.file=Konstruksjonsfil export.job=Oppgave export.color=Farge export.backgroundcolor=Bruk som bakgrunnsfarge export.appletcolor=Bruk som Farge p applet export.plain=Uten ramme export.3D=Ramme export.breaks=Spill av med pauser export.icons=Ramme og ikoner export.full=Ramme, ikoner og status export.nonvisual=Ramme, ikoner og inntastningslinje export.style=Applet-Stil export.setcolor=Velg Farge export.savefirst=Konstruksjonen skal skjules frst export.soltext=Lsning export.stylesheet=CSS-fil export.solution=Lsningsfil export.jumpsol=G til lsning export.linksol=Link til lsning export.savesol=Lagre lsningsfil export.track=Spor export.digits=Skjul antall desimaler export.setsize=Sett strrelse export.signature=Skrevet med JavaPasser av R. Grothmann export.colors=Skjul brukerdefinerte farger export.background=Skjul definert bakgrunn help.title=Hjelp help.error=Hjelpefilen ikke funnet help.file=no_schoolgeometry.txt coloreditor.title=Endre fargen coloreditor.red=Rd coloreditor.green=Grnn coloreditor.blue=Bl coloreditor.color=Brukerdefinert comment.title=Kommentar comment.set=OK comment.cancel=Avbryt comment.close=Lukk iconedit.title=Rediger verktypanel iconedit.twobars=Verkty i to linjer jobcomment.title=Oppgave select.title=Velg objekt select.ok=OK select.cancel=Avbryt select.comment=Vis kommentar select.all=Alle message.circle.midpoint=Sirkel: Velg senter message.circle.radius=Sirkel: Punkt p periferi (Shift: Fast radius) message.fixedcircle.midpoint=Sirkel med fast radius: Velg sentrum message.fixedcircle.radius=Sirkel med fast radius: Klikk et sted message.edit=Egenskaper: Velg et objekt message.line.first=Linje: Velg frste punkt message.line.second=Linje: Velg andre punkt message.move.select=Flytt: Velg et punkt message.move.move=Flytt: Flytt punktet message.point=Punkt: Sett et punkt message.segment.first=Linjestykke: Velg frste punkt message.segment.second=Linjestykke: Velg andre punkt (Shift: Fast lengde) message.fixedsegment.first=Linjestykke med fast lengde: Frste punkt message.fixedsegment.second=Linjestykke med fast lengde: Andre punkt message.ray.first=Strle: Velg utgangspunktet message.ray.second=Strle: Velg andre punkt message.intersection.first=Skjringspunkt: Velg frste objekt eller skjringen message.intersection.second=Skjringspunkt: Velg andre objekt message.hide=Skjul/vis: Velg et objekt message.tracker.select=Spor: Velg punkt eller linje message.tracker.selectpoint=Spor: Velg punktet som skal flyttes message.tracker.move=Spor: Flytt punktet message.objecttracker.select=Automatisk spor: Velg et punkt eller en linje message.objecttracker.object=Automatisk spor: Velg en linje eller sirkel message.objecttracker.selectpoint=Automatisk spor: Velg det punkt som skal beveges message.objecttracker.selectanypoint=Automatisk spor: Velg et andre punkt som skal beveges message.objecttracker.move=Automatisk spor: Beveg punktet message.objecttracker.start=Automatisk spor: Start animasjonen message.objecttracker.stop=Automatisk spor: Stopp animasjonen message.parallel.first=Parallell: Velg en linje message.parallel.second=Parallell: Velg et punkt message.plumb.first=Normal: Velg en linje message.plumb.second=Normal: Velg et punkt message.circle3.first=Sirkel: Velg frste radiuspunkt message.circle3.second=Sirkel: Velg andre radiuspunkt message.circle3.midpoint=Sirkel: Velg sentrum message.midpoint.first=Midtpunkt: Velg frste punkt message.midpoint.second=Midtpunkt: Velg andre punkt message.quadric=Keglesnit: Velg punkt nummer message.angle.first=Marker vinkel: Velg et punkt p frste ben message.angle.root=Marker vinkel: Velg vinkelspiss message.angle.second=Marker vinkel: Punkt p andre ben (Shift-tast: Fast strrelse) message.fixedangle.first=Vinkelbein: Velg et punkt p frste vinkelbein message.fixedangle.root=Vinkelbein: Velg vinkelspiss message.fixedangle.second=Vinkelbein: Velg et punkt p andre vinkelbein message.label.select=Flytt tekst: Velg teksten message.label.move=Flytt tekst: Flytt teksten message.boundedpoint=Punkt p et objekt: Velg en linje eller sirkel message.parameters=Makroparameter: Velg objekter message.targets=Makro mlobjekter: Velg objekter message.savejob.first=Definer oppgave: Velg det siste objekt som skal vises message.savejob.second=Definer oppgave: Velg mlobjektet message.savejob.third=Definer oppgave: Velg hvilke andre objekter som skal vises message.runmacro=Makro %: %. (type %) % message.runmacro.return=(Mellomromstast velger %) message.runmacro.fixes=(Shift for velge flere objekter) message.delete=Slett objekt: Velg objekt message.reorder=Flytt objekt bakover: Velg et objekt message.expression=Beregningsuttrykk: Velg et sted message.area=Utfylt polygon: Velg et punkt, avslutt med Klikk p et tidligere valgt punkt message.text=Tekst: Velg et sted message.animator.point=Animation: Velg et punkt message.animator.segment=Animasjon: Velg linjestykker eller sirkler message.animator.running=Animasjon: Er i gang message.range.first=Tegn sirkel fra punkt ... message.range.second=... til punkt message.setaway.away=Bort fra punktet message.setaway.close=Mot punktet objectsedit.title=Rediger egenskaper point.type.square=Kvadrat point.type.diamond=Ruter point.type.circle=Sirkel point.type.dot=Prikk color.type.normal=Normal color.type.thick=Bred color.type.thin=Smal text.point=Punkt i %, % text.line=Linje gjennom % og % text.segment=Linjestykke fra % til % text.segment.fixed=Linjestykke fra % til % med lengden % text.ray=Strle fra % i retning mot % text.intersection=Skjring mellom % og % text.circle=Sirkel om % gjennom % text.circle.fixed=Sirkel om % gjennom % med radius % text.fixedcircle=Sirkel om % med radius % text.circle3=Sirkel om % med radius fra % til % text.parallel=Parallell gjennom % til % text.midpoint=Midtpunkt mellom % og % text.quadric=Kjeglesnitt gjennom % text.plumb=Normal gjennom % til % text.angle=Marker vinkel % - % - % text.angle.fixed=Vinkelbein % - % - % med strrelsen % text.boundedpoint=Punkt p % text.expression=Beregningsuttrykk "%" i %, % text.area=Polygon text.fixedangle=Vinkelbein % - % med strrelsen % name.Point=Punkt name.Intersection=Skjring name.OtherIntersection=Skjring name.Circle=Sirkel name.Circle3=Sirkel name.Segment=Linjestykke name.Ray=Strle name.TwoPointLine=Linje gjennom to punkter name.Line=Linje name.Parallel=Parallell name.Midpoint=Midtpunkt name.Quadric=Kjeglesnitt name.Plumb=Normal name.Angle=Vinkel name.PointOn=Punkt p objekt name.Expression=Beregningsuttrykk name.Polygon=Polygon name.short.Point=P name.short.Intersection=S name.short.OtherIntersection=S name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=h name.short.Line=l name.short.Parallel=p name.short.Midpoint=M name.short.Quadric=K name.short.Plumb=n name.short.Angle=v name.short.PointOn=Pp name.short.Expression=U name.short.Polygon=A prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==h(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==S(,) prompt.midpoint==M(,) prompt.quadric==K(,,,,) prompt.parallel==p(,) prompt.plumb==n(,) prompt.angle==v(,,) prompt.area=A(,,) prompt.expression=U popup.hidden=Vis skjulte objekter popup.replay=G trinnvis gjennom konstruksjonen popup.empty=--- Makroer --- replay.title=Trinnvis reorder.title=Flytt objekt bakover reorder.message=Sett inn etter reorder.notfound=Objektet ble ikke funnet reorder.warning=Operasjonen kan ikke utfres setgrid.title=Rutebredde setgrid.prompt=Ny rutebredde setgrid.set=Sett definemacro.title=Makrodefinisjon definemacro.name=Navn definemacro.comment=Kommentar definemacro.parameters=Spr etter parametre definemacro.noparams=Ingen parameter definert definemacro.nomacro=Ingen makro definert definemacro.targetsonly=Kun mlene ses definemacro.invisible=Skjul helt definemacro.promptfor=Spr etter: macro.replace.title=Erstatt makro macro.replace=Erstatt makro: macro.replace.all=Alle macro.usage=Feil bruk av makroen (se tips) macro.prompt.title=Parameterangivelse macro.prompt.prompt=Angi en verdi for parameteren macro.prompt.illegal=Ugyldig verdi digits.title=Antall desimaler digits.edit=I egenskapsdialogen digits.lengths=Til visning digits.angles=Til vinkler editrun.title=Behandle konstruksjonsbeskrivelsen editrun.run=Lagre og utfr editrun.load=Annen beskrivelse sure.title=Er du sikker? sure.macros=Slett alle makroer? sure.delete=Glem alle endringer? close.title=Lukk close.prompt=Vil du avslutte programmet? file.exists.title=Filen finnes file.exists.overwrite=Det eksisterer allerede en fil med det navnet Overskrive? exception.nparams=Feil antall parametre exception.notfound=Objekt ikke funnet eller uttrykk ikke definert exception.type=Feil parametertype exception.expression=Ugyldig uttrykk exception.canfix=Objektet kan ikke lses fast exception.fix=Feil verdi exception.novalue=Feil verdi exception.elementary=Feil element i uttrykket exception.bracket=Hyreparentes mangler exception.quotes=Avsluttende " mangler exception.dot=Feil tallformat exception.nodigit=Tallet inneholder ingen sifre exception.function=Ukjent funksjon exception.parameter=Feil parameter exception.macro=Feil makroparameter exception.macrotarget=Feil mlobjekt exception.name=Du m angi et navn exception.prompt=Feil objekt som det sprres etter exception.prompt.parameter=Kan ikke vre en parameter exception.parameters=Feil parameter exception.brackets=Feil i parenteser exception.job=Feil oppgaveparameter exception.track=Feil sporparameter exception.animate=Feil animasjonsparameter exception.boolean=Verdien sann eller feil var ventet exception.value=Ugyldig verdi exception.color=Ugyldig farge exception.colortype=Ugyldig bredde exception.type=Ugyldig punkttype exception.macroparameter=Feil makroparameter exception.macrotarget=Feil mlobjekt exception.double=Navnet finnes allerede error.setaway=Dette punkt er ikke definert fr skjringen error.objecttracker.depends=Punktet er bundet til et andre objekt constructiondisplay.title=Konstruktsjnsbeskrivelse function.hide=Skjul function.hide.short=skjul function.rename=Navn function.rename.short=navn function.value=verdi function.value.short=verdi function.window=Vindu function.window.short=Vindu function.color=Farge function.color.short=Farge function.thickness=Bredde function.thickness.short=bredde function.type=Type function.type.short=type function.partial=delvis function.partial.short=delvis function.fill=Utfylt function.fill.short=fylt function.back=tilbake function.back.short=tilb function.away=Langtfra function.away.short=langt function.closeto=Nrme function.closeto.short=mot function.acute=Spiss function.acute.short=spiss function.obtuse=Stump function.obtuse.short=stump function.solid=ikke-transparent function.solid.short=fylt function restrict=utsnitt function restrict.short=utsnitt expression.value=verdi parameter=Parameter parameter.short=Param target=ml target.short=ml macro=Makro macro.short=makro away=langtfra away.short=fra end=Slutt end.short=slutt invisible=Usynlig invisible.short=usynlig showall=Synlig showall.short=synlig configure.title=Angi nettleser configure.prompt=Nettleserkommando background.error=Kunne ikke pne bildet (GIF eller JPG). menu.background=Bakgrunn menu.background.grab=Gjr konstruksjon til bakgrunn menu.background.clear=Slett bakgrunn menu.background.load=pne bakgrunnsbilde ... menu.background.tile=Side ved side menu.background.center=Sentrer menu.background.usesize=Tilpass vinduet iconhelp.grab=Sett eller Slett bakgrunn filedialog.backgroundload=pne bakgrunnsbilde filedialog.backgroundload.action=pne # New Resources in Version 2.14 menu.file.compress=Komprimer alltid menu.file.savesvg=Lagre grafikk (som SVG) ... # Version 2.15 loading=pner konstruksjon, vennligst vent... # Version 2.18 and 2.19 menu.settings.font.default=Normal menu.settings.font.bold=Fet menu.settings.font.large=Stor menu.file.saveeps=Lagre grafikk (som EPS) ... menu.fonts=Skrifttype # Version 2.20 bmpscaler.title=Skaler bitmap bmpscaler.width=Bredde bmpscaler.height=Hyde bmpscaler.scale=Faktor (trykk enter) bmpscaler.illegal=Verdi uten for grensene # Version 2.21 renamemacro.title=Endre navn til makro renamemacro.name=Nytt makronavn menu.special.renamemacro=Endre navn til makro ... # Version 2.23 savequestion.title=Lagre konstruksjon savequestion.qsave=Lagre endringer? # Version 2.25 exception.printsize=Konstruksjonen kan ikke vre p siden iconhelp.nohelp=Det er ikke hjelp til dette emne iconhelp.type?=Punkt-type iconhelp.thickness?=Bredde iconhelp.color?=Farge iconhelp.filled=Fargelagt objekt iconhelp.isback=Tegn som bakgrunn iconhelp.inverse=Speil vinkelen iconhelp.angle?=Strrelse # Version 2.31 menu.settings.indicate=Fremhev objekter fr valg menu.options.other=Andre innstillinger menu.help.welcome=Nytt i denne versjon iconhelp.twolines=Ikoner i to linjer iconhelp.qintersection=Spr om skjring skal konstrueres iconhelp.qchoice=Vis dialogen "Velg objekt" iconhelp.qpointon=Spr fr konstruksjon av punkt p objekt iconhelp.noindicate=Fremhev ikke objekter under markr # Version 2.33 menu.file.new=Ny konstruksjon (Ctrl-n) # Version 2.34 edit.text.title=Rediger tekst edit.text.settings=Tekstegenskaper menu.settings.filedialog=Bruk ikke systemets fil-dialog # Version 2.35 menu.settings.bitmapbackground=Bruk bakgrunnsfargen i bitmaps # Version 2.36 menu.file.savegraphics=Lagre grafikk som ... menu.file.savepng=Lagre grafikk (som PNG) bmpscaler.title=Skaler grafikk # Version 2.37 menu.file.savepdf=Lagre grafikk (som PDF)... iconhelp.chord=Vis som linjestykke # Version 2.39 message.setfixedangle.first=Sett vinkelen: Frste punkt? message.setfixedangle.second=Sett vinkelen: Vinkelspiss? message.setfixedangle.third=Sett vinkelen: Tredje punkt? edit.fixedangle.set=Angi strrelse... message.setfixedcircle.first=Angi sirklens radius: Frste punkt? message.setfixedcircle.second=Angi sirklens radius: andre punkt? edit.fixedcircle.set=Angi strrelse... # Version 2.40 minpointsize.title=Angi minste punktstrrelse minpointsize.prompt=Angi minste punktstrrelse (standard: 3) menu.settings.font.minpointsize=Minste punktstrrelse... # Version 2.41 name.short.Track=Tr text.track=Spor av % mens % beveges p % trackquestion.keep=Behold sporet i konstruksjonen? trackquestion.title=Behold sporet menu.options.track=Behold sporet (Shift-Enter) iconhelp.indicate=Vis konstruksjonsresultat fr klikk iconhelp.nohelp=Ingen hjelp til dette emne # Version 2.42 objects.draw=Tegn med musen menu.options.cleardraw=Slett tegningen (Esc) iconhelp.draw=Tegn med musen message.draw=Tegn med musen (Slett med ESC) shortcuts.draw=; # Version 2.43 message.move.select=Flytt: Velg et punkt (shift: vis utgangsposisjon) message.rename=Endre navn til A,B,C,...: Velg objekter iconhelp.rename=Endre navn til A,B,C,... objects.rename=Endre navn til A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Vis ikke vinkelbein # Version 2.45 menu.settings.smartboard=Smartboard-modus shortcuts.zoom=% objects.zoom=Zoom med musen message.zoom=Trekk senter eller zoom inn og ut # Version 2.46 menu.special.restricticons=Begrenset verktypanel # Version 2.47 menu.settings.indicate.simple=Fremhev kun punkter fr konstruksjon menu.settings.beginner=Begynnermodus question.again=Spr alltid # Version 2.49 definemacro.parameters=Spr etter parametre ("=Navn" for alltid bruke dette objektet) # Version 2.53 menu.actions.angles=Vinkler menu.actions.circles=Sirkler menu.actions.lines=Linjer menu.actions.points=Punkter # Version 3.00 info.title=Kontekst Hjelp info.related=Relaterte Emner info.notfound=Fant ikke noe om emnet! info.noresults=Fant ikke noe! info.searchresults=- Ske resultater - info.select=- Velg - info.search=Sk info.back=Tilbake info.start=Start iconhelp.info=Hjelp menu.help.info=Hjelp myfiledialog.homedir=CaR Filer myfiledialog.windowshome=Mine Dokumenter myfiledialog.mkdir=Lag Mappe myfiledialog.back=Tilbake menu.file.alwaysclearmacros=Nullstill Makroer fr Lasting about.language=Sprk bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Sikkerhetskopier # Version 3.02 menu.options.hideduplicates=Skjul Duplikater # Version 3.03 menu.options.function=Lag en Funksjon text.function=Funksjon ( % , % ) function.varmin=Fra function.varmax=Til function.dvar=Steg function.var=Variabel function.y=Uttrykk for Y iconhelp.function=Lag en Funksjon menu.options.editlast=Endre siste Objekt iconhelp.control.edit=Endre siste Objekt iconhelp.control.hide=skjul Duplikater edit.function.title=Funksjon eller Kurve iconhelp.control.runmacro=Kjr siste makro igjen # Version 3.05 point.type.cross=Kryss point.type.dcross=Diagonalt Kryss shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Enhet menu.special.break=Bruddpunkt menu.bp.setbreak=Sett bruddpunkt menu.bp.clearbreak=Nullstill bruddpunkt menu.bp.sethidingbreak=Sett Skjult bruddpunkt menu.bp.animatebreak=Animer bruddpunkt iconhelp.animatebreak=Animer bruddpunkt message.animatebreak=Animer bruddpunkt: klikk for stoppe (shift venstre/hyre for hastighet)! menu.special.exporttemplate=HTML Eksport med Templates templateload.open=pne Template templateload.open.action=pne menu.settings.doubleclick=Dobbelklikk for Makroer export.codebase=Kodebase # Version 3.12 edit.equation=Formel # Version 3.23 menu.settings.squarepoints=Tegn alltid punkter som kvadrater # Version 3.37 menu.options.export=Grafikk Eksport Innstillinger menu.settings.minwidth=Minimal linje bredde er 1 menu.settings.minpointsize=Respekter minimal point strrelse menu.settings.minfontsize=Respekter minimal font strrelse minfontsize.title=Sett Minimum Font Strrelse minfontsize.prompt=Minimal font strrelse (standard: 12) menu.options.minpointsize=Minimal Punkt Strrelse menu.options.minfontsize=Minimal Font Strrelse # Version 3.38 menu.settings.scalepdf=Skaler PDF og EPS 1:1 # Version 3.41 menu.file.clip=Klipp til Grafikk Output ... clip.title=Sett Klipping clip.width=Bredde clip.height=Hyde clip.screen=ingen Klipping # Version 3.42 menu.options.arrowsize=Pil-strrelse ... arrowsize.title=Pil-strrelse # Version 3.44 iconhelp.large=Bruk stor font strrelse iconhelp.bold=Bruk fet font menu.options.largefont=Stor Font Strrelse menu.options.boldfont=Fet Font warning.previewframe=Ramme strre enn vindu! message.move.select=Flytt: Velg et punkt (shift: flere punkter, ctrl: vis tidligere tilstand)! # Version 3.46 iconbar.showseparators=Vis Separatorer # Version 3.48 menu.sizes=Sett Strrelser menu.options.minlinesize=Minimal Linje Bredde ... minlinesize.title=Minimal Linje Bredde minlinesize.prompt=Minimal Linje Bredde (Standard 1) arrowsize.prompt=Sett Pil-strrelse (Standard: 10) menu.options.printscaler=Sett Eksport Strrelse ... menu.options.exportsettings=Eksport Innstillinger ... printscaler.title=Sett Eksport Strrelse printscaler.width=Bredde (i cm) printscaler.height=Hyde (i cm) printscaler.dpi=Resolution (i dpi, standard 300) printscaler.linewidth=Linje Bredde (i cm, standard 0.02) printscaler.pointsize=Punkt Strrelse (i cm, standard 0.07) printscaler.textsize=Tekst Strrelse (i cm, standard 0.3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=Bredde (i pixler) printscaler.h=Hyde (i pixler) printscaler.scale=Skaler (relativt til skjerm) printscaler.middle=Skjr ut (ingen reskalering) printscaler.sizes=Skaler linjer, fonter, og punkter menu.file.savepng=Lagre Grafikk som PNG warning.preview=Forhndsvisning vil ikke virke fullstendig med Java 1.1 iconedit.showseparators=Vis verktylinjedeler printscaler.aspect=Behold relativt strrelsesforhold printscaler.presets=Forhndsinstillinger printscaler.preset=Gjr et valg printscaler.preset.300dpi=Eksakt skalert med 300 DPI printscaler.preset.300dpi6=6 cm Bredde med 300 DPI printscaler.preset.300dpi16=16 cm Bredde med 300 DPI printscaler.preset.window=Vindu Strrelse printscaler.preset.clip50=Vindu Strrelse kuttet 50% message.saving=Vennligst vent! menu.options.printscalepreview=Forhnsdvis Eksport (Ctrl-F3) date=Build # Version 3.51 help=Hjelp # Version 3.61 editconditionals.title=Endre Betingelser editconditionals.hidden=Skjult editconditionals.superhidden=Fullstendig skjult editconditionals.visible=Normal editconditionals.showname=Vis Navn editconditionals.showvalue=Vis Verdi editconditionals.background=Bakgrunn editconditionals.solid=Fylt exception.superfluous=Overfldig Tekst i Uttrykk # Version 3.62 menu.options.selectionsize=Sett standard strrelse p valgt omrde selectionsize.title=Strrelse p valgt omrde selectionsize.prompt=Strrelse p valgt omrde (standard 1.5) # Version 3.63 select.comment.title=Makro Kommentar # Version 3.68 edit.area.area=Areal # Version 3.73 myfiledialog.oldfiles=Gamle Filer # Version 3.74 iconhelp.load=pne Konstruksjon (Ctrl-o) iconhelp.save=Lagre Konstruksjon (Ctrl-s) iconhelp.new=Ny Konstruksjon (Ctrl-n) # Version 3.81 warning.loadbackground=Feil ved lasting av bakgrunn # Version 3.9 function.x=Uttrykk for X (tom for funksjoner) # Version 3.91 constructiondisplay.select=Velg constructiondisplay.all=Alle Objekter constructiondisplay.visible=Synlige Objekter constructiondisplay.points=Punkter constructiondisplay.lines=Linjer constructiondisplay.circles=Sirkler constructiondisplay.angles=Vinkler constructiondisplay.other=Andre Objekter menu.file.copypng=Kopier til utklippstavle exception.clipboardcopy=Kopiering feilet! menu.options.finegrid=Kun akser # Version 3.93 edit.function.center=Sett Senter edit.function.free=Flyttbart Senter message.setcenter=Velg senterpunkt! # Version 3.94 message.edit=Endre: Objekt (shift: flere objekter, ctrl: betingelser)? # Version 3.95 edit.function.special=Kun punkter # Version 3.97 error.image=Feil ved innlasting av bilde! filedialog.imageload=Last inn Bilde filedialog.imageload.action=Last message.image=Bildepunkt prompt.image=bilde(,,,) objects.image=Bilde shortcuts.image=_ # Version 3.98 exception.depends=% avhenger av objektet. error.depends=% avhenger av objektet. constructiondisplay.sorted=Sortert ved generering # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Uttrykk # Version 4.00 iconhelp.image=Last inn bilde(_) message.image=Bilde anker punkt % message.image.last=Siste bilde anker punkt (eller bruk valgt punkt) # Version 4.01 name.FixedAngle=Fast vinkel # Version 4.04 menu.moresettings=Settings menu.settings.language=Velg sprk language.title=Velg sprk language.prompt=Sprk ved neste programstart # Version 4.05 constructiondisplay.invalid=Ugyldig Objekt # Version 4.08 menu.settings.constructiondisplay=Vis Konstruksjon kontinuerlig (F11) # Version 4.09 constructiondisplay.editconditions=Endre betingelser constructiondisplay.delete=Slett valgte objekter constructiondisplay.hide=Skjul / Vis constructiondisplay.superhide=Skjul helt # Version 4.2 edit.expression.slider=Vis som glider menu.grid.options=Rutenett innstillinger menu.options.leftsnap=Snap with Left Button Drag menu.settings.boundingbox=Lag Bounding Box (bb) fil # Version 4.3 latexsettings.title=Oppsett av LaTeX eksport latexsettings.boundingbox=Lag Bounding box bb-fil latexsettings.latexinput=Lag LaTeX idx-fil latexsettings.doubledollar=LaTeX utfres $$...$$ latexsettings.dollar=LaTeX utfres $...$ latexsettings.nodollar=LaTeX utfrer alle strenger latexsettings.fullpath=Bruk filsti printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=12 cm bredde med 300 DPI printscaler.latex=Lagre for LaTeX menu.background.usewidth=Tilpass kun hyden # Version 4.4 menu.options.restricted=Begrens skjringer menu.options.sizes=Bestem strrelser ... sizesdialog.title=Strrelser minlinesize.prompt=Minimal linje bredde (standard: 1) minpointsize.prompt=Minimal punkt strrelse (standard: 3) minfontsize.prompt=Minimal font strrelse (standard: 12) arrowsize.prompt=Pil strrelse (standard: 10) selectionsize.prompt=Utvalg strrelse (standard: 1.5) warning.loadmacros=Error under lasting av makro! warning.macrodefinition=% er brukt, men er ikke i makro! edit.circle.bounds=Vis som bue edit.circle.range=Bestem buestrrelse # Version 4.5 edit.track.dmin=Minimale skritt (standard: 0.001) # Version 4.6 menu.settings.smallicons=Bruk sm ikoner menu.settings.oldicons=Bruk gamle ikoner # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof=Spor av % nr % endres # Version 5 # Fix error.image edit.discrete=Diskrete error.fixedsegment=Kan ikke fikse dette segmentet!./src/rene/zirkel/docs/ZirkelProperties_pl.properties0000770000175000017500000007634010655647770022102 0ustar yvesyveslanguage=pl_ version=Wersja homefile=index.html homepage=http://mathsrv.ku-eichstaett.de/MGF/homes/grothmann/java/zirkel/doc_en/ about.title=O programie C.a.R. about.name=Szkolna geometria about.programmed=Zaprogramowa\u0142 title=Szkolna geometria close=Zamknij ok=OK cancel=Anuluj done=Wykonano pomy\u015blnie! message=Wiadomo\u015b\u0107 warning=Ostrze\u017cenie yes=Tak no=Nie true=true false=false warning.nojob=To nie jest zadanie! warning.print=Drukowanie nie powiod\u0142o si\u0119! warning.reset=Opcja b\u0119dzie aktywna po ponownym uruchomieniu programu! question.title=Pytanie question.intersection=Czy utworzy\u0107 tutaj punkt przeci\u0119cia? question.pointon=Czy utworzy\u0107 punkt na tym obiekcie? colors.black=Czarny colors.blue=Niebieski colors.green=Zielony colors.brown=Br\u0105zowy colors.cyan=Turkusowy colors.red=Czerwony objects.point=Punkt objects.segment=Odcinek objects.line=Prosta objects.ray=P\u00f3\u0142prosta objects.circle=Okr\u0105g objects.intersection=Punkt przeci\u0119cia objects.move=Przesu\u0144 punkt objects.hide=Ukryj obiekt objects.edit=Edytuj punkt objects.tracker=\u015alad punktu lub prostej objects.objecttracker=Automatyczny \u015blad punktu lub prostej objects.parallel=Prosta r\u00f3wnoleg\u0142a objects.plumb=Prosta prostopad\u0142a objects.circle3=Okr\u0105g dany przez odcinek d\u0142ugo\u015bci promienia i \u015brodek objects.midpoint=\u015arodek odcinka objects.quadric=Sto\u017ckowa objects.angle=K\u0105t objects.boundedpoint=Punkt na obiekcie objects.parameter=Ustaw parametry makroprogramu objects.targets=Ustaw cele makroprogramu objects.definejob=Zdefinuj zadanie objects.runmacro=Uruchom makroprogram objects.delete=Usu\u0144 obiekty i im potomne objects.reorder=Przesu\u0144 obiekty w t\u0142o objects.animate=Animacja punktu objects.expression=Wyra\u017cenie arytmetyczne objects.area=Wielok\u0105t objects.text=Tekst objects.fixedcircle=Okr\u0105g o sta\u0142ym promieniu objects.fixedangle=K\u0105t o sta\u0142ej mierze objects.fixedsegment=Odcinek o sta\u0142ej d\u0142ugo\u015bci iconhelp.point=Punkt iconhelp.segment=Odcinek iconhelp.line=Prosta iconhelp.ray=P\u00f3\u0142prosta iconhelp.circle=Okr\u0105g iconhelp.intersection=Punkt przeci\u0119cia iconhelp.move=Przesu\u0144 punkt iconhelp.hide=Ukryj obiekt iconhelp.edit=Edytuj obiekt iconhelp.tracker=\u015alad punktu lub prostej iconhelp.objecttracker=Automatyczny \u015blad punktu lub prostej iconhelp.parallel=Prosta r\u00f3wnoleg\u0142a iconhelp.plumb=Prosta prostopad\u0142a iconhelp.circle3=Okr\u0105g dany przez odcinek d\u0142ugo\u015bci promienia i \u015brodek iconhelp.midpoint=\u015arodek odcinka iconhelp.quadric=Sto\u017ckowa iconhelp.angle=K\u0105t iconhelp.boundedpoint=Punkt na obiekcie iconhelp.hidden=Prze\u0142\u0105cz wy\u015bwietlanie ukrytych obiekt\u00f3w iconhelp.color=Domy\u015blny kolor obiektu iconhelp.type=Domy\u015blny typ punktu iconhelp.type0=Domy\u015blny typ punktu iconhelp.thickness=Domy\u015blna grubo\u015b\u0107 obiektu iconhelp.back=Usu\u0144 ostatni obiekt iconhelp.thickness0=Domy\u015blna grubo\u015b\u0107 obiektu iconhelp.partial=Cz\u0119\u015bciowo widoczne okr\u0119gi iconhelp.plines=Cz\u0119\u015bciowo widoczne proste iconhelp.arrow=Odcinki jako wektory iconhelp.showcolor=Poka\u017c wybrane kolory iconhelp.runmacro=Uruchom makroprogram iconhelp.macro=Parametry/cele/definicja makroprogramu iconhelp.expression=Wyra\u017cenie arytmetyczne iconhelp.showvalue=Poka\u017c warto\u015bci obiekt\u00f3w iconhelp.showname=Poka\u017c nazwy obiekt\u00f3w iconhelp.obtuse=U\u017cyj k\u0105t\u00f3w wi\u0119kszych ni\u017c 180 iconhelp.solid=Nie u\u017cywaj przezroczysto\u015bci iconhelp.longnames=D\u0142ugie nazwy obiekt\u00f3w iconhelp.grid=Poka\u017c siatk\u0119 iconhelp.comment=Poka\u017c komentarz do konstrukcji iconhelp.defaults=Domy\u015blne ustawienia iconhelp.macro0=Parametry/cele/definicja makroprogramu iconhelp.visual=Konstrukcja wizualna iconhelp.replay=Przeprowad\u017a ponownie konstrukcj\u0119 iconhelp.oneforward=Krok naprz\u00f3d iconhelp.fastforward=Szybko do przodu iconhelp.allforward=Do ko\u0144ca iconhelp.oneback=Krok wstecz iconhelp.fastback=Szybko do ty\u0142u iconhelp.allback=Do pocz\u0105tku iconhelp.close=Zamknij iconhelp.area=Wielok\u0105t iconhelp.text=Tekst iconhelp.fixedcircle=Okr\u0105g o sta\u0142ym promieniu iconhelp.fixedangle=K\u0105t o sta\u0142ej mierze iconhelp.fixedsegment=Odcinek o sta\u0142ej d\u0142ugo\u015bci iconhelp.animate=Animacja punktu iconhelp.delete=Usu\u0144 obiekt i jemu potomne iconhelp.undo=Cofnij ostatnie usuni\u0119cie iconhelp.nextbreak=Id\u017a do nast\u0119pnego wstrzymania iconhelp.setbreak=Prze\u0142\u0105cz wstrzymanie menu.file=Plik menu.file.clearmacros=Wyczy\u015b\u0107 makroprogramy menu.file.load=Otw\u00f3rz konstrukcj\u0119... (Ctrl-o) menu.file.loadjob=Otw\u00f3rz zadanie... (Ctrl-j) menu.file.savejob=Zapisz jako zadanie... (Ctrl-k) menu.file.save=Zapisz konstrukcj\u0119 (Ctrl-s) menu.file.saveas=Zapisz konstrukcj\u0119 jako... (Ctrl-a) menu.file.includemacros=Do\u0142\u0105cz makroprogramy do konstrukcji menu.file.exit=Zako\u0144cz (Alt-F4) menu.file.print=Drukuj... menu.file.print.isoscale=Skaluj 1:1 w centymetrach menu.file.savebmp=Zapisz grafik\u0119 jako BMP... menu.file.savefig=Zapisz grafik\u0119 jako FIG... menu.file.loadrun=Otw\u00f3rz konstrukcj\u0119 opisow\u0105... (Ctrl-r) menu.file.editrun=Edytuj konstrukcj\u0119 opisow\u0105... (Ctrl-x) menu.actions=Akcje menu.actions.elementary=Podstawowe narz\u0119dzia menu.actions.complex=Bardziej z\u0142o\u017cone narz\u0119dzia menu.actions.fixed=Obiekty o sta\u0142ym parametrze menu.actions.move=Narz\u0119dzia przesuwaj\u0105ce menu.actions.decorative=Obiekty ozdobne menu.options=Opcje menu.options.visual=Tryb wizualny (Ctrl-F6) menu.options.hidden=Poka\u017c ukryte obiekty (F9) menu.options.comment=Komentarz do konstrukcji... (F10) menu.options.constructiondisplay=Opis konstrukcji... (F11) menu.options.grid=Poka\u017c siatk\u0119 (F12) menu.options.setgrid=Ustaw g\u0119sto\u015b\u0107 siatki... menu.options.showcolor=Poka\u017c kolor menu.options.defaultcolor=Domy\u015blny kolor menu.options.defaultthickness=Domy\u015blna grubo\u015b\u0107 menu.options.defaulttype=Domy\u015blny typ punktu menu.options.all=Wszystkie menu.options.setdigits=Ustaw precyzj\u0119 dziesi\u0119tn\u0105... menu.options.shownames=Poka\u017c nazwy obiekt\u00f3w (Ctrl-F6) menu.options.longnames=D\u0142ugie nazwy obiekt\u00f3w (Ctrl-F8) menu.options.obtuse=U\u017cyj k\u0105t\u00f3w wi\u0119kszych ni\u017c 180 (Ctrl-F12) menu.options.solid=Nie u\u017cywaj przezroczysto\u015bci menu.options.showvalues=Poka\u017c warto\u015bci obiekt\u00f3w (Ctrl-F7) menu.options.partial=Cz\u0119\u015bciowo widoczne okr\u0119gi (Ctrl-F9) menu.options.plines=Cz\u0119\u015bciowo widoczne proste (Ctrl-F10) menu.options.arrow=Strza\u0142ki (Ctrl-F11) menu.options.editicons=Edytuj pasek narz\u0119dzi... menu.options.back=Usu\u0144 ostatni obiekt (<-) menu.options.undo=Cofnij ostatnie usuni\u0119cie (Ctrl-z) menu.zoom=Powi\u0119kszenie menu.zoom.in=Powi\u0119ksz (+) menu.zoom.out=Pomniejsz (-) menu.zoom.left=Przesu\u0144 w lewo (strza\u0142ka w lewo) menu.zoom.right=Przesu\u0144 w prawo (strza\u0142ka w prawo) menu.zoom.up=Przesu\u0144 w g\u00f3r\u0119 (strza\u0142ka w g\u00f3r\u0119) menu.zoom.down=Przesu\u0144 w d\u00f3\u0142 (strza\u0142ka w d\u00f3\u0142) menu.macros=Makroprogramy menu.special.definemacro=Zdefinuj makroprogram (Ctrl-F5) menu.special.runmacro=Uruchom makroprogram... (F5) menu.special.savemacros=Zapisz makroprogramy... menu.special.loadmacros=Otw\u00f3rz makroprogramy... menu.special.deletemacros=Usu\u0144 makroprogram... menu.special=Specjalne menu.special.testjob=Testuj zadanie (Ctrl-F1) menu.special.jobcomment=Tre\u015b\u0107 zadania... (F8) menu.special.export=Eksport do pliku HTML... (Ctrl-e) menu.special.replay=Przeprowad\u017a ponownie konstrukcj\u0119 menu.help=Pomoc menu.help.about=O programie C.a.R.... menu.help.browser=Przegl\u0105daj pomoc i przyk\u0142ady menu.help.text=Prosta pomoc menu.help.configure=Konfiguruj przegl\u0105dark\u0119... menu.help.help=Pomoc (F1) menu.help.macros=Makroprogramy menu.help.tools=Narz\u0119dzia menu.help.gui=Interfejs u\u017cytkownika menu.help.interactive=Konstrukcje opisowe menu.help.tips=Gar\u015b\u0107 wskaz\u00f3wek menu.settings=Ustawienia specjalne... menu.settings.fullicons=Dwa pe\u0142ne wiersze paska narz\u0119dzi menu.settings.utf=U\u017cyj kodowania UTF-8 (Unikod) menu.settings.autohide=Ukrywaj drugi punkt przeci\u0119cia menu.settings.iconbartop=Pasek narz\u0119dzi nad konstrukcj\u0105 menu.settings.showtips=Poka\u017c etykietki narz\u0119dzi menu.settings.simplegraphics=Zawsze u\u017cywaj prostej grafiki menu.settings.sure=Potwierdzaj porzucenie niezapisanej konstrukcji menu.settings.pointon=Pytaj przed utworzeniem punktu na obiekcie menu.settings.intersection=Pytaj przed utworzeniem punktu przeci\u0119cia menu.settings.choice=Poka\u017c okno wyboru dla obiekt\u00f3w menu.settings.movename=Poka\u017c warto\u015bci obiekt\u00f3w podczas ich przesuwania menu.settings.movefixname=Sta\u0142e warto\u015bci obiekt\u00f3w podczas ich przesuwania menu.settings.restricted=Tryb szkolny menu.colors=Ustaw kolory colors.default=U\u017cyj domy\u015blnych colors.color0=Kolor 1 (Czarny)... colors.color1=Kolor 2 (Zielony)... colors.color2=Kolor 3 (Niebieski)... colors.color3=Kolor 4 (Br\u0105zowy)... colors.color4=Kolor 5 (Turkusowy)... colors.color5=Kolor 6 (Czerwony)... colors.background=Kolor t\u0142a... colors.select=Wybierz... colors.target=Cel... myfiledialog.dir=Katalog myfiledialog.file=Plik myfiledialog.pattern=Maska filedialog.open=Otw\u00f3rz filedialog.saveas=Zapisz jako... filedialog.open.action=Otw\u00f3rz filedialog.saveas.action=Zapisz filedialog.htmlsave=Zapisz do pliku HTML filedialog.htmlsave.action=Zapisz save=Zapisz load=Otw\u00f3rz abort=Anuluj bound.release=Zwolnij punkt bound.bind=Na obiekcie bound.error=Obiekt nie zosta\u0142 znaleziony przed przeci\u0119ciem! constructiondisplay.edit=Edytuj obiekt constructiondisplay.copy=Kopiuj do Schowka edit.Title=W\u0142a\u015bciwo\u015bci edit.name=Nazwa edit.hidden=Ukryty edit.text=Opis edit.fixed=Ustalony edit.color=Kolor edit.ok=OK edit.cancel=Anuluj edit.showname=Poka\u017c nazw\u0119 edit.point.title=Edytuj punkt edit.point.type=Typ edit.point.x=X edit.point.y=Y edit.point.intersection=R\u00f3\u017cny od edit.point.showvalue=Poka\u017c wsp\u00f3\u0142rz\u0119dne edit.point.colortype=Grubo\u015b\u0107 edit.point.bound=Na obiekcie edit.point.away=Z dala od edit.point.close=Blisko edit.point.free=Swobodny edit.line.title=Edytuj prost\u0105, p\u00f3\u0142prost\u0105 lub odcinek edit.line.normal=Normalny edit.line.thick=Gruby edit.line.thin=Cienki edit.line.type=Typ edit.segment.length=D\u0142ugo\u015b\u0107 edit.segment.showvalue=Poka\u017c d\u0142ugo\u015b\u0107 edit.circle.title=Edytuj okr\u0105g edit.circle.length=Promie\u0144 edit.circle.partial=Cz\u0119\u015bciowe wy\u015bwietlanie edit.circle.range=Ustaw zakres kre\u015blenia edit.circle.killrange=Wyczy\u015b\u0107 zakres kre\u015blenia edit.plumb.restricted=Ograniczony edit.angle.title=Edytuj k\u0105t edit.angle.length=Rozmiar edit.angle.displaysize=Wy\u015bwietlany rozmiar edit.angle.normal=Normalny edit.angle.small=Ma\u0142y edit.angle.large=Du\u017cy edit.expression.title=Edytuj wyra\u017cenie arytmetyczne edit.expression=Wyra\u017cenie arytmetyczne edit.expression.prompt=Wyja\u015bnienie edit.area.title=Edytuj wielok\u0105t edit.area.back=W tle export.title=Eksport do pliku HTML export.pagetitle=Tytu\u0142 strony export.width=Szeroko\u015b\u0107 export.height=Wysoko\u015b\u0107 export.jar=Plik JAR export.comment=Zapisz komentarz do konstrukcji export.file=Plik konstrukcji export.job=Wy\u015bwietl jako zadanie export.color=Kolor export.backgroundcolor=U\u017cyj jako t\u0142o strony export.appletcolor=U\u017cyj jako t\u0142o appletu export.plain=Pozbawiony dodatk\u00f3w export.3D=Obramowanie export.breaks=Przeprowad\u017a ponownie z wstrzymaniami export.icons=Obramowanie i pasek narz\u0119dzi export.full=Obramowanie, pasek narz\u0119dzi i wiersz stanu export.nonvisual=Obramowanie, pasek narz\u0119dzi i wiersz polece\u0144 export.style=Styl appletu export.setcolor=Wybierz kolor export.savefirst=Plik nie zosta\u0142 zapisany! export.soltext=Rozwi\u0105zanie export.stylesheet=Plik kaskadowego arkusza styli (CSS) export.solution=Plik z rozwi\u0105zaniem export.jumpsol=Id\u017a do rozwi\u0105zania export.linksol=Odno\u015bnik do rozwi\u0105zania export.savesol=Zapisz plik z rozwi\u0105zaniem export.track=\u015alad punktu export.digits=Zapisz precyzj\u0119 dziesi\u0119tn\u0105 export.setsize=Pobierz rozmiar export.signature=Utworzony przy u\u017cyciu C.a.R. export.colors=Zapisz zdefiniowane kolory export.background=Zapisz zdefiniowane t\u0142o help.title=Pomoc help.error=Nie mo\u017cna otworzy\u0107 pliku pomocy! help.file=schoolgeometry.txt coloreditor.title=Edytuj kolor coloreditor.red=Czerwony coloreditor.green=Zielony coloreditor.blue=Niebieski coloreditor.color=Tw\u00f3j kolor comment.title=Komentarz do konstrukcji comment.set=Ustaw comment.cancel=Anuluj comment.close=Zamknij iconedit.title=Edytuj pasek narz\u0119dzi iconedit.twobars=Pasek narz\u0119dzi w dw\u00f3ch wierszach jobcomment.title=Zadanie select.title=Wyb\u00f3r select.ok=OK select.cancel=Anuluj select.comment=Poka\u017c komentarz do konstrukcji select.all=Wszystkie message.circle.midpoint=Okr\u0105g: \u015arodek? message.circle.radius=Okr\u0105g: Punkt na okr\u0119gu (Shift: ustal promie\u0144)? message.fixedcircle.midpoint=Okr\u0105g o sta\u0142ym promieniu: \u015arodek? message.fixedcircle.radius=Okr\u0105g o sta\u0142ym promieniu: Promie\u0144? message.edit=Edytuj: Obiekt? message.line.first=Prosta: Pierwszy punkt? message.line.second=Prosta: Drugi punkt? message.ray.first=P\u00f3\u0142prosta: Pierwszy punkt? message.ray.second=P\u00f3\u0142prosta: Drugi punkt? message.move.move=Przesu\u0144: Przesu\u0144 punkt! message.point=Punkt: Postaw punkt (Shift: ustal)! message.segment.first=Odcinek: Pierwszy punkt? message.segment.second=Odcinek: Drugi punkt (Shift: ustal d\u0142ugo\u015b\u0107)? message.fixedsegment.first=Odcinek o sta\u0142ej d\u0142ugo\u015bci: Pierwszy punkt? message.fixedsegment.second=Odcinek o sta\u0142ej d\u0142ugo\u015bci: Punkt wskazuj\u0105cy kierunek? message.intersection.first=Punkt przeci\u0119cia: Pierwszy obiekt lub punkt przeci\u0119cia? message.intersection.second=Punkt przeci\u0119cia: Drugi obiekt? message.hide=Poka\u017c/ukryj: Obiekt? message.tracker.select=\u015alad: Punkt lub prosta do \u015bledzenia? message.tracker.selectpoint=\u015alad: Punkt do przesuni\u0119cia (Shift: wi\u0119cej)? message.tracker.move=\u015alad: Przesu\u0144 punkt! message.objecttracker.select=Automatyczny \u015blad: Punkt do \u015bledzenia (Shift: wi\u0119cej)? message.objecttracker.object=Automatyczny \u015blad: Prosta lub odcinek? message.objecttracker.selectpoint=Automatyczny \u015blad: Punkt do przesuni\u0119cia? message.objecttracker.selectanypoint=Automatyczny \u015blad: Kolejny punkt do przesuni\u0119cia? message.objecttracker.move=Automatyczny \u015blad: Przesu\u0144 punkt! message.objecttracker.start=Automatyczny \u015blad: Rozpocznij animacj\u0119! message.parallel.first=Prosta r\u00f3wnoleg\u0142a: Prosta? message.parallel.second=Prosta r\u00f3wnoleg\u0142a: Punkt? message.plumb.first=Prosta prostopad\u0142a: Prosta? message.plumb.second=Prosta prostopad\u0142a: Punkt? message.circle3.first=Okr\u0105g: Pierwszy punkt wyznaczaj\u0105cy promie\u0144? message.circle3.second=Okr\u0105g: Drugi punkt wyznaczaj\u0105cy promie\u0144? message.circle3.midpoint=Okr\u0105g: \u015arodek? message.midpoint.first=\u015arodek odcinka: Pierwszy punkt? message.midpoint.second=\u015arodek odcinka: Drugi punkt? message.quadric=Sto\u017ckowa: Punkt nr message.angle.first=K\u0105t: Punkt pierwszego ramienia? message.angle.root=K\u0105t: Wierzcho\u0142ek? message.angle.second=K\u0105t: Punkt drugiego ramienia (Shift: ustal miar\u0119)? message.fixedangle.first=K\u0105t o sta\u0142ej mierze: Punkt pierwszego ramienia? message.fixedangle.root=K\u0105t o sta\u0142ej mierze: Wierzcho\u0142ek? message.fixedangle.second=K\u0105t o sta\u0142ej mierze: Miara? message.label.select=Przesu\u0144 etykiet\u0119: Etykieta? message.label.move=Przesu\u0144 etykiet\u0119: Przesu\u0144 etykiet\u0119! message.boundedpoint=Punkt na obiekcie: Okr\u0105g lub prosta (Shift: ustal)? message.parameters=Parametry makroprogramu: Obiekty b\u0119d\u0105ce parametrami? message.targets=Cele makroprogramu: Obiekty b\u0119d\u0105ce celami? message.savejob.first=Zdefinuj zadanie: Ostatni wy\u015bwietlany obiekt? message.savejob.second=Zdefinuj zadanie: Obiekt docelowy (Shift: nie sprawdzaj)? message.savejob.third=Zdefinuj zadanie: Dalsze obiekty do wy\u015bwietlenia? message.runmacro=Makroprogram %: %. (Wprowad\u017a %) % message.runmacro.return=(Spacja wybiera %) message.runmacro.fixes=(Shift ustala zaznaczenie) message.delete=Usu\u0144: Obiekt? message.reorder=Przesu\u0144 obiekty: Obiekt? message.expression=Wyra\u017cenie arytmetyczne: Okre\u015bl po\u0142o\u017cenie! message.area=Wielok\u0105t: Wierzcho\u0142ek? message.text=Tekst: Okre\u015bl po\u0142o\u017cenie! message.animator.point=Animacja: Punkt do animacji? message.animator.segment=Animacja: Okr\u0105g lub odcinek? message.animator.running=Animacja: W toku! message.range.first=Ustaw zakres kre\u015blenia: Punkt pocz\u0105tkowy? message.range.second=Ustaw zakres kre\u015blenia: Punkt ko\u0144cowy? message.setaway.away=Z dala od tego punktu! message.setaway.close=Blisko tego punktu! objectsedit.title=Edytuj w\u0142a\u015bciwo\u015bci point.type.square=Kwadrat point.type.diamond=Romb point.type.circle=Okr\u0105g point.type.dot=Kropka color.type.normal=Normalny color.type.thick=Gruby color.type.thin=Cienki text.point=Punkt na wsp\u00f3\u0142rz\u0119dnych %, % text.line=Prosta przechodz\u0105ca przez % i % text.segment=Odcinek \u0142\u0105cz\u0105cy punkty % i % text.segment.fixed=Odcinek \u0142\u0105cz\u0105cy punkty % i %, d\u0142ugo\u015bci % text.ray=P\u00f3\u0142prosta wychodz\u0105ca z % i przechodz\u0105ca przez % text.intersection=Punkt przeci\u0119cia % i % text.circle=Okr\u0105g o \u015brodku % przechodz\u0105cy przez % text.circle.fixed=Okr\u0105g o \u015brodku % przechodz\u0105cy przez % i promieniu % text.fixedcircle=Okr\u0105g o \u015brodku % i promieniu % text.circle3=Okr\u0105g o \u015brodku % i promieniu d\u0142ugo\u015bci odcinka % - % text.parallel=Prosta r\u00f3wnoleg\u0142a do % przechodz\u0105ca przez % text.midpoint=\u015arodek odcinka % - % text.quadric=Sto\u017ckowa opisana na % text.plumb=Prosta prostopad\u0142a do % przechodz\u0105ca przez % text.angle=K\u0105t % - % - % text.angle.fixed=K\u0105t % - % - % miary % text.boundedpoint=Punkt na % text.expression=Wyra\u017cenie arytmetyczne "%" na wsp\u00f3\u0142rz\u0119dnych %, % text.area=Wielok\u0105t text.fixedangle=K\u0105t od\u0142o\u017cony od % - % miary % name.Point=Punkt name.Intersection=Punkt przeci\u0119cia name.OtherIntersection=Punkt przeci\u0119cia name.Circle=Okr\u0105g name.Circle3=Okr\u0105g name.Segment=Odcinek name.Ray=P\u00f3\u0142prosta name.Line=Prosta name.TwoPointLine=Prosta zadana przez dwa punkty name.Parallel=Prosta r\u00f3wnoleg\u0142a name.Midpoint=\u015arodek odcinka name.Quadric=Sto\u017ckowa name.Plumb=Prosta prostopad\u0142a name.Angle=K\u0105t name.PointOn=Punkt na obiekcie name.Expression=Wyra\u017cenie arytmetyczne name.Polygon=Wielok\u0105t popup.hidden=Poka\u017c ukryte obiekty popup.replay=Przeprowad\u017a ponownie konstrukcj\u0119 popup.empty=--- Makroprogramy --- replay.title=Przeprowad\u017a ponownie reorder.title=Przesu\u0144 obiekty reorder.message=wstaw po reorder.notfound=Obiekt nie zosta\u0142 znaleziony! reorder.warning=Nie mo\u017cna tego uczyni\u0107! setgrid.title=G\u0119sto\u015b\u0107 siatki setgrid.prompt=Wprowad\u017a now\u0105 g\u0119sto\u015b\u0107 siatki setgrid.set=Ustaw definemacro.title=Zdefinuj makroprogram definemacro.name=Nazwa definemacro.comment=Komentarz do makroprogramu definemacro.noparams=Makroprogram wymaga parametru! definemacro.nomacro=Brak makroprogramu do uruchomienia! definemacro.targetsonly=Ukryj konstrukcj\u0119 definemacro.invisible=Ukryj ca\u0142kowicie definemacro.promptfor=\u017b\u0105daj podania warto\u015bci dla macro.replace.title=Zast\u0105pienie makroprogramu macro.replace=Zast\u0105p makroprogram: macro.replace.all=Wszystkie macro.usage=Z\u0142e u\u017cycie makroprogramu (zobacz wskaz\u00f3wki)! macro.prompt.title=\u017b\u0105danie parametru macro.prompt.prompt=Wprowad\u017a now\u0105 warto\u015b\u0107 parametru macro.prompt.illegal=Niedozwolona warto\u015b\u0107! digits.title=Ustaw precyzj\u0119 dziesi\u0119tn\u0105 digits.edit=Edytuj digits.lengths=Wy\u015bwietl digits.angles=K\u0105ty editrun.title=Edytuj konstrukcj\u0119 opisow\u0105 editrun.run=Zapisz i uruchom editrun.load=Inny opis konstrukcji sure.title=Czy jeste\u015b pewien? sure.macros=Usun\u0105\u0107 wszystkie makroprogramy? sure.delete=Porzuci\u0107 wykonane zmiany? close.title=Koniec close.prompt=Zako\u0144czy\u0107 prac\u0119 z C.a.R.? file.exists.title=Plik istnieje file.exists.overwrite=Plik istnieje! Nadpisa\u0107? exception.nparams=Niedozwolona liczba parametr\u00f3w! exception.notfound=Obiekt nie zosta\u0142 znaleziony, lub zosta\u0142 zdefiniowany po wyra\u017ceniu! exception.expression=Niedozwolone wyra\u017cenie! exception.canfix=Obiekt nie mo\u017ce by\u0107 ustalony! exception.fix=Niedozwolona warto\u015b\u0107! exception.novalue=Niedozwolona warto\u015b\u0107! exception.elementary=Niedozwolony element wyra\u017cenia! exception.bracket=Brak nawiasu zamykaj\u0105cego! exception.quotes=Brak cudzys\u0142owu zamykaj\u0105cego! exception.dot=Dwie kropki w liczbie! exception.nodigit=Nie znaleziono cyfry w liczbie! exception.function=Nieznana funkcja! exception.parameter=Niedozwolony parametr funkcji! exception.macro=Niedozwolony parametr makroprogramu! exception.name=Nazwa jest konieczna! exception.job=Niedozwolone parametry zadania! exception.track=Niedozwolone parametry \u015bladu! exception.animate=Niedozwolone parametry animacji! exception.boolean=Warto\u015b\u0107 logiczna musi by\u0107 r\u00f3wna true albo false! exception.value=Niedozwolona warto\u015b\u0107! exception.color=Niedozwolony kolor! exception.colortype=Niedozwolona grubo\u015b\u0107! exception.type=Niedozwolony typ obiektu! exception.macroparameter=Niedozwolony parametr makroprogramu! exception.macrotarget=Niedozwolony cel makroprogramu! exception.prompt=Niedozwolony \u017c\u0105dany obiekt! exception.prompt.parameter=\u017b\u0105dany obiekt nie mo\u017ce by\u0107 parametrem! exception.parameters=Niedozwolony parametr! exception.brackets=Niedozwolone nawiasy! exception.double=Nazwa by\u0142a ju\u017c u\u017cyta! error.setaway=Ten punkt nie zosta\u0142 zdefiniowany przed przeci\u0119ciem! error.objecttracker.depends=Ten punkt jest na innym obiekcie! constructiondisplay.title=Konstrukcja function.hide=Ukryj function.rename=Nazwa function.value=Warto\u015b\u0107 function.window=Okno function.color=Kolor function.thickness=Grubo\u015b\u0107 function.type=Typ function.partial=Cz\u0119\u015bciowo function.fill=Wype\u0142nienie function.back=Kolor t\u0142a function.acute=Wypuk\u0142y function.obtuse=Wkl\u0119s\u0142y function.solid=Nieprzezroczysty function restrict=Ogranicz expression.value=Warto\u015b\u0107 configure.title=Ustaw przegl\u0105dark\u0119 configure.prompt=Polecenie przegl\u0105darki # New Resources: background.error=Nie mo\u017cna otworzy\u0107 obrazka (obs\u0142ugiwane s\u0105 GIF i JPEG)! menu.background=Kolor t\u0142a menu.background.grab=Bie\u017c\u0105cy jako t\u0142o menu.background.clear=Wyczy\u015b\u0107 t\u0142o menu.background.load=Otw\u00f3rz obrazek t\u0142a... menu.background.usesize=Dopasuj rozmiarem do obrazka menu.background.tile=Wy\u015bwietl t\u0142o s\u0105siaduj\u0105co menu.background.center=Wycentruj t\u0142o iconhelp.grab=Ustaw lub wyczy\u015b\u0107 t\u0142o filedialog.backgroundload=Otw\u00f3rz t\u0142o filedialog.backgroundload.action=Otw\u00f3rz # New Resources in Version 2.14 menu.file.compress=Zawsze kompresuj zapisywane pliki menu.file.savesvg=Zapisz grafik\u0119 jako SVG... # Version 2.15 loading=\u0141adowanie, prosz\u0119 czeka\u0107! # Version 2.18 and 2.19 menu.settings.font.default=Domy\u015blna czcionka menu.settings.font.bold=Czcionka pogrubiona menu.settings.font.large=Czcionka powi\u0119kszona menu.file.saveeps=Zapisz grafik\u0119 jako EPS... menu.fonts=Czcionka # Version 2.20 bmpscaler.width=Szeroko\u015b\u0107 bmpscaler.height=Wysoko\u015b\u0107 bmpscaler.scale=Wsp\u00f3\u0142czynnik (naci\u015bnij Enter) bmpscaler.illegal=Niedozwolona warto\u015b\u0107! # Version 2.21 renamemacro.title=Zmie\u0144 nazw\u0119 makroprogramu renamemacro.name=Nowa nazwa makroprogramu menu.special.renamemacro=Zmie\u0144 nazw\u0119 makroprogramu... # Version 2.23 savequestion.title=Zapisz konstrukcj\u0119 savequestion.qsave=Zapisa\u0107 zmiany? # Version 2.25 exception.printsize=Strona za ma\u0142a dla tej konstrucji! iconhelp.type?=Typ punktu iconhelp.thickness?=Grubo\u015b\u0107 iconhelp.color?=Kolor iconhelp.filled=Wype\u0142niony obiekt iconhelp.isback=Rysuj w tle iconhelp.inverse=K\u0105t odbity iconhelp.angle?=Rozmiar # Version 2.28 message.objecttracker.stop=Automatyczny \u015blad: Zatrzymaj animacj\u0119 (Shift-strza\u0142ki w bok: zmie\u0144 szybko\u015b\u0107)! # Version 2.31 menu.settings.indicate=Pod\u015bwietlaj generowane obiekty menu.options.other=Ustawienia menu.help.welcome=Nowo\u015bci w bie\u017c\u0105cej wersji iconhelp.twolines=Pasek narz\u0119dzi w dw\u00f3ch wierszach iconhelp.qintersection=Pytaj przed utworzeniem punktu przeci\u0119cia iconhelp.qchoice=Poka\u017c okno wyboru obiektu iconhelp.qpointon=Pytaj przed utworzeniem punktu na obiekcie iconhelp.noindicate=Nie pod\u015bwietlaj obiekt\u00f3w wskazanych mysz\u0105 # Version 2.33 menu.file.new=Nowa konstrukcja (Ctrl-n) # Version 2.34 edit.text.title=Ustawienia tekstu edit.text.settings=Dalsze ustawienia menu.settings.filedialog=Zast\u0105p systemowe okna wyboru plik\u00f3w # Version 2.35 menu.settings.bitmapbackground=U\u017cyj koloru t\u0142a w mapach bitowych # Version 2.36 menu.file.savegraphics=Zapisz grafik\u0119 menu.file.savepng=Zapisz grafik\u0119 jako PNG... bmpscaler.title=Skaluj grafik\u0119 # Version 2.37 menu.file.savepdf=Zapisz grafik\u0119 jako PDF... iconhelp.chord=Poka\u017c jako odcinek ko\u0142owy # Version 2.39 message.setfixedangle.first=Ustaw miar\u0119: Punkt pierwszego ramienia? message.setfixedangle.second=Ustaw miar\u0119: Wierzcho\u0142ek? message.setfixedangle.third=Ustaw miar\u0119: Punkt drugiego ramienia? edit.fixedangle.set=Ustaw miar\u0119... message.setfixedcircle.first=Ustaw promie\u0144: Pierwszy punkt? message.setfixedcircle.second=Ustaw promie\u0144: Drugi punkt? edit.fixedcircle.set=Ustaw promie\u0144... # Version 2.40 minpointsize.title=Ustaw minimalny rozmiar punktu minpointsize.prompt=Minimalny rozmiar punktu (domy\u015blnie: 3) menu.settings.font.minpointsize=Minimalny rozmiar punktu... # Version 2.41 name.short.Track=Tr text.track=\u015alad % podczas gdy % przesuwa si\u0119 po % trackquestion.keep=Zachowa\u0107 \u015blad w konstrukcji? trackquestion.title=Zachowaj \u015blad menu.options.track=Zachowaj \u015blad (Shift-Enter) iconhelp.indicate=Podgl\u0105d rezultat\u00f3w konstrukcji iconhelp.nohelp=Pomoc nie jest dost\u0119pna! # Version 2.42 objects.draw=Rysuj mysz\u0105 menu.options.cleardraw=Wyczy\u015b\u0107 rysunek (Esc) iconhelp.draw=Rysuj mysz\u0105 message.draw=Rysuj mysz\u0105 (Esc: wyczy\u015b\u0107) shortcuts.draw=; # Version 2.43 message.move.select=Przesu\u0144: Punkt (Shift: poka\u017c stare po\u0142o\u017cenie)? message.rename=Nazwij kolejnymi literami alfabetu: Obiekt? iconhelp.rename=Nazwij kolejnymi literami alfabetu objects.rename=Nazwij kolejnymi literami alfabetu shortcuts.rename=: iconhelp.anglereduce=Nie pokazuj p\u00f3\u0142prostej wyznaczonej przez k\u0105t # Version 2.45 menu.settings.smartboard=Tryb bia\u0142ej tablicy shortcuts.zoom=% objects.zoom=Przesu\u0144, powi\u0119ksz lub pomniejsz mysz\u0105 message.zoom=Przesu\u0144 przeci\u0105gaj\u0105c \u015brodek, powi\u0119ksz lub pomniejsz przeci\u0105gaj\u0105c obrze\u017ce konstrukcji # Version 2.46 menu.special.restricticons=Ograniczony pasek narz\u0119dzi # Version 2.47 menu.settings.indicate.simple=Pokazuj przy podgl\u0105dzie tylko punkty menu.settings.beginner=Tryb dla pocz\u0105tkuj\u0105cych question.again=Zawsze zadawaj to pytanie # Version 2.49 definemacro.parameters=\u017b\u0105danie parametr\u00f3w (podanie "=nazwy" obiektu ustala go) # Version 2.53 menu.actions.angles=K\u0105ty menu.actions.circles=Okr\u0119gi menu.actions.lines=Proste, p\u00f3\u0142proste i odcinki menu.actions.points=Punkty # Version 3.00 info.title=Pomoc kontekstowa info.related=Tematy pokrewne info.notfound=Temat nie zost\u0105\u0142 znaleziony! info.noresults=Szukany tekst nie zosta\u0142 znaleziony! info.searchresults=- Wyniki wyszukiwania - info.select=- Wybierz - info.search=Szukaj info.back=Wstecz info.start=Start iconhelp.info=Pomoc kontekstowa menu.help.info=Pomoc kontekstowa myfiledialog.homedir=Katalog C.a.R. myfiledialog.windowshome=Moje dokumenty myfiledialog.mkdir=Utw\u00f3rz katalog myfiledialog.back=Wstecz menu.file.alwaysclearmacros=Wyczy\u015b\u0107 makroprogramy przy otwarciu konstrukcji about.language=J\u0119zyk bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Zapisuj z kopi\u0105 zapasow\u0105 # Version 3.02 menu.options.hideduplicates=Ukryj duplikaty # Version 3.03 menu.options.function=Wykres funkcji... text.function=Funkcja f(%)=% function.varmin=Od function.varmax=Do function.dvar=Krok function.var=Zmienna function.x=X function.y=Y iconhelp.function=Wykres funkcji menu.options.editlast=Edytuj ostatni obiekt... iconhelp.control.edit=Edytuj ostatni obiekt iconhelp.control.hide=Ukryj duplikaty edit.function.title=Wykres funkcji lub krzywa iconhelp.control.runmacro=Uruchom ponownie ostatni makroprogram # Version 3.05 point.type.cross=Krzy\u017cyk point.type.dcross=Uko\u015bny krzy\u017cyk shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Jednostka menu.special.break=Punkty przerwania menu.bp.setbreak=Ustaw punkt przerwania menu.bp.clearbreak=Usu\u0144 punkt przerwania menu.bp.sethidingbreak=Ustaw ukrywaj\u0105cy punkt przerwania menu.bp.animatebreak=Animuj punkty przerwania iconhelp.animatebreak=Animuj punkty przerwania message.animatebreak=Animuj punkty przerwania: Zatrzymaj animacj\u0119 (Shift-strza\u0142ki w bok: zmie\u0144 szybko\u015b\u0107)! menu.special.exporttemplate=Eksport do pliku HTML przy u\u017cyciu szablonu... templateload.open=Otw\u00f3rz szablon templateload.open.action=Otw\u00f3rz menu.settings.doubleclick=Podw\u00f3jne klikni\u0119cie wy\u015bwietla makroprogramy ./src/rene/zirkel/docs/ZirkelProperties_fr.properties0000770000175000017500000011626311355633353022063 0ustar yvesyveslanguage=fr_ version=Version homefile=index.html homepage=http://www.z-u-l.de/ about.title=\u00C0 propos de ce programme about.name=G\u00E9om\u00E9trie \u00E9l\u00E9mentaire about.programmed=programm\u00E9 par title=G\u00E9om\u00E9trie \u00E9l\u00E9mentaire close=Fermer ok=OK cancel=Annuler done=Bravo! message=Message yes=Oui no=Non abort=Annuler true=vrai false=faux warning.nojob=Ce n'est pas un exercice! warning.print=L'impression a \u00E9chou\u00E9 warning.reset=L'option prendra effet au prochain d\u00E9marrage question.title=Question question.intersection=Cr\u00E9er cette intersection? question.pointon=Cr\u00E9er un point sur cet objet? colors.black=Noir colors.blue=Bleu colors.green=Vert colors.brown=Brun colors.cyan=Cyan colors.red=Rouge objects.point=Point objects.segment=Segment objects.line=Droite objects.ray=Demi-droite objects.circle=Cercle objects.intersection=Intersection objects.move=D\u00E9placer le point objects.hide=Cacher un objet objects.edit=Modifier objects.tracker=Trace (point ou droite) objects.objecttracker=Trace (point ou droite sur un objet) objects.parallel=Parall\u00E8le objects.plumb=Perpendiculaire objects.circle3=Cercle d\u00E9fini par rayon et centre (compas) objects.midpoint=Milieu objects.quadric=Conique objects.angle=Angle objects.boundedpoint=Point sur un objet objects.parameter=Objets initiaux objects.targets=Objets finaux objects.definejob=D\u00E9finir un exercice objects.runmacro=Ex\u00E9cuter une macro objects.delete=Supprimer des objets et ceux qui en d\u00E9pendent objects.reorder=Mettre les objets en arri\u00E8re-plan objects.animate=Animation objects.expression=Expression arithm\u00E9tique objects.area=Polygone objects.text=Texte objects.fixedcircle=Cercle de rayon fixe objects.fixedangle=Angle de mesure fixe objects.fixedsegment=Segment de longueur fixe iconhelp.point=Point iconhelp.segment=Segment iconhelp.line=Droite iconhelp.ray=Demi-droite iconhelp.circle=Cercle iconhelp.intersection=Intersection iconhelp.move=D\u00E9placer un point+Ctrl (points): montrer anciennes constructions+Ctrl: d\u00E9placer objets fixes+Maj: d\u00E9placer plus qu'un objet iconhelp.hide=Cacher un objet+Maj: cacher compl\u00E8tement iconhelp.edit=Modifier un objet+Maj: modifier plus d'objets+Ctrl: modifier dernier objet iconhelp.tracker=Trace (point ou droite) (t) iconhelp.objecttracker=Trace automatique (point ou droite)+Strg: conserver trace (Maj-Enter) iconhelp.parallel=Parall\u00E8le iconhelp.plumb=Perpendiculaire iconhelp.circle3=Cercle d\u00E9fini par rayon et centre iconhelp.midpoint=Milieu iconhelp.quadric=Conique passant par 5 points iconhelp.angle=Angle iconhelp.boundedpoint=Point sur un objet+Maj: non fixe sur objet iconhelp.hidden=Afficher/Masquer les objets cach\u00E9s (F9) iconhelp.color=Couleur par d\u00E9faut (Ctrl-1,2,3,4) iconhelp.type=Prendre ce style de point par d\u00E9faut iconhelp.type0=Carr\u00E9 iconhelp.type1=Losange iconhelp.type2=Disque iconhelp.type3=Petit carr\u00E9 iconhelp.type4=Plus iconhelp.type5=Croix iconhelp.thickness=Prendre cette \u00E9paisseur par d\u00E9faut (Alt-5,6,7) iconhelp.thickness0=Trait r\u00E9gulier iconhelp.thickness1=Trait \u00E9pais iconhelp.thickness2=Trait pointill\u00E9 iconhelp.back=Supprimer le dernier objet cr\u00E9\u00E9 iconhelp.partial=Cr\u00E9er cercles incomplets+par d\u00E9faut (Ctrl-F9) iconhelp.plines=Cr\u00E9er droites incompl\u00E8tes+par d\u00E9faut (Ctrl-F10) iconhelp.arrow=Repr\u00E9senter les segments comme des vecteurs (Ctrl-F11) iconhelp.showcolor=Ne montrer que les couleurs choisies (Alt-1,2,3,4) iconhelp.runmacro=Ex\u00E9cuter une macro (9)+Ctrl: Lancer derni\u00E8re macro iconhelp.macro=Macro: Objets initiaux/Objets finaux/D\u00E9finition (7,8,Ctrl-5) iconhelp.expression=Cr\u00E9er une expression arithm\u00E9tique iconhelp.showvalue=Afficher les valeurs des objets (Ctrl-F7) iconhelp.showname=Afficher les noms des objets (Ctrl-F6) iconhelp.obtuse=Utiliser les angles sup\u00E9rieurs \u00E0 180\u00B0 (Ctrl-F12) iconhelp.solid=Ne pas utiliser la transparence iconhelp.longnames=Utiliser les noms longs (Ctrl-F8) iconhelp.grid=Afficher la grille (F12) iconhelp.comment=Afficher le commentaire (F10) iconhelp.defaults=Param\u00E8tres par d\u00E9faut iconhelp.macro0=Macro: objets initiaux/Objets finaux/D\u00E9finition iconhelp.visual=Mode visuel iconhelp.replay=Revoir la construction iconhelp.oneforward=Avance iconhelp.fastforward=Avance rapide iconhelp.allforward=Fin iconhelp.oneback=Retour iconhelp.fastback=Retour rapide iconhelp.allback=D\u00E9but iconhelp.close=Fermer iconhelp.area=Polygone iconhelp.text=Texte sur plusieurs lignes iconhelp.fixedcircle=Cercle de rayon fixe iconhelp.fixedangle=Angle de mesure fixe iconhelp.fixedsegment=Segment de longueur fixe iconhelp.animate=Animer un point iconhelp.delete=Supprimer un objet et ceux qui en d\u00E9pendent iconhelp.undo=Annuler les derni\u00E8res suppressions iconhelp.nextbreak=Aller au point d'arr\u00EAt suivant iconhelp.setbreak=Introduire/Supprimer un point d'arr\u00EAt iconhelp.zoom=Zoomer avec souris shortcuts.point=p shortcuts.segment=s shortcuts.line=l shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Supp shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.showcolor.4= shortcuts.showcolor.5= shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) menu.file=Fichier menu.file.clearmacros=Supprimer toutes les macros menu.file.load=Ouvrir une figure (Ctrl-O) menu.file.loadjob=Ouvrir un exercice (Ctrl-J) menu.file.savejob=Enregistrer en tant qu'exercice (Ctrl-K) menu.file.save=Enregistrer la figure (Ctrl-S) menu.file.saveas=Enregistrer la figure sous... (Ctrl-A) menu.file.includemacros=Inclure toutes les macros menu.file.exit=Quitter (Alt-F4) menu.file.print=Imprimer menu.file.print.isoscale=\u00C9chelle 1:1 menu.file.savebmp=Exporter la figure (BMP) menu.file.savefig=Exporter la figure (FIG) menu.file.loadrun=Ouvrir une construction (Ctrl-R) menu.file.editrun=\u00C9diter une construction (Ctrl-X) menu.actions=\u00C9dition menu.actions.elementary=Outils de base menu.actions.complex=Autres outils menu.actions.move=Outils de d\u00E9placement menu.actions.decorative=Objets d\u00E9coratifs menu.options=Options menu.options.visual=Mode visuel (Ctrl-F6) menu.options.hidden=Montrer les objets cach\u00E9s (F9) menu.options.comment=\u00C9diter le commentaire (F10) menu.options.constructiondisplay=Afficher l'historique menu.options.grid=Afficher la grille (F12) menu.options.setgrid=\u00C9diter la largeur de la grille menu.options.showcolor=Montrer la couleur : menu.options.defaultcolor=Couleur par d\u00E9faut menu.options.defaultthickness=Epaisseur par d\u00E9faut menu.options.defaulttype=Style de point par d\u00E9faut menu.options.all=Toutes menu.options.setdigits=Pr\u00E9cision de l'affichage menu.options.shownames=Afficher le nom des objets(Ctrl-F6) menu.options.longnames=Utiliser les noms d'objets longs (Ctrl-F8) menu.options.obtuse=Utiliser les angles sup\u00E9rieurs \u00E0 180\u00B0 (Ctrl-F12) menu.options.solid=Ne pas utiliser la transparence menu.options.showvalues=Afficher les valeurs des objets (Ctrl-F7) menu.options.partial=Cercles incomplets(Ctrl-F9) menu.options.plines=Droites incompl\u00E8tes (Ctrl-F10) menu.options.arrow=Repr\u00E9senter les segments comme des vecteurs (Ctrl-F11) menu.options.editicons=Personnaliser la barre d'outils menu.options.back=Supprimer le dernier objet cr\u00E9\u00E9 menu.options.undo=Annuler Supprimer (Ctrl-Z) menu.zoom=Zoom menu.zoom.in=+ (+) menu.zoom.out=- (-) menu.zoom.left=Vers la gauche (fl\u00E8che-gauche) menu.zoom.right=Vers la droite (fl\u00E8che-droite) menu.zoom.up=Vers le haut (fl\u00E8che-haut) menu.zoom.down=Vers le bas (fl\u00E8che-bas) menu.macros=Macros menu.special.definemacro=D\u00E9finir une macro (Ctrl-F5) menu.special.runmacro=Ex\u00E9cuter une macro (F5) menu.special.savemacros=Enregistrer des macros... menu.special.loadmacros=Charger des macros... menu.special.deletemacros=Supprimer des macros... menu.special=Sp\u00E9cial menu.special.testjob=Tester cet exercice (Ctrl-F1) menu.special.jobcomment=Texte de l'exercice (F8) menu.special.export=Cr\u00E9er un fichier HTML... (Ctrl-E) menu.special.replay=Rejouer la construction menu.help=Aide menu.help.about=\u00C0 propos de ce programme menu.help.browser=Explorer l'aide et les d\u00E9mos menu.help.text=Aide simple menu.help.configure=Configurer le navigateur menu.help.help=Aide (F1) menu.help.macros=\u00C0 propos des macros menu.help.tools=Les outils menu.help.gui=Interface utilisateur menu.help.interactive=Mode descriptif menu.help.tips=Astuces menu.settings=Pr\u00E9f\u00E9rences menu.settings.fullicons=Utiliser deux barres d'ic\u00F4nes menu.settings.utf=Utiliser le codage UTF-8 menu.settings.autohide=Cacher le deuxi\u00E8me point d'intersection menu.settings.iconbartop=Barre d'ic\u00F4nes au-dessus de la figure menu.settings.showtips=Afficher les bulles d'aide menu.settings.simplegraphics=Utiliser le graphisme simplifi\u00E9 menu.settings.sure=Demander confirmation avant ouverture et fermeture menu.settings.pointon=Demander avant de cr\u00E9er un point sur un objet menu.settings.intersection=Demander avant de cr\u00E9er une intersection menu.settings.choice=Afficher une bo\u00EEte de dialogue pour les objets menu.settings.movename=Afficher la valeur des objets lors du d\u00E9placement menu.settings.movefixname=Afficher les valeurs des objets fixes lors du d\u00E9placement menu.settings.restricted=Mode \u00E9l\u00E8ve menu.colors=\u00C9diter les couleurs colors.d\u00E9faut=Prendre les couleurs par d\u00E9faut colors.color0=Couleur 1 (noir) colors.color1=Couleur 2 (vert) colors.color2=Couleur 3 (bleu) colors.color3=Couleur 4 (brun) colors.color4=Couleur 5 (cyan) colors.color5=Couleur 6 (rouge) colors.background=Arri\u00E8re-plan colors.select=Objet s\u00E9lectionn\u00E9 colors.target=Cible myfiledialog.dir=R\u00E9pertoire myfiledialog.file=Fichier myfiledialog.pattern=Filtre filedialog.open=Ouvrir filedialog.saveas=Enregistrer sous... filedialog.open.action=Ouvrir filedialog.saveas.action=Enregistrer filedialog.htmlsave=Enregistrer HTML filedialog.htmlsave.action=Enregistrer HTML pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Enregistrer load=Ouvrir abort=Annuler bound.release=D\u00E9tacher le point bound.bind=Lier \u00E0 un objet bound.error=Objet non trouv\u00E9 avant l'intersection! constructiondisplay.edit=Modifier l'objet constructiondisplay.copy=Copier dans le presse-papier edit.Title=Propri\u00E9t\u00E9s edit.name=Nom edit.hidden=Cach\u00E9 edit.text=Texte edit.fixed=Fixe edit.color=Couleur edit.ok=OK edit.cancel=Annuler edit.showname=Afficher le nom edit.point.title=\u00C9diter: point edit.point.type=Type edit.point.x=X edit.point.y=Y edit.point.intersection=Diff\u00E9rent de edit.point.showvalue=Afficher les coordonn\u00E9es edit.point.colortype=\u00C9paisseur edit.point.bound=Li\u00E9 edit.point.away=Loin de edit.point.close=Pr\u00E8s de edit.point.free=Libre edit.line.title=\u00C9diter: droite, demi-droite, segment edit.line.normal=Normal edit.line.thick=\u00C9pais edit.line.thin=Pointill\u00E9 edit.line.invisible=Invisible edit.line.type=Type edit.segment.length=Longueur edit.segment.showvalue=Afficher la longueur edit.circle.title=\u00C9diter: cercle edit.circle.length=Rayon edit.circle.partial=Partiel edit.circle.range=Arc edit.circle.killrange=Annuler Arc edit.plumb.restricted=Restreindre (au segment ou \u00E0 la demi-droite) edit.angle.title=\u00C9diter: angle edit.angle.length=Mesure edit.angle.displaysize=Afficher la mesure edit.angle.normal=Normale edit.angle.small=Petite edit.angle.large=Grande edit.expression.title=\u00C9diter: expression edit.expression=Expression arithm\u00E9tique edit.expression.prompt=Explication edit.area.title=\u00C9diter: polygone edit.area.back=En arri\u00E8re-plan export.title=Exporter en HTML export.pagetitle=Titre de la page export.width=Largeur export.height=Hauteur export.jar=Fichier jar export.comment=Enregistrer le commentaire export.file=Fichier de construction export.job=Afficher comme exercice export.color=Couleur export.backgroundcolor=Utiliser comme arri\u00E8re-plan de la page export.appletcolor=Utiliser comme arri\u00E8re-plan de l'applet export.plain=Simple export.3D=Bordure export.breaks=Revoir la construction avec des points d'arr\u00EAt export.icons=Bordure et ic\u00F4nes export.full=Bordure, ic\u00F4nes et ligne d'\u00E9tat export.nonvisual=Bordure, ic\u00F4nes et ligne de commande export.style=Style de l'applet export.setcolor=Choisir la couleur export.savefirst=Le fichier n'est pas enregistr\u00E9! export.soltext=Solution export.stylesheet=Feuille de style CSS export.solution=Fichier de la solution export.jumpsol=Aller \u00E0 la solution export.linksol=Lier \u00E0 la solution export.savesol=Enregistrer le fichier solution export.track=Trace (point) export.digits=Enregistrer la pr\u00E9cision d'affichage export.setsize=Taille export.signature=Cr\u00E9\u00E9 avec C.a.R. par R. Grothmann export.colors=Enregistrer les couleurs export.background=Enregistrer l'arri\u00E8re-plan help.title=Aide help.error=Impossible d'ouvrir le fichier d'aide! help.file=fr_schoolgeometry.txt coloreditor.title=\u00C9diter les couleurs coloreditor.red=Rouge coloreditor.green=Vert coloreditor.blue=Bleu coloreditor.color=Votre couleur comment.title=Commentaire de la figure comment.set=OK comment.cancel=Annuler comment.close=Fermer iconedit.title=\u00C9diter la barre d'ic\u00F4nes iconedit.twobars=Barre d'ic\u00F4nes \u00E0 deux lignes jobcomment.title=Description de l'exercice select.title=S\u00E9lection select.ok=OK select.cancel=Annuler select.comment=Afficher le commentaire select.all=Toutes message.circle.midpoint=Cercle: centre? message.circle.radius=Cercle: point sur le cercle (Maj: rayon fix\u00E9)? message.fixedcircle.midpoint=Cercle de rayon fixe: centre? message.fixedcircle.radius=Cercle de rayon fixe: rayon? message.edit=Editer: objet? message.line.first=Droite: premier point? message.line.second=Droite: deuxi\u00E8me point? message.ray.first=Demi-droite: origine? message.ray.second=Demi-droite: deuxi\u00E8me point? message.move.select=D\u00E9placer: choisir un point message.move.move=D\u00E9placer: d\u00E9placer le point? message.point=Point: choisir un point (Maj: fixe) message.segment.first=Segment: premier point? message.segment.second=Segment: deuxi\u00E8me point (Maj: longueur fixe)? message.fixedsegment.first=Segment de longueur fixe: premier point? message.fixedsegment.second=Segment de longueur fixe: cliquer quelque part message.intersection.first=Intersection: premier objet ou intersection? message.intersection.second=Intersection: second objet? message.hide=Cacher/montrer: choisir un objet message.tracker.select=Trace: Point ou droite (Maj: choisir un autre objet)? message.tracker.selectpoint=Trace: point \u00E0 d\u00E9placer? message.tracker.move=Trace: d\u00E9placer le point message.objecttracker.select=Trace automatique: point ou droite (Maj: choisir un autre objet)? message.objecttracker.object=Trace automatique: sur quelle droite ou cercle? message.objecttracker.selectpoint=Trace automatique: point \u00E0 d\u00E9placer? message.objecttracker.selectanypoint=Trace automatique: autre point \u00E0 d\u00E9placer? message.objecttracker.move=Trace automatique: d\u00E9placer le point message.objecttracker.start=Trace automatique: d\u00E9marrer l'animation message.parallel.first=Parall\u00E8le: droite? message.parallel.second=Parall\u00E8le: point? message.plumb.first=Perpendiculaire: droite? message.plumb.second=Perpendiculaire: point? message.circle3.first=Cercle: rayon: premier point? message.circle3.second=Cercle: rayon: deuxi\u00E8me point? message.circle3.midpoint=Cercle: centre? message.midpoint.first=Milieu: premier point? message.midpoint.second=Milieu: deuxi\u00E8me point? message.quadric=Conique: point num\u00E9ro message.angle.first=Angle: premier point? message.angle.root=Angle: sommet? message.angle.second=Angle: dernier point (Maj: mesure fixe)? message.fixedangle.first=Angle de mesure fixe: premier point? message.fixedangle.root=Angle de mesure fixe: sommet? message.fixedangle.second=Angle de mesure fixe: cliquer quelque part message.label.select=D\u00E9placer un nom: choisir un nom message.label.move=D\u00E9placer un nom: d\u00E9placer le nom message.boundedpoint=Point sur un objet: cercle or droite (Maj: ne pas fixer)? message.parameters=Macro: objets initiaux? message.targets=Macro: objets finaux? message.savejob.first=D\u00E9finir un exercice: dernier objet de l'\u00E9nonc\u00E9? message.savejob.second=D\u00E9finir un exercice: objet cible (Maj: ne pas v\u00E9rifier)? message.savejob.third=D\u00E9finir un exercice: autres objets \u00E0 afficher? message.runmacro=Macro %: %. % - % message.runmacro.return=(la barre d'espace choisit %) message.runmacro.fixes=(Maj fixe la s\u00E9lection) message.delete=Supprimer: choisir un objet message.reorder=R\u00E9ordonner: choisir un objet message.expression=Expression arithm\u00E9tique: choisir un emplacement message.area=Polygone plein: sommet? message.text=Texte: choisir un emplacement message.animator.point=Animation: point \u00E0 animer? message.animator.segment=Animation: cercle ou segment? message.animator.running=Animation: en cours (cliquer pour arr\u00EAter) message.range.first=Arc: dessiner le cercle \u00E0 partir de... message.range.second=Arc: ... jusqu'\u00E0? message.setaway.away=Garder l'intersection loin de quel point? message.setaway.close=Garder l'intersection pr\u00E8s de quel point? objectsedit.title=\u00C9diter les propri\u00E9t\u00E9s point.type.square=carr\u00E9 point.type.diamond=losange point.type.circle=cercle point.type.dot=point color.type.normal=normal color.type.thick=\u00E9pais color.type.thin=pointill\u00E9 color.type.invisible=invisible text.point=Point \u00E0 %, % text.line=Droite passant par % et % text.segment=Segment de % \u00E0 % text.segment.fixed=Segment de % \u00E0 % de longueur % text.ray=Demi-droite d'origine % vers % text.intersection=Intersection entre % et % text.circle=Cercle de centre % passant par % text.circle.fixed=Cercle de centre % passant par % de rayon % text.fixedcircle=Cercle de centre % de rayon % text.circle3=Arc de cercle de centre % de rayon allant de % \u00E0 % text.parallel=Parall\u00E8le passant par % \u00E0 % text.midpoint=Milieu de % et % text.quadric=Conique passant par % text.plumb=Perpendiculaire passant par % \u00E0 % text.angle=Angle % - % - % text.angle.fixed=Angle % - % - % de mesure % text.boundedpoint=Point sur % text.expression=Expression "%" \u00E0 %, % text.area=Polygone text.fixedangle=Angle % - % de mesure % name.Point=Point name.Intersection=Intersection name.OtherIntersection=Intersection name.Circle=Cercle name.Circle3=Cercle name.Segment=Segment name.Ray=Demi-droite name.Line=Droite name.TwoPointLine=Droite par deux points name.Parallel=Parall\u00E8le name.Midpoint=Milieu name.Quadric=Quadrique name.Plumb=Perpendiculaire name.Angle=Angle name.PointOn=PointSur name.Expression=Expression name.Polygon=Polygone name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=par name.short.Midpoint=M name.short.Quadric=quad name.short.Plumb=perp name.short.Angle=a name.short.PointOn=po name.short.Expression=E name.short.Polygon=poly prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray=r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==quad(,,,,) prompt.parallel==par(,) prompt.plumb==perp(,) prompt.angle==a(,,) prompt.area=poly(,,) prompt.quadric=quadrique(,,,,) prompt.function=fonction(,,,,,) popup.hidden=Afficher les objets cach\u00E9s popup.replay=Revoir la construction popup.empty=--- Macros --- replay.title=Revoir reorder.title=R\u00E9ordonner les objets reorder.message=Ins\u00E9rer apr\u00E8s reorder.notfound=Objet non trouv\u00E9! reorder.warning=Impossible! setgrid.title=Largeur de la grille setgrid.prompt=Entrer la nouvelle largeur de la grille setgrid.set=OK definemacro.title=D\u00E9finir une macro definemacro.name=Nom definemacro.comment=Commentaire de la macro definemacro.noparams=Objets initiaux de la macro! definemacro.nomacro=Il n'y a pas de macro disponible! definemacro.targetsonly=Cacher la construction definemacro.invisible=Cacher compl\u00E8tement definemacro.promptfor=Demander la valeur de macro.replace.title=Renommer une macro macro.replace=Renommer la macro: macro.replace.all=Toutes macro.usage=Mauvais usage de la macro (voir les indications)! macro.prompt.title=Param\u00E8tres macro.prompt.prompt=Entrer une valeur pour le param\u00E8tre macro.prompt.illegal=Valeur ill\u00E9gale! digits.title=Pr\u00E9cision de l'affichage (nombre de chiffres) digits.edit=Modifier digits.lengths=Montrer digits.angles=Angles editrun.title=\u00C9diter une construction editrun.run=Enregistrer et ex\u00E9cuter editrun.load=Autre construction sure.title=\u00CAtes-vous s\u00FBr? sure.macros=Supprimer toutes les macros? sure.delete=Ne pas enregistrer les changements courants? close.title=Fin close.prompt=Voulez-vous vraiment quitter ce programme? file.exists.title=Le fichier existe d\u00E9j\u00E0 file.exists.overwrite=Le fichier existe d\u00E9j\u00E0! L'\u00E9craser? exception.nparams=Nombre ill\u00E9gal de param\u00E8tres! exception.notfound=Objet non trouv\u00E9, ou d\u00E9fini apr\u00E8s l'expression! exception.type=Type ill\u00E9gal d'objet! exception.expression=Expression non valide! exception.canfix=L'objet ne peut \u00EAtre fix\u00E9! exception.fix=Valeur non valide! exception.novalue=Valeur non valide! exception.elementary=\u00C9lement non valide dans l'expression! exception.bracket=Il manque une parenth\u00E8se fermante! exception.quotes=Il manque des guillemets! exception.dot=Deux points dans un nombre! exception.nodigit=Pas de chiffre dans ce nombre! exception.function=Fonction inconnue! exception.parameter=Param\u00E8tre ill\u00E9gal! exception.macro=Objet initial ill\u00E9gal! exception.name=Il faut un nom! exception.job=Param\u00E8tres ill\u00E9gaux! exception.track=Trace: param\u00E8tres ill\u00E9gaux! exception.animate=Animation: param\u00E8tres ill\u00E9gaux! exception.boolean=Une valeur bool\u00E9enne doit \u00EAtre vrai ou faux! exception.value=Valeur ill\u00E9gale! exception.color=Couleur ill\u00E9gale! exception.colortype=\u00C9paisseur ill\u00E9gale! exception.type=Type de point ill\u00E9gal! exception.macroparameter=Objet initial ill\u00E9gal! exception.macrotarget=Objet final ill\u00E9gal! exception.prompt=Requ\u00EAte d'objet ill\u00E9gale! exception.prompt.parameter=Requ\u00EAte ill\u00E9gale! exception.parameters=Param\u00E8tre ill\u00E9gal! exception.brackets=Erreur de parenth\u00E9sage! exception.double=Le nom n'est pas unique! error.setaway=Ce point n'est pas d\u00E9fini avant l'intersection! error.objecttracker.depends=Le point est li\u00E9 \u00E0 un autre objet! constructiondisplay.title=figure function.hide=Cacher function.hide.short=cacher function.rename=Nom function.rename.short=nom function.value=Valeur function.value.short=valeur function.window=Fen\u00EAtre function.window.short=fen\u00EAtre function.color=couleur function.color.short=couleur function.thickness=\u00C9paisseur function.thickness.short=th function.type=Type function.type.short=type function.partial=partiel function.partial.short=partiel function.fill=Remplir function.fill.short=remplir function.back=Revenir function.back.short=revenir function.acute=Aigu function.acute.short=aigu function.obtuse=Obtus function.obtuse.short=obtus function.solid=Solide function.solid.short=solide function restrict=Restreindre function restrict.short=restreindre expression.value=Valeur configure.title=Configurer le navigateur configure.prompt=Entrer la ligne de commande du navigateur # New Resources: background.error=Impossible d'ouvrir la figure (GIF ou JPG) menu.background=Arri\u00E8re-plan menu.background.grab=Enregistrer la figure actuelle comme arri\u00E8re-plan menu.background.clear=Effacer l'arri\u00E8re-plan menu.background.load=Ouvrir une image d'arri\u00E8re-plan... menu.background.usesize=Mettre \u00E0 l'\u00E9chelle menu.background.tile=Papier peint menu.background.centre=Centrer l'arri\u00E8re-plan iconhelp.grab=Enregistrer/effacer l'arri\u00E8re-plan filedialog.backgroundload=Charger une image d'arri\u00E8re-plan filedialog.backgroundload.action=Ouvrir # New Resources in Version 2.14 menu.file.compress=Toujours compresser menu.file.savesvg=Exporter la figure (SVG) # Version 2.15 loading=Chargement en cours, patientez... # Version 2.18 and 2.19 menu.settings.font.d\u00E9faut=Police par d\u00E9faut menu.settings.font.bold=Gras menu.settings.font.large=Grande menu.file.saveeps=Exporter la figure (EPS) menu.fonts=Police # Version 2.20 bmpscaler.title=Mettre \u00E0 l'\u00E9chelle (bitmap) bmpscaler.width=Largeur bmpscaler.height=Hauteur bmpscaler.scale=\u00C9chelle (presser la touche Retour) bmpscaler.illegal=Valeur ill\u00E9gale # Version 2.21 renamemacro.title=Renommer une macro renamemacro.name=Macro: nouveau nom menu.special.renamemacro=Renommer une macro # Version 2.23 savequestion.title=Enregistrer la figure savequestion.qsave=Enregistrer les changements? # Version 2.25 exception.printsize=La page est trop petite pour cette figure! iconhelp.nohelp=Pas d'aide disponible iconhelp.type?=Point type iconhelp.thickness?=\u00C9paisseur iconhelp.color?=Couleur iconhelp.filled=Objet plein iconhelp.isback=Dessiner en arri\u00E8re-plan iconhelp.inverse=Angle oppos\u00E9 iconhelp.angle?=Taille # Version 2.28 message.objecttracker.stop=Trace automatique: arr\u00EAter l'animation (Maj+gauche/droite pour r\u00E9gler la vitesse)! # Version 2.31 menu.settings.indicate=Aper\u00E7u des objets menu.options.other=Pr\u00E9f\u00E9rences menu.help.welcome=Information sur la version courante iconhelp.twolines=Ic\u00F4nes sur deux lignes iconhelp.qintersection=Demander avant de cr\u00E9er les intersections iconhelp.qchoice=Afficher une bo\u00EEte de dialogue pour la s\u00E9lection d'objets iconhelp.qpointon=Demander avant de cr\u00E9er un point sur un objet iconhelp.noindicate=Ne pas surligner les objets au passage de la souris # Version 2.33 menu.file.new=Nouvelle figure (Ctrl-N) # Version 2.34 edit.text.title=\u00C9diter le texte edit.text.settings=Configurer menu.settings.filedialog=Remplacer les bo\u00EEtes de dialogue syst\u00E8me # Version 2.35 menu.settings.bitmapbackground=Inclure l'image de fond dans les bitmaps # Version 2.36 menu.file.savegraphics=Exporter la figure ... menu.file.savepng=Exporter la figure (PNG) bmpscaler.title=\u00C9chelle # Version 2.37 menu.file.savepdf=Exporter la figure (PDF) iconhelp.chord=Repr\u00E9senter comme segment # Version 2.39 message.setfixedangle.first=Fixer la mesure: premier point? message.setfixedangle.second=Fixer la mesure: sommet? message.setfixedangle.third=Fixer la mesure: dernier point? edit.fixedangle.set=Fixer la mesure... message.setfixedcircle.first=Fixer le rayon: premier point? message.setfixedcircle.second=Fixer le rayon: deuxi\u00E8me point? edit.fixedcircle.set=Fixer le rayon... # Version 2.40 minpointsize.title=Fixer la taille minimale du point minpointsize.prompt=Taille minimale du point (d\u00E9faut: 3) menu.settings.font.minpointsize=Taille minimale du point # Version 2.41 name.short.Track=Tr text.track=Trace de % quand % se d\u00E9place sur % trackquestion.keep=Garder la trace dans la figure? trackquestion.title=Garder la trace menu.options.track=Garder la trace (Maj-Enter) iconhelp.indicate=Aper\u00E7u des r\u00E9sultats de la figure iconhelp.nohelp=Pas d'aide disponible! # Version 2.42 objects.draw=Dessiner avec la souris menu.options.cleardraw=Effacer le dessin (Esc) iconhelp.draw=Dessiner avec la souris message.draw=Dessiner avec la souris (Esc pour effacer) shortcuts.draw=; # Version 2.43 message.move.select=D\u00E9placer: choisir un point (Maj: montrer l'\u00E9tat ant\u00E9rieur) message.rename=Renommer (A,B,C,...): choisir les objets iconhelp.rename=Renommer (A,B,C,...) objects.rename=Renommer (A,B,C,...) shortcuts.rename=: iconhelp.anglereduce=Ne pas montrer le c\u00F4t\u00E9 de l'angle # Version 2.45 menu.settings.smartboard=Mode smartboard shortcuts.zoom=% objects.zoom=Zoomer avec la souris message.zoom=D\u00E9placer le centre, ou zoomer # Version 2.46 menu.special.restricticons=Barre d'ic\u00F4nes restreinte # Version 2.47 menu.settings.indicate.simple=Ne montrer que les points lors de la cr\u00E9ation menu.settings.beginner=Mode d\u00E9butant question.again=Toujours poser la question # Version 2.49 definemacro.parameters=Param\u00E8tres ("=nom": fixe la valeur du param\u00E8tre) # Version 2.53 menu.actions.angles=Angles menu.actions.circles=Cercles menu.actions.lines=Droites menu.actions.points=Points # Version 3.00 info.title=Aide contextuelle info.related=Sujets li\u00E9s info.notfound=Sujet non trouv\u00E9! info.noresults=Cha\u00EEne de caract\u00E8res non trouv\u00E9e! info.searchresults=- R\u00E9sultats de la recherche - info.select=- Selection - info.search=Rechercher info.back=Revenir info.start=Aller iconhelp.info=Aide contextuelle menu.help.info=Aide contextuelle myfiledialog.homedir=Fichier CaR myfiledialog.windowshome=Mes Documents myfiledialog.mkdir=Cr\u00E9er r\u00E9pertoire myfiledialog.back=Revenir menu.file.alwaysclearmacros=Effacer macros avant chargement about.language=Langage bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Sauvegardes # Version 3.02 menu.options.hideduplicates=Cacher doublons # Version 3.03 menu.options.function=Cr\u00E9er une fonction text.function=Fonction ( % , % ) function.varmin=De function.varmax=\u00C0 function.dvar=Pas function.var=Variable function.y=Expression pour Y iconhelp.function=Cr\u00E9er une fonction menu.options.editlast=Modifier dernier objet iconhelp.control.edit=Modifier dernier objet iconhelp.control.hide=Cacher doublons edit.function.title=Fonction ou Courbe iconhelp.control.runmacro=Relancer derni\u00E8re macro # Version 3.05 point.type.cross=Croix point.type.dcross=Croix diagonale shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Unit\u00E9 menu.special.break=Breakpoints menu.bp.setbreak=Ins\u00E9rer un breakpoint menu.bp.clearbreak=Effacer un breakpoint menu.bp.sethidingbreak=Configurer des breakpoints cach\u00E9s menu.bp.animatebreak=Animer des breakpoints iconhelp.animatebreak=Animer des breakpoints message.animatebreak=Animer des breakpoints: clicquer pour arr\u00EAter (Maj gauche/droit pour vitesse)! menu.special.exporttemplate=Exporter en HTML avec mod\u00E8les templateload.open=Charger mod\u00E8le templateload.open.action=Ouvrir mod\u00E8le menu.settings.doubleclick=Double clic pour macros export.codebase=Code de base # Version 3.12 edit.equation=\u00C9quation # Version 3.23 menu.settings.squarepoints=Toujours tracer points en carr\u00E9 # Version 3.37 menu.options.export=Param\u00E8tres d'export pour graphiques menu.settings.minwidth=Longueur minimale de la droite est 1 menu.settings.minpointsize=Respecter taille de point minimale menu.settings.minfontsize=Respecter taille de police minimale menu.options.minpointsize=Taille de point minimale menu.options.minfontsize=Taille de police minimale # Version 3.38 menu.settings.scalepdf=\u00C9chelle PDF et EPS en sortie : 1:1 # Version 3.41 menu.file.clip=Coupe pour sortie graphique... clip.title=Param\u00E9trer la coupe clip.width=Largeur clip.height=Hauteur clip.screen=Pas de coupe # Version 3.44 iconhelp.large=Grossir taille des caract\u00E8res iconhelp.bold=Mettre en caract\u00E8res gras menu.options.largefont=Mettre en caract\u00E8res grande taille menu.options.boldfont=Caract\u00E8res en gras warning.previewframe=Cadre plus grand que la fen\u00EAtre! message.move.select=D\u00E9placer: choisir un point+Maj: plus de points, +Ctrl: montrer anciens \u00E9tats # Version 3.46 iconbar.showseparators=Montrer s\u00E9parateurs # Version 3.48 menu.options.printscaler=Param\u00E9trer taille export... menu.options.exportsettings=Param\u00E8tres export sp\u00E9ciaux... printscaler.title=Param\u00E9trer taille export printscaler.width=Largeur (en cm) printscaler.height=Hauteur (en cm) printscaler.dpi=R\u00E9solution (en dpi, d\u00E9faut 300) printscaler.linewidth=\u00C9paisseur lignes (en cm, d\u00E9faut 0.02) printscaler.pointsize=Taille points (en cm, d\u00E9faut 0.07) printscaler.textsize=Taille texte (en cm, d\u00E9faut 0.3) # Version 3.49 printscaler.screen=300 dpi printscaler.w=Largeur (en pixel) printscaler.h=Hauteur (en pixel) printscaler.scale=\u00C9chelle (relative \u00E0 l'\u00E9cran) printscaler.middle=Cut out de l'\u00E9cran printscaler.sizes=Utiliser valeurs menu.file.savepng=Sauvegarder graphiques en PNG warning.preview=La pr\u00E9visualisation ne fonctionne pas bien avec Java 1.1. iconedit.showseparators=Montrer s\u00E9parateurs printscaler.aspect=Conserver les rapports printscaler.presets=Presets printscaler.preset=Choisir printscaler.preset.300dpi=\u00C9chelle exacte \u00E0 300 dpi printscaler.preset.300dpi6=Largeur de 6 cm avec 300 dpi printscaler.preset.300dpi16=Largeur de 16 cm avec 300 dpi printscaler.preset.window=Taille de la fen\u00EAtre printscaler.preset.clip50=Taille de la fen\u00EAtre coup\u00E9e de 50% message.saving=Pri\u00E8re d'attendre menu.options.printscalepreview=Pr\u00E9visualiser l'export (Ctrl-F3) date=Construire # Version 3.51 help=Aide # Version 3.61 editconditionals.title=Modifier les conditionnels editconditionals.hidden=Cach\u00E9 editconditionals.superhidden=Compl\u00E8tement cach\u00E9 editconditionals.visible=Normal editconditionals.showname=Montrer nom editconditionals.showvalue=Montrer valeur editconditionals.background=Arri\u00E8re-plan editconditionals.solid=Opaque exception.superfluous=Texte superflu dans l'expression # Version 3.63 select.comment.title=Commentaire de la macro # Version 3.68 edit.area.area=Aire # Version 3.73 myfiledialog.oldfiles=Anciens fichiers # Version 3.74 iconhelp.load=Ouvrir construction (Ctrl-O) iconhelp.save=Sauvegarder construction (Ctrl-S) iconhelp.new=Cr\u00E9er construction (Ctrl-N) # Version 3.81 warning.loadbackground=Erreur lors chargement arri\u00E8re-plan # Version 3.9 function.x=Expression pour X (vide pour fonctions) # Version 3.91 constructiondisplay.select=Selection constructiondisplay.all=Tous les objets constructiondisplay.visible=Objets visibles constructiondisplay.points=Points constructiondisplay.lines=Lignes constructiondisplay.circles=Cercles constructiondisplay.angles=Angles constructiondisplay.other=Autres objets menu.file.copypng=Copier dans presse-papier exception.clipboardcopy=Ne peut copier! menu.options.finegrid=Axes seulement # Vesion 3.93 edit.function.centre=S\u00E9lectionner le centre edit.function.free=Rel\u00E2cher le centre message.setcenter=S\u00E9lectionner le point central! # Vesion 3.94 message.edit=Modifier: Objet (Maj: plus d'objets, Ctrl: conditionnels)? # Version 3.97 error.image=Image n'est pas dans le m\u00EAme r\u00E9pertoire que la construction? filedialog.imageload=Charger image filedialog.imageload.action=Charger prompt.image=image(,,,) objects.image=Image shortcuts.image=_ # Version 3.98 exception.depends=Objet % depend de l'objet courant error.depends=Objet % depend de l'objet courant constructiondisplay.sorted=Tri par ordre de construction # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Expressions # Version 4.00 iconhelp.image=Charger image (_) message.image=Point d'ancrage de l'image % message.image.last=Point d'ancrage de la derni\u00E8re image (ou choisir un point) editconditionals.z=Valeur du Z-Buffer # Version 4.01 name.FixedAngle=Angle fix\u00E9 # Version 4.04 menu.moresettings=Pr\u00E9f\u00E9rences menu.settings.language=Choisir langue language.title=Choisir langue language.prompt=Langue au prochain d\u00E9marrage # Version 4.05 constructiondisplay.invalid=Objets invalides # Version 4.08 menu.settings.constructiondisplay=Afficher l'historique (F11) # Version 4.09 constructiondisplay.editconditions=Modifier les conditionnels constructiondisplay.delete=Effacer objets s\u00E9lectionn\u00E9s constructiondisplay.hide=Cacher ou montrer constructiondisplay.superhide=Super cacher # Version 4.2 edit.expression.slider=Montrer comme curseur menu.grid.options=Options grille menu.options.leftsnap=Coller en draguant avec le bouton gauche menu.settings.boundingbox=Cr\u00E9er fichier bb-file # Version 4.3 latexsettings.title=Param\u00E9trer l'export vers LaTeX latexsettings.boundingbox=Cr\u00E9er fichier bb-file pour bo\u00EEte ferm\u00E9e latexsettings.latexinput=Cr\u00E9er fichier LaTeX idx-file latexsettings.doubledollar=LaTeX ins\u00E8re $$...$$ latexsettings.dollar=LaTeX ins\u00E8re $...$ latexsettings.nodollar=LaTeX ins\u00E8re les autres cha\u00EEnes de caract\u00E8res latexsettings.fullpath=Utiliser chemin du fichier printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=Largeur de 12 cm avec 300 dpi printscaler.latex=Sauvegarder en LaTeX menu.background.usewidth=Ajuster hauteur seulement # Version 4.4 menu.options.restricted=Restreindre intersections menu.options.sizes=Param\u00E9trer tailles... sizesdialog.title=Tailles minlinesize.prompt=Longueur minimale de la droite (d\u00E9faut: 1) minpointsize.prompt=Taille point minimale (d\u00E9faut: 3) minfontsize.prompt=Taille police minimale (d\u00E9faut: 12) arrowsize.prompt=Taille fl\u00E8che (d\u00E9faut: 10) selectionsize.prompt=S\u00E9lectionner taille (d\u00E9faut: 1.5) warning.loadmacros=Erreur pendant chargement de la macro! warning.macrodefinition=% est utilis\u00E9, mais n'est pas dans la macro! edit.circle.bounds=Montrer comme arc edit.circle.range=Param\u00E9trer l'arc... # Version 4.5 edit.track.dmin=Pas minimal (d\u00E9faut: 0.001) # Version 4.6 menu.settings.smallicons=Utiliser petites ic\u00F4nes menu.settings.oldicons=Utiliser anciennes ic\u00F4nes # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof=Trace de % quand % de changement # Version 5 # Fix error.image edit.discrete=Discr\u00E8t error.fixedsegment=Ne peut r\u00E9parer ce segment! export.zoom=Zoom avec la souris export.popup=Afficher menu # Version 5.1 edit.intersection.alternate=Peut alterner export.restrictedmove=Restreindre mouvements # Version 5.3 # Fix message.boundedpoint message.bindpoint=Lier point \u00E0 l'objet (Maj: continu, Ctrl: dans l'objet) edit.point.inside=Dans l'objet edit.point.increment=Incr\u00E9ment de la grille (0=libre) edit.more=Plus... menu.settings.more=Afficher bouton pour formats conditionnels menu.file.loadexamples=Charger un exemple... constructiondisplay.description=Montrer la description constructiondisplay.size=Montrer les longueurs ou les coordonn\u00E9es constructiondisplay.formula=Montrer les formules./src/rene/zirkel/docs/ZirkelProperties_nl.properties0000770000175000017500000011012310655647770022064 0ustar yvesyveslanguage=nl_ version=Versie homefile=doc_en/index.html homepage=http://mathsrv.ku-eichstaett.de/MGF/homes/grothmann/java/zirkel/ codepage.help=Cp1252 about.title=Over dit programma about.name=Interactieve meetkunde about.programmed=Geprogrammeerd door title=Interactieve meetkunde close=Sluit ok=OK cancel=Annuleer done=Goed gedaan! message=Boodschap yes=Ja no=Nee abort=Stop true=waar false=vals warning.nojob=Dit is geen toekenning! warning.print=Afdrukken mislukt! warning.reset=Deze optie is pas van kracht als je P.e.L. herstart! question.title=Vraag question.intersection=Dit snijpunt aanmaken? question.pointon=Punt op dit voorwerp aanmaken? colors.black=Zwart colors.blue=Blauw colors.green=Groen colors.brown=Bruin colors.cyan=Cyaan colors.red=Rood objects.point=Punt objects.segment=Lijnstuk objects.line=Rechte objects.ray=Straal objects.circle=Cirkel objects.intersection=Intersectie objects.move=Beweeg punt objects.hide=Verberg voorwerp objects.edit=Wijzig punt objects.tracker=Volg punt of rechte objects.objecttracker=Volg punt of rechte op een voorwerp objects.parallel=Evenwijdige rechte objects.plumb=Loodlijn objects.circle3=Cirkel met straal r en middelpunt M objects.midpoint=Midden objects.quadric=Kegelsnede objects.angle=Hoek objects.boundedpoint=Punt op een voorwerp objects.parameter=Geef macroparameters objects.targets=Geef macrodoelen objects.definejob=Opgave definiren objects.runmacro=Macro uitvoeren objects.delete=Verwijder voorwerp en zijn kinderen objects.reorder=Voorwerpen naar achteren verplaatsen objects.animate=Animatie objects.expression=Wiskundige uitdrukking objects.area=Veelhoek objects.text=Tekst objects.fixedcircle=Cirkel met vaste straal objects.fixedangle=Vaste hoek objects.fixedsegment=Lijnstuk met vaste lengte iconhelp.point=Punt iconhelp.segment=Lijnstuk iconhelp.line=Rechte iconhelp.ray=Straal iconhelp.circle=Cirkel iconhelp.intersection=Intersectie iconhelp.move=Beweeg punt iconhelp.hide=Verberg voorwerp iconhelp.edit=Wijzig voorwerp iconhelp.tracker=Volg punt of rechte iconhelp.objecttracker=Volg punt of rechte automatisch iconhelp.parallel=Evenwijdige rechte iconhelp.plumb=Loodlijn iconhelp.circle3=Cirkel met straal r en middelpunt M iconhelp.midpoint=Midden iconhelp.quadric=Kegelsnede door 5 punten iconhelp.angle=Hoek iconhelp.boundedpoint=Punt op voorwerp iconhelp.hidden=Toon verborgen voorwerpen iconhelp.color=Kleur van het volgend voorwerp iconhelp.type=Type van het volgend punt iconhelp.type0=Type van het volgend punt iconhelp.thickness=Dikte van het volgende voorwerp iconhelp.back=Verwijder laatste voorwerp iconhelp.thickness0=Dikte van het volgend voorwerp iconhelp.partial=Gedeeltelijk zichtbare cirkel iconhelp.plines=Gedeeltelijk zichtbare rechte iconhelp.arrow=Lijnstukken als vectoren iconhelp.showcolor=Toon gekozen kleuren iconhelp.runmacro=Voer macro uit iconhelp.macro=Macro parameters/doelen/definitie iconhelp.expression=Wiskundige uitdrukking iconhelp.showvalue=Toon voorwerpwaarden iconhelp.showname=Toon voorwerpnamen iconhelp.obtuse=Gebruik hoeken groter dan 180 graden iconhelp.solid=Gebruik geen transparantie iconhelp.longnames=Lange voorwerpnamen iconhelp.grid=Toon raster iconhelp.comment=Commentaar iconhelp.defaults=Standaardwaarden iconhelp.macro0=Macro Parameters/doelen/definitie iconhelp.visual=Visuele constructie iconhelp.replay=Toon constructie iconhelp.oneforward=Voorwaarts iconhelp.fastforward=Snel voorwaarts iconhelp.allforward=Naar het einde iconhelp.oneback=Terug iconhelp.fastback=Snel terug iconhelp.allback=Naar het begin iconhelp.close=Sluiten iconhelp.area=Gevulde veelhoek iconhelp.text=Tekst die uit meer delen bestaat iconhelp.fixedcircle=Cirkel met een vaste straal iconhelp.fixedangle=Hoek met een vaste grootte iconhelp.fixedsegment=Lijnstuk met een vaste lengte iconhelp.animate=Animatie van een punt iconhelp.delete=Verwijder het voorwerp en zijn kinderen iconhelp.undo=Maak laatste verwijdering ongedaan iconhelp.nextbreak=Spring naar het volgende rustpunt iconhelp.setbreak=Rustpunt zetten of verwijderen iconhelp.zoom=Zoom met de muis (%) shortcuts.point=p shortcuts.segment=l shortcuts.line=r shortcuts.ray=s shortcuts.circle=c shortcuts.intersection=i shortcuts.move=b shortcuts.hide=v shortcuts.edit=w shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=h shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=a shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) menu.file=Bestand menu.file.new=Nieuwe constructie menu.file.clearmacros=Wis alle macro's menu.file.load=Laad constructie ... (Ctrl-o) menu.file.loadjob=Laad opgave ... (Ctrl-j) menu.file.savejob=Bewaar als opgave ... (Ctrl-k) menu.file.save=Bewaar constructie (Ctrl-s) menu.file.saveas=Bewaar constructie als ... (Ctrl-a) menu.file.includemacros=Bewaar met macro's menu.file.exit=Stop programma (Alt-F4) menu.file.print=Druk af ... menu.file.print.isoscale=Schaal 1:1 in cm menu.file.savebmp=BMP menu.file.savefig=FIG menu.file.loadrun=Laad beschrijvende constructie ... (Ctrl-r) menu.file.editrun=Wijzig beschrijvende constructie ... (Ctrl-x) menu.actions=Acties menu.actions.elementary=Elementaire werktuigen menu.actions.complex=Meer complexe werktuigen menu.actions.fixed=Vaste voorwerpen menu.actions.move=Werktuigen om iets te bewegen menu.actions.decorative=Decoratieve voorwerpen menu.options=Opties menu.options.visual=Visuele modus (Ctrl-F6) menu.options.hidden=Toon verborgen voorwerpen (F9) menu.options.comment=Commentaar (F10) menu.options.constructiondisplay=Beschrijving (F11) menu.options.grid=Toon raster (F12) menu.options.other=Andere instellingen menu.options.setgrid=Rasterbreedte instellen ... menu.options.showcolor=Toon kleur menu.options.defaultcolor=Standaardkleur menu.options.defaultthickness=Standaarddikte menu.options.defaulttype=Standaardpunttype menu.options.all=Alles menu.options.setdigits=Beduidende cijfers instellen menu.options.shownames=Toon voorwerpnamen (Ctrl-F6) menu.options.longnames=Lange voorwerpnamen (Ctrl-F8) menu.options.obtuse=Gebruik hoeken groter dan 180 graden (Ctrl-F12) menu.options.solid=Geen transparantie menu.options.showvalues=Toon voorwerpwaarden (Ctrl-F7) menu.options.partial=Gedeeltelijk zichtbare cirkels (Ctrl-F9) menu.options.plines=Gedeeltelijk zichtbare rechten (Ctrl-F10) menu.options.arrow=Lijnstukken als vectoren (Ctrl-F11) menu.options.editicons=Wijzig werktuigenlijst menu.options.back=Wis laatste voorwerp(<-) menu.options.undo=Maak wissen ongedaan (Ctrl-z) menu.zoom=Zoom menu.zoom.in=In (+) menu.zoom.out=Uit (-) menu.zoom.left=Links (Cursor-Left) menu.zoom.right=Rechts (Cursor-Right) menu.zoom.up=Naar boven (Cursor-Up) menu.zoom.down=Naar beneden (Cursor-Down) menu.macros=Macro's menu.special.definemacro=Definieer macro (Ctrl-F5) menu.special.runmacro=Voer macro uit ... (F5) menu.special.savemacros=Bewaar macro's ... menu.special.loadmacros=Laad macro's ... menu.special.deletemacros=Wis macro's ... menu.special=Speciaal menu.special.testjob=Opgave testen (Ctrl-F1) menu.special.jobcomment=Opgave ... (F8) menu.special.export=HTML Export ... (Ctrl-e) menu.special.replay=Toon constructie menu.help=Help menu.help.about=Over dit programma menu.help.browser=Bekijk help en demo's menu.help.text=Help (tekst) menu.help.configure=Configureer browser menu.help.help=Help (F1) menu.help.macros=Over macro's menu.help.tools=Constructiewerktuigen menu.help.gui=gebruikersinterface menu.help.interactive=Beschrijvende constructies menu.help.tips=Enkele Tips menu.settings=Andere instellingen menu.settings.fullicons=Twee volle werktuiglijsten menu.settings.utf=Gebruik UTF-8 codering menu.settings.autohide=Verberg tweede snijpunt menu.settings.iconbartop=Werktuigenlijst boven constructie menu.settings.showtips=Toon werktuigtips menu.settings.simplegraphics=Eenvoudige grafieken gebruiken menu.settings.sure=Vraag bevestiging voor laden en sluiten menu.settings.pointon=Vraag bevestiging voor een punt op een voorwerp menu.settings.intersection=Vraag bevestiging voor een snijpunt menu.settings.choice=Toon selectiedialoogvenster voor voorwerpen menu.settings.movename=Toon voorwerpwaarden tijdens beweging menu.settings.movefixname=Toon vaste voorwerpwaarden tijdens beweging menu.settings.restricted=Schoolmodus menu.colors=Stel kleuren in colors.default=Standaardkleuren colors.color0=Kleur 1 (Zwart) colors.color1=Kleur 2 (Groen) colors.color2=Kleur 3 (Blauw) colors.color3=Kleur 4 (Bruin) colors.color4=Kleur 5 (Cyaan) colors.color5=Kleur 6 (Rood) colors.background=Achtergrond colors.select=Selecteer colors.target=Doel myfiledialog.dir=Map myfiledialog.file=Bestand myfiledialog.pattern=Patroon filedialog.open=Open filedialog.saveas=Bewaar als ... filedialog.open.action=Open filedialog.saveas.action=Bewaar filedialog.htmlsave=Bewaar HTML filedialog.htmlsave.action=Bewaar pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Bewaar load=Laad abort=Annuleer bound.release=Maak los van voorwerp bound.bind=Maak vast aan voorwerp bound.error=Voorwerp niet gevonden voor snijding! constructiondisplay.edit=Wijzig voorwerp constructiondisplay.copy=Kopieer naar klembord edit.Title=Eigenschappen edit.name=Naam edit.hidden=Verborgen edit.text=Beschrijving edit.fixed=Vast edit.color=Kleur edit.ok=OK edit.cancel=Annuleer edit.showname=Toon naam edit.point.title=Wijzig punt edit.point.type=Type edit.point.x=X edit.point.y=Y edit.point.intersection=Verschillend van edit.point.showvalue=Toon co^rdinaten edit.point.colortype=Dikte edit.point.bound=Op voorwerp edit.point.away=Weg van edit.point.close=In de buurt van edit.point.free=Vrij edit.line.title=Wijzig rechte, straal, lijnstuk edit.line.normal=Normaal edit.line.thick=Dik edit.line.thin=Dun edit.line.type=Type edit.segment.length=Lengte edit.segment.showvalue=Toon Lengte edit.circle.title=Wijzig Cirkel edit.circle.length=Straal edit.circle.partial=Slechts gedeeltelijk zichtbaar edit.circle.range=Stel tekengrenzen in edit.circle.killrange=wis tekengrenzen edit.plumb.restricted=Verboden edit.angle.title=Wijzig hoek edit.angle.length=grootte edit.angle.displaysize=Toon grootte edit.angle.normal=Normaal edit.angle.small=Klein edit.angle.large=Groot edit.expression.title=Wijzig uitdrukking edit.expression=Wiskundige uitdrukking edit.expression.prompt=Beschrijving edit.area.title=Wijzig veelhoek edit.area.back=In de achtergrond export.title=HTML Export export.pagetitle=Paginatitel export.width=Breedte export.height=Hoogte export.jar=Jar bestand export.comment=Bewaar commentaar export.file=Constructiebestand export.job=Toon als opgave export.color=Kleur export.backgroundcolor=Gebruik als achtergrond export.appletcolor=Gebruik als appletachtergrond export.plain=Gewoon export.3D=Rand export.breaks=Weergave met rustpunten export.icons=Rand en iconen export.full=Rand, iconen en Status export.nonvisual=Rand, iconen en invoerlijn export.style=Appletstijl export.setcolor=Kies kleur export.savefirst=Bestand moet eerst bewaard worden! export.soltext=Oplossing export.stylesheet=CSS stijlbestand export.solution=Oplossingbestand export.jumpsol=Spring naar oplossing export.linksol=Link naar oplossing export.savesol=Bewaar oplossingbestand export.track=Volg punt export.digits=Bewaar aantal beduidende cijfers export.setsize=Geef grootte export.signature=Gemaakt met P.e.L. export.colors=Bewaar constructiekleuren export.background=Bewaar achtergrond help.title=Help help.error=Kan het help bestand niet vinden! help.file=schoolgeometry.txt coloreditor.title=Wijzig kleur coloreditor.red=Rood coloreditor.green=Groen coloreditor.blue=Blauw coloreditor.color=Uw kleur comment.title=Construction Commentaar comment.set=Instellen comment.cancel=Annuleer comment.close=Sluiten iconedit.title=Wijzig werktuiglijst iconedit.twobars=Werktuiglijst heeft twee rijen jobcomment.title=Opgave select.title=Selectie select.ok=OK select.cancel=Annuleer select.comment=Toon commentaar select.all=Alle message.circle.midpoint=Cirkel: Middelpunt? message.circle.radius=Cirkel: punt op de cirkel (shift: vaste straal)? message.fixedcircle.midpoint=Cirkel met vaste straal: middelpunt? message.fixedcircle.radius=Cirkel met vaste straal: straal? message.edit=Wijzig: voorwerp? message.line.first=Rechte: eerste punt? message.line.second=Rechte: tweede punt? message.ray.first=Straal: beginpunt? message.ray.second=Straal: tweede punt? message.move.select=Bewegen: kies een punt! message.move.move=Bewegen: beweeg het punt? message.point=Punt: plaats (shift: vast)! message.segment.first=Lijnstuk: eerste punt? message.segment.second=Lijnstuk: tweede punt (shift: vaste lengte)? message.fixedsegment.first=Lijnstuk met vaste lengte: eerste punt? message.fixedsegment.second=Lijnstuk met vaste lengte: klik ergens! message.intersection.first=Intersectie: eerste voorwerp of het snijpunt? message.intersection.second=Intersectie: tweede voorwerp? message.hide=Verbergen/Tonen: Kies een voorwerp! message.tracker.select=Volgen: punt of rechte om te volgen (shift: meer punten)? message.tracker.selectpoint=Volgen: punt om te bewegen ? message.tracker.move=Volgen: Beweeg het punt! message.objecttracker.select=Automatisch volgen: punt om te volgen (shift: meer punten)? message.objecttracker.object=Automatisch volgen: rechte of cirkel? message.objecttracker.selectpoint=Automatisch volgen: punt dat bewogen wordt? message.objecttracker.selectanypoint=Automatisch volgen: andere punten om te bewegen? message.objecttracker.move=Automatisch volgen: beweeg het punt! message.objecttracker.start=Automatisch volgen: start de animatie! message.objecttracker.stop=Automatisch volgen: stop de animatie! message.parallel.first=Evenwijdige: rechte? message.parallel.second=Evenwijdige: punt? message.plumb.first=Loodlijn: rechte? message.plumb.second=Loodlijn: punt? message.circle3.first=Cirkel: beginpunt straal? message.circle3.second=Cirkel: eindpunt straal? message.circle3.midpoint=Cirkel: middelpunt? message.midpoint.first=Midden: eerste punt? message.midpoint.second=Midden: tweede punt? message.quadric=Kegelsnede: punt nummer message.angle.first=Hoek: beginpunt? message.angle.root=Hoek: hoekpunt? message.angle.second=Hoek: eindpunt (shift: vaste grootte)? message.fixedangle.first=Hoek met vaste grootte: beginpunt? message.fixedangle.root=Hoek met vaste grootte: basispunt? message.fixedangle.second=Hoek met vaste grootte: hoek? message.label.select=Beweeg tekst: tekst? message.label.move=Beweeg tekst: beweeg de tekst! message.boundedpoint=punt op voorwerp: cirkel of rechte (shift: vast)? message.parameters=Macro-parameters: parametervoorwerpen? message.targets=Macro-doelen: doelvoorwerpen? message.savejob.first=Definieer opgave: laatst getoonde voorwerp? message.savejob.second=Definieer opgave: doelvoorwerp (shift: niet testen)? message.savejob.third=Definieer opgave: meer voorwerpen tonen? message.runmacro=Macro %: %. (Typ %) % message.runmacro.return=(Spatiebalk kiest %) message.runmacro.fixes=(Shift maakt parameter vast) message.delete=Verwijderen: Selecteer voorwerp! message.reorder=Voorwerp naar achteren: Selecteer voorwerp! message.expression=Wiskundige uitdrukking: Select plaats! message.area=Opgevulde veelhoek: hoekpunt? message.text=Tekst: plaats? message.animator.point=Animatie: geanimeerd punt? message.animator.segment=Animatie: cirkel of lijnstuk? message.animator.running=Animatie: loopt! message.range.first=Teken cirkel vanaf dit punt ... message.range.second=... tot dit punt! message.setaway.away=Weg van dit punt! message.setaway.close=In de buurt van dit punt! objectsedit.title=Wijzig eigenschappen point.type.square=Vierkant point.type.diamond=Ruit point.type.circle=Cirkel point.type.dot=Punt color.type.normal=Normaal color.type.thick=Dik color.type.thin=Dun text.point=Punt op %, % text.line=Rechte door % en % text.segment=Lijnstuk van % tot % text.segment.fixed=Lijnstuk van % tot % met lengte % text.ray=Straal van % in de richting van % text.intersection=Snijding tussen % en % text.circle=Cirkel rond % door % text.circle.fixed=Cirkel rond % door % met straal % text.fixedcircle=Cirkel rond % met straal % text.circle3=Cirkel rond % met straal van % tot % text.parallel=Rechte door % evenwijdig met % text.midpoint=Midden tussen % en % text.quadric=Kegelsnede door % text.plumb=Rechte door % loodrecht op % text.angle=Hoek % - % - % text.angle.fixed=Hoek % - % - % met grootte % text.boundedpoint=Punt op % text.expression=Uitdrukking "%" op %, % text.area=Veelhoek text.fixedangle=Hoek % - % met grootte % name.Point=Punt name.Intersection=Intersectie name.OtherIntersection=Intersectie name.Circle=Cirkel name.Circle3=Cirkel name.Segment=Lijnstuk name.Ray=Straal name.Line=Rechte name.TwoPointLine=Rechte met twee punten name.Parallel=Evenwijdige name.Midpoint=Midden name.Quadric=Quadriek name.Plumb=Loodlijn name.Angle=Hoek name.PointOn=Voorwerppunt name.Expression=Uitdrukking name.Polygon=Veelhoek name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=l name.short.Ray=s name.short.Line=r name.short.Parallel=e name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=n name.short.Angle=h name.short.PointOn=OP name.short.Expression=WU name.short.Polygon=V prompt.point==P prompt.pointon==P() prompt.line==r(,) prompt.segment==l(,) prompt.ray==s(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==e(,) prompt.plumb==n(,) prompt.angle==h(,,) prompt.area=O(,,) popup.hidden=Toon verborgen voorwerpen popup.replay=Toon constructie stapsgewijs popup.empty=--- Macro's --- replay.title=Weergave reorder.title=Duw voorwerpen reorder.message=Voeg in na reorder.notfound=Voorwerp niet gevonden! reorder.warning=Sorry, kon niet uitgevoerd worden! setgrid.title=Rasterbreedte setgrid.prompt=Geef nieuwe rasterbreedte setgrid.set=Instellen definemacro.title=Definieer macro definemacro.name=Naam definemacro.comment=Macro-commentaar definemacro.parameters=Parameteringave(n) definemacro.noparams=Geef een waarde aan de parameter! definemacro.nomacro=Er is geen macro om uit te voeren! definemacro.targetsonly=Verberg constructie definemacro.invisible=Verberg volledig definemacro.promptfor=Gebruiker voert in: macro.replace.title=Macro macro.replace=Vervang Macro: macro.replace.all=Alle macro.usage=Verkeerd gebruik van de macro (zie tips)! macro.prompt.title=Parameterinvoer macro.prompt.prompt=Geef een waarde aan de parameter macro.prompt.illegal=Ongeldige waarde! digits.title=Beduidende cijfers digits.edit=Wijzig digits.lengths=Display digits.angles=Hoeken editrun.title=Wijzig constructiebeschrijving editrun.run=Bewaren en uitvoeren editrun.load=Andere beschrijving sure.title=Ben je zeker? sure.macros=Alle macro's wissen? sure.delete=Alle veranderingen weggooien? close.title=Einde close.prompt=Wil je dit programma stoppen? file.exists.title=Bestand bestaat reeds file.exists.overwrite=Bestand bestaat. Vervangen? exception.nparams=Ongeldig aantal parameters! exception.notfound=Voorwerp niet gevonden of het is gedefinieerd na een uitdrukking! exception.type=Ongeldig voorwerptype! exception.expression=Ongeldige uitdrukking! exception.canfix=Voorwerp kan niet vastgezet worden! exception.fix=Ongeldige waarde! exception.novalue=Ongeldige waarde! exception.elementary=Ongeldig element in uitdrukking! exception.bracket=Afsluitend haakje ontbreekt! exception.quotes=Afsluitend aanhalingsteken ontbreekt! exception.dot=Verkeerd getalformaat! exception.nodigit=Getal bevat geen cijfer! exception.function=Onbekende functie! exception.parameter=Ongeldige functieparameter! exception.macro=Ongeldige macroparameter! exception.name=Benaming ontbreekt! exception.job=Ongeldige opgaveparameters! exception.track=Ongeldige volgparameters! exception.animate=Ongeldige animatieparameters! exception.boolean=Verwachte waarde: waar of vals! exception.value=Ongeldige waarde! exception.color=Ongeldige kleur! exception.colortype=Ongeldige dikte! exception.type=Ongeldige puntdikte! exception.macroparameter=Ongeldige macroparameter! exception.macrotarget=Ongeldig macrodoel! exception.prompt=Ongeldig voorwerp! exception.prompt.parameter=Voorwerp mag geen parameter zijn! exception.parameters=Ongeldige parameter! exception.brackets=Ongeldige haakjes! exception.double=Naam is reeds gebruikt! error.setaway=Dit punt is niet voor de snijding gedefinieerd! error.objecttracker.depends=dit punt ligt op een ander voorwerp! constructiondisplay.title=Constructie function.hide=Verberg function.hide.short=verberg function.rename=Naam function.rename.short=naam function.value=Waarde function.value.short=waarde function.window=Venster function.window.short=venster function.color=Kleur function.color.short=kleur function.thickness=Dikte function.thickness.short=dikte function.type=Type function.type.short=type function.partial=Gedeeltelijk function.partial.short=gedeeltelijk function.fill=Vul function.fill.short=vul function.back=Terug function.back.short=terug function.acute=Scherp function.acute.short=scherp function.obtuse=Stomp function.obtuse.short=stomp function.solid=Vast function.solid.short=vast function restrict=Beperk function restrict.short=beperk expression.value=Waarde configure.title=Browser instellen configure.prompt=Browsercommando # New Resources: background.error=Kon afbeelding niet inladen (GIF of JPG!). menu.background=Achtergrond menu.background.grab=Huidige constructie als achtergrond gebruiken menu.background.clear=Wis achtergrond menu.background.load=Achtergrondafbeelding laden ... menu.background.usesize=Venstergrootte aanpassen menu.background.tile=Achtergrondpatroon herhalen menu.background.center=Achtergrond centreren iconhelp.grab=Achtergrond instellen of wissen filedialog.backgroundload=Achtergrond laden filedialog.backgroundload.action=Laden # New Resources in Version 2.14 menu.file.compress=Altijd comprimeren menu.file.savesvg=SVG # Version 2.15 loading=Aan het inladen, even geduld! # Version 2.18 and 2.19 menu.settings.font.default=Standaardlettertype gebruiken menu.settings.font.bold=Vette tekst menu.settings.font.large=Grote tekst menu.file.saveeps=EPS menu.fonts=Lettertype # Version 2.20 bmpscaler.title=Verklein/vergroot bitmap bmpscaler.width=Breedte bmpscaler.height=Hoogte bmpscaler.scale=Factor (druk Return) bmpscaler.illegal=Ongeldige waarde # Version 2.21 renamemacro.title=Nieuwe naam voor macro renamemacro.name=nieuwe macronaam menu.special.renamemacro=Geef macro nieuwe naam ... # Version 2.23 savequestion.title=Bewaar constructie savequestion.qsave=Aanpassingen bewaren? # Version 2.25 exception.printsize=Pagina is te klein voor deze constructie! iconhelp.twolines=Iconen op twee regels iconhelp.nohelp=Geen help beschikbaar iconhelp.type?=Punt type iconhelp.thickness?=Dikte iconhelp.color?=Kleur iconhelp.filled=Opgevuld voorwerp iconhelp.isback=Voorwerp wordt in de achtergrond getekend iconhelp.inverse=Gespiegelde hoek iconhelp.angle?=Grootte # Version 2.28 message.objecttracker.stop=Automatisch volgen: Stop de animatie (shift links/rechts regelt snelheid) # Version 2.31 menu.settings.indicate=Voorvertoning aangemaakte voorwerpen menu.options.other=Voorkeuren menu.help.welcome=Nieuws i.v.m. nieuwe versie iconhelp.twolines=Iconen op twee regels iconhelp.qintersection=Vraag voor intersecties iconhelp.qchoice=Toon dialoogvenster voor voorwerpselectie iconhelp.qpointon=Vraag om een punt op een voorwerp te maken iconhelp.noindicate=Duid voorwerpen onder de muis niet aan # Version 2.33 menu.file.new=Nieuwe constructie (Ctrl-n) # Version 2.34 edit.text.title=Tekstinstellingen edit.text.settings=Andere instellingen menu.settings.filedialog=Vervang bestandsdialoog van het systeem # Version 2.35 menu.settings.bitmapbackground=Gebruik achtergrondkleur in bitmaps # Version 2.36 menu.file.savegraphics=Bewaar afbeelding als ... menu.file.savepng=PNG bmpscaler.title=Schaal afbeelding # Version 2.37 menu.file.savepdf=PDF iconhelp.chord=Toon als koorde # Version 2.39 message.setfixedangle.first=Vaste hoek: beginpunt? message.setfixedangle.second=Vaste hoek: hoekpunt? message.setfixedangle.third=Vaste hoek: eindpunt? edit.fixedangle.set=grootte hoek bepalen ... message.setfixedcircle.first=Vaste cirkel: eerste punt? message.setfixedcircle.second=Vaste cirkel: tweede punt? edit.fixedcircle.set=grootte cirkel bepalen ... # Version 2.40 minpointsize.title=Min. puntgrootte instellen minpointsize.prompt=Geef de minimale puntgrootte (standaardwaarde: 3) menu.settings.font.minpointsize=Minimale puntgrootte ... # Version 2.41 name.short.Track=MP text.track=Meetkundige plaats van % waarbij % beweegt op % trackquestion.keep=Bewaar meetkundige plaats in constructie? trackquestion.title=Bewaar meetkundige plaats menu.options.track=Bewaar meetkundige plaats (Shift-Enter) iconhelp.indicate=Voorvertoning constructieresultaat iconhelp.nohelp=Geen hulp beschikbaar! # Version 2.42 objects.draw=Teken met de muis menu.options.cleardraw=Wis tekening (Esc) iconhelp.draw=Teken met de muis message.draw=Teken met de muis (ESC om te wissen) shortcuts.draw=; # Version 2.43 message.move.select=Bewegen: Selecteer een punt (shift: toon oude toestand)! message.rename=Hernoem A,B,C,...: Selecteer voorwerpen! iconhelp.rename=Hernoem A,B,C,... objects.rename=Hernoem A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Straal van de hoek niet tonen # Version 2.45 menu.settings.smartboard=Smartboard Modus shortcuts.zoom=% objects.zoom=Zoomen met de muis message.zoom=Versleep het centrum, of zoom in en uit # Version 2.46 menu.special.restricticons=Beperkte set werktuigiconen # Version 2.47 menu.settings.indicate.simple=Alleen punten aanduiden menu.settings.beginner=Beginnersmodus question.again=Deze vraag altijd stellen. # Version 2.49 definemacro.parameters=Vraag naar parameters ("=naam" maakt het vast) # Version 2.53 menu.actions.angles=Hoeken menu.actions.circles=Cirkels menu.actions.lines=Rechten menu.actions.points=Punten # Version 3.00 info.title=Context help info.related=Verwante topics info.notfound=Topic niet gevonden! info.noresults=Zoekterm niet gevonden! info.searchresults=- resultaten zoektocht - info.select=- Selecteer - info.search=Zoek info.back=Terug info.start=Start iconhelp.info=Context help menu.help.info=Context help myfiledialog.homedir=PeL bestanden myfiledialog.windowshome=Mijn documenten myfiledialog.mkdir=nieuwe map myfiledialog.back=Terug menu.file.alwaysclearmacros=Wis macro's voor inladen about.language=Taal bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Backups # Version 3.02 menu.options.hideduplicates=Verberg duplicaten # Version 3.03 menu.options.function=Teken een functie text.function=Functie ( % , % ) function.varmin=Van function.varmax=Tot function.dvar=Stap function.var=Variabele function.x=X function y=Y iconhelp.function=Teken een functie menu.options.editlast=Wijzig laatste voorwerp iconhelp.control.edit=Wijzig laatste voorwerp iconhelp.control.hide=Verberg duplicaten edit.function.title=Functie of kromme iconhelp.control.runmacro=Voer laatste macro opnieuw uit # Version 3.05 point.type.cross=Kruis point.type.dcross=Diagonaal kruis shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Eenheid menu.special.break=Afbreekpunten menu.bp.setbreak=Zet afbreekpunt menu.bp.clearbreak=Wis afbreekpunt menu.bp.sethidingbreak=Zet verborgen afbreekpunt menu.bp.animatebreak=Animeer afbreekpunten iconhelp.animatebreak=Animeer afbreekpunten message.animatebreak=Animeer afbreekpunten: Klik om te stoppen (shift links/rechts regelt snelheid)! menu.special.exporttemplate=HTML Export met sjabloon templateload.open=Laad sjabloon templateload.open.action=Open menu.settings.doubleclick=Dubbelklikken voor macro's # Version 3.12 edit.equation=Vergelijking # Version 3.23 menu.settings.squarepoints=Teken punten altijd als vierkanten # Version 3.37 menu.options.export=Instellingen voor grafische export menu.settings.minwidth=Minimale lijndikte is 1 menu.settings.minpointsize=Respecteer minimum puntgrootte menu.settings.minfontsize=Respecteer minimum lettergrootte minfontsize.title=Minimum lettergrootte instellen minfontsize.prompt=Minimum lettergrootte (standaard: 12) menu.options.minpointsize=Minimum puntgrootte menu.options.minfontsize=Minimum lettergrootte # Version 3.38 menu.settings.scalepdf=Schaal PDF en EPS uitvoer 1:1 # Version 3.41 menu.file.clip=Afsnijden voor grafische uitvoer ... clip.title=Afsnijding instellen clip.width=Breedte clip.height=Hoogte clip.screen=Niet afsnijden # Version 3.42 menu.options.arrowsize=Pijlgrootte ... arrowsize.title=Pijlgrootte # Version 3.44 iconhelp.large=Gebruik grote letters iconhelp.bold=Gebruik vet menu.options.largefont=Grote letters menu.options.boldfont=Vet warning.previewframe=Frame groter dan het venster! message.move.select=Move: Selecteer een punt (shift: meer punten, ctrl: toon oude toestand)! # Version 3.46 iconbar.showseparators=Toon scheidingslijnen # Version 3.48 menu.sizes=Stel formaat in menu.options.minlinesize=Minimum lijndikte ... minlinesize.title=Minimum lijndikte minlinesize.prompt=Minimum lijndikte (standaard 1) arrowsize.prompt=Pijlgrootte instellen (standaard: 10) menu.options.printscaler=Exportformaat instellen ... menu.options.printscalepreview=Export voorvertoning menu.options.exportsettings=Speciale exportinstellingen ... printscaler.title=Exportformaat instellen printscaler.width=Breedte (in cm) printscaler.height=Hoogte (in cm) printscaler.dpi=Resolutie (in dpi, standaard 300) printscaler.linewidth=Lijndikte (in cm, standaard 0.02) printscaler.pointsize=Puntgrootte (in cm, standaard 0.05) printscaler.textsize=Tekstgrootte (in cm, standaard 3) printscaler.clear=Niet gebruiken printscaler.screen=Schermgrootte # Version 3.49 printscaler.screen=300 DPI printscaler.w=breedte (in pixels) printscaler.h=Hoogte (in pixels) printscaler.scale=Schaal (relatief t.o.v. scherm) printscaler.middle=uitsnijden (niet herschalen) printscaler.sizes=herschaal rechten, letters en punten menu.file.savepng=Bewaar figuur als PNG warning.preview=Voorvertoning werkt niet volledig in Java 1.1 iconedit.showseparators=Toon scheidingslijnen printscaler.aspect=Bewaar verhouding printscaler.presets=Standaardkeuzes printscaler.preset=Kies uit de lijst printscaler.preset.300dpi=Exacte schaal met 300 DPI printscaler.preset.300dpi6=6 cm breed met 300 DPI printscaler.preset.300dpi16=16 cm breed met 300 DPI printscaler.preset.window=Venstergrootte printscaler.preset.clip50=Venstergrootte afgesneden 50% message.saving=Even geduld! menu.options.printscalepreview=Exportvoorvertoning (Ctrl-F3) date=Build # Version 3.51 help=Hulp # Version 3.61 editconditionals.title=Wijzig voorwaarden editconditionals.hidden=Verborgen editconditionals.superhidden=Volledig verborgen editconditionals.visible=Normaal editconditionals.showname=Toon naam editconditionals.showvalue=Toon waarde editconditionals.background=Achtergrond editconditionals.solid=Niet transparant exception.superfluous=Overbodige tekst in uitdrukking # Version 3.62 menu.options.selectionsize=Stel keuzebereik in selectionsize.title=Keuzebereik selectionsize.prompt=Keuzebereik (standaard 1.5) # Version 3.63 select.comment.title=Macrocommentaar # Version 3.68 edit.area.area=Oppervlakte # Version 3.73 myfiledialog.oldfiles=Oude bestanden # Version 3.74 iconhelp.load=Laad constructie (Ctrl-o) iconhelp.save=Bewaar constructie (Ctrl-s) iconhelp.new=Nieuwe constructie (Ctrl-n) # Version 3.81 warning.loadbackground=Fout bij laden achtergrond # Version 3.9 function.x=Uitdrukking voor X (leeg voor functies) # Version 3.91 constructiondisplay.select=Selecteer constructiondisplay.all=Alle objecten constructiondisplay.visible=Zichtbare objecten constructiondisplay.points=Punten constructiondisplay.lines=Rechten constructiondisplay.circles=Cirkels constructiondisplay.angles=Hoeken constructiondisplay.other=Andere objecten menu.file.copypng=Kopieer naar klembord exception.clipboardcopy=Kopie mislukt! menu.options.finegrid=Enkel as # Vesion 3.93 edit.function.center=Stel centrum in edit.function.free=Laat centrum los message.setcenter=Kies het centrumpunt! # Vesion 3.94 message.edit=Edit: Object (shift: meer objecten, ctrl: voorwaardelijk)? # Version 3.95 edit.function.special=Alleen punten # Version 3.97 error.image=Fout bij laden afbeelding! filedialog.imageload=Laad afbeelding filedialog.imageload.action=Laad prompt.image=afbeelding(,,,) objects.image=Afbeelding shortcuts.image=_ # Version 3.98 exception.depends=Object % hangt af van huidig object. error.depends=Object % hangt af van huidig object. constructiondisplay.sorted=Gesorteerd volgens constructievolgorde # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Uitdrukkingen # Version 4.00 iconhelp.image=Laad afbeelding (_) message.image=Ankerpunt % voor afbeelding message.image.last=Laatste ankerpunt (of kies geselecteerde punt) editconditionals.z=Z-Bufferwaarde # Version 4.01 name.FixedAngle=Vaste hoek # Version 4.04 menu.moresettings=Instellingen menu.settings.language=Kies taal language.title=Kies taal language.prompt=Taal (actief bij volgende programmastart) # Version 4.05 constructiondisplay.invalid=Ongeldige objecten # Version 4.08 menu.settings.constructiondisplay=Permanente constructieweergave (F11) # Version 4.09 constructiondisplay.editconditions=Wijzig voorwaarden constructiondisplay.delete=Verwijder geselecteerde objecten constructiondisplay.hide=Verberg of toon constructiondisplay.superhide=Super verbergen # Version 4.2 edit.expression.slider=Toon als schuifbalk menu.grid.options=Gridopties menu.options.leftsnap=Snap met linkermuistoets menu.settings.boundingbox=Maak Bounding Box (bb) bestand # Version 4.3 latexsettings.title=Stel LaTeX-export in latexsettings.boundingbox=Maak Bounding box bb-bestand latexsettings.latexinput=Maak LaTeX idx-bestand latexsettings.doubledollar=LaTeX toont $$...$$ latexsettings.dollar=LaTeX toont $...$ latexsettings.dollar=LaTeX toont $...$ latexsettings.nodollar=LaTeX toont alle andere strings latexsettings.fullpath=Gebruik pad naar bestand printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=12 cm breedte met 300 DPI printscaler.latex=Bewaar voor LaTeX menu.background.usewidth=Pas alleen hoogte aan # Version 4.4 menu.options.restricted=Beperk intersecties menu.options.sizes=Kies groottes ... sizesdialog.title=Groottes minlinesize.prompt=Minimale lijnbreedte (standaard: 1) minpointsize.prompt=Minimale puntgrootte (standaard: 3) minfontsize.prompt=Minimale lettergrootte (standaard: 12) arrowsize.prompt=Pijlgrootte (standaard: 10) selectionsize.prompt=Selectie-grootte (standaard: 1.5) warning.loadmacros=Fout bij laden macro! warning.macrodefinition=% wordt gebruikt, maar staat niet in macro! edit.circle.bounds=Toon als boog edit.circle.range=Kies boog ... # Version 4.5 edit.track.dmin=Minimale stapgrootte (standaard 0.001) # Version 4.6 menu.settings.smallicons=Gebruik kleine iconen menu.settings.oldicons=Gebruik oude iconen # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof=Meetkundige plaats van % als % verandert # Version 5 # Fix error.image edit.discrete=Discreet error.fixedsegment=Kan dit lijnstuk niet herstellen! export.zoom=Zoom met muis export.popup=Popup menu # Version 5.1 edit.intersection.alternate=Kan afwisselen export.restrictedmove=Beperk bewegingen # Version 6.0 # Fix message.boundedpoint # Fix iconhelp.new message.bindpoint=Maak punt vast aan object (Shift: continu, Ctrl: binnenin object) edit.point.inside=Binnen object edit.point.increment=Grid toename (0=free) edit.more=Meer ... menu.settings.more=Toon knop voor conditionele opmaak menu.file.loadexamples=Laad voorbeeld ... menu.options.editgrid=Editeer cordinatenraster ... # Version 6.1 constructiondisplay.description=Toon beschrijving (Alt-Ctrl-1) constructiondisplay.size=Toon afmeting of cordinaten (Alt-Ctrl-2) constructiondisplay.formula=Toon formule (Alt-Ctrl-3) menu.settings.germanpoints=Gebruik | in cordinaten ./src/rene/zirkel/docs/ZirkelProperties.properties0000770000175000017500000010744311364767701021401 0ustar yvesyvesprogram.name=CaRMetal program.version=3.5.2 program.date=2009-09 version=Version homefile=index.html homepage=http://www.z-u-l.de/ about.title=About this Program about.name=School Geometry about.programmed=Programmed by title=School Geometry close=Close ok=OK cancel=Cancel done=Well Done! message=Message yes=Yes no=No abort=Abort true=true false=false warning.nojob=This isn't an Assignment! warning.print=Printing failed! warning.reset=This option is enabled for the next start of Z.u.L.! question.title=Question question.intersection=Create this intersection? question.pointon=Create a point on this object? colors.black=Black colors.blue=Blue colors.green=Green colors.brown=Brown colors.cyan=Cyan colors.red=Red objects.point=Point objects.segment=Segment objects.line=Line objects.ray=Ray objects.circle=Circle objects.intersection=Intersection objects.move=Move Point objects.hide=Hide Object objects.edit=Edit Point objects.tracker=Track a Point or a Line objects.objecttracker=Track a Point or a Line on an Object objects.parallel=Parallel Line objects.plumb=Perpendicular Line objects.circle3=Circle from 3 Points objects.midpoint=Midpoint objects.quadric=Conic Section objects.angle=Angle objects.boundedpoint=Point on an Object objects.parameter=Set Macro Parameters objects.targets=Set Macro Targets objects.definejob=Define an Assignment objects.runmacro=Run a Macro objects.delete=Delete Objects and their Children objects.reorder=Push Objects to the Background objects.animate=Animation objects.expression=Arithmetic Expression objects.area=Polygon objects.text=Text objects.fixedcircle=Circle with fixed Size objects.fixedangle=Fixed Angle objects.fixedsegment=Segment with fixed Length iconhelp.point=Point (p) iconhelp.segment=Segment (s) iconhelp.line=Line (g) iconhelp.ray=Ray (r) iconhelp.circle=Circle (c) iconhelp.intersection=Intersection (i) iconhelp.move=Move a point (m)+Ctrl (Points): Show old construction+Ctrl: Move fixed objects+Shift: Move more than one object iconhelp.hide=Hide objects (h)+Shift: Hide completely iconhelp.edit=Edit objects (e)+Shift: Edit more objects+Ctrl: Edit last object iconhelp.tracker=Track a point or a line (t) iconhelp.objecttracker=Automatic track of a point or a line (o)+Strg: Keep Track (Shift-Enter) iconhelp.parallel=Parallel line (1) iconhelp.plumb=Perpendicular line (2) iconhelp.circle3=Circle from 3 points (3) iconhelp.midpoint=Midpoint (4) iconhelp.quadric=Conic section through 5 points ($) iconhelp.angle=Angle (a) iconhelp.boundedpoint=Create a point on an abject (5)+Shift: Not fixed on object iconhelp.hidden=Show or hide hidden objects (F9) iconhelp.color=Set default object color (Ctrl-1,2,3,4) iconhelp.type=Set default point type (Ctrl-5,6,7,8,9,0) iconhelp.type0=Set default point type iconhelp.thickness=Set default object thickness (Alt-5,6,7) iconhelp.back=Delete last object (<-) iconhelp.thickness0=Set default object thickness iconhelp.partial=Create partial circles by default (Ctrl-F9) iconhelp.plines=Create partial lines by default (Ctrl-F10) iconhelp.arrow=Create segments as vectors by default (Ctrl-F11) iconhelp.showcolor=Show selected colors only (Alt-1,2,3,4) iconhelp.runmacro=Run a macro (9)+Ctrl: Run last Macro iconhelp.macro=Set macro parameters, targets and definition (7,8,Ctrl-5) iconhelp.expression=Arithmetic expression (x) iconhelp.showvalue=Show object values by default (Ctrl-F7) iconhelp.showname=Show object names by default (Ctrl-F6) iconhelp.obtuse=Create angles larger than 180\u00B0 by default (Ctrl-F12) iconhelp.solid=Do not use transparency by default iconhelp.longnames=Use long object names by default (Ctrl-F8) iconhelp.grid=Show the grid (F12) iconhelp.comment=Show and edit comment (F10) iconhelp.defaults=Default settings iconhelp.macro0=Set macro parameters, targets and definition iconhelp.visual=Toggle visual construction mode iconhelp.replay=Replay the construction iconhelp.oneforward=Forward iconhelp.fastforward=Fast forward iconhelp.allforward=To the end iconhelp.oneback=Back iconhelp.fastback=Fast back iconhelp.allback=To the start iconhelp.close=Close iconhelp.area=Polygon (0) iconhelp.text=Multiline text (b) iconhelp.fixedcircle=Circle with fixed radius (,) iconhelp.fixedangle=Angle with fixed size (.) iconhelp.fixedsegment=Segment with fixed length (#) iconhelp.animate=Animation of a point (") iconhelp.delete=Delete objects and their children (Del) iconhelp.undo=Undo last removals (Ctrl-z) iconhelp.nextbreak=Jump to next break iconhelp.setbreak=Toggle break+Shift: Hidden breakpoint iconhelp.zoom=Zoom with the mouse (%) shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.showcolor.4= shortcuts.showcolor.5= shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) shortcuts.thickness.3=(Alt-8) menu.file=File menu.file.clearmacros=Clear User Macros menu.file.load=Load a Construction ... (Ctrl-o) menu.file.loadjob=Load an Assignment ... (Ctrl-j) menu.file.savejob=Save as Assignment ... (Ctrl-k) menu.file.save=Save this Construction (Ctrl-s) menu.file.saveas=Save this Construction to ... (Ctrl-a) menu.file.includemacros=Include all Macros menu.file.exit=Exit (Alt-F4) menu.file.print=Print ... menu.file.print.isoscale=Scale 1:1 in cm menu.file.savebmp=Save Graphics (as BMP) ... menu.file.savefig=Save Graphics (as FIG) ... menu.file.loadrun=Load a Decriptive Construction ... (Ctrl-r) menu.file.editrun=Edit a Descriptive Construction ... (Ctrl-x) menu.actions=Edit menu.actions.elementary=Elementary Tools menu.actions.complex=More Complex Tools menu.actions.move=Moving Tools menu.actions.decorative=Decorative Objects menu.options=Options menu.options.visual=Toggle Visual Mode (Ctrl-F6) menu.options.hidden=Show hidden Objects (F9) menu.options.comment=Edit Comment (F10) menu.options.constructiondisplay=Show Description menu.options.grid=Show Grid (F12) menu.options.setgrid=Set Grid Width ... menu.options.showcolor=Show Color menu.options.defaultcolor=Default Color menu.options.defaultthickness=Default Thickness menu.options.defaulttype=Default Point Type menu.options.all=All menu.options.setdigits=Set Digits menu.options.shownames=Show Object Names (Ctrl-F6) menu.options.longnames=Long Object Names (Ctrl-F8) menu.options.obtuse=Use Angles larger than 180\u00B0 (Ctrl-F12) menu.options.solid=Do not use Transparency menu.options.showvalues=Show Object Values (Ctrl-F7) menu.options.partial=Partial Circles (Ctrl-F9) menu.options.plines=Partial Lines (Ctrl-F10) menu.options.arrow=Arrows (Ctrl-F11) menu.options.editicons=Edit the Toolbox menu.options.back=Delete last Object (<-) menu.options.undo=Undo Delete (Ctrl-z) menu.zoom=Zoom menu.zoom.in=In (+) menu.zoom.out=Out (-) menu.zoom.left=Left (Cursor-Left) menu.zoom.right=Right (Cursor-Right) menu.zoom.up=Up (Cursor-Up) menu.zoom.down=Down (Cursor-Down) menu.macros=Macros menu.special.definemacro=Define a Macro (Ctrl-F5) menu.special.runmacro=Run a Macro ... (F5) menu.special.savemacros=Save Macros ... menu.special.loadmacros=Load Macros ... menu.special.deletemacros=Delete Macros ... menu.special=Special menu.special.testjob=Test this Assignment (Ctrl-F1) menu.special.jobcomment=Set Assignment Text ... (F8) menu.special.export=Create an HTML File ... (Ctrl-e) menu.special.replay=Replay this Construction menu.help=Help menu.help.about=About this program menu.help.browser=Explore Help and Demos menu.help.text=Simple Help menu.help.configure=Configure the Browser menu.help.help=Help (F1) menu.help.macros=About Macros menu.help.tools=The Tools menu.help.gui=User Interface menu.help.interactive=Descriptive Constructions menu.help.tips=Some Tips menu.settings=Special Settings menu.settings.fullicons=Use two full icon bars menu.settings.utf=Use UTF-8 encoding menu.settings.autohide=Hide second intersection point menu.settings.iconbartop=Iconbar above construction menu.settings.showtips=Show tooltips menu.settings.simplegraphics=Use simpler graphics menu.settings.sure=Confirm before loading and closing menu.settings.pointon=Ask before creating a point on an object menu.settings.intersection=Ask before creating an intersection menu.settings.choice=Show selection dialog for objects menu.settings.movename=Show object values when moving menu.settings.movefixname=Show fixed object values when moving menu.settings.restricted=Toggle school mode menu.colors=Set the Colors colors.default=Use Default Colors colors.color0=Color 1 (Black) colors.color1=Color 2 (Green) colors.color2=Color 3 (Blue) colors.color3=Color 4 (Brown) colors.color4=Color 5 (Cyan) colors.color5=Color 6 (Red) colors.background=Background colors.select=Select colors.target=Target myfiledialog.dir=Directory myfiledialog.file=File myfiledialog.pattern=Extensions filedialog.open=Open filedialog.saveas=Save as ... filedialog.open.action=Open filedialog.saveas.action=Save filedialog.htmlsave=Save HTML filedialog.htmlsave.action=Save pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=Save load=Load abort=Abort bound.release=Release Point bound.bind=Bind to Object bound.error=Object not found before intersection! constructiondisplay.edit=Edit Object constructiondisplay.copy=Copy to Clipboard edit.Title=Properties edit.name=Name edit.hidden=Hidden edit.text=Text edit.fixed=Fixed edit.color=Color edit.ok=OK edit.cancel=Cancel edit.showname=Show Name edit.point.title=Edit Point edit.point.type=Type edit.point.x=X edit.point.y=Y edit.point.intersection=Different from edit.point.showvalue=Show Coordinates edit.point.colortype=Thickness edit.point.bound=Bound edit.point.away=Away from edit.point.close=Close to edit.point.free=Free edit.line.title=Edit Line, Ray, Segment edit.line.normal=Normal edit.line.thick=Thick edit.line.thin=Thin edit.line.invisible=Invisible edit.line.type=Type edit.segment.length=Length edit.segment.showvalue=Show Length edit.circle.title=Edit Circle edit.circle.length=Radius edit.circle.partial=Partial Display edit.plumb.restricted=Restricted edit.angle.title=Edit Angle edit.angle.length=Size edit.angle.displaysize=Display Size edit.angle.normal=Normal edit.angle.small=Small edit.angle.large=Large edit.expression.title=Edit Expression edit.expression=Arithmetic Expression edit.expression.prompt=Explanation edit.area.title=Edit Polygon edit.area.back=In Background export.title=HTML Export export.pagetitle=Title of Page export.width=Width export.height=Height export.jar=Jar file export.comment=Save comment export.file=Construction File export.job=Display as Assignment export.color=Color export.backgroundcolor=Use for page background export.appletcolor=Use for applet background export.plain=Plain export.3D=Border export.breaks=Replay with Breakpoints export.icons=Border and Icons export.full=Border, Icons and Status export.nonvisual=Border, Icons and Input Line export.style=Applet Style export.setcolor=Choose Color export.savefirst=File has not been saved! export.soltext=Solution export.stylesheet=CSS Style File export.solution=Solution File export.jumpsol=Jump to Solution export.linksol=Link to Solution export.savesol=Save Solution File export.track=Track Point export.digits=Save Digits export.setsize=Get Size export.signature=Created using C.a.R. export.colors=Save defined Colors export.background=Save defined Background help.title=Help help.error=Could not open the help file! help.file=schoolgeometry.txt coloreditor.title=Edit Color coloreditor.red=Red coloreditor.green=Green coloreditor.blue=Blue coloreditor.color=Your Color comment.title=Construction Comment comment.set=Set comment.cancel=Cancel comment.close=Close iconedit.title=Edit Icon Bar iconedit.twobars=Icon box has two lines jobcomment.title=Assignment select.title=Selection select.ok=OK select.cancel=Cancel select.comment=Show Comment select.all=All message.circle.midpoint=Circle: Midpoint? message.circle.radius=Circle: Point on the circle (shift: fix radius)? message.fixedcircle.midpoint=Circle with fixed size: Midpoint? message.fixedcircle.radius=Circle with fixed size: Radius? message.line.first=Line: First point? message.line.second=Line: Second point? message.ray.first=Ray: Root point? message.ray.second=Ray: Second point? message.move.select=Move: Select an object (shift: more)! message.move.move=Move: Move the point? message.point=Point: Set a point (shift: fix)! message.segment.first=Segment: First point? message.segment.second=Segment: Second point (shift: fixed length)? message.fixedsegment.first=Segment with fixed length: First point? message.fixedsegment.second=Segment with fixed length: Click somewhere! message.intersection.first=Intersection: First object or the intersection? message.intersection.second=Intersection: First object? message.hide=Hide/Show: Select an object! message.tracker.select=Track: Point or line to track (shift: more)? message.tracker.selectpoint=Track: Point to move? message.tracker.move=Track: Move the point! message.objecttracker.select=Autotrack: Point or line to track (shift: more)? message.objecttracker.object=Autotrack: Line or circle, point on object, slider? message.objecttracker.selectpoint=Autotrack: Point to be moved on line or circle? message.objecttracker.selectanypoint=Autotrack: Any other point to move? message.objecttracker.move=Autotrack: Move the point! message.objecttracker.start=Autotrack: Start the Animation! message.parallel.first=Parallel: Line? message.parallel.second=Parallel: Point? message.plumb.first=Perpendicular: Line? message.plumb.second=Perpendicular: Point? message.circle3.first=Circle: First radius point? message.circle3.second=Circle: Second radius point? message.circle3.midpoint=Circle: Midpoint? message.midpoint.first=Midpoint: First point? message.midpoint.second=Midpoint: Second point? message.quadric=Conic Section: Point number message.angle.first=Angle: First angle point? message.angle.root=Angle: Corner point? message.angle.second=Angle: Second angle point (shift: fixed size)? message.fixedangle.first=Angle with fixed size: First angle point? message.fixedangle.root=Angle with fixed size: Base point? message.fixedangle.second=Angle with fixed size: Click somewhere! message.label.select=Move Label: Select a label! message.label.move=Move Label: Move the label! message.boundedpoint=Point on Object: Circle or line object (shift: continuous, ctrl: inside)? message.parameters=Macro Parameters: Parameter objects? message.targets=Macro Targets: Target objects? message.savejob.first=Define Assignment: Last displayed object? message.savejob.second=Define Assignment: Target object (shift: don't check)? message.savejob.third=Define Assignment: Further objects to be displayed? message.runmacro=Macro %: %. % - % message.runmacro.return=(SPACE chooses %) message.runmacro.fixes=(SHIFT fixes selection) message.delete=Delete: Select an object! message.reorder=Reorder: Select an object! message.expression=Arithmetic Expression: Select a place! message.area=Filled polygon: Corner point? message.text=Text: Select a place! message.animator.point=Animation: Point to animate? message.animator.segment=Animation: Circle or a segment? message.animator.running=Animation: Running (click to stop)! message.range.first=Set range: Draw the circle from which point ... message.range.second=Set range: ... to which point? message.setaway.away=Keep the intersection away from which point? message.setaway.close=Keep the intersection close to which point? objectsedit.title=Edit Properties point.type.square=Square point.type.diamond=Diamond point.type.circle=Circle point.type.dot=Dot color.type.normal=Normal color.type.thick=Thick color.type.thin=Thin color.type.invisible=Invisible text.point=Point at %, % text.line=Line through % and % text.segment=Line segment from % to % text.segment.fixed=Line segment from % to % with length % text.ray=Ray from % pointing to % text.intersection=Intersection between % and % text.circle=Circle around % through % text.circle.fixed=Circle around % through % with radius % text.fixedcircle=Circle around % with radius % text.circle3=Circle around % with radius from % to % text.parallel=Parallel line through % to % text.midpoint=Midpoint between % and % text.quadric=Conic section through % text.plumb=Perpendicular line through % to % text.angle=Angle % - % - % text.angle.fixed=Angle % - % - % with size % text.boundedpoint=Point on % text.expression=Expression "%" at %, % text.area=Polygon text.fixedangle=Angle % - % with size % name.Point=Point name.Intersection=Intersection name.OtherIntersection=Intersection name.Circle=Circle name.Circle3=Circle name.Segment=Segment name.Ray=Ray name.Line=Line name.TwoPointLine=Line with two Points name.Parallel=Parallel name.Midpoint=Midpoint name.Quadric=Quadric name.Plumb=Plumb name.Angle=Angle name.PointOn=ObjectPoint name.Expression=Expression name.Polygon=Polygon prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.angle==a(,,) prompt.area=A(,,) prompt.quadric=quadric(,,,,) prompt.function=function(,,,,,) name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=pl name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=p name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=poly name.short.Function=f popup.hidden=Show hidden objects popup.replay=Replay construction popup.empty=--- Macros --- replay.title=Replay reorder.title=Push objects reorder.message=insert after reorder.notfound=Object not found! reorder.warning=Could not do that! setgrid.title=Grid Width setgrid.prompt=Enter new grid width setgrid.set=Set definemacro.title=Define Macro definemacro.name=Name definemacro.comment=Macro Comment definemacro.noparams=Need parameters for the macro! definemacro.nomacro=There is no macro to run! definemacro.targetsonly=Hide construction definemacro.invisible=Hide completely definemacro.promptfor=Prompt for macro.replace.title=Macro Replacement macro.replace=Replace Macro: macro.replace.all=All macro.usage=Wrong use of macro (see tips)! macro.prompt.title=Parameter Prompt macro.prompt.prompt=Enter a value for the parameter macro.prompt.illegal=Illegal value! digits.title=Set Digits digits.edit=Edit digits.lengths=Display digits.angles=Angles editrun.title=Edit Descriptive Construction editrun.run=Save and Run editrun.load=Other Description sure.title=Are you sure? sure.macros=Delete all user macros? sure.delete=Forget current changes? close.title=End close.prompt=Really close this program? file.exists.title=File Exists file.exists.overwrite=File exists! Overwrite? exception.nparams=Illegal number of Parameters! exception.notfound=Object not found, or defined after expression! exception.type=Illegal Object Type! exception.expression=Invalid Expression! exception.canfix=Object cannot be fixed! exception.fix=Value invalid! exception.novalue=Value invalid! exception.elementary=Invalid element in expression! exception.bracket=Closing brackets missing! exception.quotes=Closing quotes missing! exception.dot=Two dots in number! exception.nodigit=No digit found in number! exception.function=Unknown function! exception.parameter=Illegal function parameter! exception.macro=Illegal macro parameter! exception.name=Need a Name! exception.job=Illegal Job Paramters! exception.track=Illegal Track Parameters! exception.animate=Illegal Animation Parameters! exception.boolean=Boolean Value must be true of false! exception.value=Illegal Value! exception.color=Illegal Color! exception.colortype=Illegal Thickness! exception.type=Illegal Point Type! exception.macroparameter=Illegal Macro Parameter! exception.macrotarget=Illegal Macro Target! exception.prompt=Illegal prompt oject! exception.prompt.parameter=Prompt object may not be a parameter! exception.parameters=Illegal Parameter! exception.brackets=Illegal Brackets! exception.double=Name is not unique! error.setaway=This point is not defined before the intersection! error.objecttracker.depends=The point is bound to another object! constructiondisplay.title=Construction function.hide=Hide function.hide.short=hide function.rename=Name function.rename.short=name function.value=Value function.value.short=value function.window=Window function.window.short=W function.color=Color function.color.short=col function.thickness=Thickness function.thickness.short=th function.type=Type function.type.short=type function.partial=Partial function.partial.short=part function.fill=Fill function.fill.short=fill function.back=Background function.back.short=back function.acute=Acute function.acute.short=acute function.obtuse=Obtuse function.obtuse.short=obtuse function.solid=Solid function.solid.short=solid function restrict=Restrict function restrict.short=restrict expression.value=Value configure.title=Set Browser configure.prompt=Enter Browser Command # New Resources: background.error=Could not load the Image (GIF or JPG!). menu.background=Background menu.background.grab=Current as Background menu.background.clear=Clear Background menu.background.load=Load Background Picture ... menu.background.usesize=Resize to Picture menu.background.tile=Tile Background menu.background.center=Center Background iconhelp.grab=Set or Clear Background filedialog.backgroundload=Load Background filedialog.backgroundload.action=Load # New Resources in Version 2.14 menu.file.compress=Compress always menu.file.savesvg=Save graphics (as SVG) ... # Version 2.15 loading=Loading, please wait! # Version 2.18 and 2.19 menu.settings.font.default=Default font menu.settings.font.bold=Bold font menu.settings.font.large=Large font menu.file.saveeps=Save graphics (as EPS) ... menu.fonts=Font # Version 2.20 bmpscaler.title=Scale Bitmap bmpscaler.width=Width bmpscaler.height=Height bmpscaler.scale=Factor (press Return) bmpscaler.illegal=Illegal Value # Version 2.21 renamemacro.title=Rename Macro renamemacro.name=New macro name menu.special.renamemacro=Rename Macro ... # Version 2.23 savequestion.title=Save Construction savequestion.qsave=Save Changes? # Version 2.25 exception.printsize=Page too small for this construction! iconhelp.nohelp=No help available iconhelp.type?=Point type iconhelp.thickness?=Thickness iconhelp.color?=Color iconhelp.filled=Filled object iconhelp.isback=Draws in background iconhelp.inverse=Reflected angle iconhelp.angle?=Size # Version 2.28 message.objecttracker.stop=Autotrack: Click to stop (shift left/right for speed)! # Version 2.31 menu.settings.indicate=Preview generated objects menu.options.other=Settings menu.help.welcome=News on current version iconhelp.twolines=Icons in two lines iconhelp.qintersection=Ask for intersections iconhelp.qchoice=Show dialog for object selection iconhelp.qpointon=Ask to create point on object iconhelp.noindicate=Do not indicate objects under mouse # Version 2.33 menu.file.new=New Construction (Ctrl-n) # Version 2.34 edit.text.title=Text Settings edit.text.settings=Further Settings menu.settings.filedialog=Replace system file dialog # Version 2.35 menu.settings.bitmapbackground=Use Background Color in Bitmaps # Version 2.36 menu.file.savegraphics=Save Graphics as ... bmpscaler.title=Scale Graphics # Version 2.37 menu.file.savepdf=Save Graphics (as PDF) iconhelp.chord=Show as segment # Version 2.39 message.setfixedangle.first=Set fixed angle: First point? message.setfixedangle.second=Set fixed angle: Base point? message.setfixedangle.third=Set fixed angle: Third point? edit.fixedangle.set=Set Size ... message.setfixedcircle.first=Set fixed circle: First point? message.setfixedcircle.second=Set fixed circle: Second point? edit.fixedcircle.set=Set Size ... # Version 2.41 name.short.Track=Tr text.track=Track of % when % moves on % trackquestion.keep=Keep Track in Construction? trackquestion.title=Keep Track menu.options.track=Keep Track (Shift-Enter) iconhelp.indicate=Preview of construction results iconhelp.nohelp=No help available! # Version 2.42 objects.draw=Paint with Mouse menu.options.cleardraw=Clear Painting (Esc) iconhelp.draw=Paint with Mouse message.draw=Paint with Mouse (ESC to clear) shortcuts.draw=; # Version 2.43 message.rename=Rename A,B,C,...: Select objects! iconhelp.rename=Rename A,B,C,... objects.rename=Rename A,B,C,... shortcuts.rename=: iconhelp.anglereduce=Don't show angle ray # Version 2.45 menu.settings.smartboard=Smartboard Mode shortcuts.zoom=% objects.zoom=Zoom with Mouse message.zoom=Drag center, or zoom in and out # Version 2.46 menu.special.restricticons=Restricted Icon Set # Version 2.47 menu.settings.indicate.simple=Indicate Points only menu.settings.beginner=Beginner Mode question.again=Always ask this question. # Version 2.49 definemacro.parameters=Parameter Prompt(s) ("=name" fixes) # Version 2.53 menu.actions.angles=Angles menu.actions.circles=Circles menu.actions.lines=Lines menu.actions.points=Points # Version 3.00 info.title=Context Help info.related=Related Topics info.notfound=Topic not found! info.noresults=String not found! info.searchresults=- Search results - info.select=- Select - info.search=Search info.back=Back info.start=Start iconhelp.info=Context help menu.help.info=Context help myfiledialog.homedir=CaR Files myfiledialog.windowshome=My Documents myfiledialog.mkdir=Make Directory myfiledialog.back=Back menu.file.alwaysclearmacros=Clear Macros before Loading about.language=Language bmpscaler.72dpi=72 dpi bmpscaler.300dpi=300 dpi # Version 3.01 menu.settings.backups=Backups # Version 3.02 menu.options.hideduplicates=Hide Duplicates # Version 3.03 menu.options.function=Create a function or curve text.function=Function ( % , % ) function.varmin=From function.varmax=To function.dvar=Step function.var=Variable function.y=Expression for Y iconhelp.function=Create a Function+(Ctrl: Create a user defined function) menu.options.editlast=Edit last Object iconhelp.control.edit=Edit last Object iconhelp.control.hide=Hide Duplicates edit.function.title=Function or Curve iconhelp.control.runmacro=Run last macro again # Version 3.05 point.type.cross=Cross point.type.dcross=Diagonal Cross shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=Unit menu.special.break=Breakpoints menu.bp.setbreak=Set Breakpoint menu.bp.clearbreak=Clear Breakpoint menu.bp.sethidingbreak=Set Hiding Breakpoint menu.bp.animatebreak=Animate Breakpoints iconhelp.animatebreak=Animate breakpoints message.animatebreak=Animate breakpoints: click to stop (shift left/right for speed)! menu.special.exporttemplate=HTML Export with Templates templateload.open=Load Template templateload.open.action=Open menu.settings.doubleclick=Double click for macros export.codebase=Codebase # Version 3.12 edit.equation=Equation # Version 3.23 menu.settings.squarepoints=Draw points always as squares # Version 3.37 menu.options.export=Graphic Export Settings menu.settings.minwidth=Minimal line width is 1 menu.settings.minpointsize=Respect minimal point size menu.settings.minfontsize=Respect minimal font size menu.options.minpointsize=Minimal Point Size menu.options.minfontsize=Minimal Font Size # Version 3.38 menu.settings.scalepdf=Scale PDF and EPS output 1:1 # Version 3.41 menu.file.clip=Clip for Graphics Output ... clip.title=Set Clipping clip.width=Width clip.height=Height clip.screen=No Clipping # Version 3.44 iconhelp.large=Use large font size iconhelp.bold=Use bold font menu.options.largefont=Large Font Size menu.options.boldfont=Bold Font warning.previewframe=Frame larger than window! message.move.select=Move: Select a point (shift: more points, ctrl: show old state)! # Version 3.46 iconbar.showseparators=Show Separators # Version 3.48 menu.options.printscaler=Set Export Size ... menu.options.exportsettings=Special Export Settings ... printscaler.title=Set Export Size printscaler.width=Width (in cm) printscaler.height=Height (in cm) printscaler.dpi=Resolution (in dpi, default 300) printscaler.linewidth=Line Width (in cm, default 0.02) printscaler.pointsize=Point Size (in cm, default 0.07) printscaler.textsize=Text Size (in cm, default 0.3) # Version 3.49 printscaler.screen=300 DPI printscaler.w=Width (in pixel) printscaler.h=Height (in pixel) printscaler.scale=Scale (relativ to screen) printscaler.middle=Cut out from screen printscaler.sizes=Use Values menu.file.savepng=Save Graphics as PNG warning.preview=Preview will not work completely with Java 1.1 iconedit.showseparators=Show Separators printscaler.aspect=Keep Aspect Ratio printscaler.presets=Presets printscaler.preset=Make a Choice printscaler.preset.300dpi=Exactly scaled with 300 DPI printscaler.preset.300dpi6=6 cm Width with 300 DPI printscaler.preset.300dpi16=16 cm Width with 300 DPI printscaler.preset.window=Window Size printscaler.preset.clip50=Window Size Clipped 50% message.saving=Please wait! menu.options.printscalepreview=Export Preview (Ctrl-F3) date=Build # Version 3.51 help=Help # Version 3.61 editconditionals.title=Edit Conditionals editconditionals.hidden=Hidden editconditionals.superhidden=Completely Hidden editconditionals.visible=Normal editconditionals.showname=Show Name editconditionals.showvalue=Show Value editconditionals.background=Background editconditionals.solid=Not Transparent exception.superfluous=Superfluous Text in Expression # Version 3.63 select.comment.title=Macro Comment # Version 3.68 edit.area.area=Area # Version 3.73 myfiledialog.oldfiles=Old Files # Version 3.74 iconhelp.load=Load Construction (Ctrl-o) iconhelp.save=Save Construction (Ctrl-s) iconhelp.new=New Construction (Ctrl-n)+Ctrl: Load defaults # Version 3.81 warning.loadbackground=Error loading background # Version 3.9 function.x=Expression for X (empty for functions) # Version 3.91 constructiondisplay.select=Select constructiondisplay.all=All Objects constructiondisplay.visible=Visible Objects (Alt-Ctrl-9) constructiondisplay.points=Points constructiondisplay.lines=Lines constructiondisplay.circles=Circles constructiondisplay.angles=Angles constructiondisplay.other=Other Objects menu.file.copypng=Copy to Clipboard exception.clipboardcopy=Copy failed! menu.options.finegrid=Axis only # Vesion 3.93 edit.function.center=Set Center edit.function.free=Release Center message.setcenter=Select the center point! # Vesion 3.94 message.edit=Edit: Objekt (shift: more objects, ctrl: conditionals)? # Version 3.97 error.image=Image not in same folder as construction? filedialog.imageload=Load Image filedialog.imageload.action=Load prompt.image=image(,,,) objects.image=Image shortcuts.image=_ # Version 3.98 exception.depends=Object % depends on current object. error.depends=Object % depends on current object. constructiondisplay.sorted=Sorted by Order of Construction (Alt-Ctrl-0) # Version 3.99 edit.alias=Alias constructiondisplay.expressions=Expressions # Version 4.00 iconhelp.image=Load Image (_) message.image=Image anchor point % message.image.last=Last image anchor point (or choose selected point) editconditionals.z=Z-Buffer Value # Version 4.01 name.FixedAngle=Fixed Angle # Version 4.04 menu.moresettings=Settings menu.settings.language=Set Language language.title=Set Language language.prompt=Language for next program start # Version 4.05 constructiondisplay.invalid=Invalid Objects # Version 4.08 menu.settings.constructiondisplay=Permanent Construction Display (F11) # Version 4.09 constructiondisplay.editconditions=Edit Conditions constructiondisplay.delete=Delete selected Objects constructiondisplay.hide=Hide or Show (Alt-Ctrl-4) constructiondisplay.superhide=Super Hide (Alt-Ctrl-5) # Version 4.2 edit.expression.slider=Show as Slider menu.grid.options=Grid Options menu.options.leftsnap=Snap with Left Button Drag menu.settings.boundingbox=Create Bounding Box (bb) file # Version 4.3 latexsettings.title=Setup LaTeX export latexsettings.boundingbox=Create Bounding box bb-file latexsettings.latexinput=Create LaTeX idx-file latexsettings.doubledollar=LaTeX does $$...$$ latexsettings.dollar=LaTeX does $...$ latexsettings.nodollar=LaTeX does all other strings latexsettings.fullpath=Use file path printscaler.preset.latex10=LaTeX 10pt printscaler.preset.300dpi12=12 cm width with 300 DPI printscaler.latex=Save for LaTeX menu.background.usewidth=Adjust height only # Version 4.4 menu.options.restricted=Restrict Intersections menu.options.sizes=Set Sizes ... sizesdialog.title=Sizes minlinesize.prompt=Minimal line width (default: 1) minpointsize.prompt=Minimal point size (default: 3) minfontsize.prompt=Minimal font size (default: 12) arrowsize.prompt=Arrow size (default: 10) selectionsize.prompt=Selection size (default: 1.5) warning.loadmacros=Error while loading a macro! warning.macrodefinition=% is used, but is not in macro! edit.circle.bounds=Show as Arc edit.circle.range=Set Arc ... # Version 4.5 edit.track.dmin=Minimal step (default 0.001) # Version 4.6 menu.settings.smallicons=Use small icons menu.settings.oldicons=Use old icons # Version 4.7 # Fix iconhelp.objecttracker # Fix message.objecttracker.object text.trackof=Track of % when % changes # Version 5 # Fix error.image edit.discrete=Discrete error.fixedsegment=Cannot fix this segment! export.zoom=Zoom with mouse export.popup=Popup menu # Version 5.1 edit.intersection.alternate=Can alternate export.restrictedmove=Restrict Movements # Version 6.0 # Fix message.boundedpoint # Fix iconhelp.new message.bindpoint=Bind point to object (Shift: continuous, Ctrl: inside object) edit.point.inside=Inside object edit.point.increment=Grid increment (0=free) edit.more=More ... menu.settings.more=Show button for conditional formats menu.file.loadexamples=Load Example ... menu.options.editgrid=Edit coordinate grid ... # Version 6.1 constructiondisplay.description=Show Description (Alt-Ctrl-1) constructiondisplay.size=Show Size or Coordinates (Alt-Ctrl-2) constructiondisplay.formula=Show Formula (Alt-Ctrl-3) menu.settings.germanpoints=Use | in coordinates # Version 6.2 # fix iconhelp.function menu.options.userfunction=User defined Function function.vars=Variables function.f=Function expression # Version 6.4 menu.special.macrobar=Macro bar menu.special.defaultmacrosinbar=Show default macros help.related=Related topics help.nexttopic=Next topic ./src/rene/zirkel/docs/ZirkelProperties_ru.properties0000770000175000017500000027204110655647770022111 0ustar yvesyveslanguage=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 (ru) version=\u0412\u0435\u0440\u0441\u0438\u044f homefile=index.html homepage=http://mathsrv.ku-eichstaett.de/MGF/homes/grothmann/java/zirkel/doc_ru/ about.title=\u041e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 about.name=Zirkel (\u0426\u0438\u0440\u043a\u0443\u043b\u044c) about.programmed=\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430... title=\u0428\u043a\u043e\u043b\u044c\u043d\u0430\u044f \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c ok=OK cancel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c done=\u0413\u043e\u0442\u043e\u0432\u043e! message=\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 yes=\u0414\u0430 no=\u041d\u0435\u0442 abort=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c true=\u0412\u0435\u0440\u043d\u043e false=\u041d\u0435\u0432\u0435\u0440\u043d\u043e warning.nojob=\u041d\u0435\u0442 \u0437\u0430\u0434\u0430\u043d\u0438\u044f! warning.print=\u041f\u0435\u0447\u0430\u0442\u044c \u043f\u0440\u0435\u0440\u0432\u0430\u043d\u0430. warning.reset=\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u043e\u0448\u043b\u043e \u0432 \u0441\u0438\u043b\u0443. question.title=\u0412\u043e\u043f\u0440\u043e\u0441 question.intersection=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435? question.pointon=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u043d\u0430 \u044d\u0442\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0435? colors.black=\u0427\u0435\u0440\u043d\u044b\u0439 colors.blue=\u0421\u0438\u043d\u0438\u0439 colors.green=\u0417\u0435\u043b\u0435\u043d\u044b\u0439 colors.brown=\u041a\u043e\u0440\u0438\u0447\u043d\u0435\u0432\u044b\u0439 colors.cyan=\u0413\u043e\u043b\u0443\u0431\u043e\u0439 colors.red=\u041a\u0440\u0430\u0441\u043d\u044b\u0439 objects.point=\u0422\u043e\u0447\u043a\u0430 objects.segment=\u041e\u0442\u0440\u0435\u0437\u043e\u043a objects.line=\u041f\u0440\u044f\u043c\u0430\u044f objects.ray=\u041b\u0443\u0447 objects.circle=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c objects.intersection=\u041f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 objects.move=\u0421\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443 objects.hide=\u0421\u043a\u0440\u044b\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 objects.edit=\u041f\u0440\u0430\u0432\u043a\u0430 \u0442\u043e\u0447\u043a\u0438 objects.tracker=\u0422\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u043a\u0438 \u0438\u043b\u0438 \u043b\u0438\u043d\u0438\u0438 objects.objecttracker=\u0422\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u043a\u0438 \u0438\u043b\u0438 \u043b\u0438\u043d\u0438\u0438 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 objects.parallel=\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u044f\u043c\u0430\u044f objects.plumb=\u041f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440 objects.circle3=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u0442\u0440\u0451\u043c \u0442\u043e\u0447\u043a\u0430\u043c objects.midpoint=\u0421\u0440\u0435\u0434\u0438\u043d\u043d\u0430 objects.quadric=\u041a\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u0435\u0447\u0435\u043d\u0438\u0435 objects.angle=\u0423\u0433\u043e\u043b objects.boundedpoint=\u0422\u043e\u0447\u043a\u0430 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 objects.parameter=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b objects.targets=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0446\u0435\u043b\u0435\u0432\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b objects.definejob=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435 objects.runmacro=\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 objects.delete=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0438\u0445 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432 objects.reorder=\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0444\u043e\u043d\u043e\u043c objects.animate=\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f objects.expression=\u0410\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 objects.area=\u041c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a objects.text=\u0422\u0435\u043a\u0441\u0442 objects.fixedcircle=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 objects.fixedangle=\u0424\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0443\u0433\u043e\u043b objects.fixedsegment=\u041e\u0442\u0440\u0435\u0437\u043e\u043a \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 iconhelp.point=\u0422\u043e\u0447\u043a\u0430 iconhelp.segment=\u041e\u0442\u0440\u0435\u0437\u043e\u043a iconhelp.line=\u041f\u0440\u044f\u043c\u0430\u044f iconhelp.ray=\u041b\u0443\u0447 iconhelp.circle=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c iconhelp.intersection=\u041f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 iconhelp.move=\u0414\u0432\u0438\u0433\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443 iconhelp.hide=\u0421\u043a\u0440\u044b\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 iconhelp.edit=\u041f\u0440\u0430\u0432\u043a\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 iconhelp.tracker=\u0422\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u043a\u0438 \u0438\u043b\u0438 \u043f\u0440\u044f\u043c\u043e\u0439 iconhelp.objecttracker=\u0410\u0432\u0442\u043e\u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u043a\u0438 \u0438\u043b\u0438 \u043f\u0440\u044f\u043c\u043e\u0439 iconhelp.parallel=\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u044f\u043c\u0430\u044f iconhelp.plumb=\u041f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440 iconhelp.circle3=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u0442\u0440\u0451\u043c \u0442\u043e\u0447\u043a\u0430\u043c iconhelp.midpoint=\u0421\u0440\u0435\u0434\u0438\u043d\u0430 iconhelp.quadric=\u041a\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u044f\u0442\u0438 \u0442\u043e\u0447\u043a\u0430\u043c iconhelp.angle=\u0423\u0433\u043e\u043b iconhelp.boundedpoint=\u0422\u043e\u0447\u043a\u0430 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 iconhelp.hidden=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c/\u0441\u043a\u0440\u044b\u0442\u044c \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b iconhelp.color=\u0426\u0432\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e iconhelp.type=\u0422\u0438\u043f \u0442\u043e\u0447\u043a\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e iconhelp.type0=\u0422\u0438\u043f \u0442\u043e\u0447\u043a\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e iconhelp.thickness=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e iconhelp.back=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 iconhelp.thickness0=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e iconhelp.partial=\u041d\u0435\u043f\u043e\u043b\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438 iconhelp.plines=\u0427\u0430\u0441\u0442\u0438 \u043f\u0440\u044f\u043c\u044b\u0445 iconhelp.arrow=\u041e\u0442\u0440\u0435\u0437\u043a\u0438 \u0432 \u0432\u0438\u0434\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 iconhelp.showcolor=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430 iconhelp.runmacro=\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 iconhelp.macro=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 (\u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442) iconhelp.expression=\u0410\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 iconhelp.showvalue=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430 iconhelp.showname=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 iconhelp.obtuse=\u0421\u0442\u0440\u043e\u0438\u0442\u044c \u0443\u0433\u043b\u044b \u0431\u043e\u043b\u044c\u0448\u0435 180\u00b0 iconhelp.solid=\u041d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c iconhelp.longnames=\u041f\u043e\u043b\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 iconhelp.grid=\u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043d\u0430\u044f \u0441\u0435\u0442\u043a\u0430 iconhelp.comment=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 iconhelp.defaults=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e iconhelp.macro0=\u041c\u0430\u043a\u0440\u043e\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b/\u0426\u0435\u043b\u0435\u0432\u044b\u0435 \u041e\u0431\u044a\u0435\u043a\u0442\u044b/\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 iconhelp.visual=\u0411\u0435\u0437 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u0432\u043e\u0434\u0430 iconhelp.replay=\u041f\u0440\u043e\u0438\u0433\u0440\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 iconhelp.oneforward=\u0412\u043f\u0435\u0440\u0435\u0434 iconhelp.fastforward=\u041f\u0435\u0440\u0435\u043c\u043e\u0442\u043a\u0430 \u0432\u043f\u0435\u0440\u0435\u0434 iconhelp.allforward=\u0412 \u043a\u043e\u043d\u0435\u0446 iconhelp.oneback=\u041d\u0430\u0437\u0430\u0434 iconhelp.fastback=\u041f\u0435\u0440\u0435\u043c\u043e\u0442\u043a\u0430 \u043d\u0430\u0437\u0430\u0434 iconhelp.allback=\u0412 \u043d\u0430\u0447\u0430\u043b\u043e iconhelp.close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c iconhelp.area=\u041c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a iconhelp.text=\u041c\u043d\u043e\u0433\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 iconhelp.fixedcircle=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0440\u0430\u0434\u0438\u0443\u0441\u043e\u043c iconhelp.fixedangle=\u0423\u0433\u043e\u043b \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b iconhelp.fixedsegment=\u041e\u0442\u0440\u0435\u0437\u043e\u043a \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 iconhelp.animate=\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0442\u043e\u0447\u043a\u0438 iconhelp.delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043c\u043a\u0430\u043c\u0438 iconhelp.undo=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 iconhelp.nextbreak=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044e iconhelp.setbreak=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0438 shortcuts.point=p shortcuts.segment=s shortcuts.line=g shortcuts.ray=r shortcuts.circle=c shortcuts.intersection=i shortcuts.move=m shortcuts.hide=h shortcuts.edit=e shortcuts.tracker=t shortcuts.objecttracker=o shortcuts.parallel=1 shortcuts.plumb=2 shortcuts.circle3=3 shortcuts.midpoint=4 shortcuts.quadric=$ shortcuts.angle=a shortcuts.boundedpoint=5 shortcuts.definejob=6 shortcuts.parameter=7 shortcuts.targets=8 shortcuts.runmacro=9 shortcuts.delete=Del shortcuts.reorder=! shortcuts.animate=" shortcuts.expression=x shortcuts.area=0 shortcuts.text=b shortcuts.fixedcircle=, shortcuts.fixedangle=. shortcuts.fixedsegment=# shortcuts.color.0=(Ctrl-1) shortcuts.color.1=(Ctrl-2) shortcuts.color.2=(Ctrl-3) shortcuts.color.3=(Ctrl-4) shortcuts.showcolor.0=(Alt-1) shortcuts.showcolor.1=(Alt-2) shortcuts.showcolor.2=(Alt-3) shortcuts.showcolor.3=(Alt-4) shortcuts.showcolor.4= shortcuts.showcolor.5= shortcuts.pointtype.0=(Ctrl-5) shortcuts.pointtype.1=(Ctrl-6) shortcuts.pointtype.2=(Ctrl-7) shortcuts.pointtype.3=(Ctrl-8) shortcuts.thickness.0=(Alt-5) shortcuts.thickness.1=(Alt-6) shortcuts.thickness.2=(Alt-7) menu.file=\u0424\u0430\u0439\u043b menu.file.clearmacros=\u0423\u0431\u0440\u0430\u0442\u044c \u0432\u0430\u0448\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u044b menu.file.load=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435...(Ctrl-o) menu.file.loadjob=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435...(Ctrl-j) menu.file.savejob=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435...(Ctrl-k) menu.file.save=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 (Ctrl-s) menu.file.saveas=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043a\u0430\u043a...(Ctrl-a) menu.file.includemacros=\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0441\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b menu.file.exit=\u0412\u044b\u0445\u043e\u0434 (Alt-F4) menu.file.print=\u041f\u0435\u0447\u0430\u0442\u044c... menu.file.print.isoscale=\u041c\u0430\u0441\u0448\u0442\u0430\u0431 1:1 \u0432 \u0441\u043c menu.file.savebmp=BMP-\u0444\u0430\u0439\u043b... menu.file.savefig=FIG-\u0444\u0430\u0439\u043b... menu.file.loadrun=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c run-\u0444\u0430\u0439\u043b...(Ctrl-r) menu.file.editrun=\u041f\u0440\u0430\u0432\u043a\u0430 run-\u0444\u0430\u0439\u043b\u0430...(Ctrl-x) menu.actions=\u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f menu.actions.elementary=\u041f\u0440\u043e\u0441\u0442\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b menu.actions.complex=\u0421\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b menu.actions.fixed=\u0424\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b menu.actions.move=\u0414\u0438\u043d\u0430\u043c\u0438\u043a\u0430 menu.actions.decorative=\u0421\u043b\u043e\u0436\u043d\u044b\u0435/\u0434\u0435\u043a\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b menu.options=\u0421\u0442\u0438\u043b\u044c menu.options.visual=\u0411\u0435\u0437 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u0432\u043e\u0434\u0430 (Ctrl-F6) menu.options.hidden=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b (F9) menu.options.comment=\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 (F10) menu.options.constructiondisplay=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 (F11) menu.options.grid=\u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043d\u0430\u044f \u0441\u0435\u0442\u043a\u0430 (F12) menu.options.setgrid=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0448\u0438\u0440\u0438\u043d\u0443 \u0441\u0435\u0442\u043a\u0438... menu.options.showcolor=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0446\u0432\u0435\u0442 menu.options.defaultcolor=\u0426\u0432\u0435\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e menu.options.defaultthickness=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e menu.options.defaulttype=\u0422\u0438\u043f \u0442\u043e\u0447\u043a\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e menu.options.all=\u0412\u0441\u0435 menu.options.setdigits=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c menu.options.shownames=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (Ctrl-F6) menu.options.longnames= \u041f\u043e\u043b\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (Ctrl-F8) menu.options.obtuse=\u0421\u0442\u0440\u043e\u0438\u0442\u044c \u0443\u0433\u043e\u043b\u044b \u0431\u043e\u043b\u044c\u0448\u0435 180\u00b0 (Ctrl-F12) menu.options.solid=\u041d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c menu.options.showvalues=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430 (Ctrl-F7) menu.options.partial=\u041d\u0435\u043f\u043e\u043b\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438 (Ctrl-F9) menu.options.plines=\u0427\u0430\u0441\u0442\u0438 \u043f\u0440\u044f\u043c\u044b\u0445 (Ctrl-F10) menu.options.arrow=\u0421\u0442\u0440\u0435\u043b\u043a\u0438 (Ctrl-F11) menu.options.editicons=\u041f\u0440\u0430\u0432\u043a\u0430 \u043d\u0430\u0431\u043e\u0440\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 menu.options.back=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 menu.options.undo=\u041e\u0442\u043c\u0435\u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f (Ctrl-z) menu.zoom=\u041c\u0430\u0441\u0448\u0442\u0430\u0431 \u0438 \u0441\u0434\u0432\u0438\u0433 menu.zoom.in=\u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 (+) menu.zoom.out=\u0423\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 (-) menu.zoom.left=\u0412\u043b\u0435\u0432\u043e (\u043a\u0443\u0440\u0441\u043e\u0440-\u0432\u043b\u0435\u0432\u043e) menu.zoom.right=\u0412\u043f\u0440\u0430\u0432\u043e (\u043a\u0443\u0440\u0441\u043e\u0440-\u0432\u043f\u0440\u0430\u0432\u043e) menu.zoom.up=\u0412\u0432\u0435\u0440\u0445 (\u043a\u0443\u0440\u0441\u043e\u0440-\u0432\u0432\u0435\u0440\u0445) menu.zoom.down=\u0412\u043d\u0438\u0437 (\u043a\u0443\u0440\u0441\u043e\u0440-\u0432\u043d\u0438\u0437) menu.macros=\u041c\u0430\u043a\u0440\u043e\u0441 menu.special.definemacro=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 (Ctrl-F5) menu.special.runmacro=\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441...(F5) menu.special.savemacros=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441... menu.special.loadmacros=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 ... menu.special.deletemacros=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441... menu.special=\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 menu.special.testjob=\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435 (Ctrl-F1) menu.special.jobcomment=\u0422\u0435\u043a\u0441\u0442 \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f... (F8) menu.special.export=\u0412 \u0432\u0438\u0434\u0435 HTML... (Ctrl-e) menu.special.replay=\u041f\u0440\u043e\u0438\u0433\u0440\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 menu.help=\u041f\u043e\u043c\u043e\u0449\u044c menu.help.about=\u041e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 menu.help.browser=\u041f\u043e\u043c\u043e\u0449\u044c \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 menu.help.text=\u041f\u0435\u0440\u0432\u0430\u044f \u043f\u043e\u043c\u043e\u0449\u044c menu.help.configure=\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 menu.help.help=\u041f\u043e\u043c\u043e\u0449\u044c (F1) menu.help.macros=\u041e \u043c\u0430\u043a\u0440\u043e\u0441\u0435 menu.help.tools=\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b menu.help.gui=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 menu.help.interactive=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f menu.help.tips=\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0432\u0435\u0442\u044b menu.settings=\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 menu.settings.fullicons=\u0414\u0432\u0430 \u043f\u043e\u043b\u043d\u044b\u0445 \u0440\u044f\u0434\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 menu.settings.utf=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 UTF-8 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438 menu.settings.autohide=\u0421\u043a\u0440\u044b\u0442\u044c \u0432\u0442\u043e\u0440\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f menu.settings.iconbartop=\u041f\u0430\u043d\u0435\u043b\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430\u0434 \u0447\u0435\u0440\u0442\u0435\u0436\u043e\u043c menu.settings.showtips=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 menu.settings.simplegraphics=\u0412\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0433\u0440\u0430\u0444\u0438\u043a\u0443 menu.settings.sure=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435\u043c menu.settings.pointon=\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0442\u043e\u0447\u043a\u0438 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 menu.settings.intersection=\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f menu.settings.choice=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u0438\u0430\u043b\u043e\u0433 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 menu.settings.movename=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f menu.settings.movefixname=\u0417\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f menu.settings.restricted=\u0428\u043a\u043e\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c menu.colors=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0446\u0432\u0435\u0442\u0430 colors.default=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e colors.color0=\u0426\u0432\u0435\u0442 1 (\u0427\u0435\u0440\u043d\u044b\u0439) colors.color1=\u0426\u0432\u0435\u0442 2 (\u0417\u0435\u043b\u0435\u043d\u044b\u0439) colors.color2=\u0426\u0432\u0435\u0442 3 (\u0421\u0438\u043d\u0438\u0439) colors.color3=\u0426\u0432\u0435\u0442 4 (\u041a\u043e\u0440\u0438\u0447\u043d\u0435\u0432\u044b\u0439) colors.color4=\u0426\u0432\u0435\u0442 5 (\u0413\u043e\u043b\u0443\u0431\u043e\u0439) colors.color5=\u0426\u0432\u0435\u0442 6 (\u041a\u0440\u0430\u0441\u043d\u044b\u0439) colors.background=\u0424\u043e\u043d colors.select=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0446\u0432\u0435\u0442 colors.target=\u0417\u0430\u0434\u0430\u0442\u044c \u0446\u0432\u0435\u0442 myfiledialog.dir=\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f myfiledialog.file=\u0424\u0430\u0439\u043b myfiledialog.pattern=\u0428\u0430\u0431\u043b\u043e\u043d filedialog.open=\u041e\u0442\u043a\u0440\u044b\u0442\u044c filedialog.saveas=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a... filedialog.open.action=\u041e\u0442\u043a\u0440\u044b\u0442\u044c filedialog.saveas.action=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c filedialog.htmlsave=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 HTML filedialog.htmlsave.action=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c pattern=*.zir *.job *.xml pattern.run=*.run pattern.macro=*.mcr pattern.export=*.html *.htm pattern.job=*.job *.xml pattern.bitmap=*.bmp save=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c load=\u041e\u0442\u043a\u0440\u044b\u0442\u044c abort=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c bound.release=\u041e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443 bound.bind=\u0421\u0432\u044f\u0437\u0430\u0442\u044c \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c bound.error=\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435\u043c! constructiondisplay.edit=\u041f\u0440\u0430\u0432\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 constructiondisplay.copy=\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440 edit.Title=\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 edit.name=\u0418\u043c\u044f edit.hidden=\u0421\u043a\u0440\u044b\u0442\u044c edit.text=\u0422\u0435\u043a\u0441\u0442 edit.fixed=\u0417\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c edit.color=\u0426\u0432\u0435\u0442 edit.ok=OK edit.cancel=\u041e\u0442\u043c\u0435\u043d\u0430 edit.showname=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u044f edit.point.title=\u041f\u0440\u0430\u0432\u043a\u0430 \u0442\u043e\u0447\u043a\u0438 edit.point.type=\u0422\u0438\u043f edit.point.x=X edit.point.y=Y edit.point.intersection=\u041e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u043e\u0442 edit.point.showvalue=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b edit.point.colortype=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 edit.point.bound=\u0413\u0440\u0430\u043d\u0438\u0446\u0430 edit.point.away=\u0414\u0430\u043b\u0435\u043a\u043e \u043e\u0442 edit.point.close= \u0411\u043b\u0438\u0437\u043a\u043e \u043a edit.point.free=\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 edit.line.title=\u041f\u0440\u0430\u0432\u043a\u0430 \u043f\u0440\u044f\u043c\u043e\u0439, \u043b\u0443\u0447\u0430, \u043e\u0442\u0440\u0435\u0437\u043a\u0430 edit.line.normal=\u041e\u0431\u044b\u0447\u043d\u0430\u044f\u0430\u044f edit.line.thick=\u0422\u043e\u043b\u0441\u0442\u0430\u044f edit.line.thin=\u0422\u043e\u043d\u043a\u0430\u044f edit.line.type=\u0422\u0438\u043f edit.segment.length=\u0414\u043b\u0438\u043d\u0430 edit.segment.showvalue=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u043b\u0438\u043d\u0443 edit.circle.title=\u041f\u0440\u0430\u0432\u043a\u0430 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438 edit.circle.length=\u0420\u0430\u0434\u0438\u0443\u0441 edit.circle.partial=\u041d\u0435\u043f\u043e\u043b\u043d\u044b\u0439 \u044d\u043a\u0440\u0430\u043d edit.circle.range=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d edit.circle.killrange=\u0423\u0431\u0440\u0430\u0442\u044c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d edit.plumb.restricted=\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 edit.angle.title=\u041f\u0440\u0430\u0432\u043a\u0430 \u0443\u0433\u043b\u0430 edit.angle.length=\u0420\u0430\u0437\u043c\u0435\u0440 edit.angle.displaysize=\u0420\u0430\u0437\u043c\u0435\u0440 \u043e\u043a\u043d\u0430 edit.angle.normal=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 edit.angle.small=\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c edit.angle.large=\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c edit.expression.title=\u041f\u0440\u0430\u0432\u043a\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f edit.expression=\u0410\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 edit.expression.prompt=\u041f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435 edit.area.title=\u041f\u0440\u0430\u0432\u043a\u0430 \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 edit.area.back=\u041d\u0430 \u0444\u043e\u043d\u0435 export.title=\u0412 \u0432\u0438\u0434\u0435 HTML export.pagetitle=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b export.width=\u0428\u0438\u0440\u0438\u043d\u0430 export.height=\u0412\u044b\u0441\u043e\u0442\u0430 export.jar=Jar-\u0444\u0430\u0439\u043b export.comment=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 export.file=\u0424\u0430\u0439\u043b \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f export.job=\u041e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435 export.color=\u0426\u0432\u0435\u0442 export.backgroundcolor=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0444\u043e\u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b export.appletcolor=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0444\u043e\u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b export.plain=\u041f\u043b\u043e\u0441\u043a\u0438\u0439 export.3D=\u0413\u0440\u0430\u043d\u0438\u0446\u0430 export.breaks=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0441 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f\u043c\u0438 export.icons=\u0413\u0440\u0430\u043d\u0438\u0446\u0430 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b export.full=\u0413\u0440\u0430\u043d\u0438\u0446\u0430, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u0441\u0442\u0430\u0442\u0443\u0441 export.nonvisual=\u0413\u0440\u0430\u043d\u0438\u0446\u0430, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u0432\u043e\u0434\u0430 export.style=\u0421\u0442\u0438\u043b\u044c \u0430\u043f\u043f\u043b\u0435\u0442\u0430 export.setcolor=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0446\u0432\u0435\u0442 export.savefirst=\u0424\u0430\u0439\u043b \u043d\u0435 \u0431\u044b\u043b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d! export.soltext=\u0420\u0435\u0448\u0435\u043d\u0438\u0435 export.stylesheet=\u0422\u0438\u043f \u0444\u0430\u0439\u043b\u0430 CSS export.solution=\u0424\u0430\u0439\u043b \u0440\u0435\u0448\u0435\u043d\u0438\u044f export.jumpsol=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e export.linksol=\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e export.savesol=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0444\u0430\u0439\u043b \u0440\u0435\u0448\u0435\u043d\u0438\u044f export.track=\u0422\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0442\u043e\u0447\u043a\u0438 export.digits=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0446\u0438\u0444\u0440\u044b export.setsize=\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 export.signature=\u0421\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044c Zirkel'\u044f \u0420. \u0413\u0440\u043e\u0442\u043c\u0430\u043d export.colors=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430 export.background=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0444\u043e\u043d help.title=\u041f\u043e\u043c\u043e\u0449\u044c help.error=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b \u043f\u043e\u043c\u043e\u0449\u0438! help.file=schoolgeometry.txt coloreditor.title=\u041f\u0440\u0430\u0432\u043a\u0430 \u0446\u0432\u0435\u0442\u0430 coloreditor.red=\u041a\u0440\u0430\u0441\u043d\u044b\u0439 coloreditor.green=\u0417\u0435\u043b\u0435\u043d\u044b\u0439 coloreditor.blue=\u0421\u0438\u043d\u0438\u0439 coloreditor.color=\u0415\u0449\u0451 \u0446\u0432\u0435\u0442\u0430 comment.title=\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044e comment.set=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c comment.cancel=\u041e\u0442\u043c\u0435\u043d\u0430 comment.close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c iconedit.title=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 iconedit.twobars=\u041f\u0430\u043d\u0435\u043b\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u0434\u0432\u0443\u043c\u044f \u0440\u044f\u0434\u0430\u043c\u0438 jobcomment.title=\u0423\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435 select.title=\u0412\u044b\u0431\u0440\u0430\u0442\u044c select.ok=OK select.cancel=\u041e\u0442\u043c\u0435\u043d\u0430 select.comment=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 select.all=\u0412\u0441\u0435 message.circle.midpoint=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c: \u0426\u0435\u043d\u0442\u0440? message.circle.radius=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c:\u0422\u043e\u0447\u043a\u0430 \u043d\u0430 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438 (SHIFT: \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0434\u0438\u0443\u0441)? message.fixedcircle.midpoint=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430: \u0426\u0435\u043d\u0442\u0440? message.fixedcircle.radius=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430:\u0420\u0430\u0434\u0438\u0443\u0441? message.edit=\u041f\u0440\u0430\u0432\u043a\u0430: \u043e\u0431\u044a\u0435\u043a\u0442? message.line.first=\u041f\u0440\u044f\u043c\u0430\u044f: \u041f\u0435\u0440\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430? message.line.second=\u041f\u0440\u044f\u043c\u0430\u044f: \u0412\u0442\u043e\u0440\u0430\u044f \u0442\u043e\u0447\u043a\u0430? message.ray.first=\u041b\u0443\u0447: \u043d\u0430\u0447\u0430\u043b\u043e? message.ray.second=\u041b\u0443\u0447: \u0432\u0442\u043e\u0440\u0430\u044f \u0442\u043e\u0447\u043a\u0430? message.move.select=\u0414\u0432\u0438\u0436\u0435\u043d\u0438\u0435: \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442! message.move.move=\u0414\u0432\u0438\u0436\u0435\u043d\u0438\u0435: \u0414\u0432\u0438\u0433\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443? message.point=\u0422\u043e\u0447\u043a\u0430: \u041f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443 (SHIFT: \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c)! message.segment.first=\u041e\u0442\u0440\u0435\u0437\u043e\u043a: \u041f\u0435\u0440\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430? message.segment.second=\u041e\u0442\u0440\u0435\u0437\u043e\u043a: \u0412\u0442\u043e\u0440\u0430\u044f \u0442\u043e\u0447\u043a\u0430 (SHIFT: \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u0438\u043d\u0443)? message.fixedsegment.first=\u041e\u0442\u0440\u0435\u0437\u043e\u043a \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b: \u041f\u0435\u0440\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430? message.fixedsegment.second=\u041e\u0442\u0440\u0435\u0437\u043e\u043a \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b: \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u0433\u0434\u0435-\u043d\u0438\u0431\u0443\u0434\u044c! message.intersection.first=\u041f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435: \u043f\u0435\u0440\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f? \u043cessage.intersection.second=\u041f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435: \u041f\u0435\u0440\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442? message.hide=\u0421\u043a\u0440\u044b\u0442\u044c/\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c: \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043e\u0431\u044a\u0435\u043a\u0442! message.tracker.select=\u0422\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f: \u0422\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0442\u043e\u0447\u043a\u0438 \u0438\u043b\u0438 \u043f\u0440\u044f\u043c\u043e\u0439? message.tracker.selectpoint=\u0422\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f: \u0442\u043e\u0447\u043a\u0430-\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c (SHIFT: \u0431\u043e\u043b\u044c\u0448\u0435)? message.tracker.move=\u0422\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f: \u0434\u0432\u0438\u0433\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443! message.objecttracker.select=\u0410\u0432\u0442\u043e\u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f: \u0412\u0435\u0434\u043e\u043c\u0430\u044f \u0442\u043e\u0447\u043a\u0430 (SHIFT: \u0431\u043e\u043b\u044c\u0448\u0435)? message.objecttracker.object=\u0410\u0432\u0442\u043e\u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f: \u041f\u0440\u044f\u043c\u0430\u044f \u0438\u043b\u0438 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c? message.objecttracker.selectpoint=\u0410\u0432\u0442\u043e\u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f: \u0442\u043e\u0447\u043a\u0430-\u0432\u043e\u0434\u0438\u0435\u043b\u044c? message.objecttracker.selectanypoint=\u0410\u0432\u0442\u043e\u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f: \u0415\u0449\u0451 \u0432\u0435\u0434\u043e\u043c\u0430\u044f \u0442\u043e\u0447\u043a\u0430? message.objecttracker.move=\u0410\u0432\u0442\u043e\u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f: \u0414\u0432\u0438\u0433\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443! message.objecttracker.start=\u0410\u0432\u0442\u043e\u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f: \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e! message.parallel.first=\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c: \u041f\u0440\u044f\u043c\u0430\u044f? message.parallel.second=\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c: \u0442\u043e\u0447\u043a\u0430? message.plumb.first=\u041f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440: \u041f\u0440\u044f\u043c\u0430\u044f? message.plumb.second=\u041f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440: \u0422\u043e\u0447\u043a\u0430? message.circle3.first=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c: \u041d\u0430\u0447\u0430\u043b\u043e \u0440\u0430\u0434\u0438\u0443\u0441\u0430? message.circle3.second=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c: \u041a\u043e\u043d\u0435\u0446 \u0440\u0430\u0434\u0438\u0443\u0441\u0430? message.circle3.midpoint=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c: \u0426\u0435\u043d\u0442\u0440? message.midpoint.first=\u0421\u0440\u0435\u0434\u0438\u043d\u0430: \u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043d\u0435\u0446? message.midpoint.second=\u0421\u0440\u0435\u0434\u0438\u043d\u0430: \u0412\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u043d\u0435\u0446? message.quadric=\u041a\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u0435\u0447\u0435\u043d\u0438\u0435: \u0422\u043e\u0447\u043a\u0430 \u043d\u043e\u043c\u0435\u0440 message.angle.first=\u0423\u0433\u043e\u043b: \u041f\u0435\u0440\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0443\u0433\u043b\u0430? message.angle.root=\u0423\u0433\u043e\u043b: \u0412\u0435\u0440\u0448\u0438\u043d\u0430 \u0443\u0433\u043b\u0430? message.angle.second=\u0423\u0433\u043e\u043b: \u0412\u0442\u043e\u0440\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0443\u0433\u043b\u0430 (SHIFT: \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440)? message.fixedangle.first=\u0423\u0433\u043e\u043b \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b: \u041f\u0435\u0440\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0443\u0433\u043b\u0430? message.fixedangle.root=\u0423\u0433\u043e\u043b \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b: \u0412\u0435\u0440\u0448\u0438\u043d\u0430 \u0443\u0433\u043b\u0430? message.fixedangle.second=\u0423\u0433\u043e\u043b \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b: \u0429\u0435\u043b\u043a\u043d\u0438\u0442\u0435 \u0435\u0449\u0451 \u0433\u0434\u0435-\u043d\u0438\u0431\u0443\u0434\u044c? message.label.select=\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u0434\u043f\u0438\u0441\u044c: \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0430\u0434\u043f\u0438\u0441\u044c! message.label.move=\u0421\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u0434\u043f\u0438\u0441\u044c: \u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u0434\u043f\u0438\u0441\u044c! message.boundedpoint=\u0422\u043e\u0447\u043a\u0430 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0435: \u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u043b\u0438 \u043f\u0440\u044f\u043c\u0430\u044f (SHIFT: \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c)? message.parameters=\u041c\u0430\u043a\u0440\u043e\u0441: \u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u0435\u043a\u0442\u044b? message.targets=\u041c\u0430\u043a\u0440\u043e\u0441: \u0426\u0435\u043b\u0435\u0432\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b? message.savejob.first=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435: \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442? message.savejob.second=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435: \u0426\u0435\u043b\u0435\u0432\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 (SHIFT: \u043d\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c)? message.savejob.third=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435: \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f? message.runmacro=\u041c\u0430\u043a\u0440\u043e\u0441 %: %. % - % message.runmacro.return=(\u041f\u0420\u041e\u0411\u0415\u041b \u0432\u044b\u0431\u043e\u0440 %) message.runmacro.fixes=(SHIFT - \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0431\u043e\u0440) message.delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c: \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442! message.reorder=\u041f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0438\u0442\u044c: \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442! message.expression=\u0410\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435: \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043c\u0435\u0441\u0442\u043e! message.area=\u0417\u0430\u043a\u0440\u0430\u0448\u0435\u043d\u043d\u044b\u0439 \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a: \u0432\u0435\u0440\u0448\u0438\u043d\u0430? message.text=\u0422\u0435\u043a\u0441\u0442: \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043c\u0435\u0441\u0442\u043e! message.animator.point=\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f: \u0410\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443? message.animator.segment=\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f: \u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u043b\u0438 \u043e\u0442\u0440\u0435\u0437\u043e\u043a? message.animator.running=\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f: \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c! message.range.first=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d: \u041f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0437 \u044d\u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0438... message.range.second=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d:... \u0434\u043b\u044f \u043a\u0430\u043a\u043e\u0439 \u0442\u043e\u0447\u043a\u0438? message.setaway.away=\u0414\u0430\u043b\u0435\u043a\u043e \u043e\u0442 \u044d\u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0438! message.setaway.close=\u0411\u043b\u0438\u0437\u043a\u043e \u043a \u044d\u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0438! objectsedit.title=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0430\u0442\u0440\u044b point.type.square=\u041a\u0432\u0430\u0434\u0440\u0430\u0442 point.type.diamond=\u0420\u043e\u043c\u0431 point.type.circle=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c point.type.dot=\u0422\u043e\u0447\u043a\u0430 color.type.normal=\u041e\u0431\u044b\u0447\u043d\u0430\u044f color.type.thick=\u0422\u043e\u043b\u0441\u0442\u0430\u044f color.type.thin=\u0422\u043e\u043d\u043a\u0430\u044f text.point=\u0422\u043e\u0447\u043a\u0430 \u043d\u0430 %, % text.line=\u041f\u0440\u044f\u043c\u0430\u044f \u0447\u0435\u0440\u0435\u0437 % \u0438 % text.segment=\u041e\u0442\u0440\u0435\u0437\u043e\u043a \u043e\u0442 % \u0434\u043e % text.segment.fixed=\u041e\u0442\u0440\u0435\u0437\u043e\u043a \u043e\u0442 % \u0434\u043e % \u0434\u043b\u0438\u043d\u044b % text.ray=\u041b\u0443\u0447 \u043e\u0442 % \u0447\u0435\u0440\u0435\u0437 % text.intersection=\u041f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 % \u0441 % text.circle=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u043a\u0440\u0443\u0433 % \u0447\u0435\u0440\u0435\u0437 % text.circle.fixed=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u043a\u0440\u0443\u0433 % \u0447\u0435\u0440\u0435\u0437 % \u0441 \u0440\u0430\u0434\u0438\u0443\u0441\u043e\u043c % text.fixedcircle=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u043a\u0440\u0443\u0433 % \u0441 \u0440\u0430\u0434\u0438\u0443\u0441\u043e\u043c % text.circle3=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u043a\u0440\u0443\u0433 % \u0441 \u0440\u0430\u0434\u0438\u0443\u0441\u043e\u043c \u043e\u0442 % \u0434\u043e % text.parallel=\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u044f\u043c\u0430\u044f \u0438\u0437 % \u043a % text.midpoint=\u0421\u0435\u0440\u0435\u0434\u0438\u043d\u0430 \u043c\u0435\u0436\u0434\u0443 % \u0438 % text.quadric=\u041a\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 % text.plumb=\u041f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440 \u0438\u0437 % \u043a % text.angle=\u0423\u0433\u043e\u043b % - % - % text.angle.fixed=\u0423\u0433\u043e\u043b % - % - % \u0440\u0430\u0432\u043d\u044b\u0439 % text.boundedpoint=\u0422\u043e\u0447\u043a\u0430 \u043d\u0430 % text.expression=\u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 "%" \u043d\u0430 %, % text.area=\u041c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a text.fixedangle=\u0423\u0433\u043e\u043b % - % \u0440\u0430\u0437\u043c\u0435\u0440\u0430 % name.Point=\u0422\u043e\u0447\u043a\u0430 name.Intersection=\u041f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 name.OtherIntersection=\u041f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 name.Circle=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c name.Circle3=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c name.Segment=\u041e\u0442\u0440\u0435\u0437\u043e\u043a name.Ray=\u041b\u0443\u0447 name.Line=\u041f\u0440\u044f\u043c\u0430\u044f name.TwoPointLine=\u041f\u0440\u044f\u043c\u0430\u044f \u0447\u0435\u0440\u0435\u0437 \u0434\u0432\u0435 \u0442\u043e\u0447\u043a\u0438 name.Parallel=\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c name.Midpoint=\u0421\u0435\u0440\u0435\u0434\u0438\u043d\u0430 name.Quadric=\u041a\u0432\u0430\u0434\u0440\u0430\u0442 name.Plumb=\u041f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440 name.Angle=\u0423\u0433\u043e\u043b name.PointOn=\u0422\u043e\u0447\u043a\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 name.Expression=\u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 name.Polygon=\u041c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a name.short.Point=P name.short.Intersection=I name.short.OtherIntersection=I name.short.Circle=c name.short.Circle3=c name.short.Segment=s name.short.Ray=r name.short.Line=l name.short.Parallel=p name.short.Midpoint=M name.short.Quadric=Q name.short.Plumb=pl name.short.Angle=a name.short.PointOn=OP name.short.Expression=E name.short.Polygon=poly prompt.point==P prompt.pointon==P() prompt.line==l(,) prompt.segment==s(,) prompt.ray==r(,) prompt.circle==c(,) prompt.circle3==c(,,) prompt.intersection==I(,) prompt.midpoint==M(,) prompt.quadric==Q(,,,,) prompt.parallel==pl(,) prompt.plumb==p(,) prompt.angle==a(,,) prompt.area=A(,,) popup.hidden=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b popup.replay=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 popup.empty=--- \u041c\u0430\u043a\u0440\u043e\u0441 --- replay.title=\u041f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044c reorder.title=\u0412\u0434\u0430\u0432\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 reorder.message=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435 reorder.notfound=\u041e\u0431\u044a\u0435\u043a\u0442 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d! reorder.warning=\u042d\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c! setgrid.title=\u0428\u0438\u0440\u0438\u043d\u0430 \u0441\u0435\u0442\u043a\u0438 setgrid.prompt=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u043e\u0432\u0443\u044e \u0448\u0438\u0440\u0438\u043d\u0443 \u0441\u0435\u0442\u043a\u0438 setgrid.set=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c definemacro.title=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 definemacro.name=\u0418\u043c\u044f definemacro.comment=\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043a \u043c\u0430\u043a\u0440\u043e\u0441\u0443 definemacro.parameters=\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c definemacro.noparams=\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u0430! definemacro.nomacro=\u041d\u0435\u0442 \u043c\u0430\u043a\u0440\u043e\u0441\u0430! definemacro.targetsonly=\u0421\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 definemacro.invisible=\u0421\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e definemacro.promptfor=\u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u0434\u043b\u044f... macro.replace.title=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 macro.replace=\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441: macro.replace.all=\u0412\u0441\u0435 macro.usage=\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u043c\u0430\u043a\u0440\u043e\u0441 (\u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438)! macro.prompt.title=\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c macro.prompt.prompt=\u0412\u0432\u0435\u0441\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 macro.prompt.illegal=\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435! digits.title=\u0420\u0430\u0441\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u0430 digits.edit=\u041f\u0440\u0430\u0432\u043a\u0430 digits.lengths=\u042d\u043a\u0440\u0430\u043d digits.angles=\u0423\u0433\u043b\u044b editrun.title=\u041f\u0440\u0430\u0432\u043a\u0430 run-\u0444\u0430\u0439\u043b\u0430 editrun.run=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c editrun.load=\u0414\u0440\u0443\u0433\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f sure.title=\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b? sure.macros=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b? sure.delete=\u041f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f? close.title=\u041a\u043e\u043d\u0435\u0446 close.prompt=\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443? file.exists.title=\u0424\u0430\u0439\u043b \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 file.exists.overwrite=\u0424\u0430\u0439\u043b \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442! \u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e? exception.nparams=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0447\u0438\u0441\u043b\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432! exception.notfound=\u041e\u0431\u044a\u0435\u043a\u0442 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d, \u0438\u043b\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f! exception.type=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0442\u0438\u043f \u043e\u0431\u044a\u0435\u043a\u0442\u0430! exception.expression=\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435! exception.canfix=\u041e\u0431\u044a\u0435\u043a\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d! exception.fix=\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435! exception.novalue=\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435! exception.elementary=\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438! exception.bracket=\u041f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u044b \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441\u043a\u043e\u0431\u043a\u0438! exception.quotes=\u041f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u044b \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043a\u0430\u0432\u044b\u0447\u043a\u0438! exception.dot=\u0412 \u0447\u0438\u0441\u043b\u0435 \u0434\u0432\u0435 \u0442\u043e\u0447\u043a\u0438! exception.nodigit=\u0412 \u0447\u0438\u0441\u043b\u0435 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0446\u0438\u0444\u0440\u044b! exception.function=\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f! exception.parameter=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438! exception.macro=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043c\u0430\u043a\u0440\u043e\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440! exception.name=\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u0438\u043c\u044f! exception.job=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440! exception.track=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u0438! exception.animate=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438! exception.boolean=\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0438\u0441\u0442\u0438\u043d\u043d\u044b\u043c \u0438\u043b\u0438 \u043b\u043e\u0436\u043d\u044b\u043c! exception.value=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435! exception.color=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0446\u0432\u0435\u0442! exception.colortype=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0442\u043e\u043b\u0449\u0438\u043d\u0430! exception.type=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0442\u0438\u043f \u0442\u043e\u0447\u043a\u0438! exception.macroparameter=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043c\u0430\u043a\u0440\u043e\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440! exception.macrotarget=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043c\u0430\u043a\u0440\u043e\u0437\u0430\u0434\u0430\u043d\u0438\u0435! exception.prompt=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442! exception.prompt.parameter=\u0418\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c! exception.parameters=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440! exception.brackets=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0441\u043a\u043e\u0431\u043a\u0438! exception.double=\u0422\u0430\u043a\u043e\u0435 \u0438\u043c\u044f \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442! error.setaway=\u042d\u0442\u0430 \u0442\u043e\u0447\u043a\u0430 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430! error.objecttracker.depends=\u0422\u043e\u0447\u043a\u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c! constructiondisplay.title=\u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 function.hide=\u0421\u043a\u0440\u044b\u0442\u044c function.hide.short=\u0441\u043a\u0440\u044b\u0442\u044c function.rename=\u0418\u043c\u044f function.rename.short=\u0438\u043c\u044f function.value=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 function.value.short=\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 function.window=\u041e\u043a\u043d\u043e function.window.short=\u043e\u043a\u043d\u043e function.color=\u0426\u0432\u0435\u0442 function.color.short=\u0446\u0432\u0435\u0442 function.thickness=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 function.thickness.short=\u0442\u043e\u043b\u0449\u0438\u043d\u0430 function.type=\u0422\u0438\u043f function.type.short=\u0442\u0438\u043f function.partial=\u0427\u0430\u0441\u0442\u0438\u0447\u043d\u044b\u0439 function.partial.short=\u0447\u0430\u0441\u0442\u0438\u0447\u043d\u044b\u0439 function.fill=\u0417\u0430\u043b\u0438\u0442\u044c function.fill.short=\u0437\u0430\u043b\u0438\u0442\u044c function.back=\u0424\u043e\u043d function.back.short=\u0444\u043e\u043d function.acute=\u041e\u0441\u0442\u0440\u044b\u0439 function.acute.short=\u043e\u0441\u0442\u0440\u044b\u0439 function.obtuse=\u0422\u0443\u043f\u043e\u0439 function.obtuse.short=\u0442\u0443\u043f\u043e\u0439 function.solid=\u0417\u0430\u043a\u0440\u0430\u0448\u0435\u043d\u043d\u044b\u0439 function.solid.short=\u0437\u0430\u043a\u0440\u0430\u0448\u0435\u043d\u043d\u044b\u0439 function restrict=\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 function restrict.short=\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 expression.value=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 configure.title=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440 configure.prompt=\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 # \u041d\u043e\u0432\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b: background.error=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 (GIF or JPG!). menu.background=\u0424\u043e\u043d menu.background.grab=\u0421\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043d\u0430 \u0444\u043e\u043d menu.background.clear=\u0421\u0442\u0438\u0440\u0435\u0442\u044c \u0444\u043e\u043d menu.background.load=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u043e\u043d\u043e\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 menu.background.usesize=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 menu.background.tile=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0444\u043e\u043d\u0430 menu.background.center=\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0444\u043e\u043d \u043f\u043e \u0446\u0435\u043d\u0442\u0440\u0443 iconhelp.grab=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u043b\u0438 \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0444\u043e\u043d filedialog.backgroundload=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u043e\u043d filedialog.backgroundload.action=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c # \u041d\u043e\u0432\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 2.14 menu.file.compress=\u0412\u0441\u0435\u0433\u0434\u0430 \u0441\u0436\u0438\u043c\u0430\u0442\u044c menu.file.savesvg=SVG-\u0444\u0430\u0439\u043b # \u0412\u0435\u0440\u0441\u0438\u044f 2.15 loading=\u0418\u0434\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430, \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435! # \u0412\u0435\u0440\u0441\u0438\u044f 2.18 \u0438 2.19 menu.settings.font.default=\u0428\u0440\u0438\u0444\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e menu.settings.font.bold=\u0416\u0438\u0440\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442 menu.settings.font.large=\u041a\u0440\u0443\u043f\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442 menu.file.saveeps=EPS-\u0444\u0430\u0439\u043b menu.fonts=\u0428\u0440\u0438\u0444\u0442 # \u0412\u0435\u0440\u0441\u0438\u044f 2.20 bmpscaler.title=\u0420\u0430\u0437\u043c\u0435\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f bmpscaler.width=\u0428\u0438\u0440\u0438\u043d\u0430 bmpscaler.height=\u0412\u044b\u0441\u043e\u0442\u0430 bmpscaler.scale=\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 (\u043d\u0430\u0436\u043c\u0438\u0442\u0435 "ENTER") bmpscaler.illegal=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 # \u0412\u0435\u0440\u0441\u0438\u044f 2.21 renamemacro.title=\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 renamemacro.name=\u041d\u043e\u0432\u043e\u0435 \u0438\u043c\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u0430 menu.special.renamemacro=\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441... # \u0412\u0435\u0440\u0441\u0438\u044f 2.23 savequestion.title=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 savequestion.qsave=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f? # \u0412\u0435\u0440\u0441\u0438\u044f 2.25 exception.printsize=\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f! iconhelp.nohelp=\u041f\u043e\u043c\u043e\u0449\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430! iconhelp.type?=\u0422\u0438\u043f \u0442\u043e\u0447\u043a\u0438 iconhelp.thickness?=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 iconhelp.color?=\u0426\u0432\u0435\u0442 iconhelp.filled=\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 iconhelp.isback=\u041d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0444\u043e\u043d\u0435 iconhelp.inverse=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0443\u0433\u043e\u043b iconhelp.angle?=\u0420\u0430\u0437\u043c\u0435\u0440 # \u0412\u0435\u0440\u0441\u0438\u044f 2.28 message.objecttracker.stop=\u0410\u0432\u0442\u043e\u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f: \u041f\u0440\u0435\u0440\u0432\u0430\u0442\u044c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e (SHIFT \u043f\u0440\u0430\u0432\u044b\u0439/\u043b\u0435\u0432\u044b\u0439 \u0434\u043b\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438)! # \u0412\u0435\u0440\u0441\u0438\u044f 2.31 menu.settings.indicate=\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043f\u043e\u0440\u043e\u0436\u0434\u0451\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 menu.options.other=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 menu.help.welcome=\u041d\u043e\u0432\u043e\u0441\u0442\u0438 \u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 iconhelp.twolines=\u041f\u0430\u043d\u0435\u043b\u044c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0440\u044f\u0434\u043e\u0432 iconhelp.qintersection=\u0421\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u043e \u0442\u043e\u0447\u043a\u0435 \u043d\u0430 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0438 iconhelp.qchoice=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u0438\u0430\u043b\u043e\u0433 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 iconhelp.qpointon=\u0421\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u043e \u0442\u043e\u0447\u043a\u0435 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 iconhelp.noindicate=\u041d\u0435 \u043e\u0442\u043c\u0435\u0447\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u043e\u0434 \u043c\u044b\u0448\u044c\u044e # \u0412\u0435\u0440\u0441\u0438\u044f 2.33 menu.file.new=\u041d\u043e\u0432\u043e\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 (Ctrl-n) # \u0412\u0435\u0440\u0441\u0438\u044f 2.34 edit.text.title=\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 edit.text.settings=\u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 menu.settings.filedialog=\u041e\u0442\u043c\u0435\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e-\u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u0434\u0438\u0430\u043b\u043e\u0433\u0430 # \u0412\u0435\u0440\u0441\u0438\u044f 2.35 menu.settings.bitmapbackground=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u043e\u043d\u043e\u0432\u044b\u0435 \u0446\u0432\u0435\u0442\u0430 \u0432 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 # \u0412\u0435\u0440\u0441\u0438\u044f 2.36 menu.file.savegraphics=\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443... menu.file.savepng=\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 (PNG-\u0444\u0430\u0439\u043b) bmpscaler.title=\u041c\u0430\u0441\u0448\u0442\u0430\u0431 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 # \u0412\u0435\u0440\u0441\u0438\u044f 2.37 menu.file.savepdf=PDF-\u0444\u0430\u0439\u043b iconhelp.chord=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0442\u0440\u0435\u0437\u043e\u043a # \u0412\u0435\u0440\u0441\u0438\u044f 2.39 message.setfixedangle.first=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0443\u0433\u043e\u043b: \u041f\u0435\u0440\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430? message.setfixedangle.second=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0443\u0433\u043e\u043b: \u0412\u0435\u0440\u0448\u0438\u043d\u0430? message.setfixedangle.third=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0443\u0433\u043e\u043b: \u0422\u0440\u0435\u0442\u044c\u044f \u0442\u043e\u0447\u043a\u0430? edit.fixedangle.set=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440... message.setfixedcircle.first=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c:\u041f\u0435\u0440\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430? message.setfixedcircle.second=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c:\u0412\u0442\u043e\u0440\u0430\u044f \u0442\u043e\u0447\u043a\u0430? edit.fixedcircle.set=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440... # \u0412\u0435\u0440\u0441\u0438\u044f 2.40 minpointsize.title=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u043e\u0447\u043a\u0438 minpointsize.prompt=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u043e\u0447\u043a\u0438 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 0.3) menu.settings.font.minpointsize=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u043e\u0447\u043a\u0438... # \u0412\u0435\u0440\u0441\u0438\u044f 2.41 name.short.Track=\u0422\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f text.track=\u0422\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f % \u043f\u043e\u043a\u0430 % \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f \u043f\u043e % trackquestion.keep=\u041f\u0440\u0435\u0440\u0432\u0430\u0442\u044c \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0432 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438? trackquestion.title=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044e menu.options.track=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044e (SHIFT-ENTER) iconhelp.indicate=\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f iconhelp.nohelp=\u041f\u043e\u043c\u043e\u0449\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430! # \u0412\u0435\u0440\u0441\u0438\u044f 2.42 objects.draw=\u0420\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043c\u044b\u0448\u044c\u044e menu.options.cleardraw=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0435 (Esc) iconhelp.draw=\u0420\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043c\u044b\u0448\u044c\u044e message.draw=\u0420\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043c\u044b\u0448\u044c\u044e (ESC \u0441\u0442\u0438\u0440\u0435\u0442\u044c) shortcuts.draw=; # \u0412\u0435\u0440\u0441\u0438\u044f 2.43 message.move.select=\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c: \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443 (SHIFT: \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435) message.rename=\u041d\u0430\u0437\u0432\u0430\u0442\u044c A,B,C,...: \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 iconhelp.rename=\u041d\u0430\u0437\u0432\u0430\u0442\u044c A,B,C,... objects.rename= \u041d\u0430\u0437\u0432\u0430\u0442\u044c A,B,C,... shortcuts.rename=: iconhelp.anglereduce=\u041d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043b\u0443\u0447 \u0443\u0433\u043b\u0430 # \u0412\u0435\u0440\u0441\u0438\u044f 2.45 menu.settings.smartboard=\u0420\u0435\u0436\u0438\u043c \u00abSmartboard\u00bb shortcuts.zoom=% objects.zoom=\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u044b\u0448\u044c\u044e message.zoom=\u0420\u0430\u0441\u0442\u044f\u043d\u0443\u0442\u044c \u0446\u0435\u043d\u0442\u0440, \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431 # \u0412\u0435\u0440\u0441\u0438\u044f 2.46 menu.special.restricticons=\u041c\u0430\u043b\u0430\u044f \u043f\u0430\u043d\u0435\u043b\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 # \u0412\u0435\u0440\u0441\u0438\u044f 2.47 menu.settings.indicate.simple=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0447\u043a\u0438 menu.settings.beginner=\u041d\u0430\u0447\u0430\u043b\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u043e\u0439\u043a\u0430 question.again=\u0412\u0441\u0435\u0433\u0434\u0430 \u044d\u0442\u043e \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0430\u0442\u044c. # \u0412\u0435\u0440\u0441\u0438\u044f 2.49 definemacro.parameters=\u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b: # \u0412\u0435\u0440\u0441\u0438\u044f 2.53 menu.actions.angles=\u0423\u0433\u043b\u044b menu.actions.circles=\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438 menu.actions.lines=\u041f\u0440\u044f\u043c\u044b\u0435 menu.actions.points=\u0422\u043e\u0447\u043a\u0438 # \u0412\u0435\u0440\u0441\u0438\u044f 3.00 info.title=\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u0430\u044f \u043f\u043e\u043c\u043e\u0449\u044c info.related=\u0421\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b info.notfound=\u0420\u0430\u0437\u0434\u0435\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d! info.noresults=\u0421\u0442\u0440\u043e\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430! info.searchresults=- \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430 - info.select=- \u0412\u044b\u0431\u043e\u0440 - info.search=\u041f\u043e\u0438\u0441\u043a info.back=\u041d\u0430\u0437\u0430\u0434 info.start=\u0417\u0430\u043f\u0443\u0441\u043a iconhelp.info=\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u0430\u044f \u043f\u043e\u043c\u043e\u0449\u044c menu.help.info=\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u0430\u044f \u043f\u043e\u043c\u043e\u0449\u044c myfiledialog.homedir=\u0424\u0430\u0439\u043b\u044b Zirkel'\u044f myfiledialog.windowshome=\u041c\u043e\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b myfiledialog.mkdir=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e myfiledialog.back=\u041d\u0430\u0437\u0430\u0434 menu.file.alwaysclearmacros=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 about.language=\u042f\u0437\u044b\u043a bmpscaler.72dpi=72 dpi bmpscaler.72dpi=300 dpi # \u0412\u0435\u0440\u0441\u0438\u044f 3.01 menu.settings.backups=\u0420\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0435 \u043a\u043e\u043f\u0438\u0438 # \u0412\u0435\u0440\u0441\u0438\u044f 3.02 menu.options.hideduplicates=\u0421\u043a\u0440\u044b\u0442\u044c \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b # \u0412\u0435\u0440\u0441\u0438\u044f 3.03 menu.options.function=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e text.function=\u0424\u0443\u043d\u043a\u0446\u0438\u044f ( % , % ) function.varmin=\u041e\u0442 function.varmax=\u0414\u043e function.dvar=\u0428\u0430\u0433 function.var=\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f function.x=X function y=Y iconhelp.function=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e menu.options.editlast=\u041f\u0440\u0430\u0432\u043a\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 iconhelp.control.edit=\u041f\u0440\u0430\u0432\u043a\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 iconhelp.control.hide=\u0421\u043a\u0440\u044b\u0442\u044c \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b edit.function.title=\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u043b\u0438 \u043a\u0440\u0438\u0432\u0430\u044f iconhelp.control.runmacro=\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u0441\u043d\u043e\u0432\u0430 # \u0412\u0435\u0440\u0441\u0438\u044f 3.05 point.type.cross=\u041a\u0440\u0435\u0441\u0442 point.type.dcross=\u041a\u0440\u0435\u0441\u0442\u0438\u043a shortcuts.pointtype.4=(Ctrl-9) shortcuts.pointtype.5=(Ctrl-0) edit.unit=\u0415\u0434\u0438\u043d\u0438\u0446\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f menu.special.break=\u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0438 menu.bp.setbreak=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0438 menu.bp.clearbreak=\u0423\u0431\u0440\u0430\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0438 menu.bp.sethidingbreak=\u0421\u043a\u0440\u044b\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c menu.bp.animatebreak=\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u043f\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f\u043c iconhelp.animatebreak=\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u043f\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f\u043c message.animatebreak=\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u043f\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f\u043c: \u0449\u0451\u043b\u0447\u043e\u043a \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 (SHIFT \u043a\u0443\u0440\u0441\u043e\u0440 \u0432\u043b\u0435\u0432\u043e/\u0432\u043f\u0440\u0430\u0432\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c)! menu.special.exporttemplate=\u0421\u0434\u0435\u043b\u0430\u0442\u044c HTML-\u0444\u0430\u0439\u043b \u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c templateload.open=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d templateload.open.action= \u041e\u0442\u043a\u0440\u044b\u0442\u044c menu.settings.doubleclick=\u0414\u043b\u044f \u043c\u0430\u043a\u0440\u043e\u0441 \u0449\u0451\u043b\u043a\u043d\u0443\u0442\u044c \u0434\u0432\u044f \u0440\u0430\u0437\u0430 export.codebase=Codebase??? # \u0412\u0435\u0440\u0441\u0438\u044f 3.12 edit.equation=\u0423\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 # \u0412\u0435\u0440\u0441\u0438\u044f 3.23 menu.settings.squarepoints=\u041e\u0442\u043c\u0435\u0447\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0438 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u043a\u043e\u043c # \u0412\u0435\u0440\u0441\u0438\u044f 3.37 menu.options.export=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a menu.settings.minwidth=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u043e\u043b\u0449\u0438\u043d\u0430 \u043b\u0438\u043d\u0438\u0439 1 menu.settings.minpointsize=\u0422\u043e\u0442 \u0436\u0435 \u043c\u0438\u043d\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u043e\u0447\u0435\u043a menu.settings.minfontsize=\u0422\u043e\u0442 \u0436\u0435 \u043c\u0438\u043d\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 minfontsize.title=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 minfontsize.prompt=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430(\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 12) menu.options.minpointsize=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u043e\u0447\u0435\u043a menu.options.minfontsize=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 # \u0412\u0435\u0440\u0441\u0438\u044f 3.38 menu.settings.scalepdf=\u041c\u0430\u0441\u0448\u0442\u0430\u0431 \u0434\u043b\u044f PDF \u0438 EPS \u0432\u044b\u0432\u043e\u0434\u0430 1:1 # \u0412\u0435\u0440\u0441\u0438\u044f 3.41 menu.file.clip=\u0420\u0435\u0437\u043a\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 ... clip.title=\u0420\u0435\u0437\u043a\u0430 clip.width=\u0428\u0438\u0440\u0438\u043d\u0430 clip.height=\u0412\u044b\u0441\u043e\u0442\u0430 clip.screen=\u0411\u0435\u0437 \u0440\u0435\u0437\u043a\u0438 # \u0412\u0435\u0440\u0441\u0438\u044f 3.42 menu.options.arrowsize=\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0435\u043b\u043a\u0438 ... arrowsize.title=\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0435\u043b\u043a\u0438 # \u0412\u0435\u0440\u0441\u0438\u044f 3.44 iconhelp.large=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0440\u0443\u043f\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442 iconhelp.bold=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0436\u0438\u0440\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442 menu.options.largefont=\u041a\u0440\u0443\u043f\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442 menu.options.boldfont=\u0416\u0438\u0440\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442 warning.previewframe=\u0420\u0430\u043c\u043a\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u043a\u043d\u0430! message.move.select=\u0414\u0432\u0438\u0433\u0430\u0442\u044c: \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443 (SHIFT: \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u043e\u0447\u0435\u043a, ctrl: \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u043e \u043f\u0440\u0430\u0432\u043a\u0438)! # \u0412\u0435\u0440\u0441\u0438\u044f 3.46 iconbar.showseparators=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0438 # \u0412\u0435\u0440\u0441\u0438\u044f 3.48 menu.sizes=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u044b menu.options.minlinesize=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u043e\u043b\u0449\u0438\u043d\u0430 \u043b\u0438\u043d\u0438\u0439... minlinesize.title=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u043e\u043b\u0449\u0438\u043d\u0430 \u043b\u0438\u043d\u0438\u0439 minlinesize.prompt=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u043e\u043b\u0449\u0438\u043d\u0430 \u043b\u0438\u043d\u0438\u0439 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 1) arrowsize.prompt=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0435\u043b\u043a\u0438 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 10) menu.options.printscaler=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 menu.options.exportsettings=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a... printscaler.title=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 printscaler.width=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 (\u0432 cm) printscaler.height=\u0412\u044b\u0441\u043e\u0442\u0430 (\u0432 cm) printscaler.dpi=\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 (\u0432 dpi, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 300) printscaler.linewidth=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u043b\u0438\u043d\u0438\u0439(\u0432 cm, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 0.02) printscaler.pointsize=\u0420\u0430\u0437\u043c\u0435\u0440 \u0442\u043e\u0447\u0435\u043a (\u0432 cm, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 0.07) printscaler.textsize=\u0420\u0430\u0437\u043c\u0435\u0440 \u0442\u0435\u043a\u0441\u0442\u0430 (\u0432 cm, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 0.3) # \u0412\u0435\u0440\u0441\u0438\u044f 3.49 printscaler.screen=300 dpi printscaler.w=\u0428\u0438\u0440\u0438\u043d\u0430 (\u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445) printscaler.h=\u0412\u044b\u0441\u043e\u0442\u0430 (\u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445) printscaler.scale=\u041c\u0430\u0441\u0448\u0442\u0430\u0431 (\u043f\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044e \u043a \u044d\u043a\u0440\u0430\u043d\u0443) printscaler.middle=\u0423\u0440\u0435\u0437\u0430\u0442\u044c (\u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430) printscaler.sizes=\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u044f\u043c\u044b\u0435, \u0448\u0440\u0438\u0444\u0442\u044b \u0438 \u0442\u043e\u0447\u043a\u0438 menu.file.savepng=\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 (PNG-\u0444\u0430\u0439\u043b) warning.preview=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u043d\u043e\u0441\u0442\u044c\u044e \u0441 Java 1.1 iconedit.showseparators=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0438 printscaler.aspect=\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 printscaler.presets=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 printscaler.preset=\u0412\u044b\u0431\u043e\u0440 printscaler.preset.300dpi=\u0422\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 300 dpi printscaler.preset.300dpi6= \u0428\u0438\u0440\u0438\u043d\u0430 6 cm \u0441 300 dpi printscaler.preset.300dpi16=\u0428\u0438\u0440\u0438\u043d\u0430 16 cm \u0441 300 dpi printscaler.preset.window=\u0420\u0430\u0437\u043c\u0435\u0440 \u043e\u043a\u043d\u0430 printscaler.preset.clip50=\u0423\u0440\u0435\u0437\u0430\u0442\u044c \u043e\u043a\u043d\u043e \u043d\u0430 50% message.saving=\u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435! menu.options.printscalepreview=\u041f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a (Ctrl-F3) date=\u0421\u0434\u0435\u043b\u0430\u043d\u043e # \u0412\u0435\u0440\u0441\u0438\u044f 3.51 help=\u041f\u043e\u043c\u043e\u0449\u044c ./src/rene/zirkel/listener/0000755000175000017500000000000011132354034014612 5ustar yvesyves./src/rene/zirkel/listener/DoneListener.java0000640000175000017500000000143711133127256020056 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.listener; public interface DoneListener { public void notifyDone(); } ./src/rene/zirkel/listener/CloseListener.java0000640000175000017500000000153011133127256020230 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.listener; // file: CloseListener.java import java.awt.Frame; public interface CloseListener { public void closed(Frame f); } ./src/rene/zirkel/listener/CVS/0000755000175000017500000000000011313631323015245 5ustar yvesyves./src/rene/zirkel/listener/CVS/Repository0000644000175000017500000000003511132354034017345 0ustar yvesyvescarmetal/rene/zirkel/listener./src/rene/zirkel/listener/CVS/Entries0000644000175000017500000000033311133127744016607 0ustar yvesyves/AddEventListener.java/1.4/Tue Jan 13 15:09:33 2009/-ko/ /CloseListener.java/1.4/Tue Jan 13 15:09:34 2009/-ko/ /DoneListener.java/1.3/Tue Jan 13 15:09:34 2009/-ko/ /StatusListener.java/1.3/Tue Jan 13 15:09:38 2009/-ko/ ./src/rene/zirkel/listener/CVS/RevisionCache/0000755000175000017500000000000011315072277020000 5ustar yvesyves./src/rene/zirkel/listener/CVS/RevisionCache/StatusListener.java#1.30000644000175000017500000000144211313631323024111 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.listener; public interface StatusListener { void showStatus(String s); } ./src/rene/zirkel/listener/CVS/RevisionCache/AddEventListener.java#1.40000644000175000017500000000163711315072277024340 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.listener; import rene.zirkel.construction.Construction; import rene.zirkel.objects.ConstructionObject; public interface AddEventListener { public void added(Construction c, ConstructionObject o); }./src/rene/zirkel/listener/CVS/Root0000644000175000017500000000007411132354034016114 0ustar yvesyves:ext:erichake@carmetal.cvs.sourceforge.net:/cvsroot/carmetal./src/rene/zirkel/listener/StatusListener.java0000640000175000017500000000144211133127262020445 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.listener; public interface StatusListener { void showStatus(String s); } ./src/rene/zirkel/listener/AddEventListener.java0000640000175000017500000000163711133127255020664 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.listener; import rene.zirkel.construction.Construction; import rene.zirkel.objects.ConstructionObject; public interface AddEventListener { public void added(Construction c, ConstructionObject o); }./src/rene/zirkel/.#ZirkelApplet.java.1.50000644000175000017500000012136111133145260016665 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel; import java.applet.AppletContext; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Frame; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.Image; import java.awt.Label; import java.awt.MediaTracker; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.URL; import java.util.Enumeration; import java.util.Locale; import java.util.StringTokenizer; import java.util.zip.GZIPInputStream; import javax.swing.JPanel; import rene.dialogs.Warning; import rene.gui.DoActionListener; import rene.gui.Global; import rene.gui.HistoryTextField; import rene.gui.IconBar; import rene.gui.IconBarListener; import rene.gui.Panel3D; import rene.util.FileName; import rene.util.parser.StringParser; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.constructors.AngleConstructor; import rene.zirkel.constructors.AreaConstructor; import rene.zirkel.constructors.BoundedPointConstructor; import rene.zirkel.constructors.Circle3Constructor; import rene.zirkel.constructors.CircleConstructor; import rene.zirkel.constructors.ExpressionConstructor; import rene.zirkel.constructors.ImageConstructor; import rene.zirkel.constructors.IntersectionConstructor; import rene.zirkel.constructors.LineConstructor; import rene.zirkel.constructors.MidpointConstructor; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.constructors.ParallelConstructor; import rene.zirkel.constructors.PlumbConstructor; import rene.zirkel.constructors.PointConstructor; import rene.zirkel.constructors.QuadricConstructor; import rene.zirkel.constructors.RayConstructor; import rene.zirkel.constructors.SegmentConstructor; import rene.zirkel.constructors.TextConstructor; import rene.zirkel.dialogs.CommentDialog; import rene.zirkel.dialogs.Replay; import rene.zirkel.listener.DoneListener; import rene.zirkel.listener.StatusListener; import rene.zirkel.macro.Macro; import rene.zirkel.macro.MacroBar; import rene.zirkel.macro.MacroItem; import rene.zirkel.macro.MacroRunner; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.SegmentObject; import rene.zirkel.objects.TextObject; import rene.zirkel.tools.AnimatorTool; import rene.zirkel.tools.BreakpointAnimator; import rene.zirkel.tools.DeleteTool; import rene.zirkel.tools.DrawerTool; import rene.zirkel.tools.EditTool; import rene.zirkel.tools.HiderTool; import rene.zirkel.tools.MoverTool; import rene.zirkel.tools.ObjectTracker; import rene.zirkel.tools.RenamerTool; import rene.zirkel.tools.ReorderTool; import rene.zirkel.tools.SaveJob; import rene.zirkel.tools.SetParameterTool; import rene.zirkel.tools.SetTargetsTool; import rene.zirkel.tools.Tracker; import rene.zirkel.tools.ZoomerTool; import eric.JLocusObjectTracker; public class ZirkelApplet extends javax.swing.JApplet implements IconBarListener, StatusListener, KeyListener, DoneListener, DoActionListener, ZirkelCanvasInterface { /** * */ private static final long serialVersionUID = 1L; ZirkelCanvas ZC; IconBar IA, IB, IC; MacroBar IM; String filename = "test.zir"; Label Status; Color C, CC; Frame F; String FirstConstructor = "point", Tools = "all", Options = ""; int CurrentTool = 0; HistoryTextField Input; ConstructionObject Last = null; boolean edit; boolean jumptostart; // for applets with replay buttons and start() public String JScontrol() { String exp = ""; try { exp = String .valueOf(ZC.getConstruction().find("jscode").getValue()); } catch (final Exception ex) { } return exp; } public void JSsend(final String s) { ZC.JSsend(s); repaint(); } public String JSreceive(final String s) { return ZC.JSreceive(s); } @Override public void paint(final Graphics gc) { super.paint(gc); // ZC.recompute(); ZC.JCM.readXmlTags(); ZC.dovalidate(); ZC.repaint(); } final static public String DefaultIcons = " point line segment ray circle fixedcircle" + " parallel plumb circle3 midpoint angle fixedangle" + " move tracker objecttracker hide expression area text quadric" + " runmacro animate "; final static public String DefaultOptions = " back undo delete color type thickness" + " hidden showcolor macro grid " + " draw twolines indicate "; @Override public void init() { if (getParameter("language") != null) try { Locale.setDefault(new Locale(getParameter("language"), "")); } catch (final RuntimeException e) { } Global.initBundle("rene/zirkel/docs/ZirkelProperties"); Count.resetAll(); CC = C = Global.Background; initLightColors(); initObjectKeys(); final Dimension dscreen = getToolkit().getScreenSize(); F = new Frame(); F.setSize(dscreen); if (getParameter("oldicons") == null) { Global.setParameter("iconpath", "/eric/icons/palette/"); Global.setParameter("iconsize", getParameter("smallicons") == null ? 32 : 24); Global.setParameter("icontype", "png"); } else { Global.setParameter("iconpath", "//eric/icons/palette/"); Global.setParameter("iconsize", 20); } String color = getParameter("color"); if (color != null) { final StringParser p = new StringParser(getParameter("color")); p.replace(',', ' '); int red, green, blue; red = p.parseint(); green = p.parseint(); blue = p.parseint(); C = new Color(red, green, blue); Global.Background = C; Global.ControlBackground = C; CC = C; } color = getParameter("colorbackground"); if (color != null) Global.setParameter("colorbackground", color); else Global.removeParameter("colorbackground"); color = getParameter("colorselect"); if (color != null) Global.setParameter("colorselect", color); else Global.removeParameter("colorselect"); ZirkelFrame.SelectColor = Global.getParameter("colorselect", Color.red); color = getParameter("colortarget"); if (color != null) Global.setParameter("colortarget", color); else Global.removeParameter("colortarget"); ZirkelFrame.TargetColor = Global .getParameter("colorselect", Color.pink); ZirkelFrame.initLightColors(Color.white); final String font = getParameter("font"); if (font != null) { if (font.indexOf("bold") >= 0) Global.setParameter("font.bold", true); if (font.indexOf("large") >= 0) Global.setParameter("font.large", true); } if (getParameter("demo") != null) { initDemo(); return; } String style = getParameter("style"); // On firefox mac, I don't know why, but getParameter("style") return // null // even if there is a "style" parameter tag... so : if (style == null) { if ((getParameter("tools") != null) || (getParameter("options") != null)) style = "icons"; else style = "plain"; } final boolean simple = (style.equals("plain") || style.equals("3D") || style .equals("breaks")); edit = !simple; final boolean status = (style.equals("full") || style.equals("status")); final boolean icons = (style.equals("full") || style.equals("nonvisual") || style.equals("icons")); final boolean breaks = (style.equals("breaks")); if (getParameter("edit") != null) edit = true; for (int i = 0; i < ZirkelFrame.Colors.length; i++) { color = getParameter("color" + i); if (color != null) Global.setParameter("color" + i, color); else Global.removeParameter("color" + i); } ZirkelFrame.initLightColors(Color.white); getContentPane().setLayout(new BorderLayout()); Tools = getParameter("tools"); if (Tools == null || Tools.equals("defaults")) Tools = DefaultIcons; Options = getParameter("options"); if (Options == null || Options.equals("defaults")) Options = DefaultOptions; Global.setParameter("macrobar", Options.indexOf("macrobar") >= 0); // makeMacroBar(); if (icons) { IB = new IconBar(F); IB.setBackground(CC); IB.setIconBarListener(this); StringTokenizer t = new StringTokenizer(Tools); int count = 0; while (t.hasMoreTokens()) { t.nextToken(); count++; } final String a[] = new String[count]; t = new StringTokenizer(Tools); count = 0; while (t.hasMoreTokens()) { a[count++] = t.nextToken(); } if (count > 0) FirstConstructor = a[0]; IB.addToggleGroupLeft(a); // IB.addSeparatorLeft(); if (Options.indexOf("twolines") >= 0 || Options.indexOf("defaults") >= 0) { IA = new IconBar(F); IA.setBackground(CC); IA.setIconBarListener(this); setIA(IA, Options); final JPanel north = new JPanel(); north.setBackground(CC); north.setLayout(new GridLayout(0, 1)); north.add(IA); north.add(IB); if (IM != null) north.add(IM); getContentPane().add("North", new Panel3D(north, CC)); } else { IA = IB; setIA(IB, Options); if (IM != null) { final JPanel north = new JPanel(); north.setBackground(CC); north.setLayout(new GridLayout(0, 1)); north.add(IA); if (IM != null) north.add(IM); getContentPane().add("North", new Panel3D(north, CC)); } else { getContentPane().add("North", new Panel3D(IB, CC)); } } } else IA = IB = null; rene.zirkel.Zirkel.IsApplet = true; Global.setParameter("options.choice", true); Global.setParameter("options.indicate", true); Global.setParameter("options.indicate.simple", false); Global.setParameter("options.intersection", false); Global.setParameter("options.pointon", false); eric.JMacrosTools.initObjectsProperties(); if (getParameter("selectionsize") != null) { try { final double x = new Double(getParameter("selectionsize")) .doubleValue(); Global.setParameter("selectionsize", x); } catch (final Exception e) { } } ZC = new ZirkelCanvas(!edit, !breaks, !breaks); ZC.addMouseListener(ZC); ZC.addMouseMotionListener(ZC); ZC.setBackground(Global.getParameter("colorbackground", C)); ZC.setFrame(F); ZC.setZirkelCanvasListener(this); if (getParameter("showhidden") != null) ZC.setShowHidden(true); if (style.equals("plain")) getContentPane().add("Center", ZC); else getContentPane().add("Center", new Panel3D(ZC, ZC.getBackground())); ZC.addStatusListener(this); ZC.addKeyListener(this); setShowNames(false); if (status) { Status = new Label(""); Status.setBackground(CC); getContentPane().add("South", new Panel3D(Status, Status.getBackground())); } else if (style.equals("nonvisual")) { Input = new HistoryTextField(this, "Input"); ZC.setTextField(Input); ZC.Visual = false; setShowNames(true); getContentPane().add("South", new Panel3D(Input)); } try { Global.setParameter("digits.edit", Integer .parseInt(getParameter("editdigits"))); } catch (final Exception e) { } try { Global.setParameter("digits.lengths", Integer .parseInt(getParameter("displaydigits"))); } catch (final Exception e) { } try { Global.setParameter("digits.angles", Integer .parseInt(getParameter("angledigits"))); } catch (final Exception e) { } setOption("movename"); setOption("movefixname"); ZC.updateDigits(); setOption("nopopupmenu"); setOption("nomousezoom"); try { Global.setParameter("minpointsize", new Double( getParameter("minpointsize")).doubleValue()); } catch (final Exception e) { } try { Global.setParameter("minlinesize", new Double( getParameter("minlinesize")).doubleValue()); } catch (final Exception e) { } try { Global.setParameter("minfontsize", new Double( getParameter("minfontsize")).doubleValue()); } catch (final Exception e) { } try { Global.setParameter("arrowsize", new Double( getParameter("arrowsize")).doubleValue()); } catch (final Exception e) { } try { final String grid = getParameter("grid"); ZC.ShowGrid = !grid.equals("none"); Global.setParameter("grid.fine", grid.equals("coordinates")); if (getParameter("snap").equals("left")) Global.setParameter("grid.leftsnap", true); } catch (final Exception e) { } if (getParameter("interactive") != null && getParameter("interactive").equals("false")) ZC.setInteractive(false); boolean job = false; ZC.IW = getSize().width; ZC.IH = getSize().height; if (getParameter("germanpoints") != null && getParameter("germanpoints").equals("true")) Global.setParameter("options.germanpoints", true); try { final InputStream o = getClass() .getResourceAsStream("/builtin.mcr"); ZC.ProtectMacros = true; ZC.load(o, false, true); ZC.ProtectMacros = false; o.close(); ZC.PM.removeAll(); } catch (final Exception e) { } filename = getParameter("file"); if (filename == null) { filename = getParameter("job"); job = true; } if (filename != null) { boolean firsttry = true; while (true) { try { URL url; if (filename.toUpperCase().startsWith("HTTP")) url = new URL(firsttry ? FileName.toURL(filename) : filename); else url = new URL(getCodeBase(), firsttry ? FileName .toURL(filename) : filename); ZC.clear(); InputStream in = url.openStream(); if (ZirkelFrame.isCompressed(filename)) in = new GZIPInputStream(in); showStatus(Global.name("loading")); ZC.load(in); toggleGrid(ZC.ShowGrid); if (job) { ZC.displayJob(true); ZC.setDoneListener(this); } if (icons) iconPressed(FirstConstructor); in.close(); if (getParameter("background") != null) { final Image i = getToolkit().getImage( new URL(getCodeBase(), getParameter("background"))); final MediaTracker mt = new MediaTracker(this); mt.addImage(i, 0); mt.waitForID(0); if (mt.checkID(0) && !mt.isErrorAny()) { ZC.setBackground(i); } } ZC.repaint(); } catch (final Exception e) { if (firsttry) { firsttry = false; continue; } final Warning w = new Warning(F, FileName.chop(32, "" + e, 64), Zirkel.name("message"), true); w.center(F); w.setVisible(true); showStatus("" + e); e.printStackTrace(); System.out.println(e); } break; } } if (breaks) { IC = new IconBar(F); IC.setBackground(CC); IC.setIconBarListener(this); IC.addLeft("allback"); if (haveBreaks()) IC.addLeft("nextbreak"); else IC.addLeft("oneforward"); IC.addLeft("allforward"); final javax.swing.JPanel pic = new Panel3D(IC); getContentPane().add("South", pic); IC.setEnabled("nextbreak", false); IC.setEnabled("oneforward", false); IC.setEnabled("allforward", false); ZC.getConstruction().setOriginalOrder(true); jumptostart = (getParameter("jumptostart") != null); } if (getParameter("restrictedmove") != null) { Global.setParameter("restrictedmove", true); } if (getParameter("noconfirmation") != null) { Global.setParameter("confirmation", false); } if (IA != null) settype(2); // IB.forceRepaint(); // IA.forceRepaint(); ZC.setMacroBar(IM); ZC.updateMacroBar(); ZC.recompute(); // Very weird thing which cause applet to be displayed on firefox mac : ZC.setSize(ZC.getSize().width + 1, ZC.getSize().height + 1); ZC.setSize(ZC.getSize().width - 1, ZC.getSize().height - 1); ZC.JCM.hideHandles(null); // ZC.dovalidate(); // ZC.repaint(); } public void setOption(final String option) { try { Global.setParameter("options." + option, getParameter(option) .equals("true")); } catch (final Exception e) { } } DemoRunner DR = null; void initDemo() { getContentPane().setLayout(new BorderLayout()); ZC = new ZirkelCanvas(false, false, false); ZC.setBackground(Global.getParameter("colorbackground", C)); ZC.setFrame(F); ZC.setZirkelCanvasListener(this); if (getParameter("showhidden") != null) ZC.setShowHidden(true); getContentPane().add("Center", new Panel3D(ZC, ZC.getBackground())); Status = new Label("", Label.CENTER); Status.setBackground(C); getContentPane().add("South", new Panel3D(Status, Status.getBackground())); } void setIA(final IconBar IA, final String set) { if (set.indexOf("rename") >= 0) IA.addToggleLeft("rename"); if (set.indexOf("back") >= 0) IA.addLeft("back"); if (set.indexOf("delete") >= 0) IA.addToggleLeft("delete"); if (set.indexOf("undo") >= 0) IA.addLeft("undo"); if (set.indexOf("hidden") >= 0) IA.addOnOffLeft("hidden"); if (set.indexOf("showcolor") >= 0) IA.addMultipleIconLeft("showcolor", ZirkelFrame.Colors.length); if (set.indexOf("color") >= 0) IA.addMultipleIconLeft("color", 6); if (set.indexOf("type") >= 0) IA.addMultipleIconLeft("type", 6); if (set.indexOf("thickness") >= 0) IA.addMultipleIconLeft("thickness", 3); if (set.indexOf("partial") >= 0) IA.addOnOffLeft("partial"); if (set.indexOf("plines") >= 0) IA.addOnOffLeft("plines"); if (set.indexOf("arrow") >= 0) IA.addOnOffLeft("arrow"); if (set.indexOf("showname") >= 0) IA.addOnOffLeft("showname"); if (set.indexOf("showvalue") >= 0) IA.addOnOffLeft("showvalue"); if (set.indexOf("edit") >= 0) IA.addToggleLeft("edit"); if (set.indexOf("obtuse") >= 0) IA.addOnOffLeft("obtuse"); if (set.indexOf("solid") >= 0) IA.addOnOffLeft("solid"); if (set.indexOf("grid") >= 0) IA.addOnOffLeft("grid"); if (set.indexOf("macro") >= 0) IA.addMultipleToggleIconLeft("macro", 3); if (set.indexOf("replay") >= 0) IA.addLeft("replay"); if (set.indexOf("zoom") >= 0) IA.addToggleLeft("zoom"); if (set.indexOf("comment") >= 0) IA.addLeft("comment"); if (set.indexOf("function") >= 0) IA.addLeft("function"); if (set.indexOf("draw") >= 0) IA.addToggleLeft("draw"); } public void makeMacroBar() { if (Global.getParameter("macrobar", true)) { IM = new MacroBar(F); IM.addKeyListener(this); IM.setIconBarListener(this); IM.setBackground(CC); } } public void updateMacroBar() { ZC.updateMacroBar(); } Replay RD = null; public void iconPressed(final String o) { if (RD != null) RD.doclose(); ZC.requestFocus(); if (IA != null && IA.isControlPressed()) { if (o.equals("edit")) { if (CurrentTool != ZirkelFrame.NEdit) IA.setState("edit", false); ZC.editLast(); ZC.repaint(); } IA.clearShiftControl(); return; } for (int i = 0; i < ZirkelFrame.ObjectStrings.length; i++) if (o.equals(ZirkelFrame.ObjectStrings[i])) { if (i == ZirkelFrame.NMacro) runmacro(IB.isShiftPressed()); else settool(i); return; } if (IM != null) // Search in the macro line { final Macro m = IM.find(o); if (m != null) { runMacro(m); return; } } if (o.equals("hidden")) { ZC.setShowHidden(IA.getState("hidden")); } else if (o.equals("partial")) { ZC.setPartial(IA.getState("partial")); } else if (o.equals("plines")) { ZC.setPartialLines(IA.getState("plines")); } else if (o.equals("arrow")) { ZC.setVectors(IA.getState("arrow")); } else if (o.equals("color")) { final int n = IA.getMultipleState("color"); if (n >= 0) setcolor(n); } else if (o.equals("showcolor")) { final int n = IA.getMultipleState("showcolor"); if (n >= 0) showcolor(n); } else if (o.equals("showname")) { setShowNames(IA.getState("showname")); } else if (o.equals("obtuse")) { setObtuse(IA.getState("obtuse")); } else if (o.equals("solid")) { setSolid(IA.getState("solid")); } else if (o.equals("showvalue")) { setShowValues(IA.getState("showvalue")); } else if (o.equals("longnames")) { setLongNames(IA.getState("longnames")); } else if (o.equals("grid")) { toggleGrid(IA.getState("grid")); } else if (o.equals("comment")) { showcomment(); } else if (o.equals("function")) { if (IA.isControlPressed()) ZC.createFunction(); else ZC.createCurve(); } else if (o.equals("type")) { final int n = IA.getMultipleState("type"); if (n >= 0) settype(n); } else if (o.equals("thickness")) { final int n = IA.getMultipleState("thickness"); if (n >= 0) setcolortype(n); } else if (o.equals("edit")) { settool(ZirkelFrame.NEdit); } else if (o.equals("back")) { ZC.back(); ZC.repaint(); } else if (o.equals("undo")) { ZC.undo(); ZC.repaint(); } else if (o.equals("replay")) { replay(); } else if (o.equals("macro")) { final int n = IA.getMultipleState("macro"); switch (n) { case 1: settool(ZirkelFrame.NParameters); break; case 2: settool(ZirkelFrame.NTargets); break; case 0: definemacro(); break; } IA.setState("macro", true); } else if (o.equals("allback")) { if (Last != null && Last instanceof TextObject) ((TextObject) Last).setDoShow(false); final Enumeration e = ZC.getConstruction().elements(); if (e.hasMoreElements()) { Last = (ConstructionObject) e.nextElement(); ZC.paintUntil(Last); if ((Last instanceof TextObject) && Last.valid() && !Last.isSuperHidden()) { ((TextObject) Last).setDoShow(true); } } IC.setEnabled("allforward", true); IC.setEnabled("nextbreak", true); IC.setEnabled("oneforward", true); IC.setEnabled("allback", false); if (haveBreaks() && !Last.isBreak()) iconPressed("nextbreak"); } else if (o.equals("allforward")) { if (Last != null && Last instanceof TextObject) ((TextObject) Last).setDoShow(false); ZC.paintUntil(null); Last = null; IC.setEnabled("allforward", false); IC.setEnabled("nextbreak", false); IC.setEnabled("oneforward", false); IC.setEnabled("allback", true); } else if (o.equals("nextbreak")) { if (Last != null && Last instanceof TextObject) ((TextObject) Last).setDoShow(false); final Enumeration e = ZC.getConstruction().elements(); outer: while (e.hasMoreElements()) { final ConstructionObject next = (ConstructionObject) e .nextElement(); if (next == Last) while (e.hasMoreElements()) { Last = (ConstructionObject) e.nextElement(); if (Last == null || Last.isBreak()) break outer; } } IC.setEnabled("allback", true); if ((Last instanceof TextObject) && Last.valid() && !Last.isSuperHidden()) { ((TextObject) Last).setDoShow(true); } ZC.paintUntil(Last); IC.setEnabled("allback", true); IC.setEnabled("nextbreak", e.hasMoreElements()); IC.setEnabled("allforward", e.hasMoreElements()); } else if (o.equals("oneforward")) { if (Last != null && Last instanceof TextObject) ((TextObject) Last).setDoShow(false); final Enumeration e = ZC.getConstruction().elements(); outer: while (e.hasMoreElements()) { final ConstructionObject next = (ConstructionObject) e .nextElement(); if (next == Last) while (e.hasMoreElements()) { Last = (ConstructionObject) e.nextElement(); if (Last == null || !Last.isHidden()) break outer; if ((Last instanceof TextObject) && Last.valid() && !Last.isSuperHidden()) { ((TextObject) Last).setDoShow(true); break outer; } } } IC.setEnabled("allback", true); ZC.paintUntil(Last); if (!e.hasMoreElements()) { ZC.paintUntil(null); IC.setEnabled("allforward", false); IC.setEnabled("oneforward", false); IC.setEnabled("allback", true); } } else if (o.startsWith("bi_")) { eric.JGlobals.runmacro(ZC, this, "@builtin@/" + o.substring(3)); } IA.clearShiftControl(); IB.clearShiftControl(); } public ObjectConstructor ObjectConstructors[] = // constructors { new PointConstructor(), new BoundedPointConstructor(), new IntersectionConstructor(), new LineConstructor(), new RayConstructor(), new SegmentConstructor(), new SegmentConstructor(true), new CircleConstructor(), new Circle3Constructor(), new CircleConstructor(true), new ParallelConstructor(), new PlumbConstructor(), new MidpointConstructor(), new AngleConstructor(), new AngleConstructor(true), new MoverTool(), new Tracker(), new ObjectTracker(), new AnimatorTool(), new ExpressionConstructor(), new AreaConstructor(), new QuadricConstructor(), new ImageConstructor(), new TextConstructor(), new HiderTool(), new JLocusObjectTracker(), new MacroRunner(), new EditTool(), new SetParameterTool(), new SetTargetsTool(), new SaveJob(), new DeleteTool(), new ReorderTool(), new DrawerTool(), new RenamerTool(), new ZoomerTool(), new BreakpointAnimator() }; public void settool(final int i) { if (IM != null) IM.deselectAll(); ZC.setTool(ObjectConstructors[i]); CurrentTool = i; if (i < ZirkelFrame.IconNumber && IB.have(ZirkelFrame.ObjectStrings[i])) IB.toggle(ZirkelFrame.ObjectStrings[i]); else IB.unselect(FirstConstructor); ObjectConstructors[i].resetFirstTime(ZC); if (i == ZirkelFrame.NTargets) IA.setMultipleState("macro", 2); else if (i == ZirkelFrame.NParameters) IA.setMultipleState("macro", 1); else { IA.setMultipleState("macro", 0); IA.setState("macro", false); } IA.setState("delete", i == ZirkelFrame.NDelete); IA.setState("edit", i == ZirkelFrame.NEdit); IA.setState("draw", i == ZirkelFrame.NDraw); IA.setState("rename", i == ZirkelFrame.NRename); IA.setState("zoom", i == ZirkelFrame.NZoom); } public void setcolor(final int c) { IA.setMultipleState("color", c); ZC.setDefaultColor(c); } public void settype(final int c) { IA.setMultipleState("type", c); ZC.setDefaultType(c); } public void setcolortype(final int c) { IA.setMultipleState("thickness", c); ZC.setDefaultColorType(c); } @Override public void showStatus(final String s) { super.showStatus(s); if (Status != null) Status.setText(s); } public void keyPressed(final KeyEvent e) { } public void keyReleased(final KeyEvent e) { final int code = e.getKeyCode(); int i; final boolean Shift = e.isShiftDown(), Control = e.isControlDown(), Alt = e .isAltDown(); if (Control) { if (Options.indexOf("type") > 0) for (i = 0; i < ZirkelFrame.PointKeys.length; i++) { if (ZirkelFrame.PointKeys[i] == code) { settype(i); return; } } if (Options.indexOf("color") > 0) for (i = 0; i < ZirkelFrame.ColorKeys.length; i++) { if (ZirkelFrame.ColorKeys[i] == code) { setcolor(i); return; } } } else if (Alt) { if (Options.indexOf("showcolor") > 0) for (i = 0; i < ZirkelFrame.ColorKeys.length; i++) { if (ZirkelFrame.ColorKeys[i] == code) { showcolor(i); return; } } if (Options.indexOf("thickness") > 0) for (i = 0; i < ZirkelFrame.ColorTypeKeys.length; i++) { if (ZirkelFrame.ColorTypeKeys[i] == code) { setcolortype(i); return; } } } else { switch (code) { case KeyEvent.VK_ESCAPE: if (ZC.getCurrentTool() instanceof DrawerTool) ZC.clearDrawings(); else ZC.reset(); break; } } if (!e.isActionKey()) return; switch (code) { case KeyEvent.VK_F1: showVersion(); break; case KeyEvent.VK_F7: if (Shift || Control) { setShowNames(!IA.getState("showname")); } break; case KeyEvent.VK_F8: if (Shift || Control) { setLongNames(!IA.getState("longnames")); } break; case KeyEvent.VK_F9: if (Shift || Control) { IA.setState("partial", !IA.getState("partial")); ZC.setPartial(IA.getState("partial")); } else { if (Options.indexOf("hidden") < 0) break; IA.setState("hidden", !IA.getState("hidden")); ZC.setShowHidden(IA.getState("hidden")); } break; case KeyEvent.VK_F10: if (Shift || Control) { IA.setState("plines", !IA.getState("plines")); ZC.setPartial(IA.getState("plines")); } else showcomment(); break; case KeyEvent.VK_F11: if (Shift || Control) { IA.setState("arrow", !IA.getState("arrow")); ZC.setPartial(IA.getState("arrow")); } else showconstruction(); break; case KeyEvent.VK_F12: if (Shift || Control) { IA.setState("obtuse", !IA.getState("obtuse")); ZC.setObtuse(IA.getState("obtuse")); } else toggleGrid(); break; case KeyEvent.VK_LEFT: if (Shift && ZC.getCurrentTool() instanceof ObjectTracker) ((ObjectTracker) ZC.getCurrentTool()).increaseOmit(); else if (Shift && ZC.getCurrentTool() instanceof BreakpointAnimator) ((BreakpointAnimator) ZC.getCurrentTool()).decreaseSpeed(); else if (Shift && ZC.getCurrentTool() instanceof AnimatorTool) ((AnimatorTool) ZC.getCurrentTool()).decreaseSpeed(); else ZC.shift(-0.2, 0); break; case KeyEvent.VK_RIGHT: if (Shift && ZC.getCurrentTool() instanceof ObjectTracker) ((ObjectTracker) ZC.getCurrentTool()).decreaseOmit(); else if (Shift && ZC.getCurrentTool() instanceof BreakpointAnimator) ((BreakpointAnimator) ZC.getCurrentTool()).increaseSpeed(); else if (Shift && ZC.getCurrentTool() instanceof AnimatorTool) ((AnimatorTool) ZC.getCurrentTool()).increaseSpeed(); else ZC.shift(0.2, 0); break; case KeyEvent.VK_UP: ZC.shift(0, 0.2); break; case KeyEvent.VK_DOWN: ZC.shift(0, -0.2); break; } } public void keyTyped(final KeyEvent e) { final char c = e.getKeyChar(); if (e.isControlDown() || e.isAltDown()) return; int i; for (i = 0; i < ZirkelFrame.ObjectKeys.length; i++) { if (c == ZirkelFrame.ObjectKeys[i]) { if (Tools.indexOf(ZirkelFrame.ObjectStrings[i]) >= 0) settool(i); return; } } switch (c) { case KeyEvent.VK_BACK_SPACE: ZC.undo(); ZC.repaint(); return; case '+': ZC.magnify(1 / Math.sqrt(Math.sqrt(2))); break; case '-': ZC.magnify(Math.sqrt(Math.sqrt(2))); break; } } public void initLightColors() { final int n = ZirkelFrame.Colors.length; ZirkelFrame.LightColors = new Color[n]; final Color back = C; final int red = back.getRed(), green = back.getGreen(), blue = back .getBlue(); final double lambda = 0.4; for (int i = 0; i < n; i++) { final int r = (int) (red * (1 - lambda) + ZirkelFrame.Colors[i] .getRed() * lambda); final int g = (int) (green * (1 - lambda) + ZirkelFrame.Colors[i] .getGreen() * lambda); final int b = (int) (blue * (1 - lambda) + ZirkelFrame.Colors[i] .getBlue() * lambda); ZirkelFrame.LightColors[i] = new Color(r, g, b); } } public void initObjectKeys() { ZirkelFrame.ObjectKeys = new char[ZirkelFrame.ObjectStrings.length]; for (int i = 0; i < ZirkelFrame.ObjectStrings.length; i++) { final String shortcut = Zirkel.name("shortcuts." + ZirkelFrame.ObjectStrings[i]); if (shortcut.length() > 0) ZirkelFrame.ObjectKeys[i] = shortcut.charAt(0); } } public void notifyDone() { repaint(); try { Thread.sleep(500); } catch (final Exception e) { } if (Global.getParameter("confirmation", true)) { final Warning w = new Warning(F, Zirkel.name("done"), Zirkel .name("message"), true); w.center(F); w.setVisible(true); } final String sol = getParameter("solution"); if (sol != null) { try { final AppletContext ac = getAppletContext(); ac.showDocument(new URL(getCodeBase(), FileName.toURL(sol))); } catch (final Exception e) { System.out.println(e); e.printStackTrace(); } } } public void showcolor(final int c) { ZC.setShowColor(c); } public void showcomment() { if (F == null) return; final CommentDialog d = new CommentDialog(F, ZC.getComment(), Zirkel .name("comment.title"), ZC.displayJob()); ZC.setComment(d.getText()); } public void showconstruction() { if (F == null) return; } public void toggleGrid() { ZC.toggleShowGrid(); } void definemacro() { if (!ZC.defineMacro()) return; if (ZC.getOC() instanceof SetTargetsTool) settool(ZirkelFrame.NParameters); else ZC.getOC().reset(ZC); } String OldMacro = null; public void runmacro(final boolean shift) { Macro m = null; if (OldMacro == null && ZC.getMacros().size() == 1) m = ((MacroItem) ZC.getMacros().elementAt(0)).M; else { m = ZC.chooseMacro(OldMacro); if (!shift || m == null) m = ZC.chooseMacro(); } if (m == null) { settool(CurrentTool); return; } runMacro(m); } public void runMacro(final Macro m) { ((MacroRunner) ObjectConstructors[ZirkelFrame.NMacro]).setMacro(m, ZC); settool(ZirkelFrame.NMacro); if (IM != null) IM.select(m); IB.setMultipleState("macro", 0); OldMacro = m.getName(); } public void setShowNames(final boolean flag) { if (IA != null) IA.setState("showname", flag); Global.setParameter("options.point.shownames", flag); ZC.setShowNames(flag); } public void setObtuse(final boolean flag) { IA.setState("obtuse", flag); Global.setParameter("options.obtuse", flag); ZC.setObtuse(flag); } public void setSolid(final boolean flag) { IA.setState("solid", flag); Global.setParameter("options.solid", flag); ZC.setSolid(flag); } public void setShowValues(final boolean flag) { IA.setState("showvalue", flag); Global.setParameter("options.showvalue", flag); ZC.setShowValues(flag); } public void setLongNames(final boolean flag) { IA.setState("longnames", flag); Global.setParameter("options.longnames", flag); ZC.setLongNames(flag); } public void toggleGrid(final boolean grid) { ZC.setShowGrid(grid); if (IA != null) IA.setState("grid", grid); } public void loadsettings() { setcolor(ZC.getDefaultColor()); settype(ZC.getDefaultType()); setcolortype(ZC.getDefaultColorType()); IA.setState("partial", ZC.getPartial()); IA.setState("plines", ZC.getPartialLines()); IA.setState("arrow", ZC.getVectors()); ZC.setHidden(false); } public void doAction(final String o) { if (o.equals("Input")) { try { ZC.getConstruction().interpret(ZC, Input.getText(), ""); Input.remember(); Input.setText(""); loadsettings(); ZC.validate(); ZC.getConstruction().updateCircleDep(); } catch (final ConstructionException e) { ZC.warning(e.getDescription()); } } } public void itemAction(final String o, final boolean flag) { } AnimatorTool A = null; @Override public void start() { if (getParameter("demo") != null) { DR = new DemoRunner(ZC, this, getParameter("demo"), Status); return; } final Construction C = ZC.getConstruction(); ZC.paint(ZC.getGraphics()); ZC.allowRightMouse(true); if (C.TrackP != null) { try { final ConstructionObject P = C.find(C.TrackP); if (!((P instanceof PointObject) || (P instanceof PrimitiveLineObject))) throw new ConstructionException(""); final ConstructionObject po[] = new ConstructionObject[C.TrackPO .size()]; for (int i = 0; i < po.length; i++) { final ConstructionObject o = C.find((String) C.TrackPO .elementAt(i)); if (o == null || !((o instanceof PointObject) || (o instanceof PrimitiveLineObject))) throw new ConstructionException(""); po[i] = o; } PointObject PM = null; if (C.TrackPM != null) PM = (PointObject) C.find(C.TrackPM); if (C.TrackO != null) { final ConstructionObject O = C.find(C.TrackO); if (P == null || (PM == null && (O instanceof ExpressionObject)) || O == null) throw new ConstructionException(""); final ObjectTracker ot = new ObjectTracker(P, PM, O, ZC, C.Animate, C.Paint, po); if (C.Animate) ot.Interactive = false; ot.setOmit(C.Omit); ZC.setTool(ot); if (!edit) ZC.allowRightMouse(false); ZC.validate(); ZC.repaint(); } else { if (P == null) throw new ConstructionException(""); ZC.setTool(new Tracker(P, po)); if (PM != null) PM.setSelected(true); ZC.validate(); ZC.repaint(); } } catch (final Exception e) { } } else if (C.AnimateP != null) { try { final PointObject P = (PointObject) C.find(C.AnimateP); if (P == null || !P.moveable()) throw new ConstructionException(""); final Enumeration e = C.AnimateV.elements(); while (e.hasMoreElements()) { final String s = (String) e.nextElement(); final ConstructionObject o = C.find(s); if (o == null || !(o instanceof SegmentObject || o instanceof PrimitiveCircleObject || o instanceof PointObject)) throw new ConstructionException(""); } ZC.setTool(A = new AnimatorTool(P, C.AnimateV, ZC, C.AnimateNegative, C.AnimateOriginal, C.AnimateDelay)); ZC.allowRightMouse(false); A.setInteractive(false); } catch (final Exception e) { // e.printStackTrace(); } } else if (C.AnimateBreakpoints) { final BreakpointAnimator bp = new BreakpointAnimator(); bp.setLoop(C.AnimateLoop); bp.setSpeed(C.AnimateTime); ZC.allowRightMouse(false); ZC.setTool(bp); bp.reset(ZC); } else if (jumptostart) { System.out.println("here"); iconPressed("allback"); } } public void showVersion() { showStatus(Zirkel.name("program.name") + " " + Zirkel.name("program.version") + " " + Zirkel.name("program.date")); } @Override public void stop() { ZC.invalidate(); if (DR != null) DR.stop(); } @Override public void destroy() { ZC.invalidate(); if (DR != null) DR.stop(); } public void replay() { if (RD != null) return; RD = new Replay(F, ZC) { /** * */ private static final long serialVersionUID = 1L; @Override public void doclose() { RD = null; super.doclose(); } }; final Dimension d = getToolkit().getScreenSize(); RD.setLocation(d.width - 100 - RD.getSize().width, 100); ZC.OC.invalidate(ZC); RD.setVisible(true); } public void replayChosen() { replay(); } public boolean enabled(final String function) { if (Tools.indexOf("all") >= 0) return true; return Tools.indexOf(function) >= 0; } public boolean haveBreaks() { final Enumeration e = ZC.getConstruction().elements(); while (e.hasMoreElements()) { if (((ConstructionObject) e.nextElement()).isBreak()) return true; } return false; } public String loadImage() { return null; } public Image doLoadImage(final String filename) { Image i; try { i = getToolkit().getImage(new URL(getCodeBase(), filename)); final MediaTracker mt = new MediaTracker(this); mt.addImage(i, 0); mt.waitForID(0); if (mt.checkID(0) && !mt.isErrorAny()) { return i; } } catch (final Exception e) { showStatus(e.toString()); } return null; } /** * For external scripting: Interprets a command s using the internal * construction language. (Expl: "A=point()") * * @param s * @return Command executed or not */ public boolean interpret(final String s) { try { ZC.getConstruction().interpret(ZC, s); ZC.repaint(); return true; } catch (final ConstructionException e) { return false; } } /** * For external scripting: Gets the construction as an XML stream contained * in a string. * * @return Construction. */ public String getConstruction() { final ByteArrayOutputStream out = new ByteArrayOutputStream(); try { ZC.save(out, true, true, false, ZC.getMacros(), ""); return out.toString("utf-8"); } catch (final Exception e) { return "Error"; } } /** * For external scripting: Receives the construction as an XML stream, * contained in a string. * * @param s * @return Success */ public boolean putConstruction(final String s) { try { final ByteArrayOutputStream bout = new ByteArrayOutputStream(); final PrintWriter out = new PrintWriter(new OutputStreamWriter( bout, "utf-8")); out.print(s); out.close(); final byte b[] = bout.toByteArray(); final InputStream in = new ByteArrayInputStream(b); ZC.load(in, true, true); return true; } catch (final Exception e) { e.printStackTrace(); return false; } } } ./src/rene/zirkel/ZirkelCanvasInterface.java0000640000175000017500000000175411133127263020053 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel; import java.awt.Image; import rene.zirkel.macro.Macro; public interface ZirkelCanvasInterface { public void replayChosen(); public void runMacro(Macro m); public boolean enabled(String tool); public String loadImage(); public Image doLoadImage(String filename); } ./src/rene/zirkel/icons/0000755000175000017500000000000011132345564014110 5ustar yvesyves./src/rene/zirkel/.DS_Store0000644000175000017500000001400411314631550014452 0ustar yvesyvesBud1ogsbwspbldialogsbwspblobbplist00  \WindowBounds[ShowSidebar]ShowStatusBar[ShowPathbar[ShowToolbar\SidebarWidth_{{488, 272}, {770, 437}}  ".. */ package rene.zirkel; // file: ZirkelFrame.java import eric.GUI.pipe_tools; import java.awt.CheckboxMenuItem; import java.awt.Color; import java.awt.Image; import java.awt.MediaTracker; import java.awt.event.KeyEvent; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.util.Enumeration; import java.util.Vector; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; import javax.swing.JPanel; import rene.dialogs.MyFileDialog; import rene.dialogs.Question; import rene.dialogs.Warning; import rene.gui.Global; import rene.util.FileName; import rene.util.MyVector; import rene.util.parser.StringParser; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.constructors.AngleConstructor; import rene.zirkel.constructors.AreaConstructor; import rene.zirkel.constructors.BoundedPointConstructor; import rene.zirkel.constructors.Circle3Constructor; import rene.zirkel.constructors.CircleConstructor; import rene.zirkel.constructors.ExpressionConstructor; import rene.zirkel.constructors.ImageConstructor; import rene.zirkel.constructors.IntersectionConstructor; import rene.zirkel.constructors.LineConstructor; import rene.zirkel.constructors.MidpointConstructor; import rene.zirkel.constructors.ObjectConstructor; import rene.zirkel.constructors.ParallelConstructor; import rene.zirkel.constructors.PlumbConstructor; import rene.zirkel.constructors.PointConstructor; import rene.zirkel.constructors.QuadricConstructor; import rene.zirkel.constructors.RayConstructor; import rene.zirkel.constructors.SegmentConstructor; import rene.zirkel.constructors.TextConstructor; import rene.zirkel.listener.DoneListener; import rene.zirkel.listener.StatusListener; import rene.zirkel.macro.Macro; import rene.zirkel.macro.MacroRunner; import rene.zirkel.objects.ConstructionObject; import rene.zirkel.objects.ExpressionObject; import rene.zirkel.objects.PointObject; import rene.zirkel.objects.PrimitiveCircleObject; import rene.zirkel.objects.PrimitiveLineObject; import rene.zirkel.objects.SegmentObject; import rene.zirkel.tools.AnimatorTool; import rene.zirkel.tools.BreakpointAnimator; import rene.zirkel.tools.DeleteTool; import rene.zirkel.tools.DrawerTool; import rene.zirkel.tools.EditTool; import rene.zirkel.tools.HiderTool; import rene.zirkel.tools.MoverTool; import rene.zirkel.tools.ObjectTracker; import rene.zirkel.tools.RenamerTool; import rene.zirkel.tools.ReorderTool; import rene.zirkel.tools.SaveJob; import rene.zirkel.tools.SetParameterTool; import rene.zirkel.tools.SetTargetsTool; import rene.zirkel.tools.Tracker; import rene.zirkel.tools.ZoomerTool; import rene.zirkel.tools.JLocusObjectTracker; import eric.GUI.palette.PaletteManager; import eric.GUI.window.tab_bottom; import eric.JZirkelCanvas; import eric.Media; import java.awt.Frame; public class ZirkelFrame implements StatusListener, DoneListener, ZirkelCanvasInterface { /** * */ public ZirkelCanvas ZC; public static Frame FRM; public String Filename=""; public String Background=""; // color menu items: static Color DefaultColors[]={Color.black, Color.green.darker().darker(), Color.blue.darker(), new Color(150, 100, 0), Color.cyan.darker().darker(), new Color(180, 0, 0)}; public static Color Colors[]=DefaultColors; public static Color LightColors[]; public static Color BrighterLightColors[]; public static Color BrighterColors[]; public static Color SelectColor=Global.getParameter("colorselect", Color.red); public static Color IndicateColor=Global.getParameter("colorselect", Color.ORANGE); public static Color TargetColor=Global.getParameter("colortarget", Color.pink); public static String ColorStrings[]={"black", "green", "blue", "brown", "cyan", "red"}; public static String PointTypes[]={"square", "diamond", "circle", "dot", "cross", "dcross"}; public static String ColorTypes[]={"normal", "thick", "thin"}; public static int ColorTypeKeys[]={KeyEvent.VK_5, KeyEvent.VK_6, KeyEvent.VK_7}; CheckboxMenuItem ColorTypeMenuItems[]=new CheckboxMenuItem[ColorTypes.length]; public static int ColorKeys[]={KeyEvent.VK_1, KeyEvent.VK_2, KeyEvent.VK_3, KeyEvent.VK_4}; CheckboxMenuItem ColorMenuItems[]=new CheckboxMenuItem[ColorStrings.length]; CheckboxMenuItem ShowColorMenuItems[]=new CheckboxMenuItem[ColorStrings.length]; static int PointKeys[]={KeyEvent.VK_5, KeyEvent.VK_6, KeyEvent.VK_7, KeyEvent.VK_8, KeyEvent.VK_9, KeyEvent.VK_0}; CheckboxMenuItem PointMenuItems[]=new CheckboxMenuItem[PointTypes.length]; final public static String Separators[]= // names {"point", "boundedpoint", "intersection", "!line", "ray", "segment", "fixedsegment", "!circle", "circle3", "fixedcircle", "!parallel", "plumb", "midpoint", "!angle", "fixedangle", "!move", "tracker", "objecttracker", "animate", "!expression", "area", "quadric", "image", "text", "!hide", "locus", "runmacro", "edit", "parameter", "targets", "definejob", "delete", "reorder", "draw", "rename", "zoom", "animatebreak"}; final public static String MenuTitles[]={"points", "lines", "circles", "complex", "angles", "move", "decorative"}; final public static int IconNumber=27; final public static int NEdit=IconNumber, NParameters=IconNumber+1, NTargets=IconNumber+2, NDefineJob=IconNumber+3, NDelete=IconNumber+4, NReorder=IconNumber+5, NDraw=IconNumber+6, NRename=IconNumber+7, NZoom=IconNumber+8, NAnimateBreak=IconNumber+9, NLocus=IconNumber+10; final public static int NAnimator=18, NObjectTracker=17, NTracker=16, NMover=15; final public static int NMacro=IconNumber-1; final public static String ObjectStrings[]= // names {"point", "boundedpoint", "intersection", "line", "ray", "segment", "fixedsegment", "circle", "circle3", "fixedcircle", "parallel", "plumb", "midpoint", "angle", "fixedangle", "move", "tracker", "objecttracker", "animate", "expression", "area", "quadric", "image", "text", "hide", "locus", "runmacro", "edit", "parameter", "targets", "definejob", "delete", "reorder", "draw", "rename", "zoom", "animatebreak"}; public static ObjectConstructor ObjectConstructors[]= // constructors {new PointConstructor(), new BoundedPointConstructor(), new IntersectionConstructor(), new LineConstructor(), new RayConstructor(), new SegmentConstructor(), new SegmentConstructor(true), new CircleConstructor(), new Circle3Constructor(), new CircleConstructor(true), new ParallelConstructor(), new PlumbConstructor(), new MidpointConstructor(), new AngleConstructor(), new AngleConstructor(true), new MoverTool(), new Tracker(), new ObjectTracker(), new AnimatorTool(), new ExpressionConstructor(), new AreaConstructor(), new QuadricConstructor(), new ImageConstructor(), new TextConstructor(), new HiderTool(), new JLocusObjectTracker(), new MacroRunner(), new EditTool(), new SetParameterTool(), new SetTargetsTool(), new SaveJob(), new DeleteTool(), new ReorderTool(), new DrawerTool(), new RenamerTool(), new ZoomerTool(), new BreakpointAnimator()}; CheckboxMenuItem ObjectMenuItems[]=new CheckboxMenuItem[ObjectConstructors.length]; // menu // checkbos // items static char ObjectKeys[]; public int CurrentTool=0; // current tool public boolean IsApplet; JPanel North, Center, MainPanel; JPanel StatusPanel, InputPanel; JPanel CenterPanel; boolean Init=false; boolean SawPreviewWarning=false; MyFileDialog FileLoad, FileSave, PicSave, HTMLSave, BackgroundLoad, ImageLoad, TemplateLoad; // The file dialogs // public LogoWindow Logo; public ZirkelFrame(final boolean applet) { IsApplet=applet; FRM=pipe_tools.getFrame(); // the canvas ZC=new ZirkelCanvas(); ZC.setBackground(Global.getParameter("colorbackground", new Color(245,245,245))); ZC.addMouseListener(ZC); ZC.addMouseMotionListener(ZC); ZC.setZirkelCanvasListener(this); ZC.setTool(ObjectConstructors[CurrentTool]); ZC.addStatusListener(this); ZC.showStatus(); // init various things initLightColors(); // initialize choices settool(0); setcolor(Global.getParameter("options.color", 0)); settype(Global.getParameter("options.type", 2)); setcolortype(Global.getParameter("options.colortype", 0)); showcolor(0); setRestricted(Global.getParameter("options.restricted", true)); setPartial(Global.getParameter("options.partial", false)); setPartialLines(Global.getParameter("options.plines", false)); setVectors(Global.getParameter("options.arrow", false)); setShowNames(Global.getParameter("options.shownames", false)); setShowValues(Global.getParameter("options.showvalues", false)); setLongNames(Global.getParameter("options.longnames", false)); setLargeFont(Global.getParameter("options.largefont", false)); setBoldFont(Global.getParameter("options.boldfont", false)); setObtuse(Global.getParameter("options.obtuse", false)); setSolid(Global.getParameter("options.solid", false)); initFileDialogs(); } final static public String DefaultIcons=" new load save back undo delete color type thickness"+" hidden showcolor macro grid comment replay"+" point line segment ray circle fixedcircle"+" parallel plumb circle3 midpoint angle fixedangle"+" move tracker objecttracker hide expression area text quadric"+" runmacro edit animate "+" info zoom draw function rename "; final static public String DefaultRestrictedIcons=" back undo color"+" hidden showcolor macro grid comment"+" point line segment ray circle"+" parallel plumb circle3 midpoint angle fixedangle"+" move tracker objecttracker hide area text quadric"+" runmacro zoom info "+" "; public boolean icon(final String s) { return Global.getParameter("icons", "none").indexOf(" "+s+" ")>=0; } public boolean enabled(final String s) { return !Global.getParameter("restricted", false)||icon(s); } public void initFileDialogs() { FileLoad=new MyFileDialog(FRM, Global.name("filedialog.open"), false); FileLoad.setPattern("*.zir *.job *.zirz *.jobz"); FileSave=new MyFileDialog(FRM, Global.name("filedialog.saveas"), true); FileSave.setPattern("*.zir *.job *.zirz *.jobz"); PicSave=new MyFileDialog(FRM, Global.name("filedialog.saveas"), true); PicSave.setPattern("*"); HTMLSave=new MyFileDialog(FRM, Global.name("filedialog.htmlsave"), true); HTMLSave.setPattern("*.html *.htm"); BackgroundLoad=new MyFileDialog(FRM, Global.name("filedialog.backgroundload"), false); BackgroundLoad.setPattern("*.gif *.jpg"); ImageLoad=new MyFileDialog(FRM, Global.name("filedialog.imageload"), false); ImageLoad.setPattern("*.gif *.jpg"); TemplateLoad=new MyFileDialog(FRM, Global.name("templateload.open"), false); TemplateLoad.setPattern("*.template"); } public static void initLightColors(Color back) { final int n=DefaultColors.length; Colors=new Color[DefaultColors.length]; for (int i=0; i0) { TR.setOmit(C.Omit); } ZC.setTool(TR); ZC.validate(); ZC.repaint(); } else { if (P==null) { throw new ConstructionException(""); } settool(NTracker); ZC.setTool(new Tracker(P, po)); if (PM!=null) { PM.setSelected(true); } ZC.validate(); ZC.repaint(); } } catch (final Exception e) { warning(Global.name("exception.track")); } } else if (C.AnimateP!=null) { // System.out.println("setting animation"); try { final PointObject P=(PointObject) C.find(C.AnimateP); if (P==null) { throw new ConstructionException(""); } final Enumeration e=C.AnimateV.elements(); while (e.hasMoreElements()) { final String s=(String) e.nextElement(); final ConstructionObject o=C.find(s); if (o==null||!(o instanceof SegmentObject||o instanceof PrimitiveCircleObject||o instanceof PointObject)) { throw new ConstructionException(""); } } settool(NAnimator); ZC.setTool(new AnimatorTool(P, C.AnimateV, ZC, C.AnimateNegative, C.AnimateOriginal, C.AnimateDelay)); } catch (final Exception e) { warning(Global.name("exception.animate")); } } else if (C.AnimateBreakpoints) { // System.out.println("setting animation with brakpoints"); final BreakpointAnimator bp=new BreakpointAnimator(); bp.setLoop(C.AnimateLoop); bp.setSpeed(C.AnimateTime); ZC.setTool(bp); bp.reset(ZC); } else { // System.out.println("setting mover"); settool(NMover); } // System.out.println("finished loading"); } public void loadMacros() { FileLoad.setPattern("*.mcr *.mcrz"); FileLoad.center(FRM); FileLoad.update(); FileLoad.setVisible(true); if (FileLoad.isAborted()) { return; } final String Filename=FileLoad.getFilePath(); try { InputStream o=new FileInputStream(Filename); if (isCompressed(Filename)) { o=new GZIPInputStream(o); } ZC.load(o, false, true); o.close(); } catch (final Exception e) { final Warning w=new Warning(FRM, Global.name("warning.loadmacros"), FileName.chop(32, e.toString(), 64), Global.name("warning"), true); w.center(FRM); w.setVisible(true); } } public void loadJob() { testjob(false); FileLoad.setPattern("*.job *.jobz"); FileLoad.center(FRM); FileLoad.update(); FileLoad.setVisible(true); if (FileLoad.isAborted()) { return; } Filename=FileLoad.getFilePath(); try { InputStream o=new FileInputStream(Filename); if (isCompressed(Filename)) { o=new GZIPInputStream(o); } clear(false); ZC.load(o); o.close(); FRM.setTitle(Global.name("program.name")+" : "+FileName.chop(Filename)); final String icons=ZC.getConstruction().Icons; if (!icons.equals("")) { Global.setParameter("restrictedicons", icons); showDefaultIcons(false); } if (ZC.isJob()) { testjob(true); } if (!ZC.getConstruction().getComment().equals("")) { showcomment(); } } catch (final Exception e) { final Warning w=new Warning(FRM, Global.name("warning.load"), FileName.chop(32, e.toString(), 64), Global.name("warning"), true); w.center(FRM); w.setVisible(true); } } public void saveJob() { testjob(false); if (!ZC.isJob()) { warning(Global.name("warning.nojob")); return; } saveas("*.job *.jobz", Global.getParameter("save.compress", false)?".jobz":".job"); } public void showcomment() { } public void showjobcomment() { } public void showconstruction() { } public boolean close() { if (eric.GUI.pipe_tools.isApplet()) { return true; } if (ZC.changed()) { final Question q=new Question(FRM, Global.name("savequestion.qsave"), Global.name("savequestion.title"), true); q.center(FRM); q.setVisible(true); if (q.yes()) { return savefile(); } return q.getResult()!=Question.ABORT; } return true; } public void doclose() { } /* * (non-Javadoc) * * @see rene.zirkel.DoneListener#notifyDone() Display a message for the * user. */ public void notifyDone() { try { Thread.sleep(500); } catch (final Exception e) { } warning(Global.name("done")); } /** * Test a job, or stop testing a job. Register as listener to ZC, when the * job is done. * * @param flag */ public void testjob(final boolean flag) { if (flag==ZC.displayJob()) { return; } // nothing to do if (flag&&!ZC.isJob()) // user error! { warning(Global.name("warning.nojob")); ZC.reloadCD(); return; } // else: ZC.displayJob(flag); // main action is in ZC. if (flag) { ZC.setDoneListener(this); } else { ZC.setDoneListener(null); } ZC.reloadCD(); } public void doexport(final boolean solution) { } public void doexporttemplate( final String template) { } MyVector TB=new MyVector(); int TBN=0; public void printCheck(final PrintWriter out, final String s) { if (TBN==0) { out.println(s); } else { out.print(s); } } public String readTemplateLine(final BufferedReader in) throws IOException { if (TB.size()>0) // Still strings in the buffer { final String h=(String) TB.elementAt(TBN); TBN++; if (TBN>=TB.size()) { TBN=0; TB.removeAllElements(); } return h; } final String h=in.readLine(); if (h==null) { return h; } if (h.indexOf('#')<0) { return h; } bufferTemplate(h); if (TB.size()>0) { return readTemplateLine(in); } else { return h; } } public void bufferTemplate(final String s) { final int n=s.indexOf('#'); if (n<0) { TB.addElement(s); return; } final String h=s.substring(n); if (h.startsWith("#title")) { bufferTemplate(s, n, h, "#title"); } else if (h.startsWith("#parameter")) { bufferTemplate(s, n, h, "#parameter"); } else if (h.startsWith("#color")) { bufferTemplate(s, n, h, "#color"); } else if (h.startsWith("#font")) { bufferTemplate(s, n, h, "#font"); } else if (h.startsWith("#codebase")) { bufferTemplate(s, n, h, "#codebase"); } else if (h.startsWith("#comment")) { for (int i=0; i<10; i++) { final String t="#comment"+i; if (h.startsWith(t)) { bufferTemplate(s, n, h, t); return; } } bufferTemplate(s, n, h, "#comment"); } else if (h.startsWith("#text")) { for (int i=0; i<10; i++) { final String t="#text"+i; if (h.startsWith(t)) { bufferTemplate(s, n, h, t); return; } } bufferTemplate(s, n, h, "#text"); } } public void bufferTemplate(final String s, final int n, String h, final String ph) { if (n>0) { TB.addElement(s.substring(0, n)); } TB.addElement(ph); h=h.substring(ph.length()); if (!h.equals("")) { bufferTemplate(h); } } public void printParagraphs(final PrintWriter out, String s, final int linelength) { final StringParser p=new StringParser(s); final Vector v=p.wrapwords(linelength); for (int i=0; i"); s=(String) v.elementAt(i); final StringParser q=new StringParser(s); final Vector w=q.wraplines(linelength); for (int j=0; j0) { out.println(); } s=(String) w.elementAt(j); out.print(s); } out.println("

"); } } public int getDigits(final double x) { return (int) (Math.log(x)/Math.log(10)+0.5); } public void setPartial(final boolean flag) { Global.setParameter("options.partial", flag); ZC.setPartial(flag); } public void setRestricted(final boolean flag) { Global.setParameter("options.restricted", flag); ZC.setRestricted(flag); } public void setPartialLines(final boolean flag) { Global.setParameter("options.plines", flag); ZC.setPartialLines(flag); } public void setVectors(final boolean flag) { Global.setParameter("options.arrow", flag); ZC.setVectors(flag); } public void setLongNames(final boolean flag) { Global.setParameter("options.longnames", flag); ZC.setLongNames(flag); } public void setBoldFont(final boolean flag) { Global.setParameter("options.boldfont", flag); ZC.setBoldFont(flag); } public void setLargeFont(final boolean flag) { Global.setParameter("options.largefont", flag); ZC.setLargeFont(flag); } public void setObtuse(final boolean flag) { Global.setParameter("options.obtuse", flag); ZC.setObtuse(flag); } public void setSolid(final boolean flag) { Global.setParameter("options.solid", flag); ZC.setSolid(flag); } public void setShowNames(final boolean flag) { Global.setParameter("options.shownames", flag); ZC.setShowNames(flag); } public void setShowValues(final boolean flag) { Global.setParameter("options.showvalue", flag); ZC.setShowValues(flag); } void definemacro() { ZC.defineMacro(); settool(NParameters); ZC.getOC().reset(ZC); } String OldMacro=null; public void runMacro(final boolean shift) { Macro m=ZC.chooseMacro(OldMacro); if (!shift||m==null) { m=ZC.chooseMacro(); } if (m==null) { settool(CurrentTool); return; } runMacro(m); } public void runMacro(final Macro m) { ((MacroRunner) ObjectConstructors[NMacro]).setMacro(m, ZC); settool(NMacro); OldMacro=m.getName(); } public void replayChosen() { } public void setDigits() { ZC.updateDigits(); ZC.repaint(); } public void setLanguage() { } public void savePNG() { } /** * Copy graphics to clipboard (in print preview format). */ public void copyPNG() { } public void saveFIG() { } public void saveSVG() { } public void savePDF() { } public void saveEPS() { } public void setVisual(final boolean flag) { } public void replay() { ZC.OC.invalidate(ZC); ZC.getConstruction().setOriginalOrder(true); ZC.getConstruction().setOriginalOrder(false); ZC.validate(); ZC.repaint(); } public int resizeCol; boolean resizeFlag=false; public void reset() { ZC.reset(); if (CurrentTool==NTargets) { settool(NParameters); } } public String loadImage() { ImageLoad.center(FRM); ImageLoad.update(); ImageLoad.setVisible(true); if (ImageLoad.isAborted()) { return ""; } return ImageLoad.getFilePath(); } public Image doLoadImage(String filename) { Image img=tryToLoadImage(filename); if (img==null){ img=tryToLoadImage(FileName.path(Filename)+System.getProperty("file.separator")+filename); }; return img; } public Image tryToLoadImage(String filename){ try { final Image i=FRM.getToolkit().getImage(filename); final MediaTracker mt=new MediaTracker(FRM); mt.addImage(i, 0); mt.waitForID(0); if (mt.checkID(0)&&!mt.isErrorAny()) { return i; } else { throw new Exception(Global.name("error.image")); } } catch (final Exception e) { return null; } } /** * Load a background picture, and resize if wanted * UNIQUEMENT APPELE PAR LE CLIC SUR L'ICONE DE LA PALETTE : */ public void loadBackground() { BackgroundLoad.center(FRM); BackgroundLoad.update(); BackgroundLoad.setVisible(true); if (BackgroundLoad.isAborted()) { return; } final String filename=BackgroundLoad.getFilePath(); Media.createMedia(filename); ZC.setBackground(Media.getImage(FileName.filename(filename))); Background=FileName.filename(filename); ZC.getConstruction().BackgroundFile=Background; } public void doloadBackground(final String filename) { Media.createMedia(filename); ZC.setBackground(Media.getImage(filename)); ZC.repaint(); Background=FileName.filename(filename); ZC.getConstruction().BackgroundFile=Background; } public void resize() { FRM.pack(); } public void track() { if (ZC.getCurrentTool() instanceof ObjectTracker&&((ObjectTracker) ZC.getCurrentTool()).isComplete()) { final Question q=new Question(FRM, Global.name("trackquestion.keep"), Global.name("trackquestion.title"), true); q.center(FRM); q.setVisible(true); if (q.yes()) { ((ObjectTracker) ZC.getCurrentTool()).keep(ZC); } } } public void restrictIcons(final boolean flag) { if (flag) { showDefaultIcons(false); } else { showDefaultIcons(true); } } public void setinfo(final String s, final boolean WithTxtFocus) { JZirkelCanvas.setinfo(s, WithTxtFocus); } public void setinfo(final String s) { setinfo(s, true); } /** * Load default macros from ".default.mcr", if that file exists. Else load * from resources, if such a file exists in the resources. */ public void loadBuiltInMacros() { try { final InputStream o=getClass().getResourceAsStream("/builtin.mcr"); ZC.ProtectMacros=true; ZC.load(o, false, true); ZC.ProtectMacros=false; o.close(); } catch (final Exception e) { } } public void loadDefaultMacros() { } public void showDefaultIcons(final boolean flag) { if (!flag) { ZC.clearProtectedMacros(); } else { loadDefaultMacros(); } } /** * Search for a help topic. This help should be replaced by the context * help. * * @param subject * file name * @return */ public boolean haveHelp(final String subject) { final String lang=Global.name("language", ""); try { final BufferedReader in=new BufferedReader(new InputStreamReader( getClass().getResourceAsStream( "/rene/zirkel/docs/"+lang+subject))); in.close(); } catch (final Exception e) { return false; } return true; } /** * Opened or saved a file (or new construction). * * @return state */ public boolean haveFile() { return !Filename.equals(""); } public void newfile(final boolean defaults) { if (ZC.changed()) { final Question q=new Question(FRM, Global.name("savequestion.qsave"), Global.name("savequestion.title"), true); q.center(FRM); q.setVisible(true); if (q.yes()&&!savefile()) { return; } if (q.isAborted()) { return; } } clear(defaults); Filename=""; clearNonprotectedMacros(); FRM.setTitle(Global.name("program.name")); } public void warning(final String s) { final Warning w=new Warning(FRM, s, "", true); w.center(FRM); w.setVisible(true); } /** * Display or hide the permanent construction display * * @param flag */ public void showConstructionDisplay(final boolean flag) { Global.setParameter("options.showdisplay", flag); } /** * Set the show hidden state * * @param flag */ public void editGrid() { } } ./src/rene/zirkel/objects/0000755000175000017500000000000011302733455014425 5ustar yvesyves./src/rene/zirkel/objects/UserFunctionObject.java0000640000175000017500000002360211314640704021037 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: Functionbject.java import java.awt.Checkbox; import java.awt.Color; import java.awt.FontMetrics; import java.awt.Frame; import java.awt.TextField; import java.awt.event.FocusEvent; import java.util.Enumeration; import java.util.StringTokenizer; import javax.swing.JPanel; import rene.dialogs.Warning; import rene.gui.Global; import rene.gui.IconBar; import rene.gui.MyLabel; import rene.gui.TextFieldAction; import rene.util.xml.XmlWriter; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.MyGraphics; import eric.bar.JProperties; import eric.bar.JPropertiesBar; /** * @author Rene * * This class is for function of several variables. Those functions * cannot be drawn at all. */ public class UserFunctionObject extends ConstructionObject implements MoveableObject, DriverObject, Evaluator { static Count N = new Count(); Expression EY = null; double X[] = { 0 }; String Var[] = { "x" }; protected double Xpos, Ypos; protected boolean Fixed; protected Expression EXpos, EYpos; String LASTE = ""; public UserFunctionObject(final Construction c) { super(c); validate(); updateText(); N.reset(); } @Override public void setDefaults() { setShowName(Global.getParameter("options.text.shownames", false)); setShowValue(Global.getParameter("options.text.showvalues", false)); setColor(Global.getParameter("options.text.color", 0), Global .getParameter("options.text.pcolor", (Color) null)); setColorType(Global.getParameter("options.text.colortype", 0)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); setPartial(Cn.Partial); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.text.shownames", false)); setShowValue(Global.getParameter("options.text.showvalues", false)); setColor(Global.getParameter("options.text.color", 0), Global .getParameter("options.text.pcolor", (Color) null)); setColorType(Global.getParameter("options.text.colortype", 0)); } @Override public String getTag() { return "Function"; } @Override public int getN() { return N.next(); } @Override public void updateText() { setText(getDisplayValue()); } public boolean isValid() { return Valid; } @Override public void validate() { if (EY != null) { Valid = EY.isValid(); } else { Valid = false; } if (Fixed && EXpos != null && EXpos.isValid()) { try { Xpos = EXpos.getValue(); } catch (final Exception e) { Valid = false; return; } } if (Fixed && EYpos != null && EYpos.isValid()) { try { Ypos = EYpos.getValue(); } catch (final Exception e) { Valid = false; return; } } } public void setExpressions(final String t, final String ey) { final StringTokenizer tok = new StringTokenizer(t); Var = new String[tok.countTokens()]; X = new double[tok.countTokens()]; int i = 0; while (tok.hasMoreTokens()) { Var[i++] = tok.nextToken(); } EY = new Expression(ey, getConstruction(), this, Var); validate(); } @Override public String getEY() { if (EY != null) { return EY.toString(); } else { return "0"; } } double C, R, W, H; @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) { return; } final FontMetrics fm = g.getFontMetrics(); H = fm.getHeight(); C = zc.col(Xpos); R = zc.row(Ypos); g.setColor(this); setFont(g); final String s = AngleObject.translateToUnicode(getDisplayValue()); g.drawString(s, C, R); R -= H; W = fm.stringWidth(s); } @Override public double getValue() throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } return X[0]; } public double getValue(final String var) throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } for (int i = 0; i < Var.length; i++) { if (var.equals(Var[i])) { return X[i]; } } return X[0]; } @Override public String getDisplayValue() { String s = ""; if (showName()) { if (getAlias() != null) { s = getAlias() + " : "; } s = s + getName() + "(" + Var[0]; for (int i = 1; i < Var.length; i++) { s = s + "," + Var[i]; } s = s + ")"; if (showValue()) { s = s + "="; } } if (showValue()) { s = s + ((EY == null) ? "" : JProperties.Point_To_Comma(EY .toString(), Cn, true)); } return s; } @Override public boolean nearto(final int cc, final int rr, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } return C <= cc && R <= rr && cc <= C + W && rr <= R + H; } public boolean EditAborted; @Override public void printArgs(final XmlWriter xml) { xml.printArg("f", EY.toString()); if (Fixed && EXpos != null && EXpos.isValid()) { xml.printArg("x", EXpos.toString()); } else { xml.printArg("x", "" + Xpos); } if (Fixed && EYpos != null && EYpos.isValid()) { xml.printArg("y", EYpos.toString()); } else { xml.printArg("y", "" + Ypos); } if (Fixed) { xml.printArg("fixed", "true"); } xml.printArg("var", getVar()); } @Override public void translate() { try { EY = new Expression(EY.toString(), getConstruction(), this, Var); final ConstructionObject O = getTranslation(); setTranslation(this); if (Fixed) { try { setFixed(EXpos.toString(), EYpos.toString()); EXpos.translate(); EYpos.translate(); } catch (final Exception e) { } } validate(); setTranslation(O); } catch (final Exception e) { System.out.println(); System.out.println(getName()); System.out.println(e); e.printStackTrace(); } } @Override public void setFixed(final boolean flag) { Fixed = flag; if (!Fixed) { EXpos = EYpos = null; } updateText(); } @Override public void setFixed(final String x, final String y) { Fixed = true; EXpos = new Expression(x, getConstruction(), this); EYpos = new Expression(y, getConstruction(), this); updateText(); } @Override public boolean fixed() { return Fixed; } @Override public String getEXpos() { if (EXpos != null) { return EXpos.toString(); } else { return "" + round(Xpos); } } @Override public String getEYpos() { if (EYpos != null) { return EYpos.toString(); } else { return "" + round(Ypos); } } @Override public boolean onlynearto(final int x, final int y, final ZirkelCanvas zc) { return false; // return nearto(x,y,zc); } @Override public boolean equals(final ConstructionObject o) { return false; } @Override public Enumeration depending() { DL.reset(); addDepending(EY); if (Fixed) { addDepending(EXpos); addDepending(EYpos); } return DL.elements(); } public void addDepending(final Expression E) { if (E != null) { final Enumeration e = E.getDepList().elements(); while (e.hasMoreElements()) { DL.add((ConstructionObject) e.nextElement()); } } } @Override public boolean hasUnit() { return false; } public double evaluateF(final double x[]) throws ConstructionException { int n = x.length; if (n > X.length) { n = X.length; } for (int i = 0; i < n; i++) { X[i] = x[i]; } for (int i = n; i < X.length; i++) { X[i] = 0; } try { return EY.getValue(); } catch (final Exception e) { throw new ConstructionException(""); } } public double evaluateF(final double x) throws ConstructionException { X[0] = x; for (int i = 1; i < X.length; i++) { X[i] = 0; } try { return EY.getValue(); } catch (final Exception e) { throw new ConstructionException(""); } } public double evaluateF(final double x, final double y) throws ConstructionException { X[0] = x; X[1] = y; for (int i = 2; i < X.length; i++) { X[i] = 0; } try { return EY.getValue(); } catch (final Exception e) { throw new ConstructionException(""); } } @Override public boolean maybeTransparent() { return true; } @Override public boolean canDisplayName() { return true; } @Override public boolean isFilledForSelect() { return false; } public String getVar() { String vars = Var[0]; for (int i = 1; i < Var.length; i++) { vars = vars + " " + Var[i]; } return vars; } public void dragTo(final double x, final double y) { move(oldx + (x - startx), oldy + (y - starty)); } @Override public void move(final double x, final double y) { Xpos = x; Ypos = y; } double oldx, oldy, startx, starty; public boolean moveable() { return !Fixed; } public void startDrag(final double x, final double y) { oldx = Xpos; oldy = Ypos; startx = x; starty = y; } public double getOldX() { return oldx; } public double getOldY() { return oldy; } @Override public double getX() { return Xpos; } @Override public double getY() { return Ypos; } @Override public boolean isDriverObject() { return true; } public boolean somethingChanged() { return (!EY.toString().equals(LASTE)); } public void clearChanges() { LASTE = EY.toString(); } } ./src/rene/zirkel/objects/PrimitiveLineObject.java0000640000175000017500000002672511314640704021204 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: PrimitiveLineObject.java import java.awt.Checkbox; import java.awt.Color; import java.awt.Frame; import java.awt.TextField; import java.awt.event.FocusEvent; import java.util.Enumeration; import javax.swing.JPanel; import rene.gui.Global; import rene.gui.IconBar; import rene.gui.MyLabel; import rene.gui.TextFieldAction; import rene.util.xml.XmlWriter; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.structures.Coordinates; public class PrimitiveLineObject extends ConstructionObject implements PointonObject { protected double X1, Y1, DX, DY; protected PointObject P1; PointObject Dep[]; int NDep; boolean Partial = false; public PrimitiveLineObject(final Construction c) { super(c); setColor(ColorIndex, SpecialColor); } public PrimitiveLineObject(final Construction c, final String Nme) { super(c, Nme); setColor(ColorIndex, SpecialColor); } public void setP1DXDY(final PointObject p, final double dx, final double dy) { P1 = p; DX = dx; DY = dy; X1 = P1.getX(); Y1 = P1.getY(); } @Override public void setDefaults() { setShowName(Global.getParameter("options.line.shownames", false)); setShowValue(Global.getParameter("options.line.showvalues", false)); setColor(Global.getParameter("options.line.color", 0), Global .getParameter("options.line.pcolor", (Color) null)); setColorType(Global.getParameter("options.line.colortype", 0)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Global.getParameter("options.line.large", false)); setBold(Global.getParameter("options.line.bold", false)); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.line.shownames", false)); setShowValue(Global.getParameter("options.line.showvalues", false)); setColor(Global.getParameter("options.line.color", 0), Global .getParameter("options.line.pcolor", (Color) null)); setColorType(Global.getParameter("options.line.colortype", 0)); setLarge(Global.getParameter("options.line.large", false)); setBold(Global.getParameter("options.line.bold", false)); } @Override public String getTag() { return "Line"; } double k1, k2; boolean k12valid = false; @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) { return; } // compute middle of the screen: final double xm = (zc.minX() + zc.maxX()) / 2, ym = (zc.minY() + zc .maxY()) / 2; // compute distance from middle to line: final double d = (xm - X1) * DY - (ym - Y1) * DX; // compute point with minimal distance final double x = xm - d * DY, y = ym + d * DX; // compute size of the screen final double a = Math.max(zc.maxX() - zc.minX(), zc.maxY() - zc.minY()); if (Math.abs(d) > a) { return; } // compute distance from closest point to source final double b = (x - X1) * DX + (y - Y1) * DY; // compute the two visible endpoints k1 = b - a; k2 = b + a; k12valid = true; if (Partial && Dep != null && !zc.showHidden()) { final double dd = (zc.maxX() - zc.minX()) / 20; double dmin = -dd, dmax = +dd; if (Dep != null) { for (int i = 0; i < NDep; i++) { if (!Dep[i].valid() || Dep[i].mustHide(zc)) { continue; } final double s = project(Dep[i].getX(), Dep[i].getY()); if (s - dd < dmin) { dmin = s - dd; } else if (s + dd > dmax) { dmax = s + dd; } } } if (k1 < dmin) { k1 = dmin; } if (k2 > dmax) { k2 = dmax; } } final double c1 = zc.col(X1 + k1 * DX), c2 = zc.col(X1 + k2 * DX), r1 = zc .row(Y1 + k1 * DY), r2 = zc.row(Y1 + k2 * DY); // paint: if (isStrongSelected() && g instanceof MyGraphics13) { ((MyGraphics13) g).drawMarkerLine(c1, r1, c2, r2); } g.setColor(this); if (tracked()) zc.UniversalTrack.drawTrackLine(this, c1, r1, c2, r2); g.drawLine(c1, r1, c2, r2, this); final String s = getDisplayText(); if (!s.equals("")) { g.setLabelColor(this); setFont(g); DisplaysText = true; if (KeepClose) { final double side = (YcOffset < 0) ? 1 : -1; drawLabel(g, s, zc, X1 + XcOffset * DX, Y1 + XcOffset * DY, side * DX, side * DY, 0, 0); } else { drawLabel(g, s, zc, x + a / 5 * DX, y + a / 5 * DY, DX, DY, XcOffset, YcOffset); } } } @Override public boolean canKeepClose() { return true; } @Override public void setKeepClose(final double x, final double y) { KeepClose = true; XcOffset = (x - X1) * DX + (y - Y1) * DY; YcOffset = (x - X1) * DY - (y - Y1) * DX; } @Override public boolean nearto(final int c, final int r, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } // compute point at c,r final double x = zc.x(c), y = zc.y(r); // compute distance from x,y final double d = (x - X1) * DY - (y - Y1) * DX; // scale in screen coordinates Value = Math.abs(zc.col(zc.minX() + d) - zc.col(zc.minX())); return Value < zc.selectionSize() * 2; } @Override public boolean onlynearto(final int c, final int r, final ZirkelCanvas zc) { return false; } public static Coordinates intersect(final PrimitiveLineObject l1, final PrimitiveLineObject l2) // compute the intersection // coordinates of two lines { final double det = -l1.DX * l2.DY + l1.DY * l2.DX; if (Math.abs(det) < 1e-10) { return null; } final double a = (-(l2.X1 - l1.X1) * l2.DY + (l2.Y1 - l1.Y1) * l2.DX) / det; return new Coordinates(l1.X1 + a * l1.DX, l1.Y1 + a * l1.DY); } public static Coordinates intersect(final PrimitiveLineObject l, final PrimitiveCircleObject c) // compute the intersection // coordinates of a line with a // circle { double x = c.getX(), y = c.getY(); final double r = c.getR(); final double d = (x - l.X1) * l.DY - (y - l.Y1) * l.DX; if (Math.abs(d) > r + 1e-10) { return null; } x -= d * l.DY; y += d * l.DX; double h = r * r - d * d; if (h > 0) { h = Math.sqrt(h); } else { h = 0; } return new Coordinates(x + h * l.DX, y + h * l.DY, x - h * l.DX, y - h * l.DY); } public static Coordinates intersect(final PrimitiveLineObject l, final QuadricObject q) { // compute the intersection coordinates of a line with a quadric // done with XCAS : // System.out.println("l.DX="+l.DX+" l.DY="+l.DY); final double M = -l.DY, N2 = l.DX, P = -(M * l.X1 + N2 * l.Y1); // System.out.println("M="+M+" N2="+N2+" P="+P); final double A = q.X[0], B = q.X[1], C = q.X[2], D = q.X[3], E = q.X[4], F = q.X[5]; double x1 = 0, x2 = 0, y1 = 0, y2 = 0; if (N2 != 0) { final double part1 = -2 * B * M * P - C * N2 * N2 + D * M * N2 + E * N2 * P; final double part2 = Math.abs(N2) * Math.sqrt(-2 * M * D * N2 * C + 4 * P * D * A * N2 + 4 * P * M * B * C + 4 * E * M * N2 * F - 2 * E * P * N2 * C - 2 * E * P * M * D - 4 * M * M * B * F - 4 * P * P * A * B - 4 * A * N2 * N2 * F + N2 * N2 * C * C + M * M * D * D + E * E * P * P); final double part3 = 2 * A * N2 * N2 + 2 * B * M * M + (-2 * E) * M * N2; x1 = (part1 + part2) / part3; if (Double.isNaN(x1)) { return null; } y1 = (-M * x1 - P) / N2; x2 = (part1 - part2) / part3; y2 = (-M * x2 - P) / N2; if (((x2 - x1) / l.DX) < 0) { return new Coordinates(x2, y2, x1, y1); } } else { x1 = -P / M; x2 = x1; final double part1 = -D * M * M + E * M * P; final double part2 = Math.abs(M) * Math.sqrt(4 * P * M * B * C - 2 * E * P * M * D - 4 * M * M * B * F - 4 * P * P * A * B + M * M * D * D + E * E * P * P); final double part3 = 2 * M * M * B; y1 = (part1 + part2) / part3; if (Double.isNaN(y1)) { return null; } y2 = (part1 - part2) / part3; if (((y2 - y1) / l.DY) < 0) { return new Coordinates(x2, y2, x1, y1); } } return new Coordinates(x1, y1, x2, y2); } public double getDX() { return DX; } public double getDY() { return DY; } @Override public double getX() { return X1; } @Override public double getY() { return Y1; } @Override public String getEquation() { double y = DX, x = -DY; double c = y * Y1 + x * X1; if (c < 0) { c = -c; x = -x; y = -y; } if (Math.abs(x) < 1e-10 && y < 0) { c = -c; x = -x; y = -y; } else if (Math.abs(y) < 1e-10 && x < 0) { c = -c; x = -x; y = -y; } final String s = helpDisplayValue(true, x, "x"); return s + helpDisplayValue(s.equals(""), y, "y") + "=" + ((Math.abs(c) < 1e-10) ? "0" : helpDisplayNumber(true, c)); } /** * Test, if the projection of (x,y) to the line contains that point. */ public boolean contains(final double x, final double y) { return true; } @Override public void printArgs(final XmlWriter xml) { if (Partial) { xml.printArg("partial", "true"); } } public double project(final double x, final double y) { return (x - X1) * DX + (y - Y1) * DY; } @Override public boolean equals(final ConstructionObject o) { if (!(o instanceof PrimitiveLineObject) || !o.valid()) { return false; } final PrimitiveLineObject l = (PrimitiveLineObject) o; return equals(DX * l.DY - DY * l.DX, 0) && equals((X1 - l.X1) * DY - (Y1 - l.Y1) * DX, 0); } public PointObject getP1() { return P1; } public Enumeration points() { return depending(); } @Override public boolean locallyLike(final ConstructionObject o) { if (!(o instanceof PrimitiveLineObject)) { return false; } return (equals(DX, ((PrimitiveLineObject) o).DX) && equals(DY, ((PrimitiveLineObject) o).DY)) || (equals(-DX, ((PrimitiveLineObject) o).DX) && equals(-DY, ((PrimitiveLineObject) o).DY)); } @Override public boolean isPartial() { return Partial; } @Override public void setPartial(final boolean partial) { if (Partial == partial) { return; } Partial = partial; if (partial) { Dep = new PointObject[16]; NDep = 0; } else { Dep = null; } } public void addDep(final PointObject p) { if (!Partial || Dep == null || NDep >= Dep.length) { return; } Dep[NDep++] = p; } @Override public void clearCircleDep() { NDep = 0; } @Override public int getDistance(final PointObject P) { final double h = project(P.getX(), P.getY()); final double dx = P.getX() - (getX() + h * getDX()); final double dy = P.getY() - (getY() + h * getDY()); final double d = Math.sqrt(dx * dx + dy * dy); return (int) Math.round(d * Cn.getPixel()); } public void project(final PointObject P) { final double h = project(P.getX(), P.getY()); P.setXY(getX() + h * getDX(), getY() + h * getDY()); P.setA(h); } public void project(final PointObject P, final double alpha) { P.setXY(getX() + alpha * getDX(), getY() + alpha * getDY()); } public boolean canInteresectWith(final ConstructionObject o) { return true; } public void repulse(final PointObject P) { project(P); } } ./src/rene/zirkel/objects/SegmentObject.java0000640000175000017500000003467611314640704020032 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: SegmentObject.java import eric.bar.JPropertiesBar; import java.awt.Color; import java.awt.Frame; import java.util.Enumeration; import rene.dialogs.Warning; import rene.gui.Global; import rene.util.xml.XmlWriter; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; /** * @author Rene Class for segments, derived from LineObject, TwoPointLineObject. * Segments override various methods from lines. They have a length. * Also the length can be fixed. */ public class SegmentObject extends TwoPointLineObject { static Count N = new Count(); protected boolean Fixed = false; // fixed length? Expression E; // expression to fix the length. boolean ExpressionFailed; // invalid expression? boolean Arrow = false; // draw as arrow. int code_symbol = 0; public SegmentObject(final Construction c, final PointObject p1, final PointObject p2) { super(c, p1, p2); validate(); updateText(); Unit = Global.getParameter("unit.length", ""); } @Override public String getTag() { return "Segment"; } @Override public int getN() { return N.next(); } // public void setDefaults () // { Arrow=Cn.Vectors; // super.setDefaults(); // } @Override public void setDefaults() { Arrow = Cn.Vectors; setShowName(Global.getParameter("options.segment.shownames", false)); setShowValue(Global.getParameter("options.segment.showvalues", false)); setColor(Global.getParameter("options.segment.color", 0), Global .getParameter("options.segment.pcolor", (Color) null)); setColorType(Global.getParameter("options.segment.colortype", 0)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Global.getParameter("options.segment.large", false)); setBold(Global.getParameter("options.segment.bold", false)); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.segment.shownames", false)); setShowValue(Global.getParameter("options.segment.showvalues", false)); setColor(Global.getParameter("options.segment.color", 0), Global .getParameter("options.segment.pcolor", (Color) null)); setColorType(Global.getParameter("options.segment.colortype", 0)); setLarge(Global.getParameter("options.segment.large", false)); setBold(Global.getParameter("options.segment.bold", false)); } @Override public void updateText() { if (!Fixed) { setText(text2(Global.name("text.segment"), P1.getName(), P2 .getName())); } else { if (E == null) { setText(text3(Global.name("text.segment.fixed"), P1.getName(), P2.getName(), "" + round(R))); } else { setText(text3(Global.name("text.segment.fixed"), P1.getName(), P2.getName(), "\"" + E.toString() + "\"")); } } } @Override public void validate() { ExpressionFailed = false; if (!P1.valid() || !P2.valid()) { Valid = false; return; } else { Valid = true; X1 = P1.getX(); Y1 = P1.getY(); X2 = P2.getX(); Y2 = P2.getY(); // compute normalized vector in the direction of the line: DX = X2 - X1; DY = Y2 - Y1; R = Math.sqrt(DX * DX + DY * DY); // System.out.println("X1="+X1+" Y1="+Y1+" | X2="+X2+" Y2="+Y2+" R="+R); // if fixed, move the moveable endpoint. if (Fixed && E != null) { try { final double FixedR = E.getValue(); // System.out.println(R+" "+FixedR); if (FixedR < 1e-8) { R = 0; ExpressionFailed = true; Valid = false; return; } boolean movefirst = P1.moveableBy(this), movesecond = P2 .moveableBy(this); if (P2.getBound() != null) { final ConstructionObject bound = P2.getBound(); if (bound instanceof RayObject) { if (((RayObject) bound).getP1() == P1) { movesecond = true; } } } else if (P1.getBound() != null) { final ConstructionObject bound = P1.getBound(); if (bound instanceof RayObject) { if (((RayObject) bound).getP1() == P2) { movefirst = true; movesecond = false; } } } if (movesecond) { if (R < 1e-10) { P2.move(X1 + FixedR, Y1); } else { P2.move(X1 + FixedR * DX / R, Y1 + FixedR * DY / R); } P1.setUseAlpha(false); // System.out.println("Move "+P2.getName()); } else if (movefirst) { if (R < 1e-10) { P1.move(X2 - FixedR, Y2); } else { P1.move(X2 - FixedR * DX / R, Y2 - FixedR * DY / R); } P2.setUseAlpha(false); // System.out.println("Move "+P1.getName()); } else { Fixed = false; // no moveable endpoint! } if (Fixed) { X1 = P1.getX(); Y1 = P1.getY(); X2 = P2.getX(); Y2 = P2.getY(); DX = X2 - X1; DY = Y2 - Y1; R = Math.sqrt(DX * DX + DY * DY); P2.movedBy(this); P1.movedBy(this); } } catch (final Exception e) { ExpressionFailed = true; Valid = false; R = 0; return; } } // See of the length is too small. if (R < 1e-10) { R = 0; DX = 1; DY = 0; } else { DX /= R; DY /= R; } } } @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) { return; } final double c1 = zc.col(X1), r1 = zc.row(Y1), c2 = zc.col(X2), r2 = zc .row(Y2); if (visible(zc)) { if (isStrongSelected() && g instanceof MyGraphics13) { ((MyGraphics13) g).drawMarkerLine(c1, r1, c2, r2); } g.setColor(this); if (tracked()) { zc.UniversalTrack.drawTrackLine(this, c1, r1, c2, r2); } g.drawLine(c1, r1, c2, r2, this); if (code_symbol > 0) { // length of the tick mark : final double rr = 7; // distance between two marks : final double dd = 3; // oblique de la marque : final double ob = 2; final double cM = (c1 + c2) / 2, rM = (r1 + r2) / 2; final double A = c2 - cM, B = r2 - rM; final double sqrt2 = Math.sqrt(B * B + A * A); final double xx1 = -(rr * B) / sqrt2 + cM - ob * A / sqrt2; final double yy1 = (rr * A) / sqrt2 + rM - ob * B / sqrt2; final double xx2 = (rr * B) / sqrt2 + cM + ob * A / sqrt2; final double yy2 = -(rr * A) / sqrt2 + rM + ob * B / sqrt2; final double xt = dd * A / sqrt2, yt = dd * B / sqrt2; switch (code_symbol) { case 1: g.drawLine(xx1, yy1, xx2, yy2, this); break; case 2: g.drawLine(xx1 - xt, yy1 - yt, xx2 - xt, yy2 - yt, this); g.drawLine(xx1 + xt, yy1 + yt, xx2 + xt, yy2 + yt, this); break; case 3: g.drawLine(xx1 - 2 * xt, yy1 - 2 * yt, xx2 - 2 * xt, yy2 - 2 * yt, this); g.drawLine(xx1, yy1, xx2, yy2, this); g.drawLine(xx1 + 2 * xt, yy1 + 2 * yt, xx2 + 2 * xt, yy2 + 2 * yt, this); break; case 4: g.drawLine(xx1 - 3 * xt, yy1 - 3 * yt, xx2 - 3 * xt, yy2 - 3 * yt, this); g.drawLine(xx1 - xt, yy1 - yt, xx2 - xt, yy2 - yt, this); g.drawLine(xx1 + xt, yy1 + yt, xx2 + xt, yy2 + yt, this); g.drawLine(xx1 + 3 * xt, yy1 + 3 * yt, xx2 + 3 * xt, yy2 + 3 * yt, this); break; case 5: g.drawLine(xx1 - 2 * xt, yy1 - 2 * yt, xx2 + 2 * xt, yy2 + 2 * yt, this); g.drawLine(xx1 + 2 * xt, yy1 + 2 * yt, xx2 - 2 * xt, yy2 - 2 * yt, this); break; case 6: g.drawCircle(cM, rM, 2 * dd, this); break; } } if (Arrow) // draw as arrow! { final double a = Math.PI * 0.9; final double r = zc.dx(zc.scale(Global.getParameter( "arrowsize", 15))); // 10 pixel on the screen final double[] cols = new double[3]; cols[0] = c2; cols[1] = zc .col(X2 + (DX * Math.cos(a) + DY * Math.sin(a)) * r); cols[2] = zc.col(X2 + (DX * Math.cos(-a) + DY * Math.sin(-a)) * r); final double[] rows = new double[3]; rows[0] = r2; rows[1] = zc.row(Y2 + (-DX * Math.sin(a) + DY * Math.cos(a)) * r); rows[2] = zc.row(Y2 + (-DX * Math.sin(-a) + DY * Math.cos(-a)) * r); g.fillPolygon(cols, rows, 3, true, false, this); } } final String s = getDisplayText(); if (!s.equals("")) { g.setLabelColor(this); setFont(g); DisplaysText = true; if (KeepClose) { final double side = (YcOffset < 0) ? 1 : -1; drawLabel(g, s, zc, X1 + XcOffset * (X2 - X1), Y1 + XcOffset * (Y2 - Y1), side * DX, side * DY, 0, 0); } else { drawLabel(g, s, zc, (X1 + X2) / 2, (Y1 + Y2) / 2, DX, DY, XcOffset, YcOffset); } } } @Override public boolean canKeepClose() { return true; } @Override public void setKeepClose(final double x, final double y) { KeepClose = true; XcOffset = (x - X1) / R * DX + (y - Y1) / R * DY; YcOffset = (x - X1) / R * DY - (y - Y1) / R * DX; } // public String getDisplayValue () // { return // eric.JGlobals.fixDecimal(""+round(R,ZirkelCanvas.LengthsFactor)); // } @Override public String getDisplayValue() { // return ""+round(R,ZirkelCanvas.LengthsFactor); return Global.getLocaleNumber(R, "lengths"); } /** * see, if a point is on the segment or near to it. */ @Override public boolean nearto(final int c, final int r, final ZirkelCanvas zc) { if (ExpressionFailed && P1.valid()) { return P1.nearto(c, r, zc); } if (ExpressionFailed && P2.valid()) { return P2.nearto(c, r, zc); } if (!displays(zc)) { return false; } // compute point at c,r final double x = zc.x(c), y = zc.y(r); // compute distance from line double d = (x - X1) * DY - (y - Y1) * DX; // compute offset final double o = (x - X1) * DX + (y - Y1) * DY, o1 = (X2 - X1) * DX + (Y2 - Y1) * DY; if (o1 > 0) { if (o > o1) { d = Math.sqrt((x - X2) * (x - X2) + (y - Y2) * (y - Y2)); } else if (o < 0) { d = Math.sqrt((x - X1) * (x - X1) + (y - Y1) * (y - Y1)); } } else { if (o < o1) { d = Math.sqrt((x - X2) * (x - X2) + (y - Y2) * (y - Y2)); } else if (o > 0) { d = Math.sqrt((x - X1) * (x - X1) + (y - Y1) * (y - Y1)); } } // scale in screen coordinates Value = Math.abs(zc.col(zc.minX() + d) - zc.col(zc.minX())) * 0.9; return Value < zc.selectionSize(); } /** * true, if the segment is too small. */ @Override public boolean onlynearto(final int c, final int r, final ZirkelCanvas zc) { return R < zc.dx(3 * (int) zc.pointSize()); } @Override public void printArgs(final XmlWriter xml) { xml.printArg("from", P1.getName()); xml.printArg("to", P2.getName()); if (Fixed && E != null) { xml.printArg("fixed", E.toString()); } if (Arrow) { xml.printArg("arrow", "true"); } if (code_symbol > 0) { xml.printArg("code_symbol", "" + code_symbol); } super.printArgs(xml); } @Override public double getLength() { return R; } @Override public boolean fixed() { return Fixed; } @Override public void setFixed(final boolean flag, final String s) throws ConstructionException { if (!flag || s.equals("")) { Fixed = false; E = null; } else { E = new Expression(s, getConstruction(), this); if (!E.isValid()) { throw new ConstructionException(E.getErrorText()); } Fixed = true; } updateText(); } @Override public void round() { try { setFixed(true, getDisplayValue()); validate(); } catch (final Exception e) { } } /** * @return Segment can be fixed in length. */ @Override public boolean canFix() { return P1.moveableBy(this) || P2.moveableBy(this); } @Override public boolean contains(final double x, final double y) { final double a = (x - X1) * DX + (y - Y1) * DY; if (a < -1e-9 || a > R + 1e-9) { return false; } return true; } @Override public double project(final double x, final double y) { final double h = super.project(x, y); if (h < 0) { return 0; } if (h > R) { return R; } return h; } /** * @return true, if equal. */ @Override public boolean equals(final ConstructionObject o) { if (!(o instanceof SegmentObject) || !o.valid()) { return false; } final SegmentObject l = (SegmentObject) o; return (equals(X1, l.X1) && equals(X2, l.X2) && equals(Y1, l.Y1) && equals( Y2, l.Y2)) || (equals(X1, l.X2) && equals(Y1, l.Y2) && equals(X2, l.X1) && equals( Y2, l.Y1)); } public boolean isValidFix() { return E != null && E.isValid(); } @Override public String getStringLength() { if (E != null) { return E.toString(); } else { return "" + round(R); } } public int getSegmentCode() { return code_symbol; } public void setSegmentCode(final int i) { code_symbol = i; } @Override public double getValue() throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } else { return R; } } @Override public void translate() { super.translate(); try { setFixed(Fixed, E.toString()); E.translate(); } catch (final Exception e) { Fixed = false; } } @Override public Enumeration depending() { if (!Fixed || E == null) { return super.depending(); } else { super.depending(); final Enumeration e = E.getDepList().elements(); while (e.hasMoreElements()) { DL.add((ConstructionObject) e.nextElement()); } return DL.elements(); } } public void setArrow(final boolean arrow) { Arrow = arrow; } public boolean isArrow() { return Arrow; } @Override public void project(final PointObject P) { final double h = project(P.getX(), P.getY()); P.setXY(getX() + h * getDX(), getY() + h * getDY()); P.setA(h / getLength()); } @Override public void project(final PointObject P, final double alpha) { final double d = alpha * getLength(); P.setXY(getX() + d * getDX(), getY() + d * getDY()); } @Override public boolean moveable() { if (!Fixed && P1.moveable() && P2.moveable()) { return true; } return false; } } ./src/rene/zirkel/objects/.#PointObject.java.1.60000644000175000017500000013135011133145260020130 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: PointObject.java import java.awt.Button; import java.awt.Checkbox; import java.awt.Color; import java.awt.Frame; import java.awt.GridLayout; import java.awt.event.FocusEvent; import java.util.Enumeration; import java.util.Vector; import javax.swing.JPanel; import rene.dialogs.Warning; import rene.gui.ButtonAction; import rene.gui.CheckboxAction; import rene.gui.Global; import rene.gui.IconBar; import rene.gui.MyLabel; import rene.gui.MyPanel; import rene.gui.MyTextField; import rene.gui.TextFieldAction; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.dialogs.EditConditionals; import rene.zirkel.dialogs.ObjectEditDialog; import rene.zirkel.expression.Expression; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.structures.MagnetObj; import eric.JGlobals; import eric.JPointName; class PointEditDialog extends ObjectEditDialog { /** * */ private static final long serialVersionUID=1L; TextFieldAction X, Y; MyTextField Away, Bound, Increment; Checkbox Fixed, Close, Restricted, Alternate, Inside; IconBar TypeIB; ZirkelCanvas ZC; public PointEditDialog(final Frame f, final PointObject o) { super(f, Zirkel.name("edit.point.title"), o); } public PointEditDialog(final ZirkelCanvas zc, final PointObject o) { this(zc.getFrame(), o); ZC=zc; } @Override public void addFirst(final JPanel P) { final PointObject p=(PointObject) O; X=new TextFieldAction(this, "X", ""+p.round(p.getX()), 30); P.add(new MyLabel(Zirkel.name("edit.point.x"))); P.add(X); Y=new TextFieldAction(this, "Y", ""+p.round(p.getY()), 30); P.add(new MyLabel(Zirkel.name("edit.point.y"))); P.add(Y); if (p.moveablePoint()) { Fixed=new Checkbox(""); Fixed.setState(p.fixed()); P.add(new MyLabel(Zirkel.name("edit.fixed"))); P.add(Fixed); if (p.fixed()) { X.setText(p.getEX()); Y.setText(p.getEY()); } P.add(new MyLabel(Zirkel.name("edit.point.increment"))); P.add(Increment=new MyTextField(""+p.round(p.getIncrement()))); } else { X.setEditable(false); Y.setEditable(false); } if ((p instanceof IntersectionObject&&((IntersectionObject) p).isSwitchable())) { Away=new MyTextField("", 5); Away.setText(((IntersectionObject) p).away()); Close=new CheckboxAction(this, Zirkel.name("edit.point.close")); Close.setState(!((IntersectionObject) p).stayAway()); P.add(new MyLabel(Zirkel.name("edit.point.intersection"))); final JPanel ap=new MyPanel(); ap.setLayout(new GridLayout(1, 2)); ap.add(Away); ap.add(Close); P.add(ap); } if (p instanceof IntersectionObject) { P.add(new MyLabel(Zirkel.name("edit.plumb.restricted"))); Restricted=new CheckboxAction(this, "", "Restricted"); Restricted.setState(((IntersectionObject) p).isRestricted()); P.add(Restricted); if (((IntersectionObject) p).canAlternate()) { P.add(new MyLabel(Zirkel.name("edit.intersection.alternate"))); Alternate=new CheckboxAction(this, "", "Alternate"); Alternate.setState(((IntersectionObject) p).isAlternate()); P.add(Alternate); } } if (p.isPointOn()) { P.add(new MyLabel(Zirkel.name("edit.point.bound"))); P.add(Bound=new MyTextField(p.getBound().getName())); Bound.setEditable(false); if (p.getBound() instanceof InsideObject) { P.add(new MyLabel(Zirkel.name("edit.point.inside"))); P.add(Inside=new CheckboxAction(this, "", "Inside")); Inside.setState(p.isInside()); } if (Fixed!=null) { Fixed.setState(p.useAlpha()); } } } Button BoundButton; @Override public void addButton(final JPanel P) { final PointObject p=(PointObject) O; if (p.moveablePoint()) { if (p.isPointOn()) { BoundButton=new ButtonAction(this, Zirkel.name("bound.release"), "Release"); } else { BoundButton=new ButtonAction(this, Zirkel.name("bound.bind"), "Bind"); } P.add(BoundButton); P.add(new MyLabel(" ")); } else if (p instanceof IntersectionObject&&((IntersectionObject) p).isSwitchable()) { P.add(new ButtonAction(this, Zirkel.name("edit.point.away"), "SetAway")); P.add(new ButtonAction(this, Zirkel.name("edit.point.close"), "SetClose")); if (!((IntersectionObject) p).away().equals("")) { P.add(new ButtonAction(this, Zirkel.name("edit.point.free"), "SetFree")); } P.add(new MyLabel(" ")); } } @Override public void addSecond(final JPanel P) { final PointObject p=(PointObject) O; TypeIB=new IconBar(F); TypeIB.addToggleGroupLeft("type", 6); TypeIB.toggle("type", p.getType()); P.add(new MyLabel("")); P.add(TypeIB); } @Override public void doAction(final String o) { if ((o.equals("Y")||o.equals("X"))&&Fixed!=null) { Fixed.setState(true); super.doAction("OK"); } else if (o.equals("Release")) { ((PointObject) O).setBound(""); O.getConstruction().updateCircleDep(); if (Fixed!=null) { Fixed.setState(false); } super.doAction("OK"); } else if (o.equals("Bind")) { ZC.bind((PointObject) O); super.doAction("OK"); } else if (o.equals("SetAway")) { ZC.setAway((IntersectionObject) O, true); super.doAction("OK"); } else if (o.equals("SetClose")) { ZC.setAway((IntersectionObject) O, false); super.doAction("OK"); } else if (o.equals("SetFree")) { ((IntersectionObject) O).setAway(""); Away=null; super.doAction("OK"); } else if (o.equals("OK")) { if (Fixed!=null&&X.isChanged()||Y.isChanged()) { Fixed.setState(true); } super.doAction("OK"); } else { super.doAction(o); } } @Override public void setAction() { final PointObject p=(PointObject) O; if ((X.isChanged()||Y.isChanged())&&p.isPointOn()) { try { final double x=new Expression(X.getText(), p.getConstruction(), p).getValue(); final double y=new Expression(Y.getText(), p.getConstruction(), p).getValue(); p.move(x, y); p.validate(); } catch (final Exception e) { } } if (Fixed!=null&&Fixed.getState()==true) { if (p.isPointOn()) { p.setUseAlpha(true); } else { p.setFixed(X.getText(), Y.getText()); } } else { try { final double x=new Expression(X.getText(), p.getConstruction(), p).getValue(); final double y=new Expression(Y.getText(), p.getConstruction(), p).getValue(); if (p.moveable()) { p.move(x, y); } } catch (final Exception e) { } } if (Fixed!=null&&Fixed.getState()==false) { if (p.isPointOn()) { p.setUseAlpha(false); } else { p.setFixed(false); } } if (Away!=null) { if (!((IntersectionObject) p).setAway(Away.getText(), !Close.getState())) { final Warning w=new Warning(F, Zirkel.name("bound.error"), Zirkel.name("warning")); w.center(F); w.setVisible(true); } } if (Restricted!=null) { ((IntersectionObject) p).setRestricted(Restricted.getState()); } if (Alternate!=null) { ((IntersectionObject) p).setAlternate(Alternate.getState()); } if (Increment!=null) { try { p.setIncrement(new Expression(Increment.getText(), p.getConstruction(), p).getValue()); } catch (final Exception e) { } } p.setType(TypeIB.getToggleState("type")); if (Inside!=null) { p.setInside(Inside.getState()); } } @Override public void focusGained(final FocusEvent e) { if (Fixed!=null&&Fixed.getState()) { X.requestFocus(); } else { super.focusGained(e); } } } public class PointObject extends ConstructionObject implements MoveableObject, DriverObject { protected double X, Y; protected boolean BarycentricCoordsInitialzed=false; protected double Gx=0, Gy=0; // Barycentric coords, if it's inside a // polygon. protected double Alpha; // parameter relative zu object protected boolean AlphaValid=false; // Alpha is valid protected boolean UseAlpha=false; // Use Alpha at all protected boolean Moveable, Fixed; // private static Count N=new Count(); private static JPointName PointLabel=new JPointName(); protected int Type=0; public final static int SQUARE=0, DIAMOND=1, CIRCLE=2, DOT=3, CROSS=4, DCROSS=5; public static int MaxType=3; protected Expression EX, EY; // private ConstructionObject Bound=null; // point is on a line etc. private boolean Later; // bound is later in construction private String LaterBind=""; private boolean KeepInside; // keep point inside bound private boolean DontUpdate=false; private double Increment=0; // increment to keep on grid private ConstructionObject Bound=null; // point is on a line etc. private double BoundOrder=Double.NaN; // Only for points on parametric // curves made with "points only" protected ConstructionObject MovedBy; private double LASTX=Double.NaN, LASTY=Double.NaN; private final Vector magnetObjects=new Vector(); Expression magnetRayExp=null; private int CurrentMagnetRay=Integer.MIN_VALUE; private ConstructionObject CurrentMagnetObject=null; public ConstructionObject VirtualBound=null; // The object that may have moved this point public PointObject(final Construction c, final double x, final double y) { super(c); X=x; Y=y; Moveable=true; Fixed=false; setColor(ColorIndex, SpecialColor); setShowName(false); updateText(); Type=0; setMagnetRayExp("20"); } public PointObject(final Construction c, final double x, final double y, final ConstructionObject bound) { this(c, x, y); Bound=bound; } public PointObject(final Construction c, final String name) { super(c, name); X=0; Y=0; Moveable=true; Fixed=false; setColor(ColorIndex, SpecialColor); updateText(); Type=0; setMagnetRayExp("20"); } public static void setPointLabel(final JPointName jpl) { PointLabel=jpl; } @Override public void setName() { if ((!SuperHidden)&&(!Hidden)) { Name=PointLabel.getBetterName(Cn, false); } else { Name=JPointName.getGenericName(Cn); } } @Override public void setNameWithNumber(String n) { Name=""; if (Cn!=null) { ConstructionObject o=Cn.find(n); if (o!=null) { while (o!=null&&o!=this) { Name=JPointName.getGenericName(Cn); n=Name; Name=""; o=Cn.find(n); } Name=n; } else { Name=n; } } else { Name=n; } } @Override public String getTag() { if (Bound==null) { return "Point"; } else { return "PointOn"; } } @Override public int getN() { return N.next(); } // public void setDefaults () // { super.setDefaults(); // Type=Cn.DefaultType; // } @Override public void setDefaults() { setShowName(Global.getParameter("options.point.shownames", false)); setShowValue(Global.getParameter("options.point.showvalues", false)); setColor(Global.getParameter("options.point.color", 0), Global.getParameter("options.point.pcolor", (Color) null)); setColorType(Global.getParameter("options.point.colortype", 0)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Global.getParameter("options.point.large", false)); setBold(Global.getParameter("options.point.bold", false)); Type=Cn.DefaultType; } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.point.shownames", false)); setShowValue(Global.getParameter("options.point.showvalues", false)); setColor(Global.getParameter("options.point.color", 0), Global.getParameter("options.point.pcolor", (Color) null)); setColorType(Global.getParameter("options.point.colortype", 0)); setLarge(Global.getParameter("options.point.large", false)); setBold(Global.getParameter("options.point.bold", false)); Type=Cn.DefaultType; } private double Delta; @Override public double changedBy() { return Delta; } @Override public void validate() { if (DontUpdate) { return; } // System.out.println(getName()+" X="+X+" Y="+Y); updateMagnetObjects(); followMagnetObject(); // magnet(); // System.out.println(getName()+" : validate !"); MovedBy=null; Delta=0.0; Valid=true; if (Bound!=null&&!Bound.isInConstruction()) { Bound=null; } if (Bound!=null&&!Bound.valid()) { Valid=false; return; } if (Increment>1e-4) { X=Math.floor(X/Increment+0.5)*Increment; Y=Math.floor(Y/Increment+0.5)*Increment; } if (Bound!=null) { final double x=X, y=Y; if (KeepInside&&Bound instanceof InsideObject) { ((InsideObject) Bound).keepInside(this); } else if (!KeepInside&&Bound instanceof PointonObject) { if (!AlphaValid||!UseAlpha) { project(Bound); } else { project(Bound, Alpha); } } if (Later) { Delta=Math.sqrt((x-X)*(x-X)+(y-Y)*(y-Y)); } } if (Fixed&&EX!=null&&EX.isValid()) { try { X=EX.getValue(); } catch (final Exception e) { Valid=false; return; } } if (Fixed&&EY!=null&&EY.isValid()) { try { Y=EY.getValue(); } catch (final Exception e) { Valid=false; return; } } } @Override public void updateText() { if (Bound!=null) { setText(text1(Zirkel.name("text.boundedpoint"), Bound.getName())); } else if (EX!=null&&EY!=null) { setText(text2(Zirkel.name("text.point"), "\""+EX+"\"", "\""+EY+"\"")); } else { setText(text2(Zirkel.name("text.point"), ""+round(X), ""+round(Y))); } } static double x[]=new double[4], y[]=new double[4]; @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { DisplaysText=false; if (!Valid||mustHide(zc)) { return; } final double size=drawPoint(g, zc, this, X, Y, Type); if (tracked()) { zc.UniversalTrack.drawTrackPoint(this, X, Y, Type); } final String s=AngleObject.translateToUnicode(getDisplayText()); if (!s.equals("")) { g.setLabelColor(this); DisplaysText=true; setFont(g); final double d=Math.sqrt(XcOffset*XcOffset+YcOffset*YcOffset); if (!KeepClose||d<1e-10) { TX1=zc.col(X+XcOffset)+2*size; TY1=zc.row(Y+YcOffset)+2*size; drawLabel(g, s); } else { drawPointLabel(g, s, zc, X, Y, YcOffset/d, -XcOffset/d, 0, 0); } } } static public double drawPoint(final MyGraphics g, final ZirkelCanvas zc, final ConstructionObject o, final double X, final double Y, final int type) { double size=zc.pointSize(); final double r=zc.col(X), c=zc.row(Y); if (size<1) { size=1; } // System.out.println(size); if (o.visible(zc)) { if (o.isStrongSelected()&&g instanceof MyGraphics13) { ((MyGraphics13) g).drawMarkerLine(r, c, r, c); } g.setColor(o); switch (type) { case SQUARE: final double sx=r-size-1, sy=c-size-1, sw=2*size+2; if (o.getColorType()==THICK) { g.fillRect(sx, sy, sw, sw, true, false, o); } else { g.fillRect(sx, sy, sw, sw, new Color(255, 255, 255)); } g.setColor(o); g.drawRect(sx, sy, sw, sw); break; case DIAMOND: final double dx=r-size-2, dy=c-size-2, dw=2*size+4; g.drawDiamond(dx, dy, dw, (o.getColorType()==THICK), o); break; case CIRCLE: final double cx=r-size-1, cy=c-size-1, cw=2*size+2; if (o.getColorType()==THICK) { g.fillOval(cx, cy, cw, cw, true, false, o); } else { g.fillOval(cx, cy, cw, cw, new Color(255, 255, 255)); g.setColor(o); g.drawOval(cx, cy, cw, cw); } break; case DOT: if (o.getColorType()==THICK) { g.fillRect(r, c, 1, 1, true, false, o); } else { g.drawLine(r, c, r, c); } break; case CROSS: if (o.getColorType()==THICK) { g.drawThickLine(r-size, c, r+size, c); g.drawThickLine(r, c-size, r, c+size); } else { g.drawLine(r-size, c, r+size, c); g.drawLine(r, c-size, r, c+size); } break; case DCROSS: final double dcx=r-size-1, dcy=c-size-1, dcw=2*size+1; g.drawDcross(dcx, dcy, dcw, (o.getColorType()==THICK), o); break; } } return size; } @Override public String getDisplayValue() { // return "("+roundDisplay(X)+ // (Global.getParameter("options.germanpoints", // false)?"|":",")+roundDisplay(Y)+")"; return "("+JGlobals.getLocaleNumber(X, "lengths")+(Global.getParameter("options.germanpoints", false)?"|" :";")+JGlobals.getLocaleNumber(Y, "lengths")+")"; } @Override public boolean nearto(final int x, final int y, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } final double c=zc.col(X), r=zc.row(Y); final int size=(int) zc.selectionSize(); Value=Math.abs(x-c)+Math.abs(y-r); return Value<=size*3/2; } public boolean nearto(final PointObject p) { if (!Valid) { return false; } final double dx=p.X-X, dy=p.Y-Y; return Math.sqrt(dx*dx+dy*dy)<1e-9; } public double distanceTo(final int x, final int y, final ZirkelCanvas zc) { final double dx=x-zc.col(X), dy=y-zc.row(Y); return Math.sqrt(dx*dx+dy*dy); } @Override public double getX() { return X; } @Override public double getY() { return Y; } public boolean moveable() { boolean fixed=Fixed; if (dependsOnItselfOnly()) { fixed=false; } return Moveable&&!fixed&&!Keep; } /** * Check if the point depends on itself and no other object. Such points are * moveable, even if they are fixed. * * @return */ public boolean dependsOnItselfOnly() { boolean res=false; Enumeration e=depending(); while (e.hasMoreElements()) { if ((ConstructionObject) e.nextElement()==this) { res=true; break; } } e=depending(); while (e.hasMoreElements()) { if ((ConstructionObject) e.nextElement()!=this) { res=false; break; } } return res; } public boolean dependsOnParametersOnly() { final Enumeration e=depending(); while (e.hasMoreElements()) { if (!((ConstructionObject) e.nextElement()).isParameter()) { return false; } } return true; } /** * @return o can move this point (moveable and not moved by something else) */ public boolean moveableBy(final ConstructionObject o) { if (Bound!=null) { return false; } return moveable()&&(MovedBy==null||MovedBy==o); } public boolean moveablePoint() { if (Bound!=null) { return true; } return Moveable&&!Keep; } public boolean setBound(final String name) { if (name.equals("")) { Bound=null; setFixed(false); Later=false; return true; } try { Bound=null; final ConstructionObject o=Cn.find(name); if (o instanceof PointonObject) { Bound=o; Moveable=true; Fixed=false; KeepInside=false; } else if (o instanceof InsideObject) { Bound=o; Moveable=true; Fixed=false; KeepInside=true; } else { return false; } } catch (final Exception e) { return false; } if (Cn.before(this, Bound)) { Cn.needsOrdering(); Cn.dovalidate(); } updateText(); clearMagnetObjects(); return true; } public void setBound(final ConstructionObject bound) { Bound=bound; } public boolean haveBoundOrder() { return (!Double.isNaN(BoundOrder)); } public void setBoundOrder(final double boundorder) { BoundOrder=boundorder; } public void clearBoundOrder() { BoundOrder=Double.NaN; } public ConstructionObject getBound() { return Bound; } public double getBoundOrder() { return BoundOrder; } public void setMoveable(final boolean flag) { Moveable=flag; } @Override public boolean fixed() { return Fixed; } @Override public void setFixed(final boolean flag) { Fixed=flag; if (!Fixed) { EX=EY=null; } updateText(); } @Override public void setFixed(final String x, final String y) { Fixed=true; EX=new Expression(x, getConstruction(), this); EY=new Expression(y, getConstruction(), this); updateText(); } @Override public void move(final double x, final double y) { if ((X==x)&&(Y==y)) { return; } // System.out.println(getName()+" : move !"); X=x; Y=y; AlphaValid=false; computeBarycentricCoords(); } public void setXY(final double x, final double y) { if ((X==x)&&(Y==y)) { return; } // System.out.println(getName()+" : setXY !"); X=x; Y=y; } public void setXYaway(final double x, final double y, final int r) { if (r>0) { setXY(x, y); return; } final double d=Math.sqrt((X-x)*(X-x)+(Y-y)*(Y-y)); final double dblr=-r/Cn.getPixel(); double xx=x+dblr, yy=y; if (d!=0) { xx=x+(X-x)*dblr/d; yy=y+(Y-y)*dblr/d; } // System.out.println(Cn.getPixel()); // System.out.println("d="+d); // System.out.println("xx="+xx); // System.out.println("yy="+yy); // System.out.println("****"); setXY(xx, yy); } public void setA(final double alpha) { Alpha=alpha; } public void setMagnetRayExp(final String s) { magnetRayExp=new Expression(s, Cn, this); } public String getMagnetRayExp() { return magnetRayExp.toString(); } public int getMagnetRay() { int i=20; try { i=(int) Math.round(magnetRayExp.getValue()); } catch (final Exception ex) { } return i; } // public String getMagnetRayExp(){ // return magnetRayExp.toString(); // } private boolean isMagnetObject(final String name) { final Enumeration e=magnetObjects.elements(); while (e.hasMoreElements()) { final MagnetObj mo=(MagnetObj) e.nextElement(); if (mo.name().equals(name)) { return true; } } return false; } public void removeMagnetObject(final String name) { final Enumeration e=magnetObjects.elements(); while (e.hasMoreElements()) { final MagnetObj mo=(MagnetObj) e.nextElement(); if (mo.name().equals(name)) { magnetObjects.remove(mo); } } } /** * s represents the name of an object, or the string "name:ray" where ray is * the specific magnetic attraction * * @param s */ public void addMagnetObject(final String s) { final String[] mo=s.split(":"); final String name=mo[0]; // int ray=-1; String ray=""+Integer.MIN_VALUE; if (mo.length>1) { ray=mo[1]; } if (name.equals(getName())) { return; } final ConstructionObject o=Cn.find(name); if ((o!=null)&&(!isMagnetObject(name))) { magnetObjects.add(new MagnetObj(o, ray)); } } public void setMagnetObjects(final String namelist) { String st=""; char t; int p=0; for (int i=0; i0)&&(t==',')) { st+="@@"; } else { st+=t; } } final String[] s=st.split(","); magnetObjects.removeAllElements(); for (final String element : s) { st=element.replaceAll("@@", ","); addMagnetObject(st); } } public void selectMagnetObjects(final boolean b) { final Enumeration e=magnetObjects.elements(); while (e.hasMoreElements()) { final MagnetObj mo=(MagnetObj) e.nextElement(); if (mo.isInConstruction()) { mo.setSelected(b); } } } public void updateMagnetObjects() { final Enumeration e=magnetObjects.elements(); while (e.hasMoreElements()) { final MagnetObj mo=(MagnetObj) e.nextElement(); if (!mo.isInConstruction()) { magnetObjects.remove(mo); } } } public void clearMagnetObjects() { magnetObjects.removeAllElements(); setMagnetRayExp("20"); } public void translateMagnetObjects() { final Enumeration e=magnetObjects.elements(); while (e.hasMoreElements()) { final MagnetObj mo=(MagnetObj) e.nextElement(); mo.translate(); } } public Vector getMagnetObjects() { return magnetObjects; } public String getMagnetObjectsString() { updateMagnetObjects(); String s=""; final Enumeration e=magnetObjects.elements(); if (e.hasMoreElements()) { final MagnetObj mo=(MagnetObj) e.nextElement(); s=mo.name(); if (mo.ray()>Integer.MIN_VALUE) { s+=":"+mo.rayexp(); } } while (e.hasMoreElements()) { final MagnetObj mo=(MagnetObj) e.nextElement(); s+=","+mo.name(); if (mo.ray()>Integer.MIN_VALUE) { s+=":"+mo.rayexp(); } } return s; } public void magnet() { ConstructionObject PtOnObject=null; ConstructionObject PtObject=null; final Enumeration e=magnetObjects.elements(); int dp=Integer.MAX_VALUE, dm=Integer.MAX_VALUE; int rayp=0, raym=0; while (e.hasMoreElements()) { final MagnetObj mo=(MagnetObj) e.nextElement(); final ConstructionObject o=mo.obj(); final int mRay=(mo.ray()>Integer.MIN_VALUE)?mo.ray() :getMagnetRay(); final int mRayAbs=Math.abs(mRay); if (mRayAbs==0) { continue; } if (!o.valid()) { continue; } if (o instanceof PointObject) { final int i=o.getDistance(this); if ((i<=mRayAbs)&&(iInteger.MIN_VALUE)?mo.ray() :getMagnetRay(); if (o instanceof PointObject) { final int i=o.getDistance(this); if ((i<=mRay)&&(iInteger.MIN_VALUE) { setXYaway(pt.getX(), pt.getY(), CurrentMagnetRay); } } else if (CurrentMagnetObject instanceof PointonObject) { final PointonObject pt=(PointonObject) CurrentMagnetObject; pt.project(this); } } magnet(); } @Override public int getDistance(final PointObject P) { final double d=Math.sqrt(((getX()-P.getX())*(getX()-P.getX())+(getY()-P.getY())*(getY()-P.getY()))); return (int) Math.round(d*Cn.getPixel()); } public void project(final ConstructionObject o) { if (!(o instanceof PointonObject)) { return; } ((PointonObject) o).project(this); if (UseAlpha) { AlphaValid=true; } } public void project(final ConstructionObject o, final double alpha) { ((PointonObject) o).project(this, alpha); } @Override public void edit(final ZirkelCanvas zc) { if (!rene.zirkel.Zirkel.IsApplet) { eric.JGlobals.EditObject(this); return; } final ObjectEditDialog d=new PointEditDialog(zc, this); d.setVisible(true); zc.repaint(); if ((EX!=null&&!EX.isValid())) { final Frame F=zc.getFrame(); final Warning w=new Warning(F, EX.getErrorText(), Zirkel.name("warning"), true); w.center(F); w.setVisible(true); } else if ((EY!=null&&!EY.isValid())) { final Frame F=zc.getFrame(); final Warning w=new Warning(F, EY.getErrorText(), Zirkel.name("warning"), true); w.center(F); w.setVisible(true); } validate(); if (d.wantsMore()) { new EditConditionals(zc.getFrame(), this); validate(); } } @Override public void printArgs(final XmlWriter xml) { updateText(); updateMagnetObjects(); if (Bound!=null) { xml.printArg("on", Bound.getName()); if (KeepInside) { xml.printArg("inside", "true"); } } if (magnetObjects.size()>0) { xml.printArg("magnetobjs", getMagnetObjectsString()); xml.printArg("magnetd", ""+magnetRayExp.toString()); } if (haveBoundOrder()) { xml.printArg("boundorder", String.valueOf(BoundOrder)); } if (Fixed&&EX!=null) { xml.printArg("x", EX.toString()); xml.printArg("actx", ""+X); } else { if (Bound!=null&&AlphaValid&&UseAlpha) { xml.printArg("alpha", ""+Alpha); } xml.printArg("x", ""+X); } if (Fixed&&EY!=null) { xml.printArg("y", EY.toString()); xml.printArg("acty", ""+Y); } else { xml.printArg("y", ""+Y); } printType(xml); if (Fixed) { xml.printArg("fixed", "true"); } if (Increment>1e-4) { xml.printArg("increment", ""+getIncrement()); } } public void printType(final XmlWriter xml) { if (Type!=0) { switch (Type) { case DIAMOND: xml.printArg("shape", "diamond"); break; case CIRCLE: xml.printArg("shape", "circle"); break; case DOT: xml.printArg("shape", "dot"); break; case CROSS: xml.printArg("shape", "cross"); break; case DCROSS: xml.printArg("shape", "dcross"); break; } } } @Override public int getType() { return Type; } @Override public void setType(final int type) { Type=type; } public void movedBy(final ConstructionObject o) { MovedBy=o; } @Override public boolean equals(final ConstructionObject o) { if (!(o instanceof PointObject)||!o.valid()) { return false; } final PointObject p=(PointObject) o; return equals(X, p.X)&&equals(Y, p.Y); } @Override public String getEX() { if (EX!=null) { return EX.toString(); } else { return ""+round(X); } } @Override public String getEY() { if (EY!=null) { return EY.toString(); } else { return ""+round(Y); } } public boolean isOn(final ConstructionObject o) { if (Bound!=null) { return o==Bound; } return o.contains(this); } @Override public void translate() { if (Bound!=null) { Bound=Bound.getTranslation(); } else if (Fixed) { try { setFixed(EX.toString(), EY.toString()); EX.translate(); EY.translate(); } catch (final Exception e) { } } magnetRayExp.translate(); translateMagnetObjects(); } @Override public Enumeration depending() { super.depending(); if (Bound!=null) { DL.add(Bound); } if (Fixed) { if (EX!=null) { EX.addDep(this); } if (EY!=null) { EY.addDep(this); } } return DL.elements(); } @Override public void snap(final ZirkelCanvas zc) { final double d=zc.getGridSize()/2; X=Math.round(X/d)*d; Y=Math.round(Y/d)*d; updateText(); } @Override public void updateCircleDep() { if (Bound!=null&&Bound instanceof PrimitiveCircleObject) { ((PrimitiveCircleObject) Bound).addDep(this); } if (Bound!=null&&Bound instanceof PrimitiveLineObject) { ((PrimitiveLineObject) Bound).addDep(this); } } public boolean isPointOn() { return Bound!=null; } public boolean isPointOnOrMagnet() { return (Bound!=null)||(CurrentMagnetObject!=null); } public void setLaterBind(final String s) { LaterBind=s; } // for macro constructions : @Override public ConstructionObject copy(final double x, final double y) { ConstructionObject o=null; try { o=(ConstructionObject) clone(); setTranslation(o); o.translateConditionals(); o.translate(); o.setName(); o.updateText(); o.setBreak(false); // o.setTarget(false); // if the target is a Point inside polygon, then try // to follow the mouse ! : if (KeepInside&&Bound!=null&&Bound instanceof AreaObject) { o.move(x, y); } } catch (final Exception e) { } return o; } public void computeBarycentricCoords() { if (Bound!=null&&Bound instanceof QuadricObject) { final QuadricObject quad=((QuadricObject) Bound); final PointObject A=quad.P[0]; final PointObject B=quad.P[1]; final PointObject C=quad.P[2]; final double a=B.getX()-A.getX(); final double b=C.getX()-A.getX(); final double c=this.getX()-A.getX(); final double d=B.getY()-A.getY(); final double e=C.getY()-A.getY(); final double f=this.getY()-A.getY(); final double det=a*e-d*b; if (det!=0) { Gx=(c*e-b*f)/det; Gy=(a*f-c*d)/det; BarycentricCoordsInitialzed=true; } } else if (KeepInside&&Bound!=null&&Bound instanceof AreaObject) { final AreaObject area=((AreaObject) Bound); if (area.V.size()>2) { final PointObject A=(PointObject) area.V.get(0); final PointObject B=(PointObject) area.V.get(1); final PointObject C=(PointObject) area.V.get(2); final double a=B.getX()-A.getX(); final double b=C.getX()-A.getX(); final double c=this.getX()-A.getX(); final double d=B.getY()-A.getY(); final double e=C.getY()-A.getY(); final double f=this.getY()-A.getY(); final double det=a*e-d*b; if (det!=0) { Gx=(c*e-b*f)/det; Gy=(a*f-c*d)/det; BarycentricCoordsInitialzed=true; } } } } @Override public void setInside(final boolean flag) { KeepInside=flag; computeBarycentricCoords(); } @Override public boolean isInside() { return KeepInside; } @Override public void laterBind(final Construction c) { if (LaterBind.equals("")) { return; } final ConstructionObject o=c.find(LaterBind); if (o!=null&&((o instanceof PointonObject)||(o instanceof InsideObject))) { Bound=o; updateText(); validate(); } LaterBind=""; } public void setAlpha(final double alpha) { Alpha=alpha; AlphaValid=true; } public void setUseAlpha(final boolean flag) { UseAlpha=flag; } public boolean useAlpha() { return UseAlpha; } public double getAlpha() { return Alpha; } @Override public void round() { move(round(X, ZirkelCanvas.LengthsFactor), round(Y, ZirkelCanvas.LengthsFactor)); } /** * For bounded points. */ @Override public void setKeepClose(final double x, final double y) { KeepClose=true; XcOffset=x-X; YcOffset=y-Y; } @Override public boolean canKeepClose() { return true; } public boolean dontUpdate() { return DontUpdate; } public void dontUpdate(final boolean flag) { DontUpdate=flag; } /** * Overwrite setting of default things for macro targets. */ // public void setTargetDefaults () // { super.setTargetDefaults(); // Type=Cn.DefaultType; // } public void startDrag(final double x, final double y) { } public void dragTo(final double x, final double y) { clearBoundOrder(); if ((X==x)&&(Y==y)) { return; } // System.out.println(getName()+" : dragTo !"); move(x, y); } public double getOldX() { return 0; } public double getOldY() { return 0; } @Override public void setIncrement(final double inc) { Increment=inc; } @Override public double getIncrement() { return Increment; } @Override public boolean isDriverObject() { if (Bound!=null) { return true; } // if (Fixed) return false; return Moveable&&!Keep; } public boolean somethingChanged() { return ((getX()!=LASTX)||(getY()!=LASTY)); } public void clearChanges() { LASTX=getX(); LASTY=getY(); } } ./src/rene/zirkel/objects/Evaluator.java0000640000175000017500000000157111133127256017230 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; import rene.zirkel.construction.ConstructionException; public interface Evaluator { public double evaluateF(double x) throws ConstructionException; } ./src/rene/zirkel/objects/ParallelObject.java0000640000175000017500000000557411303263644020161 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: ParallelObject.java import java.util.Enumeration; import rene.util.xml.XmlWriter; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.Count; public class ParallelObject extends PrimitiveLineObject implements MoveableObject { protected PrimitiveLineObject L; static Count N = new Count(); public ParallelObject(final Construction c, final PrimitiveLineObject l, final PointObject p) { super(c); P1 = p; L = l; validate(); updateText(); } @Override public String getTag() { return "Parallel"; } @Override public int getN() { return N.next(); } @Override public void updateText() { setText(text2(Global.name("text.parallel"), P1.getName(), L.getName())); } @Override public void validate() { if (!P1.valid() || !L.valid()) Valid = false; else if (L instanceof SegmentObject && ((SegmentObject) L).getLength() == 0) { Valid = false; } else { Valid = true; X1 = P1.getX(); Y1 = P1.getY(); DX = L.getDX(); DY = L.getDY(); } } @Override public void printArgs(final XmlWriter xml) { xml.printArg("point", P1.getName()); xml.printArg("line", L.getName()); super.printArgs(xml); } @Override public Enumeration depending() { super.depending(); return depset(P1, L); } @Override public void translate() { P1 = (PointObject) P1.getTranslation(); L = (PrimitiveLineObject) L.getTranslation(); } @Override public boolean contains(final PointObject p) { return p == P1; } @Override public boolean hasUnit() { return false; } public void dragTo(final double x, final double y) { P1.move(x1 + (x - x3), y1 + (y - y3)); } @Override public void move(final double x, final double y) { } public boolean moveable() { if (P1.moveable()) return true; return false; } double x1, y1, x2, y2, x3, y3; public void startDrag(final double x, final double y) { x1 = P1.getX(); y1 = P1.getY(); x3 = x; y3 = y; } public double getOldX() { return 0; } public double getOldY() { return 0; } @Override public void snap(final ZirkelCanvas zc) { if (moveable()) { P1.snap(zc); } } } ./src/rene/zirkel/objects/AreaObject.java0000640000175000017500000005357011314640704017272 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: LineObject.java import eric.bar.JPropertiesBar; import java.awt.Color; import java.awt.Frame; import java.util.Enumeration; import java.util.Vector; import javax.swing.JPanel; import rene.gui.Global; import rene.gui.MyLabel; import rene.gui.MyTextField; import rene.util.xml.XmlWriter; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; public class AreaObject extends ConstructionObject implements InsideObject, PointonObject, MoveableObject { static Count N=new Count(); double xpoints[]=new double[3], ypoints[]=new double[3]; double R, X, Y, A; public Vector V; boolean Filled=true; public AreaObject(final Construction c, final Vector v) { super(c); V=v; validate(); updateText(); Global.getParameter("unit.area", ""); } @Override public void setDefaults() { setShowName(Global.getParameter("options.area.shownames", false)); setShowValue(Global.getParameter("options.area.showvalues", false)); setColor(Global.getParameter("options.area.color", 0), Global.getParameter("options.area.pcolor", (Color) null)); setColorType(Global.getParameter("options.area.colortype", 0)); setFilled(Global.getParameter("options.area.filled", true)); setSolid(Global.getParameter("options.area.solid", false)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); // setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); setPartial(Cn.Partial); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.area.shownames", false)); setShowValue(Global.getParameter("options.area.showvalues", false)); setColor(Global.getParameter("options.area.color", 0), Global.getParameter("options.area.pcolor", (Color) null)); setColorType(Global.getParameter("options.area.colortype", 0)); setFilled(Global.getParameter("options.area.filled", true)); setSolid(Global.getParameter("options.area.solid", false)); } @Override public String getTag() { return "Polygon"; } @Override public void updateText() { String Text=Global.name("text.area"); final Enumeration en=V.elements(); boolean first=true; while (en.hasMoreElements()) { final PointObject p=(PointObject) en.nextElement(); if (!first) { Text=Text+", "; } else { Text=Text+" "; } first=false; Text=Text+p.getName(); } setText(Text); } @Override public void validate() { final Enumeration e=V.elements(); while (e.hasMoreElements()) { if (!((ConstructionObject) e.nextElement()).valid()) { Valid=false; return; } } if (V.size()<2) { Valid=false; return; } final Enumeration en=V.elements(); double x=0, y=0; while (en.hasMoreElements()) { final PointObject p=(PointObject) en.nextElement(); x+=p.getX(); y+=p.getY(); } X=x/V.size(); Y=y/V.size(); A=area(); Valid=true; } @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid||mustHide(zc)) { return; } final int n=V.size(); if (xpoints.length!=n) { xpoints=new double[n]; ypoints=new double[n]; } if (visible(zc)) { final Enumeration e=V.elements(); int i=0; while (e.hasMoreElements()) { final PointObject p=(PointObject) e.nextElement(); xpoints[i]=zc.col(p.getX()); ypoints[i]=zc.row(p.getY()); if (i>0) { if (isStrongSelected()&&g instanceof MyGraphics13) { ((MyGraphics13) g).drawMarkerLine(xpoints[i-1], ypoints[i-1], xpoints[i], ypoints[i]); } } i++; } if (i>1) { if (isStrongSelected()&&g instanceof MyGraphics13) { ((MyGraphics13) g).drawMarkerLine(xpoints[i-1], ypoints[i-1], xpoints[0], ypoints[0]); } } g.fillPolygon(xpoints, ypoints, n, this); } final String s=getDisplayText(); if (!s.equals("")) { // if (getColorIndex() == 0 && getColorType() == THICK) { // g.setColor(Color.gray.brighter()); // } else { // g.setColor(Color.black); // } DisplaysText=true; TX1=zc.col(X+XcOffset); TY1=zc.row(Y+YcOffset); setFont(g); drawLabel(g, s); } } @Override public String getDisplayValue() { // return ""+round(Math.abs(A), ZirkelCanvas.LengthsFactor); return Global.getLocaleNumber(Math.abs(A), "lengths"); } @Override public void printArgs(final XmlWriter xml) { if (!Filled) { xml.printArg("filled", "false"); } final Enumeration e=V.elements(); int n=1; while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); xml.printArg("point"+n, o.getName()); n++; } super.printArgs(xml); } @Override public Enumeration depending() { super.depending(); final Enumeration e=V.elements(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); DL.add(o); } return DL.elements(); } @Override public void translate() { final Enumeration e=V.elements(); final Vector w=new Vector(); while (e.hasMoreElements()) { final ConstructionObject o=(ConstructionObject) e.nextElement(); w.addElement(o.getTranslation()); } V=w; } @Override public boolean nearto(final int c, final int r, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } return contains(zc.x(c), zc.y(r)); } @Override public boolean nearto(final int c, final int r, final boolean ignorefill, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } if (contains(zc.x(c), zc.y(r), zc.dx(zc.selectionSize()))) { if (ignorefill) { return OnBoundary; } else { return true; } } return false; } boolean OnBoundary; public boolean contains(final double x, final double y, final double eps) { if (!Valid) { return false; } OnBoundary=false; final PointObject First=(PointObject) V.elementAt(0); PointObject P=First; if (Math.max(Math.abs(P.getX()-x), Math.abs(P.getY()-y))Math.PI) { d=d-2*Math.PI; } else if (d<-Math.PI) { d=d+2*Math.PI; } if (Math.abs(Math.abs(d)-Math.PI)<0.1) { OnBoundary=true; return true; } a=b; P=Q; sum+=d; } Q=First; final double b=Math.atan2(Q.getX()-x, Q.getY()-y); double d=b-a; if (d>Math.PI) { d=d-2*Math.PI; } else if (d<-Math.PI) { d=d+2*Math.PI; } if (Math.abs(Math.abs(d)-Math.PI)<0.1) { OnBoundary=true; return true; } sum+=d; return Math.abs(sum)>=Math.PI/2; } public boolean contains(final double x, final double y) { return contains(x, y, 1e-4); } // This one is better than "contains" method : public boolean contains2(final double x, final double y) { if (!Valid) { return false; } final int npoints=V.size(); if (npoints<=2) { return false; } int hits=0; final PointObject last=(PointObject) V.get(npoints-1); double lastx=last.getX(); double lasty=last.getY(); double curx, cury; final Enumeration e=V.elements(); for (int i=0; i=lastx) { continue; } leftx=curx; } else { if (x>=curx) { continue; } leftx=lastx; } double test1, test2; if (cury=lasty) { continue; } if (x=cury) { continue; } if (x=m) { k-=m; } if (!p[j].equals(pa[k])) { if (j==0||!between(x0, y0, p[j].getX(), p[j].getY(), pa[k].getX(), pa[k].getY())) { r=false; break; } } else { x0=p[j].getX(); y0=p[j].getY(); j++; } kj++; if (j>=n||kj>=m) { break; } } if (r&&kj>=m) { return true; } } for (int i=0; i=m) { k-=m; } if (!p[n-j-1].equals(pa[k])) { if (j==0||!between(x0, y0, p[n-j-1].getX(), p[n-j-1].getY(), pa[k].getX(), pa[k].getY())) { r=false; break; } } else { x0=p[n-j-1].getX(); y0=p[n-j-1].getY(); j++; } kj++; if (j>=n||kj>=m) { break; } } if (r&&kj>=m) { return true; } } return false; } public boolean between(final double x0, final double y0, final double x1, final double y1, final double x, final double y) { double lambda; if (Math.abs(x1-x0)>Math.abs(y1-y0)) { lambda=(x-x0)/(x1-x0); } else { lambda=(y-y0)/(y1-y0); } return Math.abs(x0+lambda*(x1-x0)-x)<1e-10&&Math.abs(y0+lambda*(y1-y0)-y)<1e-10; } @Override public double getValue() throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } else { return A; } } @Override public boolean maybeTransparent() { return true; } @Override public void setFilled(final boolean flag) { Filled=flag; } @Override public boolean isFilled() { return Filled; } @Override public boolean onlynearto(final int x, final int y, final ZirkelCanvas zc) { return false; } public void keepBaricentricCoords(final PointObject P) { if ((P.BarycentricCoordsInitialzed)&&(V.size()>2)) { final PointObject AA=(PointObject) V.get(0); final PointObject BB=(PointObject) V.get(1); final PointObject CC=(PointObject) V.get(2); final double xa=AA.getX(), ya=AA.getY(); final double xb=BB.getX(), yb=BB.getY(); final double xc=CC.getX(), yc=CC.getY(); final double xm=xa+P.Gx*(xb-xa)+P.Gy*(xc-xa); final double ym=ya+P.Gx*(yb-ya)+P.Gy*(yc-ya); P.move(xm, ym); } else { P.computeBarycentricCoords(); } } @Override public int getDistance(final PointObject P) { final double x=P.getX(), y=P.getY(); final Enumeration e=V.elements(); PointObject p=(PointObject) e.nextElement(); double x1=p.getX(), y1=p.getY(); final double xstart=x1, ystart=y1; int count=0; double xmin=x1, ymin=y1, dmin=1e20; while (e.hasMoreElements()) { p=(PointObject) e.nextElement(); final double x2=p.getX(), y2=p.getY(); final double dx=x2-x1, dy=y2-y1; final double r=dx*dx+dy*dy; if (r>1e-5) { double h=dx*(x-x1)/r+dy*(y-y1)/r; if (h>1) { h=1; } else if (h<0) { h=0; } final double xh=x1+h*dx, yh=y1+h*dy; final double dist=Math.sqrt((x-xh)*(x-xh)+(y-yh)*(y-yh)); if (dist1e-5) { double h=dx*(x-x1)/r+dy*(y-y1)/r; if (h>1) { h=1; } else if (h<0) { h=0; } final double xh=x1+h*dx, yh=y1+h*dy; final double dist=Math.sqrt((x-xh)*(x-xh)+(y-yh)*(y-yh)); if (dist1e-5) { double h=dx*(x-x1)/r+dy*(y-y1)/r; if (h>1) { h=1; } else if (h<0) { h=0; } final double xh=x1+h*dx, yh=y1+h*dy; final double dist=Math.sqrt((x-xh)*(x-xh)+(y-yh)*(y-yh)); if (dist1e-5) { double h=dx*(x-x1)/r+dy*(y-y1)/r; if (h>1) { h=1; } else if (h<0) { h=0; } final double xh=x1+h*dx, yh=y1+h*dy; final double dist=Math.sqrt((x-xh)*(x-xh)+(y-yh)*(y-yh)); if (dist=V.size()) { project(P); return; } final PointObject P1=(PointObject) V.elementAt(i); PointObject P2; if (i==V.size()-1) { P2=(PointObject) V.elementAt(0); } else { P2=(PointObject) V.elementAt(i+1); } P.setXY(P1.getX()+h*(P2.getX()-P1.getX()), P1.getY()+h*(P2.getY()-P1.getY())); } public double containsInside(final PointObject P) { final boolean inside=contains2(P.getX(), P.getY()); if (inside&&OnBoundary) { return 0.5; } else if (inside) { return 1; } return 0; } public boolean keepInside(final PointObject P) { keepBaricentricCoords(P); if (contains2(P.getX(), P.getY())) { return true; } project(P); return false; } public void dragTo(final double x, final double y) { final Enumeration e=V.elements(); int i=0; while (e.hasMoreElements()) { final PointObject p=(PointObject) e.nextElement(); p.move(xd[i]+(x-x1), yd[i]+(y-y1)); i++; } } @Override public void move(final double x, final double y) { } public boolean moveable() { if (V==null) { return false; } final Enumeration e=V.elements(); while (e.hasMoreElements()) { if (!((PointObject) e.nextElement()).moveable()) { return false; } } return true; } double xd[], yd[], x1, y1; public void startDrag(final double x, final double y) { if (xd==null||xd.length!=V.size()) { xd=new double[V.size()]; yd=new double[V.size()]; } final Enumeration e=V.elements(); int i=0; while (e.hasMoreElements()) { final PointObject p=(PointObject) e.nextElement(); xd[i]=p.getX(); yd[i]=p.getY(); i++; } x1=x; y1=y; } public double getOldX() { return 0; } public double getOldY() { return 0; } @Override public void snap(final ZirkelCanvas zc) { if (moveable()) { final Enumeration e=V.elements(); while (e.hasMoreElements()) { final PointObject p=(PointObject) e.nextElement(); p.snap(zc); } } } public boolean canInteresectWith(final ConstructionObject o) { if (o instanceof PointonObject) { final ConstructionObject line=(ConstructionObject) o; final Enumeration e=V.elements(); { final PointObject P=(PointObject) e.nextElement(); if (line.contains(P)) { return false; } } } return true; } public void repulse(final PointObject P) { project(P); } } ./src/rene/zirkel/objects/LineCircleIntersectionObject.java0000640000175000017500000000561211133127260023010 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: LineCircleIntersectionObject.java import rene.util.xml.XmlWriter; import rene.zirkel.construction.Construction; import rene.zirkel.structures.Coordinates; public class LineCircleIntersectionObject extends IntersectionObject { public LineCircleIntersectionObject(final Construction c, final PrimitiveLineObject P1, final PrimitiveCircleObject P2, final boolean first) { super(c, P1, P2); First = first; validate(); } @Override public void updateCircleDep() { ((PrimitiveCircleObject) P2).addDep(this); ((PrimitiveLineObject) P1).addDep(this); } @Override public void validate() { final boolean oldvalid = Valid; if (!P1.valid() || !P2.valid()) Valid = false; else Valid = true; if (!Valid) return; final Coordinates c = PrimitiveLineObject.intersect( (PrimitiveLineObject) P1, (PrimitiveCircleObject) P2); if (c == null) { if (oldvalid && getConstruction().shouldSwitch()) { doSwitch(); if (!getConstruction().noteSwitch()) Switched = false; } else if (oldvalid && Alternate && Away == null && getConstruction().canAlternate()) { First = !First; } Valid = false; return; } if (getAway() != null) { final double x = getAway().getX(), y = getAway().getY(); final double r = (x - c.X) * (x - c.X) + (y - c.Y) * (y - c.Y); final double r1 = (x - c.X1) * (x - c.X1) + (y - c.Y1) * (y - c.Y1); boolean flag = (r > r1); if (!StayAway) flag = !flag; if (flag) { setXY(c.X, c.Y); } else { setXY(c.X1, c.Y1); } } else { if (First) { setXY(c.X, c.Y); } else { setXY(c.X1, c.Y1); } } if (Restricted) { if (!((PrimitiveLineObject) P1).contains(X, Y)) Valid = false; if (!(((PrimitiveCircleObject) P2).getStart() == this || ((PrimitiveCircleObject) P2) .getEnd() == this) && !((PrimitiveCircleObject) P2).contains(X, Y)) Valid = false; } } @Override public void printArgs(final XmlWriter xml) { super.printArgs(xml); if (First) xml.printArg("which", "first"); else xml.printArg("which", "second"); } @Override public boolean isSwitchable() { return true; } @Override public boolean canAlternate() { return true; } } ./src/rene/zirkel/objects/AxisObject.java0000640000175000017500000000670411360557720017331 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: SegmentObject.java import java.util.Enumeration; import rene.util.xml.XmlWriter; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.graphics.MyGraphics; public class AxisObject extends PrimitiveLineObject { public AxisObject(final Construction c, final boolean xaxis) { super(c, (xaxis) ? "xAxis" : "yAxis"); X1 = 0; Y1 = 0; if (xaxis) { DX = 1; DY = 0; } else { DX = 0; DY = 1; } updateText(); } @Override public void setName() { // if (DX==1) { // Name="xaxis"+getN(); // } else { // Name="yaxis"+getN(); // } // } @Override public boolean nearto(final int c, final int r, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } if (!zc.getAxis_show()) { return false; } // compute point at c,r final double x = zc.x(c), y = zc.y(r); // compute distance from x,y final double d = (x - X1) * DY - (y - Y1) * DX; // scale in screen coordinates Value = Math.abs(zc.col(zc.minX() + d) - zc.col(zc.minX())); return Value < zc.selectionSize() * 2; } // public static Coordinates intersect(PrimitiveLineObject l, FunctionObject // q) { // // // // return new Coordinates(0, 0); // } // public String getTag() { // return "Axis"; // } @Override public void printArgs(final XmlWriter xml) { if (DX == 1) { xml.printArg("xaxis", "true"); } else { xml.printArg("yaxis", "true"); } } @Override public Enumeration depending() { DL.reset(); return DL.elements(); } public double getLength() { return 0; } @Override public void translate() { P1 = (PointObject) P1.getTranslation(); } @Override public boolean contains(final PointObject p) { return false; } @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) { return; } // if (isStrongSelected()&&g instanceof MyGraphics13) { // ((MyGraphics13) // g).drawMarkerLine(zc.col(-5),zc.row(1),zc.col(5),zc.row(1)); // } if (zc.getAxis_show()) { if (indicated()) { g.setColor(this); if (DX == 1) { g.drawLine(0, zc.row(0), zc.IW, zc.row(0), this); } else { g.drawLine(zc.col(0), 0, zc.col(0), zc.IH, this); } } } } @Override public void updateText() { if (DX == 1) { setText("X axis"); } else { setText("Y axis"); } } public void dragTo(final double x, final double y) { } @Override public void move(final double x, final double y) { } public boolean moveable() { return false; } double x1, y1, x2, y2, x3, y3; public void startDrag(final double x, final double y) { } @Override public void snap(final ZirkelCanvas zc) { } public double getOldX() { return 0; } public double getOldY() { return 0; } } ./src/rene/zirkel/objects/FunctionObject.java0000640000175000017500000007644211314640703020211 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: Functionbject.java import eric.bar.JPropertiesBar; import java.awt.Checkbox; import java.awt.Color; import java.awt.Frame; import java.awt.TextField; import java.awt.event.FocusEvent; import java.util.Enumeration; import java.util.StringTokenizer; import java.util.Vector; import javax.swing.JPanel; import rene.dialogs.Warning; import rene.gui.ButtonAction; import rene.gui.Global; import rene.gui.IconBar; import rene.gui.MyLabel; import rene.gui.TextFieldAction; import rene.util.xml.XmlWriter; import rene.gui.Global; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.FunctionPolygonFiller; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.PolygonDrawer; import rene.zirkel.structures.Coordinates; /** * @author Rene * * Function objects are parametric or cartesian curves. For parametric * functions, depending on a parameter t , x(t) and y(t) are computed * and drawn on the screen. For cartesian functions, the parameter x * will be used. * */ public class FunctionObject extends ConstructionObject implements PointonObject, HeavyObject, DriverObject, Evaluator { Expression EX = null, EY = null; public Expression VarMin = null, VarMax = null, DVar = null; String LASTEX = "", LASTEY = "", LASTVarMin = "", LASTVarMax = "", LASTDVar = ""; double X[] = { 0 }; public String Var[] = { "x" }; boolean Filled = false; Expression Center = null; protected int Type = 0; public final static int SQUARE = 0, DIAMOND = 1, CIRCLE = 2, DOT = 3, CROSS = 4, DCROSS = 5; protected boolean Special = false; // Vector RefreshList=new Vector(); public Vector V = new Vector(); double cx, cy, ww, wh; // this is a main object list which tells if the object needs to recompute : Vector DriverObjectList = new Vector(); double c0, r0, c, r; /** * Functions are HeavyObjects which means we always must see if it really * neads to recompute. Computing a function can be time consuming, but once * it's computed, the paint method is fast enough. * * @param c */ public FunctionObject(final Construction c) { super(c); VarMin = new Expression("windowcx-windoww", c, this); VarMax = new Expression("windowcx+windoww", c, this); DVar = new Expression("0", c, this); validate(); updateText(); cx = c.getX(); cy = c.getY(); ww = c.getW(); wh = c.getH(); Type = CROSS; } @Override public void setDefaults() { setShowName(Global.getParameter("options.locus.shownames", false)); setShowValue(Global.getParameter("options.locus.showvalues", false)); // setColor(Global.getParameter("options.locus.color", 0), Global // .getParameter("options.locus.pcolor", (Color) null)); setColor(Global.getParameter("options.locus.color", 0)); setColorType(Global.getParameter("options.locus.colortype", 0)); setFilled(Global.getParameter("options.locus.filled", false)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.locus.shownames", false)); setShowValue(Global.getParameter("options.locus.showvalues", false)); setColor(Global.getParameter("options.locus.color", 0), Global .getParameter("options.locus.pcolor", (Color) null)); setColorType(Global.getParameter("options.locus.colortype", 0)); setFilled(Global.getParameter("options.locus.filled", false)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); } /** * In order to see if the function must be recomputed or not, we have to * register, in the DriverObjectList, all objects the function depends on. * There are many possibilities for an object to be in this list : if it's * used in the def of the function, if it's in the min or max text box, * etc... * * @param c */ public void searchDependencies(final Construction c) { DriverObjectList.clear(); if (RekValidating) { return; } // should not happen! RekValidating = true; Enumeration e = c.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setRekFlag(false); } final ConstructionObject oEX[] = EX.getDepList().getArray(); final ConstructionObject oEY[] = EY.getDepList().getArray(); final ConstructionObject oVarMin[] = VarMin.getDepList().getArray(); final ConstructionObject oVarMax[] = VarMax.getDepList().getArray(); final ConstructionObject oDVar[] = DVar.getDepList().getArray(); for (final ConstructionObject element : oEX) { recursiveSearchDependencies((ConstructionObject) element); } for (final ConstructionObject element : oEY) { recursiveSearchDependencies((ConstructionObject) element); } for (final ConstructionObject element : oVarMin) { recursiveSearchDependencies((ConstructionObject) element); } for (final ConstructionObject element : oVarMax) { recursiveSearchDependencies((ConstructionObject) element); } for (final ConstructionObject element : oDVar) { recursiveSearchDependencies((ConstructionObject) element); } e = c.elements(); while (e.hasMoreElements()) { final ConstructionObject oc = (ConstructionObject) e.nextElement(); if ((oc.isRekFlag()) && (oc.isDriverObject())) { DriverObjectList.addElement(oc); } } RekValidating = false; NeedsRecompute = true; } /** * Recursive method called by the searchDependencies method * * @param o */ public void recursiveSearchDependencies(final ConstructionObject o) { if (o.isRekFlag()) { return; } o.setRekFlag(true); final ConstructionObject d[] = o.getDepArray(); for (final ConstructionObject element : d) { recursiveSearchDependencies(element); } } /** * Time consuming method which is called only if it's really necessary : */ public void compute() { // Empty the vector which contains the point set of the plot : V.clear(); if (!Valid) { return; } // Initialisation of varmin, varmax and d (the step variable) : double varmin, varmax, d; try { varmin = VarMin.getValue(); varmax = VarMax.getValue(); d = DVar.getValue(); if (varmin > varmax) { final double h = varmin; varmin = varmax; varmax = h; } if (d < 0) { d = -d; } } catch (final Exception e) { Valid = false; return; } // X[0] represents the 't' variable for parametric plots. // When you give X[0] a t value, EX.getValue() and EY.getValue() // automatically returns the x(t) and y(t) value. // If it's a cartesian function, X[0] represents the 'x' value // then EX.getValue() always returns x and EY.getValue() returns // the f(x) value. X[0] = varmin; // If the function may have discontinuity problems, computing is // slower, because it checks for each point if a segment will have // to be displayed or not : if (mayHaveDiscontinuityPb()) { if (d == 0) { try { // if the user leaves the step text box empty in the // properties bar, the step d will represents only one pixel // : d = new Expression("1/pixel", getConstruction(), this) .getValue(); } catch (final Exception ex) { } // if the step d defined by user is too small, then correct it : } else if (d < (varmax - varmin) / 1000) { d = (varmax - varmin) / 1000; } double x1 = 0, y1 = 0, x2 = 0, y2 = 0, yM = 0, X0 = 0; final int nbsteps = (int) Math.round((varmax - varmin) / d) + 1; try { x1 = EX.getValue(); y1 = EY.getValue(); V.add(new Coordinates(x1, y1, false)); } catch (final Exception ex) { } /* * A(x1,y1=f(x1)) is the first point. B(x2,y2=f(x2)) is the second * point. In order to know if a segment must join these two points, * we compute the point M(xM,yM=f(xM)), where xM=(x1+x2)/2 : */ for (int i = 1; i < nbsteps; i++) { try { X0 = X[0]; X[0] += d / 2; EX.getValue(); yM = EY.getValue(); X[0] += d / 2; x2 = EX.getValue(); y2 = EY.getValue(); // If A,M and B are on the same horizontal line // then segment must be drawn (true) : if ((y1 == yM) && (y2 == yM)) { V.add(new Coordinates(x2, y2, true)); // if f(xM) is in open interval ]f(x1),f(x2)[ : } else if (((yM > y1) && (yM < y2)) || ((yM > y2) && (yM < y1))) { final double mm = Math.abs(y1 - yM) / Math.abs(y2 - yM); // This is a weird thing, but it seems to work in // lots of "basic" situations : // If the distance |yM-y1| (or |yM-y2|) // represents 10% of the distance |yM-y2| (or |yM-y1|) // then may be it's a discontinuity problem, so // don't draw the segment [AB] (false) if ((mm < 0.1) || (mm > 10)) { V.add(new Coordinates(x2, y2, false)); // Otherwise draw the segment [AB] : } else { V.add(new Coordinates(x2, y2, true)); } // if f(xM) is not in interval [f(x1),f(x2)], don't // draw the segment [AB] (false) : } else { V.add(new Coordinates(x2, y2, false)); } x1 = x2; y1 = y2; } catch (final Exception ex) { try { X[0] = X0 + d; x1 = EX.getValue(); y1 = EY.getValue(); V.add(new Coordinates(x1, y1, false)); } catch (final Exception ex1) { } } } } else { if (d == 0) { d = (varmax - varmin) / 100; } else if (d < (varmax - varmin) / 1000) { d = (varmax - varmin) / 1000; } final int nbsteps = (int) Math.round((varmax - varmin) / d) + 1; for (int i = 0; i < nbsteps; i++) { try { V.add(new Coordinates(EX.getValue(), EY.getValue())); } catch (final Exception ex) { } X[0] += d; } } } public void setNeedsToRecompte(final boolean n) { NeedsRecompute = n; } /** * Check all objects the function depends on. If one of the have changed, * this function return true. * * @return */ public boolean needsToRecompute() { boolean needs = false; final Enumeration pl = DriverObjectList.elements(); while (pl.hasMoreElements()) { final DriverObject oc = (DriverObject) pl.nextElement(); if (oc.somethingChanged()) { // There is a "ClearList" which will be cleared // at the end of the Construction.computeHeavyObjects method : Global.addClearList(oc); needs = true; } } // Also needs to compute when user zoom or move figure in the window : if ((Cn.getX() != cx) || (Cn.getY() != cy) || (Cn.getW() != ww) || (Cn.getH() != wh)) { cx = Cn.getX(); cy = Cn.getY(); ww = Cn.getW(); wh = Cn.getH(); needs = true; } if (NeedsRecompute) { NeedsRecompute = false; return true; } return needs; } @Override public void setFilled(final boolean flag) { Filled = flag; } @Override public boolean isFilled() { return Filled; } @Override public String getTag() { return "Function"; } @Override public int getN() { return N.next(); } @Override public void updateText() { if (EX != null && EY != null) { setText(text2(Global.name("text.function"), EX.toString(), EY .toString())); } else { setText(text2(Global.name("text.function"), "", "")); } } @Override public void validate() { if (EX != null && EY != null) { Valid = EX.isValid() && EY.isValid() && VarMin.isValid() && VarMax.isValid() && DVar.isValid(); } else { Valid = false; } } public void setExpressions(final String t, String ex, final String ey) { final StringTokenizer tok = new StringTokenizer(t); Var = new String[tok.countTokens()]; X = new double[tok.countTokens()]; int i = 0; while (tok.hasMoreTokens()) { Var[i++] = tok.nextToken(); } if (ex.equals("")) { ex = Var[0]; } EX = new Expression(ex, getConstruction(), this, Var); EY = new Expression(ey, getConstruction(), this, Var); validate(); searchDependencies(Cn); } public boolean isCartesian() { return EX.toString().equals("x"); } public boolean mayHaveDiscontinuityPb() { final String Pbs[] = { "floor(", "ceil(", "tan(", "sign(" }; // Continuity pbs are only checked for cartesian functions : if (EX.toString().equals("x")) { for (final String pb : Pbs) { if ((EY.toString().indexOf(pb) != -1)) { return true; } } } return false; } public void setRange(final String min, final String max, final String d) { VarMin = new Expression(min, getConstruction(), this); VarMax = new Expression(max, getConstruction(), this); DVar = new Expression(d, getConstruction(), this); searchDependencies(Cn); } @Override public String getEX() { if (EX != null) { return EX.toString(); } else { return Var[0]; } } @Override public String getEY() { if (EY != null) { return EY.toString(); } else { return "0"; } } FunctionPolygonFiller PF = null; double C1, C2; int C, R, W, H; @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) { return; } Coordinates C = null; Enumeration e = V.elements(); double c, r; g.setColor(this); if (Special) { if (Filled) { PF = new FunctionPolygonFiller(g, this, zc.getY(), zc.getY() + zc.getHeight()); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); PF.add(zc.col(C.X), zc.row(C.Y)); } PF.fillPolygon(zc.row(0)); e = V.elements(); g.setColor(this); } while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); PointObject.drawPoint(g, zc, this, C.X, C.Y, Type); } } else if (Tracked) { zc.UniversalTrack.TrackIG.setColor(this); zc.UniversalTrack.setActive(true); final PolygonDrawer pd = new PolygonDrawer(g, this); final PolygonDrawer pdt = new PolygonDrawer( zc.UniversalTrack.TrackIG, this); if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c0 = zc.col(C.X); r0 = zc.row(C.Y); pd.startPolygon(c0, r0); pdt.startPolygon(c0, r0); } while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c = zc.col(C.X); r = zc.row(C.Y); if (Math.abs(pd.c() - c) < 1000 && Math.abs(pd.r() - r) < 1000) { pd.drawTo(c, r); pdt.drawTo(c, r); } else { pd.finishPolygon(); pdt.finishPolygon(); pd.startPolygon(c, r); pdt.startPolygon(c, r); } } pd.finishPolygon(); pdt.finishPolygon(); } else { if (Filled) { PF = new FunctionPolygonFiller(g, this, zc.getY(), zc.getY() + zc.getHeight()); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); PF.add(zc.col(C.X), zc.row(C.Y)); } PF.fillPolygon(zc.row(0)); e = V.elements(); g.setColor(this); } final PolygonDrawer pd = new PolygonDrawer(g, this); if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c0 = zc.col(C.X); r0 = zc.row(C.Y); pd.startPolygon(c0, r0); } while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c = zc.col(C.X); r = zc.row(C.Y); if (C.join) { pd.drawTo(c, r); } else { pd.finishPolygon(); pd.startPolygon(c, r); } } pd.finishPolygon(); } } @Override public double getValue() throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } return X[0]; } public double getValue(final String var) throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } for (int i = 0; i < Var.length; i++) { if (var.equals(Var[i])) { return X[i]; } } return X[0]; } public double getIntegral() throws ConstructionException { return getSum(); } @Override public String getDisplayValue() { if (getEX().equals(getVar())) { return EY.toString(); } else { return "(" + EX.toString() + "," + EY.toString() + ")"; } } // Mainly to select the track for delete @Override public boolean nearto(final int x, final int y, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } final Enumeration e = V.elements(); final double xx = zc.x(x), yy = zc.y(y); final double mymax = (7 / Cn.getPixel()); if (Special) { Coordinates CS; while (e.hasMoreElements()) { CS = (Coordinates) e.nextElement(); if ((Math.abs(CS.X - xx) < mymax) && (Math.abs(CS.Y - yy) < mymax)) { return true; } } } else { double xA = 0, yA = 0, xB = 0, yB = 0; Coordinates CS0, CS1; if (e.hasMoreElements()) { CS0 = (Coordinates) e.nextElement(); xA = CS0.X; yA = CS0.Y; } while (e.hasMoreElements()) { CS1 = (Coordinates) e.nextElement(); xB = CS1.X; yB = CS1.Y; final double p1 = (xx - xA) * (xB - xA) + (yy - yA) * (yB - yA); final double p2 = (xx - xB) * (xA - xB) + (yy - yB) * (yA - yB); if ((p1 > 0) && (p2 > 0)) { final double aa = xB - xA, bb = yB - yA, cc = bb * xA - aa * yA; final double d = Math.abs(-bb * xx + aa * yy + cc) / Math.sqrt(aa * aa + bb * bb); if (d < mymax) { return true; } } xA = xB; yA = yB; } } return false; } public boolean EditAborted; @Override public void printArgs(final XmlWriter xml) { xml.printArg("x", EX.toString()); xml.printArg("y", EY.toString()); xml.printArg("var", getVar()); xml.printArg("min", "" + VarMin); xml.printArg("max", "" + VarMax); xml.printArg("d", "" + DVar); if (Special) { xml.printArg("special", "true"); } printType(xml); if (Filled) { xml.printArg("filled", "true"); } if (getCenter() != null) { xml.printArg("center", getCenter().getName()); } xml.printArg("color", ""+getColorIndex()); } @Override public void setType(final int type) { Type = type; } @Override public int getType() { return Type; } public void printType(final XmlWriter xml) { if (Type != 0) { switch (Type) { case DIAMOND: xml.printArg("shape", "diamond"); break; case CIRCLE: xml.printArg("shape", "circle"); break; case DOT: xml.printArg("shape", "dot"); break; case CROSS: xml.printArg("shape", "cross"); break; case DCROSS: xml.printArg("shape", "dcross"); break; } } } @Override public ConstructionObject copy(final double x, final double y) { final FunctionObject fo = new FunctionObject(getConstruction()); fo.copyProperties(this); fo.EX = new Expression(EX.toString(), getConstruction(), fo, Var); fo.EY = new Expression(EY.toString(), getConstruction(), fo, Var); fo.VarMin = new Expression(VarMin.toString(), getConstruction(), fo); fo.VarMax = new Expression(VarMax.toString(), getConstruction(), fo); fo.DVar = new Expression(DVar.toString(), getConstruction(), fo); fo.Special = Special; final ConstructionObject O = getTranslation(); fo.setTranslation(this); fo.EX.translate(); fo.EY.translate(); fo.VarMin.translate(); fo.VarMax.translate(); fo.DVar.translate(); fo.translateConditionals(); fo.X = X; fo.Var = Var; fo.validate(); fo.setTranslation(O); fo.searchDependencies(Cn.getTranslation()); return fo; } @Override public boolean onlynearto(final int x, final int y, final ZirkelCanvas zc) { return false; // return nearto(x,y,zc); } @Override public boolean equals(final ConstructionObject o) { return false; } @Override public Enumeration depending() { DL.reset(); addDepending(EX); addDepending(EY); addDepending(VarMin); addDepending(VarMax); addDepending(DVar); return DL.elements(); } public void addDepending(final Expression E) { if (E != null) { final Enumeration e = E.getDepList().elements(); while (e.hasMoreElements()) { DL.add((ConstructionObject) e.nextElement()); } } } @Override public boolean hasUnit() { return false; } public double evaluateF(final double x[]) throws ConstructionException { int n = x.length; if (n > X.length) { n = X.length; } for (int i = 0; i < n; i++) { X[i] = x[i]; } for (int i = n; i < X.length; i++) { X[i] = 0; } try { return EY.getValue(); } catch (final Exception e) { throw new ConstructionException(""); } } public double evaluateF(final double x) throws ConstructionException { X[0] = x; for (int i = 1; i < X.length; i++) { X[i] = 0; } try { return EY.getValue(); } catch (final Exception e) { throw new ConstructionException(""); } } @Override public int getDistance(final PointObject P) { double varmin, varmax, dvar; try { varmin = VarMin.getValue(); varmax = VarMax.getValue(); dvar = DVar.getValue(); if (varmin > varmax) { final double h = varmin; varmin = varmax; varmax = h; } if (dvar < 0) { dvar = -dvar; } if (dvar == 0) { dvar = (varmax - varmin) / 100; } else if (dvar < (varmax - varmin) / 1000) { dvar = (varmax - varmin) / 1000; } } catch (final Exception e) { Valid = false; return Integer.MAX_VALUE; } try { // if it's a cartesian function, try to calculate the "real" coords // : if ((getEX().equals("x"))) { double x = (P.getX() < varmin) ? varmin : P.getX(); x = (P.getX() > varmax) ? varmax : x; final double y = evaluateF(x); final double dd = Math.sqrt((P.getX() - x) * (P.getX() - x) + (P.getY() - y) * (P.getY() - y)); return (int) Math.round(dd * Cn.getPixel()); } } catch (final Exception e) { } try { // if it's a parmetric curve and function is just plot with points : if ((!getEX().equals("x")) && (Special)) { if (P.haveBoundOrder()) { X[0] = P.getBoundOrder(); final double dd = Math.sqrt((P.getX() - EX.getValue()) * (P.getX() - EX.getValue()) + (P.getY() - EY.getValue()) * (P.getY() - EY.getValue())); return (int) Math.round(dd * Cn.getPixel()); } else { Coordinates CS; final Enumeration e = V.elements(); double delta0 = 0, delta1 = 0, xx = 0, yy = 0; int i = 0; if (e.hasMoreElements()) { CS = (Coordinates) e.nextElement(); delta0 = Math.abs(CS.X - P.getX()) + Math.abs(CS.Y - P.getY()); xx = CS.X; yy = CS.Y; } while (e.hasMoreElements()) { i++; CS = (Coordinates) e.nextElement(); delta1 = Math.abs(CS.X - P.getX()) + Math.abs(CS.Y - P.getY()); if (delta1 < delta0) { delta0 = delta1; xx = CS.X; yy = CS.Y; } } final double dd = Math.sqrt((P.getX() - xx) * (P.getX() - xx) + (P.getY() - yy) * (P.getY() - yy)); return (int) Math.round(dd * Cn.getPixel()); } } } catch (final Exception e) { Valid = false; return Integer.MAX_VALUE; } // Otherwise, at Least get the approx coordinates on the polygon : if (needsToRecompute()) { compute(); } final Enumeration e = V.elements(); double x = 0, y = 0, x0 = 0, y0 = 0, dmin = 0; boolean started = false; while (e.hasMoreElements()) { final Coordinates c = (Coordinates) e.nextElement(); final double x1 = c.X; final double y1 = c.Y; if (!started) { dmin = Math.sqrt((P.getX() - x1) * (P.getX() - x1) + (P.getY() - y1) * (P.getY() - y1)); x0 = x = x1; y0 = y = y1; started = true; } else { if (c.flag) { double h = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0); if (h < 1e-10) { h = 1e-10; } double g = (P.getX() - x0) * (x1 - x0) + (P.getY() - y0) * (y1 - y0); if (g < 0) { g = 0; } if (g > h) { g = h; } final double x2 = x0 + g / h * (x1 - x0), y2 = y0 + g / h * (y1 - y0); final double d = Math.sqrt((P.getX() - x2) * (P.getX() - x2) + (P.getY() - y2) * (P.getY() - y2)); if (d < dmin) { dmin = d; x = x2; y = y2; } } x0 = x1; y0 = y1; } } if (started) { P.Valid = true; final double dd = Math.sqrt((P.getX() - x) * (P.getX() - x) + (P.getY() - y) * (P.getY() - y)); return (int) Math.round(dd * Cn.getPixel()); } else { P.Valid = false; } return Integer.MAX_VALUE; } public void project(final PointObject P) { double varmin, varmax, dvar; try { varmin = VarMin.getValue(); varmax = VarMax.getValue(); dvar = DVar.getValue(); if (varmin > varmax) { final double h = varmin; varmin = varmax; varmax = h; } if (dvar < 0) { dvar = -dvar; } if (dvar == 0) { dvar = (varmax - varmin) / 100; } else if (dvar < (varmax - varmin) / 1000) { dvar = (varmax - varmin) / 1000; } } catch (final Exception e) { Valid = false; return; } try { // if P is a PointOn (a parmetric curve) and function is just plot // with points : if ((!getEX().equals("x")) && (P.isPointOnOrMagnet()) && (Special)) { if (P.haveBoundOrder()) { X[0] = P.getBoundOrder(); P.setXY(EX.getValue(), EY.getValue()); return; } else { Coordinates CS; final Enumeration e = V.elements(); double delta0 = 0, delta1 = 0, xx = 0, yy = 0; int i = 0, k = 0; if (e.hasMoreElements()) { CS = (Coordinates) e.nextElement(); delta0 = Math.abs(CS.X - P.getX()) + Math.abs(CS.Y - P.getY()); xx = CS.X; yy = CS.Y; } while (e.hasMoreElements()) { i++; CS = (Coordinates) e.nextElement(); delta1 = Math.abs(CS.X - P.getX()) + Math.abs(CS.Y - P.getY()); if (delta1 < delta0) { k = i; delta0 = delta1; xx = CS.X; yy = CS.Y; } } P.setXY(xx, yy); P.setBoundOrder(varmin + k * dvar); return; } } } catch (final Exception e) { Valid = false; return; } try { // if P is a PointOn (a cartesian function), try to calculate the // "real" coords : if ((P.isPointOnOrMagnet()) && (getEX().equals("x"))) { double x = (P.getX() < varmin) ? varmin : P.getX(); x = (P.getX() > varmax) ? varmax : x; final double y = evaluateF(x); P.move(x, y); return; } } catch (final Exception e) { } // Otherwise, at Least get the approx coordinates on the polygon : if (needsToRecompute()) { compute(); } final Enumeration e = V.elements(); double x = 0, y = 0, x0 = 0, y0 = 0, dmin = 0; boolean started = false; while (e.hasMoreElements()) { final Coordinates c = (Coordinates) e.nextElement(); final double x1 = c.X; final double y1 = c.Y; if (!started) { dmin = Math.sqrt((P.getX() - x1) * (P.getX() - x1) + (P.getY() - y1) * (P.getY() - y1)); x0 = x = x1; y0 = y = y1; started = true; } else { if (c.flag) { double h = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0); if (h < 1e-10) { h = 1e-10; } double g = (P.getX() - x0) * (x1 - x0) + (P.getY() - y0) * (y1 - y0); if (g < 0) { g = 0; } if (g > h) { g = h; } final double x2 = x0 + g / h * (x1 - x0), y2 = y0 + g / h * (y1 - y0); final double d = Math.sqrt((P.getX() - x2) * (P.getX() - x2) + (P.getY() - y2) * (P.getY() - y2)); if (d < dmin) { dmin = d; x = x2; y = y2; } } x0 = x1; y0 = y1; } } if (started) { P.setXY(x, y); P.Valid = true; } else { P.Valid = false; } } public double getSum() { double varmin, varmax, dvar; boolean reverse = false; final boolean parametric = !getEX().equals(getVar()); try { varmin = VarMin.getValue(); varmax = VarMax.getValue(); dvar = DVar.getValue(); if (varmin > varmax) { final double h = varmin; varmin = varmax; varmax = h; reverse = true; } if (dvar < 0) { dvar = -dvar; } if (dvar == 0) { dvar = (varmax - varmin) / 100; } else if (dvar < (varmax - varmin) / 1000) { dvar = (varmax - varmin) / 1000; } } catch (final Exception e) { Valid = false; return 0; } X[0] = varmin; double x0 = 0, y0 = 0; boolean started = false; double sum = 0; while (true) { try { final double x1 = EX.getValue(); final double y1 = EY.getValue(); if (parametric) { double x = 0, y = 0; if (getCenter() != null) { x = getCenter().getX(); y = getCenter().getY(); } if (started) { sum += ((x0 - x) * (y1 - y) - (y0 - y) * (x1 - x)) / 2; } } else { if (started) { if (Special) { if (reverse) { sum += (x1 - x0) * y1; } else { sum += (x1 - x0) * y0; } } else { sum += (x1 - x0) * (y0 + y1) / 2; } } } x0 = x1; y0 = y1; started = true; } catch (final Exception e) { } if (X[0] >= varmax) { break; } X[0] = X[0] + dvar; if (X[0] > varmax) { X[0] = varmax; } } return sum; } public double getLength() { double varmin, varmax, dvar; try { varmin = VarMin.getValue(); varmax = VarMax.getValue(); dvar = DVar.getValue(); if (varmin > varmax) { final double h = varmin; varmin = varmax; varmax = h; } if (dvar < 0) { dvar = -dvar; } if (dvar == 0) { dvar = (varmax - varmin) / 100; } else if (dvar < (varmax - varmin) / 1000) { dvar = (varmax - varmin) / 1000; } } catch (final Exception e) { Valid = false; return 0; } X[0] = varmin; double x0 = 0, y0 = 0; boolean started = false; double sum = 0; while (true) { try { final double x1 = EX.getValue(); final double y1 = EY.getValue(); if (started) { sum += Math.sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0)); } started = true; x0 = x1; y0 = y1; } catch (final Exception e) { } if (X[0] >= varmax) { break; } X[0] = X[0] + dvar; if (X[0] > varmax) { X[0] = varmax; } } return sum; } @Override public boolean isSpecial() { return Special; } @Override public void setSpecial(final boolean f) { Special = f; } public void project(final PointObject P, final double alpha) { project(P); } @Override public boolean maybeTransparent() { return true; } @Override public boolean canDisplayName() { return false; } public void setCenter(final String s) { if (Cn == null) { return; } Center = new Expression("@\"" + s + "\"", Cn, this); } @Override public boolean isFilledForSelect() { return false; } public PointObject getCenter() { try { return (PointObject) Center.getObject(); } catch (final Exception e) { return null; } } public String getVar() { String vars = Var[0]; for (int i = 1; i < Var.length; i++) { vars = vars + " " + Var[i]; } return vars; } public boolean canInteresectWith(final ConstructionObject o) { return true; } @Override public boolean isDriverObject() { return true; } public boolean somethingChanged() { boolean b = !EX.toString().equals(LASTEX); b = b || !EY.toString().equals(LASTEY); return b; } public void clearChanges() { LASTEX = EX.toString(); LASTEY = EY.toString(); } public void repulse(final PointObject P) { project(P); } } ./src/rene/zirkel/objects/CVS/0000755000175000017500000000000011276460321015057 5ustar yvesyves./src/rene/zirkel/objects/CVS/Repository0000644000175000017500000000003411132354034017150 0ustar yvesyvescarmetal/rene/zirkel/objects./src/rene/zirkel/objects/CVS/Entries0000644000175000017500000000433111276460321016414 0ustar yvesyves/AngleObject.java/1.5/Tue Jan 13 15:09:33 2009/-ko/ /AreaObject.java/1.5/Tue Jan 13 15:09:33 2009/-ko/ /AxisFunctionIntersectionObject.java/1.4/Tue Jan 13 15:09:33 2009/-ko/ /AxisObject.java/1.4/Tue Jan 13 15:09:33 2009/-ko/ /Circle3Object.java/1.4/Tue Jan 13 15:09:33 2009/-ko/ /CircleIntersectionObject.java/1.4/Tue Jan 13 15:09:34 2009/-ko/ /CircleObject.java/1.4/Tue Jan 13 15:09:34 2009/-ko/ /ConstructionObject.java/1.6/Mon Mar 09 08:35:09 2009/-ko/ /DriverObject.java/1.3/Tue Jan 13 15:09:34 2009/-ko/ /EquationXYObject.java/1.5/Fri Aug 07 15:14:05 2009/-ko/ /Evaluator.java/1.3/Tue Jan 13 15:09:34 2009/-ko/ /ExpressionObject.java/1.5/Tue Jan 13 15:09:35 2009/-ko/ /FixedAngleObject.java/1.5/Tue Jan 13 15:09:35 2009/-ko/ /FixedCircleObject.java/1.4/Tue Jan 13 15:09:35 2009/-ko/ /FunctionObject.java/1.7/Wed Aug 19 09:43:49 2009/-ko/ /HeavyObject.java/1.3/Tue Jan 13 15:09:35 2009/-ko/ /ImageObject.java/1.3/Tue Jan 13 15:09:35 2009/-ko/ /InsideObject.java/1.3/Tue Jan 13 15:09:35 2009/-ko/ /IntersectionObject.java/1.4/Tue Jan 13 15:09:35 2009/-ko/ /LineCircleIntersectionObject.java/1.4/Tue Jan 13 15:09:36 2009/-ko/ /LineIntersectionObject.java/1.3/Tue Jan 13 15:09:36 2009/-ko/ /LineObject.java/1.4/Tue Jan 13 15:09:36 2009/-ko/ /LineQuadricIntersectionObject.java/1.4/Tue Jan 13 15:09:36 2009/-ko/ /MidpointObject.java/1.4/Tue Jan 13 15:09:36 2009/-ko/ /MoveableObject.java/1.3/Tue Jan 13 15:09:36 2009/-ko/ /ParallelObject.java/1.4/Tue Jan 13 15:09:37 2009/-ko/ /PlumbObject.java/1.4/Tue Jan 13 15:09:37 2009/-ko/ /PointObject.java/1.8/Sat Sep 26 21:15:01 2009/-ko/ /PointonObject.java/1.3/Tue Jan 13 15:09:37 2009/-ko/ /PointonObjectIntersectionObject.java/1.4/Fri Apr 17 14:49:33 2009/-ko/ /PrimitiveCircleObject.java/1.4/Tue Jan 13 15:09:37 2009/-ko/ /PrimitiveLineObject.java/1.5/Wed Aug 19 09:26:42 2009/-ko/ /QuadricObject.java/1.4/Tue Jan 13 15:09:37 2009/-ko/ /RayObject.java/1.5/Fri Apr 17 14:14:08 2009/-ko/ /SegmentObject.java/1.4/Tue Jan 13 15:09:38 2009/-ko/ /SimulationObject.java/1.3/Tue Jan 13 15:09:38 2009/-ko/ /TextObject.java/1.5/Tue Jan 13 15:09:39 2009/-ko/ /TrackObject.java/1.6/Mon Mar 09 08:35:09 2009/-ko/ /TwoPointLineObject.java/1.3/Tue Jan 13 15:09:39 2009/-ko/ /UserFunctionObject.java/1.5/Tue Jan 13 15:09:39 2009/-ko/ ./src/rene/zirkel/objects/CVS/RevisionCache/0000755000175000017500000000000011361642565017610 5ustar yvesyves./src/rene/zirkel/objects/CVS/RevisionCache/TrackObject.java#1.50000644000175000017500000007746411155150756023154 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: TrackObject.java import java.awt.Checkbox; import java.awt.Color; import java.util.Enumeration; import java.util.Vector; import javax.swing.JPanel; import rene.gui.Global; import rene.gui.IconBar; import rene.gui.MyLabel; import rene.gui.MyTextField; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.dialogs.EditConditionals; import rene.zirkel.dialogs.ObjectEditDialog; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.graphics.PolygonDrawer; import rene.zirkel.graphics.PolygonFiller; import rene.zirkel.structures.Coordinates; class TrackEditDialog extends ObjectEditDialog { /** * */ private static final long serialVersionUID = 1L; IconBar IC, TypeIB; Checkbox Fixed, Discrete; MyTextField DMin; public TrackEditDialog(final ZirkelCanvas zc, final TrackObject o) { super(zc.getFrame(), Zirkel.name("edit.function.title"), o, "function"); } @Override public void addFirst(final JPanel P) { Fixed = new Checkbox(""); Fixed.setState(O.isFixed()); P.add(new MyLabel(Zirkel.name("edit.fixed"))); P.add(Fixed); DMin = new MyTextField("" + ((TrackObject) O).getDMin()); P.add(new MyLabel(Zirkel.name("edit.track.dmin"))); P.add(DMin); } @Override public void addSecond(final JPanel P) { final TrackObject T = (TrackObject) O; IC = new IconBar(F); IC.setIconBarListener(this); IC.addOnOffLeft("filled"); IC.setState("filled", T.isFilled()); IC.setIconBarListener(this); P.add(new MyLabel("")); P.add(IC); TypeIB = new IconBar(F); TypeIB.addToggleGroupLeft("type", 6); TypeIB.toggle("type", T.getType()); P.add(new MyLabel("")); P.add(TypeIB); P.add(new MyLabel(Zirkel.name("edit.discrete"))); P.add(Discrete = new Checkbox()); Discrete.setState(T.isDiscrete()); } @Override public void iconPressed(final String o) { if (o.equals("filled")) { if (IC.getState("filled")) { IB.setState("isback", true); ThicknessIB.setEnabled("solid", true); } else { IB.setState("isback", false); ThicknessIB.setState("solid", false); ThicknessIB.setEnabled("solid", false); } } super.iconPressed(o); } @Override public void setAction() { final TrackObject f = (TrackObject) O; f.setFixed(Fixed.getState()); f.setFilled(IC.getState("filled")); try { f.setDMin(new Double(DMin.getText()).doubleValue()); } catch (final Exception e) { } f.setType(TypeIB.getToggleState("type")); f.setDiscrete(Discrete.getState()); } } /** * This object contains an automatic track. It is saved in the construction like * any other ConstructionObject. Validation is time consuming and is done only * on repaints from ZirkelCanvas. */ public class TrackObject extends ConstructionObject implements PointonObject { static Count N = new Count(); public PointObject PM; public ConstructionObject O, P; public int PMax = 16, PN; public ConstructionObject PO[] = new ConstructionObject[PMax]; public boolean Filled = false; public boolean Discrete = false; public int Type = 0; @Override public void setFilled(final boolean flag) { Filled = flag; } @Override public boolean isFilled() { return Filled; } public TrackObject(final Construction c) { super(c); } public TrackObject(final Construction c, final ConstructionObject p, final ConstructionObject po[], final int pn, final ConstructionObject o, final PointObject pm) { super(c); P = p; PN = pn; for (int i = 0; i < PN; i++) { PO[i] = po[i]; } O = o; PM = pm; validate(); updateText(); } @Override public void setDefaults() { setShowName(Global.getParameter("options.locus.shownames", false)); setShowValue(Global.getParameter("options.locus.showvalues", false)); setColor(Global.getParameter("options.locus.color", 0), Global .getParameter("options.locus.pcolor", (Color) null)); setColorType(Global.getParameter("options.locus.colortype", 0)); setFilled(Global.getParameter("options.locus.filled", false)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.locus.shownames", false)); setShowValue(Global.getParameter("options.locus.showvalues", false)); setColor(Global.getParameter("options.locus.color", 0), Global .getParameter("options.locus.pcolor", (Color) null)); setColorType(Global.getParameter("options.locus.colortype", 0)); setFilled(Global.getParameter("options.locus.filled", false)); } @Override public String getTag() { return "Track"; } @Override public int getN() { return N.next(); } @Override public void updateText() { if (PM != null) { setText(text3(Zirkel.name("text.track"), P.getName(), PM.getName(), O.getName())); } else { setText(text2(Zirkel.name("text.trackof"), P.getName(), O.getName())); } } // Update only from ZirkelCanvas, when needed. @Override public void validate() { } public PolygonFiller PF = null; // Paint the track @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) { return; } Coordinates C; Enumeration e = V.elements(); double c0, r0, c, r; if (!Discrete && isStrongSelected() && g instanceof MyGraphics13) { final PolygonDrawer pm = new PolygonDrawer(g, this); pm.useAsMarker(); if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c0 = zc.col(C.X); r0 = zc.row(C.Y); pm.drawTo(c0, r0); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c = zc.col(C.X); r = zc.row(C.Y); if (Math.abs(c0 - c) < 100 && Math.abs(r0 - r) < 100) { pm.drawTo(c, r); } else { if (isFilled()) { PF.finishPolygon(); } pm.finishPolygon(); } c0 = c; r0 = r; } pm.finishPolygon(); } } e = V.elements(); if (indicated()) { final boolean sel = P.indicated(); P.setIndicated(true); g.setColor(P); P.setIndicated(sel); } else { g.setColor(this); } if (Discrete) { final int col = getColorIndex(); final int th = getColorType(); if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c0 = zc.col(C.X); r0 = zc.row(C.Y); PF.drawTo(c0, r0); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c = zc.col(C.X); r = zc.row(C.Y); if (Math.abs(c0 - c) < 100 && Math.abs(r0 - r) < 100) { if (isFilled()) { PF.drawTo(c, r); } } else { if (isFilled()) { PF.finishPolygon(); } } if (C.Color >= 0) { setColor(C.Color); } if (C.Thickness >= 0) { setColorType(C.Thickness); } PointObject.drawPoint(g, zc, this, C.X, C.Y, Type); setColor(col); setColorType(th); c0 = c; r0 = r; } if (isFilled()) { PF.finishPolygon(); } } for (int i = 0; i < PN; i++) { e = VO[i].elements(); g.setColor(PO[i]); if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); if (C.Color >= 0) { setColor(C.Color); } if (C.Thickness >= 0) { setColorType(C.Thickness); } PointObject.drawPoint(g, zc, this, C.X, C.Y, Type); setColor(col); setColorType(th); } } } } else { PolygonDrawer pd = new PolygonDrawer(g, this); if (isFilled()) { if (PF == null) { PF = new PolygonFiller(g, this); } PF.start(); PF.setGraphics(g); } if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c0 = zc.col(C.X); r0 = zc.row(C.Y); pd.drawTo(c0, r0); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c = zc.col(C.X); r = zc.row(C.Y); if (Math.abs(c0 - c) < 100 && Math.abs(r0 - r) < 100) { if (isFilled()) { PF.drawTo(c, r); } pd.drawTo(c, r); } else { if (isFilled()) { PF.finishPolygon(); } pd.finishPolygon(); } c0 = c; r0 = r; } if (isFilled()) { PF.finishPolygon(); } pd.finishPolygon(); } for (int i = 0; i < PN; i++) { e = VO[i].elements(); g.setColor(PO[i]); pd = new PolygonDrawer(g, PO[i]); if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c0 = zc.col(C.X); r0 = zc.row(C.Y); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c = zc.col(C.X); r = zc.row(C.Y); if (Math.abs(c0 - c) < 100 && Math.abs(r0 - r) < 100) { pd.drawTo(c, r); } else { pd.finishPolygon(); } c0 = c; r0 = r; } } pd.finishPolygon(); } } } public double getSum(final double x, final double y) throws ConstructionException { if (!Valid) { throw new ConstructionException(""); } double sum = 0; boolean started = false; double x0 = 0, y0 = 0; final Enumeration e = V.elements(); while (e.hasMoreElements()) { final Coordinates C = (Coordinates) e.nextElement(); if (started) { sum += (-(C.X - x) * (y0 - y) + (C.Y - y) * (x0 - x)) / 2; } x0 = C.X; y0 = C.Y; started = true; } return sum; } public double getSum() throws ConstructionException { if (!Valid) { throw new ConstructionException(""); } double sum = 0; boolean started = false; double x0 = 0, y0 = 0, x = 0, y = 0; final Enumeration e = V.elements(); while (e.hasMoreElements()) { final Coordinates C = (Coordinates) e.nextElement(); if (started) { sum += (-(C.X - x) * (y0 - y) + (C.Y - y) * (x0 - x)) / 2; } else { x = C.X; y = C.Y; } x0 = C.X; y0 = C.Y; started = true; } return sum; } public double getLength() throws ConstructionException { if (!Valid) { throw new ConstructionException(""); } double sum = 0; boolean started = false; double x0 = 0, y0 = 0; final Enumeration e = V.elements(); while (e.hasMoreElements()) { final Coordinates C = (Coordinates) e.nextElement(); if (started) { sum += Math.sqrt((C.X - x0) * (C.X - x0) + (C.Y - y0) * (C.Y - y0)); } x0 = C.X; y0 = C.Y; started = true; } return sum; } @Override public void printArgs(final XmlWriter xml) { super.printArgs(xml); if (PM != null) { xml.printArg("point", PM.getName()); } xml.printArg("on", O.getName()); xml.printArg("track", P.getName()); xml.printArg("dmin", "" + DMin); for (int i = 0; i < PN; i++) { xml.printArg("track" + i, PO[i].getName()); } if (Filled) { xml.printArg("filled", "true"); } if (Fixed) { xml.printArg("fixed", "true"); } if (Discrete) { xml.printArg("discrete", "true"); } printType(xml); } public void printType(final XmlWriter xml) { if (Type != 0) { switch (Type) { case PointObject.DIAMOND: xml.printArg("shape", "diamond"); break; case PointObject.CIRCLE: xml.printArg("shape", "circle"); break; case PointObject.DOT: xml.printArg("shape", "dot"); break; case PointObject.CROSS: xml.printArg("shape", "cross"); break; case PointObject.DCROSS: xml.printArg("shape", "dcross"); break; } } } @Override public Enumeration depending() { super.depending(); if (PM != null) { DL.add(PM); } DL.add(O); DL.add(P); for (int i = 0; i < PN; i++) { DL.add(PO[i]); } return DL.elements(); } @Override public boolean equals(final ConstructionObject o) { return false; } @Override public void translate() { if (PM != null) { PM = (PointObject) PM.getTranslation(); } O = O.getTranslation(); P = P.getTranslation(); } @Override public boolean maybeTransparent() { return false; } public Vector V = new Vector(); public Vector VO[] = new Vector[PMax]; // Mainly to select the track for delete @Override public boolean nearto(final int x, final int y, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } final int size = (int) zc.selectionSize(); final Enumeration e = V.elements(); while (e.hasMoreElements()) { final Coordinates c = (Coordinates) e.nextElement(); final double col = zc.col(c.X), row = zc.row(c.Y); if (Math.max(Math.abs(col - x), Math.abs(row - y)) < size) { return true; } } return false; } @Override public boolean onlynearto(final int c, final int r, final ZirkelCanvas zc) { return false; } public double da = 0; double oldx, oldy; public double X, Y, DX, DY; double XO[] = new double[PMax], YO[] = new double[PMax], DXO[] = new double[PMax], DYO[] = new double[PMax]; int Omit = 1; public double mod(final double x) { if (x >= Math.PI) { return x - 2 * Math.PI; } if (x < -Math.PI) { return x + 2 * Math.PI; } return x; } public boolean DontProject = false; public double DMin = 0.005; /** * Complicated procedure to recompute the automatic track. In principle, a * moving point moves on some object, the coordinates of the tracked points * or the intersections of the tracked lines are stored, as well as the * positions of the moved point. * * But if the tracked point gets invalid, the movement reverses and the * interesections change. * * Moreover, there is a list of secondary tracked objects. * * @param zc */ public synchronized void docompute(final ZirkelCanvas zc) { V = new Vector(); for (int i = 0; i < PN; i++) { VO[i] = new Vector(); } // Running on a circle: if (O instanceof PrimitiveCircleObject) { zc.getConstruction().shouldSwitch(false); final PrimitiveCircleObject c = (PrimitiveCircleObject) O; final double x = c.getX(), y = c.getY(), r = c.getR(); PM.project(c); double amin = 0, amax = 0, astart = 0, anull = 0; final double dmax = 0.5; boolean range = false; if (c.hasRange()) { range = true; final double a1 = c.getA1(); final double a2 = c.getA2(); double d = a2 - a1; while (d < 0) { d += 2 * Math.PI; } while (d >= 2 * Math.PI) { d -= 2 * Math.PI; } amin = astart = -d / 2; amax = d / 2; anull = (a1 + a2) / 2; } else { amin = astart = -Math.PI * 0.9999; amax = Math.PI * 0.9999; } double a = astart; PM.move(x + r * Math.cos(anull + a), y + r * Math.sin(anull + a)); PM.project(c); zc.getConstruction().validate(this, PM); zc.resetSum(); double x1 = 0, y1 = 0; boolean started = false; if (P.valid()) { zc.getConstruction().shouldSwitch(true); if (P instanceof PointObject) { final PointObject p = (PointObject) P; x1 = p.getX(); y1 = p.getY(); addCoordinates(V, P, x1, y1); started = true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) P; X = L.getX(); Y = L.getY(); DX = L.getDX(); DY = L.getDY(); started = true; } } final boolean startedO[] = new boolean[PMax]; for (int i = 0; i < PN; i++) { startedO[i] = false; } final long time = System.currentTimeMillis(); addSecondary(startedO); final double dmin = DMin; if (da < 1e-10 || da > zc.dx(1)) { da = zc.dx(1) / 10; } double aold = a; while (true) { a = a + da; boolean Break = false; if ((!started || range) && a >= amax) { a = amax; Break = true; } else if ((!started || range) && a <= amin) { a = amin; Break = true; } else if (started && da > 0) { if ((mod(aold - astart) < 0 && mod(a - astart) >= 0) && !zc.getConstruction().haveSwitched()) { Break = true; a = astart; } } aold = a; PM.move(x + r * Math.cos(anull + a), y + r * Math.sin(anull + a)); PM.project(c); zc.getConstruction().validate(this, PM); if (P.valid()) { if (!started) { zc.getConstruction().shouldSwitch(true); astart = a; } double x2 = 0, y2 = 0; boolean valid = false; if (P instanceof PointObject) { final PointObject p = (PointObject) P; x2 = p.getX(); y2 = p.getY(); valid = true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) P; if (!started) { X = L.getX(); Y = L.getY(); DX = L.getDX(); DY = L.getDY(); } else { double xx, yy, dx, dy; xx = L.getX(); yy = L.getY(); dx = L.getDX(); dy = L.getDY(); final double det = dx * DY - dy * DX; if (Math.sqrt(Math.abs(det)) > 1e-9) { final double h = (-(X - xx) * DY + DX * (Y - yy)) / (-det); x2 = xx + h * dx; y2 = yy + h * dy; valid = true; } X = xx; Y = yy; DX = dx; DY = dy; } } final double dist = zc.dCenter(x2, y2); final boolean different = ((int) zc.col(x1) != (int) zc .col(x2) || (int) zc.row(y1) != (int) zc.row(y2)); if (valid && different) { addCoordinates(V, P, x2, y2); } final double dp = Math.abs(x2 - x1) + Math.abs(y2 - y1); da = updateDA(da, valid, dist, dp, dmin, dmax, zc); x1 = x2; y1 = y2; started = true; } else if (started) { da = -da; } addSecondary(startedO); if (Break || System.currentTimeMillis() - time > 1000) { break; } } // System.out.println("Points "+V.size()+" Time "+(System.currentTimeMillis()-time)); } // Running on a line: else if (O instanceof PrimitiveLineObject) { zc.getConstruction().shouldSwitch(false); final PrimitiveLineObject l = (PrimitiveLineObject) O; PM.project(l); final double lx = l.getX(), ly = l.getY(), ldx = l.getDX(), ldy = l .getDY(); double amin = 0, amax = 0, astart = 0; double dmax = 0.5; boolean range = false; if (l instanceof RayObject) { amin = astart = 0; amax = Math.PI * 0.9999; range = true; } else if (l instanceof SegmentObject) { amin = astart = 0; final double r = ((SegmentObject) l).getLength(); dmax = r / 20; amax = Math.atan(r) * 2; range = true; } else { amin = astart = -Math.PI * 0.99999; amax = Math.PI * 0.9999; } double a = astart; double hd = Math.tan(mod(a) / 2); PM.move(lx + hd * ldx, ly + hd * ldy); PM.project(l); zc.getConstruction().validate(this, PM); zc.resetSum(); double x1 = 0, y1 = 0; boolean started = false; if (P.valid()) { zc.getConstruction().shouldSwitch(true); if (P instanceof PointObject) { final PointObject p = (PointObject) P; x1 = p.getX(); y1 = p.getY(); addCoordinates(V, P, x1, y1); started = true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) P; X = L.getX(); Y = L.getY(); DX = L.getDX(); DY = L.getDY(); started = true; } } final boolean startedO[] = new boolean[PMax]; for (int i = 0; i < PN; i++) { startedO[i] = false; } final long time = System.currentTimeMillis(); addSecondary(startedO); final double dmin = DMin; if (da < 1e-10 || da > zc.dx(1)) { da = zc.dx(1) / 10; } double aold = a; while (true) { a = a + da; boolean Break = false; if ((!started || range) && a >= amax) { a = amax; Break = true; } else if ((!started || range) && a <= amin) { a = amin; Break = true; } else if (started && da > 0) { if ((mod(aold - astart) < 0 && mod(a - astart) >= 0) && !zc.getConstruction().haveSwitched()) { Break = true; a = astart; } } aold = a; hd = Math.tan(mod(a) / 2); PM.move(lx + hd * ldx, ly + hd * ldy); PM.project(l); zc.getConstruction().validate(this, PM); if (P.valid()) { if (!started) { zc.getConstruction().shouldSwitch(true); astart = a; } double x2 = 0, y2 = 0; boolean valid = false; if (P instanceof PointObject) { final PointObject p = (PointObject) P; x2 = p.getX(); y2 = p.getY(); valid = true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) P; if (!started) { X = L.getX(); Y = L.getY(); DX = L.getDX(); DY = L.getDY(); } else { double xx, yy, dx, dy; xx = L.getX(); yy = L.getY(); dx = L.getDX(); dy = L.getDY(); final double det = dx * DY - dy * DX; if (Math.sqrt(Math.abs(det)) > 1e-9) { final double h = (-(X - xx) * DY + DX * (Y - yy)) / (-det); x2 = xx + h * dx; y2 = yy + h * dy; valid = true; } X = xx; Y = yy; DX = dx; DY = dy; } } final double dist = zc.dCenter(x2, y2); final boolean different = ((int) zc.col(x1) != (int) zc .col(x2) || (int) zc.row(y1) != (int) zc.row(y2)); if (valid && different) { addCoordinates(V, P, x2, y2); } final double dp = Math.abs(x2 - x1) + Math.abs(y2 - y1); da = updateDA(da, valid, dist, dp, dmin, dmax, zc); x1 = x2; y1 = y2; started = true; } else if (started) { da = -da; } addSecondary(startedO); if (Break || System.currentTimeMillis() - time > 1000) { break; } } } // Running an expression slider: else if (O instanceof ExpressionObject) { zc.getConstruction().shouldSwitch(false); final ExpressionObject eo = (ExpressionObject) O; if (!eo.isSlider()) { return; } double amin = 0, amax = 0, astart = 0; double dmax = 0.5; boolean range = false; amin = astart = 0; final double r = 1; dmax = r / 20; amax = r; range = true; double a = astart; double hd = a; eo.setSliderPosition(0); zc.getConstruction().validate(P, null); zc.resetSum(); double x1 = 0, y1 = 0; boolean started = false; if (P.valid()) { zc.getConstruction().shouldSwitch(true); if (P instanceof PointObject) { final PointObject p = (PointObject) P; x1 = p.getX(); y1 = p.getY(); addCoordinates(V, P, x1, y1); started = true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) P; X = L.getX(); Y = L.getY(); DX = L.getDX(); DY = L.getDY(); started = true; } } final boolean startedO[] = new boolean[PMax]; for (int i = 0; i < PN; i++) { startedO[i] = false; } final long time = System.currentTimeMillis(); addSecondary(startedO); final double dmin = DMin; if (da < 1e-10 || da > zc.dx(1)) { da = zc.dx(1) / 10; } double aold = a; double x2 = 0, y2 = 0; while (true) { a = a + da; boolean Break = false; if ((!started || range) && a >= amax) { a = amax; Break = true; } else if ((!started || range) && a <= amin) { a = amin; Break = true; } else if (started && da > 0) { if ((mod(aold - astart) < 0 && mod(a - astart) >= 0) && !zc.getConstruction().haveSwitched()) { Break = true; a = astart; } } aold = a; hd = a; eo.setSliderPosition(hd); zc.getConstruction().validate(P, null); if (P.valid()) { if (!started) { zc.getConstruction().shouldSwitch(true); astart = a; } boolean valid = false; if (P instanceof PointObject) { final PointObject p = (PointObject) P; x2 = p.getX(); y2 = p.getY(); valid = true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) P; if (!started) { X = L.getX(); Y = L.getY(); DX = L.getDX(); DY = L.getDY(); } else { double xx, yy, dx, dy; xx = L.getX(); yy = L.getY(); dx = L.getDX(); dy = L.getDY(); final double det = dx * DY - dy * DX; if (Math.sqrt(Math.abs(det)) > 1e-9) { final double h = (-(X - xx) * DY + DX * (Y - yy)) / (-det); x2 = xx + h * dx; y2 = yy + h * dy; valid = true; } X = xx; Y = yy; DX = dx; DY = dy; } } final double dist = zc.dCenter(x2, y2); final boolean different = ((int) zc.col(x1) != (int) zc .col(x2) || (int) zc.row(y1) != (int) zc.row(y2)); if (valid && different) { addCoordinates(V, P, x2, y2); } final double dp = Math.abs(x2 - x1) + Math.abs(y2 - y1); da = updateDA(da, valid, dist, dp, dmin, dmax, zc); x1 = x2; y1 = y2; started = true; } else if (started) { addCoordinates(V, P, x2, y2); da = -da; } addSecondary(startedO); if (Break || System.currentTimeMillis() - time > 1000) { break; } } } } // This is the update function. It is a time consuming moving of // the point P on the object O. The function is a copy from the // same function in ObjectTracker. public synchronized void compute(final ZirkelCanvas zc) { if (Fixed && !StartFix) { return; } StartFix = false; double x = 0, y = 0; if (PM != null) { x = PM.getX(); y = PM.getY(); } else if (O instanceof ExpressionObject && ((ExpressionObject) O).isSlider()) { x = ((ExpressionObject) O).getSliderPosition(); } zc.getConstruction().clearSwitches(); zc.getConstruction().shouldSwitch(true); DontProject = true; docompute(zc); DontProject = false; zc.getConstruction().shouldSwitch(false); zc.getConstruction().clearSwitches(); if (PM != null) { PM.move(x, y); } else if (O instanceof ExpressionObject && ((ExpressionObject) O).isSlider()) { ((ExpressionObject) O).setSliderPosition(x); } final Enumeration e = V.elements(); if (e.hasMoreElements()) { Coordinates c = (Coordinates) e.nextElement(); x = c.X; y = c.Y; double col1 = zc.col(c.X); double row1 = zc.row(c.Y); while (e.hasMoreElements()) { c = (Coordinates) e.nextElement(); final double col2 = zc.col(c.X); final double row2 = zc.row(c.Y); c.flag = Math.abs(col2 - col1) < 100 && Math.abs(row2 - row1) < 100; row1 = row2; col1 = col2; } } zc.dovalidate(); } public void addSecondary(final boolean startedO[]) { for (int i = 0; i < PN; i++) { if (!PO[i].valid()) { continue; } if (PO[i] instanceof PointObject) { final PointObject p = (PointObject) PO[i]; addCoordinates(VO[i], p, p.getX(), p.getY()); VO[i].addElement(new Coordinates(p.getX(), p.getY())); } else if (PO[i] instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) PO[i]; if (!startedO[i]) { XO[i] = L.getX(); YO[i] = L.getY(); DXO[i] = L.getDX(); DYO[i] = L.getDY(); startedO[i] = true; } else { double xx, yy, dx, dy; xx = L.getX(); yy = L.getY(); dx = L.getDX(); dy = L.getDY(); final double det = dx * DYO[i] - dy * DXO[i]; if (Math.sqrt(Math.abs(det)) > 1e-9) { final double h = (-(XO[i] - xx) * DYO[i] + DXO[i] * (YO[i] - yy)) / (-det); XO[i] = xx; YO[i] = yy; DXO[i] = dx; DYO[i] = dy; addCoordinates(VO[i], PO[i], xx + h * dx, yy + h * dy); } } } } } public void addCoordinates(final Vector v, final ConstructionObject p, final double x, final double y) { final Coordinates C = new Coordinates(x, y); if (Discrete && p instanceof PointObject) { C.Color = p.getColorIndex(); C.Thickness = p.getColorType(); } v.addElement(C); } public void addCoordinates(final Vector v, final ConstructionObject p) { v.addElement(new Coordinates(p.getX(), p.getY())); } public void addCoordinates(final Vector v, final double x, final double y) { v.addElement(new Coordinates(x, y)); } public double StepSize = 5; public double updateDA(double da, final boolean valid, final double dist, final double dp, final double dmin, final double dmax, final ZirkelCanvas zc) { if (V.size() > 0 && valid) { if (dist < 1.2) { if (dp > zc.dx(StepSize)) { da /= 2; } else if (dp < zc.dx(StepSize / 2)) { da *= 2; } if (da > 0 && da < dmin) { da = dmin; } else if (da < 0 && da > -dmin) { da = -dmin; } if (da > dmax) { da = dmax; } else if (da < -dmax) { da = -dmax; } } else { if (dp > zc.dx(StepSize * 10)) { da /= 2; } else if (dp < zc.dx(StepSize * 5)) { da *= 2; } if (da > 0 && da < dmin) { da = dmin; } else if (da < 0 && da > -dmin) { da = -dmin; } if (da > dmax) { da = dmax; } else if (da < -dmax) { da = -dmax; } } } return da; } @Override public boolean hasUnit() { return false; } /** * Project a point to this object. */ public synchronized void project(final PointObject P) { if (DontProject) { return; } final Enumeration e = V.elements(); double x = 0, y = 0, x0 = 0, y0 = 0, dmin = 0; boolean started = false; while (e.hasMoreElements()) { final Coordinates c = (Coordinates) e.nextElement(); final double x1 = c.X; final double y1 = c.Y; if (!started) { dmin = Math.sqrt((P.getX() - x1) * (P.getX() - x1) + (P.getY() - y1) * (P.getY() - y1)); x0 = x = x1; y0 = y = y1; started = true; } else { if (c.flag) { double h = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0); if (h < 1e-10) { h = 1e-10; } double g = (P.getX() - x0) * (x1 - x0) + (P.getY() - y0) * (y1 - y0); if (g < 0) { g = 0; } if (g > h) { g = h; } final double x2 = x0 + g / h * (x1 - x0), y2 = y0 + g / h * (y1 - y0); final double d = Math.sqrt((P.getX() - x2) * (P.getX() - x2) + (P.getY() - y2) * (P.getY() - y2)); if (d < dmin) { dmin = d; x = x2; y = y2; } } x0 = x1; y0 = y1; } } if (started) { P.setXY(x, y); P.Valid = true; } else { P.Valid = false; } } @Override public String getDisplayValue() { try { return "" + getSum(); } catch (final Exception e) { return "???"; } } public void project(final PointObject P, final double alpha) { project(P); } @Override public void edit(final ZirkelCanvas zc) { if (!rene.zirkel.Zirkel.IsApplet) { eric.JGlobals.EditObject(this); return; } final ObjectEditDialog d = new TrackEditDialog(zc, this); d.setVisible(true); zc.repaint(); validate(); if (d.wantsMore()) { new EditConditionals(zc.getFrame(), this); validate(); } } @Override public boolean canDisplayName() { return false; } public boolean Fixed = false, StartFix; @Override public boolean isFixed() { return Fixed; } @Override public void setFixed(final boolean f) { Fixed = f; if (Fixed) { StartFix = true; } } public void setDMin(final double dmin) { DMin = dmin; } public double getDMin() { return DMin; } @Override public int getType() { return Type; } @Override public void setType(final int type) { Type = type; } public boolean isDiscrete() { return Discrete; } public void setDiscrete(final boolean discrete) { Discrete = discrete; } public boolean canInteresectWith(final ConstructionObject o) { return true; } public void repulse(final PointObject P) { project(P); } } ./src/rene/zirkel/objects/CVS/RevisionCache/FunctionObject.java#1.70000644000175000017500000010705111302741242023647 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: Functionbject.java import java.awt.Checkbox; import java.awt.Color; import java.awt.Frame; import java.awt.TextField; import java.awt.event.FocusEvent; import java.util.Enumeration; import java.util.StringTokenizer; import java.util.Vector; import javax.swing.JPanel; import rene.dialogs.Warning; import rene.gui.ButtonAction; import rene.gui.Global; import rene.gui.IconBar; import rene.gui.MyLabel; import rene.gui.TextFieldAction; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.dialogs.EditConditionals; import rene.zirkel.dialogs.ObjectEditDialog; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.FunctionPolygonFiller; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.PolygonDrawer; import rene.zirkel.structures.Coordinates; class CurveEditDialog extends ObjectEditDialog { /** * */ private static final long serialVersionUID = 1L; TextField VarMin, VarMax, DVar, Var, EX, EY; IconBar IC, TypeIB; ZirkelCanvas ZC; Checkbox Special; public CurveEditDialog(final ZirkelCanvas zc, final FunctionObject o) { super(zc.getFrame(), Zirkel.name("edit.function.title"), o, "function"); ZC = zc; } @Override public void addFirst(final JPanel P) { final FunctionObject f = (FunctionObject) O; VarMin = new TextFieldAction(this, "varmin", "" + f.VarMin, 30); P.add(new MyLabel(Zirkel.name("function.varmin"))); P.add(VarMin); VarMax = new TextFieldAction(this, "varmax", "" + f.VarMax, 30); P.add(new MyLabel(Zirkel.name("function.varmax"))); P.add(VarMax); DVar = new TextFieldAction(this, "dvar", "" + f.DVar, 30); P.add(new MyLabel(Zirkel.name("function.dvar"))); P.add(DVar); Var = new TextFieldAction(this, "var", "" + f.getVar(), 30); P.add(new MyLabel(Zirkel.name("function.var"))); P.add(Var); String ex = f.getEX(); if (ex.equals(f.Var)) { ex = ""; } EX = new TextFieldAction(this, "ex", "" + ex, 30); P.add(new MyLabel(Zirkel.name("function.x"))); P.add(EX); EY = new TextFieldAction(this, "ey", "" + f.getEY(), 30); P.add(new MyLabel(Zirkel.name("function.y"))); P.add(EY); } @Override public void addSecond(final JPanel P) { final FunctionObject Func = (FunctionObject) O; IC = new IconBar(F); IC.setIconBarListener(this); IC.addOnOffLeft("filled"); IC.setState("filled", Func.isFilled()); IC.setIconBarListener(this); P.add(new MyLabel("")); P.add(IC); TypeIB = new IconBar(F); TypeIB.addToggleGroupLeft("type", 6); TypeIB.toggle("type", Func.getType()); P.add(new MyLabel("")); P.add(TypeIB); P.add(new MyLabel(Zirkel.name("edit.discrete"))); P.add(Special = new Checkbox()); Special.setState(Func.isSpecial()); } @Override public void addButton(final JPanel P) { final FunctionObject f = (FunctionObject) O; if (!f.Var.equals(f.EX)) { if (f.Center == null) { P.add(new ButtonAction(this, Zirkel .name("edit.function.center"), "SetCenter")); } else { P.add(new ButtonAction(this, Zirkel.name("edit.function.free"), "SetFree")); } P.add(new MyLabel(" ")); } } @Override public void iconPressed(final String o) { if (o.equals("filled")) { if (IC.getState("filled")) { IB.setState("isback", true); ThicknessIB.setEnabled("solid", true); } else { IB.setState("isback", false); ThicknessIB.setState("solid", false); ThicknessIB.setEnabled("solid", false); } } super.iconPressed(o); } @Override public void setAction() { final FunctionObject f = (FunctionObject) O; f.setExpressions(Var.getText(), EX.getText(), EY.getText()); f.setRange(VarMin.getText(), VarMax.getText(), DVar.getText()); f.setFilled(IC.getState("filled")); f.setType(TypeIB.getToggleState("type")); f.setSpecial(Special.getState()); } @Override public void doAction(final String o) { if (o.equals("SetCenter")) { ZC.setCurveCenter((FunctionObject) O); super.doAction("OK"); } else if (o.equals("SetFree")) { ((FunctionObject) O).Center = null; super.doAction("OK"); } else { super.doAction(o); } } @Override public void focusGained(final FocusEvent e) { VarMin.requestFocus(); } } /** * @author Rene * * Function objects are parametric or cartesian curves. For parametric * functions, depending on a parameter t , x(t) and y(t) are computed * and drawn on the screen. For cartesian functions, the parameter x * will be used. * */ public class FunctionObject extends ConstructionObject implements PointonObject, HeavyObject, DriverObject, Evaluator { Expression EX = null, EY = null; public Expression VarMin = null, VarMax = null, DVar = null; String LASTEX = "", LASTEY = "", LASTVarMin = "", LASTVarMax = "", LASTDVar = ""; double X[] = { 0 }; public String Var[] = { "x" }; boolean Filled = false; Expression Center = null; protected int Type = 0; public final static int SQUARE = 0, DIAMOND = 1, CIRCLE = 2, DOT = 3, CROSS = 4, DCROSS = 5; protected boolean Special = false; // Vector RefreshList=new Vector(); public Vector V = new Vector(); double cx, cy, ww, wh; // this is a main object list which tells if the object needs to recompute : Vector DriverObjectList = new Vector(); double c0, r0, c, r; /** * Functions are HeavyObjects which means we always must see if it really * neads to recompute. Computing a function can be time consuming, but once * it's computed, the paint method is fast enough. * * @param c */ public FunctionObject(final Construction c) { super(c); VarMin = new Expression("windowcx-windoww", c, this); VarMax = new Expression("windowcx+windoww", c, this); DVar = new Expression("0", c, this); validate(); updateText(); cx = c.getX(); cy = c.getY(); ww = c.getW(); wh = c.getH(); Type = CROSS; } @Override public void setDefaults() { setShowName(Global.getParameter("options.locus.shownames", false)); setShowValue(Global.getParameter("options.locus.showvalues", false)); // setColor(Global.getParameter("options.locus.color", 0), Global // .getParameter("options.locus.pcolor", (Color) null)); setColor(Global.getParameter("options.locus.color", 0)); setColorType(Global.getParameter("options.locus.colortype", 0)); setFilled(Global.getParameter("options.locus.filled", false)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.locus.shownames", false)); setShowValue(Global.getParameter("options.locus.showvalues", false)); setColor(Global.getParameter("options.locus.color", 0), Global .getParameter("options.locus.pcolor", (Color) null)); setColorType(Global.getParameter("options.locus.colortype", 0)); setFilled(Global.getParameter("options.locus.filled", false)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); } /** * In order to see if the function must be recomputed or not, we have to * register, in the DriverObjectList, all objects the function depends on. * There are many possibilities for an object to be in this list : if it's * used in the def of the function, if it's in the min or max text box, * etc... * * @param c */ public void searchDependencies(final Construction c) { DriverObjectList.clear(); if (RekValidating) { return; } // should not happen! RekValidating = true; Enumeration e = c.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setRekFlag(false); } final ConstructionObject oEX[] = EX.getDepList().getArray(); final ConstructionObject oEY[] = EY.getDepList().getArray(); final ConstructionObject oVarMin[] = VarMin.getDepList().getArray(); final ConstructionObject oVarMax[] = VarMax.getDepList().getArray(); final ConstructionObject oDVar[] = DVar.getDepList().getArray(); for (final ConstructionObject element : oEX) { recursiveSearchDependencies((ConstructionObject) element); } for (final ConstructionObject element : oEY) { recursiveSearchDependencies((ConstructionObject) element); } for (final ConstructionObject element : oVarMin) { recursiveSearchDependencies((ConstructionObject) element); } for (final ConstructionObject element : oVarMax) { recursiveSearchDependencies((ConstructionObject) element); } for (final ConstructionObject element : oDVar) { recursiveSearchDependencies((ConstructionObject) element); } e = c.elements(); while (e.hasMoreElements()) { final ConstructionObject oc = (ConstructionObject) e.nextElement(); if ((oc.isRekFlag()) && (oc.isDriverObject())) { DriverObjectList.addElement(oc); } } RekValidating = false; NeedsRecompute = true; } /** * Recursive method called by the searchDependencies method * * @param o */ public void recursiveSearchDependencies(final ConstructionObject o) { if (o.isRekFlag()) { return; } o.setRekFlag(true); final ConstructionObject d[] = o.getDepArray(); for (final ConstructionObject element : d) { recursiveSearchDependencies(element); } } /** * Time consuming method which is called only if it's really necessary : */ public void compute() { // Empty the vector which contains the point set of the plot : V.clear(); if (!Valid) { return; } // Initialisation of varmin, varmax and d (the step variable) : double varmin, varmax, d; try { varmin = VarMin.getValue(); varmax = VarMax.getValue(); d = DVar.getValue(); if (varmin > varmax) { final double h = varmin; varmin = varmax; varmax = h; } if (d < 0) { d = -d; } } catch (final Exception e) { Valid = false; return; } // X[0] represents the 't' variable for parametric plots. // When you give X[0] a t value, EX.getValue() and EY.getValue() // automatically returns the x(t) and y(t) value. // If it's a cartesian function, X[0] represents the 'x' value // then EX.getValue() always returns x and EY.getValue() returns // the f(x) value. X[0] = varmin; // If the function may have discontinuity problems, computing is // slower, because it checks for each point if a segment will have // to be displayed or not : if (mayHaveDiscontinuityPb()) { if (d == 0) { try { // if the user leaves the step text box empty in the // properties bar, the step d will represents only one pixel // : d = new Expression("1/pixel", getConstruction(), this) .getValue(); } catch (final Exception ex) { } // if the step d defined by user is too small, then correct it : } else if (d < (varmax - varmin) / 1000) { d = (varmax - varmin) / 1000; } double x1 = 0, y1 = 0, x2 = 0, y2 = 0, yM = 0, X0 = 0; final int nbsteps = (int) Math.round((varmax - varmin) / d) + 1; try { x1 = EX.getValue(); y1 = EY.getValue(); V.add(new Coordinates(x1, y1, false)); } catch (final Exception ex) { } /* * A(x1,y1=f(x1)) is the first point. B(x2,y2=f(x2)) is the second * point. In order to know if a segment must join these two points, * we compute the point M(xM,yM=f(xM)), where xM=(x1+x2)/2 : */ for (int i = 1; i < nbsteps; i++) { try { X0 = X[0]; X[0] += d / 2; EX.getValue(); yM = EY.getValue(); X[0] += d / 2; x2 = EX.getValue(); y2 = EY.getValue(); // If A,M and B are on the same horizontal line // then segment must be drawn (true) : if ((y1 == yM) && (y2 == yM)) { V.add(new Coordinates(x2, y2, true)); // if f(xM) is in open interval ]f(x1),f(x2)[ : } else if (((yM > y1) && (yM < y2)) || ((yM > y2) && (yM < y1))) { final double mm = Math.abs(y1 - yM) / Math.abs(y2 - yM); // This is a weird thing, but it seems to work in // lots of "basic" situations : // If the distance |yM-y1| (or |yM-y2|) // represents 10% of the distance |yM-y2| (or |yM-y1|) // then may be it's a discontinuity problem, so // don't draw the segment [AB] (false) if ((mm < 0.1) || (mm > 10)) { V.add(new Coordinates(x2, y2, false)); // Otherwise draw the segment [AB] : } else { V.add(new Coordinates(x2, y2, true)); } // if f(xM) is not in interval [f(x1),f(x2)], don't // draw the segment [AB] (false) : } else { V.add(new Coordinates(x2, y2, false)); } x1 = x2; y1 = y2; } catch (final Exception ex) { try { X[0] = X0 + d; x1 = EX.getValue(); y1 = EY.getValue(); V.add(new Coordinates(x1, y1, false)); } catch (final Exception ex1) { } } } } else { if (d == 0) { d = (varmax - varmin) / 100; } else if (d < (varmax - varmin) / 1000) { d = (varmax - varmin) / 1000; } final int nbsteps = (int) Math.round((varmax - varmin) / d) + 1; for (int i = 0; i < nbsteps; i++) { try { V.add(new Coordinates(EX.getValue(), EY.getValue())); } catch (final Exception ex) { } X[0] += d; } } } public void setNeedsToRecompte(final boolean n) { NeedsRecompute = n; } /** * Check all objects the function depends on. If one of the have changed, * this function return true. * * @return */ public boolean needsToRecompute() { boolean needs = false; final Enumeration pl = DriverObjectList.elements(); while (pl.hasMoreElements()) { final DriverObject oc = (DriverObject) pl.nextElement(); if (oc.somethingChanged()) { // There is a "ClearList" which will be cleared // at the end of the Construction.computeHeavyObjects method : Global.addClearList(oc); needs = true; } } // Also needs to compute when user zoom or move figure in the window : if ((Cn.getX() != cx) || (Cn.getY() != cy) || (Cn.getW() != ww) || (Cn.getH() != wh)) { cx = Cn.getX(); cy = Cn.getY(); ww = Cn.getW(); wh = Cn.getH(); needs = true; } if (NeedsRecompute) { NeedsRecompute = false; return true; } return needs; } @Override public void setFilled(final boolean flag) { Filled = flag; } @Override public boolean isFilled() { return Filled; } @Override public String getTag() { return "Function"; } @Override public int getN() { return N.next(); } @Override public void updateText() { if (EX != null && EY != null) { setText(text2(Zirkel.name("text.function"), EX.toString(), EY .toString())); } else { setText(text2(Zirkel.name("text.function"), "", "")); } } @Override public void validate() { if (EX != null && EY != null) { Valid = EX.isValid() && EY.isValid() && VarMin.isValid() && VarMax.isValid() && DVar.isValid(); } else { Valid = false; } } public void setExpressions(final String t, String ex, final String ey) { final StringTokenizer tok = new StringTokenizer(t); Var = new String[tok.countTokens()]; X = new double[tok.countTokens()]; int i = 0; while (tok.hasMoreTokens()) { Var[i++] = tok.nextToken(); } if (ex.equals("")) { ex = Var[0]; } EX = new Expression(ex, getConstruction(), this, Var); EY = new Expression(ey, getConstruction(), this, Var); validate(); searchDependencies(Cn); } public boolean isCartesian() { return EX.toString().equals("x"); } public boolean mayHaveDiscontinuityPb() { final String Pbs[] = { "floor(", "ceil(", "tan(", "sign(" }; // Continuity pbs are only checked for cartesian functions : if (EX.toString().equals("x")) { for (final String pb : Pbs) { if ((EY.toString().indexOf(pb) != -1)) { return true; } } } return false; } public void setRange(final String min, final String max, final String d) { VarMin = new Expression(min, getConstruction(), this); VarMax = new Expression(max, getConstruction(), this); DVar = new Expression(d, getConstruction(), this); searchDependencies(Cn); } @Override public String getEX() { if (EX != null) { return EX.toString(); } else { return Var[0]; } } @Override public String getEY() { if (EY != null) { return EY.toString(); } else { return "0"; } } FunctionPolygonFiller PF = null; double C1, C2; int C, R, W, H; @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) { return; } Coordinates C = null; Enumeration e = V.elements(); double c, r; g.setColor(this); if (Special) { if (Filled) { PF = new FunctionPolygonFiller(g, this, zc.getY(), zc.getY() + zc.getHeight()); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); PF.add(zc.col(C.X), zc.row(C.Y)); } PF.fillPolygon(zc.row(0)); e = V.elements(); g.setColor(this); } while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); PointObject.drawPoint(g, zc, this, C.X, C.Y, Type); } } else if (Tracked) { zc.UniversalTrack.TrackIG.setColor(this); zc.UniversalTrack.setActive(true); final PolygonDrawer pd = new PolygonDrawer(g, this); final PolygonDrawer pdt = new PolygonDrawer( zc.UniversalTrack.TrackIG, this); if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c0 = zc.col(C.X); r0 = zc.row(C.Y); pd.startPolygon(c0, r0); pdt.startPolygon(c0, r0); } while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c = zc.col(C.X); r = zc.row(C.Y); if (Math.abs(pd.c() - c) < 1000 && Math.abs(pd.r() - r) < 1000) { pd.drawTo(c, r); pdt.drawTo(c, r); } else { pd.finishPolygon(); pdt.finishPolygon(); pd.startPolygon(c, r); pdt.startPolygon(c, r); } } pd.finishPolygon(); pdt.finishPolygon(); } else { if (Filled) { PF = new FunctionPolygonFiller(g, this, zc.getY(), zc.getY() + zc.getHeight()); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); PF.add(zc.col(C.X), zc.row(C.Y)); } PF.fillPolygon(zc.row(0)); e = V.elements(); g.setColor(this); } final PolygonDrawer pd = new PolygonDrawer(g, this); if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c0 = zc.col(C.X); r0 = zc.row(C.Y); pd.startPolygon(c0, r0); } while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c = zc.col(C.X); r = zc.row(C.Y); if (C.join) { pd.drawTo(c, r); } else { pd.finishPolygon(); pd.startPolygon(c, r); } } pd.finishPolygon(); } } @Override public double getValue() throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } return X[0]; } public double getValue(final String var) throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } for (int i = 0; i < Var.length; i++) { if (var.equals(Var[i])) { return X[i]; } } return X[0]; } public double getIntegral() throws ConstructionException { return getSum(); } @Override public String getDisplayValue() { if (getEX().equals(getVar())) { return EY.toString(); } else { return "(" + EX.toString() + "," + EY.toString() + ")"; } } // Mainly to select the track for delete @Override public boolean nearto(final int x, final int y, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } final Enumeration e = V.elements(); final double xx = zc.x(x), yy = zc.y(y); final double mymax = (7 / Cn.getPixel()); if (Special) { Coordinates CS; while (e.hasMoreElements()) { CS = (Coordinates) e.nextElement(); if ((Math.abs(CS.X - xx) < mymax) && (Math.abs(CS.Y - yy) < mymax)) { return true; } } } else { double xA = 0, yA = 0, xB = 0, yB = 0; Coordinates CS0, CS1; if (e.hasMoreElements()) { CS0 = (Coordinates) e.nextElement(); xA = CS0.X; yA = CS0.Y; } while (e.hasMoreElements()) { CS1 = (Coordinates) e.nextElement(); xB = CS1.X; yB = CS1.Y; final double p1 = (xx - xA) * (xB - xA) + (yy - yA) * (yB - yA); final double p2 = (xx - xB) * (xA - xB) + (yy - yB) * (yA - yB); if ((p1 > 0) && (p2 > 0)) { final double aa = xB - xA, bb = yB - yA, cc = bb * xA - aa * yA; final double d = Math.abs(-bb * xx + aa * yy + cc) / Math.sqrt(aa * aa + bb * bb); if (d < mymax) { return true; } } xA = xB; yA = yB; } } return false; } public boolean EditAborted; @Override public void edit(final ZirkelCanvas zc) { ObjectEditDialog d; if (!rene.zirkel.Zirkel.IsApplet) { eric.JGlobals.EditObject(this); return; } while (true) { d = new CurveEditDialog(zc, this); d.setVisible(true); EditAborted = false; if (d.isAborted()) { EditAborted = true; break; } else if (!EX.isValid()) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, EX.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } else if (!EY.isValid()) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, EY.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } else { break; } } validate(); updateText(); zc.getConstruction().updateCircleDep(); zc.repaint(); if (d.wantsMore()) { new EditConditionals(zc.getFrame(), this); validate(); } } @Override public void printArgs(final XmlWriter xml) { xml.printArg("x", EX.toString()); xml.printArg("y", EY.toString()); xml.printArg("var", getVar()); xml.printArg("min", "" + VarMin); xml.printArg("max", "" + VarMax); xml.printArg("d", "" + DVar); if (Special) { xml.printArg("special", "true"); } printType(xml); if (Filled) { xml.printArg("filled", "true"); } if (getCenter() != null) { xml.printArg("center", getCenter().getName()); } xml.printArg("color", ""+getColorIndex()); } @Override public void setType(final int type) { Type = type; } @Override public int getType() { return Type; } public void printType(final XmlWriter xml) { if (Type != 0) { switch (Type) { case DIAMOND: xml.printArg("shape", "diamond"); break; case CIRCLE: xml.printArg("shape", "circle"); break; case DOT: xml.printArg("shape", "dot"); break; case CROSS: xml.printArg("shape", "cross"); break; case DCROSS: xml.printArg("shape", "dcross"); break; } } } @Override public ConstructionObject copy(final double x, final double y) { final FunctionObject fo = new FunctionObject(getConstruction()); fo.copyProperties(this); fo.EX = new Expression(EX.toString(), getConstruction(), fo, Var); fo.EY = new Expression(EY.toString(), getConstruction(), fo, Var); fo.VarMin = new Expression(VarMin.toString(), getConstruction(), fo); fo.VarMax = new Expression(VarMax.toString(), getConstruction(), fo); fo.DVar = new Expression(DVar.toString(), getConstruction(), fo); fo.Special = Special; final ConstructionObject O = getTranslation(); fo.setTranslation(this); fo.EX.translate(); fo.EY.translate(); fo.VarMin.translate(); fo.VarMax.translate(); fo.DVar.translate(); fo.translateConditionals(); fo.X = X; fo.Var = Var; fo.validate(); fo.setTranslation(O); fo.searchDependencies(Cn.getTranslation()); return fo; } @Override public boolean onlynearto(final int x, final int y, final ZirkelCanvas zc) { return false; // return nearto(x,y,zc); } @Override public boolean equals(final ConstructionObject o) { return false; } @Override public Enumeration depending() { DL.reset(); addDepending(EX); addDepending(EY); addDepending(VarMin); addDepending(VarMax); addDepending(DVar); return DL.elements(); } public void addDepending(final Expression E) { if (E != null) { final Enumeration e = E.getDepList().elements(); while (e.hasMoreElements()) { DL.add((ConstructionObject) e.nextElement()); } } } @Override public boolean hasUnit() { return false; } public double evaluateF(final double x[]) throws ConstructionException { int n = x.length; if (n > X.length) { n = X.length; } for (int i = 0; i < n; i++) { X[i] = x[i]; } for (int i = n; i < X.length; i++) { X[i] = 0; } try { return EY.getValue(); } catch (final Exception e) { throw new ConstructionException(""); } } public double evaluateF(final double x) throws ConstructionException { X[0] = x; for (int i = 1; i < X.length; i++) { X[i] = 0; } try { return EY.getValue(); } catch (final Exception e) { throw new ConstructionException(""); } } @Override public int getDistance(final PointObject P) { double varmin, varmax, dvar; try { varmin = VarMin.getValue(); varmax = VarMax.getValue(); dvar = DVar.getValue(); if (varmin > varmax) { final double h = varmin; varmin = varmax; varmax = h; } if (dvar < 0) { dvar = -dvar; } if (dvar == 0) { dvar = (varmax - varmin) / 100; } else if (dvar < (varmax - varmin) / 1000) { dvar = (varmax - varmin) / 1000; } } catch (final Exception e) { Valid = false; return Integer.MAX_VALUE; } try { // if it's a cartesian function, try to calculate the "real" coords // : if ((getEX().equals("x"))) { double x = (P.getX() < varmin) ? varmin : P.getX(); x = (P.getX() > varmax) ? varmax : x; final double y = evaluateF(x); final double dd = Math.sqrt((P.getX() - x) * (P.getX() - x) + (P.getY() - y) * (P.getY() - y)); return (int) Math.round(dd * Cn.getPixel()); } } catch (final Exception e) { } try { // if it's a parmetric curve and function is just plot with points : if ((!getEX().equals("x")) && (Special)) { if (P.haveBoundOrder()) { X[0] = P.getBoundOrder(); final double dd = Math.sqrt((P.getX() - EX.getValue()) * (P.getX() - EX.getValue()) + (P.getY() - EY.getValue()) * (P.getY() - EY.getValue())); return (int) Math.round(dd * Cn.getPixel()); } else { Coordinates CS; final Enumeration e = V.elements(); double delta0 = 0, delta1 = 0, xx = 0, yy = 0; int i = 0; if (e.hasMoreElements()) { CS = (Coordinates) e.nextElement(); delta0 = Math.abs(CS.X - P.getX()) + Math.abs(CS.Y - P.getY()); xx = CS.X; yy = CS.Y; } while (e.hasMoreElements()) { i++; CS = (Coordinates) e.nextElement(); delta1 = Math.abs(CS.X - P.getX()) + Math.abs(CS.Y - P.getY()); if (delta1 < delta0) { delta0 = delta1; xx = CS.X; yy = CS.Y; } } final double dd = Math.sqrt((P.getX() - xx) * (P.getX() - xx) + (P.getY() - yy) * (P.getY() - yy)); return (int) Math.round(dd * Cn.getPixel()); } } } catch (final Exception e) { Valid = false; return Integer.MAX_VALUE; } // Otherwise, at Least get the approx coordinates on the polygon : if (needsToRecompute()) { compute(); } final Enumeration e = V.elements(); double x = 0, y = 0, x0 = 0, y0 = 0, dmin = 0; boolean started = false; while (e.hasMoreElements()) { final Coordinates c = (Coordinates) e.nextElement(); final double x1 = c.X; final double y1 = c.Y; if (!started) { dmin = Math.sqrt((P.getX() - x1) * (P.getX() - x1) + (P.getY() - y1) * (P.getY() - y1)); x0 = x = x1; y0 = y = y1; started = true; } else { if (c.flag) { double h = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0); if (h < 1e-10) { h = 1e-10; } double g = (P.getX() - x0) * (x1 - x0) + (P.getY() - y0) * (y1 - y0); if (g < 0) { g = 0; } if (g > h) { g = h; } final double x2 = x0 + g / h * (x1 - x0), y2 = y0 + g / h * (y1 - y0); final double d = Math.sqrt((P.getX() - x2) * (P.getX() - x2) + (P.getY() - y2) * (P.getY() - y2)); if (d < dmin) { dmin = d; x = x2; y = y2; } } x0 = x1; y0 = y1; } } if (started) { P.Valid = true; final double dd = Math.sqrt((P.getX() - x) * (P.getX() - x) + (P.getY() - y) * (P.getY() - y)); return (int) Math.round(dd * Cn.getPixel()); } else { P.Valid = false; } return Integer.MAX_VALUE; } public void project(final PointObject P) { double varmin, varmax, dvar; try { varmin = VarMin.getValue(); varmax = VarMax.getValue(); dvar = DVar.getValue(); if (varmin > varmax) { final double h = varmin; varmin = varmax; varmax = h; } if (dvar < 0) { dvar = -dvar; } if (dvar == 0) { dvar = (varmax - varmin) / 100; } else if (dvar < (varmax - varmin) / 1000) { dvar = (varmax - varmin) / 1000; } } catch (final Exception e) { Valid = false; return; } try { // if P is a PointOn (a parmetric curve) and function is just plot // with points : if ((!getEX().equals("x")) && (P.isPointOnOrMagnet()) && (Special)) { if (P.haveBoundOrder()) { X[0] = P.getBoundOrder(); P.setXY(EX.getValue(), EY.getValue()); return; } else { Coordinates CS; final Enumeration e = V.elements(); double delta0 = 0, delta1 = 0, xx = 0, yy = 0; int i = 0, k = 0; if (e.hasMoreElements()) { CS = (Coordinates) e.nextElement(); delta0 = Math.abs(CS.X - P.getX()) + Math.abs(CS.Y - P.getY()); xx = CS.X; yy = CS.Y; } while (e.hasMoreElements()) { i++; CS = (Coordinates) e.nextElement(); delta1 = Math.abs(CS.X - P.getX()) + Math.abs(CS.Y - P.getY()); if (delta1 < delta0) { k = i; delta0 = delta1; xx = CS.X; yy = CS.Y; } } P.setXY(xx, yy); P.setBoundOrder(varmin + k * dvar); return; } } } catch (final Exception e) { Valid = false; return; } try { // if P is a PointOn (a cartesian function), try to calculate the // "real" coords : if ((P.isPointOnOrMagnet()) && (getEX().equals("x"))) { double x = (P.getX() < varmin) ? varmin : P.getX(); x = (P.getX() > varmax) ? varmax : x; final double y = evaluateF(x); P.move(x, y); return; } } catch (final Exception e) { } // Otherwise, at Least get the approx coordinates on the polygon : if (needsToRecompute()) { compute(); } final Enumeration e = V.elements(); double x = 0, y = 0, x0 = 0, y0 = 0, dmin = 0; boolean started = false; while (e.hasMoreElements()) { final Coordinates c = (Coordinates) e.nextElement(); final double x1 = c.X; final double y1 = c.Y; if (!started) { dmin = Math.sqrt((P.getX() - x1) * (P.getX() - x1) + (P.getY() - y1) * (P.getY() - y1)); x0 = x = x1; y0 = y = y1; started = true; } else { if (c.flag) { double h = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0); if (h < 1e-10) { h = 1e-10; } double g = (P.getX() - x0) * (x1 - x0) + (P.getY() - y0) * (y1 - y0); if (g < 0) { g = 0; } if (g > h) { g = h; } final double x2 = x0 + g / h * (x1 - x0), y2 = y0 + g / h * (y1 - y0); final double d = Math.sqrt((P.getX() - x2) * (P.getX() - x2) + (P.getY() - y2) * (P.getY() - y2)); if (d < dmin) { dmin = d; x = x2; y = y2; } } x0 = x1; y0 = y1; } } if (started) { P.setXY(x, y); P.Valid = true; } else { P.Valid = false; } } public double getSum() { double varmin, varmax, dvar; boolean reverse = false; final boolean parametric = !getEX().equals(getVar()); try { varmin = VarMin.getValue(); varmax = VarMax.getValue(); dvar = DVar.getValue(); if (varmin > varmax) { final double h = varmin; varmin = varmax; varmax = h; reverse = true; } if (dvar < 0) { dvar = -dvar; } if (dvar == 0) { dvar = (varmax - varmin) / 100; } else if (dvar < (varmax - varmin) / 1000) { dvar = (varmax - varmin) / 1000; } } catch (final Exception e) { Valid = false; return 0; } X[0] = varmin; double x0 = 0, y0 = 0; boolean started = false; double sum = 0; while (true) { try { final double x1 = EX.getValue(); final double y1 = EY.getValue(); if (parametric) { double x = 0, y = 0; if (getCenter() != null) { x = getCenter().getX(); y = getCenter().getY(); } if (started) { sum += ((x0 - x) * (y1 - y) - (y0 - y) * (x1 - x)) / 2; } } else { if (started) { if (Special) { if (reverse) { sum += (x1 - x0) * y1; } else { sum += (x1 - x0) * y0; } } else { sum += (x1 - x0) * (y0 + y1) / 2; } } } x0 = x1; y0 = y1; started = true; } catch (final Exception e) { } if (X[0] >= varmax) { break; } X[0] = X[0] + dvar; if (X[0] > varmax) { X[0] = varmax; } } return sum; } public double getLength() { double varmin, varmax, dvar; try { varmin = VarMin.getValue(); varmax = VarMax.getValue(); dvar = DVar.getValue(); if (varmin > varmax) { final double h = varmin; varmin = varmax; varmax = h; } if (dvar < 0) { dvar = -dvar; } if (dvar == 0) { dvar = (varmax - varmin) / 100; } else if (dvar < (varmax - varmin) / 1000) { dvar = (varmax - varmin) / 1000; } } catch (final Exception e) { Valid = false; return 0; } X[0] = varmin; double x0 = 0, y0 = 0; boolean started = false; double sum = 0; while (true) { try { final double x1 = EX.getValue(); final double y1 = EY.getValue(); if (started) { sum += Math.sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0)); } started = true; x0 = x1; y0 = y1; } catch (final Exception e) { } if (X[0] >= varmax) { break; } X[0] = X[0] + dvar; if (X[0] > varmax) { X[0] = varmax; } } return sum; } @Override public boolean isSpecial() { return Special; } @Override public void setSpecial(final boolean f) { Special = f; } public void project(final PointObject P, final double alpha) { project(P); } @Override public boolean maybeTransparent() { return true; } @Override public boolean canDisplayName() { return false; } public void setCenter(final String s) { if (Cn == null) { return; } Center = new Expression("@\"" + s + "\"", Cn, this); } @Override public boolean isFilledForSelect() { return false; } public PointObject getCenter() { try { return (PointObject) Center.getObject(); } catch (final Exception e) { return null; } } public String getVar() { String vars = Var[0]; for (int i = 1; i < Var.length; i++) { vars = vars + " " + Var[i]; } return vars; } public boolean canInteresectWith(final ConstructionObject o) { return true; } @Override public boolean isDriverObject() { return true; } public boolean somethingChanged() { boolean b = !EX.toString().equals(LASTEX); b = b || !EY.toString().equals(LASTEY); return b; } public void clearChanges() { LASTEX = EX.toString(); LASTEY = EY.toString(); } public void repulse(final PointObject P) { project(P); } } ./src/rene/zirkel/objects/CVS/RevisionCache/Circle3Object.java#1.40000644000175000017500000000462211314640412023343 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: Circle3Object.java import java.util.Enumeration; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.InvalidException; public class Circle3Object extends PrimitiveCircleObject { protected PointObject P1, P2; public Circle3Object(final Construction c, final PointObject p1, final PointObject p2, final PointObject p3) { super(c, p3); P1 = p1; P2 = p2; validate(); updateText(); } @Override public String getTag() { return "Circle3"; } @Override public void updateText() { setText(text3(Zirkel.name("text.circle3"), M.getName(), P1.getName(), P2.getName())); } @Override public void validate() { super.validate(); if (!M.valid() || !P1.valid() || !P2.valid()) { Valid = false; return; } else { Valid = true; X = M.getX(); Y = M.getY(); // compute normalized vector in the direction of the line: final double DX = P2.getX() - P1.getX(), DY = P2.getY() - P1.getY(); R = Math.sqrt(DX * DX + DY * DY); if (R < 0) { R = 0; } } } @Override public void printArgs(final XmlWriter xml) { xml.printArg("from", P1.getName()); xml.printArg("to", P2.getName()); super.printArgs(xml); } @Override public double getValue() throws ConstructionException { if (!Valid) throw new InvalidException("exception.invalid"); else return R; } @Override public Enumeration depending() { super.depending(); return depset(P1, P2); } @Override public void translate() { P1 = (PointObject) P1.getTranslation(); P2 = (PointObject) P2.getTranslation(); super.translate(); } } ./src/rene/zirkel/objects/CVS/RevisionCache/AxisObject.java#1.40000644000175000017500000000667411314640406022777 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: SegmentObject.java import java.util.Enumeration; import rene.util.xml.XmlWriter; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.graphics.MyGraphics; public class AxisObject extends PrimitiveLineObject { public AxisObject(final Construction c, final boolean xaxis) { super(c, (xaxis) ? "xAxis" : "yAxis"); X1 = 0; Y1 = 0; if (xaxis) { DX = 1; DY = 0; } else { DX = 0; DY = 1; } updateText(); } @Override public void setName() { // if (DX==1) { // Name="xaxis"+getN(); // } else { // Name="yaxis"+getN(); // } // } @Override public boolean nearto(final int c, final int r, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } if (!zc.showGrid()) { return false; } // compute point at c,r final double x = zc.x(c), y = zc.y(r); // compute distance from x,y final double d = (x - X1) * DY - (y - Y1) * DX; // scale in screen coordinates Value = Math.abs(zc.col(zc.minX() + d) - zc.col(zc.minX())); return Value < zc.selectionSize() * 2; } // public static Coordinates intersect(PrimitiveLineObject l, FunctionObject // q) { // // // // return new Coordinates(0, 0); // } // public String getTag() { // return "Axis"; // } @Override public void printArgs(final XmlWriter xml) { if (DX == 1) { xml.printArg("xaxis", "true"); } else { xml.printArg("yaxis", "true"); } } @Override public Enumeration depending() { DL.reset(); return DL.elements(); } public double getLength() { return 0; } @Override public void translate() { P1 = (PointObject) P1.getTranslation(); } @Override public boolean contains(final PointObject p) { return false; } @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) { return; } // if (isStrongSelected()&&g instanceof MyGraphics13) { // ((MyGraphics13) // g).drawMarkerLine(zc.col(-5),zc.row(1),zc.col(5),zc.row(1)); // } if (zc.showGrid()) { if (indicated()) { g.setColor(this); if (DX == 1) { g.drawLine(0, zc.row(0), zc.IW, zc.row(0), this); } else { g.drawLine(zc.col(0), 0, zc.col(0), zc.IH, this); } } } } @Override public void updateText() { if (DX == 1) { setText("X axis"); } else { setText("Y axis"); } } public void dragTo(final double x, final double y) { } @Override public void move(final double x, final double y) { } public boolean moveable() { return false; } double x1, y1, x2, y2, x3, y3; public void startDrag(final double x, final double y) { } @Override public void snap(final ZirkelCanvas zc) { } public double getOldX() { return 0; } public double getOldY() { return 0; } } ./src/rene/zirkel/objects/CVS/RevisionCache/FixedCircleObject.java#1.40000644000175000017500000001365511302741221024243 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: CircleObject.java import java.awt.Frame; import java.util.Enumeration; import rene.dialogs.Warning; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.dialogs.CircleEditDialog; import rene.zirkel.dialogs.EditConditionals; import rene.zirkel.dialogs.ObjectEditDialog; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; public class FixedCircleObject extends PrimitiveCircleObject implements MoveableObject, SimulationObject { Expression E; boolean EditAborted = false; boolean Dragable = false; public FixedCircleObject(final Construction c, final PointObject p1, final double x, final double y) { super(c, p1); init(c, x, y); } public void init(final Construction c, final double x, final double y) { E = new Expression("" + Math.sqrt((x - M.getX()) * (x - M.getX()) + (y - M.getY()) * (y - M.getY())), c, this); validate(); updateText(); } @Override public String getTag() { return "Circle"; } @Override public void updateText() { if (E == null || !E.isValid()) { return; } setText(text2(Zirkel.name("text.fixedcircle"), M.getName(), "" + E.toString())); } @Override public void validate() { super.validate(); if (!M.valid()) { Valid = false; return; } Valid = true; X = M.getX(); Y = M.getY(); if (E != null && !E.isValid()) { return; } try { if (E != null) { R = E.getValue(); } } catch (final Exception e) { R = 0; Valid = false; } if (R < -1e-10) { Valid = false; return; } } @Override public void printArgs(final XmlWriter xml) { if (E.isValid()) { xml.printArg("fixed", E.toString()); } else { xml.printArg("fixed", "" + R); } if (Dragable) { xml.printArg("dragable", "true"); } super.printArgs(xml); } @Override public boolean canFix() { return true; } @Override public boolean fixed() { return true; } @Override public void setFixed(final String s) { E = new Expression(s, getConstruction(), this); } @Override public void round() { try { setFixed(round(E.getValue(), ZirkelCanvas.LengthsFactor) + ""); validate(); } catch (final Exception e) { } } @Override public void edit(final ZirkelCanvas zc) { ObjectEditDialog d; if (!rene.zirkel.Zirkel.IsApplet) { eric.JGlobals.EditObject(this); return; } while (true) { d = new CircleEditDialog(zc.getFrame(), this, zc); d.setVisible(true); EditAborted = false; if (d.isAborted()) { // E=new // Expression(""+R,getConstruction(),this); EditAborted = true; break; } else if (!E.isValid()) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, E.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } else { break; } } validate(); updateText(); zc.getConstruction().updateCircleDep(); zc.repaint(); if (d.wantsMore()) { new EditConditionals(zc.getFrame(), this); validate(); } } @Override public boolean nearto(final int c, final int r, final ZirkelCanvas zc) { if (!Valid && M.valid()) { return M.nearto(c, r, zc); } return super.nearto(c, r, zc); } public boolean isValidFix() { return E.isValid(); } @Override public void translate() { super.translate(); try { setFixed(E.toString()); E.translate(); } catch (final Exception e) { } } @Override public String getStringLength() { return E.toString(); } @Override public double getValue() throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } else { return R; } } @Override public Enumeration depending() { super.depending(); final Enumeration e = E.getDepList().elements(); while (e.hasMoreElements()) { DL.add((ConstructionObject) e.nextElement()); } return DL.elements(); } @Override public void move(final double x, final double y) { init(getConstruction(), x, y); } public boolean moveable() { return Dragable || M.moveable(); } @Override public boolean isFixed() { return true; } public boolean isEditAborted() { return EditAborted; } @Override public boolean isDragable() { return Dragable; } @Override public void setDragable(final boolean f) { Dragable = f; } public boolean fixedByNumber() { return (E != null && E.isNumber()); } // For the simulate function: /** * Set the simulation value, remember the old value. */ public void setSimulationValue(final double x) { R = x; final Expression OldE = E; E = null; validate(); E = OldE; } /** * Reset the old value. */ public void resetSimulationValue() { validate(); } double x1, y1, x2, y2; public void startDrag(final double x, final double y) { x1 = M.getX(); y1 = M.getY(); x2 = x; y2 = y; } public void dragTo(final double x, final double y) { if (Dragable) { move(x, y); } else { M.move(x1 + (x - x2), y1 + (y - y2)); } } public double getOldX() { return 0; } public double getOldY() { return 0; } @Override public void snap(final ZirkelCanvas zc) { if (moveable() && !Dragable) { M.snap(zc); } } } ./src/rene/zirkel/objects/CVS/RevisionCache/TextObject.java#1.50000644000175000017500000002730411302741325023010 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: PointObject.java import java.awt.BorderLayout; import java.awt.Checkbox; import java.awt.Color; import java.awt.FontMetrics; import java.awt.Frame; import java.awt.TextArea; import java.awt.TextField; import java.awt.event.FocusEvent; import java.io.BufferedReader; import java.io.StringReader; import java.util.Enumeration; import java.util.Vector; import javax.swing.JPanel; import rene.gui.ButtonAction; import rene.gui.Global; import rene.gui.IconBar; import rene.gui.MyLabel; import rene.gui.MyPanel; import rene.gui.Panel3D; import rene.gui.TextFieldAction; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.Count; import rene.zirkel.dialogs.EditConditionals; import rene.zirkel.dialogs.HelpCloseDialog; import rene.zirkel.dialogs.ObjectEditDialog; import rene.zirkel.expression.Expression; import rene.zirkel.expression.ExpressionString; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; class TextObjectDialog extends HelpCloseDialog { /** * */ private static final long serialVersionUID = 1L; TextArea A; TextObject TO; boolean Settings = false; boolean More; public TextObjectDialog(final Frame f, final TextObject o) { super(f, Zirkel.name("edit.text.title"), true); TO = o; setLayout(new BorderLayout()); A = new TextArea(25, 60); A.setBackground(Global.Background); add("Center", new Panel3D(A)); A.setText(o.getLines()); final JPanel south = new MyPanel(); south.add(new ButtonAction(this, Global.name("edit.more"), "More")); south.add(new ButtonAction(this, Global.name("ok"), "OK")); south.add(new ButtonAction(this, Global.name("close"), "Close")); south.add(new ButtonAction(this, Global.name("edit.text.settings"), "Settings")); addHelp(south, "text"); add("South", new Panel3D(south)); pack(); center(f); } @Override public void doAction(final String o) { if (o.equals("OK") || o.equals("More")) { TO.setLines(A.getText()); More = o.equals("More"); doclose(); } if (o.equals("Settings")) { Settings = true; doAction("OK"); } else { super.doAction(o); } } public boolean wantSettings() { return Settings; } public boolean wantsMore() { return More; } } class TextEditDialog extends ObjectEditDialog { /** * */ private static final long serialVersionUID = 1L; TextField X, Y; Checkbox Fixed; IconBar TypeIB; public TextEditDialog(final Frame f, final TextObject o) { super(f, Zirkel.name("edit.text.title"), o); } @Override public void addFirst(final JPanel P) { final TextObject t = (TextObject) O; X = new TextFieldAction(this, "X", "" + t.getX(), 30); P.add(new MyLabel(Zirkel.name("edit.point.x"))); P.add(X); Y = new TextFieldAction(this, "Y", "" + t.getY(), 30); P.add(new MyLabel(Zirkel.name("edit.point.y"))); P.add(Y); Fixed = new Checkbox(""); Fixed.setState(t.fixed()); P.add(new MyLabel(Zirkel.name("edit.fixed"))); P.add(Fixed); if (t.fixed()) { X.setText(t.getEX()); Y.setText(t.getEY()); } } @Override public void doAction(final String o) { if ((o.equals("Y") || o.equals("X")) && Fixed != null) { Fixed.setState(true); super.doAction("OK"); } else { super.doAction(o); } } @Override public void setAction() { final TextObject t = (TextObject) O; if (Fixed != null && Fixed.getState() == true) { t.setFixed(X.getText(), Y.getText()); } else { try { final double x = new Expression(X.getText(), t .getConstruction(), t).getValue(); final double y = new Expression(Y.getText(), t .getConstruction(), t).getValue(); t.move(x, y); } catch (final Exception e) { } } if (Fixed != null && Fixed.getState() == false) { t.setFixed(false); } } @Override public void focusGained(final FocusEvent e) { if (Fixed != null && Fixed.getState()) { X.requestFocus(); } else { super.focusGained(e); } } @Override public boolean showsValue() { return false; } } public class TextObject extends ConstructionObject implements MoveableObject { protected double X, Y; Vector T; static Count N = new Count(); double C, R, W, H; protected Expression EX, EY; protected boolean Fixed; protected boolean DoShow; // for replays public TextObject(final Construction c, final double x, final double y) { super(c); X = x; Y = y; T = new Vector(); setColor(ColorIndex, SpecialColor); Valid = true; setLines(""); } @Override public void setDefaults() { // setShowName(Global.getParameter("options.text.shownames",false)); // setShowValue(Global.getParameter("options.text.showvalues",false)); setShowName(true); setShowValue(true); setColor(Global.getParameter("options.text.color", 0), Global .getParameter("options.text.pcolor", (Color) null)); setColorType(Global.getParameter("options.text.colortype", 0)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); setPartial(Cn.Partial); } @Override public void setTargetDefaults() { setShowName(true); setShowValue(true); setColor(Global.getParameter("options.text.color", 0), Global .getParameter("options.text.pcolor", (Color) null)); setColorType(Global.getParameter("options.text.colortype", 0)); } @Override public boolean nearto(final int x, final int y, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } return C <= x && R <= y && x <= C + W && y <= R + H; } @Override public String getTag() { return "Text"; } @Override public int getN() { return N.next(); } @Override public void updateText() { setText(getLines(), true); } @Override public void move(final double x, final double y) { X = x; Y = y; } @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { C = zc.col(X); R = zc.row(Y); if (mustHide(zc)) { return; } final boolean hidden = Hidden; if (DoShow) { Hidden = false; } g.setColor(this); setFont(g); if (DoShow) { Hidden = hidden; } FontMetrics fm = g.getFontMetrics(); W = H = fm.getHeight(); final Enumeration e = T.elements(); double r = R; while (e.hasMoreElements()) { String s = ((ExpressionString) e.nextElement()).evaluate(); boolean bold = false, large = false; if (s.startsWith("***")) { s = s.substring(3); bold = large = true; } else if (s.startsWith("**")) { s = s.substring(2); large = true; } else if (s.startsWith("*")) { s = s.substring(1); bold = true; } if (g instanceof MyGraphics13) { if (isStrongSelected()) { ((MyGraphics13) g).drawMarkerRect(C, r, 10, 10); g.setColor(this); } g.setFont(large, bold); r += ((MyGraphics13) g).drawStringExtended(s, C, r); W = Math.max(W, ((MyGraphics13) g).getW()); // W=Math.max(W, fm.stringWidth(s)); } else { g.setFont(large, bold); fm = g.getFontMetrics(); fm.getHeight(); g.drawString(AngleObject.translateToUnicode(s), C, r); r += H; } } H = r - R; } @Override public boolean mustHide(final ZirkelCanvas zc) { return super.mustHide(zc) && !(Valid && DoShow); } @Override public void validate() { Valid = true; if (Fixed && EX != null && EX.isValid()) { try { X = EX.getValue(); } catch (final Exception e) { Valid = false; return; } } if (Fixed && EY != null && EY.isValid()) { try { Y = EY.getValue(); } catch (final Exception e) { Valid = false; return; } } } @Override public String getLines() { String S = ""; final Enumeration e = T.elements(); while (e.hasMoreElements()) { final String s = ((ExpressionString) e.nextElement()).toString(); S = S + s; if (e.hasMoreElements()) { S = S + "\n"; } } return S; } @Override public void setLines(String o) { if (o.equals("")) o = ""; final Vector w = new Vector(); try { final BufferedReader in = new BufferedReader(new StringReader(o)); while (true) { final String s = in.readLine(); if (s == null) { break; } w.addElement(new ExpressionString(s, this)); } in.close(); } catch (final Exception e) { } T = w; updateText(); } @Override public String getDisplayValue() { return "(" + roundDisplay(X) + "," + roundDisplay(Y) + ")"; } @Override public double getX() { return X; } @Override public double getY() { return Y; } @Override public void edit(final ZirkelCanvas zc) { if (!rene.zirkel.Zirkel.IsApplet) { eric.JGlobals.EditObject(this); return; } final TextObjectDialog d = new TextObjectDialog(zc.getFrame(), this); d.setVisible(true); zc.repaint(); if (d.wantSettings()) { new TextEditDialog(zc.getFrame(), this).setVisible(true); zc.validate(); zc.repaint(); } if (d.wantsMore()) { new EditConditionals(zc.getFrame(), this); validate(); } } @Override public void printArgs(final XmlWriter xml) { if (Fixed && EX != null && EX.isValid()) { xml.printArg("x", EX.toString()); } else { xml.printArg("x", "" + X); } if (Fixed && EY != null && EY.isValid()) { xml.printArg("y", EY.toString()); } else { xml.printArg("y", "" + Y); } if (Fixed) { xml.printArg("fixed", "true"); } } public boolean moveable() { return !Fixed; } @Override public boolean fixed() { return Fixed; } @Override public void setFixed(final boolean flag) { Fixed = flag; if (!Fixed) { EX = EY = null; } updateText(); } @Override public void setFixed(final String x, final String y) { Fixed = true; EX = new Expression(x, getConstruction(), this); EY = new Expression(y, getConstruction(), this); updateText(); } @Override public String getEX() { if (EX != null) { return EX.toString(); } else { return "" + round(X); } } @Override public String getEY() { if (EY != null) { return EY.toString(); } else { return "" + round(Y); } } public void setDoShow(final boolean flag) { DoShow = flag; } @Override public void snap(final ZirkelCanvas zc) { final double d = zc.getGridSize() / 2; X = Math.round(X / d) * d; Y = Math.round(Y / d) * d; } @Override public void translate() { if (Fixed) { try { setFixed(EX.toString(), EY.toString()); EX.translate(); EY.translate(); } catch (final Exception e) { } } } @Override public Enumeration depending() { super.depending(); final Enumeration e = T.elements(); while (e.hasMoreElements()) { ((ExpressionString) e.nextElement()).addDep(this); } if (Fixed) { if (EX != null) { EX.addDep(this); } if (EY != null) { EY.addDep(this); } } return DL.elements(); } @Override public boolean canDisplayName() { return false; } double oldx, oldy, startx, starty; public void startDrag(final double x, final double y) { oldx = X; oldy = Y; startx = x; starty = y; } public void dragTo(final double x, final double y) { move(oldx + (x - startx), oldy + (y - starty)); } public double getOldX() { return oldx; } public double getOldY() { return oldy; } } ./src/rene/zirkel/objects/CVS/RevisionCache/EquationXYObject.java#1.30000644000175000017500000002475211133127434024135 0ustar yvesyves/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package rene.zirkel.objects; import java.util.Enumeration; import java.util.Vector; import rene.gui.Global; import rene.util.xml.XmlWriter; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.structures.Coordinates; /** * * @author erichake */ public class EquationXYObject extends ConstructionObject implements PointonObject { Vector V = new Vector(); // Number of horizontal divisions for the full zero search algorithm : int Dhor = 100; // canvas left,top,width,height : double Wl = 0, Wt = 0, Ww = 0, Wh = 0; Construction C; Expression EY = null; double X[] = { 0, 0 }; String Var[] = { "x", "y" }; public EquationXYObject(final Construction c, final String eq) { super(c); EY = new Expression(eq, c, this, Var); updateText(); C = c; } public EquationXYObject(final Construction c, final String eq, final int d) { this(c, eq); Dhor = d; } public int getDhor() { return Dhor; } public void setDhor(final int newDHor) { Dhor = newDHor; compute(); updateText(); } @Override public void setDefaults() { setShowName(Global.getParameter("options.locus.shownames", false)); setShowValue(Global.getParameter("options.locus.showvalues", false)); setColor(Global.getParameter("options.locus.color", 0)); setColorType(Global.getParameter("options.locus.colortype", 0)); setFilled(Global.getParameter("options.locus.filled", false)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.locus.shownames", false)); setShowValue(Global.getParameter("options.locus.showvalues", false)); setColor(Global.getParameter("options.locus.color", 0)); setColorType(Global.getParameter("options.locus.colortype", 0)); setFilled(Global.getParameter("options.locus.filled", false)); } public void setEquation(final String eq, final ZirkelCanvas zc) { EY = new Expression(eq, C, this, Var); compute(); updateText(); } public double getValue(final String var) throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } return (var.equals("x")) ? X[0] : X[1]; } public double evaluateF(final double x, final double y) throws ConstructionException { X[0] = x; X[1] = y; try { return EY.getValue(); } catch (final Exception e) { throw new ConstructionException(""); } } public void compute() { Wl = C.getX() - C.getW(); Wt = C.getY() - C.getH() / 2; Ww = 2 * C.getW(); Wh = C.getH(); searchZerosSegments(); } public void searchZerosSegments() { V.clear(); final double dx = Ww / Dhor; final double dy = dx * Math.sqrt(3) / 2; final int xn = Dhor + 2; final int yn = (int) (Wh / dy) + 1; final double[] x = new double[xn + 1]; final double[] y = new double[yn + 1]; final double[][] z = new double[xn + 1][yn + 1]; for (int i = 0; i <= xn; i++) { x[i] = Wl - dx + i * dx; } for (int j = 0; j <= yn; j++) { y[j] = Wt + j * dy; } for (int i = 0; i <= xn; i++) { for (int j = 0; j <= yn; j++) { xv[0] = x[i]; xv[1] = y[j]; if (j % 2 == 0) { xv[0] += dx / 2; } try { z[i][j] = evaluateF(xv[0], xv[1]); } catch (final Exception e) { z[i][j] = 0; } } } for (int i = 0; i <= xn - 1; i++) { for (int j = 0; j <= yn - 1; j++) { if (j % 2 == 0) { searchOneZerosSegment(V, x[i] + dx / 2, y[j], z[i][j], x[i], y[j + 1], z[i][j + 1], x[i + 1], y[j + 1], z[i + 1][j + 1]); searchOneZerosSegment(V, x[i] + dx / 2, y[j], z[i][j], x[i + 1] + dx / 2, y[j], z[i + 1][j], x[i + 1], y[j + 1], z[i + 1][j + 1]); } else { searchOneZerosSegment(V, x[i], y[j], z[i][j], x[i + 1], y[j], z[i + 1][j], x[i] + dx / 2, y[j + 1], z[i][j + 1]); searchOneZerosSegment(V, x[i + 1], y[j], z[i + 1][j], x[i + 1] - dx / 2, y[j + 1], z[i][j + 1], x[i + 1] + dx / 2, y[j + 1], z[i + 1][j + 1]); } } } } public void searchOneZerosSegment(final Vector v, final double x1, final double y1, final double z1, final double x2, final double y2, final double z2, final double x3, final double y3, final double z3) { if (z1 * z2 < 0) { double l1 = z2 / (z2 - z1); l1 = fix(x1, y1, z1, x2, y2, z2, l1); final double m1 = 1 - l1; if (z1 * z3 < 0) { double l2 = z3 / (z3 - z1); l2 = fix(x1, y1, z1, x3, y3, z3, l2); final double m2 = 1 - l2; v.add(new Coordinates(l1 * x1 + m1 * x2, l1 * y1 + m1 * y2, l2 * x1 + m2 * x3, l2 * y1 + m2 * y3)); } else { double l2 = z3 / (z3 - z2); l2 = fix(x2, y2, z2, x3, y3, z3, l2); final double m2 = 1 - l2; v.add(new Coordinates(l1 * x1 + m1 * x2, l1 * y1 + m1 * y2, l2 * x2 + m2 * x3, l2 * y2 + m2 * y3)); } } else if (z1 * z3 < 0) { double l1 = z3 / (z3 - z1); l1 = fix(x1, y1, z1, x3, y3, z3, l1); final double m1 = 1 - l1; double l2 = z3 / (z3 - z2); l2 = fix(x2, y2, z2, x3, y3, z3, l2); final double m2 = 1 - l2; v.add(new Coordinates(l1 * x1 + m1 * x3, l1 * y1 + m1 * y3, l2 * x2 + m2 * x3, l2 * y2 + m2 * y3)); } } double xv[] = new double[2]; public double fix(final double x1, final double y1, final double z1, final double x2, final double y2, final double z2, double l1) { try { final double z = evaluateF(x1 * l1 + x2 * (1 - l1), y1 * l1 + y2 * (1 - l1)); if (Math.abs(z) > (Math.abs(z1) + Math.abs(z2)) * 1e-5) { final double mu = 1 - l1, mu2 = mu * mu, mu3 = mu2 * mu, mu4 = mu3 * mu; final double h = Math.sqrt(mu4 * z2 * z2 + ((-2 * mu4 + 4 * mu3 - 2 * mu2) * z1 - 2 * mu2 * z) * z2 + (mu4 - 4 * mu3 + 6 * mu2 - 4 * mu + 1) * z1 * z1 + (-2 * mu2 + 4 * mu - 2) * z * z1 + z * z); final double h1 = (mu2 * z2 - mu2 * z1 + z1 - z + h) / (2 * (mu * z2 - mu * z1 + z1 - z)); final double h2 = (mu2 * z2 - mu2 * z1 + z1 - z - h) / (2 * (mu * z2 - mu * z1 + z1 - z)); if (h1 >= 0 && h1 <= 1) { l1 = 1 - h1; } else if (h2 >= 0 && h2 <= 1) { l1 = 1 - h2; } } } catch (final Exception e) { } return l1; } @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) { return; } Coordinates c1; g.setColor(this); final Enumeration e = V.elements(); while (e.hasMoreElements()) { c1 = (Coordinates) e.nextElement(); g.drawLine(zc.col(c1.X), zc.row(c1.Y), zc.col(c1.X1), zc.row(c1.Y1), this); } } @Override public boolean nearto(final int cc, final int rr, final ZirkelCanvas zc) { final Enumeration e = V.elements(); Coordinates c1; while (e.hasMoreElements()) { c1 = (Coordinates) e.nextElement(); if (((Math.abs(zc.col(c1.X) - cc) + Math.abs(zc.row(c1.Y) - rr)) < 5) || ((Math.abs(zc.col(c1.X1) - cc) + Math.abs(zc.row(c1.Y1) - rr)) < 5)) { return true; } } return false; } public void project(final PointObject P) { xx = P.getX(); yy = P.getY(); Coordinates c; double dd, dm = 0, xm1 = 0, ym1 = 0, zm1 = 0, xm2 = 0, ym2 = 0, zm2 = 0; // search the closer segment [M1M2] : final Enumeration e = V.elements(); if (e.hasMoreElements()) { c = (Coordinates) e.nextElement(); xm1 = c.X; ym1 = c.Y; xm2 = c.X1; ym2 = c.Y1; dm = Math.sqrt((c.X - xx) * (c.X - xx) + (c.Y - yy) * (c.Y - yy)) + Math.sqrt((c.X1 - xx) * (c.X1 - xx) + (c.Y1 - yy) * (c.Y1 - yy)) - Math.sqrt((c.X - c.X1) * (c.X - c.X1) + (c.Y - c.Y1) * (c.Y - c.Y1)); } else { return; } while (e.hasMoreElements()) { c = (Coordinates) e.nextElement(); dd = Math.sqrt((c.X - xx) * (c.X - xx) + (c.Y - yy) * (c.Y - yy)) + Math.sqrt((c.X1 - xx) * (c.X1 - xx) + (c.Y1 - yy) * (c.Y1 - yy)) - Math.sqrt((c.X - c.X1) * (c.X - c.X1) + (c.Y - c.Y1) * (c.Y - c.Y1)); if (dd < dm) { xm1 = c.X; ym1 = c.Y; xm2 = c.X1; ym2 = c.Y1; dm = dd; } } // coords du vecteur unitaire directeur de (M1M2) : double lg = Math.sqrt((xm2 - xm1) * (xm2 - xm1) + (ym2 - ym1) * (ym2 - ym1)); double dx = (xm2 - xm1) / lg; double dy = (ym2 - ym1) / lg; // coords du point H projeté ortho de P sur (M1M2) : final double h = (xx - xm1) * dx + (yy - ym1) * dy; final double xh = xm1 + h * dx; final double yh = ym1 + h * dy; // coords du vecteur unitaire directeur de (HP) : lg = Math.sqrt((xx - xh) * (xx - xh) + (yy - yh) * (yy - yh)); dx = (xx - xh) / lg; dy = (yy - yh) / lg; // ten pixel length : final double d10 = 10 / C.getPixel(); // Try to have a very accurate precision : try { xm1 = xh + d10 * dx; ym1 = yh + d10 * dy; zm1 = evaluateF(xm1, ym1); xm2 = xh - d10 * dx; ym2 = yh - d10 * dy; zm2 = evaluateF(xm2, ym2); if (zm1 * zm2 < 0) { findRootBetween(xm1, ym1, zm1, xm2, ym2, zm2); P.move(xx, yy); return; } } catch (final Exception ex) { } // If nothing found, then project on the segment (low precision) : P.move(xh, yh); } double xx, yy, zz; public void findRootBetween(final double x1, final double y1, final double z1, final double x2, final double y2, final double z2) { try { xx = (x1 + x2) / 2; yy = (y1 + y2) / 2; zz = evaluateF(xx, yy); if (Math.abs(zz) < 1e-10) { return; } if (zz * z1 < 0) { findRootBetween(x1, y1, z1, xx, yy, zz); } else { findRootBetween(xx, yy, zz, x2, y2, z2); } } catch (final Exception e) { } } public void project(final PointObject P, final double alpha) { project(P); } public boolean canInteresectWith(final ConstructionObject o) { return false; } @Override public String getEY() { if (EY != null) { return EY.toString(); } else { return "0"; } } @Override public String getDisplayValue() { return EY.toString(); } @Override public String getTag() { return "EqXY"; } @Override public void printArgs(final XmlWriter xml) { xml.printArg("f", EY.toString()); xml.printArg("Dhor", String.valueOf(Dhor)); } @Override public void updateText() { setText(getDisplayValue() + "=0"); } @Override public void edit(final ZirkelCanvas zc) { if (!rene.zirkel.Zirkel.IsApplet) { eric.JGlobals.EditObject(this); return; } } public void repulse(final PointObject P) { project(P); } } ./src/rene/zirkel/objects/CVS/RevisionCache/TwoPointLineObject.java#1.30000644000175000017500000000467011237036141024456 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: SegmentObject.java import java.util.Enumeration; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; public class TwoPointLineObject extends PrimitiveLineObject implements MoveableObject { protected PointObject P2; double X2, Y2, R; public TwoPointLineObject(final Construction c, final PointObject p1, final PointObject p2) { super(c); P1 = p1; P2 = p2; } public void setP1P2(final PointObject p1, final PointObject p2) { P1 = p1; P2 = p2; } public PointObject getP2() { return P2; } @Override public Enumeration depending() { super.depending(); return depset(P1, P2); } public double getLength() { return R; } @Override public void translate() { P1 = (PointObject) P1.getTranslation(); P2 = (PointObject) P2.getTranslation(); } @Override public boolean contains(final PointObject p) { return P1 == p || P2 == p; } @Override public Enumeration secondaryParams() { DL.reset(); return depset(P1, P2); } public void dragTo(final double x, final double y) { // System.out.println(getName()+" : dragTo !"); P1.move(x1 + (x - x3), y1 + (y - y3)); P2.move(x2 + (x - x3), y2 + (y - y3)); } @Override public void move(final double x, final double y) { } public boolean moveable() { if (P1.moveable() && P2.moveable()) return true; return false; } double x1, y1, x2, y2, x3, y3; public void startDrag(final double x, final double y) { x1 = P1.getX(); y1 = P1.getY(); x2 = P2.getX(); y2 = P2.getY(); x3 = x; y3 = y; } @Override public void snap(final ZirkelCanvas zc) { if (moveable()) { P1.snap(zc); P2.snap(zc); } } public double getOldX() { return 0; } public double getOldY() { return 0; } } ./src/rene/zirkel/objects/CVS/RevisionCache/PrimitiveCircleObject.java#1.40000644000175000017500000004473511155152057025170 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: PrimitiveCircleObject.java import java.awt.Color; import java.util.Enumeration; import rene.gui.Global; import rene.util.xml.XmlWriter; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.Count; import rene.zirkel.dialogs.CircleEditDialog; import rene.zirkel.dialogs.EditConditionals; import rene.zirkel.dialogs.ObjectEditDialog; import rene.zirkel.expression.Expression; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.structures.Coordinates; import eric.JGlobals; public class PrimitiveCircleObject extends ConstructionObject implements PointonObject, InsideObject { protected double X, Y, R; static Count N = new Count(); boolean Partial = false; PointObject Dep[]; // array for points, depending on the circle for partial // display int NDep; // number of points in Dep PointObject M; // The midpoint boolean Filled = false; Expression Start = null, End = null; // drawing range double A1, A2, A; boolean Arc = true; public PrimitiveCircleObject(final Construction c, final PointObject p) { super(c); setColor(ColorIndex, SpecialColor); M = p; Unit = Global.getParameter("unit.length", ""); } public void setMR(final PointObject p1, final double r) { M = p1; R = r; } @Override public void setDefaults() { setShowName(Global.getParameter("options.circle.shownames", false)); setShowValue(Global.getParameter("options.circle.showvalues", false)); setColor(Global.getParameter("options.circle.color", 0), Global .getParameter("options.circle.pcolor", (Color) null)); setColorType(Global.getParameter("options.circle.colortype", 0)); setFilled(Global.getParameter("options.circle.filled", false)); setSolid(Global.getParameter("options.circle.solid", false)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); // setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); setPartial(Cn.Partial); Cn.updateCircleDep(); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.circle.shownames", false)); setShowValue(Global.getParameter("options.circle.showvalues", false)); setColor(Global.getParameter("options.circle.color", 0), Global .getParameter("options.circle.pcolor", (Color) null)); setColorType(Global.getParameter("options.circle.colortype", 0)); setFilled(Global.getParameter("options.circle.filled", false)); setSolid(Global.getParameter("options.circle.solid", false)); } @Override public String getTag() { return "Circle"; } @Override public int getN() { return N.next(); } @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) return; final double c1 = zc.col(X - R), c2 = zc.col(X + R), r1 = zc.row(Y + R), r2 = zc .row(Y - R), r = (r2 - r1) / 2; double ssa = 1 / Math.sqrt(2), ssb = -ssa; // paint: if (!zc.showHidden() && Dep != null && NDep > 0 && Partial && !hasRange()) // partial display { // System.out.println("partial display"); for (int i = 0; i < NDep; i++) { if (!Dep[i].valid() || ((!zc.isPreview()) && (Dep[i].mustHide(zc)))) continue; double A = Math.atan2(Dep[i].getY() - Y, Dep[i].getX() - X); if (A < 0) A += 2 * Math.PI; final double a = A / Math.PI * 180; if (visible(zc)) { if (isStrongSelected() && g instanceof MyGraphics13) { ((MyGraphics13) g).drawMarkerArc((c1 + c2) / 2.0, (r1 + r2) / 2.0, r, a - 10, 20); } g.setColor(this); g.drawCircleArc(c1 + r, r1 + r, r, a - 10, 20, this); } if (i == 0) { final String s = getDisplayText(); if (!s.equals("")) { g.setLabelColor(this); DisplaysText = true; final double sx = Math.cos(A - 0.1); final double sy = Math.sin(A - 0.1); drawLabel(g, s, zc, X + sx * R, Y + sy * R, sy, -sx, XcOffset, YcOffset); } } } } else { if (hasRange()) // arc display { computeA1A2(); if (visible(zc)) { if (isStrongSelected() && g instanceof MyGraphics13) { ((MyGraphics13) g).drawMarkerArc((c1 + c2) / 2.0, (r1 + r2) / 2.0, r, A1 / Math.PI * 180, A / Math.PI * 180); } g.setColor(this); if (Filled) { g.fillArc(c1, r1, c2 - c1, r2 - r1, A1 / Math.PI * 180, A / Math.PI * 180, Selected || (getColorType() != THIN), getColorType() != THICK, Arc, this); } else if (visible(zc)) g.drawCircleArc(c1 + r, r1 + r, r, A1 / Math.PI * 180, A / Math.PI * 180, this); } ssa = Math.cos(A1 + A / 2); ssb = Math.sin(A1 + A / 2); } else if (Filled) { if (visible(zc)) { if (isStrongSelected() && g instanceof MyGraphics13) { ((MyGraphics13) g).drawMarkerArc((c1 + c2) / 2.0, (r1 + r2) / 2.0, r, 0, 360); } g.setColor(this); g.fillOval(c1, r1, c2 - c1, r2 - r1, Indicated || Selected || (getColorType() == NORMAL), getColorType() != THICK, this); } } else // full unfilled display { if (visible(zc)) { if (isStrongSelected() && g instanceof MyGraphics13) { ((MyGraphics13) g).drawMarkerArc((c1 + c2) / 2.0, (r1 + r2) / 2.0, r, 0, 360); } g.setColor(this); if (tracked()) zc.UniversalTrack.drawTrackCircle(this, c1 + r, r1 + r, r); g.drawCircle(c1 + r, r1 + r, r, this); } } final String s = getDisplayText(); if (!s.equals("")) { g.setLabelColor(this); DisplaysText = true; drawLabel(g, s, zc, X + ssa * R, Y + ssb * R, -ssa, ssb, XcOffset, YcOffset); } } } @Override public String getDisplayValue() { // return ""+round(R,ZirkelCanvas.LengthsFactor); return JGlobals.getLocaleNumber(R, "lengths"); } @Override public String getEquation() { return "(x" + helpDisplayNumber(false, -X) + ")^2+" + "(y" + helpDisplayNumber(false, -Y) + ")^2=" + helpDisplayNumber(true, R * R); } @Override public boolean nearto(final int c, final int r, final ZirkelCanvas zc) { return nearto(c, r, false, zc); } @Override public boolean nearto(final int c, final int r, final boolean ignorefill, final ZirkelCanvas zc) { if (!displays(zc)) return false; final double x = zc.x(c) - X, y = zc.y(r) - Y; if (!ignorefill && Filled) { final double d = Math.sqrt(x * x + y * y); if (d < R) Value = 0; return d < R; } else if (hasRange()) { computeA1A2(); double a = Math.atan2(y, x); if (a < 0) a += 2 * Math.PI; a -= A1; if (a < 0) a += 2 * Math.PI; final double d = Math.abs(Math.sqrt(x * x + y * y) - R); if (a <= A + 0.01) Value = Math.abs(zc.col(zc.minX() + d) - zc.col(zc.minX())); return Value < zc.selectionSize() && a <= A + 0.01; } // partial display: else if (!zc.showHidden() && NDep > 0 && Partial) { double d = Math.abs(Math.sqrt(x * x + y * y) - R); Value = Math.abs(zc.col(zc.minX() + d) - zc.col(zc.minX())); if (Math.abs(zc.col(zc.minX() + d) - zc.col(zc.minX())) >= zc .selectionSize()) return false; d = Math.PI / 18; double a = Math.atan2(y, x); if (a < 0) a += 2 * Math.PI; for (int i = 0; i < NDep; i++) { if (!Dep[i].valid() || Dep[i].mustHide(zc)) continue; double A = Math.atan2(Dep[i].getY() - Y, Dep[i].getX() - X); if (A < 0) A += 2 * Math.PI; double h = a - A; if (h > 2 * Math.PI) h -= 2 * Math.PI; if (h < -2 * Math.PI) h += 2 * Math.PI; if (Math.abs(h) < d) return true; } return false; } else { final double d = Math.abs(Math.sqrt(x * x + y * y) - R); Value = Math.abs(zc.col(zc.minX() + d) - zc.col(zc.minX())); return Math.abs(zc.col(zc.minX() + d) - zc.col(zc.minX())) < zc .selectionSize(); } } @Override public boolean onlynearto(final int c, final int r, final ZirkelCanvas zc) { if (R < zc.dx(3 * (int) zc.pointSize())) return true; if (hasRange()) { double A1 = Math .atan2(getStart().getY() - Y, getStart().getX() - X); if (A1 < 0) A1 += 2 * Math.PI; double A2 = Math.atan2(getEnd().getY() - Y, getEnd().getX() - X); if (A2 < 0) A2 += 2 * Math.PI; double A = A2 - A1; if (A >= 2 * Math.PI) A -= 2 * Math.PI; if (A < 0) A += 2 * Math.PI; if (!Obtuse && A > Math.PI) { A1 = A2; A = 2 * Math.PI - A; A2 = A1 + A; } if (A * R < zc.dx(6 * (int) zc.pointSize())) return true; } return false; } @Override public double getX() { return X; } @Override public double getY() { return Y; } @Override public double getR() { return R; } public static Coordinates intersect(final PrimitiveCircleObject c1, final PrimitiveCircleObject c2) { double dx = c2.X - c1.X, dy = c2.Y - c1.Y; final double r = Math.sqrt(dx * dx + dy * dy); if (r > c1.R + c2.R + 1e-10) return null; if (r <= 1e-10) return new Coordinates(c1.X, c1.Y, c1.X, c1.Y); final double l = (r * r + c1.R * c1.R - c2.R * c2.R) / (2 * r); dx /= r; dy /= r; final double x = c1.X + l * dx, y = c1.Y + l * dy; double h = c1.R * c1.R - l * l; if (h < -1e-10) return null; if (h < 0) h = 0; else h = Math.sqrt(h); return new Coordinates(x + h * dy, y - h * dx, x - h * dy, y + h * dx); } @Override public void edit(final ZirkelCanvas zc) { final ObjectEditDialog d = new CircleEditDialog(zc.getFrame(), this, zc); d.setVisible(true); zc.getConstruction().updateCircleDep(); zc.validate(); zc.repaint(); if (d.wantsMore()) { new EditConditionals(zc.getFrame(), this); validate(); } } @Override public boolean equals(final ConstructionObject o) { if (!(o instanceof PrimitiveCircleObject) || !o.valid()) return false; final PrimitiveCircleObject l = (PrimitiveCircleObject) o; return equals(X, l.X) && equals(Y, l.Y) && equals(R, l.R); } @Override public void setPartial(final boolean flag) { if (flag == Partial) return; Partial = flag; if (flag) // depending objects no longer needed { Dep = new PointObject[16]; NDep = 0; } else Dep = null; } /** * Add a point that depends on the circle. Dep is used for partial display. * * @param p */ public void addDep(final PointObject p) { if (!Partial || hasRange() || Dep == null || NDep >= Dep.length) return; Dep[NDep++] = p; } @Override public void clearCircleDep() { NDep = 0; } @Override public boolean isPartial() { return Partial; } @Override public void printArgs(final XmlWriter xml) { xml.printArg("midpoint", M.getName()); if (Partial) xml.printArg("partial", "true"); if (Filled) xml.printArg("filled", "true"); if (getStart() != null) xml.printArg("start", getStart().getName()); if (getEnd() != null) xml.printArg("end", getEnd().getName()); if (!Obtuse) xml.printArg("acute", "true"); if (!Arc) xml.printArg("chord", "true"); super.printArgs(xml); } /** * Need to setup the Dep array. */ @Override public ConstructionObject copy(final double x, final double y) { final PrimitiveCircleObject o = (PrimitiveCircleObject) super .copy(0, 0); if (o.Partial) { o.Dep = new PointObject[16]; o.NDep = 0; } else o.Dep = null; return o; } // public void setDefaults () // { super.setDefaults(); // setPartial(Cn.Partial); // } /** * A circle depends on its midpoint at least. Other circles depen on more * points! No circle depends on Start and End. */ @Override public Enumeration depending() { super.depending(); DL.add(M); return DL.elements(); } /** * A circle will mark the midpoint as secondary parameter. */ @Override public Enumeration secondaryParams() { DL.reset(); return depset(M); } @Override public void toggleHidden() { if (Hidden) { Hidden = false; } else { if (Partial) { setPartial(false); Hidden = true; } else setPartial(true); } } public PointObject getP1() { return M; } @Override public void setFilled(final boolean flag) { Filled = flag; } @Override public boolean isFilled() { return Filled; } @Override public boolean isFilledForSelect() { return Filled; } @Override public void translate() { M = (PointObject) M.getTranslation(); if (hasRange()) { setRange(getStart().getName(), getEnd().getName()); Start.translate(); End.translate(); } } public boolean setRange(final String s1, final String s2) { try { Start = new Expression("@\"" + s1 + "\"", Cn, this); End = new Expression("@\"" + s2 + "\"", Cn, this); return hasRange(); } catch (final Exception e) { Start = End = null; } return false; } public PointObject getStart() { return getPointObject(Start); } public PointObject getEnd() { return getPointObject(End); } public String getStartString() { String s = ""; if (Start != null) s = Start.toString(); if (s.startsWith("@")) s = s.substring(1); return s; } public String getEndString() { String s = ""; if (End != null) s = End.toString(); if (s.startsWith("@")) s = s.substring(1); return s; } public double getA1() { return A1; } public double getA2() { return A2; } public boolean hasRange() { return getStart() != null && getEnd() != null; } public void clearRange() { Start = End = null; } @Override public boolean maybeTransparent() { return true; } @Override public boolean locallyLike(final ConstructionObject o) { if (!(o instanceof PrimitiveCircleObject)) return false; return (equals(X, ((PrimitiveCircleObject) o).X) && equals(Y, ((PrimitiveCircleObject) o).Y) && equals(R, ((PrimitiveCircleObject) o).R)); } public boolean getArc() { return Arc; } public void setArc(final boolean flag) { Arc = flag; } public void computeA1A2() { A1 = Math.atan2(getStart().getY() - Y, getStart().getX() - X); if (A1 < 0) A1 += 2 * Math.PI; A2 = Math.atan2(getEnd().getY() - Y, getEnd().getX() - X); if (A2 < 0) A2 += 2 * Math.PI; if (A2 < A1) A2 += 2 * Math.PI; A = A2 - A1; if (!Obtuse && A > Math.PI + 1e-10) { A1 = A2; if (A1 >= 2 * Math.PI) A1 -= 2 * Math.PI; A = 2 * Math.PI - A; A2 = A1 + A; } if (Partial) { A1 -= 10 / 180.0 * Math.PI; A += 20 / 180.0 * Math.PI; } } /** * Test, if the projection of (x,y) to the arc contains that point. */ public boolean contains(final double x, final double y) { if (!hasRange()) return true; computeA1A2(); double a = Math.atan2(y - Y, x - X); if (a < 0) a += 2 * Math.PI; double d = a - A1; if (d < 0) d += 2 * Math.PI; return d < A + 0.0001; } public void project(final PointObject P) { final double dx = P.getX() - getX(), dy = P.getY() - getY(); final double r = Math.sqrt(dx * dx + dy * dy); double X = 0, Y = 0; if (r < 1e-10) { X = getX() + getR(); Y = getY(); } else { X = getX() + dx / r * getR(); Y = getY() + dy / r * getR(); } double Alpha = Math.atan2(P.getY() - getY(), P.getX() - getX()); if (hasRange() && getStart() != P && getEnd() != P) { if (Alpha < 0) Alpha += 2 * Math.PI; computeA1A2(); final double a1 = getA1(), a2 = getA2(); if (Alpha < a1) Alpha += 2 * Math.PI; if (Alpha > a2) { if (2 * Math.PI - (Alpha - a1) < Alpha - a2) Alpha = a1; else Alpha = a2; } X = getX() + getR() * Math.cos(Alpha); Y = getY() + getR() * Math.sin(Alpha); } P.setXY(X, Y); P.setA(Alpha); } @Override public int getDistance(final PointObject P) { final double dx = P.getX() - getX(), dy = P.getY() - getY(); final double r = Math.sqrt(dx * dx + dy * dy); double X = 0, Y = 0; if (r < 1e-10) { X = getX() + getR(); Y = getY(); } else { X = getX() + dx / r * getR(); Y = getY() + dy / r * getR(); } double Alpha = Math.atan2(P.getY() - getY(), P.getX() - getX()); if (hasRange() && getStart() != P && getEnd() != P) { if (Alpha < 0) Alpha += 2 * Math.PI; computeA1A2(); final double a1 = getA1(), a2 = getA2(); if (Alpha < a1) Alpha += 2 * Math.PI; if (Alpha > a2) { if (2 * Math.PI - (Alpha - a1) < Alpha - a2) Alpha = a1; else Alpha = a2; } X = getX() + getR() * Math.cos(Alpha); Y = getY() + getR() * Math.sin(Alpha); } final double d = Math.sqrt((P.getX() - X) * (P.getX() - X) + (P.getY() - Y) * (P.getY() - Y)); return (int) Math.round(d * Cn.getPixel()); } public void project(final PointObject P, final double alpha) { final double dx = P.getX() - getX(), dy = P.getY() - getY(); final double r = Math.sqrt(dx * dx + dy * dy); double X = 0, Y = 0; if (r < 1e-10) { X = getX() + getR(); Y = getY(); } else { X = getX() + dx / r * getR(); Y = getY() + dy / r * getR(); } if (hasRange() && getStart() != P && getEnd() != P) { double Alpha = P.getAlpha(); if (Alpha < 0) Alpha += 2 * Math.PI; if (Alpha >= 2 * Math.PI) Alpha -= 2 * Math.PI; computeA1A2(); final double a1 = getA1(), a2 = getA2(); if (Alpha < a1) Alpha += 2 * Math.PI; if (Alpha > a2) { if (2 * Math.PI - (Alpha - a1) < Alpha - a2) Alpha = a1; else Alpha = a2; } P.setA(Alpha); X = getX() + getR() * Math.cos(Alpha); Y = getY() + getR() * Math.sin(Alpha); } else { X = getX() + getR() * Math.cos(alpha); Y = getY() + getR() * Math.sin(alpha); } P.setXY(X, Y); } public double containsInside(final PointObject P) { final double dx = P.getX() - X, dy = P.getY() - Y; final double r = Math.sqrt(dx * dx + dy * dy); if (r < R * (1 - 1e-10)) return 1; if (r < R * (1 + 1e-10)) return 0.5; return 0; } public boolean keepInside(final PointObject P) { final double dx = P.getX() - X, dy = P.getY() - Y; final double r = Math.sqrt(dx * dx + dy * dy); double f = 1; if (Filled && ColorType == THIN) f = 0.9999; if (r < R * f || R < 1e-10) return true; P.setXY(X + dx / r * (R * f), Y + dy / r * (R * f)); return false; } public boolean canInteresectWith(final ConstructionObject o) { return true; } public void repulse(final PointObject P) { project(P); } } ./src/rene/zirkel/objects/CVS/RevisionCache/FunctionObject.java#1.50000644000175000017500000010661211155150614023652 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: Functionbject.java import java.awt.Checkbox; import java.awt.Color; import java.awt.Frame; import java.awt.TextField; import java.awt.event.FocusEvent; import java.util.Enumeration; import java.util.StringTokenizer; import java.util.Vector; import javax.swing.JPanel; import rene.dialogs.Warning; import rene.gui.ButtonAction; import rene.gui.Global; import rene.gui.IconBar; import rene.gui.MyLabel; import rene.gui.TextFieldAction; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.dialogs.EditConditionals; import rene.zirkel.dialogs.ObjectEditDialog; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.FunctionPolygonFiller; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.PolygonDrawer; import rene.zirkel.structures.Coordinates; class CurveEditDialog extends ObjectEditDialog { /** * */ private static final long serialVersionUID = 1L; TextField VarMin, VarMax, DVar, Var, EX, EY; IconBar IC, TypeIB; ZirkelCanvas ZC; Checkbox Special; public CurveEditDialog(final ZirkelCanvas zc, final FunctionObject o) { super(zc.getFrame(), Zirkel.name("edit.function.title"), o, "function"); ZC = zc; } @Override public void addFirst(final JPanel P) { final FunctionObject f = (FunctionObject) O; VarMin = new TextFieldAction(this, "varmin", "" + f.VarMin, 30); P.add(new MyLabel(Zirkel.name("function.varmin"))); P.add(VarMin); VarMax = new TextFieldAction(this, "varmax", "" + f.VarMax, 30); P.add(new MyLabel(Zirkel.name("function.varmax"))); P.add(VarMax); DVar = new TextFieldAction(this, "dvar", "" + f.DVar, 30); P.add(new MyLabel(Zirkel.name("function.dvar"))); P.add(DVar); Var = new TextFieldAction(this, "var", "" + f.getVar(), 30); P.add(new MyLabel(Zirkel.name("function.var"))); P.add(Var); String ex = f.getEX(); if (ex.equals(f.Var)) { ex = ""; } EX = new TextFieldAction(this, "ex", "" + ex, 30); P.add(new MyLabel(Zirkel.name("function.x"))); P.add(EX); EY = new TextFieldAction(this, "ey", "" + f.getEY(), 30); P.add(new MyLabel(Zirkel.name("function.y"))); P.add(EY); } @Override public void addSecond(final JPanel P) { final FunctionObject Func = (FunctionObject) O; IC = new IconBar(F); IC.setIconBarListener(this); IC.addOnOffLeft("filled"); IC.setState("filled", Func.isFilled()); IC.setIconBarListener(this); P.add(new MyLabel("")); P.add(IC); TypeIB = new IconBar(F); TypeIB.addToggleGroupLeft("type", 6); TypeIB.toggle("type", Func.getType()); P.add(new MyLabel("")); P.add(TypeIB); P.add(new MyLabel(Zirkel.name("edit.discrete"))); P.add(Special = new Checkbox()); Special.setState(Func.isSpecial()); } @Override public void addButton(final JPanel P) { final FunctionObject f = (FunctionObject) O; if (!f.Var.equals(f.EX)) { if (f.Center == null) { P.add(new ButtonAction(this, Zirkel .name("edit.function.center"), "SetCenter")); } else { P.add(new ButtonAction(this, Zirkel.name("edit.function.free"), "SetFree")); } P.add(new MyLabel(" ")); } } @Override public void iconPressed(final String o) { if (o.equals("filled")) { if (IC.getState("filled")) { IB.setState("isback", true); ThicknessIB.setEnabled("solid", true); } else { IB.setState("isback", false); ThicknessIB.setState("solid", false); ThicknessIB.setEnabled("solid", false); } } super.iconPressed(o); } @Override public void setAction() { final FunctionObject f = (FunctionObject) O; f.setExpressions(Var.getText(), EX.getText(), EY.getText()); f.setRange(VarMin.getText(), VarMax.getText(), DVar.getText()); f.setFilled(IC.getState("filled")); f.setType(TypeIB.getToggleState("type")); f.setSpecial(Special.getState()); } @Override public void doAction(final String o) { if (o.equals("SetCenter")) { ZC.setCurveCenter((FunctionObject) O); super.doAction("OK"); } else if (o.equals("SetFree")) { ((FunctionObject) O).Center = null; super.doAction("OK"); } else { super.doAction(o); } } @Override public void focusGained(final FocusEvent e) { VarMin.requestFocus(); } } /** * @author Rene * * Function objects are parametric or cartesian curves. For parametric * functions, depending on a parameter t , x(t) and y(t) are computed * and drawn on the screen. For cartesian functions, the parameter x * will be used. * */ public class FunctionObject extends ConstructionObject implements PointonObject, HeavyObject, DriverObject, Evaluator { Expression EX = null, EY = null; public Expression VarMin = null, VarMax = null, DVar = null; String LASTEX = "", LASTEY = "", LASTVarMin = "", LASTVarMax = "", LASTDVar = ""; double X[] = { 0 }; public String Var[] = { "x" }; boolean Filled = false; Expression Center = null; protected int Type = 0; public final static int SQUARE = 0, DIAMOND = 1, CIRCLE = 2, DOT = 3, CROSS = 4, DCROSS = 5; protected boolean Special = false; // Vector RefreshList=new Vector(); public Vector V = new Vector(); double cx, cy, ww, wh; // this is a main object list which tells if the object needs to recompute : Vector DriverObjectList = new Vector(); double c0, r0, c, r; /** * Functions are HeavyObjects which means we always must see if it really * neads to recompute. Computing a function can be time consuming, but once * it's computed, the paint method is fast enough. * * @param c */ public FunctionObject(final Construction c) { super(c); VarMin = new Expression("windowcx-windoww", c, this); VarMax = new Expression("windowcx+windoww", c, this); DVar = new Expression("0", c, this); validate(); updateText(); cx = c.getX(); cy = c.getY(); ww = c.getW(); wh = c.getH(); Type = CROSS; } @Override public void setDefaults() { setShowName(Global.getParameter("options.locus.shownames", false)); setShowValue(Global.getParameter("options.locus.showvalues", false)); setColor(Global.getParameter("options.locus.color", 0), Global .getParameter("options.locus.pcolor", (Color) null)); setColorType(Global.getParameter("options.locus.colortype", 0)); setFilled(Global.getParameter("options.locus.filled", false)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.locus.shownames", false)); setShowValue(Global.getParameter("options.locus.showvalues", false)); setColor(Global.getParameter("options.locus.color", 0), Global .getParameter("options.locus.pcolor", (Color) null)); setColorType(Global.getParameter("options.locus.colortype", 0)); setFilled(Global.getParameter("options.locus.filled", false)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); } /** * In order to see if the function must be recomputed or not, we have to * register, in the DriverObjectList, all objects the function depends on. * There are many possibilities for an object to be in this list : if it's * used in the def of the function, if it's in the min or max text box, * etc... * * @param c */ public void searchDependencies(final Construction c) { DriverObjectList.clear(); if (RekValidating) { return; } // should not happen! RekValidating = true; Enumeration e = c.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setRekFlag(false); } final ConstructionObject oEX[] = EX.getDepList().getArray(); final ConstructionObject oEY[] = EY.getDepList().getArray(); final ConstructionObject oVarMin[] = VarMin.getDepList().getArray(); final ConstructionObject oVarMax[] = VarMax.getDepList().getArray(); final ConstructionObject oDVar[] = DVar.getDepList().getArray(); for (final ConstructionObject element : oEX) { recursiveSearchDependencies((ConstructionObject) element); } for (final ConstructionObject element : oEY) { recursiveSearchDependencies((ConstructionObject) element); } for (final ConstructionObject element : oVarMin) { recursiveSearchDependencies((ConstructionObject) element); } for (final ConstructionObject element : oVarMax) { recursiveSearchDependencies((ConstructionObject) element); } for (final ConstructionObject element : oDVar) { recursiveSearchDependencies((ConstructionObject) element); } e = c.elements(); while (e.hasMoreElements()) { final ConstructionObject oc = (ConstructionObject) e.nextElement(); if ((oc.isRekFlag()) && (oc.isDriverObject())) { DriverObjectList.addElement(oc); } } RekValidating = false; NeedsRecompute = true; } /** * Recursive method called by the searchDependencies method * * @param o */ public void recursiveSearchDependencies(final ConstructionObject o) { if (o.isRekFlag()) { return; } o.setRekFlag(true); final ConstructionObject d[] = o.getDepArray(); for (final ConstructionObject element : d) { recursiveSearchDependencies(element); } } /** * Time consuming method which is called only if it's really necessary : */ public void compute() { // Empty the vector which contains the point set of the plot : V.clear(); if (!Valid) { return; } // Initialisation of varmin, varmax and d (the step variable) : double varmin, varmax, d; try { varmin = VarMin.getValue(); varmax = VarMax.getValue(); d = DVar.getValue(); if (varmin > varmax) { final double h = varmin; varmin = varmax; varmax = h; } if (d < 0) { d = -d; } } catch (final Exception e) { Valid = false; return; } // X[0] represents the 't' variable for parametric plots. // When you give X[0] a t value, EX.getValue() and EY.getValue() // automatically returns the x(t) and y(t) value. // If it's a cartesian function, X[0] represents the 'x' value // then EX.getValue() always returns x and EY.getValue() returns // the f(x) value. X[0] = varmin; // If the function may have discontinuity problems, computing is // slower, because it checks for each point if a segment will have // to be displayed or not : if (mayHaveDiscontinuityPb()) { if (d == 0) { try { // if the user leaves the step text box empty in the // properties bar, the step d will represents only one pixel // : d = new Expression("1/pixel", getConstruction(), this) .getValue(); } catch (final Exception ex) { } // if the step d defined by user is too small, then correct it : } else if (d < (varmax - varmin) / 1000) { d = (varmax - varmin) / 1000; } double x1 = 0, y1 = 0, x2 = 0, y2 = 0, yM = 0, X0 = 0; final int nbsteps = (int) Math.round((varmax - varmin) / d) + 1; try { x1 = EX.getValue(); y1 = EY.getValue(); V.add(new Coordinates(x1, y1, false)); } catch (final Exception ex) { } /* * A(x1,y1=f(x1)) is the first point. B(x2,y2=f(x2)) is the second * point. In order to know if a segment must join these two points, * we compute the point M(xM,yM=f(xM)), where xM=(x1+x2)/2 : */ for (int i = 1; i < nbsteps; i++) { try { X0 = X[0]; X[0] += d / 2; EX.getValue(); yM = EY.getValue(); X[0] += d / 2; x2 = EX.getValue(); y2 = EY.getValue(); // If A,M and B are on the same horizontal line // then segment must be drawn (true) : if ((y1 == yM) && (y2 == yM)) { V.add(new Coordinates(x2, y2, true)); // if f(xM) is in open interval ]f(x1),f(x2)[ : } else if (((yM > y1) && (yM < y2)) || ((yM > y2) && (yM < y1))) { final double mm = Math.abs(y1 - yM) / Math.abs(y2 - yM); // This is a weird thing, but it seems to work in // lots of "basic" situations : // If the distance |yM-y1| (or |yM-y2|) // represents 10% of the distance |yM-y2| (or |yM-y1|) // then may be it's a discontinuity problem, so // don't draw the segment [AB] (false) if ((mm < 0.1) || (mm > 10)) { V.add(new Coordinates(x2, y2, false)); // Otherwise draw the segment [AB] : } else { V.add(new Coordinates(x2, y2, true)); } // if f(xM) is not in interval [f(x1),f(x2)], don't // draw the segment [AB] (false) : } else { V.add(new Coordinates(x2, y2, false)); } x1 = x2; y1 = y2; } catch (final Exception ex) { try { X[0] = X0 + d; x1 = EX.getValue(); y1 = EY.getValue(); V.add(new Coordinates(x1, y1, false)); } catch (final Exception ex1) { } } } } else { if (d == 0) { d = (varmax - varmin) / 100; } else if (d < (varmax - varmin) / 1000) { d = (varmax - varmin) / 1000; } final int nbsteps = (int) Math.round((varmax - varmin) / d) + 1; for (int i = 0; i < nbsteps; i++) { try { V.add(new Coordinates(EX.getValue(), EY.getValue())); } catch (final Exception ex) { } X[0] += d; } } } public void setNeedsToRecompte(final boolean n) { NeedsRecompute = n; } /** * Check all objects the function depends on. If one of the have changed, * this function return true. * * @return */ public boolean needsToRecompute() { boolean needs = false; final Enumeration pl = DriverObjectList.elements(); while (pl.hasMoreElements()) { final DriverObject oc = (DriverObject) pl.nextElement(); if (oc.somethingChanged()) { // There is a "ClearList" which will be cleared // at the end of the Construction.computeHeavyObjects method : Global.addClearList(oc); needs = true; } } // Also needs to compute when user zoom or move figure in the window : if ((Cn.getX() != cx) || (Cn.getY() != cy) || (Cn.getW() != ww) || (Cn.getH() != wh)) { cx = Cn.getX(); cy = Cn.getY(); ww = Cn.getW(); wh = Cn.getH(); needs = true; } if (NeedsRecompute) { NeedsRecompute = false; return true; } return needs; } @Override public void setFilled(final boolean flag) { Filled = flag; } @Override public boolean isFilled() { return Filled; } @Override public String getTag() { return "Function"; } @Override public int getN() { return N.next(); } @Override public void updateText() { if (EX != null && EY != null) { setText(text2(Zirkel.name("text.function"), EX.toString(), EY .toString())); } else { setText(text2(Zirkel.name("text.function"), "", "")); } } @Override public void validate() { if (EX != null && EY != null) { Valid = EX.isValid() && EY.isValid() && VarMin.isValid() && VarMax.isValid() && DVar.isValid(); } else { Valid = false; } } public void setExpressions(final String t, String ex, final String ey) { final StringTokenizer tok = new StringTokenizer(t); Var = new String[tok.countTokens()]; X = new double[tok.countTokens()]; int i = 0; while (tok.hasMoreTokens()) { Var[i++] = tok.nextToken(); } if (ex.equals("")) { ex = Var[0]; } EX = new Expression(ex, getConstruction(), this, Var); EY = new Expression(ey, getConstruction(), this, Var); validate(); searchDependencies(Cn); } public boolean isCartesian() { return EX.toString().equals("x"); } public boolean mayHaveDiscontinuityPb() { final String Pbs[] = { "floor(", "ceil(", "tan(", "sign(" }; // Continuity pbs are only checked for cartesian functions : if (EX.toString().equals("x")) { for (final String pb : Pbs) { if ((EY.toString().indexOf(pb) != -1)) { return true; } } } return false; } public void setRange(final String min, final String max, final String d) { VarMin = new Expression(min, getConstruction(), this); VarMax = new Expression(max, getConstruction(), this); DVar = new Expression(d, getConstruction(), this); searchDependencies(Cn); } @Override public String getEX() { if (EX != null) { return EX.toString(); } else { return Var[0]; } } @Override public String getEY() { if (EY != null) { return EY.toString(); } else { return "0"; } } FunctionPolygonFiller PF = null; double C1, C2; int C, R, W, H; @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) { return; } Coordinates C = null; Enumeration e = V.elements(); double c, r; g.setColor(this); if (Special) { if (Filled) { PF = new FunctionPolygonFiller(g, this, zc.getY(), zc.getY() + zc.getHeight()); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); PF.add(zc.col(C.X), zc.row(C.Y)); } PF.fillPolygon(zc.row(0)); e = V.elements(); g.setColor(this); } while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); PointObject.drawPoint(g, zc, this, C.X, C.Y, Type); } } else if (Tracked) { zc.UniversalTrack.TrackIG.setColor(this); zc.UniversalTrack.setActive(true); final PolygonDrawer pd = new PolygonDrawer(g, this); final PolygonDrawer pdt = new PolygonDrawer( zc.UniversalTrack.TrackIG, this); if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c0 = zc.col(C.X); r0 = zc.row(C.Y); pd.startPolygon(c0, r0); pdt.startPolygon(c0, r0); } while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c = zc.col(C.X); r = zc.row(C.Y); if (Math.abs(pd.c() - c) < 1000 && Math.abs(pd.r() - r) < 1000) { pd.drawTo(c, r); pdt.drawTo(c, r); } else { pd.finishPolygon(); pdt.finishPolygon(); pd.startPolygon(c, r); pdt.startPolygon(c, r); } } pd.finishPolygon(); pdt.finishPolygon(); } else { if (Filled) { PF = new FunctionPolygonFiller(g, this, zc.getY(), zc.getY() + zc.getHeight()); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); PF.add(zc.col(C.X), zc.row(C.Y)); } PF.fillPolygon(zc.row(0)); e = V.elements(); g.setColor(this); } final PolygonDrawer pd = new PolygonDrawer(g, this); if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c0 = zc.col(C.X); r0 = zc.row(C.Y); pd.startPolygon(c0, r0); } while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c = zc.col(C.X); r = zc.row(C.Y); if (C.join) { pd.drawTo(c, r); } else { pd.finishPolygon(); pd.startPolygon(c, r); } } pd.finishPolygon(); } } @Override public double getValue() throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } return X[0]; } public double getValue(final String var) throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } for (int i = 0; i < Var.length; i++) { if (var.equals(Var[i])) { return X[i]; } } return X[0]; } public double getIntegral() throws ConstructionException { return getSum(); } @Override public String getDisplayValue() { if (getEX().equals(getVar())) { return EY.toString(); } else { return "(" + EX.toString() + "," + EY.toString() + ")"; } } // Mainly to select the track for delete @Override public boolean nearto(final int x, final int y, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } final Enumeration e = V.elements(); final double xx = zc.x(x), yy = zc.y(y); final double mymax = (7 / Cn.getPixel()); if (Special) { Coordinates CS; while (e.hasMoreElements()) { CS = (Coordinates) e.nextElement(); if ((Math.abs(CS.X - xx) < mymax) && (Math.abs(CS.Y - yy) < mymax)) { return true; } } } else { double xA = 0, yA = 0, xB = 0, yB = 0; Coordinates CS0, CS1; if (e.hasMoreElements()) { CS0 = (Coordinates) e.nextElement(); xA = CS0.X; yA = CS0.Y; } while (e.hasMoreElements()) { CS1 = (Coordinates) e.nextElement(); xB = CS1.X; yB = CS1.Y; final double p1 = (xx - xA) * (xB - xA) + (yy - yA) * (yB - yA); final double p2 = (xx - xB) * (xA - xB) + (yy - yB) * (yA - yB); if ((p1 > 0) && (p2 > 0)) { final double aa = xB - xA, bb = yB - yA, cc = bb * xA - aa * yA; final double d = Math.abs(-bb * xx + aa * yy + cc) / Math.sqrt(aa * aa + bb * bb); if (d < mymax) { return true; } } xA = xB; yA = yB; } } return false; } public boolean EditAborted; @Override public void edit(final ZirkelCanvas zc) { ObjectEditDialog d; if (!rene.zirkel.Zirkel.IsApplet) { eric.JGlobals.EditObject(this); return; } while (true) { d = new CurveEditDialog(zc, this); d.setVisible(true); EditAborted = false; if (d.isAborted()) { EditAborted = true; break; } else if (!EX.isValid()) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, EX.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } else if (!EY.isValid()) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, EY.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } else { break; } } validate(); updateText(); zc.getConstruction().updateCircleDep(); zc.repaint(); if (d.wantsMore()) { new EditConditionals(zc.getFrame(), this); validate(); } } @Override public void printArgs(final XmlWriter xml) { xml.printArg("x", EX.toString()); xml.printArg("y", EY.toString()); xml.printArg("var", getVar()); xml.printArg("min", "" + VarMin); xml.printArg("max", "" + VarMax); xml.printArg("d", "" + DVar); if (Special) { xml.printArg("special", "true"); } printType(xml); if (Filled) { xml.printArg("filled", "true"); } if (getCenter() != null) { xml.printArg("center", getCenter().getName()); } } @Override public void setType(final int type) { Type = type; } @Override public int getType() { return Type; } public void printType(final XmlWriter xml) { if (Type != 0) { switch (Type) { case DIAMOND: xml.printArg("shape", "diamond"); break; case CIRCLE: xml.printArg("shape", "circle"); break; case DOT: xml.printArg("shape", "dot"); break; case CROSS: xml.printArg("shape", "cross"); break; case DCROSS: xml.printArg("shape", "dcross"); break; } } } @Override public ConstructionObject copy(final double x, final double y) { final FunctionObject fo = new FunctionObject(getConstruction()); fo.copyProperties(this); fo.EX = new Expression(EX.toString(), getConstruction(), fo, Var); fo.EY = new Expression(EY.toString(), getConstruction(), fo, Var); fo.VarMin = new Expression(VarMin.toString(), getConstruction(), fo); fo.VarMax = new Expression(VarMax.toString(), getConstruction(), fo); fo.DVar = new Expression(DVar.toString(), getConstruction(), fo); fo.Special = Special; final ConstructionObject O = getTranslation(); fo.setTranslation(this); fo.EX.translate(); fo.EY.translate(); fo.VarMin.translate(); fo.VarMax.translate(); fo.DVar.translate(); fo.translateConditionals(); fo.X = X; fo.Var = Var; fo.validate(); fo.setTranslation(O); fo.searchDependencies(Cn.getTranslation()); return fo; } @Override public boolean onlynearto(final int x, final int y, final ZirkelCanvas zc) { return false; // return nearto(x,y,zc); } @Override public boolean equals(final ConstructionObject o) { return false; } @Override public Enumeration depending() { DL.reset(); addDepending(EX); addDepending(EY); addDepending(VarMin); addDepending(VarMax); addDepending(DVar); return DL.elements(); } public void addDepending(final Expression E) { if (E != null) { final Enumeration e = E.getDepList().elements(); while (e.hasMoreElements()) { DL.add((ConstructionObject) e.nextElement()); } } } @Override public boolean hasUnit() { return false; } public double evaluateF(final double x[]) throws ConstructionException { int n = x.length; if (n > X.length) { n = X.length; } for (int i = 0; i < n; i++) { X[i] = x[i]; } for (int i = n; i < X.length; i++) { X[i] = 0; } try { return EY.getValue(); } catch (final Exception e) { throw new ConstructionException(""); } } public double evaluateF(final double x) throws ConstructionException { X[0] = x; for (int i = 1; i < X.length; i++) { X[i] = 0; } try { return EY.getValue(); } catch (final Exception e) { throw new ConstructionException(""); } } @Override public int getDistance(final PointObject P) { double varmin, varmax, dvar; try { varmin = VarMin.getValue(); varmax = VarMax.getValue(); dvar = DVar.getValue(); if (varmin > varmax) { final double h = varmin; varmin = varmax; varmax = h; } if (dvar < 0) { dvar = -dvar; } if (dvar == 0) { dvar = (varmax - varmin) / 100; } else if (dvar < (varmax - varmin) / 1000) { dvar = (varmax - varmin) / 1000; } } catch (final Exception e) { Valid = false; return 1000; } try { // if it's a cartesian function, try to calculate the "real" coords // : if ((getEX().equals("x"))) { double x = (P.getX() < varmin) ? varmin : P.getX(); x = (P.getX() > varmax) ? varmax : x; final double y = evaluateF(x); final double dd = Math.sqrt((P.getX() - x) * (P.getX() - x) + (P.getY() - y) * (P.getY() - y)); return (int) Math.round(dd * Cn.getPixel()); } } catch (final Exception e) { } try { // if it's a parmetric curve and function is just plot with points : if ((!getEX().equals("x")) && (Special)) { if (P.haveBoundOrder()) { X[0] = P.getBoundOrder(); final double dd = Math.sqrt((P.getX() - EX.getValue()) * (P.getX() - EX.getValue()) + (P.getY() - EY.getValue()) * (P.getY() - EY.getValue())); return (int) Math.round(dd * Cn.getPixel()); } else { Coordinates CS; final Enumeration e = V.elements(); double delta0 = 0, delta1 = 0, xx = 0, yy = 0; int i = 0; if (e.hasMoreElements()) { CS = (Coordinates) e.nextElement(); delta0 = Math.abs(CS.X - P.getX()) + Math.abs(CS.Y - P.getY()); xx = CS.X; yy = CS.Y; } while (e.hasMoreElements()) { i++; CS = (Coordinates) e.nextElement(); delta1 = Math.abs(CS.X - P.getX()) + Math.abs(CS.Y - P.getY()); if (delta1 < delta0) { delta0 = delta1; xx = CS.X; yy = CS.Y; } } final double dd = Math.sqrt((P.getX() - xx) * (P.getX() - xx) + (P.getY() - yy) * (P.getY() - yy)); return (int) Math.round(dd * Cn.getPixel()); } } } catch (final Exception e) { Valid = false; return 1000; } // Otherwise, at Least get the approx coordinates on the polygon : if (needsToRecompute()) { compute(); } final Enumeration e = V.elements(); double x = 0, y = 0, x0 = 0, y0 = 0, dmin = 0; boolean started = false; while (e.hasMoreElements()) { final Coordinates c = (Coordinates) e.nextElement(); final double x1 = c.X; final double y1 = c.Y; if (!started) { dmin = Math.sqrt((P.getX() - x1) * (P.getX() - x1) + (P.getY() - y1) * (P.getY() - y1)); x0 = x = x1; y0 = y = y1; started = true; } else { if (c.flag) { double h = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0); if (h < 1e-10) { h = 1e-10; } double g = (P.getX() - x0) * (x1 - x0) + (P.getY() - y0) * (y1 - y0); if (g < 0) { g = 0; } if (g > h) { g = h; } final double x2 = x0 + g / h * (x1 - x0), y2 = y0 + g / h * (y1 - y0); final double d = Math.sqrt((P.getX() - x2) * (P.getX() - x2) + (P.getY() - y2) * (P.getY() - y2)); if (d < dmin) { dmin = d; x = x2; y = y2; } } x0 = x1; y0 = y1; } } if (started) { P.Valid = true; final double dd = Math.sqrt((P.getX() - x) * (P.getX() - x) + (P.getY() - y) * (P.getY() - y)); return (int) Math.round(dd * Cn.getPixel()); } else { P.Valid = false; } return 1000; } public void project(final PointObject P) { double varmin, varmax, dvar; try { varmin = VarMin.getValue(); varmax = VarMax.getValue(); dvar = DVar.getValue(); if (varmin > varmax) { final double h = varmin; varmin = varmax; varmax = h; } if (dvar < 0) { dvar = -dvar; } if (dvar == 0) { dvar = (varmax - varmin) / 100; } else if (dvar < (varmax - varmin) / 1000) { dvar = (varmax - varmin) / 1000; } } catch (final Exception e) { Valid = false; return; } try { // if P is a PointOn (a parmetric curve) and function is just plot // with points : if ((!getEX().equals("x")) && (P.isPointOnOrMagnet()) && (Special)) { if (P.haveBoundOrder()) { X[0] = P.getBoundOrder(); P.setXY(EX.getValue(), EY.getValue()); return; } else { Coordinates CS; final Enumeration e = V.elements(); double delta0 = 0, delta1 = 0, xx = 0, yy = 0; int i = 0, k = 0; if (e.hasMoreElements()) { CS = (Coordinates) e.nextElement(); delta0 = Math.abs(CS.X - P.getX()) + Math.abs(CS.Y - P.getY()); xx = CS.X; yy = CS.Y; } while (e.hasMoreElements()) { i++; CS = (Coordinates) e.nextElement(); delta1 = Math.abs(CS.X - P.getX()) + Math.abs(CS.Y - P.getY()); if (delta1 < delta0) { k = i; delta0 = delta1; xx = CS.X; yy = CS.Y; } } P.setXY(xx, yy); P.setBoundOrder(varmin + k * dvar); return; } } } catch (final Exception e) { Valid = false; return; } try { // if P is a PointOn (a cartesian function), try to calculate the // "real" coords : if ((P.isPointOnOrMagnet()) && (getEX().equals("x"))) { double x = (P.getX() < varmin) ? varmin : P.getX(); x = (P.getX() > varmax) ? varmax : x; final double y = evaluateF(x); P.move(x, y); return; } } catch (final Exception e) { } // Otherwise, at Least get the approx coordinates on the polygon : if (needsToRecompute()) { compute(); } final Enumeration e = V.elements(); double x = 0, y = 0, x0 = 0, y0 = 0, dmin = 0; boolean started = false; while (e.hasMoreElements()) { final Coordinates c = (Coordinates) e.nextElement(); final double x1 = c.X; final double y1 = c.Y; if (!started) { dmin = Math.sqrt((P.getX() - x1) * (P.getX() - x1) + (P.getY() - y1) * (P.getY() - y1)); x0 = x = x1; y0 = y = y1; started = true; } else { if (c.flag) { double h = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0); if (h < 1e-10) { h = 1e-10; } double g = (P.getX() - x0) * (x1 - x0) + (P.getY() - y0) * (y1 - y0); if (g < 0) { g = 0; } if (g > h) { g = h; } final double x2 = x0 + g / h * (x1 - x0), y2 = y0 + g / h * (y1 - y0); final double d = Math.sqrt((P.getX() - x2) * (P.getX() - x2) + (P.getY() - y2) * (P.getY() - y2)); if (d < dmin) { dmin = d; x = x2; y = y2; } } x0 = x1; y0 = y1; } } if (started) { P.setXY(x, y); P.Valid = true; } else { P.Valid = false; } } public double getSum() { double varmin, varmax, dvar; boolean reverse = false; final boolean parametric = !getEX().equals(getVar()); try { varmin = VarMin.getValue(); varmax = VarMax.getValue(); dvar = DVar.getValue(); if (varmin > varmax) { final double h = varmin; varmin = varmax; varmax = h; reverse = true; } if (dvar < 0) { dvar = -dvar; } if (dvar == 0) { dvar = (varmax - varmin) / 100; } else if (dvar < (varmax - varmin) / 1000) { dvar = (varmax - varmin) / 1000; } } catch (final Exception e) { Valid = false; return 0; } X[0] = varmin; double x0 = 0, y0 = 0; boolean started = false; double sum = 0; while (true) { try { final double x1 = EX.getValue(); final double y1 = EY.getValue(); if (parametric) { double x = 0, y = 0; if (getCenter() != null) { x = getCenter().getX(); y = getCenter().getY(); } if (started) { sum += ((x0 - x) * (y1 - y) - (y0 - y) * (x1 - x)) / 2; } } else { if (started) { if (Special) { if (reverse) { sum += (x1 - x0) * y1; } else { sum += (x1 - x0) * y0; } } else { sum += (x1 - x0) * (y0 + y1) / 2; } } } x0 = x1; y0 = y1; started = true; } catch (final Exception e) { } if (X[0] >= varmax) { break; } X[0] = X[0] + dvar; if (X[0] > varmax) { X[0] = varmax; } } return sum; } public double getLength() { double varmin, varmax, dvar; try { varmin = VarMin.getValue(); varmax = VarMax.getValue(); dvar = DVar.getValue(); if (varmin > varmax) { final double h = varmin; varmin = varmax; varmax = h; } if (dvar < 0) { dvar = -dvar; } if (dvar == 0) { dvar = (varmax - varmin) / 100; } else if (dvar < (varmax - varmin) / 1000) { dvar = (varmax - varmin) / 1000; } } catch (final Exception e) { Valid = false; return 0; } X[0] = varmin; double x0 = 0, y0 = 0; boolean started = false; double sum = 0; while (true) { try { final double x1 = EX.getValue(); final double y1 = EY.getValue(); if (started) { sum += Math.sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0)); } started = true; x0 = x1; y0 = y1; } catch (final Exception e) { } if (X[0] >= varmax) { break; } X[0] = X[0] + dvar; if (X[0] > varmax) { X[0] = varmax; } } return sum; } @Override public boolean isSpecial() { return Special; } @Override public void setSpecial(final boolean f) { Special = f; } public void project(final PointObject P, final double alpha) { project(P); } @Override public boolean maybeTransparent() { return true; } @Override public boolean canDisplayName() { return false; } public void setCenter(final String s) { if (Cn == null) { return; } Center = new Expression("@\"" + s + "\"", Cn, this); } @Override public boolean isFilledForSelect() { return false; } public PointObject getCenter() { try { return (PointObject) Center.getObject(); } catch (final Exception e) { return null; } } public String getVar() { String vars = Var[0]; for (int i = 1; i < Var.length; i++) { vars = vars + " " + Var[i]; } return vars; } public boolean canInteresectWith(final ConstructionObject o) { return true; } @Override public boolean isDriverObject() { return true; } public boolean somethingChanged() { boolean b = !EX.toString().equals(LASTEX); b = b || !EY.toString().equals(LASTEY); return b; } public void clearChanges() { LASTEX = EX.toString(); LASTEY = EY.toString(); } public void repulse(final PointObject P) { project(P); } } ./src/rene/zirkel/objects/CVS/RevisionCache/PointObject.java#1.70000644000175000017500000011143211257414645023166 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: PointObject.java import java.awt.Button; import java.awt.Checkbox; import java.awt.Color; import java.awt.Frame; import java.awt.GridLayout; import java.awt.event.FocusEvent; import java.util.Enumeration; import java.util.Vector; import javax.swing.JPanel; import rene.dialogs.Warning; import rene.gui.ButtonAction; import rene.gui.CheckboxAction; import rene.gui.Global; import rene.gui.IconBar; import rene.gui.MyLabel; import rene.gui.MyPanel; import rene.gui.MyTextField; import rene.gui.TextFieldAction; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.dialogs.EditConditionals; import rene.zirkel.dialogs.ObjectEditDialog; import rene.zirkel.expression.Expression; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.structures.MagnetObj; import eric.JGlobals; import eric.JPointName; class PointEditDialog extends ObjectEditDialog { /** * */ private static final long serialVersionUID = 1L; TextFieldAction X, Y; MyTextField Away, Bound, Increment; Checkbox Fixed, Close, Restricted, Alternate, Inside; IconBar TypeIB; ZirkelCanvas ZC; public PointEditDialog(final Frame f, final PointObject o) { super(f, Zirkel.name("edit.point.title"), o); } public PointEditDialog(final ZirkelCanvas zc, final PointObject o) { this(zc.getFrame(), o); ZC = zc; } @Override public void addFirst(final JPanel P) { final PointObject p = (PointObject) O; X = new TextFieldAction(this, "X", "" + p.round(p.getX()), 30); P.add(new MyLabel(Zirkel.name("edit.point.x"))); P.add(X); Y = new TextFieldAction(this, "Y", "" + p.round(p.getY()), 30); P.add(new MyLabel(Zirkel.name("edit.point.y"))); P.add(Y); if (p.moveablePoint()) { Fixed = new Checkbox(""); Fixed.setState(p.fixed()); P.add(new MyLabel(Zirkel.name("edit.fixed"))); P.add(Fixed); if (p.fixed()) { X.setText(p.getEX()); Y.setText(p.getEY()); } P.add(new MyLabel(Zirkel.name("edit.point.increment"))); P.add(Increment = new MyTextField("" + p.round(p.getIncrement()))); } else { X.setEditable(false); Y.setEditable(false); } if ((p instanceof IntersectionObject && ((IntersectionObject) p) .isSwitchable())) { Away = new MyTextField("", 5); Away.setText(((IntersectionObject) p).away()); Close = new CheckboxAction(this, Zirkel.name("edit.point.close")); Close.setState(!((IntersectionObject) p).stayAway()); P.add(new MyLabel(Zirkel.name("edit.point.intersection"))); final JPanel ap = new MyPanel(); ap.setLayout(new GridLayout(1, 2)); ap.add(Away); ap.add(Close); P.add(ap); } if (p instanceof IntersectionObject) { P.add(new MyLabel(Zirkel.name("edit.plumb.restricted"))); Restricted = new CheckboxAction(this, "", "Restricted"); Restricted.setState(((IntersectionObject) p).isRestricted()); P.add(Restricted); if (((IntersectionObject) p).canAlternate()) { P.add(new MyLabel(Zirkel.name("edit.intersection.alternate"))); Alternate = new CheckboxAction(this, "", "Alternate"); Alternate.setState(((IntersectionObject) p).isAlternate()); P.add(Alternate); } } if (p.isPointOn()) { P.add(new MyLabel(Zirkel.name("edit.point.bound"))); P.add(Bound = new MyTextField(p.getBound().getName())); Bound.setEditable(false); if (p.getBound() instanceof InsideObject) { P.add(new MyLabel(Zirkel.name("edit.point.inside"))); P.add(Inside = new CheckboxAction(this, "", "Inside")); Inside.setState(p.isInside()); } if (Fixed != null) { Fixed.setState(p.useAlpha()); } } } Button BoundButton; @Override public void addButton(final JPanel P) { final PointObject p = (PointObject) O; if (p.moveablePoint()) { if (p.isPointOn()) { BoundButton = new ButtonAction(this, Zirkel .name("bound.release"), "Release"); } else { BoundButton = new ButtonAction(this, Zirkel.name("bound.bind"), "Bind"); } P.add(BoundButton); P.add(new MyLabel(" ")); } else if (p instanceof IntersectionObject && ((IntersectionObject) p).isSwitchable()) { P.add(new ButtonAction(this, Zirkel.name("edit.point.away"), "SetAway")); P.add(new ButtonAction(this, Zirkel.name("edit.point.close"), "SetClose")); if (!((IntersectionObject) p).away().equals("")) { P.add(new ButtonAction(this, Zirkel.name("edit.point.free"), "SetFree")); } P.add(new MyLabel(" ")); } } @Override public void addSecond(final JPanel P) { final PointObject p = (PointObject) O; TypeIB = new IconBar(F); TypeIB.addToggleGroupLeft("type", 6); TypeIB.toggle("type", p.getType()); P.add(new MyLabel("")); P.add(TypeIB); } @Override public void doAction(final String o) { if ((o.equals("Y") || o.equals("X")) && Fixed != null) { Fixed.setState(true); super.doAction("OK"); } else if (o.equals("Release")) { ((PointObject) O).setBound(""); O.getConstruction().updateCircleDep(); if (Fixed != null) { Fixed.setState(false); } super.doAction("OK"); } else if (o.equals("Bind")) { ZC.bind((PointObject) O); super.doAction("OK"); } else if (o.equals("SetAway")) { ZC.setAway((IntersectionObject) O, true); super.doAction("OK"); } else if (o.equals("SetClose")) { ZC.setAway((IntersectionObject) O, false); super.doAction("OK"); } else if (o.equals("SetFree")) { ((IntersectionObject) O).setAway(""); Away = null; super.doAction("OK"); } else if (o.equals("OK")) { if (Fixed != null && X.isChanged() || Y.isChanged()) { Fixed.setState(true); } super.doAction("OK"); } else { super.doAction(o); } } @Override public void setAction() { final PointObject p = (PointObject) O; if ((X.isChanged() || Y.isChanged()) && p.isPointOn()) { try { final double x = new Expression(X.getText(), p .getConstruction(), p).getValue(); final double y = new Expression(Y.getText(), p .getConstruction(), p).getValue(); p.move(x, y); p.validate(); } catch (final Exception e) { } } if (Fixed != null && Fixed.getState() == true) { if (p.isPointOn()) { p.setUseAlpha(true); } else { p.setFixed(X.getText(), Y.getText()); } } else { try { final double x = new Expression(X.getText(), p .getConstruction(), p).getValue(); final double y = new Expression(Y.getText(), p .getConstruction(), p).getValue(); if (p.moveable()) { p.move(x, y); } } catch (final Exception e) { } } if (Fixed != null && Fixed.getState() == false) { if (p.isPointOn()) { p.setUseAlpha(false); } else { p.setFixed(false); } } if (Away != null) { if (!((IntersectionObject) p).setAway(Away.getText(), !Close .getState())) { final Warning w = new Warning(F, Zirkel.name("bound.error"), Zirkel.name("warning")); w.center(F); w.setVisible(true); } } if (Restricted != null) { ((IntersectionObject) p).setRestricted(Restricted.getState()); } if (Alternate != null) { ((IntersectionObject) p).setAlternate(Alternate.getState()); } if (Increment != null) { try { p.setIncrement(new Expression(Increment.getText(), p .getConstruction(), p).getValue()); } catch (final Exception e) { } } p.setType(TypeIB.getToggleState("type")); if (Inside != null) { p.setInside(Inside.getState()); } } @Override public void focusGained(final FocusEvent e) { if (Fixed != null && Fixed.getState()) { X.requestFocus(); } else { super.focusGained(e); } } } public class PointObject extends ConstructionObject implements MoveableObject, DriverObject { protected double X, Y; protected boolean BarycentricCoordsInitialzed = false; protected double Gx = 0, Gy = 0; // Barycentric coords, if it's inside a // polygon. protected double Alpha; // parameter relative zu object protected boolean AlphaValid = false; // Alpha is valid protected boolean UseAlpha = false; // Use Alpha at all protected boolean Moveable, Fixed; // private static Count N=new Count(); private static JPointName PointLabel = new JPointName(); protected int Type = 0; public final static int SQUARE = 0, DIAMOND = 1, CIRCLE = 2, DOT = 3, CROSS = 4, DCROSS = 5; public static int MaxType = 3; protected Expression EX, EY; // private ConstructionObject Bound=null; // point is on a line etc. private boolean Later; // bound is later in construction private String LaterBind = ""; private boolean KeepInside; // keep point inside bound private boolean DontUpdate = false; private double Increment = 0; // increment to keep on grid private ConstructionObject Bound = null; // point is on a line etc. private double BoundOrder = Double.NaN; // Only for points on parametric // curves made with "points only" protected ConstructionObject MovedBy; private double LASTX = Double.NaN, LASTY = Double.NaN; private final Vector magnetObjects = new Vector(); Expression magnetRayExp = null; private int CurrentMagnetRay = Integer.MIN_VALUE; private ConstructionObject CurrentMagnetObject = null; public ConstructionObject VirtualBound = null; // The object that may have moved this point public PointObject(final Construction c, final double x, final double y) { super(c); X = x; Y = y; Moveable = true; Fixed = false; setColor(ColorIndex, SpecialColor); setShowName(false); updateText(); Type = 0; setMagnetRayExp("20"); } public PointObject(final Construction c, final double x, final double y, final ConstructionObject bound) { this(c, x, y); Bound = bound; } public PointObject(final Construction c, final String name) { super(c, name); X = 0; Y = 0; Moveable = true; Fixed = false; setColor(ColorIndex, SpecialColor); updateText(); Type = 0; setMagnetRayExp("20"); } public static void setPointLabel(final JPointName jpl) { PointLabel = jpl; } @Override public void setName() { if ((!SuperHidden) && (!Hidden)) { Name = PointLabel.getBetterName(Cn, false); } else { Name = JPointName.getGenericName(Cn); } } @Override public void setNameWithNumber(String n) { Name = ""; if (Cn != null) { ConstructionObject o = Cn.find(n); if (o != null) { while (o != null && o != this) { Name = JPointName.getGenericName(Cn); n = Name; Name = ""; o = Cn.find(n); } Name = n; } else { Name = n; } } else { Name = n; } } @Override public String getTag() { if (Bound == null) { return "Point"; } else { return "PointOn"; } } @Override public int getN() { return N.next(); } // public void setDefaults () // { super.setDefaults(); // Type=Cn.DefaultType; // } @Override public void setDefaults() { setShowName(Global.getParameter("options.point.shownames", false)); setShowValue(Global.getParameter("options.point.showvalues", false)); setColor(Global.getParameter("options.point.color", 0), Global .getParameter("options.point.pcolor", (Color) null)); setColorType(Global.getParameter("options.point.colortype", 0)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Global.getParameter("options.point.large", false)); setBold(Global.getParameter("options.point.bold", false)); Type = Cn.DefaultType; } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.point.shownames", false)); setShowValue(Global.getParameter("options.point.showvalues", false)); setColor(Global.getParameter("options.point.color", 0), Global .getParameter("options.point.pcolor", (Color) null)); setColorType(Global.getParameter("options.point.colortype", 0)); setLarge(Global.getParameter("options.point.large", false)); setBold(Global.getParameter("options.point.bold", false)); Type = Cn.DefaultType; } private double Delta; @Override public double changedBy() { return Delta; } @Override public void validate() { if (DontUpdate) { return; } updateMagnetObjects(); followMagnetObject(); // magnet(); // System.out.println(getName()+" : validate !"); MovedBy = null; Delta = 0.0; Valid = true; if (Bound != null && !Bound.isInConstruction()) { Bound = null; } if (Bound != null && !Bound.valid()) { Valid = false; return; } if (Increment > 1e-4) { X = Math.floor(X / Increment + 0.5) * Increment; Y = Math.floor(Y / Increment + 0.5) * Increment; } if (Bound != null) { final double x = X, y = Y; if (KeepInside && Bound instanceof InsideObject) { ((InsideObject) Bound).keepInside(this); } else if (!KeepInside && Bound instanceof PointonObject) { if (!AlphaValid || !UseAlpha) { project(Bound); } else { project(Bound, Alpha); } } if (Later) { Delta = Math.sqrt((x - X) * (x - X) + (y - Y) * (y - Y)); } } if (Fixed && EX != null && EX.isValid()) { try { X = EX.getValue(); } catch (final Exception e) { Valid = false; return; } } if (Fixed && EY != null && EY.isValid()) { try { Y = EY.getValue(); } catch (final Exception e) { Valid = false; return; } } } @Override public void updateText() { if (Bound != null) { setText(text1(Zirkel.name("text.boundedpoint"), Bound.getName())); } else if (EX != null && EY != null) { setText(text2(Zirkel.name("text.point"), "\"" + EX + "\"", "\"" + EY + "\"")); } else { setText(text2(Zirkel.name("text.point"), "" + round(X), "" + round(Y))); } } static double x[] = new double[4], y[] = new double[4]; @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { DisplaysText = false; if (!Valid || mustHide(zc)) { return; } final double size = drawPoint(g, zc, this, X, Y, Type); if (tracked()) { zc.UniversalTrack.drawTrackPoint(this, X, Y, Type); } final String s = AngleObject.translateToUnicode(getDisplayText()); if (!s.equals("")) { g.setLabelColor(this); DisplaysText = true; setFont(g); final double d = Math.sqrt(XcOffset * XcOffset + YcOffset * YcOffset); if (!KeepClose || d < 1e-10) { TX1 = zc.col(X + XcOffset) + 2 * size; TY1 = zc.row(Y + YcOffset) + 2 * size; drawLabel(g, s); } else { drawPointLabel(g, s, zc, X, Y, YcOffset / d, -XcOffset / d, 0, 0); } } } static public double drawPoint(final MyGraphics g, final ZirkelCanvas zc, final ConstructionObject o, final double X, final double Y, final int type) { double size = zc.pointSize(); final double r = zc.col(X), c = zc.row(Y); if (size < 1) { size = 1; } // System.out.println(size); if (o.visible(zc)) { if (o.isStrongSelected() && g instanceof MyGraphics13) { ((MyGraphics13) g).drawMarkerLine(r, c, r, c); } g.setColor(o); switch (type) { case SQUARE: final double sx = r - size - 1, sy = c - size - 1, sw = 2 * size + 2; if (o.getColorType() == THICK) { g.fillRect(sx, sy, sw, sw, true, false, o); } else { g.fillRect(sx, sy, sw, sw, new Color(255, 255, 255)); } g.setColor(o); g.drawRect(sx, sy, sw, sw); break; case DIAMOND: final double dx = r - size - 2, dy = c - size - 2, dw = 2 * size + 4; g.drawDiamond(dx, dy, dw, (o.getColorType() == THICK), o); break; case CIRCLE: final double cx = r - size - 1, cy = c - size - 1, cw = 2 * size + 2; if (o.getColorType() == THICK) { g.fillOval(cx, cy, cw, cw, true, false, o); } else { g.fillOval(cx, cy, cw, cw, new Color(255, 255, 255)); g.setColor(o); g.drawOval(cx, cy, cw, cw); } break; case DOT: if (o.getColorType() == THICK) { g.fillRect(r, c, 1, 1, true, false, o); } else { g.drawLine(r, c, r, c); } break; case CROSS: if (o.getColorType() == THICK) { g.drawThickLine(r - size, c, r + size, c); g.drawThickLine(r, c - size, r, c + size); } else { g.drawLine(r - size, c, r + size, c); g.drawLine(r, c - size, r, c + size); } break; case DCROSS: final double dcx = r - size - 1, dcy = c - size - 1, dcw = 2 * size + 1; g.drawDcross(dcx, dcy, dcw, (o.getColorType() == THICK), o); break; } } return size; } @Override public String getDisplayValue() { // return "("+roundDisplay(X)+ // (Global.getParameter("options.germanpoints", // false)?"|":",")+roundDisplay(Y)+")"; return "(" + JGlobals.getLocaleNumber(X, "lengths") + (Global.getParameter("options.germanpoints", false) ? "|" : ";") + JGlobals.getLocaleNumber(Y, "lengths") + ")"; } @Override public boolean nearto(final int x, final int y, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } final double c = zc.col(X), r = zc.row(Y); final int size = (int) zc.selectionSize(); Value = Math.abs(x - c) + Math.abs(y - r); return Value <= size * 3 / 2; } public boolean nearto(final PointObject p) { if (!Valid) { return false; } final double dx = p.X - X, dy = p.Y - Y; return Math.sqrt(dx * dx + dy * dy) < 1e-9; } public double distanceTo(final int x, final int y, final ZirkelCanvas zc) { final double dx = x - zc.col(X), dy = y - zc.row(Y); return Math.sqrt(dx * dx + dy * dy); } @Override public double getX() { return X; } @Override public double getY() { return Y; } public boolean moveable() { boolean fixed = Fixed; if (dependsOnItselfOnly()) { fixed = false; } return Moveable && !fixed && !Keep; } /** * Check if the point depends on itself and no other object. Such points are * moveable, even if they are fixed. * * @return */ public boolean dependsOnItselfOnly() { boolean res = false; Enumeration e = depending(); while (e.hasMoreElements()) { if ((ConstructionObject) e.nextElement() == this) { res = true; break; } } e = depending(); while (e.hasMoreElements()) { if ((ConstructionObject) e.nextElement() != this) { res = false; break; } } return res; } public boolean dependsOnParametersOnly() { final Enumeration e = depending(); while (e.hasMoreElements()) { if (!((ConstructionObject) e.nextElement()).isParameter()) { return false; } } return true; } /** * @return o can move this point (moveable and not moved by something else) */ public boolean moveableBy(final ConstructionObject o) { if (Bound != null) { return false; } return moveable() && (MovedBy == null || MovedBy == o); } public boolean moveablePoint() { if (Bound != null) { return true; } return Moveable && !Keep; } public boolean setBound(final String name) { if (name.equals("")) { Bound = null; setFixed(false); Later = false; return true; } try { Bound = null; final ConstructionObject o = Cn.find(name); if (o instanceof PointonObject) { Bound = o; Moveable = true; Fixed = false; KeepInside = false; } else if (o instanceof InsideObject) { Bound = o; Moveable = true; Fixed = false; KeepInside = true; } else { return false; } } catch (final Exception e) { return false; } if (Cn.before(this, Bound)) { Cn.needsOrdering(); Cn.dovalidate(); } updateText(); clearMagnetObjects(); return true; } public void setBound(final ConstructionObject bound) { Bound = bound; } public boolean haveBoundOrder() { return (!Double.isNaN(BoundOrder)); } public void setBoundOrder(final double boundorder) { BoundOrder = boundorder; } public void clearBoundOrder() { BoundOrder = Double.NaN; } public ConstructionObject getBound() { return Bound; } public double getBoundOrder() { return BoundOrder; } public void setMoveable(final boolean flag) { Moveable = flag; } @Override public boolean fixed() { return Fixed; } @Override public void setFixed(final boolean flag) { Fixed = flag; if (!Fixed) { EX = EY = null; } updateText(); } @Override public void setFixed(final String x, final String y) { Fixed = true; EX = new Expression(x, getConstruction(), this); EY = new Expression(y, getConstruction(), this); updateText(); } public void validCoordinates() throws Exception{ boolean val=(EX.isValid())&&(EY.isValid()); if (!val) throw new Exception(""); } @Override public void move(final double x, final double y) { if ((X == x) && (Y == y)) { return; } // System.out.println(getName()+" : move !"); X = x; Y = y; AlphaValid = false; computeBarycentricCoords(); } public void setXY(final double x, final double y) { if ((X == x) && (Y == y)) { return; } // System.out.println(getName()+" : setXY !"); X = x; Y = y; } public void setXYaway(final double x, final double y, final int r) { if (r > 0) { setXY(x, y); return; } final double d = Math.sqrt((X - x) * (X - x) + (Y - y) * (Y - y)); final double dblr = -r / Cn.getPixel(); double xx = x + dblr, yy = y; if (d != 0) { xx = x + (X - x) * dblr / d; yy = y + (Y - y) * dblr / d; } // System.out.println(Cn.getPixel()); // System.out.println("d="+d); // System.out.println("xx="+xx); // System.out.println("yy="+yy); // System.out.println("****"); setXY(xx, yy); } public void setA(final double alpha) { Alpha = alpha; } public void setMagnetRayExp(final String s) { magnetRayExp = new Expression(s, Cn, this); } public String getMagnetRayExp() { return magnetRayExp.toString(); } public int getMagnetRay() { int i = 20; try { i = (int) Math.round(magnetRayExp.getValue()); } catch (final Exception ex) { } return i; } // public String getMagnetRayExp(){ // return magnetRayExp.toString(); // } private boolean isMagnetObject(final String name) { final Enumeration e = magnetObjects.elements(); while (e.hasMoreElements()) { final MagnetObj mo = (MagnetObj) e.nextElement(); if (mo.name().equals(name)) { return true; } } return false; } public void removeMagnetObject(final String name) { final Enumeration e = magnetObjects.elements(); while (e.hasMoreElements()) { final MagnetObj mo = (MagnetObj) e.nextElement(); if (mo.name().equals(name)) { magnetObjects.remove(mo); } } } /** * s represents the name of an object, or the string "name:ray" where ray is * the specific magnetic attraction * * @param s */ public void addMagnetObject(final String s) { final String[] mo = s.split(":"); final String name = mo[0]; // int ray=-1; String ray = "" + Integer.MIN_VALUE; if (mo.length > 1) { ray = mo[1]; } if (name.equals(getName())) { return; } final ConstructionObject o = Cn.find(name); if ((o != null) && (!isMagnetObject(name))) { magnetObjects.add(new MagnetObj(o, ray)); } } public void setMagnetObjects(final String namelist) { String st = ""; char t; int p = 0; for (int i = 0; i < namelist.length(); i++) { t = namelist.charAt(i); if (t == '(') { p++; } else if (t == ')') { p--; } if ((p > 0) && (t == ',')) { st += "@@"; } else { st += t; } } final String[] s = st.split(","); magnetObjects.removeAllElements(); for (final String element : s) { st = element.replaceAll("@@", ","); addMagnetObject(st); } } public void selectMagnetObjects(final boolean b) { final Enumeration e = magnetObjects.elements(); while (e.hasMoreElements()) { final MagnetObj mo = (MagnetObj) e.nextElement(); if (mo.isInConstruction()) { mo.setSelected(b); } } } public void updateMagnetObjects() { final Enumeration e = magnetObjects.elements(); while (e.hasMoreElements()) { final MagnetObj mo = (MagnetObj) e.nextElement(); if (!mo.isInConstruction()) { magnetObjects.remove(mo); } } } public void clearMagnetObjects() { magnetObjects.removeAllElements(); setMagnetRayExp("20"); } public void translateMagnetObjects() { final Enumeration e = magnetObjects.elements(); while (e.hasMoreElements()) { final MagnetObj mo = (MagnetObj) e.nextElement(); mo.translate(); } } public Vector getMagnetObjects() { return magnetObjects; } public String getMagnetObjectsString() { updateMagnetObjects(); String s = ""; final Enumeration e = magnetObjects.elements(); if (e.hasMoreElements()) { final MagnetObj mo = (MagnetObj) e.nextElement(); s = mo.name(); if (mo.ray() > Integer.MIN_VALUE) { s += ":" + mo.rayexp(); } } while (e.hasMoreElements()) { final MagnetObj mo = (MagnetObj) e.nextElement(); s += "," + mo.name(); if (mo.ray() > Integer.MIN_VALUE) { s += ":" + mo.rayexp(); } } return s; } public void magnet() { ConstructionObject PtOnObject = null; ConstructionObject PtObject = null; final Enumeration e = magnetObjects.elements(); int dp = Integer.MAX_VALUE, dm = Integer.MAX_VALUE; int rayp = 0, raym = 0; while (e.hasMoreElements()) { final MagnetObj mo = (MagnetObj) e.nextElement(); final ConstructionObject o = mo.obj(); final int mRay = (mo.ray() > Integer.MIN_VALUE) ? mo.ray() : getMagnetRay(); final int mRayAbs = Math.abs(mRay); if (mRayAbs == 0) { continue; } if (!o.valid()) { continue; } if (o instanceof PointObject) { final int i = o.getDistance(this); if ((i <= mRayAbs) && (i < dp)) { PtObject = o; rayp = mRay; dp = i; } } else if (o instanceof PointonObject) { final int i = o.getDistance(this); if ((i <= mRayAbs) && (i < dm)) { PtOnObject = o; raym = mRay; dm = i; } } } if (PtObject != null) { final PointObject pt = (PointObject) PtObject; setXYaway(pt.getX(), pt.getY(), rayp); if (PtObject != CurrentMagnetObject) { CurrentMagnetObject = PtObject; CurrentMagnetRay = rayp; Cn.reorderConstruction(); } } else if (PtOnObject != null) { final PointonObject pt = (PointonObject) PtOnObject; if (PtOnObject != CurrentMagnetObject) { CurrentMagnetObject = PtOnObject; CurrentMagnetRay = raym; Cn.reorderConstruction(); } pt.project(this); } else { CurrentMagnetObject = null; CurrentMagnetRay = Integer.MIN_VALUE; } } public void setCurrentMagnetObject() { ConstructionObject PtOnObject = null; ConstructionObject PtObject = null; final Enumeration e = magnetObjects.elements(); int dp = Integer.MAX_VALUE, dm = Integer.MAX_VALUE; int rayp = 0, raym = 0; while (e.hasMoreElements()) { final MagnetObj mo = (MagnetObj) e.nextElement(); final ConstructionObject o = mo.obj(); final int mRay = (mo.ray() > Integer.MIN_VALUE) ? mo.ray() : getMagnetRay(); if (o instanceof PointObject) { final int i = o.getDistance(this); if ((i <= mRay) && (i < dp)) { PtObject = o; rayp = mRay; dp = i; } } else if (o instanceof PointonObject) { final int i = o.getDistance(this); if ((i <= mRay) && (i < dm)) { PtOnObject = o; raym = mRay; dm = i; } } } if (PtObject != null) { CurrentMagnetObject = PtObject; CurrentMagnetRay = rayp; } else if (PtOnObject != null) { CurrentMagnetObject = PtOnObject; CurrentMagnetRay = raym; } else { CurrentMagnetObject = null; CurrentMagnetRay = Integer.MIN_VALUE; } } public ConstructionObject getCurrentMagnetObject() { return CurrentMagnetObject; } public void followMagnetObject() { if (CurrentMagnetObject != null) { if (CurrentMagnetObject instanceof PointObject) { final PointObject pt = (PointObject) CurrentMagnetObject; if (CurrentMagnetRay > 0) { setXY(pt.getX(), pt.getY()); } } else if (CurrentMagnetObject instanceof PointonObject) { final PointonObject pt = (PointonObject) CurrentMagnetObject; pt.project(this); } } magnet(); } @Override public int getDistance(final PointObject P) { final double d = Math .sqrt(((getX() - P.getX()) * (getX() - P.getX()) + (getY() - P .getY()) * (getY() - P.getY()))); return (int) Math.round(d * Cn.getPixel()); } public void project(final ConstructionObject o) { if (!(o instanceof PointonObject)) { return; } ((PointonObject) o).project(this); if (UseAlpha) { AlphaValid = true; } } public void project(final ConstructionObject o, final double alpha) { ((PointonObject) o).project(this, alpha); } @Override public void edit(final ZirkelCanvas zc) { if (!rene.zirkel.Zirkel.IsApplet) { eric.JGlobals.EditObject(this); return; } final ObjectEditDialog d = new PointEditDialog(zc, this); d.setVisible(true); zc.repaint(); if ((EX != null && !EX.isValid())) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, EX.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } else if ((EY != null && !EY.isValid())) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, EY.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } validate(); if (d.wantsMore()) { new EditConditionals(zc.getFrame(), this); validate(); } } @Override public void printArgs(final XmlWriter xml) { updateText(); updateMagnetObjects(); if (Bound != null) { xml.printArg("on", Bound.getName()); if (KeepInside) { xml.printArg("inside", "true"); } } if (magnetObjects.size() > 0) { xml.printArg("magnetobjs", getMagnetObjectsString()); xml.printArg("magnetd", "" + magnetRayExp.toString()); } if (haveBoundOrder()) { xml.printArg("boundorder", String.valueOf(BoundOrder)); } if (Fixed && EX != null) { xml.printArg("x", EX.toString()); xml.printArg("actx", "" + X); } else { if (Bound != null && AlphaValid && UseAlpha) { xml.printArg("alpha", "" + Alpha); } xml.printArg("x", "" + X); } if (Fixed && EY != null) { xml.printArg("y", EY.toString()); xml.printArg("acty", "" + Y); } else { xml.printArg("y", "" + Y); } printType(xml); if (Fixed) { xml.printArg("fixed", "true"); } if (Increment > 1e-4) { xml.printArg("increment", "" + getIncrement()); } } public void printType(final XmlWriter xml) { if (Type != 0) { switch (Type) { case DIAMOND: xml.printArg("shape", "diamond"); break; case CIRCLE: xml.printArg("shape", "circle"); break; case DOT: xml.printArg("shape", "dot"); break; case CROSS: xml.printArg("shape", "cross"); break; case DCROSS: xml.printArg("shape", "dcross"); break; } } } @Override public int getType() { return Type; } @Override public void setType(final int type) { Type = type; } public void movedBy(final ConstructionObject o) { MovedBy = o; } @Override public boolean equals(final ConstructionObject o) { if (!(o instanceof PointObject) || !o.valid()) { return false; } final PointObject p = (PointObject) o; return equals(X, p.X) && equals(Y, p.Y); } @Override public String getEX() { if (EX != null) { return EX.toString(); } else { return "" + round(X); } } @Override public String getEY() { if (EY != null) { return EY.toString(); } else { return "" + round(Y); } } public boolean isOn(final ConstructionObject o) { if (Bound != null) { return o == Bound; } return o.contains(this); } @Override public void translate() { if (Bound != null) { Bound = Bound.getTranslation(); } else if (Fixed) { try { setFixed(EX.toString(), EY.toString()); EX.translate(); EY.translate(); } catch (final Exception e) { } } magnetRayExp.translate(); translateMagnetObjects(); } @Override public Enumeration depending() { super.depending(); if (Bound != null) { DL.add(Bound); } if (Fixed) { if (EX != null) { EX.addDep(this); } if (EY != null) { EY.addDep(this); } } return DL.elements(); } @Override public void snap(final ZirkelCanvas zc) { final double d = zc.getGridSize() / 2; X = Math.round(X / d) * d; Y = Math.round(Y / d) * d; updateText(); } @Override public void updateCircleDep() { if (Bound != null && Bound instanceof PrimitiveCircleObject) { ((PrimitiveCircleObject) Bound).addDep(this); } if (Bound != null && Bound instanceof PrimitiveLineObject) { ((PrimitiveLineObject) Bound).addDep(this); } } public boolean isPointOn() { return Bound != null; } public boolean isPointOnOrMagnet() { return (Bound != null) || (CurrentMagnetObject != null); } public void setLaterBind(final String s) { LaterBind = s; } // for macro constructions : @Override public ConstructionObject copy(final double x, final double y) { ConstructionObject o = null; try { o = (ConstructionObject) clone(); setTranslation(o); o.translateConditionals(); o.translate(); o.setName(); o.updateText(); o.setBreak(false); // o.setTarget(false); // if the target is a Point inside polygon, then try // to follow the mouse ! : if (KeepInside && Bound != null && Bound instanceof AreaObject) { o.move(x, y); } } catch (final Exception e) { } return o; } public void computeBarycentricCoords() { if (Bound != null && Bound instanceof QuadricObject) { final QuadricObject quad = ((QuadricObject) Bound); final PointObject A = quad.P[0]; final PointObject B = quad.P[1]; final PointObject C = quad.P[2]; final double a = B.getX() - A.getX(); final double b = C.getX() - A.getX(); final double c = this.getX() - A.getX(); final double d = B.getY() - A.getY(); final double e = C.getY() - A.getY(); final double f = this.getY() - A.getY(); final double det = a * e - d * b; if (det != 0) { Gx = (c * e - b * f) / det; Gy = (a * f - c * d) / det; BarycentricCoordsInitialzed = true; } } else if (KeepInside && Bound != null && Bound instanceof AreaObject) { final AreaObject area = ((AreaObject) Bound); if (area.V.size() > 2) { final PointObject A = (PointObject) area.V.get(0); final PointObject B = (PointObject) area.V.get(1); final PointObject C = (PointObject) area.V.get(2); final double a = B.getX() - A.getX(); final double b = C.getX() - A.getX(); final double c = this.getX() - A.getX(); final double d = B.getY() - A.getY(); final double e = C.getY() - A.getY(); final double f = this.getY() - A.getY(); final double det = a * e - d * b; if (det != 0) { Gx = (c * e - b * f) / det; Gy = (a * f - c * d) / det; BarycentricCoordsInitialzed = true; } } } } @Override public void setInside(final boolean flag) { KeepInside = flag; computeBarycentricCoords(); } @Override public boolean isInside() { return KeepInside; } @Override public void laterBind(final Construction c) { if (LaterBind.equals("")) { return; } final ConstructionObject o = c.find(LaterBind); if (o != null && ((o instanceof PointonObject) || (o instanceof InsideObject))) { Bound = o; updateText(); validate(); } LaterBind = ""; } public void setAlpha(final double alpha) { Alpha = alpha; AlphaValid = true; } public void setUseAlpha(final boolean flag) { UseAlpha = flag; } public boolean useAlpha() { return UseAlpha; } public double getAlpha() { return Alpha; } @Override public void round() { move(round(X, ZirkelCanvas.LengthsFactor), round(Y, ZirkelCanvas.LengthsFactor)); } /** * For bounded points. */ @Override public void setKeepClose(final double x, final double y) { KeepClose = true; XcOffset = x - X; YcOffset = y - Y; } @Override public boolean canKeepClose() { return true; } public boolean dontUpdate() { return DontUpdate; } public void dontUpdate(final boolean flag) { DontUpdate = flag; } /** * Overwrite setting of default things for macro targets. */ // public void setTargetDefaults () // { super.setTargetDefaults(); // Type=Cn.DefaultType; // } public void startDrag(final double x, final double y) { } public void dragTo(final double x, final double y) { clearBoundOrder(); if ((X == x) && (Y == y)) { return; } // System.out.println(getName()+" : dragTo !"); move(x, y); } public double getOldX() { return 0; } public double getOldY() { return 0; } @Override public void setIncrement(final double inc) { Increment = inc; } @Override public double getIncrement() { return Increment; } @Override public boolean isDriverObject() { if (Bound != null) { return true; } // if (Fixed) return false; return Moveable && !Keep; } public boolean somethingChanged() { return ((getX() != LASTX) || (getY() != LASTY)); } public void clearChanges() { LASTX = getX(); LASTY = getY(); } } ./src/rene/zirkel/objects/CVS/RevisionCache/Evaluator.java#1.30000644000175000017500000000157111314640435022676 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; import rene.zirkel.construction.ConstructionException; public interface Evaluator { public double evaluateF(double x) throws ConstructionException; } ./src/rene/zirkel/objects/CVS/RevisionCache/AreaObject.java#1.50000644000175000017500000004601111257414746022745 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: LineObject.java import java.awt.Color; import java.awt.Frame; import java.util.Enumeration; import java.util.Vector; import javax.swing.JPanel; import rene.gui.Global; import rene.gui.MyLabel; import rene.gui.MyTextField; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.dialogs.EditConditionals; import rene.zirkel.dialogs.ObjectEditDialog; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import eric.JGlobals; class AreaObjectDialog extends ObjectEditDialog { /** * */ private static final long serialVersionUID = 1L; public AreaObjectDialog(final Frame f, final String title, final ConstructionObject o) { super(f, title, o); } @Override public void addFirst(final JPanel P) { final AreaObject AO = (AreaObject) O; final MyTextField A = new MyTextField("" + AO.area(), 30); P.add(new MyLabel(Zirkel.name("edit.area.area"))); P.add(A); A.setEditable(false); } } public class AreaObject extends ConstructionObject implements InsideObject, PointonObject, MoveableObject { static Count N = new Count(); double xpoints[] = new double[3], ypoints[] = new double[3]; double R, X, Y, A; public Vector V; boolean Filled = true; public AreaObject(final Construction c, final Vector v) { super(c); V = v; validate(); updateText(); Global.getParameter("unit.area", ""); } @Override public void setDefaults() { setShowName(Global.getParameter("options.area.shownames", false)); setShowValue(Global.getParameter("options.area.showvalues", false)); setColor(Global.getParameter("options.area.color", 0), Global .getParameter("options.area.pcolor", (Color) null)); setColorType(Global.getParameter("options.area.colortype", 0)); setFilled(Global.getParameter("options.area.filled", true)); setSolid(Global.getParameter("options.area.solid", false)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); // setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); setPartial(Cn.Partial); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.area.shownames", false)); setShowValue(Global.getParameter("options.area.showvalues", false)); setColor(Global.getParameter("options.area.color", 0), Global .getParameter("options.area.pcolor", (Color) null)); setColorType(Global.getParameter("options.area.colortype", 0)); setFilled(Global.getParameter("options.area.filled", true)); setSolid(Global.getParameter("options.area.solid", false)); } @Override public String getTag() { return "Polygon"; } @Override public void updateText() { String Text = Zirkel.name("text.area"); final Enumeration en = V.elements(); boolean first = true; while (en.hasMoreElements()) { final PointObject p = (PointObject) en.nextElement(); if (!first) { Text = Text + ", "; } else { Text = Text + " "; } first = false; Text = Text + p.getName(); } setText(Text); } @Override public void validate() { final Enumeration e = V.elements(); while (e.hasMoreElements()) { if (!((ConstructionObject) e.nextElement()).valid()) { Valid = false; return; } } if (V.size() < 2) { Valid = false; return; } final Enumeration en = V.elements(); double x = 0, y = 0; while (en.hasMoreElements()) { final PointObject p = (PointObject) en.nextElement(); x += p.getX(); y += p.getY(); } X = x / V.size(); Y = y / V.size(); A = area(); Valid = true; } @Override public void edit(final ZirkelCanvas zc) { final ObjectEditDialog d = new AreaObjectDialog(zc.getFrame(), Zirkel .name("edit.area.title"), this); d.setVisible(true); Global.setParameter("unit.area", Unit); zc.repaint(); if (d.wantsMore()) { new EditConditionals(zc.getFrame(), this); validate(); } } @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) { return; } final int n = V.size(); if (xpoints.length != n) { xpoints = new double[n]; ypoints = new double[n]; } if (visible(zc)) { final Enumeration e = V.elements(); int i = 0; while (e.hasMoreElements()) { final PointObject p = (PointObject) e.nextElement(); xpoints[i] = zc.col(p.getX()); ypoints[i] = zc.row(p.getY()); if (i > 0) { if (isStrongSelected() && g instanceof MyGraphics13) { ((MyGraphics13) g).drawMarkerLine(xpoints[i - 1], ypoints[i - 1], xpoints[i], ypoints[i]); } } i++; } if (i > 1) { if (isStrongSelected() && g instanceof MyGraphics13) { ((MyGraphics13) g).drawMarkerLine(xpoints[i - 1], ypoints[i - 1], xpoints[0], ypoints[0]); } } g.fillPolygon(xpoints, ypoints, n, this); } final String s = getDisplayText(); if (!s.equals("")) { // if (getColorIndex() == 0 && getColorType() == THICK) { // g.setColor(Color.gray.brighter()); // } else { // g.setColor(Color.black); // } DisplaysText = true; TX1 = zc.col(X + XcOffset); TY1 = zc.row(Y + YcOffset); setFont(g); drawLabel(g, s); } } @Override public String getDisplayValue() { // return ""+round(Math.abs(A), ZirkelCanvas.LengthsFactor); return JGlobals.getLocaleNumber(Math.abs(A), "lengths"); } @Override public void printArgs(final XmlWriter xml) { if (!Filled) { xml.printArg("filled", "false"); } final Enumeration e = V.elements(); int n = 1; while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); xml.printArg("point" + n, o.getName()); n++; } super.printArgs(xml); } @Override public Enumeration depending() { super.depending(); final Enumeration e = V.elements(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); DL.add(o); } return DL.elements(); } @Override public void translate() { final Enumeration e = V.elements(); final Vector w = new Vector(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); w.addElement(o.getTranslation()); } V = w; } @Override public boolean nearto(final int c, final int r, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } return contains(zc.x(c), zc.y(r)); } @Override public boolean nearto(final int c, final int r, final boolean ignorefill, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } if (contains(zc.x(c), zc.y(r), zc.dx(zc.selectionSize()))) { if (ignorefill) { return OnBoundary; } else { return true; } } return false; } boolean OnBoundary; public boolean contains(final double x, final double y, final double eps) { if (!Valid) { return false; } OnBoundary = false; final PointObject First = (PointObject) V.elementAt(0); PointObject P = First; if (Math.max(Math.abs(P.getX() - x), Math.abs(P.getY() - y)) < eps) { OnBoundary = true; return true; } final Enumeration e = V.elements(); double a = Math.atan2(P.getX() - x, P.getY() - y); double sum = 0; PointObject Q; while (e.hasMoreElements()) { Q = (PointObject) e.nextElement(); if (Math.max(Math.abs(Q.getX() - x), Math.abs(Q.getY() - y)) < eps) { OnBoundary = true; return true; } final double b = Math.atan2(Q.getX() - x, Q.getY() - y); double d = b - a; if (d > Math.PI) { d = d - 2 * Math.PI; } else if (d < -Math.PI) { d = d + 2 * Math.PI; } if (Math.abs(Math.abs(d) - Math.PI) < 0.1) { OnBoundary = true; return true; } a = b; P = Q; sum += d; } Q = First; final double b = Math.atan2(Q.getX() - x, Q.getY() - y); double d = b - a; if (d > Math.PI) { d = d - 2 * Math.PI; } else if (d < -Math.PI) { d = d + 2 * Math.PI; } if (Math.abs(Math.abs(d) - Math.PI) < 0.1) { OnBoundary = true; return true; } sum += d; return Math.abs(sum) >= Math.PI / 2; } public boolean contains(final double x, final double y) { return contains(x, y, 1e-4); } // This one is better than "contains" method : public boolean contains2(final double x, final double y) { if (!Valid) { return false; } final int npoints = V.size(); if (npoints <= 2) { return false; } int hits = 0; final PointObject last = (PointObject) V.get(npoints - 1); double lastx = last.getX(); double lasty = last.getY(); double curx, cury; final Enumeration e = V.elements(); for (int i = 0; i < npoints; lastx = curx, lasty = cury, i++) { final PointObject p = (PointObject) e.nextElement(); curx = p.getX(); cury = p.getY(); if (cury == lasty) { continue; } double leftx; if (curx < lastx) { if (x >= lastx) { continue; } leftx = curx; } else { if (x >= curx) { continue; } leftx = lastx; } double test1, test2; if (cury < lasty) { if (y < cury || y >= lasty) { continue; } if (x < leftx) { hits++; continue; } test1 = x - curx; test2 = y - cury; } else { if (y < lasty || y >= cury) { continue; } if (x < leftx) { hits++; continue; } test1 = x - lastx; test2 = y - lasty; } if (test1 < (test2 / (lasty - cury) * (lastx - curx))) { hits++; } } return ((hits & 1) != 0); } public double area() { if (!Valid) { return -1; } final PointObject First = (PointObject) V.elementAt(0); PointObject P = First; final Enumeration e = V.elements(); double sum = 0; PointObject Q; while (e.hasMoreElements()) { Q = (PointObject) e.nextElement(); sum += (Q.getX() - X) * (P.getY() - Y) - (Q.getY() - Y) * (P.getX() - X); P = Q; } Q = First; sum += (Q.getX() - X) * (P.getY() - Y) - (Q.getY() - Y) * (P.getX() - X); return sum / 2; } @Override public boolean equals(final ConstructionObject o) { if (!(o instanceof AreaObject) || !o.valid()) { return false; } final AreaObject a = (AreaObject) o; final int n = V.size(), m = a.V.size(); final PointObject p[] = new PointObject[n]; V.copyInto(p); final PointObject pa[] = new PointObject[m]; a.V.copyInto(pa); double x0 = 0, y0 = 0; for (int i = 0; i < m; i++) { boolean r = true; int j = 0, kj = 0; while (true) { int k = i + kj; if (k >= m) { k -= m; } if (!p[j].equals(pa[k])) { if (j == 0 || !between(x0, y0, p[j].getX(), p[j].getY(), pa[k] .getX(), pa[k].getY())) { r = false; break; } } else { x0 = p[j].getX(); y0 = p[j].getY(); j++; } kj++; if (j >= n || kj >= m) { break; } } if (r && kj >= m) { return true; } } for (int i = 0; i < m; i++) { boolean r = true; int j = 0, kj = 0; while (true) { int k = i + kj; if (k >= m) { k -= m; } if (!p[n - j - 1].equals(pa[k])) { if (j == 0 || !between(x0, y0, p[n - j - 1].getX(), p[n - j - 1].getY(), pa[k].getX(), pa[k].getY())) { r = false; break; } } else { x0 = p[n - j - 1].getX(); y0 = p[n - j - 1].getY(); j++; } kj++; if (j >= n || kj >= m) { break; } } if (r && kj >= m) { return true; } } return false; } public boolean between(final double x0, final double y0, final double x1, final double y1, final double x, final double y) { double lambda; if (Math.abs(x1 - x0) > Math.abs(y1 - y0)) { lambda = (x - x0) / (x1 - x0); } else { lambda = (y - y0) / (y1 - y0); } return Math.abs(x0 + lambda * (x1 - x0) - x) < 1e-10 && Math.abs(y0 + lambda * (y1 - y0) - y) < 1e-10; } @Override public double getValue() throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } else { return A; } } @Override public boolean maybeTransparent() { return true; } @Override public void setFilled(final boolean flag) { Filled = flag; } @Override public boolean isFilled() { return Filled; } @Override public boolean onlynearto(final int x, final int y, final ZirkelCanvas zc) { return false; } public void keepBaricentricCoords(final PointObject P) { if ((P.BarycentricCoordsInitialzed) && (V.size() > 2)) { final PointObject AA = (PointObject) V.get(0); final PointObject BB = (PointObject) V.get(1); final PointObject CC = (PointObject) V.get(2); final double xa = AA.getX(), ya = AA.getY(); final double xb = BB.getX(), yb = BB.getY(); final double xc = CC.getX(), yc = CC.getY(); final double xm = xa + P.Gx * (xb - xa) + P.Gy * (xc - xa); final double ym = ya + P.Gx * (yb - ya) + P.Gy * (yc - ya); P.move(xm, ym); } else { P.computeBarycentricCoords(); } } @Override public int getDistance(final PointObject P) { final double x = P.getX(), y = P.getY(); final Enumeration e = V.elements(); PointObject p = (PointObject) e.nextElement(); double x1 = p.getX(), y1 = p.getY(); final double xstart = x1, ystart = y1; int count = 0; double xmin = x1, ymin = y1, dmin = 1e20; while (e.hasMoreElements()) { p = (PointObject) e.nextElement(); final double x2 = p.getX(), y2 = p.getY(); final double dx = x2 - x1, dy = y2 - y1; final double r = dx * dx + dy * dy; if (r > 1e-5) { double h = dx * (x - x1) / r + dy * (y - y1) / r; if (h > 1) { h = 1; } else if (h < 0) { h = 0; } final double xh = x1 + h * dx, yh = y1 + h * dy; final double dist = Math.sqrt((x - xh) * (x - xh) + (y - yh) * (y - yh)); if (dist < dmin) { dmin = dist; xmin = xh; ymin = yh; } } count++; x1 = x2; y1 = y2; } final double x2 = xstart, y2 = ystart; final double dx = x2 - x1, dy = y2 - y1; final double r = dx * dx + dy * dy; if (r > 1e-5) { double h = dx * (x - x1) / r + dy * (y - y1) / r; if (h > 1) { h = 1; } else if (h < 0) { h = 0; } final double xh = x1 + h * dx, yh = y1 + h * dy; final double dist = Math.sqrt((x - xh) * (x - xh) + (y - yh) * (y - yh)); if (dist < dmin) { dmin = dist; xmin = xh; ymin = yh; } } final double dd = Math.sqrt((P.getX() - xmin) * (P.getX() - xmin) + (P.getY() - ymin) * (P.getY() - ymin)); return (int) Math.round(dd * Cn.getPixel()); } public void project(final PointObject P) { final double x = P.getX(), y = P.getY(); final Enumeration e = V.elements(); PointObject p = (PointObject) e.nextElement(); double x1 = p.getX(), y1 = p.getY(); final double xstart = x1, ystart = y1; int count = 0; double xmin = x1, ymin = y1, dmin = 1e20, hmin = 0; while (e.hasMoreElements()) { p = (PointObject) e.nextElement(); final double x2 = p.getX(), y2 = p.getY(); final double dx = x2 - x1, dy = y2 - y1; final double r = dx * dx + dy * dy; if (r > 1e-5) { double h = dx * (x - x1) / r + dy * (y - y1) / r; if (h > 1) { h = 1; } else if (h < 0) { h = 0; } final double xh = x1 + h * dx, yh = y1 + h * dy; final double dist = Math.sqrt((x - xh) * (x - xh) + (y - yh) * (y - yh)); if (dist < dmin) { dmin = dist; xmin = xh; ymin = yh; hmin = count + h; } } count++; x1 = x2; y1 = y2; } final double x2 = xstart, y2 = ystart; final double dx = x2 - x1, dy = y2 - y1; final double r = dx * dx + dy * dy; if (r > 1e-5) { double h = dx * (x - x1) / r + dy * (y - y1) / r; if (h > 1) { h = 1; } else if (h < 0) { h = 0; } final double xh = x1 + h * dx, yh = y1 + h * dy; final double dist = Math.sqrt((x - xh) * (x - xh) + (y - yh) * (y - yh)); if (dist < dmin) { dmin = dist; xmin = xh; ymin = yh; hmin = count + h; } } P.move(xmin, ymin); P.setA(hmin); } public void project(final PointObject P, final double alpha) { final int i = (int) Math.floor(alpha); final double h = alpha - i; if (i < 0 || i >= V.size()) { project(P); return; } final PointObject P1 = (PointObject) V.elementAt(i); PointObject P2; if (i == V.size() - 1) { P2 = (PointObject) V.elementAt(0); } else { P2 = (PointObject) V.elementAt(i + 1); } P.setXY(P1.getX() + h * (P2.getX() - P1.getX()), P1.getY() + h * (P2.getY() - P1.getY())); } public double containsInside(final PointObject P) { final boolean inside = contains2(P.getX(), P.getY()); if (inside && OnBoundary) { return 0.5; } else if (inside) { return 1; } return 0; } public boolean keepInside(final PointObject P) { keepBaricentricCoords(P); if (contains2(P.getX(), P.getY())) { return true; } project(P); return false; } public void dragTo(final double x, final double y) { final Enumeration e = V.elements(); int i = 0; while (e.hasMoreElements()) { final PointObject p = (PointObject) e.nextElement(); p.move(xd[i] + (x - x1), yd[i] + (y - y1)); i++; } } @Override public void move(final double x, final double y) { } public boolean moveable() { if (V == null) { return false; } final Enumeration e = V.elements(); while (e.hasMoreElements()) { if (!((PointObject) e.nextElement()).moveable()) { return false; } } return true; } double xd[], yd[], x1, y1; public void startDrag(final double x, final double y) { if (xd == null || xd.length != V.size()) { xd = new double[V.size()]; yd = new double[V.size()]; } final Enumeration e = V.elements(); int i = 0; while (e.hasMoreElements()) { final PointObject p = (PointObject) e.nextElement(); xd[i] = p.getX(); yd[i] = p.getY(); i++; } x1 = x; y1 = y; } public double getOldX() { return 0; } public double getOldY() { return 0; } @Override public void snap(final ZirkelCanvas zc) { if (moveable()) { final Enumeration e = V.elements(); while (e.hasMoreElements()) { final PointObject p = (PointObject) e.nextElement(); p.snap(zc); } } } public boolean canInteresectWith(final ConstructionObject o) { if (o instanceof PointonObject) { final ConstructionObject line = (ConstructionObject) o; final Enumeration e = V.elements(); { final PointObject P = (PointObject) e.nextElement(); if (line.contains(P)) { return false; } } } return true; } public void repulse(final PointObject P) { project(P); } } ./src/rene/zirkel/objects/CVS/RevisionCache/CircleObject.java#1.40000644000175000017500000001344211155152044023262 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: CircleObject.java import java.awt.Frame; import java.util.Enumeration; import rene.dialogs.Warning; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; public class CircleObject extends PrimitiveCircleObject implements MoveableObject { protected PointObject P2; boolean Fixed = false; Expression E; boolean ExpressionFailed; boolean Ellipse = false; public CircleObject(final Construction c, final PointObject p1, final PointObject p2) { super(c, p1); P2 = p2; validate(); updateText(); } @Override public String getTag() { return "Circle"; } @Override public void updateText() { if (Fixed) { if (E == null) { setText(text3(Zirkel.name("text.circle.fixed"), M.getName(), P2 .getName(), "" + round(R))); } else { setText(text3(Zirkel.name("text.circle.fixed"), M.getName(), P2 .getName(), "\"" + E.toString() + "\"")); } } else { setText(text2(Zirkel.name("text.circle"), M.getName(), P2.getName())); } } @Override public void validate() { super.validate(); ExpressionFailed = false; if (!M.valid() || !P2.valid()) { Valid = false; return; } else { Valid = true; X = M.getX(); Y = M.getY(); final double X2 = P2.getX(), Y2 = P2.getY(); // compute normalized vector in the direction of the line: final double DX = X2 - X, DY = Y2 - Y; R = Math.sqrt(DX * DX + DY * DY); if (Fixed) { if (!P2.moveableBy(this)) { Fixed = false; } else { try { double FixR = E.getValue(); if (FixR < 0) { FixR = 0; } if (R < 1e-10) { P2.move(X + FixR, Y); } else { P2.move(X + DX * FixR / R, Y + DY * FixR / R); } R = FixR; P2.movedBy(this); } catch (final Exception e) { R = 0; P2.move(X, Y); ExpressionFailed = true; Valid = false; } } } } } @Override public void printArgs(final XmlWriter xml) { xml.printArg("through", P2.getName()); if (Fixed && E != null) { xml.printArg("fixed", E.toString()); } super.printArgs(xml); } @Override public boolean canFix() { return /* M.moveableBy(this) || */P2.moveableBy(this); } @Override public boolean fixed() { return Fixed; } @Override public void setFixed(final boolean flag, final String s) throws ConstructionException { if (!flag || s.equals("")) { Fixed = false; E = null; } else { E = new Expression(s, getConstruction(), this); if (!E.isValid()) { throw new ConstructionException(E.getErrorText()); } Fixed = true; } updateText(); } @Override public boolean nearto(final int c, final int r, final ZirkelCanvas zc) { if (ExpressionFailed && M.valid()) { return M.nearto(c, r, zc); } return super.nearto(c, r, zc); } @Override public void edit(final ZirkelCanvas zc) { super.edit(zc); if (E != null && !E.isValid()) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, E.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } } public boolean isValidFix() { return E != null && E.isValid(); } @Override public void updateCircleDep() { addDep(P2); } @Override public void translate() { super.translate(); P2 = (PointObject) P2.getTranslation(); try { setFixed(Fixed, E.toString()); E.translate(); } catch (final Exception e) { Fixed = false; } } @Override public String getStringLength() { if (E != null) { return E.toString(); } else { return "" + roundDisplay(R); } } @Override public double getValue() throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } else { return R; } } @Override public Enumeration depending() { super.depending(); if (!Fixed || E == null) { return depset(P2); } else { depset(P2); final Enumeration e = E.getDepList().elements(); while (e.hasMoreElements()) { DL.add((ConstructionObject) e.nextElement()); } return DL.elements(); } } public void setP1P2(final PointObject p1, final PointObject p2) { M = p1; P2 = p2; } public PointObject getP2() { return P2; } @Override public boolean contains(final PointObject p) { return p == P2; } public void dragTo(final double x, final double y) { M.move(x1 + (x - x3), y1 + (y - y3)); P2.move(x2 + (x - x3), y2 + (y - y3)); } @Override public void move(final double x, final double y) { } public boolean moveable() { if (!Fixed && M.moveable() && P2.moveable()) { return true; } return false; } double x1, y1, x2, y2, x3, y3; public void startDrag(final double x, final double y) { x1 = M.getX(); y1 = M.getY(); x2 = P2.getX(); y2 = P2.getY(); x3 = x; y3 = y; } public double getOldX() { return 0; } public double getOldY() { return 0; } @Override public void snap(final ZirkelCanvas zc) { if (moveable()) { M.snap(zc); P2.snap(zc); } } } ./src/rene/zirkel/objects/CVS/RevisionCache/RayObject.java#1.40000644000175000017500000001765011172100412022610 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: SegmentObject.java import rene.gui.Global; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.Count; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.structures.Coordinates; import eric.JGlobals; public class RayObject extends TwoPointLineObject { static Count N = new Count(); public RayObject(final Construction c, final PointObject p1, final PointObject p2) { super(c, p1, p2); validate(); updateText(); } @Override public String getTag() { return "Ray"; } @Override public int getN() { return N.next(); } @Override public void setDefaults() { setShowName(Global.getParameter("options.line.shownames", false)); setShowValue(Global.getParameter("options.line.showvalues", false)); setColor(Global.getParameter("options.line.color", 0)); setColorType(Global.getParameter("options.line.colortype", 0)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Global.getParameter("options.line.large", false)); setBold(Global.getParameter("options.line.bold", false)); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.line.shownames", false)); setShowValue(Global.getParameter("options.line.showvalues", false)); setColor(Global.getParameter("options.line.color", 0)); setColorType(Global.getParameter("options.line.colortype", 0)); setLarge(Global.getParameter("options.line.large", false)); setBold(Global.getParameter("options.line.bold", false)); } @Override public void updateText() { setText(text2(Zirkel.name("text.ray"), P1.getName(), P2.getName())); } @Override public void validate() { if (!P1.valid() || !P2.valid()) { Valid = false; return; } else { Valid = true; X1 = P1.getX(); Y1 = P1.getY(); X2 = P2.getX(); Y2 = P2.getY(); // compute normalized vector in the direction of the line: DX = X2 - X1; DY = Y2 - Y1; R = Math.sqrt(DX * DX + DY * DY); if (R < 1e-10) { Valid = false; return; } DX /= R; DY /= R; } } @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) return; // compute middle of the screen: final double xm = (zc.minX() + zc.maxX()) / 2, ym = (zc.minY() + zc .maxY()) / 2; // compute distance from middle to line: final double d = (xm - X1) * DY - (ym - Y1) * DX; // compute point with minimal distance final double x = xm - d * DY, y = ym + d * DX; // compute size of the screen final double a = Math.max(zc.maxX() - zc.minX(), zc.maxY() - zc.minY()); if (Math.abs(d) > a) return; // compute distance from closest point to source final double b = (x - X1) * DX + (y - Y1) * DY; // compute the two visible endpoints k1 = b - a; k2 = b + a; k12valid = true; if (k1 < 0) k1 = 0; if (k1 >= k2) return; if (Partial && !zc.showHidden() && Dep != null) { final double dd = (zc.maxX() - zc.minX()) / 20; double dmin = -dd, dmax = R + dd; for (int i = 0; i < NDep; i++) { if (!Dep[i].valid() || Dep[i].mustHide(zc)) continue; final double s = project(Dep[i].getX(), Dep[i].getY()); if (s - dd < dmin) dmin = s - dd; else if (s + dd > dmax) dmax = s + dd; } if (k1 < dmin) k1 = dmin; if (k2 > dmax) k2 = dmax; } final double c1 = zc.col(X1 + k1 * DX), c2 = zc.col(X1 + k2 * DX), r1 = zc .row(Y1 + k1 * DY), r2 = zc.row(Y1 + k2 * DY); // paint: if (isStrongSelected() && g instanceof MyGraphics13) { ((MyGraphics13) g).drawMarkerLine(c1, r1, c2, r2); } g.setColor(this); if (visible(zc)) { if (tracked()) zc.UniversalTrack.drawTrackLine(this, c1, r1, c2, r2); g.drawLine(c1, r1, c2, r2, this); } final String s = getDisplayText(); if (!s.equals("")) { g.setLabelColor(this); DisplaysText = true; double c = -b + a / 5; if (c < -a / 5) c = -a / 5; else if (c > a / 5) c = a / 5; if (c < -b + a / 10) c = -b + a / 10; if (KeepClose) { final double side = (YcOffset < 0) ? 1 : -1; drawLabel(g, s, zc, X1 + XcOffset * (X2 - X1), Y1 + XcOffset * (Y2 - Y1), side * DX, side * DY, 0, 0); } else drawLabel(g, s, zc, x + c * DX, y + c * DY, DX, DY, XcOffset, YcOffset); } } @Override public boolean canKeepClose() { return true; } @Override public void setKeepClose(final double x, final double y) { KeepClose = true; XcOffset = (x - X1) / R * DX + (y - Y1) / R * DY; YcOffset = (x - X1) / R * DY - (y - Y1) / R * DX; } @Override public String getDisplayValue() { return JGlobals.getLocaleNumber(R, "lengths"); } // // public String getDisplayValue () // { return ""+round(R,ZirkelCanvas.LengthsFactor); // } @Override public boolean nearto(final int c, final int r, final ZirkelCanvas zc) { if (!displays(zc)) return false; // compute point at c,r final double x = zc.x(c), y = zc.y(r); // compute distance from line double d = (x - X1) * DY - (y - Y1) * DX; // compute offset final double o = (x - X1) * DX + (y - Y1) * DY, o1 = (X2 - X1) * DX + (Y2 - Y1) * DY; if (o1 > 0) { if (o < 0) d = Math.sqrt((x - X1) * (x - X1) + (y - Y1) * (y - Y1)); } else { if (o > 0) d = Math.sqrt((x - X1) * (x - X1) + (y - Y1) * (y - Y1)); } // test, if on visible part final double s = project(x, y); if (s < k1 || s > k2) return false; // scale in screen coordinates Value = Math.abs(zc.col(zc.minX() + d) - zc.col(zc.minX())); return Value < zc.selectionSize() * 2; } @Override public void printArgs(final XmlWriter xml) { xml.printArg("from", P1.getName()); xml.printArg("to", P2.getName()); super.printArgs(xml); } @Override public boolean contains(final double x, final double y) { final double a = (x - X1) * DX + (y - Y1) * DY; if (a < 1e-9) return false; return true; } @Override public double project(final double x, final double y) { final double h = super.project(x, y); if (h < 0) return 0; return h; } @Override public boolean equals(final ConstructionObject o) { if (!(o instanceof RayObject) || !o.valid()) return false; final RayObject l = (RayObject) o; return equals(X1, l.X1) && equals(Y1, l.Y1) && equals(DX, l.DX) && equals(DY, l.DY); } public static Coordinates intersect(final PrimitiveLineObject l1, final PrimitiveLineObject l2) // compute the intersection coordinates of two lines { final double det = -l1.DX * l2.DY + l1.DY * l2.DX; if (Math.abs(det) < 1e-10) return null; final double a = (-(l2.X1 - l1.X1) * l2.DY + (l2.Y1 - l1.Y1) * l2.DX) / det; return new Coordinates(l1.X1 + a * l1.DX, l1.Y1 + a * l1.DY); } public static Coordinates intersect(final PrimitiveLineObject l, final PrimitiveCircleObject c) // compute the intersection coordinates of a line with a circle { double x = c.getX(), y = c.getY(); final double r = c.getR(); final double d = (x - l.X1) * l.DY - (y - l.Y1) * l.DX; if (Math.abs(d) > r + 1e-10) return null; x -= d * l.DY; y += d * l.DX; double h = r * r - d * d; if (h > 0) h = Math.sqrt(h); else h = 0; return new Coordinates(x + h * l.DX, y + h * l.DY, x - h * l.DX, y - h * l.DY); } } ./src/rene/zirkel/objects/CVS/RevisionCache/QuadricObject.java#1.40000644000175000017500000004441411242740717023463 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: QuadricObject.java import java.awt.Color; import java.util.Enumeration; import rene.gui.Global; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.Count; import rene.zirkel.dialogs.EditConditionals; import rene.zirkel.dialogs.ObjectEditDialog; import rene.zirkel.expression.Quartic; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.PolygonDrawer; import eric.JGlobals; public class QuadricObject extends ConstructionObject implements PointonObject, MoveableObject { public PointObject P[]; static Count N = new Count(); public double X[]; public QuadricObject(final Construction c, final PointObject p[]) { super(c); P = p; validate(); updateText(); } @Override public void setDefaults() { setShowName(Global.getParameter("options.circle.shownames", false)); setShowValue(Global.getParameter("options.circle.showvalues", false)); setColor(Global.getParameter("options.circle.color", 0), Global .getParameter("options.circle.pcolor", (Color) null)); setColorType(Global.getParameter("options.circle.colortype", 0)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); setPartial(Cn.Partial); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.circle.shownames", false)); setShowValue(Global.getParameter("options.circle.showvalues", false)); setColor(Global.getParameter("options.circle.color", 0), Global .getParameter("options.circle.pcolor", (Color) null)); setColorType(Global.getParameter("options.circle.colortype", 0)); } @Override public String getTag() { return "Quadric"; } @Override public int getN() { return N.next(); } @Override public void updateText() { try { final String Names[] = new String[P.length]; for (int i = 0; i < P.length; i++) { Names[i] = P[i].getName(); } setText(textAny(Zirkel.name("text.quadric"), Names)); } catch (final Exception e) { } } @Override public void validate() { for (int i = 0; i < P.length; i++) { if (!P[i].valid()) { Valid = false; return; } } Valid = true; // Baue Koeffizientenmatrix auf (x^2,y^2,x,y,xy,1): final double A[][] = new double[5][6]; for (int i = 0; i < 5; i++) { final double x = P[i].getX(), y = P[i].getY(); A[i][0] = x * x; A[i][1] = y * y; A[i][2] = x; A[i][3] = y; A[i][4] = x * y; A[i][5] = 1; double sum = 0; for (int j = 0; j < 6; j++) { sum += A[i][j] * A[i][j]; } sum = Math.sqrt(sum); for (int j = 0; j < 6; j++) { A[i][j] /= sum; } } // Gauflverfahren, um auf untere Dreiecksmatrix zu kommen int r = 0; final int colindex[] = new int[6]; // Index der Stufe oder -1 (keine // Stufe) // Iteration ¸ber alle Spalten: for (int c = 0; c < 6; c++) { if (r >= 5) // Schema schon fertig { colindex[c] = -1; continue; } // Berechne Pivotelement mit spaltenweiser Maximumssuche double max = Math.abs(A[r][c]); int imax = r; for (int i = r + 1; i < 5; i++) { final double h = Math.abs(A[i][c]); if (h > max) { max = h; imax = i; } } if (max > 1e-13) { // Vertausche Zeilen: if (imax != r) { final double h[] = A[imax]; A[imax] = A[r]; A[r] = h; } // Mache restliche Spalte zu 0: for (int i = r + 1; i < 5; i++) { final double lambda = A[i][c] / A[r][c]; for (int j = c + 1; j < 6; j++) { A[i][j] -= lambda * A[r][j]; } } colindex[c] = r; r++; } else { colindex[c] = -1; } } // Berechne die x-Werte: X = new double[6]; for (int j = 5; j >= 0; j--) { if (colindex[j] < 0) { X[j] = 1; } else { double h = 0; final int i = colindex[j]; for (int k = j + 1; k < 6; k++) { h += A[i][k] * X[k]; } X[j] = -h / A[i][j]; } } // Normalisiere double sum = 0; for (int i = 0; i <= 5; i++) { sum += Math.abs(X[i]); } if (sum < 1e-10) { Valid = false; } for (int i = 0; i <= 5; i++) { X[i] /= sum; } } @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) { return; } g.setColor(this); // Draw the lower part of the quadrik (minus the root): final double start = zc.minX(); double x = start; final double end = zc.maxX(); final double h = zc.dx(1); boolean valid = false, ptext = false; double c0 = 0, r0 = 0; double ctext = 20, rtext = 20; final PolygonDrawer pd = new PolygonDrawer(g, this); // Draw the lower part of the quadric (plus the root): while (x <= end) { try { final double y = computeLower(x); final double c = zc.col(x), r = zc.row(y); if (valid) { pd.drawTo(c, r); if (!ptext && r0 - r > c - c0 && zc.isInside(x, y)) { ctext = c; rtext = r; ptext = true; } } else { pd.startPolygon(c, r); } c0 = c; r0 = r; valid = true; } catch (final RuntimeException e) { valid = false; } x += h; } pd.finishPolygon(); // Draw the upper part of the quadric (plus the root): x = start - 2 * h; valid = false; while (x <= end + 2 * h) { try { final double y = computeUpper(x); final double c = zc.col(x), r = zc.row(y); if (valid) { pd.drawTo(c, r); // Try to find a position for the label: if (!ptext && r0 - r > c - c0 && zc.isInside(x, y)) { ctext = c; rtext = r; ptext = true; } } else // left edge of quadric, connect with lower part { try { final double y1 = computeLower(x); if (x >= start - h && x <= end + h) { g.drawLine(c, zc.row(y1), c, r, this); } } catch (final RuntimeException e) { } pd.startPolygon(c, r); } c0 = c; r0 = r; valid = true; } catch (final RuntimeException e) // no points in that range { if (valid) // we just left the right edge of the quadric { try { final double y1 = computeLower(x - h); if (x - h >= start - h && x - h <= end + h) { g.drawLine(c0, zc.row(y1), c0, r0, this); } } catch (final RuntimeException ex) { } } valid = false; } x += h; } pd.finishPolygon(); final String s = getDisplayText(); if (!s.equals("")) { g.setLabelColor(this); setFont(g); DisplaysText = true; TX1 = ctext + zc.col(XcOffset) - zc.col(0); TY1 = rtext + zc.row(YcOffset) - zc.row(0); drawLabel(g, s); } } static public String Tags[] = { "x^2", "y^2", "x", "y", "xy" }; // public String getDisplayValue() { // String s=""; // for (int i=0; i<5; i++) { // s=s+helpDisplayValue(i==0, -X[i], Tags[i]); // } // return s+"="+roundDisplay(X[5]); // } @Override public String getDisplayValue() { String s = ""; s += "(" + JGlobals.getLocaleNumber(-X[0], "length"); s += "*"; s += Tags[0] + ")"; for (int i = 1; i < 5; i++) { s += "+"; s += "(" + JGlobals.getLocaleNumber(-X[i], "length"); s += "*"; s += Tags[i] + ")"; // s=s+helpDisplayValue(i==0, -X[i], Tags[i]); } return s + "=" + JGlobals.getLocaleNumber(X[5], "length"); // return s+"="+roundDisplay(X[5]); } @Override public String getEquation() { return getDisplayValue(); } @Override public boolean nearto(final int cc, final int rr, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } final int size = (int) zc.selectionSize(); final double start = zc.minX(); double x = start; final double end = zc.maxX(); final double h = zc.dx(1); while (x <= end) { try { final double y = computeUpper(x); final double c = zc.col(x), r = zc.row(y); if (Math.abs(cc - c) <= size * 3 / 2 && Math.abs(rr - r) <= size * 3 / 2) { return true; } } catch (final Exception e) { } try { final double y = computeLower(x); final double c = zc.col(x), r = zc.row(y); if (Math.abs(cc - c) <= size * 3 / 2 && Math.abs(rr - r) <= size * 3 / 2) { return true; } } catch (final Exception e) { } x += h; } return false; } @Override public void edit(final ZirkelCanvas zc) { final ObjectEditDialog d = new ObjectEditDialog(zc.getFrame(), "", this); d.setVisible(true); zc.repaint(); if (d.wantsMore()) { new EditConditionals(zc.getFrame(), this); validate(); } } public double computeUpper(final double x) { if (Math.abs(X[1]) > 1e-13) { final double p = (X[3] + x * X[4]) / X[1], q = (X[0] * x * x + X[2] * x + X[5]) / X[1]; final double h = p * p / 4 - q; if (h < 0) { throw new RuntimeException(""); } return -p / 2 + Math.sqrt(h); } else { return -(X[0] * x * x + X[2] * x + X[5]) / (X[3] + X[4] * x); } } public double computeLower(final double x) { if (Math.abs(X[1]) > 1e-13) { final double p = (X[3] + x * X[4]) / X[1], q = (X[0] * x * x + X[2] * x + X[5]) / X[1]; final double h = p * p / 4 - q; if (h < 0) { throw new RuntimeException(""); } return -p / 2 - Math.sqrt(h); } else { throw new RuntimeException(""); } } @Override public void printArgs(final XmlWriter xml) { for (int i = 0; i < P.length; i++) { xml.printArg("point" + (i + 1), P[i].getName()); } } @Override public Enumeration depending() { DL.reset(); for (final PointObject element : P) { DL.add(element); } return DL.elements(); } @Override public void translate() { for (int i = 0; i < P.length; i++) { P[i] = (PointObject) P[i].getTranslation(); } } @Override public ConstructionObject copy(final double x, final double y) { try { final QuadricObject o = (QuadricObject) clone(); setTranslation(o); o.P = new PointObject[P.length]; for (int i = 0; i < P.length; i++) { o.P[i] = P[i]; } o.translateConditionals(); o.translate(); o.setName(); o.updateText(); o.setBreak(false); o.setTarget(false); return o; } catch (final Exception e) { return null; } } @Override public boolean onlynearto(final int x, final int y, final ZirkelCanvas zc) { return false; } @Override public boolean equals(final ConstructionObject o) { if (!(o instanceof QuadricObject) || !o.valid()) { return false; } try { for (int i = 0; i < 6; i++) { if (!equals(X[i], ((QuadricObject) o).X[i])) { return false; } } } catch (final RuntimeException e) { return false; } return true; } @Override public boolean hasUnit() { return false; } public void keepBaricentricCoords(final PointObject P) { if (!P.isPointOn()) { return; } if (P.BarycentricCoordsInitialzed) { final PointObject AA = this.P[0]; final PointObject BB = this.P[1]; final PointObject CC = this.P[2]; final double xa = AA.getX(), ya = AA.getY(); final double xb = BB.getX(), yb = BB.getY(); final double xc = CC.getX(), yc = CC.getY(); final double xm = xa + P.Gx * (xb - xa) + P.Gy * (xc - xa); final double ym = ya + P.Gx * (yb - ya) + P.Gy * (yc - ya); P.move(xm, ym); } else { P.computeBarycentricCoords(); } } @Override public int getDistance(final PointObject P) { final double a = X[0], b = X[1], c = X[2], d = X[3], e = X[4], r = X[5]; final double xc = P.getX(), yc = P.getY(); if (Math.abs(a * xc * xc + b * yc * yc + c * xc + d * yc + e * xc * yc + r) < 1e-13) // close enough { return 0; } final double t[] = new double[5], s[] = new double[5]; // Coefficients for fourth order polynomial for lambda (Lagrange factor) // Minimize (x-xc)^2+(y-yc)^2 with a*x^2+b*y^2+c*x+d*y+e*x*y+r=0 // Computed with Maple t[0] = a * e * e * d * d - 4 * a * b * b * c * c + 4 * a * e * d * b * c - 4 * b * a * a * d * d + b * c * c * e * e - c * Math.pow(e, 3) * d + r * Math.pow(e, 4) - 8 * r * e * e * b * a + 16 * r * b * b * a * a; t[1] = 8 * b * b * c * c + 8 * a * a * d * d - 8 * e * d * b * c - 8 * a * d * c * e + 8 * r * e * e * b + 8 * a * b * c * c + 8 * b * a * d * d + 8 * r * e * e * a - 32 * r * b * b * a - 32 * r * b * a * a; t[2] = 12 * e * d * c + 16 * r * b * b - 4 * b * d * d - 8 * r * e * e + 4 * e * e * d * yc + 16 * b * b * xc * c - 16 * b * c * c - 16 * a * d * d - 4 * a * c * c + 16 * r * a * a + 16 * a * a * d * yc + 4 * xc * e * e * c - 8 * e * d * b * xc - 8 * e * yc * b * c - 8 * a * d * xc * e - 8 * a * yc * c * e + 16 * a * b * b * xc * xc - 4 * a * e * e * yc * yc + 16 * b * a * a * yc * yc - 4 * b * xc * xc * e * e + 4 * Math.pow(e, 3) * yc * xc + 64 * r * b * a - 16 * a * b * xc * e * yc; t[3] = -32 * r * b + 8 * d * d + 8 * c * c + 16 * e * d * xc + 8 * e * e * yc * yc + 8 * xc * xc * e * e - 32 * r * a - 32 * b * xc * c + 16 * e * yc * c - 32 * a * d * yc - 32 * a * b * xc * xc - 32 * b * a * yc * yc; t[4] = 16 * b * yc * yc + 16 * d * yc + 16 * c * xc + 16 * xc * e * yc + 16 * r + 16 * a * xc * xc; final int k = Quartic.solve(t, s); // System.out.println(k+"Solutions found."); double dmin = 1e30, xmin = xc, ymin = yc; for (int i = 0; i < k; i++) // Choose closest solution of Lagrange // equation { final double l = s[i]; // Solve for x,y when lambda is known. // Computed with Maple final double px = -(-e * d + 4 * b * l * xc - 2 * e * l * yc - 4 * l * l * xc + 2 * b * c - 2 * l * c) / (-e * e + 4 * b * a - 4 * b * l - 4 * l * a + 4 * l * l); final double py = -(2 * a * d + 4 * a * l * yc - 2 * l * d - 4 * l * l * yc - 2 * l * xc * e - c * e) / (-e * e + 4 * b * a - 4 * b * l - 4 * l * a + 4 * l * l); final double dist = (px - xc) * (px - xc) + (py - yc) * (py - yc); if (dist < dmin) { dmin = dist; xmin = px; ymin = py; } } final double dd = Math.sqrt((P.getX() - xmin) * (P.getX() - xmin) + (P.getY() - ymin) * (P.getY() - ymin)); return (int) Math.round(dd * Cn.getPixel()); } public void project(final PointObject P) { keepBaricentricCoords(P); final double a = X[0], b = X[1], c = X[2], d = X[3], e = X[4], r = X[5]; final double xc = P.getX(), yc = P.getY(); if (Math.abs(a * xc * xc + b * yc * yc + c * xc + d * yc + e * xc * yc + r) < 1e-13) // close enough { return; } final double t[] = new double[5], s[] = new double[5]; // Coefficients for fourth order polynomial for lambda (Lagrange factor) // Minimize (x-xc)^2+(y-yc)^2 with a*x^2+b*y^2+c*x+d*y+e*x*y+r=0 // Computed with Maple t[0] = a * e * e * d * d - 4 * a * b * b * c * c + 4 * a * e * d * b * c - 4 * b * a * a * d * d + b * c * c * e * e - c * Math.pow(e, 3) * d + r * Math.pow(e, 4) - 8 * r * e * e * b * a + 16 * r * b * b * a * a; t[1] = 8 * b * b * c * c + 8 * a * a * d * d - 8 * e * d * b * c - 8 * a * d * c * e + 8 * r * e * e * b + 8 * a * b * c * c + 8 * b * a * d * d + 8 * r * e * e * a - 32 * r * b * b * a - 32 * r * b * a * a; t[2] = 12 * e * d * c + 16 * r * b * b - 4 * b * d * d - 8 * r * e * e + 4 * e * e * d * yc + 16 * b * b * xc * c - 16 * b * c * c - 16 * a * d * d - 4 * a * c * c + 16 * r * a * a + 16 * a * a * d * yc + 4 * xc * e * e * c - 8 * e * d * b * xc - 8 * e * yc * b * c - 8 * a * d * xc * e - 8 * a * yc * c * e + 16 * a * b * b * xc * xc - 4 * a * e * e * yc * yc + 16 * b * a * a * yc * yc - 4 * b * xc * xc * e * e + 4 * Math.pow(e, 3) * yc * xc + 64 * r * b * a - 16 * a * b * xc * e * yc; t[3] = -32 * r * b + 8 * d * d + 8 * c * c + 16 * e * d * xc + 8 * e * e * yc * yc + 8 * xc * xc * e * e - 32 * r * a - 32 * b * xc * c + 16 * e * yc * c - 32 * a * d * yc - 32 * a * b * xc * xc - 32 * b * a * yc * yc; t[4] = 16 * b * yc * yc + 16 * d * yc + 16 * c * xc + 16 * xc * e * yc + 16 * r + 16 * a * xc * xc; final int k = Quartic.solve(t, s); // System.out.println(k+"Solutions found."); double dmin = 1e30, xmin = xc, ymin = yc; for (int i = 0; i < k; i++) // Choose closest solution of Lagrange // equation { final double l = s[i]; // Solve for x,y when lambda is known. // Computed with Maple final double px = -(-e * d + 4 * b * l * xc - 2 * e * l * yc - 4 * l * l * xc + 2 * b * c - 2 * l * c) / (-e * e + 4 * b * a - 4 * b * l - 4 * l * a + 4 * l * l); final double py = -(2 * a * d + 4 * a * l * yc - 2 * l * d - 4 * l * l * yc - 2 * l * xc * e - c * e) / (-e * e + 4 * b * a - 4 * b * l - 4 * l * a + 4 * l * l); final double dist = (px - xc) * (px - xc) + (py - yc) * (py - yc); if (dist < dmin) { dmin = dist; xmin = px; ymin = py; } } P.move(xmin, ymin); } public void project(final PointObject P, final double alpha) { project(P); } public void dragTo(final double x, final double y) { for (int i = 0; i < 5; i++) { P[i].move(xd[i] + (x - x1), yd[i] + (y - y1)); } } @Override public void move(final double x, final double y) { } public boolean moveable() { for (int i = 0; i < 5; i++) { if (!P[i].moveable()) { return false; } } return true; } double xd[], yd[], x1, y1; public void startDrag(final double x, final double y) { if (xd == null) { xd = new double[5]; yd = new double[5]; } for (int i = 0; i < 5; i++) { xd[i] = P[i].getX(); yd[i] = P[i].getY(); } x1 = x; y1 = y; } public double getOldX() { return 0; } public double getOldY() { return 0; } @Override public void snap(final ZirkelCanvas zc) { if (moveable()) { for (int i = 0; i < 5; i++) { P[i].snap(zc); } } } public boolean canInteresectWith(final ConstructionObject o) { return true; } public void repulse(final PointObject P) { project(P); } } ./src/rene/zirkel/objects/CVS/RevisionCache/EquationXYObject.java#1.50000644000175000017500000003511511242742500024130 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; import java.util.Enumeration; import java.util.Vector; import rene.gui.Global; import rene.util.xml.XmlWriter; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.structures.Coordinates; /** * * @author erichake */ public class EquationXYObject extends ConstructionObject implements PointonObject { Vector V=new Vector(); // Number of horizontal divisions for the full zero search algorithm : int Dhor=100; // canvas left,top,width,height : double Wl=0, Wt=0, Ww=0, Wh=0; Construction C; Expression EY=null; double X[]={0, 0}; String Var[]={"x", "y"}; public EquationXYObject(final Construction c, final String eq) { super(c); EY=new Expression(eq, c, this, Var); updateText(); C=c; } public EquationXYObject(final Construction c, final String eq, final int d) { this(c, eq); Dhor=d; } public int getDhor() { return Dhor; } public void setDhor(final int newDHor) { Dhor=newDHor; compute(); updateText(); } @Override public void setDefaults() { setShowName(Global.getParameter("options.locus.shownames", false)); setShowValue(Global.getParameter("options.locus.showvalues", false)); setColor(Global.getParameter("options.locus.color", 0)); setColorType(Global.getParameter("options.locus.colortype", 0)); setFilled(Global.getParameter("options.locus.filled", false)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.locus.shownames", false)); setShowValue(Global.getParameter("options.locus.showvalues", false)); setColor(Global.getParameter("options.locus.color", 0)); setColorType(Global.getParameter("options.locus.colortype", 0)); setFilled(Global.getParameter("options.locus.filled", false)); } public void setEquation(final String eq, final ZirkelCanvas zc) { EY=new Expression(eq, C, this, Var); compute(); updateText(); } public double getValue(final String var) throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } return (var.equals("x"))?X[0]:X[1]; } public double evaluateF(final double x, final double y) throws ConstructionException { X[0]=x; X[1]=y; try { return EY.getValue(); } catch (final Exception e) { throw new ConstructionException(""); } } public void compute() { Wl=C.getX()-C.getW(); Wt=C.getY()-C.getH()/2; Ww=2*C.getW(); Wh=C.getH(); searchZerosSegments(); } public void searchZerosSegments() { V.clear(); final double dx=Ww/Dhor; final double dy=dx*Math.sqrt(3)/2; final int xn=Dhor+2; final int yn=(int) (Wh/dy)+1; final double[] x=new double[xn+1]; final double[] y=new double[yn+1]; final double[][] z=new double[xn+1][yn+1]; for (int i=0; i<=xn; i++) { x[i]=Wl-dx+i*dx; } for (int j=0; j<=yn; j++) { y[j]=Wt+j*dy; } for (int i=0; i<=xn; i++) { for (int j=0; j<=yn; j++) { xv[0]=x[i]; xv[1]=y[j]; if (j%2==0) { xv[0]+=dx/2; } try { z[i][j]=evaluateF(xv[0], xv[1]); } catch (final Exception e) { z[i][j]=0; } } } for (int i=0; i<=xn-1; i++) { for (int j=0; j<=yn-1; j++) { if (j%2==0) { searchOneZerosSegment(V, x[i]+dx/2, y[j], z[i][j], x[i], y[j+1], z[i][j+1], x[i+1], y[j+1], z[i+1][j+1]); searchOneZerosSegment(V, x[i]+dx/2, y[j], z[i][j], x[i+1]+dx/2, y[j], z[i+1][j], x[i+1], y[j+1], z[i+1][j+1]); } else { searchOneZerosSegment(V, x[i], y[j], z[i][j], x[i+1], y[j], z[i+1][j], x[i]+dx/2, y[j+1], z[i][j+1]); searchOneZerosSegment(V, x[i+1], y[j], z[i+1][j], x[i+1]-dx/2, y[j+1], z[i][j+1], x[i+1]+dx/2, y[j+1], z[i+1][j+1]); } } } } public void searchOneZerosSegment(final Vector v, final double x1, final double y1, final double z1, final double x2, final double y2, final double z2, final double x3, final double y3, final double z3) { if (z1*z2<0) { double l1=z2/(z2-z1); l1=fix(x1, y1, z1, x2, y2, z2, l1); final double m1=1-l1; if (z1*z3<0) { double l2=z3/(z3-z1); l2=fix(x1, y1, z1, x3, y3, z3, l2); final double m2=1-l2; v.add(new Coordinates(l1*x1+m1*x2, l1*y1+m1*y2, l2*x1+m2*x3, l2*y1+m2*y3)); } else { double l2=z3/(z3-z2); l2=fix(x2, y2, z2, x3, y3, z3, l2); final double m2=1-l2; v.add(new Coordinates(l1*x1+m1*x2, l1*y1+m1*y2, l2*x2+m2*x3, l2*y2+m2*y3)); } } else if (z1*z3<0) { double l1=z3/(z3-z1); l1=fix(x1, y1, z1, x3, y3, z3, l1); final double m1=1-l1; double l2=z3/(z3-z2); l2=fix(x2, y2, z2, x3, y3, z3, l2); final double m2=1-l2; v.add(new Coordinates(l1*x1+m1*x3, l1*y1+m1*y3, l2*x2+m2*x3, l2*y2+m2*y3)); } } double xv[]=new double[2]; public double fix(final double x1, final double y1, final double z1, final double x2, final double y2, final double z2, double l1) { try { final double z=evaluateF(x1*l1+x2*(1-l1), y1*l1+y2*(1-l1)); if (Math.abs(z)>(Math.abs(z1)+Math.abs(z2))*1e-5) { final double mu=1-l1, mu2=mu*mu, mu3=mu2*mu, mu4=mu3*mu; final double h=Math.sqrt(mu4*z2*z2+((-2*mu4+4*mu3-2*mu2)*z1-2*mu2*z)*z2+(mu4-4*mu3+6*mu2-4*mu+1)*z1*z1+(-2*mu2+4*mu-2)*z*z1+z*z); final double h1=(mu2*z2-mu2*z1+z1-z+h)/(2*(mu*z2-mu*z1+z1-z)); final double h2=(mu2*z2-mu2*z1+z1-z-h)/(2*(mu*z2-mu*z1+z1-z)); if (h1>=0&&h1<=1) { l1=1-h1; } else if (h2>=0&&h2<=1) { l1=1-h2; } } } catch (final Exception e) { } return l1; } @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid||mustHide(zc)) { return; } Coordinates c1; g.setColor(this); final Enumeration e=V.elements(); while (e.hasMoreElements()) { c1=(Coordinates) e.nextElement(); g.drawLine(zc.col(c1.X), zc.row(c1.Y), zc.col(c1.X1), zc.row(c1.Y1), this); } } @Override public boolean nearto(final int cc, final int rr, final ZirkelCanvas zc) { final Enumeration e=V.elements(); Coordinates c1; while (e.hasMoreElements()) { c1=(Coordinates) e.nextElement(); if (((Math.abs(zc.col(c1.X)-cc)+Math.abs(zc.row(c1.Y)-rr))<5)||((Math.abs(zc.col(c1.X1)-cc)+Math.abs(zc.row(c1.Y1)-rr))<5)) { return true; } } return false; } public int getDistance(final PointObject P) { xx=P.getX(); yy=P.getY(); Coordinates c; double dd, dm=0, xm1=0, ym1=0, zm1=0, xm2=0, ym2=0, zm2=0; // search the closer segment [M1M2] : final Enumeration e=V.elements(); if (e.hasMoreElements()) { c=(Coordinates) e.nextElement(); xm1=c.X; ym1=c.Y; xm2=c.X1; ym2=c.Y1; dm=Math.sqrt((c.X-xx)*(c.X-xx)+(c.Y-yy)*(c.Y-yy))+Math.sqrt((c.X1-xx)*(c.X1-xx)+(c.Y1-yy)*(c.Y1-yy))-Math.sqrt((c.X-c.X1)*(c.X-c.X1)+(c.Y-c.Y1)*(c.Y-c.Y1)); } else { return Integer.MAX_VALUE; } while (e.hasMoreElements()) { c=(Coordinates) e.nextElement(); dd=Math.sqrt((c.X-xx)*(c.X-xx)+(c.Y-yy)*(c.Y-yy))+Math.sqrt((c.X1-xx)*(c.X1-xx)+(c.Y1-yy)*(c.Y1-yy))-Math.sqrt((c.X-c.X1)*(c.X-c.X1)+(c.Y-c.Y1)*(c.Y-c.Y1)); if (dd. */ package rene.zirkel.objects; // file: Functionbject.java import java.awt.Checkbox; import java.awt.Color; import java.awt.FontMetrics; import java.awt.Frame; import java.awt.TextField; import java.awt.event.FocusEvent; import java.util.Enumeration; import java.util.StringTokenizer; import javax.swing.JPanel; import rene.dialogs.Warning; import rene.gui.Global; import rene.gui.IconBar; import rene.gui.MyLabel; import rene.gui.TextFieldAction; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.dialogs.EditConditionals; import rene.zirkel.dialogs.ObjectEditDialog; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.MyGraphics; import eric.bar.JProperties; class FunctionEditDialog extends ObjectEditDialog { /** * */ private static final long serialVersionUID = 1L; TextField Var, EY, X, Y; IconBar IC; ZirkelCanvas ZC; Checkbox Fixed; public FunctionEditDialog(final ZirkelCanvas zc, final UserFunctionObject o) { super(zc.getFrame(), Zirkel.name("edit.function.title"), o, "function"); ZC = zc; } @Override public void addFirst(final JPanel P) { final UserFunctionObject f = (UserFunctionObject) O; Var = new TextFieldAction(this, "var", "" + f.getVar(), 30); P.add(new MyLabel(Zirkel.name("function.vars"))); P.add(Var); EY = new TextFieldAction(this, "ey", "" + f.getEY(), 30); P.add(new MyLabel(Zirkel.name("function.f"))); P.add(EY); X = new TextFieldAction(this, "X", "" + f.round(f.getX())); P.add(new MyLabel(Zirkel.name("edit.point.x"))); P.add(X); Y = new TextFieldAction(this, "Y", "" + f.round(f.getY())); P.add(new MyLabel(Zirkel.name("edit.point.y"))); P.add(Y); Fixed = new Checkbox(""); Fixed.setState(f.fixed()); P.add(new MyLabel(Zirkel.name("edit.fixed"))); P.add(Fixed); if (f.fixed()) { X.setText(f.getEXpos()); Y.setText(f.getEYpos()); } } @Override public void setAction() { final UserFunctionObject f = (UserFunctionObject) O; f.setExpressions(Var.getText(), EY.getText()); try { final double x = new Double(X.getText()).doubleValue(); final double y = new Double(Y.getText()).doubleValue(); f.move(x, y); } catch (final Exception e) { } if (Fixed.getState() == true) { f.setFixed(X.getText(), Y.getText()); } else { try { final double x = new Expression(X.getText(), f .getConstruction(), f).getValue(); final double y = new Expression(Y.getText(), f .getConstruction(), f).getValue(); f.move(x, y); f.setFixed(false); } catch (final Exception e) { } } } @Override public void focusGained(final FocusEvent e) { Var.requestFocus(); } } /** * @author Rene * * This class is for function of several variables. Those functions * cannot be drawn at all. */ public class UserFunctionObject extends ConstructionObject implements MoveableObject, DriverObject, Evaluator { static Count N = new Count(); Expression EY = null; double X[] = { 0 }; String Var[] = { "x" }; protected double Xpos, Ypos; protected boolean Fixed; protected Expression EXpos, EYpos; String LASTE = ""; public UserFunctionObject(final Construction c) { super(c); validate(); updateText(); N.reset(); } @Override public void setDefaults() { setShowName(Global.getParameter("options.text.shownames", false)); setShowValue(Global.getParameter("options.text.showvalues", false)); setColor(Global.getParameter("options.text.color", 0), Global .getParameter("options.text.pcolor", (Color) null)); setColorType(Global.getParameter("options.text.colortype", 0)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); setPartial(Cn.Partial); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.text.shownames", false)); setShowValue(Global.getParameter("options.text.showvalues", false)); setColor(Global.getParameter("options.text.color", 0), Global .getParameter("options.text.pcolor", (Color) null)); setColorType(Global.getParameter("options.text.colortype", 0)); } @Override public String getTag() { return "Function"; } @Override public int getN() { return N.next(); } @Override public void updateText() { setText(getDisplayValue()); } public boolean isValid() { return Valid; } @Override public void validate() { if (EY != null) { Valid = EY.isValid(); } else { Valid = false; } if (Fixed && EXpos != null && EXpos.isValid()) { try { Xpos = EXpos.getValue(); } catch (final Exception e) { Valid = false; return; } } if (Fixed && EYpos != null && EYpos.isValid()) { try { Ypos = EYpos.getValue(); } catch (final Exception e) { Valid = false; return; } } } public void setExpressions(final String t, final String ey) { final StringTokenizer tok = new StringTokenizer(t); Var = new String[tok.countTokens()]; X = new double[tok.countTokens()]; int i = 0; while (tok.hasMoreTokens()) { Var[i++] = tok.nextToken(); } EY = new Expression(ey, getConstruction(), this, Var); validate(); } @Override public String getEY() { if (EY != null) { return EY.toString(); } else { return "0"; } } double C, R, W, H; @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) { return; } final FontMetrics fm = g.getFontMetrics(); H = fm.getHeight(); C = zc.col(Xpos); R = zc.row(Ypos); g.setColor(this); setFont(g); final String s = AngleObject.translateToUnicode(getDisplayValue()); g.drawString(s, C, R); R -= H; W = fm.stringWidth(s); } @Override public double getValue() throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } return X[0]; } public double getValue(final String var) throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } for (int i = 0; i < Var.length; i++) { if (var.equals(Var[i])) { return X[i]; } } return X[0]; } @Override public String getDisplayValue() { String s = ""; if (showName()) { if (getAlias() != null) { s = getAlias() + " : "; } s = s + getName() + "(" + Var[0]; for (int i = 1; i < Var.length; i++) { s = s + "," + Var[i]; } s = s + ")"; if (showValue()) { s = s + "="; } } if (showValue()) { s = s + ((EY == null) ? "" : JProperties.Point_To_Comma(EY .toString(), Cn, true)); } return s; } @Override public boolean nearto(final int cc, final int rr, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } return C <= cc && R <= rr && cc <= C + W && rr <= R + H; } public boolean EditAborted; @Override public void edit(final ZirkelCanvas zc) { ObjectEditDialog d; if (!rene.zirkel.Zirkel.IsApplet) { EditAborted = false; eric.JGlobals.EditObject(this); return; } while (true) { d = new FunctionEditDialog(zc, this); d.setVisible(true); EditAborted = false; if (d.isAborted()) { EditAborted = true; break; } else if (!EY.isValid()) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, EY.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } if ((EXpos != null && !EXpos.isValid())) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, EXpos.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } else if ((EYpos != null && !EYpos.isValid())) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, EYpos.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } else { break; } } validate(); updateText(); zc.getConstruction().updateCircleDep(); zc.repaint(); if (d.wantsMore()) { new EditConditionals(zc.getFrame(), this); validate(); } } @Override public void printArgs(final XmlWriter xml) { xml.printArg("f", EY.toString()); if (Fixed && EXpos != null && EXpos.isValid()) { xml.printArg("x", EXpos.toString()); } else { xml.printArg("x", "" + Xpos); } if (Fixed && EYpos != null && EYpos.isValid()) { xml.printArg("y", EYpos.toString()); } else { xml.printArg("y", "" + Ypos); } if (Fixed) { xml.printArg("fixed", "true"); } xml.printArg("var", getVar()); } @Override public void translate() { try { EY = new Expression(EY.toString(), getConstruction(), this, Var); final ConstructionObject O = getTranslation(); setTranslation(this); if (Fixed) { try { setFixed(EXpos.toString(), EYpos.toString()); EXpos.translate(); EYpos.translate(); } catch (final Exception e) { } } validate(); setTranslation(O); } catch (final Exception e) { System.out.println(); System.out.println(getName()); System.out.println(e); e.printStackTrace(); } } @Override public void setFixed(final boolean flag) { Fixed = flag; if (!Fixed) { EXpos = EYpos = null; } updateText(); } @Override public void setFixed(final String x, final String y) { Fixed = true; EXpos = new Expression(x, getConstruction(), this); EYpos = new Expression(y, getConstruction(), this); updateText(); } @Override public boolean fixed() { return Fixed; } @Override public String getEXpos() { if (EXpos != null) { return EXpos.toString(); } else { return "" + round(Xpos); } } @Override public String getEYpos() { if (EYpos != null) { return EYpos.toString(); } else { return "" + round(Ypos); } } @Override public boolean onlynearto(final int x, final int y, final ZirkelCanvas zc) { return false; // return nearto(x,y,zc); } @Override public boolean equals(final ConstructionObject o) { return false; } @Override public Enumeration depending() { DL.reset(); addDepending(EY); if (Fixed) { addDepending(EXpos); addDepending(EYpos); } return DL.elements(); } public void addDepending(final Expression E) { if (E != null) { final Enumeration e = E.getDepList().elements(); while (e.hasMoreElements()) { DL.add((ConstructionObject) e.nextElement()); } } } @Override public boolean hasUnit() { return false; } public double evaluateF(final double x[]) throws ConstructionException { int n = x.length; if (n > X.length) { n = X.length; } for (int i = 0; i < n; i++) { X[i] = x[i]; } for (int i = n; i < X.length; i++) { X[i] = 0; } try { return EY.getValue(); } catch (final Exception e) { throw new ConstructionException(""); } } public double evaluateF(final double x) throws ConstructionException { X[0] = x; for (int i = 1; i < X.length; i++) { X[i] = 0; } try { return EY.getValue(); } catch (final Exception e) { throw new ConstructionException(""); } } public double evaluateF(final double x, final double y) throws ConstructionException { X[0] = x; X[1] = y; for (int i = 2; i < X.length; i++) { X[i] = 0; } try { return EY.getValue(); } catch (final Exception e) { throw new ConstructionException(""); } } @Override public boolean maybeTransparent() { return true; } @Override public boolean canDisplayName() { return true; } @Override public boolean isFilledForSelect() { return false; } public String getVar() { String vars = Var[0]; for (int i = 1; i < Var.length; i++) { vars = vars + " " + Var[i]; } return vars; } public void dragTo(final double x, final double y) { move(oldx + (x - startx), oldy + (y - starty)); } @Override public void move(final double x, final double y) { Xpos = x; Ypos = y; } double oldx, oldy, startx, starty; public boolean moveable() { return !Fixed; } public void startDrag(final double x, final double y) { oldx = Xpos; oldy = Ypos; startx = x; starty = y; } public double getOldX() { return oldx; } public double getOldY() { return oldy; } @Override public double getX() { return Xpos; } @Override public double getY() { return Ypos; } @Override public boolean isDriverObject() { return true; } public boolean somethingChanged() { return (!EY.toString().equals(LASTE)); } public void clearChanges() { LASTE = EY.toString(); } } ./src/rene/zirkel/objects/CVS/RevisionCache/ExpressionObject.java#1.50000644000175000017500000004542111302343434024222 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: PointObject.java import java.awt.Checkbox; import java.awt.Color; import java.awt.FontMetrics; import java.awt.Frame; import java.awt.GridLayout; import java.awt.TextField; import java.awt.event.FocusEvent; import java.util.Enumeration; import javax.swing.JPanel; import rene.dialogs.Warning; import rene.gui.Global; import rene.gui.MyLabel; import rene.gui.MyPanel; import rene.gui.MyTextField; import rene.gui.TextFieldAction; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.dialogs.EditConditionals; import rene.zirkel.dialogs.ObjectEditDialog; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import eric.JGlobals; class ExpressionEditDialog extends ObjectEditDialog { /** * */ private static final long serialVersionUID = 1L; TextFieldAction X, Y; TextField Expression, Prompt, Min, Max; Checkbox Fixed, Slider; ZirkelCanvas ZC; public ExpressionEditDialog(final Frame f, final ZirkelCanvas zc, final ExpressionObject o) { super(f, Zirkel.name("edit.expression.title"), o, "expression"); ZC = zc; } @Override public void focusGained(final FocusEvent e) { Expression.requestFocus(); } @Override public void addFirst(final JPanel P) { final ExpressionObject p = (ExpressionObject) O; X = new TextFieldAction(this, "X", "" + p.round(p.getX())); P.add(new MyLabel(Zirkel.name("edit.point.x"))); P.add(X); Y = new TextFieldAction(this, "Y", "" + p.round(p.getY())); P.add(new MyLabel(Zirkel.name("edit.point.y"))); P.add(Y); Fixed = new Checkbox(""); Fixed.setState(p.fixed()); P.add(new MyLabel(Zirkel.name("edit.fixed"))); P.add(Fixed); if (p.fixed()) { X.setText(p.getEX()); Y.setText(p.getEY()); } final JPanel px = new MyPanel(); px.setLayout(new GridLayout(1, 0)); Slider = new Checkbox(""); Slider.setState(p.isSlider()); P.add(new MyLabel(Zirkel.name("edit.expression.slider"))); px.add(Slider); Min = new TextFieldAction(this, "Min", "" + p.getMin()); Max = new TextFieldAction(this, "Max", "" + p.getMax()); px.add(Min); px.add(Max); P.add(px); Prompt = new MyTextField(p.getPrompt()); P.add(new MyLabel(Zirkel.name("edit.expression.prompt"))); P.add(Prompt); Expression = new TextFieldAction(this, "OK", p.getExpression(), 30); P.add(new MyLabel(Zirkel.name("edit.expression"))); P.add(Expression); } @Override public void doAction(final String o) { if (o.equals("OK")) { if (Fixed != null && X.isChanged() || Y.isChanged()) { Fixed.setState(true); } } super.doAction(o); } @Override public void setAction() { final ExpressionObject p = (ExpressionObject) O; if (Slider.getState()) { p.setSlider(Min.getText(), Max.getText()); if (Expression.getText().equals("")) { Expression.setText(Min.getText()); } } else { p.setSlider(false); } try { final double x = new Double(X.getText()).doubleValue(); final double y = new Double(Y.getText()).doubleValue(); p.move(x, y); } catch (final Exception e) { } try { p.setExpression(Expression.getText(), ZC.getConstruction()); } catch (final Exception e) { } if (Fixed.getState() == true) { p.setFixed(X.getText(), Y.getText()); } else { try { final double x = new Expression(X.getText(), p .getConstruction(), p).getValue(); final double y = new Expression(Y.getText(), p .getConstruction(), p).getValue(); p.move(x, y); p.setFixed(false); } catch (final Exception e) { } } p.setPrompt(Prompt.getText()); } } public class ExpressionObject extends ConstructionObject implements MoveableObject, SimulationObject, DriverObject { protected double X, Y; private static Count N = new Count(); public Expression E; protected Expression EX, EY; protected boolean Fixed; String Prompt = Zirkel.name("expression.value"); protected double CurrentValue = 0; protected boolean CurrentValueValid = true; protected boolean Slider = false; protected Expression SMin, SMax; private String LASTE = ""; public ExpressionObject(final Construction c, final double x, final double y) { super(c); X = x; Y = y; setColor(ColorIndex, SpecialColor); updateText(); setFixed("0"); } @Override public void setDefaults() { setShowName(Global.getParameter("options.text.shownames", false)); setShowValue(true); // setShowValue(Global.getParameter("options.text.showvalues",false)); setColor(Global.getParameter("options.text.color", 0), Global .getParameter("options.text.pcolor", (Color) null)); setColorType(Global.getParameter("options.text.colortype", 0)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); setPartial(Cn.Partial); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.text.shownames", false)); setShowValue(Global.getParameter("options.text.showvalues", false)); setColor(Global.getParameter("options.text.color", 0), Global .getParameter("options.text.pcolor", (Color) null)); setColorType(Global.getParameter("options.text.colortype", 0)); } @Override public String getTag() { return "Expression"; } @Override public int getN() { return N.next(); } @Override public void updateText() { if (E != null) { setText(text3(Zirkel.name("text.expression"), E.toString(), "" + roundDisplay(X), "" + roundDisplay(Y))); } else { setText(text3(Zirkel.name("text.expression"), "", "" + roundDisplay(X), "" + roundDisplay(Y))); } } public double C, R, W, H; // for the expression position public double SC, SR, SW, SH; // for the slider position in screen coord. public double SX, SY, SD; // for the slider scale in x,y-coordinates /** * Paint the expression. Use value, name (i.e. tag), or slider. Remember * slider position for nearto and drags. */ @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { DisplaysText = false; if (!Valid || mustHide(zc)) { return; } C = zc.col(X); R = zc.row(Y); setFont(g); final FontMetrics fm = g.getFontMetrics(); if (isStrongSelected() && g instanceof MyGraphics) { ((MyGraphics13) g).drawMarkerRect(C - 5, R - 5, 10, 10); } g.setColor(this); String s = ""; if (showName()) // shows the tag with or without = ... { s = Prompt; if (showValue()) // =, if value shows and % is not surpressed { if (s.endsWith("_") && s.length() > 1) { s = s.substring(0, s.length() - 1); } else { if (!s.equals("")) s = s + " = "; } } else { s = Prompt; } } if (showValue()) // show the value { try { E.getValue(); double x = round(CurrentValue); if (Slider) { x = round(CurrentValue, 100); } if (Math.abs(x - Math.round(x)) < 1e-10) { s = s + JGlobals.getLocaleNumber((int) x, "edit"); // s = s + (int) x; } else { s = s + JGlobals.getLocaleNumber(x, "edit"); // s = s + x; } } catch (final Exception e) { s = s + "???"; } } s = s + Unit; // add optional unit s = AngleObject.translateToUnicode(s); // translate \a etc. // s=s.replace(".",","); if (s.equals("")) // nothing to show { if (!Slider) { s = "-"; } } W = fm.stringWidth(s); if (!s.equals("")) { setFont(g); R -= fm.getAscent(); H = g.drawStringExtended(s, C, R); W = ((MyGraphics13) g).getW(); } if (Slider) // we draw an additional slider { final int coffset = (int) (4 * zc.pointSize()); R += H; g.drawLine(C, R + coffset / 2, C + 10 * coffset, R + coffset / 2); final double d = getSliderPosition(); final int size = coffset / 4; final double rslider = C + d * 10 * coffset; final double cw = 2 * size + 2; if (getColorType() == THICK) { g.fillOval(rslider - size - 1, R + coffset / 2 - size - 1, cw, cw, true, false, this); } else { g.fillOval(rslider - size - 1, R + coffset / 2 - size - 1, cw, cw, new Color(250, 250, 250)); g.setColor(this); g.drawOval(rslider - size - 1, R + coffset / 2 - size - 1, cw, cw); } // remember position SC = rslider - size; SR = R + coffset / 2 - size; SW = SH = 2 * size; SX = zc.x((int) C); SY = zc.y((int) R + coffset / 2 - size); SD = zc.x((int) C + 10 * coffset) - SX; R -= H; } } /** * Compute the relative position, the slider must be on according to * CurrentValue * * @return 0 <= position <= 1 */ public double getSliderPosition() { try { final double min = SMin.getValue(); final double max = SMax.getValue(); double x = CurrentValue; if (min >= max) { Valid = false; return 0; } if (x < min) { x = min; } if (x > max) { x = max; } return (x - min) / (max - min); } catch (final Exception e) { Valid = false; return 0; } } /** * Set the expression according to the relative value the slider is on. 0 <= * d <= 1. * * @param d */ public void setSliderPosition(final double d) { try { final double min = SMin.getValue(); final double max = SMax.getValue(); if (min >= max) { Valid = false; return; } double value = min + d * (max - min); if (value < min) { value = min; } if (value > max) { value = max; } E.setValue(value); // kills expression and makes it a constant } catch (final Exception e) { Valid = false; } } @Override public boolean nearto(final int x, final int y, final ZirkelCanvas zc) { DragSlider = false; if (Valid && !displays(zc)) { return false; } if (C <= x && x <= C + W && R <= y && y <= R + H) { return true; } if (SC <= x && SR <= y && SC + SW >= x && SR + SH >= y) { DragSlider = true; return true; } return false; } @Override public double getX() { return X; } @Override public double getY() { return Y; } public Expression getExp() { return E; } @Override public void move(final double x, final double y) { X = x; Y = y; } @Override public void snap(final ZirkelCanvas zc) { final double d = zc.getGridSize() / 2; X = Math.round(X / d) * d; Y = Math.round(Y / d) * d; } @Override public void round() { move(round(X, ZirkelCanvas.LengthsFactor), round(Y, ZirkelCanvas.LengthsFactor)); } @Override public void edit(final ZirkelCanvas zc) { if (!rene.zirkel.Zirkel.IsApplet) { eric.JGlobals.EditObject(this); return; } final ObjectEditDialog d = new ExpressionEditDialog(zc.getFrame(), zc, this); d.setVisible(true); zc.repaint(); if (E != null && !E.isValid()) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, E.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } if ((EX != null && !EX.isValid())) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, EX.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } else if ((EY != null && !EY.isValid())) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, EY.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } validate(); if (d.wantsMore()) { new EditConditionals(zc.getFrame(), this); validate(); } } @Override public void printArgs(final XmlWriter xml) { if (Fixed && EX != null && EX.isValid()) { xml.printArg("x", EX.toString()); } else { xml.printArg("x", "" + X); } if (Fixed && EY != null && EY.isValid()) { xml.printArg("y", EY.toString()); } else { xml.printArg("y", "" + Y); } if (E != null) { xml.printArg("value", E.toString()); } else { xml.printArg("value", ""); } xml.printArg("prompt", Prompt); if (Fixed) { xml.printArg("fixed", "true"); } if (Slider) { xml.printArg("slider", "true"); xml.printArg("min", SMin.toString()); xml.printArg("max", SMax.toString()); } } @Override public boolean equals(final ConstructionObject o) { return false; } @Override public void setExpression(final String expr, final Construction c) throws ConstructionException { E = new Expression(expr, c, this); updateText(); } @Override public void setFixed(final String expr) { E = new Expression(expr, getConstruction(), this); updateText(); } @Override public String getExpression() { if (E != null) { return E.toString(); } else { return ""; } } // public Enumeration depending() { // DL.reset(); // if (E != null) { // Enumeration e = E.getDepList().elements(); // while (e.hasMoreElements()) { // DL.add((ConstructionObject) e.nextElement()); // } // } // if (Fixed) { // Enumeration e; // if (EX != null) { // e = EX.getDepList().elements(); // while (e.hasMoreElements()) { // DL.add((ConstructionObject) e.nextElement()); // } // } // if (EY != null) { // e = EY.getDepList().elements(); // while (e.hasMoreElements()) { // DL.add((ConstructionObject) e.nextElement()); // } // } // } // return DL.elements(); // } @Override public Enumeration depending() { DL.reset(); addDepending(E); addDepending(SMin); addDepending(SMax); if (Fixed) { addDepending(EX); addDepending(EY); } return DL.elements(); } public void addDepending(final Expression EE) { if (EE != null) { final Enumeration e = EE.getDepList().elements(); while (e.hasMoreElements()) { DL.add((ConstructionObject) e.nextElement()); } } } @Override public double getValue() throws ConstructionException { if (!CurrentValueValid) { throw new InvalidException(""); } return CurrentValue; } @Override public String getPrompt() { return Prompt; } @Override public void setPrompt(final String prompt) { Prompt = prompt; } @Override public void translate() { if (Slider) { SMin.translate(); SMax.translate(); } else { E.translate(); } if (Fixed) { try { setFixed(EX.toString(), EY.toString()); EX.translate(); EY.translate(); } catch (final Exception e) { } } updateText(); } @Override public void validate() { try { CurrentValue = E.getValue(); CurrentValueValid = true; } catch (final Exception e) { CurrentValueValid = false; } Valid = true; if (Fixed && EX != null && EX.isValid()) { try { X = EX.getValue(); } catch (final Exception e) { Valid = false; return; } } if (Fixed && EY != null && EY.isValid()) { try { Y = EY.getValue(); } catch (final Exception e) { Valid = false; return; } } } @Override public void setFixed(final boolean flag) { Fixed = flag; if (!Fixed) { EX = EY = null; } updateText(); } @Override public void setFixed(final String x, final String y) { Fixed = true; EX = new Expression(x, getConstruction(), this); EY = new Expression(y, getConstruction(), this); updateText(); } @Override public ConstructionObject copy(final double x, final double y) { try { final ExpressionObject o = (ExpressionObject) clone(); setTranslation(o); if (Slider) { o.setSlider(SMin.toString(), SMax.toString()); } else { o.setExpression(E.toString(), getConstruction()); } o.translateConditionals(); o.translate(); o.setName(); o.updateText(); o.setBreak(false); o.setTarget(false); return o; } catch (final Exception e) { return null; } } public boolean moveable() { if (Slider) { return true; } return EX == null && EY == null; } public void reset() { if (E != null) { E.reset(); } } @Override public boolean fixed() { return Fixed; } @Override public String getEX() { if (EX != null) { return EX.toString(); } else { return "" + round(X); } } @Override public String getEY() { if (EY != null) { return EY.toString(); } else { return "" + round(Y); } } public void setCurrentValue(final double x) { CurrentValue = x; CurrentValueValid = true; } // For the simulate function: private double OldE; /** * Set the simulation value, remember the old value. */ public void setSimulationValue(final double x) { OldE = CurrentValue; CurrentValue = x; } /** * Reset the old value. */ public void resetSimulationValue() { CurrentValue = OldE; } /** * Set the slider to min, max und step values. * * @param smin * @param smax * @param sstep */ @Override public void setSlider(final String smin, final String smax) { Slider = true; SMin = new Expression(smin, getConstruction(), this); SMax = new Expression(smax, getConstruction(), this); } /** * Set or clear the slider. * * @param flag */ @Override public void setSlider(final boolean flag) { Slider = flag; } double oldx, oldy, startx, starty; boolean DragSlider; public void startDrag(final double x, final double y) { oldx = X; oldy = Y; startx = x; starty = y; } public void dragTo(final double x, final double y) { if (DragSlider) { setSliderPosition((x - SX) / SD); } else { move(oldx + (x - startx), oldy + (y - starty)); } } public double getOldX() { return oldx; } public double getOldY() { return oldy; } @Override public boolean isSlider() { return Slider; } @Override public String getMin() { if (Slider) { return SMin.toString(); } else { return ("-5"); } } @Override public String getMax() { if (Slider) { return SMax.toString(); } else { return ("5"); } } @Override public String getDisplayValue() { String s = ""; try { E.getValue(); double x = round(CurrentValue); if (Slider) { x = round(CurrentValue, 100); } if (Math.abs(x - Math.round(x)) < 1e-10) { s = s + (int) x; } else { s = s + x; } } catch (final Exception e) { s = s + "???"; } s = s + Unit; // add optional unit return s; } @Override public String getEquation() { if (E == null) { return "???"; } else { return E.toString(); } } @Override public boolean isDriverObject() { return true; } public boolean somethingChanged() { return (!getEquation().equals(LASTE)); } public void clearChanges() { LASTE = getEquation(); } } ./src/rene/zirkel/objects/CVS/RevisionCache/PointonObjectIntersectionObject.java#1.30000644000175000017500000001320611172107324027222 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; import rene.util.xml.XmlWriter; import rene.zirkel.construction.Construction; import rene.zirkel.expression.Secant; /** * An intersection between two object that can bind points on them. The * intersection is computed by projecting the point to both objects and * predicting the intersection point. * * @author Rene */ public class PointonObjectIntersectionObject extends IntersectionObject { public double Eps = 1e-5; private boolean xAxisFunctionIntersection = false, yAxisFunctionIntersection = false; private FunctionObject F = null; public PointonObjectIntersectionObject(final Construction c, final ConstructionObject p1, final ConstructionObject p2) { super(c, p1, p2); if ((p1 instanceof AxisObject) && (p2 instanceof FunctionObject)) { F = (FunctionObject) p2; if (F.getEX().toString().equals("x")) { final AxisObject ax = ((AxisObject) p1); if (ax.DX == 1) { xAxisFunctionIntersection = true; } else { yAxisFunctionIntersection = true; } } } else if ((p2 instanceof AxisObject) && (p1 instanceof FunctionObject)) { F = (FunctionObject) p1; if (F.getEX().toString().equals("x")) { final AxisObject ax = ((AxisObject) p2); if (ax.DX == 1) { xAxisFunctionIntersection = true; } else { yAxisFunctionIntersection = true; } } } } @Override public void validate(final double x, final double y) { setXY(x, y); validate(); } @Override public void printArgs(final XmlWriter xml) { xml.printArg("first", P1.getName()); xml.printArg("second", P2.getName()); xml.printArg("x", "" + getX()); xml.printArg("y", "" + getY()); if (getAway() != null) { if (StayAway) { xml.printArg("awayfrom", getAway().getName()); } else { xml.printArg("closeto", getAway().getName()); } } printType(xml); if (!Restricted) { xml.printArg("valid", "true"); } } /** * Troublesome function to intersect two objects. This is done by projecting * the intersection point to each of the objects in turn. * * To speed up the convergence, a line intersection is computed, where the * lines approximate the objects. */ @Override public void validate() { if (!P1.valid() || !P2.valid()) { Valid = false; } else { Valid = true; } if (!Valid) { return; } if (yAxisFunctionIntersection) { try { setXY(0, F.evaluateF(0)); return; } catch (final Exception ex) { } } if (xAxisFunctionIntersection) { try { double xn = 0; for (int i = 0; i < 5; i++) { double distold = projectOnce(); if (!Valid) { return; } final double dist1 = projectOnce(); if (dist1 >= distold && dist1 < Eps) { break; } distold = dist1; double a = x1 - x; double b = y1 - y; double s = Math.max(Math.abs(a), Math.abs(b)); if (Math.abs(s) > 1e-13) { a /= s; } b /= s; double c = X - x1; double d = Y - y1; s = Math.max(Math.abs(c), Math.abs(d)); if (Math.abs(s) > 1e-13) { c /= s; } d /= s; final double e = a * x1 + b * y1; final double f = c * X + d * Y; final double det = a * d - c * b; if (Math.abs(det) > 1e-13) { xn = (e * d - f * b) / det; final double dist2 = projectOnce(); if (dist2 < dist1) { distold = dist2; } } } setXY(Secant.compute(F, xn - 1e-1, xn + 1e-1, 1e-10), 0); return; } catch (final Exception ex) { } } double distold = projectOnce(); if (!Valid) { return; } for (int i = 0; i < 10; i++) { final double dist1 = projectOnce(); if (dist1 >= distold && dist1 < Eps) { return; } distold = dist1; double a = (x1 - x), b = (y1 - y); double s = Math.max(Math.abs(a), Math.abs(b)); if (Math.abs(s) > 1e-13) { a /= s; } b /= s; double c = (X - x1), d = (Y - y1); s = Math.max(Math.abs(c), Math.abs(d)); if (Math.abs(s) > 1e-13) { c /= s; } d /= s; final double e = a * x1 + b * y1, f = c * X + d * Y; final double det = a * d - c * b; if (Math.abs(det) > 1e-13) { final double xn = (e * d - f * b) / det; final double yn = (a * f - c * e) / det; final double xold = X, yold = Y; setXY(xn, yn); final double dist2 = projectOnce(); if (dist2 > dist1) // interpolation does not work { setXY(xold, yold); } else { distold = dist2; } } } Valid = false; } double x, y, x1, y1; public double projectOnce() { x = X; y = Y; // System.out.println("Before: "+X+" "+Y); ((PointonObject) P1).project(this); // System.out.println("Projected to "+P1.getName()+": "+X+" "+Y); final double dist = Math.max(Math.abs(X - x), Math.abs(Y - y)); x1 = X; y1 = Y; ((PointonObject) P2).project(this); // System.out.println("Projected to "+P2.getName()+": "+X+" "+Y); final double dist1 = Math.max(Math.abs(X - x1), Math.abs(Y - y1)); return Math.max(dist, dist1); } @Override public boolean moveable() { return true; } } ./src/rene/zirkel/objects/CVS/RevisionCache/PointonObjectIntersectionObject.java#1.40000644000175000017500000001335611361642565027244 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; import rene.util.xml.XmlWriter; import rene.zirkel.construction.Construction; import rene.zirkel.expression.Secant; /** * An intersection between two object that can bind points on them. The * intersection is computed by projecting the point to both objects and * predicting the intersection point. * * @author Rene */ public class PointonObjectIntersectionObject extends IntersectionObject { public double Eps = 1e-5; private boolean xAxisFunctionIntersection = false, yAxisFunctionIntersection = false; private FunctionObject F = null; public PointonObjectIntersectionObject(final Construction c, final ConstructionObject p1, final ConstructionObject p2) { super(c, p1, p2); if ((p1 instanceof AxisObject) && (p2 instanceof FunctionObject)) { F = (FunctionObject) p2; if (F.getEX().toString().equals("x")) { final AxisObject ax = ((AxisObject) p1); if (ax.DX == 1) { xAxisFunctionIntersection = true; } else { yAxisFunctionIntersection = true; } } } else if ((p2 instanceof AxisObject) && (p1 instanceof FunctionObject)) { F = (FunctionObject) p1; if (F.getEX().toString().equals("x")) { final AxisObject ax = ((AxisObject) p2); if (ax.DX == 1) { xAxisFunctionIntersection = true; } else { yAxisFunctionIntersection = true; } } } } @Override public void validate(final double x, final double y) { setXY(x, y); validate(); } @Override public void printArgs(final XmlWriter xml) { xml.printArg("first", P1.getName()); xml.printArg("second", P2.getName()); xml.printArg("x", "" + getX()); xml.printArg("y", "" + getY()); if (getAway() != null) { if (StayAway) { xml.printArg("awayfrom", getAway().getName()); } else { xml.printArg("closeto", getAway().getName()); } } printType(xml); if (!Restricted) { xml.printArg("valid", "true"); } } /** * Troublesome function to intersect two objects. This is done by projecting * the intersection point to each of the objects in turn. * * To speed up the convergence, a line intersection is computed, where the * lines approximate the objects. */ @Override public void validate() { // if ((P1==null)||(P2==null)) { // System.out.println(this.getName()); // } if (!P1.valid() || !P2.valid()) { Valid = false; } else { Valid = true; } if (!Valid) { return; } if (yAxisFunctionIntersection) { try { setXY(0, F.evaluateF(0)); return; } catch (final Exception ex) { } } if (xAxisFunctionIntersection) { try { double xn = 0; for (int i = 0; i < 5; i++) { double distold = projectOnce(); if (!Valid) { return; } final double dist1 = projectOnce(); if (dist1 >= distold && dist1 < Eps) { break; } distold = dist1; double a = x1 - x; double b = y1 - y; double s = Math.max(Math.abs(a), Math.abs(b)); if (Math.abs(s) > 1e-13) { a /= s; } b /= s; double c = X - x1; double d = Y - y1; s = Math.max(Math.abs(c), Math.abs(d)); if (Math.abs(s) > 1e-13) { c /= s; } d /= s; final double e = a * x1 + b * y1; final double f = c * X + d * Y; final double det = a * d - c * b; if (Math.abs(det) > 1e-13) { xn = (e * d - f * b) / det; final double dist2 = projectOnce(); if (dist2 < dist1) { distold = dist2; } } } setXY(Secant.compute(F, xn - 1e-1, xn + 1e-1, 1e-10), 0); return; } catch (final Exception ex) { } } double distold = projectOnce(); if (!Valid) { return; } for (int i = 0; i < 10; i++) { final double dist1 = projectOnce(); if (dist1 >= distold && dist1 < Eps) { return; } distold = dist1; double a = (x1 - x), b = (y1 - y); double s = Math.max(Math.abs(a), Math.abs(b)); if (Math.abs(s) > 1e-13) { a /= s; } b /= s; double c = (X - x1), d = (Y - y1); s = Math.max(Math.abs(c), Math.abs(d)); if (Math.abs(s) > 1e-13) { c /= s; } d /= s; final double e = a * x1 + b * y1, f = c * X + d * Y; final double det = a * d - c * b; if (Math.abs(det) > 1e-13) { final double xn = (e * d - f * b) / det; final double yn = (a * f - c * e) / det; final double xold = X, yold = Y; setXY(xn, yn); final double dist2 = projectOnce(); if (dist2 > dist1) // interpolation does not work { setXY(xold, yold); } else { distold = dist2; } } } Valid = false; } double x, y, x1, y1; public double projectOnce() { x = X; y = Y; // System.out.println("Before: "+X+" "+Y); ((PointonObject) P1).project(this); // System.out.println("Projected to "+P1.getName()+": "+X+" "+Y); final double dist = Math.max(Math.abs(X - x), Math.abs(Y - y)); x1 = X; y1 = Y; ((PointonObject) P2).project(this); // System.out.println("Projected to "+P2.getName()+": "+X+" "+Y); final double dist1 = Math.max(Math.abs(X - x1), Math.abs(Y - y1)); return Math.max(dist, dist1); } @Override public boolean moveable() { return true; } } ./src/rene/zirkel/objects/CVS/RevisionCache/ExpressionObject.java#1.40000644000175000017500000004541211133127427024225 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: PointObject.java import java.awt.Checkbox; import java.awt.Color; import java.awt.FontMetrics; import java.awt.Frame; import java.awt.GridLayout; import java.awt.TextField; import java.awt.event.FocusEvent; import java.util.Enumeration; import javax.swing.JPanel; import rene.dialogs.Warning; import rene.gui.Global; import rene.gui.MyLabel; import rene.gui.MyPanel; import rene.gui.MyTextField; import rene.gui.TextFieldAction; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.dialogs.EditConditionals; import rene.zirkel.dialogs.ObjectEditDialog; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import eric.JGlobals; class ExpressionEditDialog extends ObjectEditDialog { /** * */ private static final long serialVersionUID = 1L; TextFieldAction X, Y; TextField Expression, Prompt, Min, Max; Checkbox Fixed, Slider; ZirkelCanvas ZC; public ExpressionEditDialog(final Frame f, final ZirkelCanvas zc, final ExpressionObject o) { super(f, Zirkel.name("edit.expression.title"), o, "expression"); ZC = zc; } @Override public void focusGained(final FocusEvent e) { Expression.requestFocus(); } @Override public void addFirst(final JPanel P) { final ExpressionObject p = (ExpressionObject) O; X = new TextFieldAction(this, "X", "" + p.round(p.getX())); P.add(new MyLabel(Zirkel.name("edit.point.x"))); P.add(X); Y = new TextFieldAction(this, "Y", "" + p.round(p.getY())); P.add(new MyLabel(Zirkel.name("edit.point.y"))); P.add(Y); Fixed = new Checkbox(""); Fixed.setState(p.fixed()); P.add(new MyLabel(Zirkel.name("edit.fixed"))); P.add(Fixed); if (p.fixed()) { X.setText(p.getEX()); Y.setText(p.getEY()); } final JPanel px = new MyPanel(); px.setLayout(new GridLayout(1, 0)); Slider = new Checkbox(""); Slider.setState(p.isSlider()); P.add(new MyLabel(Zirkel.name("edit.expression.slider"))); px.add(Slider); Min = new TextFieldAction(this, "Min", "" + p.getMin()); Max = new TextFieldAction(this, "Max", "" + p.getMax()); px.add(Min); px.add(Max); P.add(px); Prompt = new MyTextField(p.getPrompt()); P.add(new MyLabel(Zirkel.name("edit.expression.prompt"))); P.add(Prompt); Expression = new TextFieldAction(this, "OK", p.getExpression(), 30); P.add(new MyLabel(Zirkel.name("edit.expression"))); P.add(Expression); } @Override public void doAction(final String o) { if (o.equals("OK")) { if (Fixed != null && X.isChanged() || Y.isChanged()) { Fixed.setState(true); } } super.doAction(o); } @Override public void setAction() { final ExpressionObject p = (ExpressionObject) O; if (Slider.getState()) { p.setSlider(Min.getText(), Max.getText()); if (Expression.getText().equals("")) { Expression.setText(Min.getText()); } } else { p.setSlider(false); } try { final double x = new Double(X.getText()).doubleValue(); final double y = new Double(Y.getText()).doubleValue(); p.move(x, y); } catch (final Exception e) { } try { p.setExpression(Expression.getText(), ZC.getConstruction()); } catch (final Exception e) { } if (Fixed.getState() == true) { p.setFixed(X.getText(), Y.getText()); } else { try { final double x = new Expression(X.getText(), p .getConstruction(), p).getValue(); final double y = new Expression(Y.getText(), p .getConstruction(), p).getValue(); p.move(x, y); p.setFixed(false); } catch (final Exception e) { } } p.setPrompt(Prompt.getText()); } } public class ExpressionObject extends ConstructionObject implements MoveableObject, SimulationObject, DriverObject { protected double X, Y; private static Count N = new Count(); public Expression E; protected Expression EX, EY; protected boolean Fixed; String Prompt = Zirkel.name("expression.value"); protected double CurrentValue = 0; protected boolean CurrentValueValid = true; protected boolean Slider = false; protected Expression SMin, SMax; private String LASTE = ""; public ExpressionObject(final Construction c, final double x, final double y) { super(c); X = x; Y = y; setColor(ColorIndex, SpecialColor); updateText(); setFixed("0"); } @Override public void setDefaults() { setShowName(Global.getParameter("options.text.shownames", false)); setShowValue(true); // setShowValue(Global.getParameter("options.text.showvalues",false)); setColor(Global.getParameter("options.text.color", 0), Global .getParameter("options.text.pcolor", (Color) null)); setColorType(Global.getParameter("options.text.colortype", 0)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); setPartial(Cn.Partial); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.text.shownames", false)); setShowValue(Global.getParameter("options.text.showvalues", false)); setColor(Global.getParameter("options.text.color", 0), Global .getParameter("options.text.pcolor", (Color) null)); setColorType(Global.getParameter("options.text.colortype", 0)); } @Override public String getTag() { return "Expression"; } @Override public int getN() { return N.next(); } @Override public void updateText() { if (E != null) { setText(text3(Zirkel.name("text.expression"), E.toString(), "" + roundDisplay(X), "" + roundDisplay(Y))); } else { setText(text3(Zirkel.name("text.expression"), "", "" + roundDisplay(X), "" + roundDisplay(Y))); } } public double C, R, W, H; // for the expression position public double SC, SR, SW, SH; // for the slider position in screen coord. public double SX, SY, SD; // for the slider scale in x,y-coordinates /** * Paint the expression. Use value, name (i.e. tag), or slider. Remember * slider position for nearto and drags. */ @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { DisplaysText = false; if (!Valid || mustHide(zc)) { return; } C = zc.col(X); R = zc.row(Y); setFont(g); final FontMetrics fm = g.getFontMetrics(); if (isStrongSelected() && g instanceof MyGraphics) { ((MyGraphics13) g).drawMarkerRect(C - 5, R - 5, 10, 10); } g.setColor(this); String s = ""; if (showName()) // shows the tag with or without = ... { s = Prompt; if (showValue()) // =, if value shows and % is not surpressed { if (s.endsWith("_") && s.length() > 1) { s = s.substring(0, s.length() - 1); } else { if (!s.equals("")) s = s + " = "; } } else { s = Prompt; } } if (showValue()) // show the value { try { E.getValue(); double x = round(CurrentValue); if (Slider) { x = round(CurrentValue, 100); } if (Math.abs(x - Math.round(x)) < 1e-10) { s = s + JGlobals.getLocaleNumber((int) x, "edit"); // s = s + (int) x; } else { s = s + JGlobals.getLocaleNumber(x, "edit"); // s = s + x; } } catch (final Exception e) { s = s + "???"; } } s = s + Unit; // add optional unit s = AngleObject.translateToUnicode(s); // translate \a etc. // s=s.replace(".",","); if (s.equals("")) // nothing to show { if (!Slider) { s = "-"; } } W = fm.stringWidth(s); if (!s.equals("")) { setFont(g); R -= fm.getAscent(); H = g.drawStringExtended(s, C, R); W = ((MyGraphics13) g).getW(); } if (Slider) // we draw an additional slider { final int coffset = (int) (4 * zc.pointSize()); R += H; g.drawLine(C, R + coffset / 2, C + 10 * coffset, R + coffset / 2); final double d = getSliderPosition(); final int size = coffset / 4; final double rslider = C + d * 10 * coffset; final double cw = 2 * size + 2; if (getColorType() == THICK) { g.fillOval(rslider - size - 1, R + coffset / 2 - size - 1, cw, cw, true, false, this); } else { g.fillOval(rslider - size - 1, R + coffset / 2 - size - 1, cw, cw, new Color(250, 250, 250)); g.setColor(this); g.drawOval(rslider - size - 1, R + coffset / 2 - size - 1, cw, cw); } // remember position SC = rslider - size; SR = R + coffset / 2 - size; SW = SH = 2 * size; SX = zc.x((int) C); SY = zc.y((int) R + coffset / 2 - size); SD = zc.x((int) C + 10 * coffset) - SX; R -= H; } } /** * Compute the relative position, the slider must be on according to * CurrentValue * * @return 0 <= position <= 1 */ public double getSliderPosition() { try { final double min = SMin.getValue(); final double max = SMax.getValue(); double x = CurrentValue; if (min >= max) { Valid = false; return 0; } if (x < min) { x = min; } if (x > max) { x = max; } return (x - min) / (max - min); } catch (final Exception e) { Valid = false; return 0; } } /** * Set the expression according to the relative value the slider is on. 0 <= * d <= 1. * * @param d */ public void setSliderPosition(final double d) { try { final double min = SMin.getValue(); final double max = SMax.getValue(); if (min >= max) { Valid = false; return; } double value = min + d * (max - min); if (value < min) { value = min; } if (value > max) { value = max; } E.setValue(value); // kills expression and makes it a constant } catch (final Exception e) { Valid = false; } } @Override public boolean nearto(final int x, final int y, final ZirkelCanvas zc) { DragSlider = false; if (Valid && !displays(zc)) { return false; } if (C <= x && x <= C + W && R <= y && y <= R + H) { return true; } if (SC <= x && SR <= y && SC + SW >= x && SR + SH >= y) { DragSlider = true; return true; } return false; } @Override public double getX() { return X; } @Override public double getY() { return Y; } public Expression getExp() { return E; } @Override public void move(final double x, final double y) { X = x; Y = y; } @Override public void snap(final ZirkelCanvas zc) { final double d = zc.getGridSize() / 2; X = Math.round(X / d) * d; Y = Math.round(Y / d) * d; } @Override public void round() { move(round(X, ZirkelCanvas.LengthsFactor), round(Y, ZirkelCanvas.LengthsFactor)); } @Override public void edit(final ZirkelCanvas zc) { if (!rene.zirkel.Zirkel.IsApplet) { eric.JGlobals.EditObject(this); return; } final ObjectEditDialog d = new ExpressionEditDialog(zc.getFrame(), zc, this); d.setVisible(true); zc.repaint(); if (E != null && !E.isValid()) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, E.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } if ((EX != null && !EX.isValid())) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, EX.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } else if ((EY != null && !EY.isValid())) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, EY.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } validate(); if (d.wantsMore()) { new EditConditionals(zc.getFrame(), this); validate(); } } @Override public void printArgs(final XmlWriter xml) { if (Fixed && EX != null && EX.isValid()) { xml.printArg("x", EX.toString()); } else { xml.printArg("x", "" + X); } if (Fixed && EY != null && EY.isValid()) { xml.printArg("y", EY.toString()); } else { xml.printArg("y", "" + Y); } if (E != null) { xml.printArg("value", E.toString()); } else { xml.printArg("value", ""); } xml.printArg("prompt", Prompt); if (Fixed) { xml.printArg("fixed", "true"); } if (Slider) { xml.printArg("slider", "true"); xml.printArg("min", SMin.toString()); xml.printArg("max", SMax.toString()); } } @Override public boolean equals(final ConstructionObject o) { return false; } @Override public void setExpression(final String expr, final Construction c) throws ConstructionException { E = new Expression(expr, c, this); updateText(); } @Override public void setFixed(final String expr) { E = new Expression(expr, getConstruction(), this); updateText(); } @Override public String getExpression() { if (E != null) { return E.toString(); } else { return ""; } } // public Enumeration depending() { // DL.reset(); // if (E != null) { // Enumeration e = E.getDepList().elements(); // while (e.hasMoreElements()) { // DL.add((ConstructionObject) e.nextElement()); // } // } // if (Fixed) { // Enumeration e; // if (EX != null) { // e = EX.getDepList().elements(); // while (e.hasMoreElements()) { // DL.add((ConstructionObject) e.nextElement()); // } // } // if (EY != null) { // e = EY.getDepList().elements(); // while (e.hasMoreElements()) { // DL.add((ConstructionObject) e.nextElement()); // } // } // } // return DL.elements(); // } @Override public Enumeration depending() { DL.reset(); addDepending(E); addDepending(SMin); addDepending(SMax); if (Fixed) { addDepending(EX); addDepending(EY); } return DL.elements(); } public void addDepending(final Expression EE) { if (EE != null) { final Enumeration e = EE.getDepList().elements(); while (e.hasMoreElements()) { DL.add((ConstructionObject) e.nextElement()); } } } @Override public double getValue() throws ConstructionException { if (!CurrentValueValid) { throw new InvalidException(""); } return CurrentValue; } @Override public String getPrompt() { return Prompt; } @Override public void setPrompt(final String prompt) { Prompt = prompt; } @Override public void translate() { if (Slider) { SMin.translate(); SMax.translate(); } else { E.translate(); } if (Fixed) { try { setFixed(EX.toString(), EY.toString()); EX.translate(); EY.translate(); } catch (final Exception e) { } } updateText(); } @Override public void validate() { try { CurrentValue = E.getValue(); CurrentValueValid = true; } catch (final Exception e) { CurrentValueValid = false; } Valid = true; if (Fixed && EX != null && EX.isValid()) { try { X = EX.getValue(); } catch (final Exception e) { Valid = false; return; } } if (Fixed && EY != null && EY.isValid()) { try { Y = EY.getValue(); } catch (final Exception e) { Valid = false; return; } } } @Override public void setFixed(final boolean flag) { Fixed = flag; if (!Fixed) { EX = EY = null; } updateText(); } @Override public void setFixed(final String x, final String y) { Fixed = true; EX = new Expression(x, getConstruction(), this); EY = new Expression(y, getConstruction(), this); updateText(); } @Override public ConstructionObject copy(final double x, final double y) { try { final ExpressionObject o = (ExpressionObject) clone(); setTranslation(o); if (Slider) { o.setSlider(SMin.toString(), SMax.toString()); } else { o.setExpression(E.toString(), getConstruction()); } o.translateConditionals(); o.translate(); o.setName(); o.updateText(); o.setBreak(false); o.setTarget(false); return o; } catch (final Exception e) { return null; } } public boolean moveable() { if (Slider) { return true; } return EX == null && EY == null; } public void reset() { if (E != null) { E.reset(); } } @Override public boolean fixed() { return Fixed; } @Override public String getEX() { if (EX != null) { return EX.toString(); } else { return "" + round(X); } } @Override public String getEY() { if (EY != null) { return EY.toString(); } else { return "" + round(Y); } } public void setCurrentValue(final double x) { CurrentValue = x; CurrentValueValid = true; } // For the simulate function: private double OldE; /** * Set the simulation value, remember the old value. */ public void setSimulationValue(final double x) { OldE = CurrentValue; CurrentValue = x; } /** * Reset the old value. */ public void resetSimulationValue() { CurrentValue = OldE; } /** * Set the slider to min, max und step values. * * @param smin * @param smax * @param sstep */ @Override public void setSlider(final String smin, final String smax) { Slider = true; SMin = new Expression(smin, getConstruction(), this); SMax = new Expression(smax, getConstruction(), this); } /** * Set or clear the slider. * * @param flag */ @Override public void setSlider(final boolean flag) { Slider = flag; } double oldx, oldy, startx, starty; boolean DragSlider; public void startDrag(final double x, final double y) { oldx = X; oldy = Y; startx = x; starty = y; } public void dragTo(final double x, final double y) { if (DragSlider) { setSliderPosition((x - SX) / SD); } else { move(oldx + (x - startx), oldy + (y - starty)); } } public double getOldX() { return oldx; } public double getOldY() { return oldy; } @Override public boolean isSlider() { return Slider; } @Override public String getMin() { if (Slider) { return SMin.toString(); } else { return ("-5"); } } @Override public String getMax() { if (Slider) { return SMax.toString(); } else { return ("5"); } } @Override public String getDisplayValue() { String s = ""; try { E.getValue(); double x = round(CurrentValue); if (Slider) { x = round(CurrentValue, 100); } if (Math.abs(x - Math.round(x)) < 1e-10) { s = s + (int) x; } else { s = s + x; } } catch (final Exception e) { s = s + "???"; } s = s + Unit; // add optional unit return s; } @Override public String getEquation() { if (E == null) { return "???"; } else { return E.toString(); } } @Override public boolean isDriverObject() { return true; } public boolean somethingChanged() { return (!getEquation().equals(LASTE)); } public void clearChanges() { LASTE = getEquation(); } } ./src/rene/zirkel/objects/CVS/RevisionCache/ConstructionObject.java#1.60000644000175000017500000013212211155152774024564 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: ConstructionObject.java import java.awt.Color; import java.util.Enumeration; import java.util.StringTokenizer; import java.util.Vector; import rene.lister.Element; import rene.util.FileName; import rene.util.MyVector; import rene.util.sort.SortObject; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.ZirkelFrame; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.construction.DepList; import rene.zirkel.expression.Expression; import rene.zirkel.expression.ExpressionString; import rene.zirkel.expression.NoValueException; import rene.zirkel.graphics.MyGraphics; class Conditional implements Cloneable { String Tag; Expression Expr; public Conditional(final String t, final Expression e) { Tag = t; Expr = e; } public String getTag() { return Tag; } public Expression getExpression() { return Expr; } public void setExpression(final Expression e) { Expr = e; } } public class ConstructionObject implements Cloneable, SortObject, Element { /** object color and static default color */ protected int ColorType = 0; public static final int NORMAL = 0, THICK = 1, THIN = 2, INVISIBLE = 3; protected Color C = Color.black; protected Color SpecialColor = null; protected int ColorIndex = 0; protected boolean Tracked = false; protected boolean Selected = false; // is selected (highlight red!) protected boolean StrongSelected = false; // to highlight the object even // more protected boolean Indicated = false; // mouse is over it (highlight darker!) protected boolean ShowIndicatedName = false; // shows the name (or name and // value) protected boolean LabelSelected = false; // label is selected (highlight // red!) protected boolean Valid = true; // e.g. for intersections protected boolean Hidden = false; // not visible or lighter protected boolean SuperHidden = false; // not visible at all protected boolean BreakHide = false; // Hide due to hiding break protected boolean ShowName = false; // shows the name (or name and value) protected boolean ShowValue = false; // shows the value (or name and value) protected boolean Selectable = true; // may be selected protected String Name = "Generic"; protected static int Count = 1; // To generate a unique name protected String Text = "???"; // Description (human readable) private int XOffset = 0, YOffset = 0; // Deprecated INT offset (translated // to double) protected double XcOffset = 0.0, YcOffset = 0.0; // Offsets for the text // display protected boolean KeepClose; // Keep the text display close to the object protected boolean DisplaysText = false; // Does this object display text? protected double TX1, TY1, TX2, TY2; // text rectangle. protected Construction Cn; // Construction that this Object belongs to protected boolean MainParameter, Parameter; // for macros and jobs protected boolean Target; // for macros and jobs public boolean Flag, RekFlag, IsDrawn, HasZ; // for various processing // purposes public int Scratch; // for various processing purposes protected boolean Keep = false; // for job parameters. protected boolean JobTarget = false; // for job targets protected ConstructionObject Translation; protected boolean Back = false; // draws in the background (first round) protected boolean Obtuse = true; // for angles and circles between two // points. protected boolean Break = false; // Break point in front of this object? protected boolean HideBreak = false; // Hide construction before this break! protected boolean Solid = false; // Not transparent? static Count N = new Count(); protected boolean inConstruction; // Is in the construction (or deleted) protected String Unit = ""; // Use a unit display protected boolean Bold = false; // Use a bold font for this item protected boolean Large = false; // Use a large font for this item protected Vector Conditionals; // For conditional formatting protected int NCount = 0; // Unique number protected boolean gotNCount = false; // Have already a number (from load // file) public boolean NeedsRecompute = true; public void copyProperties(final ConstructionObject origin) { Tracked = origin.Tracked; Selected = origin.Selected; StrongSelected = origin.StrongSelected; Indicated = origin.Indicated; ShowIndicatedName = origin.ShowIndicatedName; LabelSelected = origin.LabelSelected; Valid = origin.Valid; Hidden = origin.Hidden; SuperHidden = origin.SuperHidden; BreakHide = origin.BreakHide; ShowName = origin.ShowName; ShowValue = origin.ShowValue; Selectable = origin.Selectable; ColorType = origin.ColorType; C = origin.C; ColorIndex = origin.ColorIndex; if (origin.Conditionals != null) { Conditionals = (Vector) origin.Conditionals.clone(); } } public boolean isGotNCount() { return gotNCount; } public void setGotNCount(final boolean gotNCount) { this.gotNCount = gotNCount; } public ConstructionObject(final Construction c) { Cn = c; inConstruction = true; setName(); } public ConstructionObject(final Construction c, final String name) { Cn = c; inConstruction = true; setName(name); } // tells if it's a main object which can make heavy objects to recompute : public boolean isDriverObject() { return false; } /** * Sets a unique name for the object. Should be overriden in all items. */ public void setName() { if (Cn.LongNames) { Name = Zirkel.name("name." + getTag()) + " " + getN(); } else { Name = Zirkel.name("name.short." + getTag()) + getN(); // System.out.println("nom="+Name); } } public int getN() { return N.next(); } public String getTag() { return "Generic"; } /** * This is used to define macros and run them. The items of the construction * are translated to macro items. */ public ConstructionObject getTranslation() { return Translation; } public void setTranslation(final ConstructionObject t) { Translation = t; } /** * Override in children! This translates the mother items. */ public void translate() { } public void paint(final MyGraphics g, final ZirkelCanvas zc) { } /** * Test, if this object is chosen with coordinates x,y */ public boolean nearto(final int x, final int y, final ZirkelCanvas zc) { return false; } /** * Test, if this object is chosen with coordinates x,y */ public boolean nearto(final int x, final int y, final boolean ignorefill, final ZirkelCanvas zc) { return nearto(x, y, zc); } /** * Test, if this object must be chosen with coordinates x,y, assuming it is * near to these coordinates. */ public boolean onlynearto(final int x, final int y, final ZirkelCanvas zc) { return true; } public boolean textcontains(final int x, final int y, final ZirkelCanvas zc) { if (!DisplaysText || !Valid || (isHidden() && !zc.showHidden())) { return false; } return x > TX1 && x < TX2 && y > TY1 && y < TY2; } public void setTracked(final boolean flag) { Tracked = flag; } public void setSelected(final boolean flag) { Selected = flag; StrongSelected = false; } public void setStrongSelected(final boolean flag) { StrongSelected = flag; } public boolean isStrongSelected() { return StrongSelected; } public boolean selected() { return Selected || StrongSelected; } public boolean tracked() { return Tracked; } public void setLabelSelected(final boolean flag) { LabelSelected = flag; } public boolean isSelectable() { return valid() && !JobTarget && Selectable; } public void validate() { Valid = true; } public boolean valid() { return Valid; } public boolean displays(final ZirkelCanvas zc) { if (SuperHidden) { return false; } if (!zc.showHidden() && (testConditional("hidden") || testConditional("superhidden"))) { return false; } return Valid && !BreakHide && (!Hidden || zc.showHidden()); } public boolean indicated() { return Indicated; } public void setIndicated(final boolean f) { Indicated = f; } public void setIndicated(final boolean f, final boolean showname) { Indicated = f; ShowIndicatedName = showname; } /** * @return The change of the last validation for points bound to lines, * which are defined later. */ public double changedBy() { return 0.0; } /** * Routines to parse descriptive text in various languages. */ static public String text1(final String format, final String s1) { final StringTokenizer t = tokenize(format); String s = "Illegal Format"; try { s = t.nextToken() + s1; s = s + t.nextToken(); } catch (final Exception e) { } return s.trim(); } static public String text2(final String format, final String s1, final String s2) { final StringTokenizer t = tokenize(format); String s = "Illegal Format"; try { s = t.nextToken() + s1 + t.nextToken() + s2; s = s + t.nextToken(); } catch (final Exception e) { } return s.trim(); } static public String text3(final String format, final String s1, final String s2, final String s3) { final StringTokenizer t = tokenize(format); String s = "Illegal Format"; try { s = t.nextToken() + s1 + t.nextToken() + s2 + t.nextToken() + s3; s = s + t.nextToken(); } catch (final Exception e) { } return s.trim(); } static public String text4(final String format, final String s1, final String s2, final String s3, final String s4) { final StringTokenizer t = tokenize(format); String s = "Illegal Format"; try { s = t.nextToken() + s1 + t.nextToken() + s2 + t.nextToken() + s3 + t.nextToken() + s4; s = s + t.nextToken(); } catch (final Exception e) { } return s; } static public String textAny(final String format, final String ss[]) { final StringTokenizer t = tokenize(format); String s = "Illegal Format"; try { s = t.nextToken(); for (int i = 0; i < ss.length; i++) { s = s + ss[i]; if (i < ss.length - 1) { s = s + ", "; } } s = s + t.nextToken(); } catch (final Exception e) { } return s; } static private StringTokenizer tokenize(String format) { if (format.startsWith("%")) { format = " " + format; } if (format.endsWith("%")) { format = format + " "; } return new StringTokenizer(format, "%"); } public void setText(final String s, final boolean user) { if (!user && Text.endsWith(" ")) { return; } Text = s; } public void setText(final String s) { setText(s, false); } public String getText() { return Text; } public boolean labelSelected() { return LabelSelected; } // public void setColor(Color c){ // C=c; // } /** * Set the object color by index. */ public void setColor(final int index) { SpecialColor = null; if (index < 0) { C = Color.pink; } else { if (ColorType == THIN) { C = ZirkelFrame.LightColors[index]; } else { C = ZirkelFrame.Colors[index]; } ColorIndex = index; } } /** * Set the object color by index. * * @param index * @param col */ public void setColor(final int index, final Color col) { SpecialColor = col; if (col == null) { if (ColorType == THIN) { C = ZirkelFrame.LightColors[index]; } else { C = ZirkelFrame.Colors[index]; } ColorIndex = index; } else { C = SpecialColor; } } /** * Get the current color index. If there is a conditional for the color, * test it and use it. */ public int getColorIndex(final boolean original) { if (!original && haveConditionals()) { for (int i = 0; i < ZirkelFrame.ColorStrings.length; i++) { if (testConditional(ZirkelFrame.ColorStrings[i])) { return i; } } } return ColorIndex; } public int getConditionalColor() { if (haveConditionals()) { for (int i = 0; i < ZirkelFrame.ColorStrings.length; i++) { if (testConditional(ZirkelFrame.ColorStrings[i])) { return i; } } } return -1; } public Color getSpecialColor() { return SpecialColor; } public void setSpecialColor(final Color c) { SpecialColor = c; } public int getColorIndex() { return getColorIndex(false); } public Color getColor() { Color Col, LightCol, BrighterCol, BrighterLightCol; // it's a personnal color : if (SpecialColor != null) { final int i = getConditionalColor(); if (i != -1) { Col = ZirkelFrame.Colors[i]; LightCol = ZirkelFrame.LightColors[i]; BrighterCol = ZirkelFrame.BrighterColors[i]; BrighterLightCol = ZirkelFrame.BrighterLightColors[i]; } else { final double lambda = 0.4; Col = SpecialColor; final int r = (int) (255 * (1 - lambda) + Col.getRed() * lambda); final int g = (int) (255 * (1 - lambda) + Col.getGreen() * lambda); final int b = (int) (255 * (1 - lambda) + Col.getBlue() * lambda); LightCol = new Color(r, g, b); BrighterCol = Col.brighter(); BrighterLightCol = LightCol.brighter(); } } else { final int i = getColorIndex(); Col = ZirkelFrame.Colors[i]; LightCol = ZirkelFrame.LightColors[i]; BrighterCol = ZirkelFrame.BrighterColors[i]; BrighterLightCol = ZirkelFrame.BrighterLightColors[i]; } if (isJobTarget()) { return ZirkelFrame.TargetColor; } else if (selected()) { return ZirkelFrame.SelectColor; } else if (getColorType() == ConstructionObject.THIN) { if (isHidden()) { return BrighterLightCol; } else { return LightCol; } } else { if (isHidden()) { return BrighterCol; } else { return Col; } } } public boolean mustHide(final ZirkelCanvas zc) { if (!Valid) { return true; } if (ColorIndex > 0 && zc.getShowColor() != 0 && zc.getShowColor() != ColorIndex) { return true; } if (JobTarget && Hidden) { return true; } return SuperHidden || testConditional("superhidden") || BreakHide || zc.hides(this) || (isHidden() && !zc.showHidden()); } public void setHidden(final boolean flag) { Hidden = flag; if (!flag) { SuperHidden = false; } } public void setSuperHidden(final boolean flag) { SuperHidden = flag; } public void toggleHidden() { Hidden = !Hidden; if (!Hidden) { SuperHidden = false; } } public boolean isHidden(final boolean original) { if (!original && testConditional("visible")) { return false; } if (!original && (testConditional("hidden") || testConditional("superhidden"))) { return true; } return Hidden || SuperHidden; } public boolean isHidden() { return isHidden(false); } public boolean isSuperHidden(final boolean original) { if (!original && testConditional("superhidden")) { return true; } return SuperHidden; } public boolean isSuperHidden() { return isSuperHidden(false); } public String getName() { return Name; } public void setName(String n) { Name = ""; if (Cn != null) { ConstructionObject o = Cn.find(n); while (o != null && o != this) { n = n + "*"; o = Cn.find(n); } } Name = n; } public void setNameCheck(String n) throws ConstructionException { boolean extend = false; Name = ""; if (Cn != null) { ConstructionObject o = Cn.find(n); if (o != null && o != this) { n = n + "*"; o = Cn.find(n); extend = true; } } Name = n; if (extend) { throw new ConstructionException(Zirkel.name("exception.double")); } } public void setNameWithNumber(String n) { Name = ""; if (Cn != null) { ConstructionObject o = Cn.find(n); if (o != null) { while (o != null && o != this) { setName(); n = Name; Name = ""; o = Cn.find(n); } Name = n; } else { Name = n; } } else { Name = n; } } public void edit(final ZirkelCanvas zc) { zc.repaint(); } /** * Service routine to draw a string from upper left coordinates. Position is * at TX1, TX2. */ public void drawLabel(final MyGraphics g, final String s) { g.drawStringExtended(s, TX1, TY1); TX2 = TX1 + g.stringWidth(s); TY2 = TY1 + g.stringHeight(s); } public void setFont(final MyGraphics g) { g.setFont(Large, Bold); } /** * Service routine to draw a string centered at x,y */ public void drawCenteredLabel(final MyGraphics g, final String s, final ZirkelCanvas zc, final double x, final double y, final double xo, final double yo) { final int ws = g.stringWidth(s), hs = g.stringHeight(s); TX1 = zc.col(x + xo) - ws / 2; TY1 = zc.row(y + yo) - hs / 2; g.drawStringExtended(s, TX1, TY1); TX2 = TX1 + ws; TY2 = TY1 + hs; } /** * Service routine to draw a string at x,y but offset into direction -vy,vx * so that it does not intersect the direction vx,vy. r=(vx,vy) is assumed * to be normalized. */ public void drawLabel(final MyGraphics g, final String s, final ZirkelCanvas zc, final double x, final double y, final double vx, final double vy, final double xo, final double yo) { final int ws = g.stringWidth(s), hs = g.stringHeight(s); final double w = zc.dx(ws), h = zc.dy(hs); final double d1 = Math.abs(-w * vy + h * vx); final double d2 = Math.abs(w * vy + h * vx); double d = d1; if (d2 > d) { d = d2; } final double dd = zc.dy(2 * zc.pointSize()); TX1 = zc.col(x - vy * (d + 3 * dd) / 2 + xo) - ws / 2; TY1 = zc.row(y + vx * (d + 3 * dd) / 2 + yo) - hs / 2; g.drawStringExtended(s, TX1, TY1); TX2 = TX1 + ws; TY2 = TY1 + hs; } /** * Service routine to draw a string at x,y but offset into direction -vy,vx * so that it does not intersect the direction vx,vy. r=(vx,vy) is assumed * to be normalized. */ public void drawPointLabel(final MyGraphics g, final String s, final ZirkelCanvas zc, final double x, final double y, final double vx, final double vy, final double xo, final double yo) { final int ws = g.stringWidth(s), hs = g.stringHeight(s); final double w = zc.dx(ws), h = zc.dy(hs); final double d1 = Math.abs(-w * vy + h * vx); final double d2 = Math.abs(w * vy + h * vx); double d = d1; if (d2 > d) { d = d2; } final double dd = zc.dy(2 * zc.pointSize()); if (Math.abs(d * vx) > h + 2 * dd) { d = Math.abs((h + 2 * dd) / vx); } final double xp = x - vy * d / 2, yp = y + vx * d / 2; TX1 = zc.col(xp - vy * dd * 1.5 + xo) - ws / 2; TY1 = zc.row(yp + vx * dd * 1.5 + yo) - hs / 2; g.drawStringExtended(s, TX1, TY1); TX2 = TX1 + ws; TY2 = TY1 + hs; } /** * Save the object in XML form. */ public void save(final XmlWriter xml) { xml.startTagStart(getTag()); xml.printArg("name", Name); if (AliasES != null) { xml.printArg("alias", AliasES.toString()); } xml.printArg("n", "" + NCount); if (ColorIndex != 0) { xml.printArg("color", "" + ColorIndex); } if (SpecialColor != null) { xml.printArg("scolor", SpecialColor.getRed() + "," + SpecialColor.getGreen() + "," + SpecialColor.getBlue()); } if (ColorType == THICK) { xml.printArg("type", "thick"); } if (ColorType == THIN) { xml.printArg("type", "thin"); } if (ColorType == INVISIBLE) { xml.printArg("type", "invisible"); } if (SuperHidden) { xml.printArg("hidden", "super"); } else if (Hidden) { xml.printArg("hidden", "true"); } if (ShowName) { xml.printArg("showname", "true"); } if (ShowValue) { xml.printArg("showvalue", "true"); } if (Back) { xml.printArg("background", "true"); } if (XcOffset != 0.0) { xml.printArg("xcoffset", "" + XcOffset); } if (YcOffset != 0.0) { xml.printArg("ycoffset", "" + YcOffset); } if (KeepClose) { xml.printArg("keepclose", "true"); } if (Parameter) { xml.printArg("parameter", "true"); } if (MainParameter) { xml.printArg("mainparameter", "true"); } if (Target) { xml.printArg("target", "true"); } if (Tracked) { xml.printArg("tracked", "true"); } if (Break) { if (HideBreak) { xml.printArg("hidebreak", "true"); } else { xml.printArg("break", "true"); } } if (Solid && maybeTransparent() && isFilled()) { xml.printArg("solid", "true"); } if (!Unit.equals("")) { xml.printArg("unit", Unit); } if (Bold) { xml.printArg("bold", "true"); } if (Large) { xml.printArg("large", "true"); } if (haveConditionals()) { int i = 0; final Enumeration e = Conditionals.elements(); while (e.hasMoreElements()) { final Conditional c = (Conditional) e.nextElement(); xml.printArg("ctag" + i, c.getTag()); xml.printArg("cexpr" + i, c.getExpression().toString()); i++; } } printArgs(xml); xml.startTagEnd(); xml.print(Text); xml.endTag(getTag()); xml.println(); } public void printArgs(final XmlWriter xml) { } public void updateText() { } public void setConstruction(final Construction c) { Cn = c; inConstruction = true; setNameWithNumber(Name); // make sure the name is not double } public boolean showName(final boolean original) { if (!original && testConditional("showname")) { return true; } return ShowName || (Indicated && ShowIndicatedName); } public boolean showName() { return showName(false); } public void setShowName(final boolean f) { ShowName = f; } public boolean showValue(final boolean original) { if (!original && testConditional("showvalue")) { return true; } return ShowValue; } public boolean showValue() { return showValue(false); } public void setShowValue(final boolean f) { ShowValue = f; } /** * Determine the string to be displayed onscreen. * * @return "", if there should be no display. */ static String findIndice(final String s) { return ""; } public String getDisplayText() { // If the name of the object starts with simple letters only // and ends with a number, then place this number in subscript // and use the $-character around to send the string to HotEqn String name = Name.replaceAll("^([a-zA-Z]+)([0-9]+)$", "\\$$1_$2\\$"); if (AliasES != null) { name = AliasES.evaluate(); } else if (name.indexOf("~") > 0) { name = name.substring(0, name.indexOf("~")); } if (showName()) { if (showValue()) { final String value = getDisplayValue(); if (value.equals("")) { return name; } if (name.endsWith("$")) { name = name.substring(0, name.length() - 1); } if (name.endsWith("_") && name.length() > 1) { name = name.substring(0, name.length() - 1); } else { name = name + " = "; } if (Unit.equals("")) { return name + getDisplayValue(); } else { return name + getDisplayValue() + Unit; } } else { if (name.indexOf("~") > 0 && AliasES == null) { name = name.substring(0, name.indexOf("~")); } return name; } } else if (showValue()) { if (Unit.equals("")) { return getDisplayValue(); } else { return getDisplayValue() + Unit; } } return ""; } /** * Replace the expression in %...% by their values * * @param s * @param zc * may be null (no direct search of object) * @return */ public String replaceExpressions(String s) { // System.out.println(s); final boolean latex = s.startsWith("$"); int searchpos = 0; while (s.indexOf("%", searchpos) >= 0) { final int h1 = s.indexOf("%", searchpos); final String s1 = s.substring(h1 + 1); final int h2 = s1.indexOf("%"); if (h2 == 0) { s = s.substring(0, h1) + "%" + s1.substring(1); searchpos += 1; } else if (h2 >= 0) { String var = s1.substring(0, h2); boolean showeq = false, forceplus = false; if (var.startsWith("~")) // show equation { var = var.substring(1); showeq = true; } else if (var.startsWith("+")) // force + { var = var.substring(1); forceplus = true; } final ConstructionObject o = getConstruction().find(var); // System.out.println(o+" "+var); String repl = ""; if (o != null) { DL.add(o); } try { if (showeq) { repl = o.getEquation(); } else { if (o != null) { final double x = round(o.getValue()); if (forceplus && x >= 0) { repl = "+"; } if (x == Math.floor(x + 0.1)) { repl = repl + (int) (x); } else { repl = repl + x; } } else { final Expression ex = new Expression(var, getConstruction(), this); if (ex.isValid()) { final Enumeration e = ex.getDepList() .elements(); while (e.hasMoreElements()) { DL .add((ConstructionObject) e .nextElement()); } } final double x = round(ex.getValue()); if (forceplus && x >= 0) { repl = "+"; } if (x == Math.floor(x + 0.1)) { repl = repl + (int) (x); } else { repl = repl + x; } } } } catch (final Exception ex) { if (latex) { repl = "\\circ"; } else { repl = "???"; // ex.printStackTrace(); } } s = s.substring(0, h1) + repl + s1.substring(h2 + 1); searchpos = h1 + repl.length(); } else { break; } } return s; } /** * Add the dependencies in expressions in %...% in the string. * * @param s * @param zc * may be null (no direct search of object) * @return */ public void addDepInExpressions(final String s) { replaceExpressions(s); } /** * Replace the expression in %...% by their translated epressions. * * @param s * @param zc * may be null (no direct search of object) * @return */ public String translateExpressions(String s) { // System.out.println(s); s.startsWith("$"); int searchpos = 0; while (s.indexOf("%", searchpos) >= 0) { // System.out.println(searchpos); final int h1 = s.indexOf("%", searchpos); final String s1 = s.substring(h1 + 1); final int h2 = s1.indexOf("%"); if (h2 == 0) { s = s.substring(0, h1) + "%" + s1.substring(1); searchpos += 1; } else if (h2 >= 0) { String var = s1.substring(0, h2); boolean showeq = false; String repl = ""; if (var.startsWith("~")) // show equation { var = var.substring(1); showeq = true; repl = "+"; } else if (var.startsWith("+")) // force + { var = var.substring(1); repl = "~"; } ConstructionObject o = getConstruction().find(var); if (o != null) { o = o.getTranslation(); // System.out.println(o+" "+var); } if (showeq) { repl = repl + o.getName(); } else { if (o != null) { repl = repl + o.getName(); } else { final Expression ex = new Expression(var, getConstruction(), this); if (ex.isValid()) { ex.translate(); repl = repl + ex.toString(); } else { return s; } } } // System.out.println(repl); s = s.substring(0, h1) + "%" + repl + "%" + s1.substring(h2 + 1); searchpos = h1 + repl.length() + 2; // System.out.println(s); } else { break; } } return s; } /** * To be overridden by the objects. * * @return The string to display the value (length, coordinates) of the * object. */ public String getDisplayValue() { return ""; } public String getSizeDisplay() { return getDisplayValue() + getUnit(); } /** * Service function to round a value. */ public double round(final double x) { return round(x, ZirkelCanvas.EditFactor); } public double roundDisplay(final double x) { return round(x, ZirkelCanvas.LengthsFactor); } public double round(final double x, final double Rounder) { return Math.round(x * Rounder) / Rounder; } // The following procedures are for label offset public void setcOffset(final double x, final double y) { XcOffset = x; YcOffset = y; } public double xcOffset() { return XcOffset; } public double ycOffset() { return YcOffset; } public void setOffset(final int x, final int y) // deprecated { XOffset = x; YOffset = y; } public boolean isKeepClose() { return KeepClose; } public void setKeepClose(final double x, final double y) // Override! { KeepClose = true; XcOffset = x; YcOffset = y; } public void setKeepClose(final boolean flag) { if (KeepClose && !flag) { XcOffset = 0; YcOffset = 0; } KeepClose = flag; } public boolean canKeepClose() // Override! { return false; } public void translateOffset(final ZirkelCanvas zc) { if (XOffset != 0 || YOffset != 0) { XcOffset = zc.dx(XOffset); YcOffset = zc.dy(-YOffset); XOffset = YOffset = 0; } } public int getColorType(final boolean original) { if (!original && testConditional("thin")) { return THIN; } if (!original && testConditional("thick")) { return THICK; } if (!original && testConditional("normal")) { return NORMAL; } return ColorType; } public int getColorType() { return getColorType(false); } public void setColorType(final int type) { ColorType = type; setColor(ColorIndex, SpecialColor); } public boolean isParameter() { return Parameter || MainParameter; } public boolean isMainParameter() { return MainParameter; } public void clearParameter() { Parameter = false; MainParameter = false; } public void setMainParameter() { final Enumeration e = secondaryParams(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); o.setParameter(); } MainParameter = true; } public void setParameter() { Parameter = true; } public static DepList DL = new DepList(); /** * Return an enumeration of objects, that this object depends on. This * should usually called from children via super. */ public Enumeration depending() { DL.reset(); if (haveConditionals()) { final Enumeration e = Conditionals.elements(); while (e.hasMoreElements()) { final Conditional c = (Conditional) e.nextElement(); final Enumeration ex = c.getExpression().getDepList() .elements(); while (ex.hasMoreElements()) { DL.add((ConstructionObject) ex.nextElement()); } } } if (AliasES != null) { AliasES.addDep(this); } return DL.elements(); } /** * Test, if the object directly depends on another object. */ public boolean dependsOn(final ConstructionObject o) { final Enumeration e = depending(); while (e.hasMoreElements()) { final ConstructionObject o1 = (ConstructionObject) e.nextElement(); if (o1 == o) { return true; } } return false; } /** * Return an enumeration of objects, which can be set as secondary * parameters, whenever this object is selected as main parameter. */ public Enumeration secondaryParams() { DL.reset(); return DL.elements(); } public ConstructionObject[] getDepArray() { depending(); return DL.getArray(); } public Enumeration depset(final ConstructionObject o1) { DL.add(o1); return DL.elements(); } public Enumeration depset(final ConstructionObject o1, final ConstructionObject o2) { DL.add(o1); DL.add(o2); return DL.elements(); } public Enumeration depset(final ConstructionObject o1, final ConstructionObject o2, final ConstructionObject o3) { DL.add(o1); DL.add(o2); DL.add(o3); return DL.elements(); } public void setFlag(final boolean flag) { Flag = flag; } public boolean isFlag() { return Flag; } public void setRekFlag(final boolean flag) { RekFlag = flag; } public boolean isRekFlag() { return RekFlag; } public void setTarget(final boolean flag) { Target = flag; } public boolean isTarget() { return Target; } public void setKeep(final boolean flag) { Keep = flag; } public boolean isKeep() { return Keep; } public boolean equals(final ConstructionObject o) { return false; } public boolean equals(final double x, final double y) { return Math.abs(x - y) < 1e-8; } int OldColorIndex; public void setJobTarget(final boolean flag) { if (flag) { OldColorIndex = ColorIndex; setColor(-1); } else if (JobTarget) { setColor(OldColorIndex, SpecialColor); } JobTarget = flag; } public boolean isJobTarget() { return JobTarget; } public void updateCircleDep() { } public void clearCircleDep() { } /** * This clones the object for macro construction. NOTE: This must be * overriden in all items to translate the mother objects. */ public ConstructionObject copy(final double x, final double y) { ConstructionObject o = null; try { o = (ConstructionObject) clone(); setTranslation(o); o.translateConditionals(); o.translate(); o.setName(); o.updateText(); o.setBreak(false); Cn.getH(); // o.setTarget(false); } catch (final Exception e) { } return o; } // public ConstructionObject copy () // { ConstructionObject o=null; // try // { o=(ConstructionObject)clone(); // setTranslation(o); // o.translateConditionals(); // o.translate(); // o.setName(); // o.updateText(); // o.setBreak(false); // Cn.getH(); // // o.setTarget(false); // } // catch (Exception e) {} // return o; // } public Construction getConstruction() { return Cn; } /** * Get the value of an object or throw an exception (e.g. if invalid). Not * all objects have a value. */ public double getValue() throws ConstructionException { throw new NoValueException(Valid); } public void setDefaults() { setShowName(Cn.ShowNames); setShowValue(Cn.ShowValues); setColor(Cn.DefaultColor, SpecialColor); setColorType(Cn.DefaultColorType); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); } public void setTargetDefaults() { setShowName(Cn.ShowNames); setShowValue(Cn.ShowValues); setColor(Cn.DefaultColor, SpecialColor); setColorType(Cn.DefaultColorType); } public boolean contains(final PointObject p) { return false; } public boolean canFix() { return false; } public void setFixed(final String o) { } public boolean isBack(final boolean original) { if (!original && testConditional("background")) { return true; } return Back; } public boolean isBack() { return isBack(false); } public void setBack(final boolean flag) { Back = flag; } public void setInConstruction(final boolean flag) { inConstruction = flag; } public boolean isInConstruction() { return inConstruction; } /** * This is called after the loading of a construction has been finished. * PointObject uses this to bind to a line or circle, which is defined AFTER * it. * * @param c * The construction this object is in. */ public void laterBind(final Construction c) { } /** * This is called after macro definition or execution is complete. * PrimitiveCircleObject uses it to translate the restriction points in its * copy. * * @param c * The construction this object is in. */ public void laterTranslate(final Construction c) { } public void setFilled(final boolean flag) { } public boolean isFilled() { return false; } public boolean isFilledForSelect() { return isFilled(); } public boolean getObtuse() { return Obtuse; } public void setObtuse(final boolean flag) { Obtuse = flag; } public String getDescription() { return ""; } public void round() { } public boolean isFixed() { return false; } public boolean isBreak() { return Break; } public void setBreak(final boolean flag) { Break = flag; HideBreak = false; } public boolean isHideBreak() { return HideBreak; } public void setHideBreak(final boolean flag) { HideBreak = flag; Break = flag; } public boolean isSolid(final boolean original) { if (!original && testConditional("solid")) { return true; } return Solid; } public boolean isSolid() { return isSolid(false); } public void setSolid(final boolean solid) { Solid = solid; } public boolean maybeTransparent() { return false; } public boolean locallyLike(final ConstructionObject o) { return false; } public double Value = 1000; public int compare(final SortObject o) { final ConstructionObject ob = (ConstructionObject) o; if (ob.Value < Value) { return 1; } else if (ob.Value == Value) { return 0; } else { return -1; } } public void setSelectable(final boolean flag) { Selectable = flag; } public void snap(final ZirkelCanvas zc) { } public String getUnit() { return Unit; } public void setUnit(final String s) { Unit = s; } public boolean hasUnit() { return true; } public boolean isBreakHide() { return BreakHide; } public void setBreakHide(final boolean flag) { BreakHide = flag; } public String getEquation() { return getDisplayValue(); } public String helpDisplayValue(final boolean start, double x, final String tag) { String s = ""; if (Math.abs(x) < 1e-10) { return s; } if (x < 0) { s = "-"; } else if (!start) { s = "+"; } x = Math.abs(x); if (Math.abs(x - 1) > 1e-10) { s = s + roundDisplay(x); } if (tag.equals("")) { return s; } else if (s.equals("") || s.equals("-")) { return s + tag; } else { return s + "*" + tag; } } public String helpDisplayNumber(final boolean start, double x) { String s = ""; if (Math.abs(x) < 1e-10) { return s; } if (x < 0) { s = "-"; } else if (!start) { s = "+"; } x = Math.abs(x); return s + roundDisplay(x); } public boolean visible(final ZirkelCanvas zc) { return selected() || ColorType != INVISIBLE || zc.showHidden(); } public boolean isBold() { return Bold; } public void setBold(final boolean bold) { Bold = bold; } public boolean isLarge() { return Large; } public void setLarge(final boolean large) { Large = large; } // Routines for conditional formatting public void addConditional(final String tag, final Expression expr) { final Conditional c = new Conditional(tag, expr); if (Conditionals == null) { Conditionals = new Vector(); } Conditionals.addElement(c); } public Expression getConditional(final String tag) { if (Conditionals == null) { return null; } final Enumeration e = Conditionals.elements(); while (e.hasMoreElements()) { final Conditional c = (Conditional) e.nextElement(); if (c.getTag().equals(tag)) { return c.getExpression(); } } return null; } public boolean haveConditional(final String tag) { final Expression ex = getConditional(tag); return (ex != null); } /** * Test if the conditional "tag" evaluates to true. * * @param tag */ public boolean testConditional(final String tag) { final Expression ex = getConditional(tag); if (ex == null) { return false; } try { if (ex.getValue() != 0) { return true; } } catch (final Exception e) { } return false; } public void clearConditionals() { Conditionals = null; } public void translateConditionals() { if (Conditionals != null) { final Enumeration e = Conditionals.elements(); clearConditionals(); while (e.hasMoreElements()) { final Conditional c = (Conditional) e.nextElement(); final String expr = c.getExpression().toString(); final Expression enew = new Expression(expr, getConstruction(), this); enew.translate(); addConditional(c.getTag(), enew); } } if (AliasES != null) { setAlias(AliasES.toString()); AliasES.translate(); } } public boolean haveConditionals() { return Conditionals != null; } public void checkConditionals() throws ConstructionException { if (Conditionals == null) { return; } final Enumeration e = Conditionals.elements(); while (e.hasMoreElements()) { final Conditional c = (Conditional) e.nextElement(); if (!c.getExpression().isValid()) { throw new ConstructionException(c.getExpression() .getErrorText()); } c.getExpression().getValue(); } } /** * Get the z-buffer for this object. * * @return double value z * @throws ConstructionException */ public double getZ() throws ConstructionException { final Expression e = getConditional("z"); if (e == null) { throw new ConstructionException(""); } return e.getValue(); } public boolean canDisplayName() { return true; } public int getNCount() { return NCount; } public void setNCount(final int count) { NCount = count; } ExpressionString AliasES = null; public String getAlias() { if (AliasES == null) { return null; } else { return AliasES.toString(); } } public void setAlias(final String s) { if (s == null) { AliasES = null; } else { AliasES = new ExpressionString(s, this); } } /** * A general workplace for rekursive validation. VRek gets the elements that * need to be updated. */ public MyVector VRek; public boolean RekValidating = false; public static final int DescriptionState = 0, FormulaState = 1, SizeState = 2; /** * Get a display string for the Lister class. */ public String getElementString(final int state) { String s = ""; switch (state) { case DescriptionState: s = getName() + " : " + FileName.chop(getText(), 80); break; case SizeState: s = getName() + " : " + FileName.chop(getSizeDisplay(), 80); break; case FormulaState: s = getName() + " : " + FileName.chop(getEquation(), 80); break; } if (isSuperHidden()) { s = "( " + s + " )"; } if (isHideBreak()) { s = "** " + s; } else if (isBreak()) { s = "* " + s; } if (!valid()) { s = "? " + s; } if (this instanceof MoveableObject && ((MoveableObject) this).moveable()) { s = "> " + s; } return s; } public String getElementString() { return getElementString(0); } /** * Get a color for the element in the display color. */ public Color getElementColor() { if (isJobTarget()) { return ZirkelFrame.TargetColor; } else if (indicated()) { return ZirkelFrame.IndicateColor; } else if (selected()) { return ZirkelFrame.SelectColor; } return getColor(); } public boolean SpecialParameter = false; public boolean isSpecialParameter() { return SpecialParameter; } public void setSpecialParameter(final boolean flag) { SpecialParameter = flag; } /** * Service function to extract a point from an expression * * @param E * @return point object or null */ static public PointObject getPointObject(final Expression E) { if (E == null) { return null; } final ConstructionObject o = E.getObject(); if (o == null || !(o instanceof PointObject)) { return null; } return (PointObject) o; } // provide a reusable array for each construction object MyVector MV; boolean MVInUse = false; /** * Get an empty MyVector. * * @return MyVector instance */ public MyVector getVector() { if (MVInUse) { return new MyVector(); } if (MV == null) { MV = new MyVector(); } MVInUse = true; return MV; } /** * MyVector no longer needed. */ public void discardMV() { MVInUse = false; MV.removeAllElements(); } public double getX() { return 0.0; } public double getY() { return 0.0; } public double getR() { return 0.0; } public void setType(final int i) { } public int getType() { return 0; } public boolean isPartial() { return false; } public void setPartial(final boolean bool) { } public void setDisplaySize(final int i) { } public int getDisplaySize() { return 0; } public void setExpression(final String expr, final Construction c) throws ConstructionException { } public String getExpression() { return ""; } public boolean fixed() { return true; } public String getEX() { return ""; } public String getEY() { return ""; } public String getEXpos() { return getEX(); } public String getEYpos() { return getEY(); } public void setFixed(final boolean bool) { } public void setFixed(final String x, final String y) { } public void setFixed(final boolean bool, final String r) throws ConstructionException { } public void move(final double x, final double y) { } public String getPrompt() { return ""; } public void setPrompt(final String prompt) { } public String getMin() { return ""; } public String getMax() { return ""; } public int getDistance(final PointObject P) { return Integer.MAX_VALUE; } public void setSlider(final String smin, final String smax) { } public void setSlider(final boolean bool) { } public boolean isSlider() { return false; } public String getStringLength() { return ""; } public void setDragable(final boolean f) { } public boolean isDragable() { return false; } public String getE() { return ""; } public String getLines() { return ""; } public void setLines(final String o) { } public double getIncrement() { return 0.0; } public void setIncrement(final double inc) { } public boolean isInside() { return false; } public void setInside(final boolean flag) { } public boolean isSpecial() { return false; } public void setSpecial(final boolean f) { } public void clearConditional(final String tag) { if (haveConditional(tag)) { if (Conditionals.size() == 1) { Conditionals = null; return; } for (int i = 0; i < Conditionals.size(); i++) { final Conditional c = (Conditional) Conditionals.get(i); if (c.getTag().equals(tag)) { Conditionals.remove(i); return; } } } } } ./src/rene/zirkel/objects/CVS/RevisionCache/SegmentObject.java#1.40000644000175000017500000003544511171153765023503 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: SegmentObject.java import java.awt.Color; import java.awt.Frame; import java.util.Enumeration; import rene.dialogs.Warning; import rene.gui.Global; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import eric.JGlobals; /** * @author Rene Class for segments, derived from LineObject, TwoPointLineObject. * Segments override various methods from lines. They have a length. * Also the length can be fixed. */ public class SegmentObject extends TwoPointLineObject { static Count N = new Count(); protected boolean Fixed = false; // fixed length? Expression E; // expression to fix the length. boolean ExpressionFailed; // invalid expression? boolean Arrow = false; // draw as arrow. int code_symbol = 0; public SegmentObject(final Construction c, final PointObject p1, final PointObject p2) { super(c, p1, p2); validate(); updateText(); Unit = Global.getParameter("unit.length", ""); } @Override public String getTag() { return "Segment"; } @Override public int getN() { return N.next(); } // public void setDefaults () // { Arrow=Cn.Vectors; // super.setDefaults(); // } @Override public void setDefaults() { Arrow = Cn.Vectors; setShowName(Global.getParameter("options.segment.shownames", false)); setShowValue(Global.getParameter("options.segment.showvalues", false)); setColor(Global.getParameter("options.segment.color", 0), Global .getParameter("options.segment.pcolor", (Color) null)); setColorType(Global.getParameter("options.segment.colortype", 0)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Global.getParameter("options.segment.large", false)); setBold(Global.getParameter("options.segment.bold", false)); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.segment.shownames", false)); setShowValue(Global.getParameter("options.segment.showvalues", false)); setColor(Global.getParameter("options.segment.color", 0), Global .getParameter("options.segment.pcolor", (Color) null)); setColorType(Global.getParameter("options.segment.colortype", 0)); setLarge(Global.getParameter("options.segment.large", false)); setBold(Global.getParameter("options.segment.bold", false)); } @Override public void updateText() { if (!Fixed) { setText(text2(Zirkel.name("text.segment"), P1.getName(), P2 .getName())); } else { if (E == null) { setText(text3(Zirkel.name("text.segment.fixed"), P1.getName(), P2.getName(), "" + round(R))); } else { setText(text3(Zirkel.name("text.segment.fixed"), P1.getName(), P2.getName(), "\"" + E.toString() + "\"")); } } } @Override public void validate() { ExpressionFailed = false; if (!P1.valid() || !P2.valid()) { Valid = false; return; } else { Valid = true; X1 = P1.getX(); Y1 = P1.getY(); X2 = P2.getX(); Y2 = P2.getY(); // compute normalized vector in the direction of the line: DX = X2 - X1; DY = Y2 - Y1; R = Math.sqrt(DX * DX + DY * DY); // System.out.println("X1="+X1+" Y1="+Y1+" | X2="+X2+" Y2="+Y2+" R="+R); // if fixed, move the moveable endpoint. if (Fixed && E != null) { try { final double FixedR = E.getValue(); // System.out.println(R+" "+FixedR); if (FixedR < 1e-8) { R = 0; ExpressionFailed = true; Valid = false; return; } boolean movefirst = P1.moveableBy(this), movesecond = P2 .moveableBy(this); if (P2.getBound() != null) { final ConstructionObject bound = P2.getBound(); if (bound instanceof RayObject) { if (((RayObject) bound).getP1() == P1) { movesecond = true; } } } else if (P1.getBound() != null) { final ConstructionObject bound = P1.getBound(); if (bound instanceof RayObject) { if (((RayObject) bound).getP1() == P2) { movefirst = true; movesecond = false; } } } if (movesecond) { if (R < 1e-10) { P2.move(X1 + FixedR, Y1); } else { P2.move(X1 + FixedR * DX / R, Y1 + FixedR * DY / R); } P1.setUseAlpha(false); // System.out.println("Move "+P2.getName()); } else if (movefirst) { if (R < 1e-10) { P1.move(X2 - FixedR, Y2); } else { P1.move(X2 - FixedR * DX / R, Y2 - FixedR * DY / R); } P2.setUseAlpha(false); // System.out.println("Move "+P1.getName()); } else { Fixed = false; // no moveable endpoint! } if (Fixed) { X1 = P1.getX(); Y1 = P1.getY(); X2 = P2.getX(); Y2 = P2.getY(); DX = X2 - X1; DY = Y2 - Y1; R = Math.sqrt(DX * DX + DY * DY); P2.movedBy(this); P1.movedBy(this); } } catch (final Exception e) { ExpressionFailed = true; Valid = false; R = 0; return; } } // See of the length is too small. if (R < 1e-10) { R = 0; DX = 1; DY = 0; } else { DX /= R; DY /= R; } } } @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) { return; } final double c1 = zc.col(X1), r1 = zc.row(Y1), c2 = zc.col(X2), r2 = zc .row(Y2); if (visible(zc)) { if (isStrongSelected() && g instanceof MyGraphics13) { ((MyGraphics13) g).drawMarkerLine(c1, r1, c2, r2); } g.setColor(this); if (tracked()) { zc.UniversalTrack.drawTrackLine(this, c1, r1, c2, r2); } g.drawLine(c1, r1, c2, r2, this); if (code_symbol > 0) { // length of the tick mark : final double rr = 7; // distance between two marks : final double dd = 3; // oblique de la marque : final double ob = 2; final double cM = (c1 + c2) / 2, rM = (r1 + r2) / 2; final double A = c2 - cM, B = r2 - rM; final double sqrt2 = Math.sqrt(B * B + A * A); final double xx1 = -(rr * B) / sqrt2 + cM - ob * A / sqrt2; final double yy1 = (rr * A) / sqrt2 + rM - ob * B / sqrt2; final double xx2 = (rr * B) / sqrt2 + cM + ob * A / sqrt2; final double yy2 = -(rr * A) / sqrt2 + rM + ob * B / sqrt2; final double xt = dd * A / sqrt2, yt = dd * B / sqrt2; switch (code_symbol) { case 1: g.drawLine(xx1, yy1, xx2, yy2, this); break; case 2: g.drawLine(xx1 - xt, yy1 - yt, xx2 - xt, yy2 - yt, this); g.drawLine(xx1 + xt, yy1 + yt, xx2 + xt, yy2 + yt, this); break; case 3: g.drawLine(xx1 - 2 * xt, yy1 - 2 * yt, xx2 - 2 * xt, yy2 - 2 * yt, this); g.drawLine(xx1, yy1, xx2, yy2, this); g.drawLine(xx1 + 2 * xt, yy1 + 2 * yt, xx2 + 2 * xt, yy2 + 2 * yt, this); break; case 4: g.drawLine(xx1 - 3 * xt, yy1 - 3 * yt, xx2 - 3 * xt, yy2 - 3 * yt, this); g.drawLine(xx1 - xt, yy1 - yt, xx2 - xt, yy2 - yt, this); g.drawLine(xx1 + xt, yy1 + yt, xx2 + xt, yy2 + yt, this); g.drawLine(xx1 + 3 * xt, yy1 + 3 * yt, xx2 + 3 * xt, yy2 + 3 * yt, this); break; case 5: g.drawLine(xx1 - 2 * xt, yy1 - 2 * yt, xx2 + 2 * xt, yy2 + 2 * yt, this); g.drawLine(xx1 + 2 * xt, yy1 + 2 * yt, xx2 - 2 * xt, yy2 - 2 * yt, this); break; case 6: g.drawCircle(cM, rM, 2 * dd, this); break; } } if (Arrow) // draw as arrow! { final double a = Math.PI * 0.9; final double r = zc.dx(zc.scale(Global.getParameter( "arrowsize", 15))); // 10 pixel on the screen final double[] cols = new double[3]; cols[0] = c2; cols[1] = zc .col(X2 + (DX * Math.cos(a) + DY * Math.sin(a)) * r); cols[2] = zc.col(X2 + (DX * Math.cos(-a) + DY * Math.sin(-a)) * r); final double[] rows = new double[3]; rows[0] = r2; rows[1] = zc.row(Y2 + (-DX * Math.sin(a) + DY * Math.cos(a)) * r); rows[2] = zc.row(Y2 + (-DX * Math.sin(-a) + DY * Math.cos(-a)) * r); g.fillPolygon(cols, rows, 3, true, false, this); } } final String s = getDisplayText(); if (!s.equals("")) { g.setLabelColor(this); setFont(g); DisplaysText = true; if (KeepClose) { final double side = (YcOffset < 0) ? 1 : -1; drawLabel(g, s, zc, X1 + XcOffset * (X2 - X1), Y1 + XcOffset * (Y2 - Y1), side * DX, side * DY, 0, 0); } else { drawLabel(g, s, zc, (X1 + X2) / 2, (Y1 + Y2) / 2, DX, DY, XcOffset, YcOffset); } } } @Override public boolean canKeepClose() { return true; } @Override public void setKeepClose(final double x, final double y) { KeepClose = true; XcOffset = (x - X1) / R * DX + (y - Y1) / R * DY; YcOffset = (x - X1) / R * DY - (y - Y1) / R * DX; } // public String getDisplayValue () // { return // eric.JGlobals.fixDecimal(""+round(R,ZirkelCanvas.LengthsFactor)); // } @Override public String getDisplayValue() { // return ""+round(R,ZirkelCanvas.LengthsFactor); return JGlobals.getLocaleNumber(R, "lengths"); } /** * see, if a point is on the segment or near to it. */ @Override public boolean nearto(final int c, final int r, final ZirkelCanvas zc) { if (ExpressionFailed && P1.valid()) { return P1.nearto(c, r, zc); } if (ExpressionFailed && P2.valid()) { return P2.nearto(c, r, zc); } if (!displays(zc)) { return false; } // compute point at c,r final double x = zc.x(c), y = zc.y(r); // compute distance from line double d = (x - X1) * DY - (y - Y1) * DX; // compute offset final double o = (x - X1) * DX + (y - Y1) * DY, o1 = (X2 - X1) * DX + (Y2 - Y1) * DY; if (o1 > 0) { if (o > o1) { d = Math.sqrt((x - X2) * (x - X2) + (y - Y2) * (y - Y2)); } else if (o < 0) { d = Math.sqrt((x - X1) * (x - X1) + (y - Y1) * (y - Y1)); } } else { if (o < o1) { d = Math.sqrt((x - X2) * (x - X2) + (y - Y2) * (y - Y2)); } else if (o > 0) { d = Math.sqrt((x - X1) * (x - X1) + (y - Y1) * (y - Y1)); } } // scale in screen coordinates Value = Math.abs(zc.col(zc.minX() + d) - zc.col(zc.minX())) * 0.9; return Value < zc.selectionSize(); } /** * true, if the segment is too small. */ @Override public boolean onlynearto(final int c, final int r, final ZirkelCanvas zc) { return R < zc.dx(3 * (int) zc.pointSize()); } @Override public void printArgs(final XmlWriter xml) { xml.printArg("from", P1.getName()); xml.printArg("to", P2.getName()); if (Fixed && E != null) { xml.printArg("fixed", E.toString()); } if (Arrow) { xml.printArg("arrow", "true"); } if (code_symbol > 0) { xml.printArg("code_symbol", "" + code_symbol); } super.printArgs(xml); } @Override public double getLength() { return R; } @Override public boolean fixed() { return Fixed; } @Override public void setFixed(final boolean flag, final String s) throws ConstructionException { if (!flag || s.equals("")) { Fixed = false; E = null; } else { E = new Expression(s, getConstruction(), this); if (!E.isValid()) { throw new ConstructionException(E.getErrorText()); } Fixed = true; } updateText(); } @Override public void round() { try { setFixed(true, getDisplayValue()); validate(); } catch (final Exception e) { } } /** * @return Segment can be fixed in length. */ @Override public boolean canFix() { return P1.moveableBy(this) || P2.moveableBy(this); } @Override public boolean contains(final double x, final double y) { final double a = (x - X1) * DX + (y - Y1) * DY; if (a < -1e-9 || a > R + 1e-9) { return false; } return true; } @Override public double project(final double x, final double y) { final double h = super.project(x, y); if (h < 0) { return 0; } if (h > R) { return R; } return h; } /** * @return true, if equal. */ @Override public boolean equals(final ConstructionObject o) { if (!(o instanceof SegmentObject) || !o.valid()) { return false; } final SegmentObject l = (SegmentObject) o; return (equals(X1, l.X1) && equals(X2, l.X2) && equals(Y1, l.Y1) && equals( Y2, l.Y2)) || (equals(X1, l.X2) && equals(Y1, l.Y2) && equals(X2, l.X1) && equals( Y2, l.Y1)); } @Override public void edit(final ZirkelCanvas zc) { if (!rene.zirkel.Zirkel.IsApplet) { eric.JGlobals.EditObject(this); return; } super.edit(zc); if (E != null && !E.isValid()) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, E.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } } public boolean isValidFix() { return E != null && E.isValid(); } @Override public String getStringLength() { if (E != null) { return E.toString(); } else { return "" + round(R); } } public int getSegmentCode() { return code_symbol; } public void setSegmentCode(final int i) { code_symbol = i; } @Override public double getValue() throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } else { return R; } } @Override public void translate() { super.translate(); try { setFixed(Fixed, E.toString()); E.translate(); } catch (final Exception e) { Fixed = false; } } @Override public Enumeration depending() { if (!Fixed || E == null) { return super.depending(); } else { super.depending(); final Enumeration e = E.getDepList().elements(); while (e.hasMoreElements()) { DL.add((ConstructionObject) e.nextElement()); } return DL.elements(); } } public void setArrow(final boolean arrow) { Arrow = arrow; } public boolean isArrow() { return Arrow; } @Override public void project(final PointObject P) { final double h = project(P.getX(), P.getY()); P.setXY(getX() + h * getDX(), getY() + h * getDY()); P.setA(h / getLength()); } @Override public void project(final PointObject P, final double alpha) { final double d = alpha * getLength(); P.setXY(getX() + d * getDX(), getY() + d * getDY()); } @Override public boolean moveable() { if (!Fixed && P1.moveable() && P2.moveable()) { return true; } return false; } } ./src/rene/zirkel/objects/CVS/RevisionCache/ConstructionObject.java#1.50000644000175000017500000013210511155151634024556 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: ConstructionObject.java import java.awt.Color; import java.util.Enumeration; import java.util.StringTokenizer; import java.util.Vector; import rene.lister.Element; import rene.util.FileName; import rene.util.MyVector; import rene.util.sort.SortObject; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.ZirkelFrame; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.construction.DepList; import rene.zirkel.expression.Expression; import rene.zirkel.expression.ExpressionString; import rene.zirkel.expression.NoValueException; import rene.zirkel.graphics.MyGraphics; class Conditional implements Cloneable { String Tag; Expression Expr; public Conditional(final String t, final Expression e) { Tag = t; Expr = e; } public String getTag() { return Tag; } public Expression getExpression() { return Expr; } public void setExpression(final Expression e) { Expr = e; } } public class ConstructionObject implements Cloneable, SortObject, Element { /** object color and static default color */ protected int ColorType = 0; public static final int NORMAL = 0, THICK = 1, THIN = 2, INVISIBLE = 3; protected Color C = Color.black; protected Color SpecialColor = null; protected int ColorIndex = 0; protected boolean Tracked = false; protected boolean Selected = false; // is selected (highlight red!) protected boolean StrongSelected = false; // to highlight the object even // more protected boolean Indicated = false; // mouse is over it (highlight darker!) protected boolean ShowIndicatedName = false; // shows the name (or name and // value) protected boolean LabelSelected = false; // label is selected (highlight // red!) protected boolean Valid = true; // e.g. for intersections protected boolean Hidden = false; // not visible or lighter protected boolean SuperHidden = false; // not visible at all protected boolean BreakHide = false; // Hide due to hiding break protected boolean ShowName = false; // shows the name (or name and value) protected boolean ShowValue = false; // shows the value (or name and value) protected boolean Selectable = true; // may be selected protected String Name = "Generic"; protected static int Count = 1; // To generate a unique name protected String Text = "???"; // Description (human readable) private int XOffset = 0, YOffset = 0; // Deprecated INT offset (translated // to double) protected double XcOffset = 0.0, YcOffset = 0.0; // Offsets for the text // display protected boolean KeepClose; // Keep the text display close to the object protected boolean DisplaysText = false; // Does this object display text? protected double TX1, TY1, TX2, TY2; // text rectangle. protected Construction Cn; // Construction that this Object belongs to protected boolean MainParameter, Parameter; // for macros and jobs protected boolean Target; // for macros and jobs public boolean Flag, RekFlag, IsDrawn, HasZ; // for various processing // purposes public int Scratch; // for various processing purposes protected boolean Keep = false; // for job parameters. protected boolean JobTarget = false; // for job targets protected ConstructionObject Translation; protected boolean Back = false; // draws in the background (first round) protected boolean Obtuse = true; // for angles and circles between two // points. protected boolean Break = false; // Break point in front of this object? protected boolean HideBreak = false; // Hide construction before this break! protected boolean Solid = false; // Not transparent? static Count N = new Count(); protected boolean inConstruction; // Is in the construction (or deleted) protected String Unit = ""; // Use a unit display protected boolean Bold = false; // Use a bold font for this item protected boolean Large = false; // Use a large font for this item protected Vector Conditionals; // For conditional formatting protected int NCount = 0; // Unique number protected boolean gotNCount = false; // Have already a number (from load // file) public boolean NeedsRecompute = true; public void copyProperties(final ConstructionObject origin) { Tracked = origin.Tracked; Selected = origin.Selected; StrongSelected = origin.StrongSelected; Indicated = origin.Indicated; ShowIndicatedName = origin.ShowIndicatedName; LabelSelected = origin.LabelSelected; Valid = origin.Valid; Hidden = origin.Hidden; SuperHidden = origin.SuperHidden; BreakHide = origin.BreakHide; ShowName = origin.ShowName; ShowValue = origin.ShowValue; Selectable = origin.Selectable; ColorType = origin.ColorType; C = origin.C; ColorIndex = origin.ColorIndex; if (origin.Conditionals != null) { Conditionals = (Vector) origin.Conditionals.clone(); } } public boolean isGotNCount() { return gotNCount; } public void setGotNCount(final boolean gotNCount) { this.gotNCount = gotNCount; } public ConstructionObject(final Construction c) { Cn = c; inConstruction = true; setName(); } public ConstructionObject(final Construction c, final String name) { Cn = c; inConstruction = true; setName(name); } // tells if it's a main object which can make heavy objects to recompute : public boolean isDriverObject() { return false; } /** * Sets a unique name for the object. Should be overriden in all items. */ public void setName() { if (Cn.LongNames) { Name = Zirkel.name("name." + getTag()) + " " + getN(); } else { Name = Zirkel.name("name.short." + getTag()) + getN(); // System.out.println("nom="+Name); } } public int getN() { return N.next(); } public String getTag() { return "Generic"; } /** * This is used to define macros and run them. The items of the construction * are translated to macro items. */ public ConstructionObject getTranslation() { return Translation; } public void setTranslation(final ConstructionObject t) { Translation = t; } /** * Override in children! This translates the mother items. */ public void translate() { } public void paint(final MyGraphics g, final ZirkelCanvas zc) { } /** * Test, if this object is chosen with coordinates x,y */ public boolean nearto(final int x, final int y, final ZirkelCanvas zc) { return false; } /** * Test, if this object is chosen with coordinates x,y */ public boolean nearto(final int x, final int y, final boolean ignorefill, final ZirkelCanvas zc) { return nearto(x, y, zc); } /** * Test, if this object must be chosen with coordinates x,y, assuming it is * near to these coordinates. */ public boolean onlynearto(final int x, final int y, final ZirkelCanvas zc) { return true; } public boolean textcontains(final int x, final int y, final ZirkelCanvas zc) { if (!DisplaysText || !Valid || (isHidden() && !zc.showHidden())) { return false; } return x > TX1 && x < TX2 && y > TY1 && y < TY2; } public void setTracked(final boolean flag) { Tracked = flag; } public void setSelected(final boolean flag) { Selected = flag; StrongSelected = false; } public void setStrongSelected(final boolean flag) { StrongSelected = flag; } public boolean isStrongSelected() { return StrongSelected; } public boolean selected() { return Selected || StrongSelected; } public boolean tracked() { return Tracked; } public void setLabelSelected(final boolean flag) { LabelSelected = flag; } public boolean isSelectable() { return valid() && !JobTarget && Selectable; } public void validate() { Valid = true; } public boolean valid() { return Valid; } public boolean displays(final ZirkelCanvas zc) { if (SuperHidden) { return false; } if (!zc.showHidden() && (testConditional("hidden") || testConditional("superhidden"))) { return false; } return Valid && !BreakHide && (!Hidden || zc.showHidden()); } public boolean indicated() { return Indicated; } public void setIndicated(final boolean f) { Indicated = f; } public void setIndicated(final boolean f, final boolean showname) { Indicated = f; ShowIndicatedName = showname; } /** * @return The change of the last validation for points bound to lines, * which are defined later. */ public double changedBy() { return 0.0; } /** * Routines to parse descriptive text in various languages. */ static public String text1(final String format, final String s1) { final StringTokenizer t = tokenize(format); String s = "Illegal Format"; try { s = t.nextToken() + s1; s = s + t.nextToken(); } catch (final Exception e) { } return s.trim(); } static public String text2(final String format, final String s1, final String s2) { final StringTokenizer t = tokenize(format); String s = "Illegal Format"; try { s = t.nextToken() + s1 + t.nextToken() + s2; s = s + t.nextToken(); } catch (final Exception e) { } return s.trim(); } static public String text3(final String format, final String s1, final String s2, final String s3) { final StringTokenizer t = tokenize(format); String s = "Illegal Format"; try { s = t.nextToken() + s1 + t.nextToken() + s2 + t.nextToken() + s3; s = s + t.nextToken(); } catch (final Exception e) { } return s.trim(); } static public String text4(final String format, final String s1, final String s2, final String s3, final String s4) { final StringTokenizer t = tokenize(format); String s = "Illegal Format"; try { s = t.nextToken() + s1 + t.nextToken() + s2 + t.nextToken() + s3 + t.nextToken() + s4; s = s + t.nextToken(); } catch (final Exception e) { } return s; } static public String textAny(final String format, final String ss[]) { final StringTokenizer t = tokenize(format); String s = "Illegal Format"; try { s = t.nextToken(); for (int i = 0; i < ss.length; i++) { s = s + ss[i]; if (i < ss.length - 1) { s = s + ", "; } } s = s + t.nextToken(); } catch (final Exception e) { } return s; } static private StringTokenizer tokenize(String format) { if (format.startsWith("%")) { format = " " + format; } if (format.endsWith("%")) { format = format + " "; } return new StringTokenizer(format, "%"); } public void setText(final String s, final boolean user) { if (!user && Text.endsWith(" ")) { return; } Text = s; } public void setText(final String s) { setText(s, false); } public String getText() { return Text; } public boolean labelSelected() { return LabelSelected; } // public void setColor(Color c){ // C=c; // } /** * Set the object color by index. */ public void setColor(final int index) { SpecialColor = null; if (index < 0) { C = Color.pink; } else { if (ColorType == THIN) { C = ZirkelFrame.LightColors[index]; } else { C = ZirkelFrame.Colors[index]; } ColorIndex = index; } } /** * Set the object color by index. * * @param index * @param col */ public void setColor(final int index, final Color col) { SpecialColor = col; if (col == null) { if (ColorType == THIN) { C = ZirkelFrame.LightColors[index]; } else { C = ZirkelFrame.Colors[index]; } ColorIndex = index; } else { C = SpecialColor; } } /** * Get the current color index. If there is a conditional for the color, * test it and use it. */ public int getColorIndex(final boolean original) { if (!original && haveConditionals()) { for (int i = 0; i < ZirkelFrame.ColorStrings.length; i++) { if (testConditional(ZirkelFrame.ColorStrings[i])) { return i; } } } return ColorIndex; } public int getConditionalColor() { if (haveConditionals()) { for (int i = 0; i < ZirkelFrame.ColorStrings.length; i++) { if (testConditional(ZirkelFrame.ColorStrings[i])) { return i; } } } return -1; } public Color getSpecialColor() { return SpecialColor; } public void setSpecialColor(final Color c) { SpecialColor = c; } public int getColorIndex() { return getColorIndex(false); } public Color getColor() { Color Col, LightCol, BrighterCol, BrighterLightCol; // it's a personnal color : if (SpecialColor != null) { final int i = getConditionalColor(); if (i != -1) { Col = ZirkelFrame.Colors[i]; LightCol = ZirkelFrame.LightColors[i]; BrighterCol = ZirkelFrame.BrighterColors[i]; BrighterLightCol = ZirkelFrame.BrighterLightColors[i]; } else { final double lambda = 0.4; Col = SpecialColor; final int r = (int) (255 * (1 - lambda) + Col.getRed() * lambda); final int g = (int) (255 * (1 - lambda) + Col.getGreen() * lambda); final int b = (int) (255 * (1 - lambda) + Col.getBlue() * lambda); LightCol = new Color(r, g, b); BrighterCol = Col.brighter(); BrighterLightCol = LightCol.brighter(); } } else { final int i = getColorIndex(); Col = ZirkelFrame.Colors[i]; LightCol = ZirkelFrame.LightColors[i]; BrighterCol = ZirkelFrame.BrighterColors[i]; BrighterLightCol = ZirkelFrame.BrighterLightColors[i]; } if (isJobTarget()) { return ZirkelFrame.TargetColor; } else if (selected()) { return ZirkelFrame.SelectColor; } else if (getColorType() == ConstructionObject.THIN) { if (isHidden()) { return BrighterLightCol; } else { return LightCol; } } else { if (isHidden()) { return BrighterCol; } else { return Col; } } } public boolean mustHide(final ZirkelCanvas zc) { if (!Valid) { return true; } if (ColorIndex > 0 && zc.getShowColor() != 0 && zc.getShowColor() != ColorIndex) { return true; } if (JobTarget && Hidden) { return true; } return SuperHidden || testConditional("superhidden") || BreakHide || zc.hides(this) || (isHidden() && !zc.showHidden()); } public void setHidden(final boolean flag) { Hidden = flag; if (!flag) { SuperHidden = false; } } public void setSuperHidden(final boolean flag) { SuperHidden = flag; } public void toggleHidden() { Hidden = !Hidden; if (!Hidden) { SuperHidden = false; } } public boolean isHidden(final boolean original) { if (!original && testConditional("visible")) { return false; } if (!original && (testConditional("hidden") || testConditional("superhidden"))) { return true; } return Hidden || SuperHidden; } public boolean isHidden() { return isHidden(false); } public boolean isSuperHidden(final boolean original) { if (!original && testConditional("superhidden")) { return true; } return SuperHidden; } public boolean isSuperHidden() { return isSuperHidden(false); } public String getName() { return Name; } public void setName(String n) { Name = ""; if (Cn != null) { ConstructionObject o = Cn.find(n); while (o != null && o != this) { n = n + "*"; o = Cn.find(n); } } Name = n; } public void setNameCheck(String n) throws ConstructionException { boolean extend = false; Name = ""; if (Cn != null) { ConstructionObject o = Cn.find(n); if (o != null && o != this) { n = n + "*"; o = Cn.find(n); extend = true; } } Name = n; if (extend) { throw new ConstructionException(Zirkel.name("exception.double")); } } public void setNameWithNumber(String n) { Name = ""; if (Cn != null) { ConstructionObject o = Cn.find(n); if (o != null) { while (o != null && o != this) { setName(); n = Name; Name = ""; o = Cn.find(n); } Name = n; } else { Name = n; } } else { Name = n; } } public void edit(final ZirkelCanvas zc) { zc.repaint(); } /** * Service routine to draw a string from upper left coordinates. Position is * at TX1, TX2. */ public void drawLabel(final MyGraphics g, final String s) { g.drawStringExtended(s, TX1, TY1); TX2 = TX1 + g.stringWidth(s); TY2 = TY1 + g.stringHeight(s); } public void setFont(final MyGraphics g) { g.setFont(Large, Bold); } /** * Service routine to draw a string centered at x,y */ public void drawCenteredLabel(final MyGraphics g, final String s, final ZirkelCanvas zc, final double x, final double y, final double xo, final double yo) { final int ws = g.stringWidth(s), hs = g.stringHeight(s); TX1 = zc.col(x + xo) - ws / 2; TY1 = zc.row(y + yo) - hs / 2; g.drawStringExtended(s, TX1, TY1); TX2 = TX1 + ws; TY2 = TY1 + hs; } /** * Service routine to draw a string at x,y but offset into direction -vy,vx * so that it does not intersect the direction vx,vy. r=(vx,vy) is assumed * to be normalized. */ public void drawLabel(final MyGraphics g, final String s, final ZirkelCanvas zc, final double x, final double y, final double vx, final double vy, final double xo, final double yo) { final int ws = g.stringWidth(s), hs = g.stringHeight(s); final double w = zc.dx(ws), h = zc.dy(hs); final double d1 = Math.abs(-w * vy + h * vx); final double d2 = Math.abs(w * vy + h * vx); double d = d1; if (d2 > d) { d = d2; } final double dd = zc.dy(2 * zc.pointSize()); TX1 = zc.col(x - vy * (d + 3 * dd) / 2 + xo) - ws / 2; TY1 = zc.row(y + vx * (d + 3 * dd) / 2 + yo) - hs / 2; g.drawStringExtended(s, TX1, TY1); TX2 = TX1 + ws; TY2 = TY1 + hs; } /** * Service routine to draw a string at x,y but offset into direction -vy,vx * so that it does not intersect the direction vx,vy. r=(vx,vy) is assumed * to be normalized. */ public void drawPointLabel(final MyGraphics g, final String s, final ZirkelCanvas zc, final double x, final double y, final double vx, final double vy, final double xo, final double yo) { final int ws = g.stringWidth(s), hs = g.stringHeight(s); final double w = zc.dx(ws), h = zc.dy(hs); final double d1 = Math.abs(-w * vy + h * vx); final double d2 = Math.abs(w * vy + h * vx); double d = d1; if (d2 > d) { d = d2; } final double dd = zc.dy(2 * zc.pointSize()); if (Math.abs(d * vx) > h + 2 * dd) { d = Math.abs((h + 2 * dd) / vx); } final double xp = x - vy * d / 2, yp = y + vx * d / 2; TX1 = zc.col(xp - vy * dd * 1.5 + xo) - ws / 2; TY1 = zc.row(yp + vx * dd * 1.5 + yo) - hs / 2; g.drawStringExtended(s, TX1, TY1); TX2 = TX1 + ws; TY2 = TY1 + hs; } /** * Save the object in XML form. */ public void save(final XmlWriter xml) { xml.startTagStart(getTag()); xml.printArg("name", Name); if (AliasES != null) { xml.printArg("alias", AliasES.toString()); } xml.printArg("n", "" + NCount); if (ColorIndex != 0) { xml.printArg("color", "" + ColorIndex); } if (SpecialColor != null) { xml.printArg("scolor", SpecialColor.getRed() + "," + SpecialColor.getGreen() + "," + SpecialColor.getBlue()); } if (ColorType == THICK) { xml.printArg("type", "thick"); } if (ColorType == THIN) { xml.printArg("type", "thin"); } if (ColorType == INVISIBLE) { xml.printArg("type", "invisible"); } if (SuperHidden) { xml.printArg("hidden", "super"); } else if (Hidden) { xml.printArg("hidden", "true"); } if (ShowName) { xml.printArg("showname", "true"); } if (ShowValue) { xml.printArg("showvalue", "true"); } if (Back) { xml.printArg("background", "true"); } if (XcOffset != 0.0) { xml.printArg("xcoffset", "" + XcOffset); } if (YcOffset != 0.0) { xml.printArg("ycoffset", "" + YcOffset); } if (KeepClose) { xml.printArg("keepclose", "true"); } if (Parameter) { xml.printArg("parameter", "true"); } if (MainParameter) { xml.printArg("mainparameter", "true"); } if (Target) { xml.printArg("target", "true"); } if (Tracked) { xml.printArg("tracked", "true"); } if (Break) { if (HideBreak) { xml.printArg("hidebreak", "true"); } else { xml.printArg("break", "true"); } } if (Solid && maybeTransparent() && isFilled()) { xml.printArg("solid", "true"); } if (!Unit.equals("")) { xml.printArg("unit", Unit); } if (Bold) { xml.printArg("bold", "true"); } if (Large) { xml.printArg("large", "true"); } if (haveConditionals()) { int i = 0; final Enumeration e = Conditionals.elements(); while (e.hasMoreElements()) { final Conditional c = (Conditional) e.nextElement(); xml.printArg("ctag" + i, c.getTag()); xml.printArg("cexpr" + i, c.getExpression().toString()); i++; } } printArgs(xml); xml.startTagEnd(); xml.print(Text); xml.endTag(getTag()); xml.println(); } public void printArgs(final XmlWriter xml) { } public void updateText() { } public void setConstruction(final Construction c) { Cn = c; inConstruction = true; setNameWithNumber(Name); // make sure the name is not double } public boolean showName(final boolean original) { if (!original && testConditional("showname")) { return true; } return ShowName || (Indicated && ShowIndicatedName); } public boolean showName() { return showName(false); } public void setShowName(final boolean f) { ShowName = f; } public boolean showValue(final boolean original) { if (!original && testConditional("showvalue")) { return true; } return ShowValue; } public boolean showValue() { return showValue(false); } public void setShowValue(final boolean f) { ShowValue = f; } /** * Determine the string to be displayed onscreen. * * @return "", if there should be no display. */ static String findIndice(final String s) { return ""; } public String getDisplayText() { // If the name of the object starts with simple letters only // and ends with a number, then place this number in subscript // and use the $-character around to send the string to HotEqn String name = Name.replaceAll("^([a-zA-Z]+)([0-9]+)$", "\\$$1_$2\\$"); if (AliasES != null) { name = AliasES.evaluate(); } else if (name.indexOf("~") > 0) { name = name.substring(0, name.indexOf("~")); } if (showName()) { if (showValue()) { final String value = getDisplayValue(); if (value.equals("")) { return name; } if (name.endsWith("$")) { name = name.substring(0, name.length() - 1); } if (name.endsWith("_") && name.length() > 1) { name = name.substring(0, name.length() - 1); } else { name = name + " = "; } if (Unit.equals("")) { return name + getDisplayValue(); } else { return name + getDisplayValue() + Unit; } } else { if (name.indexOf("~") > 0 && AliasES == null) { name = name.substring(0, name.indexOf("~")); } return name; } } else if (showValue()) { if (Unit.equals("")) { return getDisplayValue(); } else { return getDisplayValue() + Unit; } } return ""; } /** * Replace the expression in %...% by their values * * @param s * @param zc * may be null (no direct search of object) * @return */ public String replaceExpressions(String s) { // System.out.println(s); final boolean latex = s.startsWith("$"); int searchpos = 0; while (s.indexOf("%", searchpos) >= 0) { final int h1 = s.indexOf("%", searchpos); final String s1 = s.substring(h1 + 1); final int h2 = s1.indexOf("%"); if (h2 == 0) { s = s.substring(0, h1) + "%" + s1.substring(1); searchpos += 1; } else if (h2 >= 0) { String var = s1.substring(0, h2); boolean showeq = false, forceplus = false; if (var.startsWith("~")) // show equation { var = var.substring(1); showeq = true; } else if (var.startsWith("+")) // force + { var = var.substring(1); forceplus = true; } final ConstructionObject o = getConstruction().find(var); // System.out.println(o+" "+var); String repl = ""; if (o != null) { DL.add(o); } try { if (showeq) { repl = o.getEquation(); } else { if (o != null) { final double x = round(o.getValue()); if (forceplus && x >= 0) { repl = "+"; } if (x == Math.floor(x + 0.1)) { repl = repl + (int) (x); } else { repl = repl + x; } } else { final Expression ex = new Expression(var, getConstruction(), this); if (ex.isValid()) { final Enumeration e = ex.getDepList() .elements(); while (e.hasMoreElements()) { DL .add((ConstructionObject) e .nextElement()); } } final double x = round(ex.getValue()); if (forceplus && x >= 0) { repl = "+"; } if (x == Math.floor(x + 0.1)) { repl = repl + (int) (x); } else { repl = repl + x; } } } } catch (final Exception ex) { if (latex) { repl = "\\circ"; } else { repl = "???"; // ex.printStackTrace(); } } s = s.substring(0, h1) + repl + s1.substring(h2 + 1); searchpos = h1 + repl.length(); } else { break; } } return s; } /** * Add the dependencies in expressions in %...% in the string. * * @param s * @param zc * may be null (no direct search of object) * @return */ public void addDepInExpressions(final String s) { replaceExpressions(s); } /** * Replace the expression in %...% by their translated epressions. * * @param s * @param zc * may be null (no direct search of object) * @return */ public String translateExpressions(String s) { // System.out.println(s); s.startsWith("$"); int searchpos = 0; while (s.indexOf("%", searchpos) >= 0) { // System.out.println(searchpos); final int h1 = s.indexOf("%", searchpos); final String s1 = s.substring(h1 + 1); final int h2 = s1.indexOf("%"); if (h2 == 0) { s = s.substring(0, h1) + "%" + s1.substring(1); searchpos += 1; } else if (h2 >= 0) { String var = s1.substring(0, h2); boolean showeq = false; String repl = ""; if (var.startsWith("~")) // show equation { var = var.substring(1); showeq = true; repl = "+"; } else if (var.startsWith("+")) // force + { var = var.substring(1); repl = "~"; } ConstructionObject o = getConstruction().find(var); if (o != null) { o = o.getTranslation(); // System.out.println(o+" "+var); } if (showeq) { repl = repl + o.getName(); } else { if (o != null) { repl = repl + o.getName(); } else { final Expression ex = new Expression(var, getConstruction(), this); if (ex.isValid()) { ex.translate(); repl = repl + ex.toString(); } else { return s; } } } // System.out.println(repl); s = s.substring(0, h1) + "%" + repl + "%" + s1.substring(h2 + 1); searchpos = h1 + repl.length() + 2; // System.out.println(s); } else { break; } } return s; } /** * To be overridden by the objects. * * @return The string to display the value (length, coordinates) of the * object. */ public String getDisplayValue() { return ""; } public String getSizeDisplay() { return getDisplayValue() + getUnit(); } /** * Service function to round a value. */ public double round(final double x) { return round(x, ZirkelCanvas.EditFactor); } public double roundDisplay(final double x) { return round(x, ZirkelCanvas.LengthsFactor); } public double round(final double x, final double Rounder) { return Math.round(x * Rounder) / Rounder; } // The following procedures are for label offset public void setcOffset(final double x, final double y) { XcOffset = x; YcOffset = y; } public double xcOffset() { return XcOffset; } public double ycOffset() { return YcOffset; } public void setOffset(final int x, final int y) // deprecated { XOffset = x; YOffset = y; } public boolean isKeepClose() { return KeepClose; } public void setKeepClose(final double x, final double y) // Override! { KeepClose = true; XcOffset = x; YcOffset = y; } public void setKeepClose(final boolean flag) { if (KeepClose && !flag) { XcOffset = 0; YcOffset = 0; } KeepClose = flag; } public boolean canKeepClose() // Override! { return false; } public void translateOffset(final ZirkelCanvas zc) { if (XOffset != 0 || YOffset != 0) { XcOffset = zc.dx(XOffset); YcOffset = zc.dy(-YOffset); XOffset = YOffset = 0; } } public int getColorType(final boolean original) { if (!original && testConditional("thin")) { return THIN; } if (!original && testConditional("thick")) { return THICK; } if (!original && testConditional("normal")) { return NORMAL; } return ColorType; } public int getColorType() { return getColorType(false); } public void setColorType(final int type) { ColorType = type; setColor(ColorIndex, SpecialColor); } public boolean isParameter() { return Parameter || MainParameter; } public boolean isMainParameter() { return MainParameter; } public void clearParameter() { Parameter = false; MainParameter = false; } public void setMainParameter() { final Enumeration e = secondaryParams(); while (e.hasMoreElements()) { final ConstructionObject o = (ConstructionObject) e.nextElement(); o.setParameter(); } MainParameter = true; } public void setParameter() { Parameter = true; } public static DepList DL = new DepList(); /** * Return an enumeration of objects, that this object depends on. This * should usually called from children via super. */ public Enumeration depending() { DL.reset(); if (haveConditionals()) { final Enumeration e = Conditionals.elements(); while (e.hasMoreElements()) { final Conditional c = (Conditional) e.nextElement(); final Enumeration ex = c.getExpression().getDepList() .elements(); while (ex.hasMoreElements()) { DL.add((ConstructionObject) ex.nextElement()); } } } if (AliasES != null) { AliasES.addDep(this); } return DL.elements(); } /** * Test, if the object directly depends on another object. */ public boolean dependsOn(final ConstructionObject o) { final Enumeration e = depending(); while (e.hasMoreElements()) { final ConstructionObject o1 = (ConstructionObject) e.nextElement(); if (o1 == o) { return true; } } return false; } /** * Return an enumeration of objects, which can be set as secondary * parameters, whenever this object is selected as main parameter. */ public Enumeration secondaryParams() { DL.reset(); return DL.elements(); } public ConstructionObject[] getDepArray() { depending(); return DL.getArray(); } public Enumeration depset(final ConstructionObject o1) { DL.add(o1); return DL.elements(); } public Enumeration depset(final ConstructionObject o1, final ConstructionObject o2) { DL.add(o1); DL.add(o2); return DL.elements(); } public Enumeration depset(final ConstructionObject o1, final ConstructionObject o2, final ConstructionObject o3) { DL.add(o1); DL.add(o2); DL.add(o3); return DL.elements(); } public void setFlag(final boolean flag) { Flag = flag; } public boolean isFlag() { return Flag; } public void setRekFlag(final boolean flag) { RekFlag = flag; } public boolean isRekFlag() { return RekFlag; } public void setTarget(final boolean flag) { Target = flag; } public boolean isTarget() { return Target; } public void setKeep(final boolean flag) { Keep = flag; } public boolean isKeep() { return Keep; } public boolean equals(final ConstructionObject o) { return false; } public boolean equals(final double x, final double y) { return Math.abs(x - y) < 1e-8; } int OldColorIndex; public void setJobTarget(final boolean flag) { if (flag) { OldColorIndex = ColorIndex; setColor(-1); } else if (JobTarget) { setColor(OldColorIndex, SpecialColor); } JobTarget = flag; } public boolean isJobTarget() { return JobTarget; } public void updateCircleDep() { } public void clearCircleDep() { } /** * This clones the object for macro construction. NOTE: This must be * overriden in all items to translate the mother objects. */ public ConstructionObject copy(final double x, final double y) { ConstructionObject o = null; try { o = (ConstructionObject) clone(); setTranslation(o); o.translateConditionals(); o.translate(); o.setName(); o.updateText(); o.setBreak(false); Cn.getH(); // o.setTarget(false); } catch (final Exception e) { } return o; } // public ConstructionObject copy () // { ConstructionObject o=null; // try // { o=(ConstructionObject)clone(); // setTranslation(o); // o.translateConditionals(); // o.translate(); // o.setName(); // o.updateText(); // o.setBreak(false); // Cn.getH(); // // o.setTarget(false); // } // catch (Exception e) {} // return o; // } public Construction getConstruction() { return Cn; } /** * Get the value of an object or throw an exception (e.g. if invalid). Not * all objects have a value. */ public double getValue() throws ConstructionException { throw new NoValueException(Valid); } public void setDefaults() { setShowName(Cn.ShowNames); setShowValue(Cn.ShowValues); setColor(Cn.DefaultColor, SpecialColor); setColorType(Cn.DefaultColorType); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); } public void setTargetDefaults() { setShowName(Cn.ShowNames); setShowValue(Cn.ShowValues); setColor(Cn.DefaultColor, SpecialColor); setColorType(Cn.DefaultColorType); } public boolean contains(final PointObject p) { return false; } public boolean canFix() { return false; } public void setFixed(final String o) { } public boolean isBack(final boolean original) { if (!original && testConditional("background")) { return true; } return Back; } public boolean isBack() { return isBack(false); } public void setBack(final boolean flag) { Back = flag; } public void setInConstruction(final boolean flag) { inConstruction = flag; } public boolean isInConstruction() { return inConstruction; } /** * This is called after the loading of a construction has been finished. * PointObject uses this to bind to a line or circle, which is defined AFTER * it. * * @param c * The construction this object is in. */ public void laterBind(final Construction c) { } /** * This is called after macro definition or execution is complete. * PrimitiveCircleObject uses it to translate the restriction points in its * copy. * * @param c * The construction this object is in. */ public void laterTranslate(final Construction c) { } public void setFilled(final boolean flag) { } public boolean isFilled() { return false; } public boolean isFilledForSelect() { return isFilled(); } public boolean getObtuse() { return Obtuse; } public void setObtuse(final boolean flag) { Obtuse = flag; } public String getDescription() { return ""; } public void round() { } public boolean isFixed() { return false; } public boolean isBreak() { return Break; } public void setBreak(final boolean flag) { Break = flag; HideBreak = false; } public boolean isHideBreak() { return HideBreak; } public void setHideBreak(final boolean flag) { HideBreak = flag; Break = flag; } public boolean isSolid(final boolean original) { if (!original && testConditional("solid")) { return true; } return Solid; } public boolean isSolid() { return isSolid(false); } public void setSolid(final boolean solid) { Solid = solid; } public boolean maybeTransparent() { return false; } public boolean locallyLike(final ConstructionObject o) { return false; } public double Value = 1000; public int compare(final SortObject o) { final ConstructionObject ob = (ConstructionObject) o; if (ob.Value < Value) { return 1; } else if (ob.Value == Value) { return 0; } else { return -1; } } public void setSelectable(final boolean flag) { Selectable = flag; } public void snap(final ZirkelCanvas zc) { } public String getUnit() { return Unit; } public void setUnit(final String s) { Unit = s; } public boolean hasUnit() { return true; } public boolean isBreakHide() { return BreakHide; } public void setBreakHide(final boolean flag) { BreakHide = flag; } public String getEquation() { return getDisplayValue(); } public String helpDisplayValue(final boolean start, double x, final String tag) { String s = ""; if (Math.abs(x) < 1e-10) { return s; } if (x < 0) { s = "-"; } else if (!start) { s = "+"; } x = Math.abs(x); if (Math.abs(x - 1) > 1e-10) { s = s + roundDisplay(x); } if (tag.equals("")) { return s; } else if (s.equals("") || s.equals("-")) { return s + tag; } else { return s + "*" + tag; } } public String helpDisplayNumber(final boolean start, double x) { String s = ""; if (Math.abs(x) < 1e-10) { return s; } if (x < 0) { s = "-"; } else if (!start) { s = "+"; } x = Math.abs(x); return s + roundDisplay(x); } public boolean visible(final ZirkelCanvas zc) { return selected() || ColorType != INVISIBLE || zc.showHidden(); } public boolean isBold() { return Bold; } public void setBold(final boolean bold) { Bold = bold; } public boolean isLarge() { return Large; } public void setLarge(final boolean large) { Large = large; } // Routines for conditional formatting public void addConditional(final String tag, final Expression expr) { final Conditional c = new Conditional(tag, expr); if (Conditionals == null) { Conditionals = new Vector(); } Conditionals.addElement(c); } public Expression getConditional(final String tag) { if (Conditionals == null) { return null; } final Enumeration e = Conditionals.elements(); while (e.hasMoreElements()) { final Conditional c = (Conditional) e.nextElement(); if (c.getTag().equals(tag)) { return c.getExpression(); } } return null; } public boolean haveConditional(final String tag) { final Expression ex = getConditional(tag); return (ex != null); } /** * Test if the conditional "tag" evaluates to true. * * @param tag */ public boolean testConditional(final String tag) { final Expression ex = getConditional(tag); if (ex == null) { return false; } try { if (ex.getValue() != 0) { return true; } } catch (final Exception e) { } return false; } public void clearConditionals() { Conditionals = null; } public void translateConditionals() { if (Conditionals != null) { final Enumeration e = Conditionals.elements(); clearConditionals(); while (e.hasMoreElements()) { final Conditional c = (Conditional) e.nextElement(); final String expr = c.getExpression().toString(); final Expression enew = new Expression(expr, getConstruction(), this); enew.translate(); addConditional(c.getTag(), enew); } } if (AliasES != null) { setAlias(AliasES.toString()); AliasES.translate(); } } public boolean haveConditionals() { return Conditionals != null; } public void checkConditionals() throws ConstructionException { if (Conditionals == null) { return; } final Enumeration e = Conditionals.elements(); while (e.hasMoreElements()) { final Conditional c = (Conditional) e.nextElement(); if (!c.getExpression().isValid()) { throw new ConstructionException(c.getExpression() .getErrorText()); } c.getExpression().getValue(); } } /** * Get the z-buffer for this object. * * @return double value z * @throws ConstructionException */ public double getZ() throws ConstructionException { final Expression e = getConditional("z"); if (e == null) { throw new ConstructionException(""); } return e.getValue(); } public boolean canDisplayName() { return true; } public int getNCount() { return NCount; } public void setNCount(final int count) { NCount = count; } ExpressionString AliasES = null; public String getAlias() { if (AliasES == null) { return null; } else { return AliasES.toString(); } } public void setAlias(final String s) { if (s == null) { AliasES = null; } else { AliasES = new ExpressionString(s, this); } } /** * A general workplace for rekursive validation. VRek gets the elements that * need to be updated. */ public MyVector VRek; public boolean RekValidating = false; public static final int DescriptionState = 0, FormulaState = 1, SizeState = 2; /** * Get a display string for the Lister class. */ public String getElementString(final int state) { String s = ""; switch (state) { case DescriptionState: s = getName() + " : " + FileName.chop(getText(), 80); break; case SizeState: s = getName() + " : " + FileName.chop(getSizeDisplay(), 80); break; case FormulaState: s = getName() + " : " + FileName.chop(getEquation(), 80); break; } if (isSuperHidden()) { s = "( " + s + " )"; } if (isHideBreak()) { s = "** " + s; } else if (isBreak()) { s = "* " + s; } if (!valid()) { s = "? " + s; } if (this instanceof MoveableObject && ((MoveableObject) this).moveable()) { s = "> " + s; } return s; } public String getElementString() { return getElementString(0); } /** * Get a color for the element in the display color. */ public Color getElementColor() { if (isJobTarget()) { return ZirkelFrame.TargetColor; } else if (indicated()) { return ZirkelFrame.IndicateColor; } else if (selected()) { return ZirkelFrame.SelectColor; } return getColor(); } public boolean SpecialParameter = false; public boolean isSpecialParameter() { return SpecialParameter; } public void setSpecialParameter(final boolean flag) { SpecialParameter = flag; } /** * Service function to extract a point from an expression * * @param E * @return point object or null */ static public PointObject getPointObject(final Expression E) { if (E == null) { return null; } final ConstructionObject o = E.getObject(); if (o == null || !(o instanceof PointObject)) { return null; } return (PointObject) o; } // provide a reusable array for each construction object MyVector MV; boolean MVInUse = false; /** * Get an empty MyVector. * * @return MyVector instance */ public MyVector getVector() { if (MVInUse) { return new MyVector(); } if (MV == null) { MV = new MyVector(); } MVInUse = true; return MV; } /** * MyVector no longer needed. */ public void discardMV() { MVInUse = false; MV.removeAllElements(); } public double getX() { return 0.0; } public double getY() { return 0.0; } public double getR() { return 0.0; } public void setType(final int i) { } public int getType() { return 0; } public boolean isPartial() { return false; } public void setPartial(final boolean bool) { } public void setDisplaySize(final int i) { } public int getDisplaySize() { return 0; } public void setExpression(final String expr, final Construction c) throws ConstructionException { } public String getExpression() { return ""; } public boolean fixed() { return true; } public String getEX() { return ""; } public String getEY() { return ""; } public String getEXpos() { return getEX(); } public String getEYpos() { return getEY(); } public void setFixed(final boolean bool) { } public void setFixed(final String x, final String y) { } public void setFixed(final boolean bool, final String r) throws ConstructionException { } public void move(final double x, final double y) { } public String getPrompt() { return ""; } public void setPrompt(final String prompt) { } public String getMin() { return ""; } public String getMax() { return ""; } public int getDistance(final PointObject P) { return 1000; } public void setSlider(final String smin, final String smax) { } public void setSlider(final boolean bool) { } public boolean isSlider() { return false; } public String getStringLength() { return ""; } public void setDragable(final boolean f) { } public boolean isDragable() { return false; } public String getE() { return ""; } public String getLines() { return ""; } public void setLines(final String o) { } public double getIncrement() { return 0.0; } public void setIncrement(final double inc) { } public boolean isInside() { return false; } public void setInside(final boolean flag) { } public boolean isSpecial() { return false; } public void setSpecial(final boolean f) { } public void clearConditional(final String tag) { if (haveConditional(tag)) { if (Conditionals.size() == 1) { Conditionals = null; return; } for (int i = 0; i < Conditionals.size(); i++) { final Conditional c = (Conditional) Conditionals.get(i); if (c.getTag().equals(tag)) { Conditionals.remove(i); return; } } } } } ./src/rene/zirkel/objects/CVS/RevisionCache/CircleIntersectionObject.java#1.40000644000175000017500000000600011314640412025637 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: CircleIntersectionObject.java import rene.util.xml.XmlWriter; import rene.zirkel.construction.Construction; import rene.zirkel.structures.Coordinates; public class CircleIntersectionObject extends IntersectionObject { public CircleIntersectionObject(final Construction c, final PrimitiveCircleObject P1, final PrimitiveCircleObject P2, final boolean first) { super(c, P1, P2); First = first; validate(); } @Override public void updateCircleDep() { ((PrimitiveCircleObject) P1).addDep(this); ((PrimitiveCircleObject) P2).addDep(this); } @Override public void validate() { final boolean oldvalid = Valid; if (!P1.valid() || !P2.valid()) Valid = false; else Valid = true; if (!Valid) return; final Coordinates c = PrimitiveCircleObject.intersect( (PrimitiveCircleObject) P1, (PrimitiveCircleObject) P2); if (c == null) { if (oldvalid && getConstruction().shouldSwitch()) { doSwitch(); if (!getConstruction().noteSwitch()) Switched = false; } else if (oldvalid && Alternate && Away == null && getConstruction().canAlternate()) { First = !First; } Valid = false; return; } final PointObject oa = getAway(); if (oa != null) { final double x = oa.getX(), y = oa.getY(); final double r = (x - c.X) * (x - c.X) + (y - c.Y) * (y - c.Y); final double r1 = (x - c.X1) * (x - c.X1) + (y - c.Y1) * (y - c.Y1); boolean flag = (r > r1); if (!StayAway) flag = !flag; if (flag) { setXY(c.X, c.Y); } else { setXY(c.X1, c.Y1); } } else { if (First) setXY(c.X, c.Y); else setXY(c.X1, c.Y1); } if (Restricted) { if (!(((PrimitiveCircleObject) P1).getStart() == this || ((PrimitiveCircleObject) P1) .getEnd() == this) && !((PrimitiveCircleObject) P1).contains(X, Y)) Valid = false; if (!(((PrimitiveCircleObject) P2).getStart() == this || ((PrimitiveCircleObject) P2) .getEnd() == this) && !((PrimitiveCircleObject) P2).contains(X, Y)) Valid = false; } } @Override public void printArgs(final XmlWriter xml) { super.printArgs(xml); if (First) xml.printArg("which", "first"); else xml.printArg("which", "second"); } @Override public boolean isSwitchable() { return true; } @Override public boolean canAlternate() { return true; } } ./src/rene/zirkel/objects/CVS/RevisionCache/AngleObject.java#1.50000644000175000017500000005053211161405271023111 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: Circle3Object.java import java.awt.Checkbox; import java.awt.Color; import java.awt.Frame; import java.awt.TextField; import java.awt.event.FocusEvent; import java.util.Enumeration; import javax.swing.JPanel; import rene.dialogs.Warning; import rene.gui.Global; import rene.gui.IconBar; import rene.gui.IconBarListener; import rene.gui.MyLabel; import rene.gui.TextFieldAction; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.dialogs.EditConditionals; import rene.zirkel.dialogs.ObjectEditDialog; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import eric.JGlobals; class AngleEditDialog extends ObjectEditDialog implements IconBarListener { /** * */ private static final long serialVersionUID = 1L; TextField Length; Checkbox Fixed; IconBar SizeIB; public AngleEditDialog(final Frame f, final AngleObject o) { super(f, Zirkel.name("edit.angle.title"), o, "angle"); } @Override public void addFirst(final JPanel P) { final AngleObject o = (AngleObject) O; Length = new TextFieldAction(this, "Length", o.getE(), 30); P.add(new MyLabel(Zirkel.name("edit.angle.length"))); P.add(Length); if (o.canFix()) { Fixed = new Checkbox(""); Fixed.setState(o.fixed()); } else { Length.setEditable(false); } if (Fixed != null) { P.add(new MyLabel(Zirkel.name("edit.fixed"))); P.add(Fixed); } } @Override public void doAction(final String o) { if (o.equals("Length") && Fixed != null) { Fixed.setState(true); super.doAction("OK"); } else { super.doAction(o); } } @Override public void addSecond(final JPanel P) { final AngleObject p = (AngleObject) O; SizeIB = new IconBar(F); SizeIB.addToggleGroupLeft("angle", 5); SizeIB.toggle("angle", p.getDisplaySize()); SizeIB.addSeparatorLeft(); SizeIB.addOnOffLeft("filled"); SizeIB.setState("filled", p.isFilled()); SizeIB.addOnOffLeft("obtuse"); SizeIB.setState("obtuse", p.getObtuse()); P.add(new MyLabel("")); P.add(SizeIB); SizeIB.setIconBarListener(this); } @Override public void iconPressed(final String o) { if (o.equals("filled")) { if (SizeIB.getState("filled")) { IB.setState("isback", true); ThicknessIB.setEnabled("solid", true); } else { IB.setState("isback", false); ThicknessIB.setState("solid", false); ThicknessIB.setEnabled("solid", false); } } super.iconPressed(o); } @Override public void setAction() { final AngleObject o = (AngleObject) O; if (Fixed != null && Fixed.getState() == true) { o.setFixed(Length.getText()); } if (Fixed != null && Fixed.getState() == false) { o.setFixed(false); } o.setDisplaySize(SizeIB.getToggleState("angle")); o.setFilled(SizeIB.getState("filled")); o.setObtuse(SizeIB.getState("obtuse")); Global.setParameter("unit.angle", Unit.getText()); } @Override public void focusGained(final FocusEvent e) { if (Fixed != null && Fixed.getState()) { Length.requestFocus(); } else { super.focusGained(e); } } } public class AngleObject extends ConstructionObject implements InsideObject { protected PointObject P1, P2, P3; static Count N = new Count(); double A, A1, A2; double X, Y; boolean Fixed; Expression E; boolean Filled = false; final static double LabelScale = 0.66; public static final int NORMALSIZE = 1, SMALL = 0, LARGER = 2, LARGE = 3, RECT = 4; protected int DisplaySize = SMALL; public AngleObject(final Construction c, final PointObject p1, final PointObject p2, final PointObject p3) { super(c); P1 = p1; P2 = p2; P3 = p3; validate(); setColor(ColorIndex, SpecialColor); updateText(); Unit = Global.getParameter("unit.angle", "°"); double xx = P1.getX() + P3.getX() - 2 * P2.getX(); double yy = P1.getY() + P3.getY() - 2 * P2.getY(); final double ll = Math.sqrt(xx * xx + yy * yy); xx = xx / ll; yy = yy / ll; XcOffset = xx * 25 / c.getPixel(); YcOffset = yy * 25 / c.getPixel(); } public AngleObject(final Construction c) { super(c); } @Override public void setDefaults() { setShowName(Global.getParameter("options.angle.shownames", false)); setShowValue(Global.getParameter("options.angle.showvalues", false)); setColor(Global.getParameter("options.angle.color", 0), Global .getParameter("options.angle.pcolor", (Color) null)); setColorType(Global.getParameter("options.angle.colortype", 0)); setFilled(Global.getParameter("options.angle.filled", false)); setHidden(Cn.Hidden); setObtuse(Global.getParameter("options.angle.obtuse", false)); setSolid(Global.getParameter("options.angle.solid", false)); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); setPartial(Cn.Partial); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.angle.shownames", false)); setShowValue(Global.getParameter("options.angle.showvalues", false)); setColor(Global.getParameter("options.angle.color", 0), Global .getParameter("options.angle.pcolor", (Color) null)); setColorType(Global.getParameter("options.angle.colortype", 0)); setFilled(Global.getParameter("options.angle.filled", false)); setObtuse(Global.getParameter("options.angle.obtuse", false)); setSolid(Global.getParameter("options.angle.solid", false)); } @Override public String getTag() { return "Angle"; } @Override public int getN() { return N.next(); } @Override public void updateText() { if (!Fixed || E == null) { setText(text3(Zirkel.name("text.angle"), P1.getName(), P2.getName(), P3.getName())); } else { setText(text4(Zirkel.name("text.angle.fixed"), P1.getName(), P2 .getName(), P3.getName(), "\"" + E.toString() + "\"")); } } @Override public String getDisplayValue() { // if (ZirkelCanvas.AnglesFactor<=2) { // return ""+(int) (A/Math.PI*180+0.5); // } else { // return ""+round(A/Math.PI*180, ZirkelCanvas.AnglesFactor); // } return JGlobals.getLocaleNumber(A / Math.PI * 180, "angles"); } @Override public boolean nearto(final int x, final int y, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } final double dx = zc.x(x) - X, dy = zc.y(y) - Y; final double size = zc.dx((int) zc.selectionSize()); final double rd = getDisplaySize(zc), r = Math.sqrt(dx * dx + dy * dy); boolean near; Value = Math.abs(r - rd); if (Filled || DisplaySize == RECT) { near = (r < rd + size); if (near) { Value = 0; } } else { near = (Math.abs(r - rd) < size); } if (!near) { return false; } if (rd < size) { return near; } double a = Math.atan2(dy, dx); if (a < 0) { a += 2 * Math.PI; } final double c = 0.05; if (a < A1) { a += 2 * Math.PI; } return a > A1 - c && a < A1 + A + c; } @Override public void validate() { if (P1 == null) { return; } if (!P1.valid() || !P2.valid() || !P3.valid()) { Valid = false; return; } else { X = P2.getX(); Y = P2.getY(); double dx = P1.getX() - X, dy = P1.getY() - Y; if (Math.sqrt(dx * dx + dy * dy) < 1e-9) { Valid = false; return; } A1 = Math.atan2(dy, dx); if (A1 < 0) { A1 += 2 * Math.PI; } dx = P3.getX() - X; dy = P3.getY() - Y; if (Math.sqrt(dx * dx + dy * dy) < 1e-9) { Valid = false; return; } A2 = Math.atan2(dy, dx); if (A2 < 0) { A2 += 2 * Math.PI; } A = A2 - A1; if (A < 0) { A = A + 2 * Math.PI; } Valid = true; if (Fixed) { double FixedAlpha = 0; try { FixedAlpha = E.getValue() / 180 * Math.PI; } catch (final Exception e) { return; } if (P3.moveableBy(this)) { dx = P3.getX() - X; dy = P3.getY() - Y; double r = Math.sqrt(dx * dx + dy * dy); if (r < 1e-9) { r = 1e-9; } P3.move(X + Math.cos(A1 + FixedAlpha) * r, Y + Math.sin(A1 + FixedAlpha) * r); A2 = A1 + FixedAlpha; } else { Fixed = false; } if (Fixed) { A = FixedAlpha; P3.movedBy(this); P1.movedBy(this); } } else if (!Obtuse && A > Math.PI) { A1 = A2; A = 2 * Math.PI - A; A2 = A1 + A; } } } double x[] = new double[4], y[] = new double[4]; @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) { return; } final double R = zc.col(getDisplaySize(zc)) - zc.col(0); final double c1 = zc.col(X) - R, r1 = zc.row(Y) - R; // paint: double DA = (A2 - A1) / Math.PI * 180; if (DA < 0) { DA += 360; } else if (DA >= 360) { DA -= 360; } if (visible(zc)) { if (isStrongSelected() && g instanceof MyGraphics13) { ((MyGraphics13) g).drawMarkerArc(c1 + R, r1 + R, R, A1 / Math.PI * 180, DA); } if (Filled) { if (DisplaySize == RECT) { final double dx1 = Math.cos(A1), dy1 = Math.sin(A1), dx2 = Math .cos(A1 + DA / 180 * Math.PI), dy2 = Math.sin(A1 + DA / 180 * Math.PI); double dx3 = dx1 + dx2, dy3 = dy1 + dy2; if (DA > 180) { dx3 = -dx3; dy3 = -dy3; } if (Selected || getColorType() != THIN) { g.setColor(this); g.drawLine(c1 + R + R * dx1, r1 + R - R * dy1, c1 + R + R * dx3, r1 + R - R * dy3); g.drawLine(c1 + R + R * dx3, r1 + R - R * dy3, c1 + R + R * dx2, r1 + R - R * dy2); } x[0] = c1 + R; y[0] = r1 + R; x[1] = c1 + R + R * dx1; y[1] = r1 + R - R * dy1; x[2] = c1 + R + R * dx3; y[2] = r1 + R - R * dy3; x[3] = c1 + R + R * dx2; y[3] = r1 + R - R * dy2; g .fillPolygon(x, y, 4, false, getColorType() != THICK, this); } else { if (Math.abs(DA - 90) < 0.0000001) { final double dx1 = Math.cos(A1), dy1 = Math.sin(A1), dx2 = Math .cos(A1 + DA / 180 * Math.PI), dy2 = Math .sin(A1 + DA / 180 * Math.PI); final double dx3 = dx1 + dx2, dy3 = dy1 + dy2; x[0] = c1; y[0] = r1; x[0] = c1 + R; y[0] = r1 + R; x[1] = c1 + R + R * dx1; y[1] = r1 + R - R * dy1; x[2] = c1 + R + R * dx3; y[2] = r1 + R - R * dy3; x[3] = c1 + R + R * dx2; y[3] = r1 + R - R * dy2; g.fillPolygon(x, y, 4, false, getColorType() != THICK, this); g.setColor(this); g.drawLine(x[1], y[1], x[2], y[2]); g.drawLine(x[2], y[2], x[3], y[3]); } else { g.fillArc(c1, r1, 2 * R, 2 * R, A1 / Math.PI * 180, DA, Selected || getColorType() != THIN, getColorType() != THICK, true, this); } } } else { g.setColor(this); if (DisplaySize == RECT) { final double dx1 = Math.cos(A1), dy1 = Math.sin(A1), dx2 = Math .cos(A1 + DA / 180 * Math.PI), dy2 = Math.sin(A1 + DA / 180 * Math.PI); g.drawLine(c1 + R + R * dx1, r1 + R - R * dy1, c1 + R + R * (dx1 + dx2), r1 + R - R * (dy1 + dy2)); g.drawLine(c1 + R + R * (dx1 + dx2), r1 + R - R * (dy1 + dy2), c1 + R + R * dx2, r1 + R - R * dy2); } else { if (Math.abs(DA - 90) < 0.0000001) { final double dx1 = Math.cos(A1), dy1 = Math.sin(A1), dx2 = Math .cos(A1 + DA / 180 * Math.PI), dy2 = Math .sin(A1 + DA / 180 * Math.PI); final double dx3 = dx1 + dx2, dy3 = dy1 + dy2; x[1] = c1 + R + R * dx1; y[1] = r1 + R - R * dy1; x[2] = c1 + R + R * dx3; y[2] = r1 + R - R * dy3; x[3] = c1 + R + R * dx2; y[3] = r1 + R - R * dy2; g.setColor(this); g.drawLine(x[1], y[1], x[2], y[2]); g.drawLine(x[2], y[2], x[3], y[3]); } else { g.drawCircleArc(c1 + R, r1 + R, R, A1 / Math.PI * 180, DA, this); } } } } final String s = translateToUnicode(getDisplayText()); if (!s.equals("")) { g.setLabelColor(this); setFont(g); DisplaysText = true; final double dx = Math.cos(A1 + A / 2), dy = Math.sin(A1 + A / 2); // if (s.equals("90"+getUnit()) || Name.startsWith(".")) // { // // if (KeepClose) // { double d=Math.sqrt(XcOffset*XcOffset+YcOffset*YcOffset); // TX1=zc.col(X+d*dx)-3; // TY1=zc.row(Y+d*dy)-3; // TX2=TX1+9; // TY2=TY1+9; // g.drawRect(zc.col(X+d*dx)-1, // zc.row(Y+d*dy)-1,3,3); // } // else // { TX1=zc.col(X+zc.dx(R*LabelScale)*dx+XcOffset)-3; // TY1=zc.row(Y+zc.dy(R*LabelScale)*dy+YcOffset)-3; // TX2=TX1+9; // TY2=TY1+9; // g.drawRect(zc.col(X+zc.dx(R*LabelScale)*dx+XcOffset)-1, // zc.row(Y+zc.dy(R*LabelScale)*dy+YcOffset)-1,3,3); // } // } // else // { if (KeepClose) { final double d = Math.sqrt(XcOffset * XcOffset + YcOffset * YcOffset); drawCenteredLabel(g, s, zc, X + d * dx, Y + d * dy, 0, 0); } else { drawCenteredLabel(g, s, zc, X + zc.dx(R * LabelScale) * dx, Y + zc.dy(R * LabelScale) * dy, XcOffset, YcOffset); } // } } } @Override public boolean canKeepClose() { return true; } @Override public void setKeepClose(final double x, final double y) { KeepClose = true; XcOffset = x - X; YcOffset = y - Y; } double getDisplaySize(final ZirkelCanvas zc) { double R = zc.dx((int) (12 * zc.pointSize())); if (DisplaySize == SMALL || DisplaySize == RECT) { R /= 2; } else if (DisplaySize == LARGER) { R *= 2; } else if (DisplaySize == LARGE) { final double dx = P1.getX() - X, dy = P1.getY() - Y; R = Math.sqrt(dx * dx + dy * dy); } return R; } public double getLength() { return A; } @Override public boolean fixed() { return Fixed; } @Override public void setFixed(final boolean flag) { Fixed = flag; updateText(); } @Override public void setFixed(final String s) { Fixed = true; E = new Expression(s, getConstruction(), this); updateText(); } @Override public boolean canFix() { return P3.moveableBy(this); } @Override public void printArgs(final XmlWriter xml) { if (P1 != null) { xml.printArg("first", P1.getName()); xml.printArg("root", P2.getName()); xml.printArg("second", P3.getName()); } if (DisplaySize == SMALL) { xml.printArg("display", "small"); } if (DisplaySize == LARGE) { xml.printArg("display", "large"); } if (DisplaySize == LARGER) { xml.printArg("display", "larger"); } if (DisplaySize == RECT) { xml.printArg("display", "rectangle"); } if (Filled) { xml.printArg("filled", "true"); } if (Fixed && E != null) { xml.printArg("fixed", E.toString()); } if (!Obtuse) { xml.printArg("acute", "true"); } super.printArgs(xml); } @Override public void edit(final ZirkelCanvas zc) { final ObjectEditDialog d = new AngleEditDialog(zc.getFrame(), this); d.setVisible(true); zc.repaint(); if ((E != null && !E.isValid())) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, E.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } if (d.wantsMore()) { new EditConditionals(zc.getFrame(), this); validate(); } } @Override public void setDisplaySize(final int i) { DisplaySize = i; } @Override public int getDisplaySize() { return DisplaySize; } @Override public Enumeration depending() { super.depending(); if (P1 == null) { return DL.elements(); } if (!Fixed) { return depset(P1, P2, P3); } else { depset(P1, P2, P3); final Enumeration e = E.getDepList().elements(); while (e.hasMoreElements()) { DL.add((ConstructionObject) e.nextElement()); } return DL.elements(); } } @Override public boolean equals(final ConstructionObject o) { if (!(o instanceof AngleObject) || !o.valid()) { return false; } final AngleObject l = (AngleObject) o; return equals(X, l.X) && equals(Y, l.Y) && equals(A1, l.A1) && equals(A2, l.A2); } public static char Translation[] = { 'a', '\u03B1', 'A', '\u0391', 'b', '\u03B2', 'B', '\u0392', 'c', '\u03B3', 'C', '\u0393', 'd', '\u03B4', 'D', '\u0394', 'e', '\u03B5', 'E', '\u0395', 'f', '\u03D5', 'F', '\u03A6', 'g', '\u03B3', 'G', '\u0393', 'h', '\u03B7', 'H', '\u0397', 'i', '\u03B9', 'I', '\u0399', 'k', '\u03BA', 'K', '\u039A', 'l', '\u03BB', 'L', '\u039B', 'm', '\u03BC', 'M', '\u039C', 'n', '\u03BD', 'N', '\u039D', 'o', '\u03BF', 'O', '\u03A9', 'p', '\u03C0', 'P', '\u03A0', 'q', '\u03C7', 'Q', '\u03A7', 'r', '\u03C1', 'R', '\u03A1', 's', '\u03C3', 'S', '\u03A3', 't', '\u03C4', 'T', '\u03A4', 'u', '\u03C5', 'U', '\u03A5', 'v', '\u03C8', 'V', '\u03A8', 'w', '\u03C9', 'W', '\u03A9', 'x', '\u03BE', 'X', '\u039E', 'y', '\u03C7', 'Y', '\u03A7', 'z', '\u03B6', 'Z', '\u0396', }; public static String translateToUnicode(final String s) { if (s.startsWith("$")) { return s; } if (s.indexOf('\\') < 0) { return s; } final StringBuffer b = new StringBuffer(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c != '\\') { b.append(c); } else { i++; if (i < s.length()) { c = s.charAt(i); if (c == '0') { int n = 0; i++; while (i < s.length()) { final char ch = s.charAt(i); if (ch >= '0' && ch <= '9') { n = n * 16 + (int) (ch - '0'); } else if (ch >= 'A' && ch <= 'F') { n = n * 16 + (int) (ch - 'A' + 10); } else { break; } i++; } if (n > 0) { c = (char) n; b.append(c); } i--; continue; } int j = 0; for (j = 0; j < Translation.length; j += 2) { if (Translation[j] == c) { b.append(Translation[j + 1]); break; } } if (j >= Translation.length) { b.append(c); } } } } return b.toString(); } @Override public void translate() { P1 = (PointObject) P1.getTranslation(); P2 = (PointObject) P2.getTranslation(); P3 = (PointObject) P3.getTranslation(); if (Fixed) { try { setFixed(E.toString()); E.translate(); } catch (final Exception e) { Fixed = false; } } } @Override public String getE() { if (Fixed && E != null) { return E.toString(); } else { return "" + round(A / Math.PI * 180); } } @Override public double getValue() throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } else { return A / Math.PI * 180; } } @Override public void setFilled(final boolean flag) { Filled = flag; } @Override public boolean isFilled() { return Filled; } @Override public boolean maybeTransparent() { return true; } @Override public boolean isFilledForSelect() { return false; } public double containsInside(final PointObject P) { final double dx = P.getX() - X, dy = P.getY() - Y; double a = Math.atan2(dy, dx); if (a < 0) { a += 2 * Math.PI; } if (a < A1) { a += 2 * Math.PI; } final double c = 1e-5; if (a > A1 && a < A1 + A) { return 1; } else if (a > A1 - c && a < A1 + A + c) { return 0.5; } return 0; } public boolean keepInside(final PointObject P) { if (containsInside(P) > 0) { return true; } final double x = P.getX(), y = P.getY(); final double x1 = P2.getX(), y1 = P2.getY(); double xmin = x1, ymin = y1, dmin = 1e20; double x2 = P1.getX(), y2 = P1.getY(); double dx = x2 - x1, dy = y2 - y1; double r = dx * dx + dy * dy; double h = dx * (x - x1) / r + dy * (y - y1) / r; if (h < 0) { h = 0; } double xh = x1 + h * dx, yh = y1 + h * dy; double dist = Math.sqrt((x - xh) * (x - xh) + (y - yh) * (y - yh)); if (dist < dmin) { dmin = dist; xmin = xh; ymin = yh; } x2 = P3.getX(); y2 = P3.getY(); dx = x2 - x1; dy = y2 - y1; r = dx * dx + dy * dy; h = dx * (x - x1) / r + dy * (y - y1) / r; if (h < 0) { h = 0; } xh = x1 + h * dx; yh = y1 + h * dy; dist = Math.sqrt((x - xh) * (x - xh) + (y - yh) * (y - yh)); if (dist < dmin) { dmin = dist; xmin = xh; ymin = yh; } P.move(xmin, ymin); return false; } } ./src/rene/zirkel/objects/CVS/RevisionCache/DriverObject.java#1.30000644000175000017500000000155111257415475023326 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; public interface DriverObject { public void clearChanges(); public boolean somethingChanged(); public boolean isDriverObject(); } ./src/rene/zirkel/objects/CVS/RevisionCache/RayObject.java#1.50000644000175000017500000002020311346471503022614 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: SegmentObject.java import rene.gui.Global; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.Count; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.structures.Coordinates; import eric.JGlobals; public class RayObject extends TwoPointLineObject { static Count N = new Count(); public RayObject(final Construction c, final PointObject p1, final PointObject p2) { super(c, p1, p2); validate(); updateText(); } @Override public String getTag() { return "Ray"; } @Override public int getN() { return N.next(); } @Override public void setDefaults() { setShowName(Global.getParameter("options.line.shownames", false)); setShowValue(Global.getParameter("options.line.showvalues", false)); setColor(Global.getParameter("options.line.color", 0)); setColorType(Global.getParameter("options.line.colortype", 0)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Global.getParameter("options.line.large", false)); setBold(Global.getParameter("options.line.bold", false)); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.line.shownames", false)); setShowValue(Global.getParameter("options.line.showvalues", false)); setColor(Global.getParameter("options.line.color", 0)); setColorType(Global.getParameter("options.line.colortype", 0)); setLarge(Global.getParameter("options.line.large", false)); setBold(Global.getParameter("options.line.bold", false)); } @Override public void updateText() { setText(text2(Zirkel.name("text.ray"), P1.getName(), P2.getName())); } @Override public void validate() { // if ((P1==null)) { // System.out.println(this.getName()+" : "+P2.getName()); // } // if ((P2==null)) { // System.out.println(this.getName()+" : "+P1.getName()); // } if (!P1.valid() || !P2.valid()) { Valid = false; return; } else { Valid = true; X1 = P1.getX(); Y1 = P1.getY(); X2 = P2.getX(); Y2 = P2.getY(); // compute normalized vector in the direction of the line: DX = X2 - X1; DY = Y2 - Y1; R = Math.sqrt(DX * DX + DY * DY); if (R < 1e-10) { Valid = false; return; } DX /= R; DY /= R; } } @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) return; // compute middle of the screen: final double xm = (zc.minX() + zc.maxX()) / 2, ym = (zc.minY() + zc .maxY()) / 2; // compute distance from middle to line: final double d = (xm - X1) * DY - (ym - Y1) * DX; // compute point with minimal distance final double x = xm - d * DY, y = ym + d * DX; // compute size of the screen final double a = Math.max(zc.maxX() - zc.minX(), zc.maxY() - zc.minY()); if (Math.abs(d) > a) return; // compute distance from closest point to source final double b = (x - X1) * DX + (y - Y1) * DY; // compute the two visible endpoints k1 = b - a; k2 = b + a; k12valid = true; if (k1 < 0) k1 = 0; if (k1 >= k2) return; if (Partial && !zc.showHidden() && Dep != null) { final double dd = (zc.maxX() - zc.minX()) / 20; double dmin = -dd, dmax = R + dd; for (int i = 0; i < NDep; i++) { if (!Dep[i].valid() || Dep[i].mustHide(zc)) continue; final double s = project(Dep[i].getX(), Dep[i].getY()); if (s - dd < dmin) dmin = s - dd; else if (s + dd > dmax) dmax = s + dd; } if (k1 < dmin) k1 = dmin; if (k2 > dmax) k2 = dmax; } final double c1 = zc.col(X1 + k1 * DX), c2 = zc.col(X1 + k2 * DX), r1 = zc .row(Y1 + k1 * DY), r2 = zc.row(Y1 + k2 * DY); // paint: if (isStrongSelected() && g instanceof MyGraphics13) { ((MyGraphics13) g).drawMarkerLine(c1, r1, c2, r2); } g.setColor(this); if (visible(zc)) { if (tracked()) zc.UniversalTrack.drawTrackLine(this, c1, r1, c2, r2); g.drawLine(c1, r1, c2, r2, this); } final String s = getDisplayText(); if (!s.equals("")) { g.setLabelColor(this); DisplaysText = true; double c = -b + a / 5; if (c < -a / 5) c = -a / 5; else if (c > a / 5) c = a / 5; if (c < -b + a / 10) c = -b + a / 10; if (KeepClose) { final double side = (YcOffset < 0) ? 1 : -1; drawLabel(g, s, zc, X1 + XcOffset * (X2 - X1), Y1 + XcOffset * (Y2 - Y1), side * DX, side * DY, 0, 0); } else drawLabel(g, s, zc, x + c * DX, y + c * DY, DX, DY, XcOffset, YcOffset); } } @Override public boolean canKeepClose() { return true; } @Override public void setKeepClose(final double x, final double y) { KeepClose = true; XcOffset = (x - X1) / R * DX + (y - Y1) / R * DY; YcOffset = (x - X1) / R * DY - (y - Y1) / R * DX; } @Override public String getDisplayValue() { return JGlobals.getLocaleNumber(R, "lengths"); } // // public String getDisplayValue () // { return ""+round(R,ZirkelCanvas.LengthsFactor); // } @Override public boolean nearto(final int c, final int r, final ZirkelCanvas zc) { if (!displays(zc)) return false; // compute point at c,r final double x = zc.x(c), y = zc.y(r); // compute distance from line double d = (x - X1) * DY - (y - Y1) * DX; // compute offset final double o = (x - X1) * DX + (y - Y1) * DY, o1 = (X2 - X1) * DX + (Y2 - Y1) * DY; if (o1 > 0) { if (o < 0) d = Math.sqrt((x - X1) * (x - X1) + (y - Y1) * (y - Y1)); } else { if (o > 0) d = Math.sqrt((x - X1) * (x - X1) + (y - Y1) * (y - Y1)); } // test, if on visible part final double s = project(x, y); if (s < k1 || s > k2) return false; // scale in screen coordinates Value = Math.abs(zc.col(zc.minX() + d) - zc.col(zc.minX())); return Value < zc.selectionSize() * 2; } @Override public void printArgs(final XmlWriter xml) { xml.printArg("from", P1.getName()); xml.printArg("to", P2.getName()); super.printArgs(xml); } @Override public boolean contains(final double x, final double y) { final double a = (x - X1) * DX + (y - Y1) * DY; if (a < 1e-9) return false; return true; } @Override public double project(final double x, final double y) { final double h = super.project(x, y); if (h < 0) return 0; return h; } @Override public boolean equals(final ConstructionObject o) { if (!(o instanceof RayObject) || !o.valid()) return false; final RayObject l = (RayObject) o; return equals(X1, l.X1) && equals(Y1, l.Y1) && equals(DX, l.DX) && equals(DY, l.DY); } public static Coordinates intersect(final PrimitiveLineObject l1, final PrimitiveLineObject l2) // compute the intersection coordinates of two lines { final double det = -l1.DX * l2.DY + l1.DY * l2.DX; if (Math.abs(det) < 1e-10) return null; final double a = (-(l2.X1 - l1.X1) * l2.DY + (l2.Y1 - l1.Y1) * l2.DX) / det; return new Coordinates(l1.X1 + a * l1.DX, l1.Y1 + a * l1.DY); } public static Coordinates intersect(final PrimitiveLineObject l, final PrimitiveCircleObject c) // compute the intersection coordinates of a line with a circle { double x = c.getX(), y = c.getY(); final double r = c.getR(); final double d = (x - l.X1) * l.DY - (y - l.Y1) * l.DX; if (Math.abs(d) > r + 1e-10) return null; x -= d * l.DY; y += d * l.DX; double h = r * r - d * d; if (h > 0) h = Math.sqrt(h); else h = 0; return new Coordinates(x + h * l.DX, y + h * l.DY, x - h * l.DX, y - h * l.DY); } } ./src/rene/zirkel/objects/CVS/RevisionCache/PointObject.java#1.60000644000175000017500000011117111133136714023154 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: PointObject.java import java.awt.Button; import java.awt.Checkbox; import java.awt.Color; import java.awt.Frame; import java.awt.GridLayout; import java.awt.event.FocusEvent; import java.util.Enumeration; import java.util.Vector; import javax.swing.JPanel; import rene.dialogs.Warning; import rene.gui.ButtonAction; import rene.gui.CheckboxAction; import rene.gui.Global; import rene.gui.IconBar; import rene.gui.MyLabel; import rene.gui.MyPanel; import rene.gui.MyTextField; import rene.gui.TextFieldAction; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.dialogs.EditConditionals; import rene.zirkel.dialogs.ObjectEditDialog; import rene.zirkel.expression.Expression; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.structures.MagnetObj; import eric.JGlobals; import eric.JPointName; class PointEditDialog extends ObjectEditDialog { /** * */ private static final long serialVersionUID = 1L; TextFieldAction X, Y; MyTextField Away, Bound, Increment; Checkbox Fixed, Close, Restricted, Alternate, Inside; IconBar TypeIB; ZirkelCanvas ZC; public PointEditDialog(final Frame f, final PointObject o) { super(f, Zirkel.name("edit.point.title"), o); } public PointEditDialog(final ZirkelCanvas zc, final PointObject o) { this(zc.getFrame(), o); ZC = zc; } @Override public void addFirst(final JPanel P) { final PointObject p = (PointObject) O; X = new TextFieldAction(this, "X", "" + p.round(p.getX()), 30); P.add(new MyLabel(Zirkel.name("edit.point.x"))); P.add(X); Y = new TextFieldAction(this, "Y", "" + p.round(p.getY()), 30); P.add(new MyLabel(Zirkel.name("edit.point.y"))); P.add(Y); if (p.moveablePoint()) { Fixed = new Checkbox(""); Fixed.setState(p.fixed()); P.add(new MyLabel(Zirkel.name("edit.fixed"))); P.add(Fixed); if (p.fixed()) { X.setText(p.getEX()); Y.setText(p.getEY()); } P.add(new MyLabel(Zirkel.name("edit.point.increment"))); P.add(Increment = new MyTextField("" + p.round(p.getIncrement()))); } else { X.setEditable(false); Y.setEditable(false); } if ((p instanceof IntersectionObject && ((IntersectionObject) p) .isSwitchable())) { Away = new MyTextField("", 5); Away.setText(((IntersectionObject) p).away()); Close = new CheckboxAction(this, Zirkel.name("edit.point.close")); Close.setState(!((IntersectionObject) p).stayAway()); P.add(new MyLabel(Zirkel.name("edit.point.intersection"))); final JPanel ap = new MyPanel(); ap.setLayout(new GridLayout(1, 2)); ap.add(Away); ap.add(Close); P.add(ap); } if (p instanceof IntersectionObject) { P.add(new MyLabel(Zirkel.name("edit.plumb.restricted"))); Restricted = new CheckboxAction(this, "", "Restricted"); Restricted.setState(((IntersectionObject) p).isRestricted()); P.add(Restricted); if (((IntersectionObject) p).canAlternate()) { P.add(new MyLabel(Zirkel.name("edit.intersection.alternate"))); Alternate = new CheckboxAction(this, "", "Alternate"); Alternate.setState(((IntersectionObject) p).isAlternate()); P.add(Alternate); } } if (p.isPointOn()) { P.add(new MyLabel(Zirkel.name("edit.point.bound"))); P.add(Bound = new MyTextField(p.getBound().getName())); Bound.setEditable(false); if (p.getBound() instanceof InsideObject) { P.add(new MyLabel(Zirkel.name("edit.point.inside"))); P.add(Inside = new CheckboxAction(this, "", "Inside")); Inside.setState(p.isInside()); } if (Fixed != null) { Fixed.setState(p.useAlpha()); } } } Button BoundButton; @Override public void addButton(final JPanel P) { final PointObject p = (PointObject) O; if (p.moveablePoint()) { if (p.isPointOn()) { BoundButton = new ButtonAction(this, Zirkel .name("bound.release"), "Release"); } else { BoundButton = new ButtonAction(this, Zirkel.name("bound.bind"), "Bind"); } P.add(BoundButton); P.add(new MyLabel(" ")); } else if (p instanceof IntersectionObject && ((IntersectionObject) p).isSwitchable()) { P.add(new ButtonAction(this, Zirkel.name("edit.point.away"), "SetAway")); P.add(new ButtonAction(this, Zirkel.name("edit.point.close"), "SetClose")); if (!((IntersectionObject) p).away().equals("")) { P.add(new ButtonAction(this, Zirkel.name("edit.point.free"), "SetFree")); } P.add(new MyLabel(" ")); } } @Override public void addSecond(final JPanel P) { final PointObject p = (PointObject) O; TypeIB = new IconBar(F); TypeIB.addToggleGroupLeft("type", 6); TypeIB.toggle("type", p.getType()); P.add(new MyLabel("")); P.add(TypeIB); } @Override public void doAction(final String o) { if ((o.equals("Y") || o.equals("X")) && Fixed != null) { Fixed.setState(true); super.doAction("OK"); } else if (o.equals("Release")) { ((PointObject) O).setBound(""); O.getConstruction().updateCircleDep(); if (Fixed != null) { Fixed.setState(false); } super.doAction("OK"); } else if (o.equals("Bind")) { ZC.bind((PointObject) O); super.doAction("OK"); } else if (o.equals("SetAway")) { ZC.setAway((IntersectionObject) O, true); super.doAction("OK"); } else if (o.equals("SetClose")) { ZC.setAway((IntersectionObject) O, false); super.doAction("OK"); } else if (o.equals("SetFree")) { ((IntersectionObject) O).setAway(""); Away = null; super.doAction("OK"); } else if (o.equals("OK")) { if (Fixed != null && X.isChanged() || Y.isChanged()) { Fixed.setState(true); } super.doAction("OK"); } else { super.doAction(o); } } @Override public void setAction() { final PointObject p = (PointObject) O; if ((X.isChanged() || Y.isChanged()) && p.isPointOn()) { try { final double x = new Expression(X.getText(), p .getConstruction(), p).getValue(); final double y = new Expression(Y.getText(), p .getConstruction(), p).getValue(); p.move(x, y); p.validate(); } catch (final Exception e) { } } if (Fixed != null && Fixed.getState() == true) { if (p.isPointOn()) { p.setUseAlpha(true); } else { p.setFixed(X.getText(), Y.getText()); } } else { try { final double x = new Expression(X.getText(), p .getConstruction(), p).getValue(); final double y = new Expression(Y.getText(), p .getConstruction(), p).getValue(); if (p.moveable()) { p.move(x, y); } } catch (final Exception e) { } } if (Fixed != null && Fixed.getState() == false) { if (p.isPointOn()) { p.setUseAlpha(false); } else { p.setFixed(false); } } if (Away != null) { if (!((IntersectionObject) p).setAway(Away.getText(), !Close .getState())) { final Warning w = new Warning(F, Zirkel.name("bound.error"), Zirkel.name("warning")); w.center(F); w.setVisible(true); } } if (Restricted != null) { ((IntersectionObject) p).setRestricted(Restricted.getState()); } if (Alternate != null) { ((IntersectionObject) p).setAlternate(Alternate.getState()); } if (Increment != null) { try { p.setIncrement(new Expression(Increment.getText(), p .getConstruction(), p).getValue()); } catch (final Exception e) { } } p.setType(TypeIB.getToggleState("type")); if (Inside != null) { p.setInside(Inside.getState()); } } @Override public void focusGained(final FocusEvent e) { if (Fixed != null && Fixed.getState()) { X.requestFocus(); } else { super.focusGained(e); } } } public class PointObject extends ConstructionObject implements MoveableObject, DriverObject { protected double X, Y; protected boolean BarycentricCoordsInitialzed = false; protected double Gx = 0, Gy = 0; // Barycentric coords, if it's inside a // polygon. protected double Alpha; // parameter relative zu object protected boolean AlphaValid = false; // Alpha is valid protected boolean UseAlpha = false; // Use Alpha at all protected boolean Moveable, Fixed; // private static Count N=new Count(); private static JPointName PointLabel = new JPointName(); protected int Type = 0; public final static int SQUARE = 0, DIAMOND = 1, CIRCLE = 2, DOT = 3, CROSS = 4, DCROSS = 5; public static int MaxType = 3; protected Expression EX, EY; // private ConstructionObject Bound=null; // point is on a line etc. private boolean Later; // bound is later in construction private String LaterBind = ""; private boolean KeepInside; // keep point inside bound private boolean DontUpdate = false; private double Increment = 0; // increment to keep on grid private ConstructionObject Bound = null; // point is on a line etc. private double BoundOrder = Double.NaN; // Only for points on parametric // curves made with "points only" protected ConstructionObject MovedBy; private double LASTX = Double.NaN, LASTY = Double.NaN; private final Vector magnetObjects = new Vector(); Expression magnetRayExp = null; private int CurrentMagnetRay = Integer.MIN_VALUE; private ConstructionObject CurrentMagnetObject = null; public ConstructionObject VirtualBound = null; // The object that may have moved this point public PointObject(final Construction c, final double x, final double y) { super(c); X = x; Y = y; Moveable = true; Fixed = false; setColor(ColorIndex, SpecialColor); setShowName(false); updateText(); Type = 0; setMagnetRayExp("20"); } public PointObject(final Construction c, final double x, final double y, final ConstructionObject bound) { this(c, x, y); Bound = bound; } public PointObject(final Construction c, final String name) { super(c, name); X = 0; Y = 0; Moveable = true; Fixed = false; setColor(ColorIndex, SpecialColor); updateText(); Type = 0; setMagnetRayExp("20"); } public static void setPointLabel(final JPointName jpl) { PointLabel = jpl; } @Override public void setName() { if ((!SuperHidden) && (!Hidden)) { Name = PointLabel.getBetterName(Cn, false); } else { Name = JPointName.getGenericName(Cn); } } @Override public void setNameWithNumber(String n) { Name = ""; if (Cn != null) { ConstructionObject o = Cn.find(n); if (o != null) { while (o != null && o != this) { Name = JPointName.getGenericName(Cn); n = Name; Name = ""; o = Cn.find(n); } Name = n; } else { Name = n; } } else { Name = n; } } @Override public String getTag() { if (Bound == null) { return "Point"; } else { return "PointOn"; } } @Override public int getN() { return N.next(); } // public void setDefaults () // { super.setDefaults(); // Type=Cn.DefaultType; // } @Override public void setDefaults() { setShowName(Global.getParameter("options.point.shownames", false)); setShowValue(Global.getParameter("options.point.showvalues", false)); setColor(Global.getParameter("options.point.color", 0), Global .getParameter("options.point.pcolor", (Color) null)); setColorType(Global.getParameter("options.point.colortype", 0)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Global.getParameter("options.point.large", false)); setBold(Global.getParameter("options.point.bold", false)); Type = Cn.DefaultType; } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.point.shownames", false)); setShowValue(Global.getParameter("options.point.showvalues", false)); setColor(Global.getParameter("options.point.color", 0), Global .getParameter("options.point.pcolor", (Color) null)); setColorType(Global.getParameter("options.point.colortype", 0)); setLarge(Global.getParameter("options.point.large", false)); setBold(Global.getParameter("options.point.bold", false)); Type = Cn.DefaultType; } private double Delta; @Override public double changedBy() { return Delta; } @Override public void validate() { if (DontUpdate) { return; } updateMagnetObjects(); followMagnetObject(); // magnet(); // System.out.println(getName()+" : validate !"); MovedBy = null; Delta = 0.0; Valid = true; if (Bound != null && !Bound.isInConstruction()) { Bound = null; } if (Bound != null && !Bound.valid()) { Valid = false; return; } if (Increment > 1e-4) { X = Math.floor(X / Increment + 0.5) * Increment; Y = Math.floor(Y / Increment + 0.5) * Increment; } if (Bound != null) { final double x = X, y = Y; if (KeepInside && Bound instanceof InsideObject) { ((InsideObject) Bound).keepInside(this); } else if (!KeepInside && Bound instanceof PointonObject) { if (!AlphaValid || !UseAlpha) { project(Bound); } else { project(Bound, Alpha); } } if (Later) { Delta = Math.sqrt((x - X) * (x - X) + (y - Y) * (y - Y)); } } if (Fixed && EX != null && EX.isValid()) { try { X = EX.getValue(); } catch (final Exception e) { Valid = false; return; } } if (Fixed && EY != null && EY.isValid()) { try { Y = EY.getValue(); } catch (final Exception e) { Valid = false; return; } } } @Override public void updateText() { if (Bound != null) { setText(text1(Zirkel.name("text.boundedpoint"), Bound.getName())); } else if (EX != null && EY != null) { setText(text2(Zirkel.name("text.point"), "\"" + EX + "\"", "\"" + EY + "\"")); } else { setText(text2(Zirkel.name("text.point"), "" + round(X), "" + round(Y))); } } static double x[] = new double[4], y[] = new double[4]; @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { DisplaysText = false; if (!Valid || mustHide(zc)) { return; } final double size = drawPoint(g, zc, this, X, Y, Type); if (tracked()) { zc.UniversalTrack.drawTrackPoint(this, X, Y, Type); } final String s = AngleObject.translateToUnicode(getDisplayText()); if (!s.equals("")) { g.setLabelColor(this); DisplaysText = true; setFont(g); final double d = Math.sqrt(XcOffset * XcOffset + YcOffset * YcOffset); if (!KeepClose || d < 1e-10) { TX1 = zc.col(X + XcOffset) + 2 * size; TY1 = zc.row(Y + YcOffset) + 2 * size; drawLabel(g, s); } else { drawPointLabel(g, s, zc, X, Y, YcOffset / d, -XcOffset / d, 0, 0); } } } static public double drawPoint(final MyGraphics g, final ZirkelCanvas zc, final ConstructionObject o, final double X, final double Y, final int type) { double size = zc.pointSize(); final double r = zc.col(X), c = zc.row(Y); if (size < 1) { size = 1; } // System.out.println(size); if (o.visible(zc)) { if (o.isStrongSelected() && g instanceof MyGraphics13) { ((MyGraphics13) g).drawMarkerLine(r, c, r, c); } g.setColor(o); switch (type) { case SQUARE: final double sx = r - size - 1, sy = c - size - 1, sw = 2 * size + 2; if (o.getColorType() == THICK) { g.fillRect(sx, sy, sw, sw, true, false, o); } else { g.fillRect(sx, sy, sw, sw, new Color(255, 255, 255)); } g.setColor(o); g.drawRect(sx, sy, sw, sw); break; case DIAMOND: final double dx = r - size - 2, dy = c - size - 2, dw = 2 * size + 4; g.drawDiamond(dx, dy, dw, (o.getColorType() == THICK), o); break; case CIRCLE: final double cx = r - size - 1, cy = c - size - 1, cw = 2 * size + 2; if (o.getColorType() == THICK) { g.fillOval(cx, cy, cw, cw, true, false, o); } else { g.fillOval(cx, cy, cw, cw, new Color(255, 255, 255)); g.setColor(o); g.drawOval(cx, cy, cw, cw); } break; case DOT: if (o.getColorType() == THICK) { g.fillRect(r, c, 1, 1, true, false, o); } else { g.drawLine(r, c, r, c); } break; case CROSS: if (o.getColorType() == THICK) { g.drawThickLine(r - size, c, r + size, c); g.drawThickLine(r, c - size, r, c + size); } else { g.drawLine(r - size, c, r + size, c); g.drawLine(r, c - size, r, c + size); } break; case DCROSS: final double dcx = r - size - 1, dcy = c - size - 1, dcw = 2 * size + 1; g.drawDcross(dcx, dcy, dcw, (o.getColorType() == THICK), o); break; } } return size; } @Override public String getDisplayValue() { // return "("+roundDisplay(X)+ // (Global.getParameter("options.germanpoints", // false)?"|":",")+roundDisplay(Y)+")"; return "(" + JGlobals.getLocaleNumber(X, "lengths") + (Global.getParameter("options.germanpoints", false) ? "|" : ";") + JGlobals.getLocaleNumber(Y, "lengths") + ")"; } @Override public boolean nearto(final int x, final int y, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } final double c = zc.col(X), r = zc.row(Y); final int size = (int) zc.selectionSize(); Value = Math.abs(x - c) + Math.abs(y - r); return Value <= size * 3 / 2; } public boolean nearto(final PointObject p) { if (!Valid) { return false; } final double dx = p.X - X, dy = p.Y - Y; return Math.sqrt(dx * dx + dy * dy) < 1e-9; } public double distanceTo(final int x, final int y, final ZirkelCanvas zc) { final double dx = x - zc.col(X), dy = y - zc.row(Y); return Math.sqrt(dx * dx + dy * dy); } @Override public double getX() { return X; } @Override public double getY() { return Y; } public boolean moveable() { boolean fixed = Fixed; if (dependsOnItselfOnly()) { fixed = false; } return Moveable && !fixed && !Keep; } /** * Check if the point depends on itself and no other object. Such points are * moveable, even if they are fixed. * * @return */ public boolean dependsOnItselfOnly() { boolean res = false; Enumeration e = depending(); while (e.hasMoreElements()) { if ((ConstructionObject) e.nextElement() == this) { res = true; break; } } e = depending(); while (e.hasMoreElements()) { if ((ConstructionObject) e.nextElement() != this) { res = false; break; } } return res; } public boolean dependsOnParametersOnly() { final Enumeration e = depending(); while (e.hasMoreElements()) { if (!((ConstructionObject) e.nextElement()).isParameter()) { return false; } } return true; } /** * @return o can move this point (moveable and not moved by something else) */ public boolean moveableBy(final ConstructionObject o) { if (Bound != null) { return false; } return moveable() && (MovedBy == null || MovedBy == o); } public boolean moveablePoint() { if (Bound != null) { return true; } return Moveable && !Keep; } public boolean setBound(final String name) { if (name.equals("")) { Bound = null; setFixed(false); Later = false; return true; } try { Bound = null; final ConstructionObject o = Cn.find(name); if (o instanceof PointonObject) { Bound = o; Moveable = true; Fixed = false; KeepInside = false; } else if (o instanceof InsideObject) { Bound = o; Moveable = true; Fixed = false; KeepInside = true; } else { return false; } } catch (final Exception e) { return false; } if (Cn.before(this, Bound)) { Cn.needsOrdering(); Cn.dovalidate(); } updateText(); clearMagnetObjects(); return true; } public void setBound(final ConstructionObject bound) { Bound = bound; } public boolean haveBoundOrder() { return (!Double.isNaN(BoundOrder)); } public void setBoundOrder(final double boundorder) { BoundOrder = boundorder; } public void clearBoundOrder() { BoundOrder = Double.NaN; } public ConstructionObject getBound() { return Bound; } public double getBoundOrder() { return BoundOrder; } public void setMoveable(final boolean flag) { Moveable = flag; } @Override public boolean fixed() { return Fixed; } @Override public void setFixed(final boolean flag) { Fixed = flag; if (!Fixed) { EX = EY = null; } updateText(); } @Override public void setFixed(final String x, final String y) { Fixed = true; EX = new Expression(x, getConstruction(), this); EY = new Expression(y, getConstruction(), this); updateText(); } @Override public void move(final double x, final double y) { if ((X == x) && (Y == y)) { return; } // System.out.println(getName()+" : move !"); X = x; Y = y; AlphaValid = false; computeBarycentricCoords(); } public void setXY(final double x, final double y) { if ((X == x) && (Y == y)) { return; } // System.out.println(getName()+" : setXY !"); X = x; Y = y; } public void setXYaway(final double x, final double y, final int r) { if (r > 0) { setXY(x, y); return; } final double d = Math.sqrt((X - x) * (X - x) + (Y - y) * (Y - y)); final double dblr = -r / Cn.getPixel(); double xx = x + dblr, yy = y; if (d != 0) { xx = x + (X - x) * dblr / d; yy = y + (Y - y) * dblr / d; } // System.out.println(Cn.getPixel()); // System.out.println("d="+d); // System.out.println("xx="+xx); // System.out.println("yy="+yy); // System.out.println("****"); setXY(xx, yy); } public void setA(final double alpha) { Alpha = alpha; } public void setMagnetRayExp(final String s) { magnetRayExp = new Expression(s, Cn, this); } public String getMagnetRayExp() { return magnetRayExp.toString(); } public int getMagnetRay() { int i = 20; try { i = (int) Math.round(magnetRayExp.getValue()); } catch (final Exception ex) { } return i; } // public String getMagnetRayExp(){ // return magnetRayExp.toString(); // } private boolean isMagnetObject(final String name) { final Enumeration e = magnetObjects.elements(); while (e.hasMoreElements()) { final MagnetObj mo = (MagnetObj) e.nextElement(); if (mo.name().equals(name)) { return true; } } return false; } public void removeMagnetObject(final String name) { final Enumeration e = magnetObjects.elements(); while (e.hasMoreElements()) { final MagnetObj mo = (MagnetObj) e.nextElement(); if (mo.name().equals(name)) { magnetObjects.remove(mo); } } } /** * s represents the name of an object, or the string "name:ray" where ray is * the specific magnetic attraction * * @param s */ public void addMagnetObject(final String s) { final String[] mo = s.split(":"); final String name = mo[0]; // int ray=-1; String ray = "" + Integer.MIN_VALUE; if (mo.length > 1) { ray = mo[1]; } if (name.equals(getName())) { return; } final ConstructionObject o = Cn.find(name); if ((o != null) && (!isMagnetObject(name))) { magnetObjects.add(new MagnetObj(o, ray)); } } public void setMagnetObjects(final String namelist) { String st = ""; char t; int p = 0; for (int i = 0; i < namelist.length(); i++) { t = namelist.charAt(i); if (t == '(') { p++; } else if (t == ')') { p--; } if ((p > 0) && (t == ',')) { st += "@@"; } else { st += t; } } final String[] s = st.split(","); magnetObjects.removeAllElements(); for (final String element : s) { st = element.replaceAll("@@", ","); addMagnetObject(st); } } public void selectMagnetObjects(final boolean b) { final Enumeration e = magnetObjects.elements(); while (e.hasMoreElements()) { final MagnetObj mo = (MagnetObj) e.nextElement(); if (mo.isInConstruction()) { mo.setSelected(b); } } } public void updateMagnetObjects() { final Enumeration e = magnetObjects.elements(); while (e.hasMoreElements()) { final MagnetObj mo = (MagnetObj) e.nextElement(); if (!mo.isInConstruction()) { magnetObjects.remove(mo); } } } public void clearMagnetObjects() { magnetObjects.removeAllElements(); setMagnetRayExp("20"); } public void translateMagnetObjects() { final Enumeration e = magnetObjects.elements(); while (e.hasMoreElements()) { final MagnetObj mo = (MagnetObj) e.nextElement(); mo.translate(); } } public Vector getMagnetObjects() { return magnetObjects; } public String getMagnetObjectsString() { updateMagnetObjects(); String s = ""; final Enumeration e = magnetObjects.elements(); if (e.hasMoreElements()) { final MagnetObj mo = (MagnetObj) e.nextElement(); s = mo.name(); if (mo.ray() > Integer.MIN_VALUE) { s += ":" + mo.rayexp(); } } while (e.hasMoreElements()) { final MagnetObj mo = (MagnetObj) e.nextElement(); s += "," + mo.name(); if (mo.ray() > Integer.MIN_VALUE) { s += ":" + mo.rayexp(); } } return s; } public void magnet() { ConstructionObject PtOnObject = null; ConstructionObject PtObject = null; final Enumeration e = magnetObjects.elements(); int dp = Integer.MAX_VALUE, dm = Integer.MAX_VALUE; int rayp = 0, raym = 0; while (e.hasMoreElements()) { final MagnetObj mo = (MagnetObj) e.nextElement(); final ConstructionObject o = mo.obj(); final int mRay = (mo.ray() > Integer.MIN_VALUE) ? mo.ray() : getMagnetRay(); final int mRayAbs = Math.abs(mRay); if (mRayAbs == 0) { continue; } if (!o.valid()) { continue; } if (o instanceof PointObject) { final int i = o.getDistance(this); if ((i <= mRayAbs) && (i < dp)) { PtObject = o; rayp = mRay; dp = i; } } else if (o instanceof PointonObject) { final int i = o.getDistance(this); if ((i <= mRayAbs) && (i < dm)) { PtOnObject = o; raym = mRay; dm = i; } } } if (PtObject != null) { final PointObject pt = (PointObject) PtObject; setXYaway(pt.getX(), pt.getY(), rayp); if (PtObject != CurrentMagnetObject) { CurrentMagnetObject = PtObject; CurrentMagnetRay = rayp; Cn.reorderConstruction(); } } else if (PtOnObject != null) { final PointonObject pt = (PointonObject) PtOnObject; if (PtOnObject != CurrentMagnetObject) { CurrentMagnetObject = PtOnObject; CurrentMagnetRay = raym; Cn.reorderConstruction(); } pt.project(this); } else { CurrentMagnetObject = null; CurrentMagnetRay = Integer.MIN_VALUE; } } public void setCurrentMagnetObject() { ConstructionObject PtOnObject = null; ConstructionObject PtObject = null; final Enumeration e = magnetObjects.elements(); int dp = Integer.MAX_VALUE, dm = Integer.MAX_VALUE; int rayp = 0, raym = 0; while (e.hasMoreElements()) { final MagnetObj mo = (MagnetObj) e.nextElement(); final ConstructionObject o = mo.obj(); final int mRay = (mo.ray() > Integer.MIN_VALUE) ? mo.ray() : getMagnetRay(); if (o instanceof PointObject) { final int i = o.getDistance(this); if ((i <= mRay) && (i < dp)) { PtObject = o; rayp = mRay; dp = i; } } else if (o instanceof PointonObject) { final int i = o.getDistance(this); if ((i <= mRay) && (i < dm)) { PtOnObject = o; raym = mRay; dm = i; } } } if (PtObject != null) { CurrentMagnetObject = PtObject; CurrentMagnetRay = rayp; } else if (PtOnObject != null) { CurrentMagnetObject = PtOnObject; CurrentMagnetRay = raym; } else { CurrentMagnetObject = null; CurrentMagnetRay = Integer.MIN_VALUE; } } public ConstructionObject getCurrentMagnetObject() { return CurrentMagnetObject; } public void followMagnetObject() { if (CurrentMagnetObject != null) { if (CurrentMagnetObject instanceof PointObject) { final PointObject pt = (PointObject) CurrentMagnetObject; if (CurrentMagnetRay > 0) { setXY(pt.getX(), pt.getY()); } } else if (CurrentMagnetObject instanceof PointonObject) { final PointonObject pt = (PointonObject) CurrentMagnetObject; pt.project(this); } } magnet(); } @Override public int getDistance(final PointObject P) { final double d = Math .sqrt(((getX() - P.getX()) * (getX() - P.getX()) + (getY() - P .getY()) * (getY() - P.getY()))); return (int) Math.round(d * Cn.getPixel()); } public void project(final ConstructionObject o) { if (!(o instanceof PointonObject)) { return; } ((PointonObject) o).project(this); if (UseAlpha) { AlphaValid = true; } } public void project(final ConstructionObject o, final double alpha) { ((PointonObject) o).project(this, alpha); } @Override public void edit(final ZirkelCanvas zc) { if (!rene.zirkel.Zirkel.IsApplet) { eric.JGlobals.EditObject(this); return; } final ObjectEditDialog d = new PointEditDialog(zc, this); d.setVisible(true); zc.repaint(); if ((EX != null && !EX.isValid())) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, EX.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } else if ((EY != null && !EY.isValid())) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, EY.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } validate(); if (d.wantsMore()) { new EditConditionals(zc.getFrame(), this); validate(); } } @Override public void printArgs(final XmlWriter xml) { updateText(); updateMagnetObjects(); if (Bound != null) { xml.printArg("on", Bound.getName()); if (KeepInside) { xml.printArg("inside", "true"); } } if (magnetObjects.size() > 0) { xml.printArg("magnetobjs", getMagnetObjectsString()); xml.printArg("magnetd", "" + magnetRayExp.toString()); } if (haveBoundOrder()) { xml.printArg("boundorder", String.valueOf(BoundOrder)); } if (Fixed && EX != null) { xml.printArg("x", EX.toString()); xml.printArg("actx", "" + X); } else { if (Bound != null && AlphaValid && UseAlpha) { xml.printArg("alpha", "" + Alpha); } xml.printArg("x", "" + X); } if (Fixed && EY != null) { xml.printArg("y", EY.toString()); xml.printArg("acty", "" + Y); } else { xml.printArg("y", "" + Y); } printType(xml); if (Fixed) { xml.printArg("fixed", "true"); } if (Increment > 1e-4) { xml.printArg("increment", "" + getIncrement()); } } public void printType(final XmlWriter xml) { if (Type != 0) { switch (Type) { case DIAMOND: xml.printArg("shape", "diamond"); break; case CIRCLE: xml.printArg("shape", "circle"); break; case DOT: xml.printArg("shape", "dot"); break; case CROSS: xml.printArg("shape", "cross"); break; case DCROSS: xml.printArg("shape", "dcross"); break; } } } @Override public int getType() { return Type; } @Override public void setType(final int type) { Type = type; } public void movedBy(final ConstructionObject o) { MovedBy = o; } @Override public boolean equals(final ConstructionObject o) { if (!(o instanceof PointObject) || !o.valid()) { return false; } final PointObject p = (PointObject) o; return equals(X, p.X) && equals(Y, p.Y); } @Override public String getEX() { if (EX != null) { return EX.toString(); } else { return "" + round(X); } } @Override public String getEY() { if (EY != null) { return EY.toString(); } else { return "" + round(Y); } } public boolean isOn(final ConstructionObject o) { if (Bound != null) { return o == Bound; } return o.contains(this); } @Override public void translate() { if (Bound != null) { Bound = Bound.getTranslation(); } else if (Fixed) { try { setFixed(EX.toString(), EY.toString()); EX.translate(); EY.translate(); } catch (final Exception e) { } } magnetRayExp.translate(); translateMagnetObjects(); } @Override public Enumeration depending() { super.depending(); if (Bound != null) { DL.add(Bound); } if (Fixed) { if (EX != null) { EX.addDep(this); } if (EY != null) { EY.addDep(this); } } return DL.elements(); } @Override public void snap(final ZirkelCanvas zc) { final double d = zc.getGridSize() / 2; X = Math.round(X / d) * d; Y = Math.round(Y / d) * d; updateText(); } @Override public void updateCircleDep() { if (Bound != null && Bound instanceof PrimitiveCircleObject) { ((PrimitiveCircleObject) Bound).addDep(this); } if (Bound != null && Bound instanceof PrimitiveLineObject) { ((PrimitiveLineObject) Bound).addDep(this); } } public boolean isPointOn() { return Bound != null; } public boolean isPointOnOrMagnet() { return (Bound != null) || (CurrentMagnetObject != null); } public void setLaterBind(final String s) { LaterBind = s; } // for macro constructions : @Override public ConstructionObject copy(final double x, final double y) { ConstructionObject o = null; try { o = (ConstructionObject) clone(); setTranslation(o); o.translateConditionals(); o.translate(); o.setName(); o.updateText(); o.setBreak(false); // o.setTarget(false); // if the target is a Point inside polygon, then try // to follow the mouse ! : if (KeepInside && Bound != null && Bound instanceof AreaObject) { o.move(x, y); } } catch (final Exception e) { } return o; } public void computeBarycentricCoords() { if (Bound != null && Bound instanceof QuadricObject) { final QuadricObject quad = ((QuadricObject) Bound); final PointObject A = quad.P[0]; final PointObject B = quad.P[1]; final PointObject C = quad.P[2]; final double a = B.getX() - A.getX(); final double b = C.getX() - A.getX(); final double c = this.getX() - A.getX(); final double d = B.getY() - A.getY(); final double e = C.getY() - A.getY(); final double f = this.getY() - A.getY(); final double det = a * e - d * b; if (det != 0) { Gx = (c * e - b * f) / det; Gy = (a * f - c * d) / det; BarycentricCoordsInitialzed = true; } } else if (KeepInside && Bound != null && Bound instanceof AreaObject) { final AreaObject area = ((AreaObject) Bound); if (area.V.size() > 2) { final PointObject A = (PointObject) area.V.get(0); final PointObject B = (PointObject) area.V.get(1); final PointObject C = (PointObject) area.V.get(2); final double a = B.getX() - A.getX(); final double b = C.getX() - A.getX(); final double c = this.getX() - A.getX(); final double d = B.getY() - A.getY(); final double e = C.getY() - A.getY(); final double f = this.getY() - A.getY(); final double det = a * e - d * b; if (det != 0) { Gx = (c * e - b * f) / det; Gy = (a * f - c * d) / det; BarycentricCoordsInitialzed = true; } } } } @Override public void setInside(final boolean flag) { KeepInside = flag; computeBarycentricCoords(); } @Override public boolean isInside() { return KeepInside; } @Override public void laterBind(final Construction c) { if (LaterBind.equals("")) { return; } final ConstructionObject o = c.find(LaterBind); if (o != null && ((o instanceof PointonObject) || (o instanceof InsideObject))) { Bound = o; updateText(); validate(); } LaterBind = ""; } public void setAlpha(final double alpha) { Alpha = alpha; AlphaValid = true; } public void setUseAlpha(final boolean flag) { UseAlpha = flag; } public boolean useAlpha() { return UseAlpha; } public double getAlpha() { return Alpha; } @Override public void round() { move(round(X, ZirkelCanvas.LengthsFactor), round(Y, ZirkelCanvas.LengthsFactor)); } /** * For bounded points. */ @Override public void setKeepClose(final double x, final double y) { KeepClose = true; XcOffset = x - X; YcOffset = y - Y; } @Override public boolean canKeepClose() { return true; } public boolean dontUpdate() { return DontUpdate; } public void dontUpdate(final boolean flag) { DontUpdate = flag; } /** * Overwrite setting of default things for macro targets. */ // public void setTargetDefaults () // { super.setTargetDefaults(); // Type=Cn.DefaultType; // } public void startDrag(final double x, final double y) { } public void dragTo(final double x, final double y) { clearBoundOrder(); if ((X == x) && (Y == y)) { return; } // System.out.println(getName()+" : dragTo !"); move(x, y); } public double getOldX() { return 0; } public double getOldY() { return 0; } @Override public void setIncrement(final double inc) { Increment = inc; } @Override public double getIncrement() { return Increment; } @Override public boolean isDriverObject() { if (Bound != null) { return true; } // if (Fixed) return false; return Moveable && !Keep; } public boolean somethingChanged() { return ((getX() != LASTX) || (getY() != LASTY)); } public void clearChanges() { LASTX = getX(); LASTY = getY(); } } ./src/rene/zirkel/objects/CVS/RevisionCache/TrackObject.java#1.60000644000175000017500000010221211155152774023133 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: TrackObject.java import java.awt.Checkbox; import java.awt.Color; import java.util.Enumeration; import java.util.Vector; import javax.swing.JPanel; import rene.gui.Global; import rene.gui.IconBar; import rene.gui.MyLabel; import rene.gui.MyTextField; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.dialogs.EditConditionals; import rene.zirkel.dialogs.ObjectEditDialog; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.graphics.PolygonDrawer; import rene.zirkel.graphics.PolygonFiller; import rene.zirkel.structures.Coordinates; class TrackEditDialog extends ObjectEditDialog { /** * */ private static final long serialVersionUID = 1L; IconBar IC, TypeIB; Checkbox Fixed, Discrete; MyTextField DMin; public TrackEditDialog(final ZirkelCanvas zc, final TrackObject o) { super(zc.getFrame(), Zirkel.name("edit.function.title"), o, "function"); } @Override public void addFirst(final JPanel P) { Fixed = new Checkbox(""); Fixed.setState(O.isFixed()); P.add(new MyLabel(Zirkel.name("edit.fixed"))); P.add(Fixed); DMin = new MyTextField("" + ((TrackObject) O).getDMin()); P.add(new MyLabel(Zirkel.name("edit.track.dmin"))); P.add(DMin); } @Override public void addSecond(final JPanel P) { final TrackObject T = (TrackObject) O; IC = new IconBar(F); IC.setIconBarListener(this); IC.addOnOffLeft("filled"); IC.setState("filled", T.isFilled()); IC.setIconBarListener(this); P.add(new MyLabel("")); P.add(IC); TypeIB = new IconBar(F); TypeIB.addToggleGroupLeft("type", 6); TypeIB.toggle("type", T.getType()); P.add(new MyLabel("")); P.add(TypeIB); P.add(new MyLabel(Zirkel.name("edit.discrete"))); P.add(Discrete = new Checkbox()); Discrete.setState(T.isDiscrete()); } @Override public void iconPressed(final String o) { if (o.equals("filled")) { if (IC.getState("filled")) { IB.setState("isback", true); ThicknessIB.setEnabled("solid", true); } else { IB.setState("isback", false); ThicknessIB.setState("solid", false); ThicknessIB.setEnabled("solid", false); } } super.iconPressed(o); } @Override public void setAction() { final TrackObject f = (TrackObject) O; f.setFixed(Fixed.getState()); f.setFilled(IC.getState("filled")); try { f.setDMin(new Double(DMin.getText()).doubleValue()); } catch (final Exception e) { } f.setType(TypeIB.getToggleState("type")); f.setDiscrete(Discrete.getState()); } } /** * This object contains an automatic track. It is saved in the construction like * any other ConstructionObject. Validation is time consuming and is done only * on repaints from ZirkelCanvas. */ public class TrackObject extends ConstructionObject implements PointonObject { static Count N = new Count(); public PointObject PM; public ConstructionObject O, P; public int PMax = 16, PN; public ConstructionObject PO[] = new ConstructionObject[PMax]; public boolean Filled = false; public boolean Discrete = false; public int Type = 0; @Override public void setFilled(final boolean flag) { Filled = flag; } @Override public boolean isFilled() { return Filled; } public TrackObject(final Construction c) { super(c); } public TrackObject(final Construction c, final ConstructionObject p, final ConstructionObject po[], final int pn, final ConstructionObject o, final PointObject pm) { super(c); P = p; PN = pn; for (int i = 0; i < PN; i++) { PO[i] = po[i]; } O = o; PM = pm; validate(); updateText(); } @Override public void setDefaults() { setShowName(Global.getParameter("options.locus.shownames", false)); setShowValue(Global.getParameter("options.locus.showvalues", false)); setColor(Global.getParameter("options.locus.color", 0), Global .getParameter("options.locus.pcolor", (Color) null)); setColorType(Global.getParameter("options.locus.colortype", 0)); setFilled(Global.getParameter("options.locus.filled", false)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.locus.shownames", false)); setShowValue(Global.getParameter("options.locus.showvalues", false)); setColor(Global.getParameter("options.locus.color", 0), Global .getParameter("options.locus.pcolor", (Color) null)); setColorType(Global.getParameter("options.locus.colortype", 0)); setFilled(Global.getParameter("options.locus.filled", false)); } @Override public String getTag() { return "Track"; } @Override public int getN() { return N.next(); } @Override public void updateText() { if (PM != null) { setText(text3(Zirkel.name("text.track"), P.getName(), PM.getName(), O.getName())); } else { setText(text2(Zirkel.name("text.trackof"), P.getName(), O.getName())); } } // Update only from ZirkelCanvas, when needed. @Override public void validate() { } public PolygonFiller PF = null; // Paint the track @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) { return; } Coordinates C; Enumeration e = V.elements(); double c0, r0, c, r; if (!Discrete && isStrongSelected() && g instanceof MyGraphics13) { final PolygonDrawer pm = new PolygonDrawer(g, this); pm.useAsMarker(); if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c0 = zc.col(C.X); r0 = zc.row(C.Y); pm.drawTo(c0, r0); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c = zc.col(C.X); r = zc.row(C.Y); if (Math.abs(c0 - c) < 100 && Math.abs(r0 - r) < 100) { pm.drawTo(c, r); } else { if (isFilled()) { PF.finishPolygon(); } pm.finishPolygon(); } c0 = c; r0 = r; } pm.finishPolygon(); } } e = V.elements(); if (indicated()) { final boolean sel = P.indicated(); P.setIndicated(true); g.setColor(P); P.setIndicated(sel); } else { g.setColor(this); } if (Discrete) { final int col = getColorIndex(); final int th = getColorType(); if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c0 = zc.col(C.X); r0 = zc.row(C.Y); PF.drawTo(c0, r0); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c = zc.col(C.X); r = zc.row(C.Y); if (Math.abs(c0 - c) < 100 && Math.abs(r0 - r) < 100) { if (isFilled()) { PF.drawTo(c, r); } } else { if (isFilled()) { PF.finishPolygon(); } } if (C.Color >= 0) { setColor(C.Color); } if (C.Thickness >= 0) { setColorType(C.Thickness); } PointObject.drawPoint(g, zc, this, C.X, C.Y, Type); setColor(col); setColorType(th); c0 = c; r0 = r; } if (isFilled()) { PF.finishPolygon(); } } for (int i = 0; i < PN; i++) { e = VO[i].elements(); g.setColor(PO[i]); if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); if (C.Color >= 0) { setColor(C.Color); } if (C.Thickness >= 0) { setColorType(C.Thickness); } PointObject.drawPoint(g, zc, this, C.X, C.Y, Type); setColor(col); setColorType(th); } } } } else { PolygonDrawer pd = new PolygonDrawer(g, this); if (isFilled()) { if (PF == null) { PF = new PolygonFiller(g, this); } PF.start(); PF.setGraphics(g); } if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c0 = zc.col(C.X); r0 = zc.row(C.Y); pd.drawTo(c0, r0); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c = zc.col(C.X); r = zc.row(C.Y); if (Math.abs(c0 - c) < 100 && Math.abs(r0 - r) < 100) { if (isFilled()) { PF.drawTo(c, r); } pd.drawTo(c, r); } else { if (isFilled()) { PF.finishPolygon(); } pd.finishPolygon(); } c0 = c; r0 = r; } if (isFilled()) { PF.finishPolygon(); } pd.finishPolygon(); } for (int i = 0; i < PN; i++) { e = VO[i].elements(); g.setColor(PO[i]); pd = new PolygonDrawer(g, PO[i]); if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c0 = zc.col(C.X); r0 = zc.row(C.Y); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c = zc.col(C.X); r = zc.row(C.Y); if (Math.abs(c0 - c) < 100 && Math.abs(r0 - r) < 100) { pd.drawTo(c, r); } else { pd.finishPolygon(); } c0 = c; r0 = r; } } pd.finishPolygon(); } } } public double getSum(final double x, final double y) throws ConstructionException { if (!Valid) { throw new ConstructionException(""); } double sum = 0; boolean started = false; double x0 = 0, y0 = 0; final Enumeration e = V.elements(); while (e.hasMoreElements()) { final Coordinates C = (Coordinates) e.nextElement(); if (started) { sum += (-(C.X - x) * (y0 - y) + (C.Y - y) * (x0 - x)) / 2; } x0 = C.X; y0 = C.Y; started = true; } return sum; } public double getSum() throws ConstructionException { if (!Valid) { throw new ConstructionException(""); } double sum = 0; boolean started = false; double x0 = 0, y0 = 0, x = 0, y = 0; final Enumeration e = V.elements(); while (e.hasMoreElements()) { final Coordinates C = (Coordinates) e.nextElement(); if (started) { sum += (-(C.X - x) * (y0 - y) + (C.Y - y) * (x0 - x)) / 2; } else { x = C.X; y = C.Y; } x0 = C.X; y0 = C.Y; started = true; } return sum; } public double getLength() throws ConstructionException { if (!Valid) { throw new ConstructionException(""); } double sum = 0; boolean started = false; double x0 = 0, y0 = 0; final Enumeration e = V.elements(); while (e.hasMoreElements()) { final Coordinates C = (Coordinates) e.nextElement(); if (started) { sum += Math.sqrt((C.X - x0) * (C.X - x0) + (C.Y - y0) * (C.Y - y0)); } x0 = C.X; y0 = C.Y; started = true; } return sum; } @Override public void printArgs(final XmlWriter xml) { super.printArgs(xml); if (PM != null) { xml.printArg("point", PM.getName()); } xml.printArg("on", O.getName()); xml.printArg("track", P.getName()); xml.printArg("dmin", "" + DMin); for (int i = 0; i < PN; i++) { xml.printArg("track" + i, PO[i].getName()); } if (Filled) { xml.printArg("filled", "true"); } if (Fixed) { xml.printArg("fixed", "true"); } if (Discrete) { xml.printArg("discrete", "true"); } printType(xml); } public void printType(final XmlWriter xml) { if (Type != 0) { switch (Type) { case PointObject.DIAMOND: xml.printArg("shape", "diamond"); break; case PointObject.CIRCLE: xml.printArg("shape", "circle"); break; case PointObject.DOT: xml.printArg("shape", "dot"); break; case PointObject.CROSS: xml.printArg("shape", "cross"); break; case PointObject.DCROSS: xml.printArg("shape", "dcross"); break; } } } @Override public Enumeration depending() { super.depending(); if (PM != null) { DL.add(PM); } DL.add(O); DL.add(P); for (int i = 0; i < PN; i++) { DL.add(PO[i]); } return DL.elements(); } @Override public boolean equals(final ConstructionObject o) { return false; } @Override public void translate() { if (PM != null) { PM = (PointObject) PM.getTranslation(); } O = O.getTranslation(); P = P.getTranslation(); } @Override public boolean maybeTransparent() { return false; } public Vector V = new Vector(); public Vector VO[] = new Vector[PMax]; // Mainly to select the track for delete @Override public boolean nearto(final int x, final int y, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } final int size = (int) zc.selectionSize(); final Enumeration e = V.elements(); while (e.hasMoreElements()) { final Coordinates c = (Coordinates) e.nextElement(); final double col = zc.col(c.X), row = zc.row(c.Y); if (Math.max(Math.abs(col - x), Math.abs(row - y)) < size) { return true; } } return false; } @Override public boolean onlynearto(final int c, final int r, final ZirkelCanvas zc) { return false; } public double da = 0; double oldx, oldy; public double X, Y, DX, DY; double XO[] = new double[PMax], YO[] = new double[PMax], DXO[] = new double[PMax], DYO[] = new double[PMax]; int Omit = 1; public double mod(final double x) { if (x >= Math.PI) { return x - 2 * Math.PI; } if (x < -Math.PI) { return x + 2 * Math.PI; } return x; } public boolean DontProject = false; public double DMin = 0.005; /** * Complicated procedure to recompute the automatic track. In principle, a * moving point moves on some object, the coordinates of the tracked points * or the intersections of the tracked lines are stored, as well as the * positions of the moved point. * * But if the tracked point gets invalid, the movement reverses and the * interesections change. * * Moreover, there is a list of secondary tracked objects. * * @param zc */ public synchronized void docompute(final ZirkelCanvas zc) { V = new Vector(); for (int i = 0; i < PN; i++) { VO[i] = new Vector(); } // Running on a circle: if (O instanceof PrimitiveCircleObject) { zc.getConstruction().shouldSwitch(false); final PrimitiveCircleObject c = (PrimitiveCircleObject) O; final double x = c.getX(), y = c.getY(), r = c.getR(); PM.project(c); double amin = 0, amax = 0, astart = 0, anull = 0; final double dmax = 0.5; boolean range = false; if (c.hasRange()) { range = true; final double a1 = c.getA1(); final double a2 = c.getA2(); double d = a2 - a1; while (d < 0) { d += 2 * Math.PI; } while (d >= 2 * Math.PI) { d -= 2 * Math.PI; } amin = astart = -d / 2; amax = d / 2; anull = (a1 + a2) / 2; } else { amin = astart = -Math.PI * 0.9999; amax = Math.PI * 0.9999; } double a = astart; PM.move(x + r * Math.cos(anull + a), y + r * Math.sin(anull + a)); PM.project(c); zc.getConstruction().validate(this, PM); zc.resetSum(); double x1 = 0, y1 = 0; boolean started = false; if (P.valid()) { zc.getConstruction().shouldSwitch(true); if (P instanceof PointObject) { final PointObject p = (PointObject) P; x1 = p.getX(); y1 = p.getY(); addCoordinates(V, P, x1, y1); started = true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) P; X = L.getX(); Y = L.getY(); DX = L.getDX(); DY = L.getDY(); started = true; } } final boolean startedO[] = new boolean[PMax]; for (int i = 0; i < PN; i++) { startedO[i] = false; } final long time = System.currentTimeMillis(); addSecondary(startedO); final double dmin = DMin; if (da < 1e-10 || da > zc.dx(1)) { da = zc.dx(1) / 10; } double aold = a; while (true) { a = a + da; boolean Break = false; if ((!started || range) && a >= amax) { a = amax; Break = true; } else if ((!started || range) && a <= amin) { a = amin; Break = true; } else if (started && da > 0) { if ((mod(aold - astart) < 0 && mod(a - astart) >= 0) && !zc.getConstruction().haveSwitched()) { Break = true; a = astart; } } aold = a; PM.move(x + r * Math.cos(anull + a), y + r * Math.sin(anull + a)); PM.project(c); zc.getConstruction().validate(this, PM); if (P.valid()) { if (!started) { zc.getConstruction().shouldSwitch(true); astart = a; } double x2 = 0, y2 = 0; boolean valid = false; if (P instanceof PointObject) { final PointObject p = (PointObject) P; x2 = p.getX(); y2 = p.getY(); valid = true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) P; if (!started) { X = L.getX(); Y = L.getY(); DX = L.getDX(); DY = L.getDY(); } else { double xx, yy, dx, dy; xx = L.getX(); yy = L.getY(); dx = L.getDX(); dy = L.getDY(); final double det = dx * DY - dy * DX; if (Math.sqrt(Math.abs(det)) > 1e-9) { final double h = (-(X - xx) * DY + DX * (Y - yy)) / (-det); x2 = xx + h * dx; y2 = yy + h * dy; valid = true; } X = xx; Y = yy; DX = dx; DY = dy; } } final double dist = zc.dCenter(x2, y2); final boolean different = ((int) zc.col(x1) != (int) zc .col(x2) || (int) zc.row(y1) != (int) zc.row(y2)); if (valid && different) { addCoordinates(V, P, x2, y2); } final double dp = Math.abs(x2 - x1) + Math.abs(y2 - y1); da = updateDA(da, valid, dist, dp, dmin, dmax, zc); x1 = x2; y1 = y2; started = true; } else if (started) { da = -da; } addSecondary(startedO); if (Break || System.currentTimeMillis() - time > 1000) { break; } } // System.out.println("Points "+V.size()+" Time "+(System.currentTimeMillis()-time)); } // Running on a line: else if (O instanceof PrimitiveLineObject) { zc.getConstruction().shouldSwitch(false); final PrimitiveLineObject l = (PrimitiveLineObject) O; PM.project(l); final double lx = l.getX(), ly = l.getY(), ldx = l.getDX(), ldy = l .getDY(); double amin = 0, amax = 0, astart = 0; double dmax = 0.5; boolean range = false; if (l instanceof RayObject) { amin = astart = 0; amax = Math.PI * 0.9999; range = true; } else if (l instanceof SegmentObject) { amin = astart = 0; final double r = ((SegmentObject) l).getLength(); dmax = r / 20; amax = Math.atan(r) * 2; range = true; } else { amin = astart = -Math.PI * 0.99999; amax = Math.PI * 0.9999; } double a = astart; double hd = Math.tan(mod(a) / 2); PM.move(lx + hd * ldx, ly + hd * ldy); PM.project(l); zc.getConstruction().validate(this, PM); zc.resetSum(); double x1 = 0, y1 = 0; boolean started = false; if (P.valid()) { zc.getConstruction().shouldSwitch(true); if (P instanceof PointObject) { final PointObject p = (PointObject) P; x1 = p.getX(); y1 = p.getY(); addCoordinates(V, P, x1, y1); started = true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) P; X = L.getX(); Y = L.getY(); DX = L.getDX(); DY = L.getDY(); started = true; } } final boolean startedO[] = new boolean[PMax]; for (int i = 0; i < PN; i++) { startedO[i] = false; } final long time = System.currentTimeMillis(); addSecondary(startedO); final double dmin = DMin; if (da < 1e-10 || da > zc.dx(1)) { da = zc.dx(1) / 10; } double aold = a; while (true) { a = a + da; boolean Break = false; if ((!started || range) && a >= amax) { a = amax; Break = true; } else if ((!started || range) && a <= amin) { a = amin; Break = true; } else if (started && da > 0) { if ((mod(aold - astart) < 0 && mod(a - astart) >= 0) && !zc.getConstruction().haveSwitched()) { Break = true; a = astart; } } aold = a; hd = Math.tan(mod(a) / 2); PM.move(lx + hd * ldx, ly + hd * ldy); PM.project(l); zc.getConstruction().validate(this, PM); if (P.valid()) { if (!started) { zc.getConstruction().shouldSwitch(true); astart = a; } double x2 = 0, y2 = 0; boolean valid = false; if (P instanceof PointObject) { final PointObject p = (PointObject) P; x2 = p.getX(); y2 = p.getY(); valid = true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) P; if (!started) { X = L.getX(); Y = L.getY(); DX = L.getDX(); DY = L.getDY(); } else { double xx, yy, dx, dy; xx = L.getX(); yy = L.getY(); dx = L.getDX(); dy = L.getDY(); final double det = dx * DY - dy * DX; if (Math.sqrt(Math.abs(det)) > 1e-9) { final double h = (-(X - xx) * DY + DX * (Y - yy)) / (-det); x2 = xx + h * dx; y2 = yy + h * dy; valid = true; } X = xx; Y = yy; DX = dx; DY = dy; } } final double dist = zc.dCenter(x2, y2); final boolean different = ((int) zc.col(x1) != (int) zc .col(x2) || (int) zc.row(y1) != (int) zc.row(y2)); if (valid && different) { addCoordinates(V, P, x2, y2); } final double dp = Math.abs(x2 - x1) + Math.abs(y2 - y1); da = updateDA(da, valid, dist, dp, dmin, dmax, zc); x1 = x2; y1 = y2; started = true; } else if (started) { da = -da; } addSecondary(startedO); if (Break || System.currentTimeMillis() - time > 1000) { break; } } } // Running an expression slider: else if (O instanceof ExpressionObject) { zc.getConstruction().shouldSwitch(false); final ExpressionObject eo = (ExpressionObject) O; if (!eo.isSlider()) { return; } double amin = 0, amax = 0, astart = 0; double dmax = 0.5; boolean range = false; amin = astart = 0; final double r = 1; dmax = r / 20; amax = r; range = true; double a = astart; double hd = a; eo.setSliderPosition(0); zc.getConstruction().validate(P, null); zc.resetSum(); double x1 = 0, y1 = 0; boolean started = false; if (P.valid()) { zc.getConstruction().shouldSwitch(true); if (P instanceof PointObject) { final PointObject p = (PointObject) P; x1 = p.getX(); y1 = p.getY(); addCoordinates(V, P, x1, y1); started = true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) P; X = L.getX(); Y = L.getY(); DX = L.getDX(); DY = L.getDY(); started = true; } } final boolean startedO[] = new boolean[PMax]; for (int i = 0; i < PN; i++) { startedO[i] = false; } final long time = System.currentTimeMillis(); addSecondary(startedO); final double dmin = DMin; if (da < 1e-10 || da > zc.dx(1)) { da = zc.dx(1) / 10; } double aold = a; double x2 = 0, y2 = 0; while (true) { a = a + da; boolean Break = false; if ((!started || range) && a >= amax) { a = amax; Break = true; } else if ((!started || range) && a <= amin) { a = amin; Break = true; } else if (started && da > 0) { if ((mod(aold - astart) < 0 && mod(a - astart) >= 0) && !zc.getConstruction().haveSwitched()) { Break = true; a = astart; } } aold = a; hd = a; eo.setSliderPosition(hd); zc.getConstruction().validate(P, null); if (P.valid()) { if (!started) { zc.getConstruction().shouldSwitch(true); astart = a; } boolean valid = false; if (P instanceof PointObject) { final PointObject p = (PointObject) P; x2 = p.getX(); y2 = p.getY(); valid = true; } else if (P instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) P; if (!started) { X = L.getX(); Y = L.getY(); DX = L.getDX(); DY = L.getDY(); } else { double xx, yy, dx, dy; xx = L.getX(); yy = L.getY(); dx = L.getDX(); dy = L.getDY(); final double det = dx * DY - dy * DX; if (Math.sqrt(Math.abs(det)) > 1e-9) { final double h = (-(X - xx) * DY + DX * (Y - yy)) / (-det); x2 = xx + h * dx; y2 = yy + h * dy; valid = true; } X = xx; Y = yy; DX = dx; DY = dy; } } final double dist = zc.dCenter(x2, y2); final boolean different = ((int) zc.col(x1) != (int) zc .col(x2) || (int) zc.row(y1) != (int) zc.row(y2)); if (valid && different) { addCoordinates(V, P, x2, y2); } final double dp = Math.abs(x2 - x1) + Math.abs(y2 - y1); da = updateDA(da, valid, dist, dp, dmin, dmax, zc); x1 = x2; y1 = y2; started = true; } else if (started) { addCoordinates(V, P, x2, y2); da = -da; } addSecondary(startedO); if (Break || System.currentTimeMillis() - time > 1000) { break; } } } } // This is the update function. It is a time consuming moving of // the point P on the object O. The function is a copy from the // same function in ObjectTracker. public synchronized void compute(final ZirkelCanvas zc) { if (Fixed && !StartFix) { return; } StartFix = false; double x = 0, y = 0; if (PM != null) { x = PM.getX(); y = PM.getY(); } else if (O instanceof ExpressionObject && ((ExpressionObject) O).isSlider()) { x = ((ExpressionObject) O).getSliderPosition(); } zc.getConstruction().clearSwitches(); zc.getConstruction().shouldSwitch(true); DontProject = true; docompute(zc); DontProject = false; zc.getConstruction().shouldSwitch(false); zc.getConstruction().clearSwitches(); if (PM != null) { PM.move(x, y); } else if (O instanceof ExpressionObject && ((ExpressionObject) O).isSlider()) { ((ExpressionObject) O).setSliderPosition(x); } final Enumeration e = V.elements(); if (e.hasMoreElements()) { Coordinates c = (Coordinates) e.nextElement(); x = c.X; y = c.Y; double col1 = zc.col(c.X); double row1 = zc.row(c.Y); while (e.hasMoreElements()) { c = (Coordinates) e.nextElement(); final double col2 = zc.col(c.X); final double row2 = zc.row(c.Y); c.flag = Math.abs(col2 - col1) < 100 && Math.abs(row2 - row1) < 100; row1 = row2; col1 = col2; } } zc.dovalidate(); } public void addSecondary(final boolean startedO[]) { for (int i = 0; i < PN; i++) { if (!PO[i].valid()) { continue; } if (PO[i] instanceof PointObject) { final PointObject p = (PointObject) PO[i]; addCoordinates(VO[i], p, p.getX(), p.getY()); VO[i].addElement(new Coordinates(p.getX(), p.getY())); } else if (PO[i] instanceof PrimitiveLineObject) { final PrimitiveLineObject L = (PrimitiveLineObject) PO[i]; if (!startedO[i]) { XO[i] = L.getX(); YO[i] = L.getY(); DXO[i] = L.getDX(); DYO[i] = L.getDY(); startedO[i] = true; } else { double xx, yy, dx, dy; xx = L.getX(); yy = L.getY(); dx = L.getDX(); dy = L.getDY(); final double det = dx * DYO[i] - dy * DXO[i]; if (Math.sqrt(Math.abs(det)) > 1e-9) { final double h = (-(XO[i] - xx) * DYO[i] + DXO[i] * (YO[i] - yy)) / (-det); XO[i] = xx; YO[i] = yy; DXO[i] = dx; DYO[i] = dy; addCoordinates(VO[i], PO[i], xx + h * dx, yy + h * dy); } } } } } public void addCoordinates(final Vector v, final ConstructionObject p, final double x, final double y) { final Coordinates C = new Coordinates(x, y); if (Discrete && p instanceof PointObject) { C.Color = p.getColorIndex(); C.Thickness = p.getColorType(); } v.addElement(C); } public void addCoordinates(final Vector v, final ConstructionObject p) { v.addElement(new Coordinates(p.getX(), p.getY())); } public void addCoordinates(final Vector v, final double x, final double y) { v.addElement(new Coordinates(x, y)); } public double StepSize = 5; public double updateDA(double da, final boolean valid, final double dist, final double dp, final double dmin, final double dmax, final ZirkelCanvas zc) { if (V.size() > 0 && valid) { if (dist < 1.2) { if (dp > zc.dx(StepSize)) { da /= 2; } else if (dp < zc.dx(StepSize / 2)) { da *= 2; } if (da > 0 && da < dmin) { da = dmin; } else if (da < 0 && da > -dmin) { da = -dmin; } if (da > dmax) { da = dmax; } else if (da < -dmax) { da = -dmax; } } else { if (dp > zc.dx(StepSize * 10)) { da /= 2; } else if (dp < zc.dx(StepSize * 5)) { da *= 2; } if (da > 0 && da < dmin) { da = dmin; } else if (da < 0 && da > -dmin) { da = -dmin; } if (da > dmax) { da = dmax; } else if (da < -dmax) { da = -dmax; } } } return da; } @Override public boolean hasUnit() { return false; } /** * Project a point to this object. */ public synchronized void project(final PointObject P) { if (DontProject) { return; } final Enumeration e = V.elements(); double x = 0, y = 0, x0 = 0, y0 = 0, dmin = 0; boolean started = false; while (e.hasMoreElements()) { final Coordinates c = (Coordinates) e.nextElement(); final double x1 = c.X; final double y1 = c.Y; if (!started) { dmin = Math.sqrt((P.getX() - x1) * (P.getX() - x1) + (P.getY() - y1) * (P.getY() - y1)); x0 = x = x1; y0 = y = y1; started = true; } else { if (c.flag) { double h = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0); if (h < 1e-10) { h = 1e-10; } double g = (P.getX() - x0) * (x1 - x0) + (P.getY() - y0) * (y1 - y0); if (g < 0) { g = 0; } if (g > h) { g = h; } final double x2 = x0 + g / h * (x1 - x0), y2 = y0 + g / h * (y1 - y0); final double d = Math.sqrt((P.getX() - x2) * (P.getX() - x2) + (P.getY() - y2) * (P.getY() - y2)); if (d < dmin) { dmin = d; x = x2; y = y2; } } x0 = x1; y0 = y1; } } if (started) { P.setXY(x, y); P.Valid = true; } else { P.Valid = false; } } public synchronized int getDistance(final PointObject P) { final Enumeration e = V.elements(); double x = 0, y = 0, x0 = 0, y0 = 0, dmin = 0; boolean started = false; while (e.hasMoreElements()) { final Coordinates c = (Coordinates) e.nextElement(); final double x1 = c.X; final double y1 = c.Y; if (!started) { dmin = Math.sqrt((P.getX() - x1) * (P.getX() - x1) + (P.getY() - y1) * (P.getY() - y1)); x0 = x = x1; y0 = y = y1; started = true; } else { if (c.flag) { double h = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0); if (h < 1e-10) { h = 1e-10; } double g = (P.getX() - x0) * (x1 - x0) + (P.getY() - y0) * (y1 - y0); if (g < 0) { g = 0; } if (g > h) { g = h; } final double x2 = x0 + g / h * (x1 - x0), y2 = y0 + g / h * (y1 - y0); final double d = Math.sqrt((P.getX() - x2) * (P.getX() - x2) + (P.getY() - y2) * (P.getY() - y2)); if (d < dmin) { dmin = d; x = x2; y = y2; } } x0 = x1; y0 = y1; } } if (started) { P.Valid = true; final double dd = Math.sqrt((P.getX() - x) * (P.getX() - x) + (P.getY() - y) * (P.getY() - y)); return (int) Math.round(dd * Cn.getPixel()); } else { P.Valid = false; } return Integer.MAX_VALUE; } @Override public String getDisplayValue() { try { return "" + getSum(); } catch (final Exception e) { return "???"; } } public void project(final PointObject P, final double alpha) { project(P); } @Override public void edit(final ZirkelCanvas zc) { if (!rene.zirkel.Zirkel.IsApplet) { eric.JGlobals.EditObject(this); return; } final ObjectEditDialog d = new TrackEditDialog(zc, this); d.setVisible(true); zc.repaint(); validate(); if (d.wantsMore()) { new EditConditionals(zc.getFrame(), this); validate(); } } @Override public boolean canDisplayName() { return false; } public boolean Fixed = false, StartFix; @Override public boolean isFixed() { return Fixed; } @Override public void setFixed(final boolean f) { Fixed = f; if (Fixed) { StartFix = true; } } public void setDMin(final double dmin) { DMin = dmin; } public double getDMin() { return DMin; } @Override public int getType() { return Type; } @Override public void setType(final int type) { Type = type; } public boolean isDiscrete() { return Discrete; } public void setDiscrete(final boolean discrete) { Discrete = discrete; } public boolean canInteresectWith(final ConstructionObject o) { return true; } public void repulse(final PointObject P) { project(P); } } ./src/rene/zirkel/objects/CVS/RevisionCache/FunctionObject.java#1.60000644000175000017500000010666111155152774023670 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: Functionbject.java import java.awt.Checkbox; import java.awt.Color; import java.awt.Frame; import java.awt.TextField; import java.awt.event.FocusEvent; import java.util.Enumeration; import java.util.StringTokenizer; import java.util.Vector; import javax.swing.JPanel; import rene.dialogs.Warning; import rene.gui.ButtonAction; import rene.gui.Global; import rene.gui.IconBar; import rene.gui.MyLabel; import rene.gui.TextFieldAction; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.dialogs.EditConditionals; import rene.zirkel.dialogs.ObjectEditDialog; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.FunctionPolygonFiller; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.PolygonDrawer; import rene.zirkel.structures.Coordinates; class CurveEditDialog extends ObjectEditDialog { /** * */ private static final long serialVersionUID = 1L; TextField VarMin, VarMax, DVar, Var, EX, EY; IconBar IC, TypeIB; ZirkelCanvas ZC; Checkbox Special; public CurveEditDialog(final ZirkelCanvas zc, final FunctionObject o) { super(zc.getFrame(), Zirkel.name("edit.function.title"), o, "function"); ZC = zc; } @Override public void addFirst(final JPanel P) { final FunctionObject f = (FunctionObject) O; VarMin = new TextFieldAction(this, "varmin", "" + f.VarMin, 30); P.add(new MyLabel(Zirkel.name("function.varmin"))); P.add(VarMin); VarMax = new TextFieldAction(this, "varmax", "" + f.VarMax, 30); P.add(new MyLabel(Zirkel.name("function.varmax"))); P.add(VarMax); DVar = new TextFieldAction(this, "dvar", "" + f.DVar, 30); P.add(new MyLabel(Zirkel.name("function.dvar"))); P.add(DVar); Var = new TextFieldAction(this, "var", "" + f.getVar(), 30); P.add(new MyLabel(Zirkel.name("function.var"))); P.add(Var); String ex = f.getEX(); if (ex.equals(f.Var)) { ex = ""; } EX = new TextFieldAction(this, "ex", "" + ex, 30); P.add(new MyLabel(Zirkel.name("function.x"))); P.add(EX); EY = new TextFieldAction(this, "ey", "" + f.getEY(), 30); P.add(new MyLabel(Zirkel.name("function.y"))); P.add(EY); } @Override public void addSecond(final JPanel P) { final FunctionObject Func = (FunctionObject) O; IC = new IconBar(F); IC.setIconBarListener(this); IC.addOnOffLeft("filled"); IC.setState("filled", Func.isFilled()); IC.setIconBarListener(this); P.add(new MyLabel("")); P.add(IC); TypeIB = new IconBar(F); TypeIB.addToggleGroupLeft("type", 6); TypeIB.toggle("type", Func.getType()); P.add(new MyLabel("")); P.add(TypeIB); P.add(new MyLabel(Zirkel.name("edit.discrete"))); P.add(Special = new Checkbox()); Special.setState(Func.isSpecial()); } @Override public void addButton(final JPanel P) { final FunctionObject f = (FunctionObject) O; if (!f.Var.equals(f.EX)) { if (f.Center == null) { P.add(new ButtonAction(this, Zirkel .name("edit.function.center"), "SetCenter")); } else { P.add(new ButtonAction(this, Zirkel.name("edit.function.free"), "SetFree")); } P.add(new MyLabel(" ")); } } @Override public void iconPressed(final String o) { if (o.equals("filled")) { if (IC.getState("filled")) { IB.setState("isback", true); ThicknessIB.setEnabled("solid", true); } else { IB.setState("isback", false); ThicknessIB.setState("solid", false); ThicknessIB.setEnabled("solid", false); } } super.iconPressed(o); } @Override public void setAction() { final FunctionObject f = (FunctionObject) O; f.setExpressions(Var.getText(), EX.getText(), EY.getText()); f.setRange(VarMin.getText(), VarMax.getText(), DVar.getText()); f.setFilled(IC.getState("filled")); f.setType(TypeIB.getToggleState("type")); f.setSpecial(Special.getState()); } @Override public void doAction(final String o) { if (o.equals("SetCenter")) { ZC.setCurveCenter((FunctionObject) O); super.doAction("OK"); } else if (o.equals("SetFree")) { ((FunctionObject) O).Center = null; super.doAction("OK"); } else { super.doAction(o); } } @Override public void focusGained(final FocusEvent e) { VarMin.requestFocus(); } } /** * @author Rene * * Function objects are parametric or cartesian curves. For parametric * functions, depending on a parameter t , x(t) and y(t) are computed * and drawn on the screen. For cartesian functions, the parameter x * will be used. * */ public class FunctionObject extends ConstructionObject implements PointonObject, HeavyObject, DriverObject, Evaluator { Expression EX = null, EY = null; public Expression VarMin = null, VarMax = null, DVar = null; String LASTEX = "", LASTEY = "", LASTVarMin = "", LASTVarMax = "", LASTDVar = ""; double X[] = { 0 }; public String Var[] = { "x" }; boolean Filled = false; Expression Center = null; protected int Type = 0; public final static int SQUARE = 0, DIAMOND = 1, CIRCLE = 2, DOT = 3, CROSS = 4, DCROSS = 5; protected boolean Special = false; // Vector RefreshList=new Vector(); public Vector V = new Vector(); double cx, cy, ww, wh; // this is a main object list which tells if the object needs to recompute : Vector DriverObjectList = new Vector(); double c0, r0, c, r; /** * Functions are HeavyObjects which means we always must see if it really * neads to recompute. Computing a function can be time consuming, but once * it's computed, the paint method is fast enough. * * @param c */ public FunctionObject(final Construction c) { super(c); VarMin = new Expression("windowcx-windoww", c, this); VarMax = new Expression("windowcx+windoww", c, this); DVar = new Expression("0", c, this); validate(); updateText(); cx = c.getX(); cy = c.getY(); ww = c.getW(); wh = c.getH(); Type = CROSS; } @Override public void setDefaults() { setShowName(Global.getParameter("options.locus.shownames", false)); setShowValue(Global.getParameter("options.locus.showvalues", false)); setColor(Global.getParameter("options.locus.color", 0), Global .getParameter("options.locus.pcolor", (Color) null)); setColorType(Global.getParameter("options.locus.colortype", 0)); setFilled(Global.getParameter("options.locus.filled", false)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.locus.shownames", false)); setShowValue(Global.getParameter("options.locus.showvalues", false)); setColor(Global.getParameter("options.locus.color", 0), Global .getParameter("options.locus.pcolor", (Color) null)); setColorType(Global.getParameter("options.locus.colortype", 0)); setFilled(Global.getParameter("options.locus.filled", false)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); } /** * In order to see if the function must be recomputed or not, we have to * register, in the DriverObjectList, all objects the function depends on. * There are many possibilities for an object to be in this list : if it's * used in the def of the function, if it's in the min or max text box, * etc... * * @param c */ public void searchDependencies(final Construction c) { DriverObjectList.clear(); if (RekValidating) { return; } // should not happen! RekValidating = true; Enumeration e = c.elements(); while (e.hasMoreElements()) { ((ConstructionObject) e.nextElement()).setRekFlag(false); } final ConstructionObject oEX[] = EX.getDepList().getArray(); final ConstructionObject oEY[] = EY.getDepList().getArray(); final ConstructionObject oVarMin[] = VarMin.getDepList().getArray(); final ConstructionObject oVarMax[] = VarMax.getDepList().getArray(); final ConstructionObject oDVar[] = DVar.getDepList().getArray(); for (final ConstructionObject element : oEX) { recursiveSearchDependencies((ConstructionObject) element); } for (final ConstructionObject element : oEY) { recursiveSearchDependencies((ConstructionObject) element); } for (final ConstructionObject element : oVarMin) { recursiveSearchDependencies((ConstructionObject) element); } for (final ConstructionObject element : oVarMax) { recursiveSearchDependencies((ConstructionObject) element); } for (final ConstructionObject element : oDVar) { recursiveSearchDependencies((ConstructionObject) element); } e = c.elements(); while (e.hasMoreElements()) { final ConstructionObject oc = (ConstructionObject) e.nextElement(); if ((oc.isRekFlag()) && (oc.isDriverObject())) { DriverObjectList.addElement(oc); } } RekValidating = false; NeedsRecompute = true; } /** * Recursive method called by the searchDependencies method * * @param o */ public void recursiveSearchDependencies(final ConstructionObject o) { if (o.isRekFlag()) { return; } o.setRekFlag(true); final ConstructionObject d[] = o.getDepArray(); for (final ConstructionObject element : d) { recursiveSearchDependencies(element); } } /** * Time consuming method which is called only if it's really necessary : */ public void compute() { // Empty the vector which contains the point set of the plot : V.clear(); if (!Valid) { return; } // Initialisation of varmin, varmax and d (the step variable) : double varmin, varmax, d; try { varmin = VarMin.getValue(); varmax = VarMax.getValue(); d = DVar.getValue(); if (varmin > varmax) { final double h = varmin; varmin = varmax; varmax = h; } if (d < 0) { d = -d; } } catch (final Exception e) { Valid = false; return; } // X[0] represents the 't' variable for parametric plots. // When you give X[0] a t value, EX.getValue() and EY.getValue() // automatically returns the x(t) and y(t) value. // If it's a cartesian function, X[0] represents the 'x' value // then EX.getValue() always returns x and EY.getValue() returns // the f(x) value. X[0] = varmin; // If the function may have discontinuity problems, computing is // slower, because it checks for each point if a segment will have // to be displayed or not : if (mayHaveDiscontinuityPb()) { if (d == 0) { try { // if the user leaves the step text box empty in the // properties bar, the step d will represents only one pixel // : d = new Expression("1/pixel", getConstruction(), this) .getValue(); } catch (final Exception ex) { } // if the step d defined by user is too small, then correct it : } else if (d < (varmax - varmin) / 1000) { d = (varmax - varmin) / 1000; } double x1 = 0, y1 = 0, x2 = 0, y2 = 0, yM = 0, X0 = 0; final int nbsteps = (int) Math.round((varmax - varmin) / d) + 1; try { x1 = EX.getValue(); y1 = EY.getValue(); V.add(new Coordinates(x1, y1, false)); } catch (final Exception ex) { } /* * A(x1,y1=f(x1)) is the first point. B(x2,y2=f(x2)) is the second * point. In order to know if a segment must join these two points, * we compute the point M(xM,yM=f(xM)), where xM=(x1+x2)/2 : */ for (int i = 1; i < nbsteps; i++) { try { X0 = X[0]; X[0] += d / 2; EX.getValue(); yM = EY.getValue(); X[0] += d / 2; x2 = EX.getValue(); y2 = EY.getValue(); // If A,M and B are on the same horizontal line // then segment must be drawn (true) : if ((y1 == yM) && (y2 == yM)) { V.add(new Coordinates(x2, y2, true)); // if f(xM) is in open interval ]f(x1),f(x2)[ : } else if (((yM > y1) && (yM < y2)) || ((yM > y2) && (yM < y1))) { final double mm = Math.abs(y1 - yM) / Math.abs(y2 - yM); // This is a weird thing, but it seems to work in // lots of "basic" situations : // If the distance |yM-y1| (or |yM-y2|) // represents 10% of the distance |yM-y2| (or |yM-y1|) // then may be it's a discontinuity problem, so // don't draw the segment [AB] (false) if ((mm < 0.1) || (mm > 10)) { V.add(new Coordinates(x2, y2, false)); // Otherwise draw the segment [AB] : } else { V.add(new Coordinates(x2, y2, true)); } // if f(xM) is not in interval [f(x1),f(x2)], don't // draw the segment [AB] (false) : } else { V.add(new Coordinates(x2, y2, false)); } x1 = x2; y1 = y2; } catch (final Exception ex) { try { X[0] = X0 + d; x1 = EX.getValue(); y1 = EY.getValue(); V.add(new Coordinates(x1, y1, false)); } catch (final Exception ex1) { } } } } else { if (d == 0) { d = (varmax - varmin) / 100; } else if (d < (varmax - varmin) / 1000) { d = (varmax - varmin) / 1000; } final int nbsteps = (int) Math.round((varmax - varmin) / d) + 1; for (int i = 0; i < nbsteps; i++) { try { V.add(new Coordinates(EX.getValue(), EY.getValue())); } catch (final Exception ex) { } X[0] += d; } } } public void setNeedsToRecompte(final boolean n) { NeedsRecompute = n; } /** * Check all objects the function depends on. If one of the have changed, * this function return true. * * @return */ public boolean needsToRecompute() { boolean needs = false; final Enumeration pl = DriverObjectList.elements(); while (pl.hasMoreElements()) { final DriverObject oc = (DriverObject) pl.nextElement(); if (oc.somethingChanged()) { // There is a "ClearList" which will be cleared // at the end of the Construction.computeHeavyObjects method : Global.addClearList(oc); needs = true; } } // Also needs to compute when user zoom or move figure in the window : if ((Cn.getX() != cx) || (Cn.getY() != cy) || (Cn.getW() != ww) || (Cn.getH() != wh)) { cx = Cn.getX(); cy = Cn.getY(); ww = Cn.getW(); wh = Cn.getH(); needs = true; } if (NeedsRecompute) { NeedsRecompute = false; return true; } return needs; } @Override public void setFilled(final boolean flag) { Filled = flag; } @Override public boolean isFilled() { return Filled; } @Override public String getTag() { return "Function"; } @Override public int getN() { return N.next(); } @Override public void updateText() { if (EX != null && EY != null) { setText(text2(Zirkel.name("text.function"), EX.toString(), EY .toString())); } else { setText(text2(Zirkel.name("text.function"), "", "")); } } @Override public void validate() { if (EX != null && EY != null) { Valid = EX.isValid() && EY.isValid() && VarMin.isValid() && VarMax.isValid() && DVar.isValid(); } else { Valid = false; } } public void setExpressions(final String t, String ex, final String ey) { final StringTokenizer tok = new StringTokenizer(t); Var = new String[tok.countTokens()]; X = new double[tok.countTokens()]; int i = 0; while (tok.hasMoreTokens()) { Var[i++] = tok.nextToken(); } if (ex.equals("")) { ex = Var[0]; } EX = new Expression(ex, getConstruction(), this, Var); EY = new Expression(ey, getConstruction(), this, Var); validate(); searchDependencies(Cn); } public boolean isCartesian() { return EX.toString().equals("x"); } public boolean mayHaveDiscontinuityPb() { final String Pbs[] = { "floor(", "ceil(", "tan(", "sign(" }; // Continuity pbs are only checked for cartesian functions : if (EX.toString().equals("x")) { for (final String pb : Pbs) { if ((EY.toString().indexOf(pb) != -1)) { return true; } } } return false; } public void setRange(final String min, final String max, final String d) { VarMin = new Expression(min, getConstruction(), this); VarMax = new Expression(max, getConstruction(), this); DVar = new Expression(d, getConstruction(), this); searchDependencies(Cn); } @Override public String getEX() { if (EX != null) { return EX.toString(); } else { return Var[0]; } } @Override public String getEY() { if (EY != null) { return EY.toString(); } else { return "0"; } } FunctionPolygonFiller PF = null; double C1, C2; int C, R, W, H; @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) { return; } Coordinates C = null; Enumeration e = V.elements(); double c, r; g.setColor(this); if (Special) { if (Filled) { PF = new FunctionPolygonFiller(g, this, zc.getY(), zc.getY() + zc.getHeight()); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); PF.add(zc.col(C.X), zc.row(C.Y)); } PF.fillPolygon(zc.row(0)); e = V.elements(); g.setColor(this); } while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); PointObject.drawPoint(g, zc, this, C.X, C.Y, Type); } } else if (Tracked) { zc.UniversalTrack.TrackIG.setColor(this); zc.UniversalTrack.setActive(true); final PolygonDrawer pd = new PolygonDrawer(g, this); final PolygonDrawer pdt = new PolygonDrawer( zc.UniversalTrack.TrackIG, this); if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c0 = zc.col(C.X); r0 = zc.row(C.Y); pd.startPolygon(c0, r0); pdt.startPolygon(c0, r0); } while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c = zc.col(C.X); r = zc.row(C.Y); if (Math.abs(pd.c() - c) < 1000 && Math.abs(pd.r() - r) < 1000) { pd.drawTo(c, r); pdt.drawTo(c, r); } else { pd.finishPolygon(); pdt.finishPolygon(); pd.startPolygon(c, r); pdt.startPolygon(c, r); } } pd.finishPolygon(); pdt.finishPolygon(); } else { if (Filled) { PF = new FunctionPolygonFiller(g, this, zc.getY(), zc.getY() + zc.getHeight()); while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); PF.add(zc.col(C.X), zc.row(C.Y)); } PF.fillPolygon(zc.row(0)); e = V.elements(); g.setColor(this); } final PolygonDrawer pd = new PolygonDrawer(g, this); if (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c0 = zc.col(C.X); r0 = zc.row(C.Y); pd.startPolygon(c0, r0); } while (e.hasMoreElements()) { C = (Coordinates) e.nextElement(); c = zc.col(C.X); r = zc.row(C.Y); if (C.join) { pd.drawTo(c, r); } else { pd.finishPolygon(); pd.startPolygon(c, r); } } pd.finishPolygon(); } } @Override public double getValue() throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } return X[0]; } public double getValue(final String var) throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } for (int i = 0; i < Var.length; i++) { if (var.equals(Var[i])) { return X[i]; } } return X[0]; } public double getIntegral() throws ConstructionException { return getSum(); } @Override public String getDisplayValue() { if (getEX().equals(getVar())) { return EY.toString(); } else { return "(" + EX.toString() + "," + EY.toString() + ")"; } } // Mainly to select the track for delete @Override public boolean nearto(final int x, final int y, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } final Enumeration e = V.elements(); final double xx = zc.x(x), yy = zc.y(y); final double mymax = (7 / Cn.getPixel()); if (Special) { Coordinates CS; while (e.hasMoreElements()) { CS = (Coordinates) e.nextElement(); if ((Math.abs(CS.X - xx) < mymax) && (Math.abs(CS.Y - yy) < mymax)) { return true; } } } else { double xA = 0, yA = 0, xB = 0, yB = 0; Coordinates CS0, CS1; if (e.hasMoreElements()) { CS0 = (Coordinates) e.nextElement(); xA = CS0.X; yA = CS0.Y; } while (e.hasMoreElements()) { CS1 = (Coordinates) e.nextElement(); xB = CS1.X; yB = CS1.Y; final double p1 = (xx - xA) * (xB - xA) + (yy - yA) * (yB - yA); final double p2 = (xx - xB) * (xA - xB) + (yy - yB) * (yA - yB); if ((p1 > 0) && (p2 > 0)) { final double aa = xB - xA, bb = yB - yA, cc = bb * xA - aa * yA; final double d = Math.abs(-bb * xx + aa * yy + cc) / Math.sqrt(aa * aa + bb * bb); if (d < mymax) { return true; } } xA = xB; yA = yB; } } return false; } public boolean EditAborted; @Override public void edit(final ZirkelCanvas zc) { ObjectEditDialog d; if (!rene.zirkel.Zirkel.IsApplet) { eric.JGlobals.EditObject(this); return; } while (true) { d = new CurveEditDialog(zc, this); d.setVisible(true); EditAborted = false; if (d.isAborted()) { EditAborted = true; break; } else if (!EX.isValid()) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, EX.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } else if (!EY.isValid()) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, EY.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } else { break; } } validate(); updateText(); zc.getConstruction().updateCircleDep(); zc.repaint(); if (d.wantsMore()) { new EditConditionals(zc.getFrame(), this); validate(); } } @Override public void printArgs(final XmlWriter xml) { xml.printArg("x", EX.toString()); xml.printArg("y", EY.toString()); xml.printArg("var", getVar()); xml.printArg("min", "" + VarMin); xml.printArg("max", "" + VarMax); xml.printArg("d", "" + DVar); if (Special) { xml.printArg("special", "true"); } printType(xml); if (Filled) { xml.printArg("filled", "true"); } if (getCenter() != null) { xml.printArg("center", getCenter().getName()); } } @Override public void setType(final int type) { Type = type; } @Override public int getType() { return Type; } public void printType(final XmlWriter xml) { if (Type != 0) { switch (Type) { case DIAMOND: xml.printArg("shape", "diamond"); break; case CIRCLE: xml.printArg("shape", "circle"); break; case DOT: xml.printArg("shape", "dot"); break; case CROSS: xml.printArg("shape", "cross"); break; case DCROSS: xml.printArg("shape", "dcross"); break; } } } @Override public ConstructionObject copy(final double x, final double y) { final FunctionObject fo = new FunctionObject(getConstruction()); fo.copyProperties(this); fo.EX = new Expression(EX.toString(), getConstruction(), fo, Var); fo.EY = new Expression(EY.toString(), getConstruction(), fo, Var); fo.VarMin = new Expression(VarMin.toString(), getConstruction(), fo); fo.VarMax = new Expression(VarMax.toString(), getConstruction(), fo); fo.DVar = new Expression(DVar.toString(), getConstruction(), fo); fo.Special = Special; final ConstructionObject O = getTranslation(); fo.setTranslation(this); fo.EX.translate(); fo.EY.translate(); fo.VarMin.translate(); fo.VarMax.translate(); fo.DVar.translate(); fo.translateConditionals(); fo.X = X; fo.Var = Var; fo.validate(); fo.setTranslation(O); fo.searchDependencies(Cn.getTranslation()); return fo; } @Override public boolean onlynearto(final int x, final int y, final ZirkelCanvas zc) { return false; // return nearto(x,y,zc); } @Override public boolean equals(final ConstructionObject o) { return false; } @Override public Enumeration depending() { DL.reset(); addDepending(EX); addDepending(EY); addDepending(VarMin); addDepending(VarMax); addDepending(DVar); return DL.elements(); } public void addDepending(final Expression E) { if (E != null) { final Enumeration e = E.getDepList().elements(); while (e.hasMoreElements()) { DL.add((ConstructionObject) e.nextElement()); } } } @Override public boolean hasUnit() { return false; } public double evaluateF(final double x[]) throws ConstructionException { int n = x.length; if (n > X.length) { n = X.length; } for (int i = 0; i < n; i++) { X[i] = x[i]; } for (int i = n; i < X.length; i++) { X[i] = 0; } try { return EY.getValue(); } catch (final Exception e) { throw new ConstructionException(""); } } public double evaluateF(final double x) throws ConstructionException { X[0] = x; for (int i = 1; i < X.length; i++) { X[i] = 0; } try { return EY.getValue(); } catch (final Exception e) { throw new ConstructionException(""); } } @Override public int getDistance(final PointObject P) { double varmin, varmax, dvar; try { varmin = VarMin.getValue(); varmax = VarMax.getValue(); dvar = DVar.getValue(); if (varmin > varmax) { final double h = varmin; varmin = varmax; varmax = h; } if (dvar < 0) { dvar = -dvar; } if (dvar == 0) { dvar = (varmax - varmin) / 100; } else if (dvar < (varmax - varmin) / 1000) { dvar = (varmax - varmin) / 1000; } } catch (final Exception e) { Valid = false; return Integer.MAX_VALUE; } try { // if it's a cartesian function, try to calculate the "real" coords // : if ((getEX().equals("x"))) { double x = (P.getX() < varmin) ? varmin : P.getX(); x = (P.getX() > varmax) ? varmax : x; final double y = evaluateF(x); final double dd = Math.sqrt((P.getX() - x) * (P.getX() - x) + (P.getY() - y) * (P.getY() - y)); return (int) Math.round(dd * Cn.getPixel()); } } catch (final Exception e) { } try { // if it's a parmetric curve and function is just plot with points : if ((!getEX().equals("x")) && (Special)) { if (P.haveBoundOrder()) { X[0] = P.getBoundOrder(); final double dd = Math.sqrt((P.getX() - EX.getValue()) * (P.getX() - EX.getValue()) + (P.getY() - EY.getValue()) * (P.getY() - EY.getValue())); return (int) Math.round(dd * Cn.getPixel()); } else { Coordinates CS; final Enumeration e = V.elements(); double delta0 = 0, delta1 = 0, xx = 0, yy = 0; int i = 0; if (e.hasMoreElements()) { CS = (Coordinates) e.nextElement(); delta0 = Math.abs(CS.X - P.getX()) + Math.abs(CS.Y - P.getY()); xx = CS.X; yy = CS.Y; } while (e.hasMoreElements()) { i++; CS = (Coordinates) e.nextElement(); delta1 = Math.abs(CS.X - P.getX()) + Math.abs(CS.Y - P.getY()); if (delta1 < delta0) { delta0 = delta1; xx = CS.X; yy = CS.Y; } } final double dd = Math.sqrt((P.getX() - xx) * (P.getX() - xx) + (P.getY() - yy) * (P.getY() - yy)); return (int) Math.round(dd * Cn.getPixel()); } } } catch (final Exception e) { Valid = false; return Integer.MAX_VALUE; } // Otherwise, at Least get the approx coordinates on the polygon : if (needsToRecompute()) { compute(); } final Enumeration e = V.elements(); double x = 0, y = 0, x0 = 0, y0 = 0, dmin = 0; boolean started = false; while (e.hasMoreElements()) { final Coordinates c = (Coordinates) e.nextElement(); final double x1 = c.X; final double y1 = c.Y; if (!started) { dmin = Math.sqrt((P.getX() - x1) * (P.getX() - x1) + (P.getY() - y1) * (P.getY() - y1)); x0 = x = x1; y0 = y = y1; started = true; } else { if (c.flag) { double h = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0); if (h < 1e-10) { h = 1e-10; } double g = (P.getX() - x0) * (x1 - x0) + (P.getY() - y0) * (y1 - y0); if (g < 0) { g = 0; } if (g > h) { g = h; } final double x2 = x0 + g / h * (x1 - x0), y2 = y0 + g / h * (y1 - y0); final double d = Math.sqrt((P.getX() - x2) * (P.getX() - x2) + (P.getY() - y2) * (P.getY() - y2)); if (d < dmin) { dmin = d; x = x2; y = y2; } } x0 = x1; y0 = y1; } } if (started) { P.Valid = true; final double dd = Math.sqrt((P.getX() - x) * (P.getX() - x) + (P.getY() - y) * (P.getY() - y)); return (int) Math.round(dd * Cn.getPixel()); } else { P.Valid = false; } return Integer.MAX_VALUE; } public void project(final PointObject P) { double varmin, varmax, dvar; try { varmin = VarMin.getValue(); varmax = VarMax.getValue(); dvar = DVar.getValue(); if (varmin > varmax) { final double h = varmin; varmin = varmax; varmax = h; } if (dvar < 0) { dvar = -dvar; } if (dvar == 0) { dvar = (varmax - varmin) / 100; } else if (dvar < (varmax - varmin) / 1000) { dvar = (varmax - varmin) / 1000; } } catch (final Exception e) { Valid = false; return; } try { // if P is a PointOn (a parmetric curve) and function is just plot // with points : if ((!getEX().equals("x")) && (P.isPointOnOrMagnet()) && (Special)) { if (P.haveBoundOrder()) { X[0] = P.getBoundOrder(); P.setXY(EX.getValue(), EY.getValue()); return; } else { Coordinates CS; final Enumeration e = V.elements(); double delta0 = 0, delta1 = 0, xx = 0, yy = 0; int i = 0, k = 0; if (e.hasMoreElements()) { CS = (Coordinates) e.nextElement(); delta0 = Math.abs(CS.X - P.getX()) + Math.abs(CS.Y - P.getY()); xx = CS.X; yy = CS.Y; } while (e.hasMoreElements()) { i++; CS = (Coordinates) e.nextElement(); delta1 = Math.abs(CS.X - P.getX()) + Math.abs(CS.Y - P.getY()); if (delta1 < delta0) { k = i; delta0 = delta1; xx = CS.X; yy = CS.Y; } } P.setXY(xx, yy); P.setBoundOrder(varmin + k * dvar); return; } } } catch (final Exception e) { Valid = false; return; } try { // if P is a PointOn (a cartesian function), try to calculate the // "real" coords : if ((P.isPointOnOrMagnet()) && (getEX().equals("x"))) { double x = (P.getX() < varmin) ? varmin : P.getX(); x = (P.getX() > varmax) ? varmax : x; final double y = evaluateF(x); P.move(x, y); return; } } catch (final Exception e) { } // Otherwise, at Least get the approx coordinates on the polygon : if (needsToRecompute()) { compute(); } final Enumeration e = V.elements(); double x = 0, y = 0, x0 = 0, y0 = 0, dmin = 0; boolean started = false; while (e.hasMoreElements()) { final Coordinates c = (Coordinates) e.nextElement(); final double x1 = c.X; final double y1 = c.Y; if (!started) { dmin = Math.sqrt((P.getX() - x1) * (P.getX() - x1) + (P.getY() - y1) * (P.getY() - y1)); x0 = x = x1; y0 = y = y1; started = true; } else { if (c.flag) { double h = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0); if (h < 1e-10) { h = 1e-10; } double g = (P.getX() - x0) * (x1 - x0) + (P.getY() - y0) * (y1 - y0); if (g < 0) { g = 0; } if (g > h) { g = h; } final double x2 = x0 + g / h * (x1 - x0), y2 = y0 + g / h * (y1 - y0); final double d = Math.sqrt((P.getX() - x2) * (P.getX() - x2) + (P.getY() - y2) * (P.getY() - y2)); if (d < dmin) { dmin = d; x = x2; y = y2; } } x0 = x1; y0 = y1; } } if (started) { P.setXY(x, y); P.Valid = true; } else { P.Valid = false; } } public double getSum() { double varmin, varmax, dvar; boolean reverse = false; final boolean parametric = !getEX().equals(getVar()); try { varmin = VarMin.getValue(); varmax = VarMax.getValue(); dvar = DVar.getValue(); if (varmin > varmax) { final double h = varmin; varmin = varmax; varmax = h; reverse = true; } if (dvar < 0) { dvar = -dvar; } if (dvar == 0) { dvar = (varmax - varmin) / 100; } else if (dvar < (varmax - varmin) / 1000) { dvar = (varmax - varmin) / 1000; } } catch (final Exception e) { Valid = false; return 0; } X[0] = varmin; double x0 = 0, y0 = 0; boolean started = false; double sum = 0; while (true) { try { final double x1 = EX.getValue(); final double y1 = EY.getValue(); if (parametric) { double x = 0, y = 0; if (getCenter() != null) { x = getCenter().getX(); y = getCenter().getY(); } if (started) { sum += ((x0 - x) * (y1 - y) - (y0 - y) * (x1 - x)) / 2; } } else { if (started) { if (Special) { if (reverse) { sum += (x1 - x0) * y1; } else { sum += (x1 - x0) * y0; } } else { sum += (x1 - x0) * (y0 + y1) / 2; } } } x0 = x1; y0 = y1; started = true; } catch (final Exception e) { } if (X[0] >= varmax) { break; } X[0] = X[0] + dvar; if (X[0] > varmax) { X[0] = varmax; } } return sum; } public double getLength() { double varmin, varmax, dvar; try { varmin = VarMin.getValue(); varmax = VarMax.getValue(); dvar = DVar.getValue(); if (varmin > varmax) { final double h = varmin; varmin = varmax; varmax = h; } if (dvar < 0) { dvar = -dvar; } if (dvar == 0) { dvar = (varmax - varmin) / 100; } else if (dvar < (varmax - varmin) / 1000) { dvar = (varmax - varmin) / 1000; } } catch (final Exception e) { Valid = false; return 0; } X[0] = varmin; double x0 = 0, y0 = 0; boolean started = false; double sum = 0; while (true) { try { final double x1 = EX.getValue(); final double y1 = EY.getValue(); if (started) { sum += Math.sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0)); } started = true; x0 = x1; y0 = y1; } catch (final Exception e) { } if (X[0] >= varmax) { break; } X[0] = X[0] + dvar; if (X[0] > varmax) { X[0] = varmax; } } return sum; } @Override public boolean isSpecial() { return Special; } @Override public void setSpecial(final boolean f) { Special = f; } public void project(final PointObject P, final double alpha) { project(P); } @Override public boolean maybeTransparent() { return true; } @Override public boolean canDisplayName() { return false; } public void setCenter(final String s) { if (Cn == null) { return; } Center = new Expression("@\"" + s + "\"", Cn, this); } @Override public boolean isFilledForSelect() { return false; } public PointObject getCenter() { try { return (PointObject) Center.getObject(); } catch (final Exception e) { return null; } } public String getVar() { String vars = Var[0]; for (int i = 1; i < Var.length; i++) { vars = vars + " " + Var[i]; } return vars; } public boolean canInteresectWith(final ConstructionObject o) { return true; } @Override public boolean isDriverObject() { return true; } public boolean somethingChanged() { boolean b = !EX.toString().equals(LASTEX); b = b || !EY.toString().equals(LASTEY); return b; } public void clearChanges() { LASTEX = EX.toString(); LASTEY = EY.toString(); } public void repulse(final PointObject P) { project(P); } } ./src/rene/zirkel/objects/CVS/RevisionCache/PointonObject.java#1.30000644000175000017500000000167511172711430023512 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; public interface PointonObject { public void repulse(PointObject P); public void project(PointObject P); public void project(PointObject P, double alpha); public boolean canInteresectWith(ConstructionObject o); } ./src/rene/zirkel/objects/CVS/RevisionCache/AxisFunctionIntersectionObject.java#1.40000644000175000017500000000540411314640400027054 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: LineCircleIntersectionObject.java import rene.util.xml.XmlWriter; import rene.zirkel.construction.Construction; public class AxisFunctionIntersectionObject extends IntersectionObject { public AxisFunctionIntersectionObject(final Construction c, final AxisObject P1, final FunctionObject P2, final boolean first) { super(c, P1, P2); First = first; validate(); } // public void updateCircleDep () // { ((QuadricObject)P2).addDep(this); // ((PrimitiveLineObject)P1).addDep(this); // } // public void validate () // { boolean oldvalid=Valid; // if (!P1.valid() || !P2.valid()) Valid=false; // else Valid=true; // if (!Valid) return; // // Coordinates c=AxisObject.intersect( // (PrimitiveLineObject)P1,(FunctionObject)P2); // // if (c==null) // { if (oldvalid && getConstruction().shouldSwitch()) // { doSwitch(); // if (!getConstruction().noteSwitch()) Switched=false; // } // else if (oldvalid && Alternate && Away==null && // getConstruction().canAlternate()) // { First=!First; // } // Valid=false; return; // } // double X1,Y1; // if (getAway()!=null) // { double x=getAway().getX(),y=getAway().getY(); // double r=(x-c.X)*(x-c.X)+(y-c.Y)*(y-c.Y); // double r1=(x-c.X1)*(x-c.X1)+(y-c.Y1)*(y-c.Y1); // boolean flag=(r>r1); // if (!StayAway) flag=!flag; // if (flag) // { // setXY(c.X,c.Y); // X1=c.X1; Y1=c.Y1; // } // else // { // setXY(c.X1,c.Y1); // X1=c.X; Y1=c.Y; // } // } // else // { if (First) { setXY(c.X,c.Y); X1=c.X1; Y1=c.Y1; } // else { setXY(c.X1,c.Y1); X1=c.X; Y1=c.Y; } // } // if (Restricted) // { // // if (!((PrimitiveLineObject)P1).contains(X,Y)) { // if (!((PrimitiveLineObject)P1).contains(X1,Y1)){ // Valid=false; // }else{ // setXY(X1,Y1); // } // // } // // // } // } @Override public void printArgs(final XmlWriter xml) { super.printArgs(xml); if (First) xml.printArg("which", "first"); else xml.printArg("which", "second"); } @Override public boolean isSwitchable() { return true; } @Override public boolean canAlternate() { return true; } } ./src/rene/zirkel/objects/CVS/RevisionCache/FixedAngleObject.java#1.50000644000175000017500000005164011302741206024070 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; import java.awt.Button; import java.awt.Checkbox; import java.awt.Color; import java.awt.Frame; import java.awt.TextField; import java.awt.event.FocusEvent; import java.util.Enumeration; import javax.swing.JPanel; import rene.dialogs.Warning; import rene.gui.ButtonAction; import rene.gui.Global; import rene.gui.IconBar; import rene.gui.MyLabel; import rene.gui.TextFieldAction; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.construction.Count; import rene.zirkel.dialogs.EditConditionals; import rene.zirkel.dialogs.ObjectEditDialog; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import eric.JGlobals; class FixedAngleEditDialog extends ObjectEditDialog { /** * */ private static final long serialVersionUID = 1L; TextField Length; Checkbox Fixed; IconBar SizeIB; ZirkelCanvas ZC; Button SetButton; public FixedAngleEditDialog(final Frame f, final FixedAngleObject o, final ZirkelCanvas zc) { super(f, Zirkel.name("edit.angle.title"), o, "fixedangle"); ZC = zc; } @Override public void addFirst(final JPanel P) { final FixedAngleObject o = (FixedAngleObject) O; Length = new TextFieldAction(this, "Length", o.getE()); P.add(new MyLabel(Zirkel.name("edit.angle.length"))); P.add(Length); Fixed = new Checkbox(""); Fixed.setState(!o.isDragable()); P.add(new MyLabel(Zirkel.name("edit.fixed"))); P.add(Fixed); } @Override public void doAction(final String o) { if (o.equals("Length") && Fixed != null) { Fixed.setState(true); super.doAction("OK"); } else if (o.equals("Set")) { ZC.set((FixedAngleObject) O); super.doAction("OK"); } else { super.doAction(o); } } @Override public void addSecond(final JPanel P) { final FixedAngleObject p = (FixedAngleObject) O; SizeIB = new IconBar(F); SizeIB.addToggleGroupLeft("angle", 5); SizeIB.toggle("angle", p.getDisplaySize()); SizeIB.addOnOffLeft("filled"); SizeIB.setState("filled", p.isFilled()); SizeIB.addOnOffLeft("obtuse"); SizeIB.setState("obtuse", p.getObtuse()); SizeIB.addOnOffLeft("inverse"); SizeIB.setState("inverse", p.getInverse()); SizeIB.addOnOffLeft("anglereduce"); SizeIB.setState("anglereduce", p.isReduced()); P.add(new MyLabel("")); P.add(SizeIB); SizeIB.setIconBarListener(this); } @Override public void addButton(final JPanel P) { SetButton = new ButtonAction(this, Zirkel.name("edit.fixedangle.set"), "Set"); P.add(SetButton); } @Override public void iconPressed(final String o) { if (o.equals("filled")) { if (SizeIB.getState("filled")) { IB.setState("isback", true); } } super.iconPressed(o); } @Override public void setAction() { final FixedAngleObject o = (FixedAngleObject) O; o.setObtuse(SizeIB.getState("obtuse")); o.setInverse(SizeIB.getState("inverse")); o.setReduced(SizeIB.getState("anglereduce")); o.setEditFixed(Length.getText()); o.setDisplaySize(SizeIB.getToggleState("angle")); o.setFilled(SizeIB.getState("filled")); o.setDragable(!Fixed.getState()); } @Override public void focusGained(final FocusEvent e) { if (Fixed != null && Fixed.getState()) { Length.requestFocus(); } else { super.focusGained(e); } } } public class FixedAngleObject extends PrimitiveLineObject implements MoveableObject, SimulationObject, InsideObject { protected PointObject P2; static Count N = new Count(); double A, A1, A2, AA; Expression E; boolean Filled = false; boolean Inverse = false; boolean EditAborted = false; boolean Dragable = false; boolean Reduced = false; public static final int NORMALSIZE = 1, SMALL = 0, LARGER = 2, LARGE = 3, RECT = 4; protected int DisplaySize = NORMALSIZE; public FixedAngleObject(final Construction c, final PointObject p1, final PointObject p2, final double x, final double y) { super(c); P1 = p1; P2 = p2; init(c, x, y); Unit = Global.getParameter("unit.angle", "°"); } @Override public void setDefaults() { setShowName(Global.getParameter("options.angle.shownames", false)); setShowValue(Global.getParameter("options.angle.showvalues", false)); setColor(Global.getParameter("options.angle.color", 0), Global .getParameter("options.angle.pcolor", (Color) null)); setColorType(Global.getParameter("options.angle.colortype", 0)); setFilled(Global.getParameter("options.angle.filled", false)); setHidden(Cn.Hidden); setObtuse(Global.getParameter("options.angle.obtuse", false)); setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); setPartial(Cn.Partial); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.angle.shownames", false)); setShowValue(Global.getParameter("options.angle.showvalues", false)); setColor(Global.getParameter("options.angle.color", 0), Global .getParameter("options.angle.pcolor", (Color) null)); setColorType(Global.getParameter("options.angle.colortype", 0)); setFilled(Global.getParameter("options.angle.filled", false)); setObtuse(Global.getParameter("options.angle.obtuse", false)); } public void init(final Construction c, final double x, final double y, final boolean invert) { double dx = P1.getX() - P2.getX(), dy = P1.getY() - P2.getY(); A1 = Math.atan2(dy, dx); dx = x - P2.getX(); dy = y - P2.getY(); A2 = Math.atan2(dy, dx); A = A2 - A1; if (A < 0) { A += 2 * Math.PI; } else if (A > 2 * Math.PI) { A -= 2 * Math.PI; } if (Inverse && Obtuse) { A = 2 * Math.PI - A; } if (invert && !Obtuse) { if (A > Math.PI) { A = 2 * Math.PI - A; Inverse = true; } else { Inverse = false; } } E = new Expression("" + round(A / Math.PI * 180, ZirkelCanvas.EditFactor), c, this); validate(); setColor(ColorIndex, SpecialColor); updateText(); } public void init(final Construction c, final double x, final double y) { init(c, x, y, true); } double xx[] = new double[4], yy[] = new double[4]; @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) { return; } // compute middle of the screen: final double xm = (zc.minX() + zc.maxX()) / 2, ym = (zc.minY() + zc .maxY()) / 2; // compute distance from middle to line: final double d = (xm - X1) * DY - (ym - Y1) * DX; // compute point with minimal distance final double x = xm - d * DY, y = ym + d * DX; // compute size of the screen final double a = Math.max(zc.maxX() - zc.minX(), zc.maxY() - zc.minY()); if (Math.abs(d) > a) { return; } // compute distance from closest point to source final double b = (x - X1) * DX + (y - Y1) * DY; // compute the two visible endpoints double k1 = b - a; final double k2 = b + a; if (k1 < 0) { k1 = 0; } if (k1 >= k2) { return; } double c1 = zc.col(X1 + k1 * DX); final double c2 = zc.col(X1 + k2 * DX); double r1 = zc.row(Y1 + k1 * DY); final double r2 = zc.row(Y1 + k2 * DY); // paint: g.setColor(this); if (!Reduced) { g.drawLine(c1, r1, c2, r2, this); } final double R = zc.col(getDisplaySize(zc)) - zc.col(0); c1 = zc.col(X1) - R; r1 = zc.row(Y1) - R; final String s = AngleObject.translateToUnicode(getDisplayText()); double DA = (A / Math.PI * 180); if (DA < 0) { DA += 360; } else if (DA >= 360) { DA -= 360; } if (isStrongSelected() && g instanceof MyGraphics13) { ((MyGraphics13) g).drawMarkerArc(c1 + R, r1 + R, R, A1 / Math.PI * 180, DA); } g.setColor(this); if (Filled) { if (Math.abs(DA - 90) < 0.0000001) { final double dx1 = Math.cos(A1), dy1 = Math.sin(A1), dx2 = Math .cos(A1 + DA / 180 * Math.PI), dy2 = Math.sin(A1 + DA / 180 * Math.PI); final double dx3 = dx1 + dx2, dy3 = dy1 + dy2; xx[0] = c1; yy[0] = r1; xx[0] = c1 + R; yy[0] = r1 + R; xx[1] = c1 + R + R * dx1; yy[1] = r1 + R - R * dy1; xx[2] = c1 + R + R * dx3; yy[2] = r1 + R - R * dy3; xx[3] = c1 + R + R * dx2; yy[3] = r1 + R - R * dy2; g.fillPolygon(xx, yy, 4, false, getColorType() != THICK, this); g.setColor(this); g.drawLine(xx[1], yy[1], xx[2], yy[2]); g.drawLine(xx[2], yy[2], xx[3], yy[3]); } else { g.fillArc(c1, r1, 2 * R + 1, 2 * R + 1, A1 / Math.PI * 180, DA, Selected || getColorType() == NORMAL, getColorType() != THICK, true, this); } } else { if (DisplaySize == RECT) { final double dx1 = Math.cos(A1), dy1 = Math.sin(A1), dx2 = Math .cos(A1 + DA / 180 * Math.PI), dy2 = Math.sin(A1 + DA / 180 * Math.PI); g.drawLine(c1 + R + R * dx1, r1 + R - R * dy1, c1 + R + R * (dx1 + dx2), r1 + R - R * (dy1 + dy2)); g.drawLine(c1 + R + R * (dx1 + dx2), r1 + R - R * (dy1 + dy2), c1 + R + R * dx2, r1 + R - R * dy2); } else { if (Math.abs(DA - 90) < 0.0000001) { final double dx1 = Math.cos(A1), dy1 = Math.sin(A1), dx2 = Math .cos(A1 + DA / 180 * Math.PI), dy2 = Math.sin(A1 + DA / 180 * Math.PI); final double dx3 = dx1 + dx2, dy3 = dy1 + dy2; xx[1] = c1 + R + R * dx1; yy[1] = r1 + R - R * dy1; xx[2] = c1 + R + R * dx3; yy[2] = r1 + R - R * dy3; xx[3] = c1 + R + R * dx2; yy[3] = r1 + R - R * dy2; g.setColor(this); g.drawLine(xx[1], yy[1], xx[2], yy[2]); g.drawLine(xx[2], yy[2], xx[3], yy[3]); } else { g.drawCircleArc(c1 + R, r1 + R, R, A1 / Math.PI * 180, DA, this); } } } if (!s.equals("")) { g.setLabelColor(this); setFont(g); DisplaysText = true; final double dx = Math.cos(A1 + A / 2), dy = Math.sin(A1 + A / 2); // if (s.equals("90"+getUnit())||Name.startsWith(".")) { // if (KeepClose) { // double dof=Math.sqrt(XcOffset*XcOffset+YcOffset*YcOffset); // TX1=zc.col(X1+dof*dx)-3; // TY1=zc.row(Y1+dof*dy)-3; // TX2=TX1+9; // TY2=TY1+9; // g.drawRect(zc.col(X1+dof*dx)-1, // zc.row(Y1+dof*dy)-1, 3, 3); // } else { // TX1=zc.col(X1+zc.dx(R*AngleObject.LabelScale)*dx+XcOffset)-3; // TY1=zc.row(Y1+zc.dy(R*AngleObject.LabelScale)*dy+YcOffset)-3; // TX2=TX1+9; // TY2=TY1+9; // g.drawRect(zc.col(X1+zc.dx(R*AngleObject.LabelScale)*dx+XcOffset)-1, // zc.row(Y1+zc.dy(R*AngleObject.LabelScale)*dy+YcOffset)-1, 3, 3); // } // } else { if (KeepClose) { final double dof = Math.sqrt(XcOffset * XcOffset + YcOffset * YcOffset); drawCenteredLabel(g, s, zc, X1 + dof * dx, Y1 + dof * dy, 0, 0); } else { drawCenteredLabel(g, s, zc, X1 + zc.dx(R * AngleObject.LabelScale) * dx, Y1 + zc.dy(R * AngleObject.LabelScale) * dy, XcOffset, YcOffset); } // } } } @Override public boolean canKeepClose() { return true; } @Override public void setKeepClose(final double x, final double y) { KeepClose = true; XcOffset = x - X1; YcOffset = y - Y1; } double getDisplaySize(final ZirkelCanvas zc) { double R = zc.dx((int) (12 * zc.pointSize())); if (DisplaySize == SMALL || DisplaySize == RECT) { R /= 2; } else if (DisplaySize == LARGER) { R *= 2; } else if (DisplaySize == LARGE) { final double dx = P1.getX() - X1, dy = P1.getY() - Y1; R = Math.sqrt(dx * dx + dy * dy); } return R; } @Override public String getTag() { return "Angle"; } @Override public int getN() { return N.next(); } @Override public void updateText() { if (E == null || !E.isValid()) { return; } setText(text3(Zirkel.name("text.fixedangle"), P1.getName(), P2 .getName(), E.toString())); } @Override public String getDisplayValue() { return JGlobals.getLocaleNumber(A / Math.PI * 180, "angles"); } // public String getDisplayValue() { // if (ZirkelCanvas.AnglesFactor<=2) { // return ""+(int) (A/Math.PI*180+0.5); // } else { // return ""+round(A/Math.PI*180, ZirkelCanvas.AnglesFactor); // } // } @Override public void validate() { if (!P1.valid() || !P2.valid()) { Valid = false; return; } else { X1 = P2.getX(); Y1 = P2.getY(); final double dx = P1.getX() - X1, dy = P1.getY() - Y1; if (Math.sqrt(dx * dx + dy * dy) < 1e-9) { Valid = false; return; } A1 = Math.atan2(dy, dx); boolean Negative = false; try { if (E != null && E.isValid()) { A = E.getValue() / 180 * Math.PI; } if (Obtuse) { if (Inverse) { A = -A; } } else { if (Inverse && Math.sin(A) > 0) { A = -A; } if (!Inverse && Math.sin(A) < 0) { A = -A; } } if (A < 0) { Negative = true; } while (A < 0) { A = A + 2 * Math.PI; } while (A >= 2 * Math.PI) { A = A - 2 * Math.PI; } A2 = A1 + A; DX = Math.cos(A2); DY = Math.sin(A2); AA = A; } catch (final Exception e) { Valid = false; return; } if (!Obtuse && A > Math.PI) { A1 = A2; A = 2 * Math.PI - A; A2 = A1 + A; } else if (Obtuse && Negative) { A1 = A2; A = 2 * Math.PI - A; A2 = A1 + A; } Valid = true; } } public double getLength() { return A; } @Override public void setFixed(final String s) { E = new Expression(s, getConstruction(), this); updateText(); } @Override public void round() { try { setFixed(round(E.getValue(), ZirkelCanvas.AnglesFactor) + ""); validate(); } catch (final Exception e) { } } public void setEditFixed(final String s) { E = new Expression(s, getConstruction(), this); updateText(); } @Override public boolean canFix() { return true; } @Override public void printArgs(final XmlWriter xml) { xml.printArg("first", P1.getName()); xml.printArg("root", P2.getName()); if (DisplaySize == SMALL) { xml.printArg("display", "small"); } if (DisplaySize == LARGE) { xml.printArg("display", "large"); } if (DisplaySize == LARGER) { xml.printArg("display", "larger"); } if (DisplaySize == RECT) { xml.printArg("display", "rectangle"); } if (Filled) { xml.printArg("filled", "true"); } if (E.isValid()) { xml.printArg("fixed", E.toString()); } else { xml.printArg("fixed", "" + A / Math.PI * 180); } if (!Obtuse) { xml.printArg("acute", "true"); } if (Inverse) { xml.printArg("inverse", "true"); } if (Reduced) { xml.printArg("reduced", "true"); } if (Dragable) { xml.printArg("dragable", "true"); } super.printArgs(xml); } @Override public void edit(final ZirkelCanvas zc) { ObjectEditDialog d; if (!rene.zirkel.Zirkel.IsApplet) { eric.JGlobals.EditObject(this); return; } while (true) { d = new FixedAngleEditDialog(zc.getFrame(), this, zc); d.setVisible(true); zc.repaint(); EditAborted = false; if (d.isAborted()) { EditAborted = true; break; } else if (E != null && !E.isValid()) { final Frame F = zc.getFrame(); final Warning w = new Warning(F, E.getErrorText(), Zirkel .name("warning"), true); w.center(F); w.setVisible(true); } else { break; } } if (d.wantsMore()) { new EditConditionals(zc.getFrame(), this); validate(); } } @Override public boolean nearto(final int c, final int r, final ZirkelCanvas zc) { if (!Valid && P2.valid()) { return P2.nearto(c, r, zc); } if (!displays(zc)) { return false; } // compute point at c,r final double x = zc.x(c), y = zc.y(r); // compute distance from x,y final double d = (x - X1) * DY - (y - Y1) * DX; final double e = (x - X1) * DX + (y - Y1) * DY; // scale in screen coordinates Value = Math.abs(zc.col(zc.minX() + d) - zc.col(zc.minX())); if (!Reduced && Value < zc.selectionSize() && e > 0) { return true; } final double dx = zc.x(c) - X1, dy = zc.y(r) - Y1; final double size = zc.dx((int) zc.selectionSize()); final double rd = getDisplaySize(zc); final double rr = Math.sqrt(dx * dx + dy * dy); boolean near; if (Filled || DisplaySize == RECT) { near = (rr < rd + size); } else { near = (Math.abs(rr - rd) < size); } if (!near) { return false; } if (rd < size) { return near; } double a = Math.atan2(dy, dx); if (a < 0) { a += 2 * Math.PI; } final double cc = 0.05; if (A1 - cc < a && A2 + cc > a) { return true; } a = a - 2 * Math.PI; if (A1 - cc < a && A2 + cc > a) { return true; } a = a + 4 * Math.PI; if (A1 - cc < a && A2 + cc > a) { return true; } return false; } @Override public void setDisplaySize(final int i) { DisplaySize = i; } @Override public int getDisplaySize() { return DisplaySize; } @Override public Enumeration depending() { super.depending(); depset(P1, P2); final Enumeration e = E.getDepList().elements(); while (e.hasMoreElements()) { DL.add((ConstructionObject) e.nextElement()); } return DL.elements(); } @Override public void translate() { P1 = (PointObject) P1.getTranslation(); P2 = (PointObject) P2.getTranslation(); try { setFixed(E.toString()); E.translate(); } catch (final Exception e) { } } @Override public String getE() { return E.toString(); } @Override public double getValue() throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } else { return A / Math.PI * 180; } } @Override public void setFilled(final boolean flag) { Filled = flag; } @Override public boolean isFilled() { return Filled; } @Override public boolean isFilledForSelect() { return false; } @Override public boolean contains(final double x, final double y) { final double a = (x - X1) * DX + (y - Y1) * DY; if (a < 1e-9) { return false; } return true; } @Override public double project(final double x, final double y) { final double h = super.project(x, y); if (h < 0) { return 0; } return h; } @Override public Enumeration points() { super.depending(); return depset(P2); } @Override public void move(final double x, final double y) { init(getConstruction(), x, y, true); } public boolean moveable() { return Dragable; // E.isNumber(); } @Override public boolean isFixed() { return true; } public boolean getInverse() { return Inverse; } public void setInverse(final boolean inverse) { Inverse = inverse; } public boolean isEditAborted() { return EditAborted; } @Override public boolean isDragable() { return Dragable; } @Override public void setDragable(final boolean f) { Dragable = f; } public boolean isReduced() { return Reduced; } public void setReduced(final boolean f) { Reduced = f; } public boolean fixedByNumber() { return (E != null && E.isNumber()); } // For the simulate function: /** * Set the simulation value, remember the old value. */ public void setSimulationValue(final double x) { A = x / 180 * Math.PI; final Expression OldE = E; E = null; validate(); E = OldE; } /** * Reset the old value. */ public void resetSimulationValue() { validate(); } public void startDrag(final double x, final double y) { } public void dragTo(final double x, final double y) { move(x, y); } public double getOldX() { return 0; } public double getOldY() { return 0; } public double containsInside(final PointObject P) { final double dx = P.getX() - X1, dy = P.getY() - Y1; double a = Math.atan2(dy, dx); if (a < A1) { a += 2 * Math.PI; } final double c = 1e-5; if (a > A1 && a < A1 + A) { return 1; } else if (a > A1 - c && a < A1 + A + c) { return 0.5; } return 0; } public boolean keepInside(final PointObject P) { if (containsInside(P) > 0) { return true; } final double x = P.getX(), y = P.getY(); final double x1 = X1, y1 = Y1; double xmin = x1, ymin = y1, dmin = 1e20; double x2 = X1 + Math.cos(A1), y2 = Y1 + Math.sin(A1); double dx = x2 - x1, dy = y2 - y1; double r = dx * dx + dy * dy; double h = dx * (x - x1) / r + dy * (y - y1) / r; if (h < 0) { h = 0; } double xh = x1 + h * dx, yh = y1 + h * dy; double dist = Math.sqrt((x - xh) * (x - xh) + (y - yh) * (y - yh)); if (dist < dmin) { dmin = dist; xmin = xh; ymin = yh; } x2 = X1 + Math.cos(A2); y2 = Y1 + Math.sin(A2); dx = x2 - x1; dy = y2 - y1; r = dx * dx + dy * dy; h = dx * (x - x1) / r + dy * (y - y1) / r; if (h < 0) { h = 0; } xh = x1 + h * dx; yh = y1 + h * dy; dist = Math.sqrt((x - xh) * (x - xh) + (y - yh) * (y - yh)); if (dist < dmin) { dmin = dist; xmin = xh; ymin = yh; } P.move(xmin, ymin); return false; } } ./src/rene/zirkel/objects/CVS/RevisionCache/ImageObject.java#1.30000644000175000017500000001021211314624363023077 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; import java.awt.Image; import java.util.Enumeration; import rene.util.FileName; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.Count; import rene.zirkel.dialogs.ObjectEditDialog; import rene.zirkel.graphics.MyGraphics; public class ImageObject extends ConstructionObject { PointObject P[]; static Count N = new Count(); String Filename; Image I; public ImageObject(final Construction c, final PointObject p[], final String filename) { super(c); P = p; Filename = FileName.filename(filename); updateText(); } @Override public String getTag() { return "Image"; } @Override public int getN() { return N.next(); } @Override public void updateText() { try { final String Names[] = new String[P.length]; for (int i = 0; i < P.length; i++) Names[i] = P[i].getName(); setText(textAny(Zirkel.name("text.image"), Names)); } catch (final Exception e) { } } @Override public void validate() { } @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) return; if (I == null) { I = zc.doLoadImage(Filename); if (I == null || I.getWidth(zc) == 0 || I.getHeight(zc) == 0) { Valid = false; return; } else Valid = true; } if (P[1] == P[2] || P[0] == P[2]) { I.getWidth(zc); final double dx = P[1].getX() - P[0].getX(), dy = P[1].getY() - P[0].getY(); g.drawImage(I, zc.col(P[0].getX()), zc.row(P[0].getY()), zc .col(P[1].getX()), zc.row(P[1].getY()), zc.col(P[0].getX() + dy), zc.row(P[0].getY() - dx), zc); } g.drawImage(I, zc.col(P[0].getX()), zc.row(P[0].getY()), zc.col(P[1] .getX()), zc.row(P[1].getY()), zc.col(P[2].getX()), zc.row(P[2] .getY()), zc); } @Override public boolean nearto(final int cc, final int rr, final ZirkelCanvas zc) { if (!displays(zc)) return false; return P[0].nearto(cc, rr, zc) || P[1].nearto(cc, rr, zc) || P[2].nearto(cc, rr, zc); } @Override public void edit(final ZirkelCanvas zc) { new ObjectEditDialog(zc.getFrame(), "", this).setVisible(true); zc.repaint(); } @Override public void printArgs(final XmlWriter xml) { for (int i = 0; i < P.length; i++) xml.printArg("point" + (i + 1), P[i].getName()); xml.printArg("filename", FileName.filename(Filename)); } @Override public Enumeration depending() { DL.reset(); for (final PointObject element : P) DL.add(element); return DL.elements(); } @Override public void translate() { for (int i = 0; i < P.length; i++) P[i] = (PointObject) P[i].getTranslation(); } @Override public ConstructionObject copy(final double x, final double y) { try { final QuadricObject o = (QuadricObject) clone(); setTranslation(o); o.P = new PointObject[P.length]; for (int i = 0; i < P.length; i++) o.P[i] = P[i]; o.translateConditionals(); o.translate(); o.setName(); o.updateText(); o.setBreak(false); o.setTarget(false); return o; } catch (final Exception e) { return null; } } @Override public boolean onlynearto(final int x, final int y, final ZirkelCanvas zc) { return nearto(x, y, zc); } @Override public boolean hasUnit() { return false; } } ./src/rene/zirkel/objects/CVS/RevisionCache/PointObject.java#1.80000644000175000017500000013154311301763206023162 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: PointObject.java import java.awt.Button; import java.awt.Checkbox; import java.awt.Color; import java.awt.Frame; import java.awt.GridLayout; import java.awt.event.FocusEvent; import java.util.Enumeration; import java.util.Vector; import javax.swing.JPanel; import rene.dialogs.Warning; import rene.gui.ButtonAction; import rene.gui.CheckboxAction; import rene.gui.Global; import rene.gui.IconBar; import rene.gui.MyLabel; import rene.gui.MyPanel; import rene.gui.MyTextField; import rene.gui.TextFieldAction; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.dialogs.EditConditionals; import rene.zirkel.dialogs.ObjectEditDialog; import rene.zirkel.expression.Expression; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.structures.MagnetObj; import eric.JGlobals; import eric.JPointName; class PointEditDialog extends ObjectEditDialog { /** * */ private static final long serialVersionUID=1L; TextFieldAction X, Y; MyTextField Away, Bound, Increment; Checkbox Fixed, Close, Restricted, Alternate, Inside; IconBar TypeIB; ZirkelCanvas ZC; public PointEditDialog(final Frame f, final PointObject o) { super(f, Zirkel.name("edit.point.title"), o); } public PointEditDialog(final ZirkelCanvas zc, final PointObject o) { this(zc.getFrame(), o); ZC=zc; } @Override public void addFirst(final JPanel P) { final PointObject p=(PointObject) O; X=new TextFieldAction(this, "X", ""+p.round(p.getX()), 30); P.add(new MyLabel(Zirkel.name("edit.point.x"))); P.add(X); Y=new TextFieldAction(this, "Y", ""+p.round(p.getY()), 30); P.add(new MyLabel(Zirkel.name("edit.point.y"))); P.add(Y); if (p.moveablePoint()) { Fixed=new Checkbox(""); Fixed.setState(p.fixed()); P.add(new MyLabel(Zirkel.name("edit.fixed"))); P.add(Fixed); if (p.fixed()) { X.setText(p.getEX()); Y.setText(p.getEY()); } P.add(new MyLabel(Zirkel.name("edit.point.increment"))); P.add(Increment=new MyTextField(""+p.round(p.getIncrement()))); } else { X.setEditable(false); Y.setEditable(false); } if ((p instanceof IntersectionObject&&((IntersectionObject) p).isSwitchable())) { Away=new MyTextField("", 5); Away.setText(((IntersectionObject) p).away()); Close=new CheckboxAction(this, Zirkel.name("edit.point.close")); Close.setState(!((IntersectionObject) p).stayAway()); P.add(new MyLabel(Zirkel.name("edit.point.intersection"))); final JPanel ap=new MyPanel(); ap.setLayout(new GridLayout(1, 2)); ap.add(Away); ap.add(Close); P.add(ap); } if (p instanceof IntersectionObject) { P.add(new MyLabel(Zirkel.name("edit.plumb.restricted"))); Restricted=new CheckboxAction(this, "", "Restricted"); Restricted.setState(((IntersectionObject) p).isRestricted()); P.add(Restricted); if (((IntersectionObject) p).canAlternate()) { P.add(new MyLabel(Zirkel.name("edit.intersection.alternate"))); Alternate=new CheckboxAction(this, "", "Alternate"); Alternate.setState(((IntersectionObject) p).isAlternate()); P.add(Alternate); } } if (p.isPointOn()) { P.add(new MyLabel(Zirkel.name("edit.point.bound"))); P.add(Bound=new MyTextField(p.getBound().getName())); Bound.setEditable(false); if (p.getBound() instanceof InsideObject) { P.add(new MyLabel(Zirkel.name("edit.point.inside"))); P.add(Inside=new CheckboxAction(this, "", "Inside")); Inside.setState(p.isInside()); } if (Fixed!=null) { Fixed.setState(p.useAlpha()); } } } Button BoundButton; @Override public void addButton(final JPanel P) { final PointObject p=(PointObject) O; if (p.moveablePoint()) { if (p.isPointOn()) { BoundButton=new ButtonAction(this, Zirkel.name("bound.release"), "Release"); } else { BoundButton=new ButtonAction(this, Zirkel.name("bound.bind"), "Bind"); } P.add(BoundButton); P.add(new MyLabel(" ")); } else if (p instanceof IntersectionObject&&((IntersectionObject) p).isSwitchable()) { P.add(new ButtonAction(this, Zirkel.name("edit.point.away"), "SetAway")); P.add(new ButtonAction(this, Zirkel.name("edit.point.close"), "SetClose")); if (!((IntersectionObject) p).away().equals("")) { P.add(new ButtonAction(this, Zirkel.name("edit.point.free"), "SetFree")); } P.add(new MyLabel(" ")); } } @Override public void addSecond(final JPanel P) { final PointObject p=(PointObject) O; TypeIB=new IconBar(F); TypeIB.addToggleGroupLeft("type", 6); TypeIB.toggle("type", p.getType()); P.add(new MyLabel("")); P.add(TypeIB); } @Override public void doAction(final String o) { if ((o.equals("Y")||o.equals("X"))&&Fixed!=null) { Fixed.setState(true); super.doAction("OK"); } else if (o.equals("Release")) { ((PointObject) O).setBound(""); O.getConstruction().updateCircleDep(); if (Fixed!=null) { Fixed.setState(false); } super.doAction("OK"); } else if (o.equals("Bind")) { ZC.bind((PointObject) O); super.doAction("OK"); } else if (o.equals("SetAway")) { ZC.setAway((IntersectionObject) O, true); super.doAction("OK"); } else if (o.equals("SetClose")) { ZC.setAway((IntersectionObject) O, false); super.doAction("OK"); } else if (o.equals("SetFree")) { ((IntersectionObject) O).setAway(""); Away=null; super.doAction("OK"); } else if (o.equals("OK")) { if (Fixed!=null&&X.isChanged()||Y.isChanged()) { Fixed.setState(true); } super.doAction("OK"); } else { super.doAction(o); } } @Override public void setAction() { final PointObject p=(PointObject) O; if ((X.isChanged()||Y.isChanged())&&p.isPointOn()) { try { final double x=new Expression(X.getText(), p.getConstruction(), p).getValue(); final double y=new Expression(Y.getText(), p.getConstruction(), p).getValue(); p.move(x, y); p.validate(); } catch (final Exception e) { } } if (Fixed!=null&&Fixed.getState()==true) { if (p.isPointOn()) { p.setUseAlpha(true); } else { p.setFixed(X.getText(), Y.getText()); } } else { try { final double x=new Expression(X.getText(), p.getConstruction(), p).getValue(); final double y=new Expression(Y.getText(), p.getConstruction(), p).getValue(); if (p.moveable()) { p.move(x, y); } } catch (final Exception e) { } } if (Fixed!=null&&Fixed.getState()==false) { if (p.isPointOn()) { p.setUseAlpha(false); } else { p.setFixed(false); } } if (Away!=null) { if (!((IntersectionObject) p).setAway(Away.getText(), !Close.getState())) { final Warning w=new Warning(F, Zirkel.name("bound.error"), Zirkel.name("warning")); w.center(F); w.setVisible(true); } } if (Restricted!=null) { ((IntersectionObject) p).setRestricted(Restricted.getState()); } if (Alternate!=null) { ((IntersectionObject) p).setAlternate(Alternate.getState()); } if (Increment!=null) { try { p.setIncrement(new Expression(Increment.getText(), p.getConstruction(), p).getValue()); } catch (final Exception e) { } } p.setType(TypeIB.getToggleState("type")); if (Inside!=null) { p.setInside(Inside.getState()); } } @Override public void focusGained(final FocusEvent e) { if (Fixed!=null&&Fixed.getState()) { X.requestFocus(); } else { super.focusGained(e); } } } public class PointObject extends ConstructionObject implements MoveableObject, DriverObject { protected double X, Y; protected boolean BarycentricCoordsInitialzed=false; protected double Gx=0, Gy=0; // Barycentric coords, if it's inside a // polygon. protected double Alpha; // parameter relative zu object protected boolean AlphaValid=false; // Alpha is valid protected boolean UseAlpha=false; // Use Alpha at all protected boolean Moveable, Fixed; // private static Count N=new Count(); private static JPointName PointLabel=new JPointName(); protected int Type=0; public final static int SQUARE=0, DIAMOND=1, CIRCLE=2, DOT=3, CROSS=4, DCROSS=5; public static int MaxType=3; protected Expression EX, EY; // private ConstructionObject Bound=null; // point is on a line etc. private boolean Later; // bound is later in construction private String LaterBind=""; private boolean KeepInside; // keep point inside bound private boolean DontUpdate=false; private double Increment=0; // increment to keep on grid private ConstructionObject Bound=null; // point is on a line etc. private double BoundOrder=Double.NaN; // Only for points on parametric // curves made with "points only" protected ConstructionObject MovedBy; private double LASTX=Double.NaN, LASTY=Double.NaN; private final Vector magnetObjects=new Vector(); Expression magnetRayExp=null; private int CurrentMagnetRay=Integer.MIN_VALUE; private ConstructionObject CurrentMagnetObject=null; public ConstructionObject VirtualBound=null; // The object that may have moved this point public PointObject(final Construction c, final double x, final double y) { super(c); X=x; Y=y; Moveable=true; Fixed=false; setColor(ColorIndex, SpecialColor); setShowName(false); updateText(); Type=0; setMagnetRayExp("20"); } public PointObject(final Construction c, final double x, final double y, final ConstructionObject bound) { this(c, x, y); Bound=bound; } public PointObject(final Construction c, final String name) { super(c, name); X=0; Y=0; Moveable=true; Fixed=false; setColor(ColorIndex, SpecialColor); updateText(); Type=0; setMagnetRayExp("20"); } public static void setPointLabel(final JPointName jpl) { PointLabel=jpl; } @Override public void setName() { if ((!SuperHidden)&&(!Hidden)) { Name=PointLabel.getBetterName(Cn, false); } else { Name=JPointName.getGenericName(Cn); } } @Override public void setNameWithNumber(String n) { Name=""; if (Cn!=null) { ConstructionObject o=Cn.find(n); if (o!=null) { while (o!=null&&o!=this) { Name=JPointName.getGenericName(Cn); n=Name; Name=""; o=Cn.find(n); } Name=n; } else { Name=n; } } else { Name=n; } } @Override public String getTag() { if (Bound==null) { return "Point"; } else { return "PointOn"; } } @Override public int getN() { return N.next(); } // public void setDefaults () // { super.setDefaults(); // Type=Cn.DefaultType; // } @Override public void setDefaults() { setShowName(Global.getParameter("options.point.shownames", false)); setShowValue(Global.getParameter("options.point.showvalues", false)); setColor(Global.getParameter("options.point.color", 0), Global.getParameter("options.point.pcolor", (Color) null)); setColorType(Global.getParameter("options.point.colortype", 0)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Global.getParameter("options.point.large", false)); setBold(Global.getParameter("options.point.bold", false)); Type=Cn.DefaultType; } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.point.shownames", false)); setShowValue(Global.getParameter("options.point.showvalues", false)); setColor(Global.getParameter("options.point.color", 0), Global.getParameter("options.point.pcolor", (Color) null)); setColorType(Global.getParameter("options.point.colortype", 0)); setLarge(Global.getParameter("options.point.large", false)); setBold(Global.getParameter("options.point.bold", false)); Type=Cn.DefaultType; } private double Delta; @Override public double changedBy() { return Delta; } @Override public void validate() { if (DontUpdate) { return; } updateMagnetObjects(); followMagnetObject(); // magnet(); // System.out.println(getName()+" : validate !"); MovedBy=null; Delta=0.0; Valid=true; if (Bound!=null&&!Bound.isInConstruction()) { Bound=null; } if (Bound!=null&&!Bound.valid()) { Valid=false; return; } if (Increment>1e-4) { X=Math.floor(X/Increment+0.5)*Increment; Y=Math.floor(Y/Increment+0.5)*Increment; } if (Bound!=null) { final double x=X, y=Y; if (KeepInside&&Bound instanceof InsideObject) { ((InsideObject) Bound).keepInside(this); } else if (!KeepInside&&Bound instanceof PointonObject) { if (!AlphaValid||!UseAlpha) { project(Bound); } else { project(Bound, Alpha); } } if (Later) { Delta=Math.sqrt((x-X)*(x-X)+(y-Y)*(y-Y)); } } if (Fixed&&EX!=null&&EX.isValid()) { try { X=EX.getValue(); } catch (final Exception e) { Valid=false; return; } } if (Fixed&&EY!=null&&EY.isValid()) { try { Y=EY.getValue(); } catch (final Exception e) { Valid=false; return; } } } @Override public void updateText() { if (Bound!=null) { setText(text1(Zirkel.name("text.boundedpoint"), Bound.getName())); } else if (EX!=null&&EY!=null) { setText(text2(Zirkel.name("text.point"), "\""+EX+"\"", "\""+EY+"\"")); } else { setText(text2(Zirkel.name("text.point"), ""+round(X), ""+round(Y))); } } static double x[]=new double[4], y[]=new double[4]; @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { DisplaysText=false; if (!Valid||mustHide(zc)) { return; } final double size=drawPoint(g, zc, this, X, Y, Type); if (tracked()) { zc.UniversalTrack.drawTrackPoint(this, X, Y, Type); } final String s=AngleObject.translateToUnicode(getDisplayText()); if (!s.equals("")) { g.setLabelColor(this); DisplaysText=true; setFont(g); final double d=Math.sqrt(XcOffset*XcOffset+YcOffset*YcOffset); if (!KeepClose||d<1e-10) { TX1=zc.col(X+XcOffset)+2*size; TY1=zc.row(Y+YcOffset)+2*size; drawLabel(g, s); } else { drawPointLabel(g, s, zc, X, Y, YcOffset/d, -XcOffset/d, 0, 0); } } } static public double drawPoint(final MyGraphics g, final ZirkelCanvas zc, final ConstructionObject o, final double X, final double Y, final int type) { double size=zc.pointSize(); final double r=zc.col(X), c=zc.row(Y); if (size<1) { size=1; } // System.out.println(size); if (o.visible(zc)) { if (o.isStrongSelected()&&g instanceof MyGraphics13) { ((MyGraphics13) g).drawMarkerLine(r, c, r, c); } g.setColor(o); switch (type) { case SQUARE: final double sx=r-size-1, sy=c-size-1, sw=2*size+2; if (o.getColorType()==THICK) { g.fillRect(sx, sy, sw, sw, true, false, o); } else { g.fillRect(sx, sy, sw, sw, new Color(255, 255, 255)); } g.setColor(o); g.drawRect(sx, sy, sw, sw); break; case DIAMOND: final double dx=r-size-2, dy=c-size-2, dw=2*size+4; g.drawDiamond(dx, dy, dw, (o.getColorType()==THICK), o); break; case CIRCLE: final double cx=r-size-1, cy=c-size-1, cw=2*size+2; if (o.getColorType()==THICK) { g.fillOval(cx, cy, cw, cw, true, false, o); } else { g.fillOval(cx, cy, cw, cw, new Color(255, 255, 255)); g.setColor(o); g.drawOval(cx, cy, cw, cw); } break; case DOT: if (o.getColorType()==THICK) { g.fillRect(r, c, 1, 1, true, false, o); } else { g.drawLine(r, c, r, c); } break; case CROSS: if (o.getColorType()==THICK) { g.drawThickLine(r-size, c, r+size, c); g.drawThickLine(r, c-size, r, c+size); } else { g.drawLine(r-size, c, r+size, c); g.drawLine(r, c-size, r, c+size); } break; case DCROSS: final double dcx=r-size-1, dcy=c-size-1, dcw=2*size+1; g.drawDcross(dcx, dcy, dcw, (o.getColorType()==THICK), o); break; } } return size; } @Override public String getDisplayValue() { // return "("+roundDisplay(X)+ // (Global.getParameter("options.germanpoints", // false)?"|":",")+roundDisplay(Y)+")"; return "("+JGlobals.getLocaleNumber(X, "lengths")+(Global.getParameter("options.germanpoints", false)?"|" :";")+JGlobals.getLocaleNumber(Y, "lengths")+")"; } @Override public boolean nearto(final int x, final int y, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } final double c=zc.col(X), r=zc.row(Y); final int size=(int) zc.selectionSize(); Value=Math.abs(x-c)+Math.abs(y-r); return Value<=size*3/2; } public boolean nearto(final PointObject p) { if (!Valid) { return false; } final double dx=p.X-X, dy=p.Y-Y; return Math.sqrt(dx*dx+dy*dy)<1e-9; } public double distanceTo(final int x, final int y, final ZirkelCanvas zc) { final double dx=x-zc.col(X), dy=y-zc.row(Y); return Math.sqrt(dx*dx+dy*dy); } @Override public double getX() { return X; } @Override public double getY() { return Y; } public boolean moveable() { boolean fixed=Fixed; if (dependsOnItselfOnly()) { fixed=false; } return Moveable&&!fixed&&!Keep; } /** * Check if the point depends on itself and no other object. Such points are * moveable, even if they are fixed. * * @return */ public boolean dependsOnItselfOnly() { boolean res=false; Enumeration e=depending(); while (e.hasMoreElements()) { if ((ConstructionObject) e.nextElement()==this) { res=true; break; } } e=depending(); while (e.hasMoreElements()) { if ((ConstructionObject) e.nextElement()!=this) { res=false; break; } } return res; } public boolean dependsOnParametersOnly() { final Enumeration e=depending(); while (e.hasMoreElements()) { if (!((ConstructionObject) e.nextElement()).isParameter()) { return false; } } return true; } /** * @return o can move this point (moveable and not moved by something else) */ public boolean moveableBy(final ConstructionObject o) { if (Bound!=null) { return false; } return moveable()&&(MovedBy==null||MovedBy==o); } public boolean moveablePoint() { if (Bound!=null) { return true; } return Moveable&&!Keep; } public boolean setBound(final String name) { if (name.equals("")) { Bound=null; setFixed(false); Later=false; return true; } try { Bound=null; final ConstructionObject o=Cn.find(name); if (o instanceof PointonObject) { Bound=o; Moveable=true; Fixed=false; KeepInside=false; } else if (o instanceof InsideObject) { Bound=o; Moveable=true; Fixed=false; KeepInside=true; } else { return false; } } catch (final Exception e) { return false; } if (Cn.before(this, Bound)) { Cn.needsOrdering(); Cn.dovalidate(); } updateText(); clearMagnetObjects(); return true; } public void setBound(final ConstructionObject bound) { Bound=bound; } public boolean haveBoundOrder() { return (!Double.isNaN(BoundOrder)); } public void setBoundOrder(final double boundorder) { BoundOrder=boundorder; } public void clearBoundOrder() { BoundOrder=Double.NaN; } public ConstructionObject getBound() { return Bound; } public double getBoundOrder() { return BoundOrder; } public void setMoveable(final boolean flag) { Moveable=flag; } @Override public boolean fixed() { return Fixed; } @Override public void setFixed(final boolean flag) { Fixed=flag; if (!Fixed) { EX=EY=null; } updateText(); } @Override public void setFixed(final String x, final String y) { Fixed=true; EX=new Expression(x, getConstruction(), this); EY=new Expression(y, getConstruction(), this); updateText(); } public void validCoordinates() throws Exception { boolean val=(EX.isValid())&&(EY.isValid()); if (!val) { throw new Exception(""); } } @Override public void move(final double x, final double y) { if ((X==x)&&(Y==y)) { return; } // System.out.println(getName()+" : move !"); X=x; Y=y; AlphaValid=false; computeBarycentricCoords(); } public void setXY(final double x, final double y) { if ((X==x)&&(Y==y)) { return; } // System.out.println(getName()+" : setXY !"); X=x; Y=y; } public void setXYaway(final double x, final double y, final int r) { if (r>0) { setXY(x, y); return; } final double d=Math.sqrt((X-x)*(X-x)+(Y-y)*(Y-y)); final double dblr=-r/Cn.getPixel(); double xx=x+dblr, yy=y; if (d!=0) { xx=x+(X-x)*dblr/d; yy=y+(Y-y)*dblr/d; } // System.out.println(Cn.getPixel()); // System.out.println("d="+d); // System.out.println("xx="+xx); // System.out.println("yy="+yy); // System.out.println("****"); setXY(xx, yy); } public void setA(final double alpha) { Alpha=alpha; } public void setMagnetRayExp(final String s) { magnetRayExp=new Expression(s, Cn, this); } public String getMagnetRayExp() { return magnetRayExp.toString(); } public int getMagnetRay() { int i=20; try { i=(int) Math.round(magnetRayExp.getValue()); } catch (final Exception ex) { } return i; } // public String getMagnetRayExp(){ // return magnetRayExp.toString(); // } private boolean isMagnetObject(final String name) { final Enumeration e=magnetObjects.elements(); while (e.hasMoreElements()) { final MagnetObj mo=(MagnetObj) e.nextElement(); if (mo.name().equals(name)) { return true; } } return false; } public void removeMagnetObject(final String name) { final Enumeration e=magnetObjects.elements(); while (e.hasMoreElements()) { final MagnetObj mo=(MagnetObj) e.nextElement(); if (mo.name().equals(name)) { magnetObjects.remove(mo); } } } /** * s represents the name of an object, or the string "name:ray" where ray is * the specific magnetic attraction * * @param s */ public void addMagnetObject(final String s) { final String[] mo=s.split(":"); final String name=mo[0]; // int ray=-1; String ray=""+Integer.MIN_VALUE; if (mo.length>1) { ray=mo[1]; } if (name.equals(getName())) { return; } final ConstructionObject o=Cn.find(name); if ((o!=null)&&(!isMagnetObject(name))) { magnetObjects.add(new MagnetObj(o, ray)); } } public void setMagnetObjects(final String namelist) { String st=""; char t; int p=0; for (int i=0; i0)&&(t==',')) { st+="@@"; } else { st+=t; } } final String[] s=st.split(","); magnetObjects.removeAllElements(); for (final String element : s) { st=element.replaceAll("@@", ","); addMagnetObject(st); } } public void selectMagnetObjects(final boolean b) { final Enumeration e=magnetObjects.elements(); while (e.hasMoreElements()) { final MagnetObj mo=(MagnetObj) e.nextElement(); if (mo.isInConstruction()) { mo.setSelected(b); } } } public void updateMagnetObjects() { final Enumeration e=magnetObjects.elements(); while (e.hasMoreElements()) { final MagnetObj mo=(MagnetObj) e.nextElement(); if (!mo.isInConstruction()) { magnetObjects.remove(mo); } } } public void clearMagnetObjects() { magnetObjects.removeAllElements(); setMagnetRayExp("20"); } public void translateMagnetObjects() { final Enumeration e=magnetObjects.elements(); while (e.hasMoreElements()) { final MagnetObj mo=(MagnetObj) e.nextElement(); mo.translate(); } } public Vector getMagnetObjects() { return magnetObjects; } public String getMagnetObjectsString() { updateMagnetObjects(); String s=""; final Enumeration e=magnetObjects.elements(); if (e.hasMoreElements()) { final MagnetObj mo=(MagnetObj) e.nextElement(); s=mo.name(); if (mo.ray()>Integer.MIN_VALUE) { s+=":"+mo.rayexp(); } } while (e.hasMoreElements()) { final MagnetObj mo=(MagnetObj) e.nextElement(); s+=","+mo.name(); if (mo.ray()>Integer.MIN_VALUE) { s+=":"+mo.rayexp(); } } return s; } public void magnet() { ConstructionObject PtOnObject=null; ConstructionObject PtObject=null; final Enumeration e=magnetObjects.elements(); int dp=Integer.MAX_VALUE, dm=Integer.MAX_VALUE; int rayp=0, raym=0; while (e.hasMoreElements()) { final MagnetObj mo=(MagnetObj) e.nextElement(); final ConstructionObject o=mo.obj(); final int mRay=(mo.ray()>Integer.MIN_VALUE)?mo.ray() :getMagnetRay(); final int mRayAbs=Math.abs(mRay); if (mRayAbs==0) { continue; } if (!o.valid()) { continue; } if (o instanceof PointObject) { final int i=o.getDistance(this); if ((i<=mRayAbs)&&(iInteger.MIN_VALUE)?mo.ray() :getMagnetRay(); if (o instanceof PointObject) { final int i=o.getDistance(this); if ((i<=mRay)&&(i0) { setXY(pt.getX(), pt.getY()); } } else if (CurrentMagnetObject instanceof PointonObject) { project(CurrentMagnetObject, Alpha); // final PointonObject pt=(PointonObject) CurrentMagnetObject; // pt.project(this); } } magnet(); } @Override public int getDistance(final PointObject P) { final double d=Math.sqrt(((getX()-P.getX())*(getX()-P.getX())+(getY()-P.getY())*(getY()-P.getY()))); return (int) Math.round(d*Cn.getPixel()); } public void project(final ConstructionObject o) { if (!(o instanceof PointonObject)) { return; } ((PointonObject) o).project(this); if (UseAlpha) { AlphaValid=true; } } public void project(final ConstructionObject o, final double alpha) { ((PointonObject) o).project(this, alpha); } @Override public void edit(final ZirkelCanvas zc) { if (!rene.zirkel.Zirkel.IsApplet) { eric.JGlobals.EditObject(this); return; } final ObjectEditDialog d=new PointEditDialog(zc, this); d.setVisible(true); zc.repaint(); if ((EX!=null&&!EX.isValid())) { final Frame F=zc.getFrame(); final Warning w=new Warning(F, EX.getErrorText(), Zirkel.name("warning"), true); w.center(F); w.setVisible(true); } else if ((EY!=null&&!EY.isValid())) { final Frame F=zc.getFrame(); final Warning w=new Warning(F, EY.getErrorText(), Zirkel.name("warning"), true); w.center(F); w.setVisible(true); } validate(); if (d.wantsMore()) { new EditConditionals(zc.getFrame(), this); validate(); } } @Override public void printArgs(final XmlWriter xml) { updateText(); updateMagnetObjects(); if (Bound!=null) { xml.printArg("on", Bound.getName()); if (KeepInside) { xml.printArg("inside", "true"); } } if (magnetObjects.size()>0) { xml.printArg("magnetobjs", getMagnetObjectsString()); xml.printArg("magnetd", ""+magnetRayExp.toString()); } if (haveBoundOrder()) { xml.printArg("boundorder", String.valueOf(BoundOrder)); } if (Fixed&&EX!=null) { xml.printArg("x", EX.toString()); xml.printArg("actx", ""+X); } else { if (Bound!=null&&AlphaValid&&UseAlpha) { xml.printArg("alpha", ""+Alpha); } xml.printArg("x", ""+X); } if (Fixed&&EY!=null) { xml.printArg("y", EY.toString()); xml.printArg("acty", ""+Y); } else { xml.printArg("y", ""+Y); } printType(xml); if (Fixed) { xml.printArg("fixed", "true"); } if (Increment>1e-4) { xml.printArg("increment", ""+getIncrement()); } } public void printType(final XmlWriter xml) { if (Type!=0) { switch (Type) { case DIAMOND: xml.printArg("shape", "diamond"); break; case CIRCLE: xml.printArg("shape", "circle"); break; case DOT: xml.printArg("shape", "dot"); break; case CROSS: xml.printArg("shape", "cross"); break; case DCROSS: xml.printArg("shape", "dcross"); break; } } } @Override public int getType() { return Type; } @Override public void setType(final int type) { Type=type; } public void movedBy(final ConstructionObject o) { MovedBy=o; } @Override public boolean equals(final ConstructionObject o) { if (!(o instanceof PointObject)||!o.valid()) { return false; } final PointObject p=(PointObject) o; return equals(X, p.X)&&equals(Y, p.Y); } @Override public String getEX() { if (EX!=null) { return EX.toString(); } else { return ""+round(X); } } @Override public String getEY() { if (EY!=null) { return EY.toString(); } else { return ""+round(Y); } } public boolean isOn(final ConstructionObject o) { if (Bound!=null) { return o==Bound; } return o.contains(this); } @Override public void translate() { if (Bound!=null) { Bound=Bound.getTranslation(); } else if (Fixed) { try { setFixed(EX.toString(), EY.toString()); EX.translate(); EY.translate(); } catch (final Exception e) { } } magnetRayExp.translate(); translateMagnetObjects(); } @Override public Enumeration depending() { super.depending(); if (Bound!=null) { DL.add(Bound); } if (Fixed) { if (EX!=null) { EX.addDep(this); } if (EY!=null) { EY.addDep(this); } } return DL.elements(); } @Override public void snap(final ZirkelCanvas zc) { final double d=zc.getGridSize()/2; X=Math.round(X/d)*d; Y=Math.round(Y/d)*d; updateText(); } @Override public void updateCircleDep() { if (Bound!=null&&Bound instanceof PrimitiveCircleObject) { ((PrimitiveCircleObject) Bound).addDep(this); } if (Bound!=null&&Bound instanceof PrimitiveLineObject) { ((PrimitiveLineObject) Bound).addDep(this); } } public boolean isPointOn() { return Bound!=null; } public boolean isPointOnOrMagnet() { return (Bound!=null)||(CurrentMagnetObject!=null); } public void setLaterBind(final String s) { LaterBind=s; } // for macro constructions : @Override public ConstructionObject copy(final double x, final double y) { ConstructionObject o=null; try { o=(ConstructionObject) clone(); setTranslation(o); o.translateConditionals(); o.translate(); o.setName(); o.updateText(); o.setBreak(false); // o.setTarget(false); // if the target is a Point inside polygon, then try // to follow the mouse ! : if (KeepInside&&Bound!=null&&Bound instanceof AreaObject) { o.move(x, y); } } catch (final Exception e) { } return o; } public void computeBarycentricCoords() { if (Bound!=null&&Bound instanceof QuadricObject) { final QuadricObject quad=((QuadricObject) Bound); final PointObject A=quad.P[0]; final PointObject B=quad.P[1]; final PointObject C=quad.P[2]; final double a=B.getX()-A.getX(); final double b=C.getX()-A.getX(); final double c=this.getX()-A.getX(); final double d=B.getY()-A.getY(); final double e=C.getY()-A.getY(); final double f=this.getY()-A.getY(); final double det=a*e-d*b; if (det!=0) { Gx=(c*e-b*f)/det; Gy=(a*f-c*d)/det; BarycentricCoordsInitialzed=true; } } else if (KeepInside&&Bound!=null&&Bound instanceof AreaObject) { final AreaObject area=((AreaObject) Bound); if (area.V.size()>2) { final PointObject A=(PointObject) area.V.get(0); final PointObject B=(PointObject) area.V.get(1); final PointObject C=(PointObject) area.V.get(2); final double a=B.getX()-A.getX(); final double b=C.getX()-A.getX(); final double c=this.getX()-A.getX(); final double d=B.getY()-A.getY(); final double e=C.getY()-A.getY(); final double f=this.getY()-A.getY(); final double det=a*e-d*b; if (det!=0) { Gx=(c*e-b*f)/det; Gy=(a*f-c*d)/det; BarycentricCoordsInitialzed=true; } } } } @Override public void setInside(final boolean flag) { KeepInside=flag; computeBarycentricCoords(); } @Override public boolean isInside() { return KeepInside; } @Override public void laterBind(final Construction c) { if (LaterBind.equals("")) { return; } final ConstructionObject o=c.find(LaterBind); if (o!=null&&((o instanceof PointonObject)||(o instanceof InsideObject))) { Bound=o; updateText(); validate(); } LaterBind=""; } public void setAlpha(final double alpha) { Alpha=alpha; AlphaValid=true; } public void setUseAlpha(final boolean flag) { UseAlpha=flag; } public boolean useAlpha() { return UseAlpha; } public double getAlpha() { return Alpha; } @Override public void round() { move(round(X, ZirkelCanvas.LengthsFactor), round(Y, ZirkelCanvas.LengthsFactor)); } /** * For bounded points. */ @Override public void setKeepClose(final double x, final double y) { KeepClose=true; XcOffset=x-X; YcOffset=y-Y; } @Override public boolean canKeepClose() { return true; } public boolean dontUpdate() { return DontUpdate; } public void dontUpdate(final boolean flag) { DontUpdate=flag; } /** * Overwrite setting of default things for macro targets. */ // public void setTargetDefaults () // { super.setTargetDefaults(); // Type=Cn.DefaultType; // } public void startDrag(final double x, final double y) { } public void dragTo(final double x, final double y) { clearBoundOrder(); if ((X==x)&&(Y==y)) { return; } // System.out.println(getName()+" : dragTo !"); move(x, y); } public double getOldX() { return 0; } public double getOldY() { return 0; } @Override public void setIncrement(final double inc) { Increment=inc; } @Override public double getIncrement() { return Increment; } @Override public boolean isDriverObject() { if (Bound!=null) { return true; } // if (Fixed) return false; return Moveable&&!Keep; } public boolean somethingChanged() { return ((getX()!=LASTX)||(getY()!=LASTY)); } public void clearChanges() { LASTX=getX(); LASTY=getY(); } } ./src/rene/zirkel/objects/CVS/RevisionCache/PrimitiveLineObject.java#1.50000644000175000017500000003462011237037205024645 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: PrimitiveLineObject.java import java.awt.Checkbox; import java.awt.Color; import java.awt.Frame; import java.awt.TextField; import java.awt.event.FocusEvent; import java.util.Enumeration; import javax.swing.JPanel; import rene.gui.Global; import rene.gui.IconBar; import rene.gui.MyLabel; import rene.gui.TextFieldAction; import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.dialogs.EditConditionals; import rene.zirkel.dialogs.ObjectEditDialog; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.structures.Coordinates; class LineEditDialog extends ObjectEditDialog { /** * */ private static final long serialVersionUID = 1L; TextField Length; Checkbox Fixed, Restricted; IconBar IC; public LineEditDialog(final Frame f, final PrimitiveLineObject o) { super(f, Zirkel.name("edit.line.title"), o); } @Override public void addFirst(final JPanel P) { final PrimitiveLineObject l = (PrimitiveLineObject) O; if (l instanceof SegmentObject) { Length = new TextFieldAction(this, "Length", ((SegmentObject) l) .getStringLength(), 30); if (((SegmentObject) l).canFix()) { Fixed = new Checkbox(""); Fixed.setState(((SegmentObject) l).fixed()); } else { Length.setEditable(false); } } if ((l instanceof PlumbObject) && ((PlumbObject) l).canRestrict()) { Restricted = new Checkbox(""); Restricted.setState(((PlumbObject) l).isRestricted()); } if (Length != null) { P.add(new MyLabel(Zirkel.name("edit.segment.length"))); P.add(Length); } if (Fixed != null) { P.add(new MyLabel(Zirkel.name("edit.fixed"))); P.add(Fixed); } if (Restricted != null) { P.add(new MyLabel(Zirkel.name("edit.plumb.restricted"))); P.add(Restricted); } } @Override public void addSecond(final JPanel P) { final PrimitiveLineObject l = (PrimitiveLineObject) O; IC = new IconBar(F); IC.setIconBarListener(this); if (!(l instanceof SegmentObject)) { IC.addToggleLeft("plines"); IC.setState("plines", l.isPartial()); } if (l instanceof SegmentObject) { IC.addToggleLeft("arrow"); IC.setState("arrow", ((SegmentObject) l).isArrow()); } P.add(new MyLabel("")); P.add(IC); } @Override public boolean showsValue() { return Length != null; } @Override public void doAction(final String o) { if (o.equals("Length") && Fixed != null) { Fixed.setState(true); super.doAction("OK"); } else { super.doAction(o); } } @Override public void setAction() { if (Fixed != null) { try { ((SegmentObject) O) .setFixed(Fixed.getState(), Length.getText()); } catch (final Exception e) { } } if (Restricted != null) { ((PlumbObject) O).setRestricted(Restricted.getState()); } if (!(O instanceof SegmentObject)) { ((PrimitiveLineObject) O).setPartial(IC.getState("plines")); } else if (O instanceof SegmentObject) { ((SegmentObject) O).setArrow(IC.getState("arrow")); Global.setParameter("unit.length", Unit.getText()); } } @Override public void focusGained(final FocusEvent e) { if (Fixed != null && Fixed.getState()) { Length.requestFocus(); } else { super.focusGained(e); } } } public class PrimitiveLineObject extends ConstructionObject implements PointonObject { protected double X1, Y1, DX, DY; protected PointObject P1; PointObject Dep[]; int NDep; boolean Partial = false; public PrimitiveLineObject(final Construction c) { super(c); setColor(ColorIndex, SpecialColor); } public PrimitiveLineObject(final Construction c, final String Nme) { super(c, Nme); setColor(ColorIndex, SpecialColor); } public void setP1DXDY(final PointObject p, final double dx, final double dy) { P1 = p; DX = dx; DY = dy; X1 = P1.getX(); Y1 = P1.getY(); } @Override public void setDefaults() { setShowName(Global.getParameter("options.line.shownames", false)); setShowValue(Global.getParameter("options.line.showvalues", false)); setColor(Global.getParameter("options.line.color", 0), Global .getParameter("options.line.pcolor", (Color) null)); setColorType(Global.getParameter("options.line.colortype", 0)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Global.getParameter("options.line.large", false)); setBold(Global.getParameter("options.line.bold", false)); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.line.shownames", false)); setShowValue(Global.getParameter("options.line.showvalues", false)); setColor(Global.getParameter("options.line.color", 0), Global .getParameter("options.line.pcolor", (Color) null)); setColorType(Global.getParameter("options.line.colortype", 0)); setLarge(Global.getParameter("options.line.large", false)); setBold(Global.getParameter("options.line.bold", false)); } @Override public String getTag() { return "Line"; } double k1, k2; boolean k12valid = false; @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) { return; } // compute middle of the screen: final double xm = (zc.minX() + zc.maxX()) / 2, ym = (zc.minY() + zc .maxY()) / 2; // compute distance from middle to line: final double d = (xm - X1) * DY - (ym - Y1) * DX; // compute point with minimal distance final double x = xm - d * DY, y = ym + d * DX; // compute size of the screen final double a = Math.max(zc.maxX() - zc.minX(), zc.maxY() - zc.minY()); if (Math.abs(d) > a) { return; } // compute distance from closest point to source final double b = (x - X1) * DX + (y - Y1) * DY; // compute the two visible endpoints k1 = b - a; k2 = b + a; k12valid = true; if (Partial && Dep != null && !zc.showHidden()) { final double dd = (zc.maxX() - zc.minX()) / 20; double dmin = -dd, dmax = +dd; if (Dep != null) { for (int i = 0; i < NDep; i++) { if (!Dep[i].valid() || Dep[i].mustHide(zc)) { continue; } final double s = project(Dep[i].getX(), Dep[i].getY()); if (s - dd < dmin) { dmin = s - dd; } else if (s + dd > dmax) { dmax = s + dd; } } } if (k1 < dmin) { k1 = dmin; } if (k2 > dmax) { k2 = dmax; } } final double c1 = zc.col(X1 + k1 * DX), c2 = zc.col(X1 + k2 * DX), r1 = zc .row(Y1 + k1 * DY), r2 = zc.row(Y1 + k2 * DY); // paint: if (isStrongSelected() && g instanceof MyGraphics13) { ((MyGraphics13) g).drawMarkerLine(c1, r1, c2, r2); } g.setColor(this); if (tracked()) zc.UniversalTrack.drawTrackLine(this, c1, r1, c2, r2); g.drawLine(c1, r1, c2, r2, this); final String s = getDisplayText(); if (!s.equals("")) { g.setLabelColor(this); setFont(g); DisplaysText = true; if (KeepClose) { final double side = (YcOffset < 0) ? 1 : -1; drawLabel(g, s, zc, X1 + XcOffset * DX, Y1 + XcOffset * DY, side * DX, side * DY, 0, 0); } else { drawLabel(g, s, zc, x + a / 5 * DX, y + a / 5 * DY, DX, DY, XcOffset, YcOffset); } } } @Override public boolean canKeepClose() { return true; } @Override public void setKeepClose(final double x, final double y) { KeepClose = true; XcOffset = (x - X1) * DX + (y - Y1) * DY; YcOffset = (x - X1) * DY - (y - Y1) * DX; } @Override public boolean nearto(final int c, final int r, final ZirkelCanvas zc) { if (!displays(zc)) { return false; } // compute point at c,r final double x = zc.x(c), y = zc.y(r); // compute distance from x,y final double d = (x - X1) * DY - (y - Y1) * DX; // scale in screen coordinates Value = Math.abs(zc.col(zc.minX() + d) - zc.col(zc.minX())); return Value < zc.selectionSize() * 2; } @Override public boolean onlynearto(final int c, final int r, final ZirkelCanvas zc) { return false; } public static Coordinates intersect(final PrimitiveLineObject l1, final PrimitiveLineObject l2) // compute the intersection // coordinates of two lines { final double det = -l1.DX * l2.DY + l1.DY * l2.DX; if (Math.abs(det) < 1e-10) { return null; } final double a = (-(l2.X1 - l1.X1) * l2.DY + (l2.Y1 - l1.Y1) * l2.DX) / det; return new Coordinates(l1.X1 + a * l1.DX, l1.Y1 + a * l1.DY); } public static Coordinates intersect(final PrimitiveLineObject l, final PrimitiveCircleObject c) // compute the intersection // coordinates of a line with a // circle { double x = c.getX(), y = c.getY(); final double r = c.getR(); final double d = (x - l.X1) * l.DY - (y - l.Y1) * l.DX; if (Math.abs(d) > r + 1e-10) { return null; } x -= d * l.DY; y += d * l.DX; double h = r * r - d * d; if (h > 0) { h = Math.sqrt(h); } else { h = 0; } return new Coordinates(x + h * l.DX, y + h * l.DY, x - h * l.DX, y - h * l.DY); } public static Coordinates intersect(final PrimitiveLineObject l, final QuadricObject q) { // compute the intersection coordinates of a line with a quadric // done with XCAS : // System.out.println("l.DX="+l.DX+" l.DY="+l.DY); final double M = -l.DY, N2 = l.DX, P = -(M * l.X1 + N2 * l.Y1); // System.out.println("M="+M+" N2="+N2+" P="+P); final double A = q.X[0], B = q.X[1], C = q.X[2], D = q.X[3], E = q.X[4], F = q.X[5]; double x1 = 0, x2 = 0, y1 = 0, y2 = 0; if (N2 != 0) { final double part1 = -2 * B * M * P - C * N2 * N2 + D * M * N2 + E * N2 * P; final double part2 = Math.abs(N2) * Math.sqrt(-2 * M * D * N2 * C + 4 * P * D * A * N2 + 4 * P * M * B * C + 4 * E * M * N2 * F - 2 * E * P * N2 * C - 2 * E * P * M * D - 4 * M * M * B * F - 4 * P * P * A * B - 4 * A * N2 * N2 * F + N2 * N2 * C * C + M * M * D * D + E * E * P * P); final double part3 = 2 * A * N2 * N2 + 2 * B * M * M + (-2 * E) * M * N2; x1 = (part1 + part2) / part3; if (Double.isNaN(x1)) { return null; } y1 = (-M * x1 - P) / N2; x2 = (part1 - part2) / part3; y2 = (-M * x2 - P) / N2; if (((x2 - x1) / l.DX) < 0) { return new Coordinates(x2, y2, x1, y1); } } else { x1 = -P / M; x2 = x1; final double part1 = -D * M * M + E * M * P; final double part2 = Math.abs(M) * Math.sqrt(4 * P * M * B * C - 2 * E * P * M * D - 4 * M * M * B * F - 4 * P * P * A * B + M * M * D * D + E * E * P * P); final double part3 = 2 * M * M * B; y1 = (part1 + part2) / part3; if (Double.isNaN(y1)) { return null; } y2 = (part1 - part2) / part3; if (((y2 - y1) / l.DY) < 0) { return new Coordinates(x2, y2, x1, y1); } } return new Coordinates(x1, y1, x2, y2); } public double getDX() { return DX; } public double getDY() { return DY; } @Override public double getX() { return X1; } @Override public double getY() { return Y1; } @Override public void edit(final ZirkelCanvas zc) { final ObjectEditDialog d = new LineEditDialog(zc.getFrame(), this); d.setVisible(true); zc.getConstruction().updateCircleDep(); zc.repaint(); if (d.wantsMore()) { new EditConditionals(zc.getFrame(), this); validate(); } } @Override public String getEquation() { double y = DX, x = -DY; double c = y * Y1 + x * X1; if (c < 0) { c = -c; x = -x; y = -y; } if (Math.abs(x) < 1e-10 && y < 0) { c = -c; x = -x; y = -y; } else if (Math.abs(y) < 1e-10 && x < 0) { c = -c; x = -x; y = -y; } final String s = helpDisplayValue(true, x, "x"); return s + helpDisplayValue(s.equals(""), y, "y") + "=" + ((Math.abs(c) < 1e-10) ? "0" : helpDisplayNumber(true, c)); } /** * Test, if the projection of (x,y) to the line contains that point. */ public boolean contains(final double x, final double y) { return true; } @Override public void printArgs(final XmlWriter xml) { if (Partial) { xml.printArg("partial", "true"); } } public double project(final double x, final double y) { return (x - X1) * DX + (y - Y1) * DY; } @Override public boolean equals(final ConstructionObject o) { if (!(o instanceof PrimitiveLineObject) || !o.valid()) { return false; } final PrimitiveLineObject l = (PrimitiveLineObject) o; return equals(DX * l.DY - DY * l.DX, 0) && equals((X1 - l.X1) * DY - (Y1 - l.Y1) * DX, 0); } public PointObject getP1() { return P1; } public Enumeration points() { return depending(); } @Override public boolean locallyLike(final ConstructionObject o) { if (!(o instanceof PrimitiveLineObject)) { return false; } return (equals(DX, ((PrimitiveLineObject) o).DX) && equals(DY, ((PrimitiveLineObject) o).DY)) || (equals(-DX, ((PrimitiveLineObject) o).DX) && equals(-DY, ((PrimitiveLineObject) o).DY)); } @Override public boolean isPartial() { return Partial; } @Override public void setPartial(final boolean partial) { if (Partial == partial) { return; } Partial = partial; if (partial) { Dep = new PointObject[16]; NDep = 0; } else { Dep = null; } } public void addDep(final PointObject p) { if (!Partial || Dep == null || NDep >= Dep.length) { return; } Dep[NDep++] = p; } @Override public void clearCircleDep() { NDep = 0; } @Override public int getDistance(final PointObject P) { final double h = project(P.getX(), P.getY()); final double dx = P.getX() - (getX() + h * getDX()); final double dy = P.getY() - (getY() + h * getDY()); final double d = Math.sqrt(dx * dx + dy * dy); return (int) Math.round(d * Cn.getPixel()); } public void project(final PointObject P) { final double h = project(P.getX(), P.getY()); P.setXY(getX() + h * getDX(), getY() + h * getDY()); P.setA(h); } public void project(final PointObject P, final double alpha) { P.setXY(getX() + alpha * getDX(), getY() + alpha * getDY()); } public boolean canInteresectWith(final ConstructionObject o) { return true; } public void repulse(final PointObject P) { project(P); } } ./src/rene/zirkel/objects/CVS/RevisionCache/LineObject.java#1.40000644000175000017500000001153411237037133022752 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: LineObject.java import rene.util.xml.XmlWriter; import rene.zirkel.Zirkel; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.Count; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; public class LineObject extends TwoPointLineObject { static Count N = new Count(); public LineObject(final Construction c, final PointObject p1, final PointObject p2) { super(c, p1, p2); validate(); updateText(); } @Override public String getTag() { return "Line"; } @Override public void updateText() { setText(text2(Zirkel.name("text.line"), P1.getName(), P2.getName())); } @Override public void validate() { if (!P1.valid() || !P2.valid()) { Valid = false; return; } else { Valid = true; X1 = P1.getX(); Y1 = P1.getY(); X2 = P2.getX(); Y2 = P2.getY(); // compute normalized vector in the direction of the line: DX = X2 - X1; DY = Y2 - Y1; R = Math.sqrt(DX * DX + DY * DY); if (R < 1e-10) { Valid = false; return; } DX /= R; DY /= R; } } @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) return; if (!Partial || zc.showHidden()) { super.paint(g, zc); return; } // compute middle of the screen: final double xm = (zc.minX() + zc.maxX()) / 2, ym = (zc.minY() + zc .maxY()) / 2; // compute distance from middle to line: final double d = (xm - X1) * DY - (ym - Y1) * DX; // compute point with minimal distance final double x = xm - d * DY, y = ym + d * DX; // compute size of the screen final double a = Math.max(zc.maxX() - zc.minX(), zc.maxY() - zc.minY()); if (Math.abs(d) > a) return; // compute distance from closest point to source final double b = (x - X1) * DX + (y - Y1) * DY; // compute the two visible endpoints k1 = b - a; k2 = b + a; k12valid = true; final double dd = (zc.maxX() - zc.minX()) / 20; double dmin = -dd, dmax = R + dd; if (Dep != null) { for (int i = 0; i < NDep; i++) { if (!Dep[i].valid() || Dep[i].mustHide(zc)) continue; final double s = project(Dep[i].getX(), Dep[i].getY()); if (s - dd < dmin) dmin = s - dd; else if (s + dd > dmax) dmax = s + dd; } } if (k1 < dmin) k1 = dmin; if (k2 > dmax) k2 = dmax; final double c1 = zc.col(X1 + k1 * DX), c2 = zc.col(X1 + k2 * DX), r1 = zc .row(Y1 + k1 * DY), r2 = zc.row(Y1 + k2 * DY); // paint: if (isStrongSelected() && g instanceof MyGraphics13) { ((MyGraphics13) g).drawMarkerLine(c1, r1, c2, r2); } g.setColor(this); g.drawLine(c1, r1, c2, r2, this); final String s = getDisplayText(); if (!s.equals("")) { g.setLabelColor(this); setFont(g); DisplaysText = true; if (KeepClose) { final double side = (YcOffset < 0) ? 1 : -1; drawLabel(g, s, zc, X1 + XcOffset * DX, Y1 + XcOffset * DY, side * DX, side * DY, 0, 0); } else drawLabel(g, s, zc, X1 + k2 * DX / 2, Y1 + k2 * DY / 2, DX, DY, XcOffset, YcOffset); } } @Override public void printArgs(final XmlWriter xml) { xml.printArg("from", P1.getName()); xml.printArg("to", P2.getName()); super.printArgs(xml); } @Override public void setDefaults() { super.setDefaults(); setPartial(Cn.PartialLines); } @Override public void toggleHidden() { if (Hidden) { Partial = false; Hidden = false; } else { if (Partial) { Partial = false; Hidden = true; } else Partial = true; } } @Override public boolean hasUnit() { return false; } @Override public boolean nearto(final int c, final int r, final ZirkelCanvas zc) { if (!displays(zc)) return false; if (zc.showHidden() || !Partial || Dep == null || !k12valid) return super.nearto(c, r, zc); // compute point at c,r final double x = zc.x(c), y = zc.y(r); // test, if on visible part final double s = project(x, y); if (s < k1 || s > k2) return false; // compute distance from x,y final double d = (x - X1) * DY - (y - Y1) * DX; // scale in screen coordinates Value = Math.abs(zc.col(zc.minX() + d) - zc.col(zc.minX())); return Value < zc.selectionSize() * 2; } } ./src/rene/zirkel/objects/CVS/RevisionCache/EquationXYObject.java#1.40000644000175000017500000002611111237035753024134 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; import java.util.Enumeration; import java.util.Vector; import rene.gui.Global; import rene.util.xml.XmlWriter; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.ConstructionException; import rene.zirkel.expression.Expression; import rene.zirkel.expression.InvalidException; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.structures.Coordinates; /** * * @author erichake */ public class EquationXYObject extends ConstructionObject implements PointonObject { Vector V = new Vector(); // Number of horizontal divisions for the full zero search algorithm : int Dhor = 100; // canvas left,top,width,height : double Wl = 0, Wt = 0, Ww = 0, Wh = 0; Construction C; Expression EY = null; double X[] = { 0, 0 }; String Var[] = { "x", "y" }; public EquationXYObject(final Construction c, final String eq) { super(c); EY = new Expression(eq, c, this, Var); updateText(); C = c; } public EquationXYObject(final Construction c, final String eq, final int d) { this(c, eq); Dhor = d; } public int getDhor() { return Dhor; } public void setDhor(final int newDHor) { Dhor = newDHor; compute(); updateText(); } @Override public void setDefaults() { setShowName(Global.getParameter("options.locus.shownames", false)); setShowValue(Global.getParameter("options.locus.showvalues", false)); setColor(Global.getParameter("options.locus.color", 0)); setColorType(Global.getParameter("options.locus.colortype", 0)); setFilled(Global.getParameter("options.locus.filled", false)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.locus.shownames", false)); setShowValue(Global.getParameter("options.locus.showvalues", false)); setColor(Global.getParameter("options.locus.color", 0)); setColorType(Global.getParameter("options.locus.colortype", 0)); setFilled(Global.getParameter("options.locus.filled", false)); } public void setEquation(final String eq, final ZirkelCanvas zc) { EY = new Expression(eq, C, this, Var); compute(); updateText(); } public double getValue(final String var) throws ConstructionException { if (!Valid) { throw new InvalidException("exception.invalid"); } return (var.equals("x")) ? X[0] : X[1]; } public double evaluateF(final double x, final double y) throws ConstructionException { X[0] = x; X[1] = y; try { return EY.getValue(); } catch (final Exception e) { throw new ConstructionException(""); } } public void compute() { Wl = C.getX() - C.getW(); Wt = C.getY() - C.getH() / 2; Ww = 2 * C.getW(); Wh = C.getH(); searchZerosSegments(); } public void searchZerosSegments() { V.clear(); final double dx = Ww / Dhor; final double dy = dx * Math.sqrt(3) / 2; final int xn = Dhor + 2; final int yn = (int) (Wh / dy) + 1; final double[] x = new double[xn + 1]; final double[] y = new double[yn + 1]; final double[][] z = new double[xn + 1][yn + 1]; for (int i = 0; i <= xn; i++) { x[i] = Wl - dx + i * dx; } for (int j = 0; j <= yn; j++) { y[j] = Wt + j * dy; } for (int i = 0; i <= xn; i++) { for (int j = 0; j <= yn; j++) { xv[0] = x[i]; xv[1] = y[j]; if (j % 2 == 0) { xv[0] += dx / 2; } try { z[i][j] = evaluateF(xv[0], xv[1]); } catch (final Exception e) { z[i][j] = 0; } } } for (int i = 0; i <= xn - 1; i++) { for (int j = 0; j <= yn - 1; j++) { if (j % 2 == 0) { searchOneZerosSegment(V, x[i] + dx / 2, y[j], z[i][j], x[i], y[j + 1], z[i][j + 1], x[i + 1], y[j + 1], z[i + 1][j + 1]); searchOneZerosSegment(V, x[i] + dx / 2, y[j], z[i][j], x[i + 1] + dx / 2, y[j], z[i + 1][j], x[i + 1], y[j + 1], z[i + 1][j + 1]); } else { searchOneZerosSegment(V, x[i], y[j], z[i][j], x[i + 1], y[j], z[i + 1][j], x[i] + dx / 2, y[j + 1], z[i][j + 1]); searchOneZerosSegment(V, x[i + 1], y[j], z[i + 1][j], x[i + 1] - dx / 2, y[j + 1], z[i][j + 1], x[i + 1] + dx / 2, y[j + 1], z[i + 1][j + 1]); } } } } public void searchOneZerosSegment(final Vector v, final double x1, final double y1, final double z1, final double x2, final double y2, final double z2, final double x3, final double y3, final double z3) { if (z1 * z2 < 0) { double l1 = z2 / (z2 - z1); l1 = fix(x1, y1, z1, x2, y2, z2, l1); final double m1 = 1 - l1; if (z1 * z3 < 0) { double l2 = z3 / (z3 - z1); l2 = fix(x1, y1, z1, x3, y3, z3, l2); final double m2 = 1 - l2; v.add(new Coordinates(l1 * x1 + m1 * x2, l1 * y1 + m1 * y2, l2 * x1 + m2 * x3, l2 * y1 + m2 * y3)); } else { double l2 = z3 / (z3 - z2); l2 = fix(x2, y2, z2, x3, y3, z3, l2); final double m2 = 1 - l2; v.add(new Coordinates(l1 * x1 + m1 * x2, l1 * y1 + m1 * y2, l2 * x2 + m2 * x3, l2 * y2 + m2 * y3)); } } else if (z1 * z3 < 0) { double l1 = z3 / (z3 - z1); l1 = fix(x1, y1, z1, x3, y3, z3, l1); final double m1 = 1 - l1; double l2 = z3 / (z3 - z2); l2 = fix(x2, y2, z2, x3, y3, z3, l2); final double m2 = 1 - l2; v.add(new Coordinates(l1 * x1 + m1 * x3, l1 * y1 + m1 * y3, l2 * x2 + m2 * x3, l2 * y2 + m2 * y3)); } } double xv[] = new double[2]; public double fix(final double x1, final double y1, final double z1, final double x2, final double y2, final double z2, double l1) { try { final double z = evaluateF(x1 * l1 + x2 * (1 - l1), y1 * l1 + y2 * (1 - l1)); if (Math.abs(z) > (Math.abs(z1) + Math.abs(z2)) * 1e-5) { final double mu = 1 - l1, mu2 = mu * mu, mu3 = mu2 * mu, mu4 = mu3 * mu; final double h = Math.sqrt(mu4 * z2 * z2 + ((-2 * mu4 + 4 * mu3 - 2 * mu2) * z1 - 2 * mu2 * z) * z2 + (mu4 - 4 * mu3 + 6 * mu2 - 4 * mu + 1) * z1 * z1 + (-2 * mu2 + 4 * mu - 2) * z * z1 + z * z); final double h1 = (mu2 * z2 - mu2 * z1 + z1 - z + h) / (2 * (mu * z2 - mu * z1 + z1 - z)); final double h2 = (mu2 * z2 - mu2 * z1 + z1 - z - h) / (2 * (mu * z2 - mu * z1 + z1 - z)); if (h1 >= 0 && h1 <= 1) { l1 = 1 - h1; } else if (h2 >= 0 && h2 <= 1) { l1 = 1 - h2; } } } catch (final Exception e) { } return l1; } @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid || mustHide(zc)) { return; } Coordinates c1; g.setColor(this); final Enumeration e = V.elements(); while (e.hasMoreElements()) { c1 = (Coordinates) e.nextElement(); g.drawLine(zc.col(c1.X), zc.row(c1.Y), zc.col(c1.X1), zc.row(c1.Y1), this); } } @Override public boolean nearto(final int cc, final int rr, final ZirkelCanvas zc) { final Enumeration e = V.elements(); Coordinates c1; while (e.hasMoreElements()) { c1 = (Coordinates) e.nextElement(); if (((Math.abs(zc.col(c1.X) - cc) + Math.abs(zc.row(c1.Y) - rr)) < 5) || ((Math.abs(zc.col(c1.X1) - cc) + Math.abs(zc.row(c1.Y1) - rr)) < 5)) { return true; } } return false; } public void project(final PointObject P) { xx = P.getX(); yy = P.getY(); Coordinates c; double dd, dm = 0, xm1 = 0, ym1 = 0, zm1 = 0, xm2 = 0, ym2 = 0, zm2 = 0; // search the closer segment [M1M2] : final Enumeration e = V.elements(); if (e.hasMoreElements()) { c = (Coordinates) e.nextElement(); xm1 = c.X; ym1 = c.Y; xm2 = c.X1; ym2 = c.Y1; dm = Math.sqrt((c.X - xx) * (c.X - xx) + (c.Y - yy) * (c.Y - yy)) + Math.sqrt((c.X1 - xx) * (c.X1 - xx) + (c.Y1 - yy) * (c.Y1 - yy)) - Math.sqrt((c.X - c.X1) * (c.X - c.X1) + (c.Y - c.Y1) * (c.Y - c.Y1)); } else { return; } while (e.hasMoreElements()) { c = (Coordinates) e.nextElement(); dd = Math.sqrt((c.X - xx) * (c.X - xx) + (c.Y - yy) * (c.Y - yy)) + Math.sqrt((c.X1 - xx) * (c.X1 - xx) + (c.Y1 - yy) * (c.Y1 - yy)) - Math.sqrt((c.X - c.X1) * (c.X - c.X1) + (c.Y - c.Y1) * (c.Y - c.Y1)); if (dd < dm) { xm1 = c.X; ym1 = c.Y; xm2 = c.X1; ym2 = c.Y1; dm = dd; } } // coords du vecteur unitaire directeur de (M1M2) : double lg = Math.sqrt((xm2 - xm1) * (xm2 - xm1) + (ym2 - ym1) * (ym2 - ym1)); double dx = (xm2 - xm1) / lg; double dy = (ym2 - ym1) / lg; // coords du point H projeté ortho de P sur (M1M2) : final double h = (xx - xm1) * dx + (yy - ym1) * dy; final double xh = xm1 + h * dx; final double yh = ym1 + h * dy; // coords du vecteur unitaire directeur de (HP) : lg = Math.sqrt((xx - xh) * (xx - xh) + (yy - yh) * (yy - yh)); dx = (xx - xh) / lg; dy = (yy - yh) / lg; // ten pixel length : final double d10 = 10 / C.getPixel(); // Try to have a very accurate precision : try { xm1 = xh + d10 * dx; ym1 = yh + d10 * dy; zm1 = evaluateF(xm1, ym1); xm2 = xh - d10 * dx; ym2 = yh - d10 * dy; zm2 = evaluateF(xm2, ym2); if (zm1 * zm2 < 0) { findRootBetween(xm1, ym1, zm1, xm2, ym2, zm2); P.move(xx, yy); return; } } catch (final Exception ex) { } // If nothing found, then project on the segment (low precision) : P.move(xh, yh); } double xx, yy, zz; public void findRootBetween(final double x1, final double y1, final double z1, final double x2, final double y2, final double z2) { try { xx = (x1 + x2) / 2; yy = (y1 + y2) / 2; zz = evaluateF(xx, yy); if (Math.abs(zz) < 1e-10) { return; } if (zz * z1 < 0) { findRootBetween(x1, y1, z1, xx, yy, zz); } else { findRootBetween(xx, yy, zz, x2, y2, z2); } } catch (final Exception e) { } } public void project(final PointObject P, final double alpha) { project(P); } public boolean canInteresectWith(final ConstructionObject o) { return false; } @Override public String getEY() { if (EY != null) { return EY.toString(); } else { return "0"; } } @Override public String getDisplayValue() { return EY.toString(); } @Override public String getTag() { return "EqXY"; } @Override public void printArgs(final XmlWriter xml) { xml.printArg("f", EY.toString()); xml.printArg("Dhor", String.valueOf(Dhor)); } @Override public void updateText() { setText(getDisplayValue() + "=0"); } @Override public void edit(final ZirkelCanvas zc) { if (!rene.zirkel.Zirkel.IsApplet) { eric.JGlobals.EditObject(this); return; } } public void repulse(final PointObject P) { project(P); } } ./src/rene/zirkel/objects/CVS/Root0000644000175000017500000000007411132354034015720 0ustar yvesyves:ext:erichake@carmetal.cvs.sourceforge.net:/cvsroot/carmetal./src/rene/zirkel/objects/PrimitiveCircleObject.java0000640000175000017500000005450511357123517021520 0ustar yvesyves/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package rene.zirkel.objects; // file: PrimitiveCircleObject.java import java.awt.Color; import java.util.Enumeration; import rene.gui.Global; import rene.util.xml.XmlWriter; import rene.zirkel.ZirkelCanvas; import rene.zirkel.construction.Construction; import rene.zirkel.construction.Count; import rene.zirkel.expression.Expression; import rene.zirkel.graphics.MyGraphics; import rene.zirkel.graphics.MyGraphics13; import rene.zirkel.structures.Coordinates; public class PrimitiveCircleObject extends ConstructionObject implements PointonObject, InsideObject { protected double X, Y, R; static Count N=new Count(); boolean Partial=false; PointObject Dep[]; // array for points, depending on the circle for partial // display int NDep; // number of points in Dep PointObject M; // The midpoint boolean Filled=false; String StartPtName=null, EndPtName=null; // Border points name for Arcs PointObject StartPt=null, EndPt=null; // Border points for Arcs double A1, A2, A; boolean Arc=true; public PrimitiveCircleObject(final Construction c, final PointObject p) { super(c); setColor(ColorIndex, SpecialColor); M=p; Unit=Global.getParameter("unit.length", ""); } public void setMR(final PointObject p1, final double r) { M=p1; R=r; } @Override public void setDefaults() { setShowName(Global.getParameter("options.circle.shownames", false)); setShowValue(Global.getParameter("options.circle.showvalues", false)); setColor(Global.getParameter("options.circle.color", 0), Global.getParameter("options.circle.pcolor", (Color) null)); setColorType(Global.getParameter("options.circle.colortype", 0)); setFilled(Global.getParameter("options.circle.filled", false)); setSolid(Global.getParameter("options.circle.solid", false)); setHidden(Cn.Hidden); setObtuse(Cn.Obtuse); // setSolid(Cn.Solid); setLarge(Cn.LargeFont); setBold(Cn.BoldFont); setPartial(Cn.Partial); Cn.updateCircleDep(); } @Override public void setTargetDefaults() { setShowName(Global.getParameter("options.circle.shownames", false)); setShowValue(Global.getParameter("options.circle.showvalues", false)); setColor(Global.getParameter("options.circle.color", 0), Global.getParameter("options.circle.pcolor", (Color) null)); setColorType(Global.getParameter("options.circle.colortype", 0)); setFilled(Global.getParameter("options.circle.filled", false)); setSolid(Global.getParameter("options.circle.solid", false)); } @Override public String getTag() { return "Circle"; } @Override public int getN() { return N.next(); } @Override public void paint(final MyGraphics g, final ZirkelCanvas zc) { if (!Valid||mustHide(zc)) { return; } final double c1=zc.col(X-R), c2=zc.col(X+R), r1=zc.row(Y+R), r2=zc.row(Y-R), r=(r2-r1)/2; double ssa=1/Math.sqrt(2), ssb=-ssa; // paint: if (!zc.showHidden()&&Dep!=null&&NDep>0&&Partial &&!hasRange()) // partial display { // System.out.println("partial display"); for (int i=0; i