CaRMtl/eric/JSprogram/JSFunctions.java
Glen Whitney e2f0f34394 Restore operability of Circle3D from JavaScript
There were two small problems. First, the type-checking in MacroRunner.run
was too strict, so applications that worked manually were failing from
JavaScript. The fix was to replace all of the type-checking code in that
function with a single call to isAdmissible(), which also simplified the code
and removed duplication.

Second, when assembling return values in ExecuteMacro in JSFunctions.java the
code would commit array bounds violations when there were no targets from
the MacroRunner. This commit fixes both problems and avoids silently dropping
the exceptions caught in Circle3D.
2018-09-05 00:21:49 -04:00

7834 lines
355 KiB
Java

/*
* 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 eric.GUI.pipe_tools;
import java.awt.Color;
import java.awt.FileDialog;
import java.io.File;
import java.util.Enumeration;
import java.util.Vector;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import org.mozilla.javascript.Context;
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.construction.ConstructionException;
import rene.zirkel.constructors.ObjectConstructor;
import rene.zirkel.expression.Expression;
import rene.zirkel.macro.MacroRunner;
import rene.zirkel.objects.AngleObject;
import rene.zirkel.objects.AreaObject;
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.PointObject;
import rene.zirkel.objects.PrimitiveCircleObject;
import rene.zirkel.objects.PrimitiveLineObject;
import rene.zirkel.objects.QuadricObject;
import rene.zirkel.objects.SegmentObject;
import rene.zirkel.objects.TextObject;
import rene.zirkel.objects.TwoPointLineObject;
import rene.zirkel.objects.VectorObject;
/**
*
* @author erichake with addons by Dibs
*/
public class JSFunctions {
static String[] allnames={"cm", "Input", "Entrée", "EntréeNombreEntier", "EntréeNombreDécimal", "Prompt", "Signaler", "Print", "Afficher", "afficher", "Println", "Afficherligne", "Shownames", "MontrerNoms", "Hidenames", "CacherNoms", "Hide", "Cacher", "Show",
"Montrer", "Point", "PointOn", "PointSur", "ImplicitPlot", "TracéImplicite", "Intersection", "Intersection2", "Intersections", "MidPoint", "Milieu", "Symmetry", "SymétrieCentrale", "Line", "Droite", "Segment", "Circle", "Cercle", "Parallel",
"Parallèle", "Perpendicular", "Perpendiculaire", "FixedCircle", "CercleRayon", "Move", "Déplacer", "X", "Y", "GetExpressionValue", "PrendreValeurExpression", "Ray", "DemiDroite", "Angle", "Polygon", "Polygone", "Quadric", "Quadrique",
"CartesianFunction", "FonctionCartésienne", "ParametricFunction", "FonctionParamétrique", "SetColor", "MettreCouleur", "SetText", "MettreTexte", "SetThickness", "MettreEpaisseur", "SetFixed", "MettreFixe", "Vector", "Vecteur", "SetRGBColor",
"MettreCouleurRVB", "SetShowName", "MettreMontrerNom", "SetShowValue", "MettreMontrerValeur", "SetFilled", "MettreRempli", "SetSolid", "MettreOpaque", "SetPartial", "MettrePartiel", "Expression", "Text", "Texte", "SetAlias", "MettreAlias", "SetMagneticObjects",
"MettreObjetsMagnétiques", "AddMagneticObject", "AjouterObjetMagnétique", "SetMagneticRay", "MettreRayonMagnétique", "SetPointType", "MettreTypePoint", "InteractiveInput", "EntréeInteractive", "FixedSegment", "SegmentFixe", "SetHide", "MettreCaché", "Pause",
"Delete", "Supprimer", "SetExpressionValue", "MettreValeurExpression", "Reflection", "SymétrieAxiale", "Translation", "PerpendicularBisector", "Médiatrice", "AngleBisector", "Bissectrice", "Circle3pts", "Cercle3pts",
"Arc3pts", "FixedAngle", "AngleFixe", "Circle3", "Cercle3", "ExecuteMacro", "ExécuterMacro", "ExecuteMacroAsBuilt", "ExécuterMacroCommeDéfinie", "Alert", "Alerte", "Conditional", "Conditionnel", "Layer", "Calque", "GetRed", "PrendreRouge", "GetGreen", "PrendreVert", "GetBlue", "PrendreBleu", "PenDown", "CrayonBaissé",
"SetRed", "MettreRouge", "SetGreen", "MettreVert", "SetBlue", "MettreBleu", "DPPoint", "DPLine", "DPSegment", "DPPerpendicular", "DPPerpendicularBisector",
"DPMidPoint", "DPCircle", "DPReflexion", "DPSymmetry", "DPAngleBisector", "DPCommonPerpendicular", "DPRay",
"getC", "getZC", "refreshZC", "rafraichirZC", "Load", "Origin", "Origine", "Extremity", "Extrémité", "GetText", "PrendreTexte", "ReflexAngle", "AngleRentrant", "Exists", "Existe", "SetIncrement", "MettreIncrément",
"GetOpenFile", "PrendreFichierOuvert", "OrderedIntersection", "IntersectionOrdonnée", "SetMinOpen", "SetMinClosed", "SetMaxOpen", "SetMaxClosed","Distance", "Point3D", "X3D", "Y3D", "Z3D", "Distance3D",
"getCONSOLE", "prendreCONSOLE", "Sphere", "Sphère", "FixedSphere", "SphèreRayon", "Projection3D", "Reflection3D", "Symétrie3DPlan", "Symmetry3D", "SymétrieCentrale3D", "Translation3D", "Circle3D", "Cercle3D", "FixedCircle3D", "CercleRayon3D", "Circle3D3pts", "Cercle3D3pts","SetIconSelection","IsIconSelected","AttacherTortue",
"BaisserStylo","LeverStylo","Avancer","TournerGauche","TournerDroite","MontrerTortue","CacherTortue","OrienterTortue","VitesseTortue","Reculer","PivoterGauche","PivoterDroite","PivoterHaut","PivoterBas","Viser","Triangle","Quadrilatère","Quadrangle","FixTurtle","TurtleDown","TurtleUp","MoveForward","MoveBackward","TurnLeft",
"TurnRight","RollLeft","RollRight","PitchUp","PitchDown","ShowTurtle","HideTurtle","OrientateTurtle","OrientateTowards","TurtleSpeed","Liberate","Libérer","getRealScript","getZZ","prendreZZ","Quadrilatère3D", "Quadrangle3D", "Polygone3D", "Polygon3D","ClicVirtuel"};
static PointObject ptTortue, pt3DTortue;
static PointObject ptTortue2, pt3DTortue2;
static PointObject ptSupport;
static PointObject ptSupport2;
static PointObject ptO;
static PointObject ptO2;
static PointObject ptO3;
static VectorObject dirTortue;
static VectorObject dirTortueVisu;
static ExpressionObject longueurTortue, longueurTortue3D;
static boolean styloBaisse, turtleIs3D;
static double vitesseTortue = 100;
static double nbSteps=1;
static PointObject t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20, t21, t22, t23, t24;
static Vector p1, p2, tete, p3, p4, cara;
static AreaObject pp1, pp2, pp3, pp4, ttete, ccara;
static PointObject pt3D0, pt3D1, pt3D2, pt3D3, pt3D1b, pt3D2b, pt3D3b, pt3DSupport, pt3DSupport01, pt3DSupport02, pt3DSupport03, t3D1, t3D2, t3D3, t3D4;
static VectorObject dirTortue3D1, dirTortue3D2, dirTortue3D3, dirTortueVisu3D1, dirTortueVisu3D2, dirTortueVisu3D3;
static Vector p3D;
static AreaObject pp3D;
static PointObject oldpt3D2, oldpt3D3, pt3D2bis, pt3D3bis, npoint;
public static String[] getKeywords() {
return allnames;
}
public static String AttacherTortue(String name) {
pt3DTortue=(PointObject) getC().find(name);
if (pt3DTortue!=null) {
turtleIs3D=pt3DTortue.is3D();
synchronized (getC()) {
if (turtleIs3D) {
try { if (pt3D0==null) {
longueurTortue3D=new ExpressionObject(getC(), 0, 0);
longueurTortue3D.setDefaults();
longueurTortue3D.setHidden(true);
longueurTortue3D.setName("kTortue3D");
longueurTortue3D.setPrompt(longueurTortue3D.getName());
styloBaisse = true;
pt3D0=new PointObject(getC(),0,0);
longueurTortue3D.setExpression("60/pixel", getC());
pt3D1=new PointObject(getC(),0,0);
pt3D2=new PointObject(getC(),0,0);
pt3D3=new PointObject(getC(),0,0);
pt3D1b=new PointObject(getC(),0,0);
pt3D2b=new PointObject(getC(),0,0);
pt3D3b=new PointObject(getC(),0,0);
dirTortue3D1= new VectorObject(getC(),pt3D0,pt3D1);
dirTortue3D2= new VectorObject(getC(),pt3D0,pt3D2);
dirTortue3D3= new VectorObject(getC(),pt3D0,pt3D3);
pt3DSupport=new PointObject(getC(),0,0);
pt3DSupport01=new PointObject(getC(),0,0);
pt3DSupport02=new PointObject(getC(),0,0);
pt3DSupport03=new PointObject(getC(),0,0);
dirTortueVisu3D1= new VectorObject(getC(),pt3DSupport,pt3DSupport01);
dirTortueVisu3D2= new VectorObject(getC(),pt3DSupport,pt3DSupport02);
dirTortueVisu3D3= new VectorObject(getC(),pt3DSupport,pt3DSupport03);
p3D= new Vector();
t3D1=new PointObject(getC(),0,0);
t3D2=new PointObject(getC(),0,0);
t3D3=new PointObject(getC(),0,0);;
t3D4=new PointObject(getC(),0,0);
pp3D = new AreaObject(getC(),p3D);
pp3D.setDefaults();
pp3D.setFilled(true);
pp3D.setSpecialColor(new Color(138,74,0));
}
else {
pt3D1=new PointObject(getC(),0,0);
pt3D2=new PointObject(getC(),0,0);
pt3D3=new PointObject(getC(),0,0);
pt3D1b=new PointObject(getC(),0,0);
pt3D2b=new PointObject(getC(),0,0);
pt3D3b=new PointObject(getC(),0,0);
}
addObject(longueurTortue3D);
addObject(pt3D0);
addObject(pt3D1);
addObject(pt3D2);
addObject(pt3D3);
addObject(pt3D1b);
addObject(pt3D2b);
addObject(pt3D3b);
addObject(dirTortue3D1);
addObject(dirTortue3D2);
addObject(dirTortue3D3);
addObject(pt3DSupport);
addObject(pt3DSupport01);
addObject(pt3DSupport02);
addObject(pt3DSupport03);
addObject(dirTortueVisu3D1);
addObject(dirTortueVisu3D2);
addObject(dirTortueVisu3D3);
addObject(t3D1);
addObject(t3D2);
addObject(t3D3);
addObject(pp3D);
pt3D0.setIs3D(true);
pt3D1.setIs3D(true);
pt3D2.setIs3D(true);
pt3D3.setIs3D(true);
pt3D0.setFixed("0","0","0");
pt3D0.validate();
pt3D1.setFixed("1","0","0");
pt3D1.validate();
pt3D2.setFixed("0","1","0");
pt3D3.validate();
pt3D3.setFixed("0","0","1");
pt3D0.setHidden(true);
pt3D1.setSuperHidden(true);
pt3D2.setSuperHidden(true);
pt3D3.setSuperHidden(true);
pt3D1b.setSuperHidden(true);
pt3D2b.setSuperHidden(true);
pt3D3b.setSuperHidden(true);
pt3D1b.setIs3D(true);
pt3D2b.setIs3D(true);
pt3D3b.setIs3D(true);
pt3D1b.setFixed("1","0","0");
pt3D2b.setFixed("0","1","0");
pt3D3b.setFixed("0","0","1");
pt3DSupport.setIs3D(true);
pt3DSupport01.setIs3D(true);
pt3DSupport02.setIs3D(true);
pt3DSupport03.setIs3D(true);
t3D1.setIs3D(true);
t3D2.setIs3D(true);
t3D3.setIs3D(true);
t3D4.setIs3D(true);
dirTortue3D1.setDefaults();
dirTortue3D1.setHidden(true);
dirTortue3D2.setDefaults();
dirTortue3D2.setHidden(true);
dirTortue3D3.setDefaults();
dirTortue3D3.setHidden(true);
dirTortueVisu3D1.setDefaults();
dirTortueVisu3D1.setHidden(true);
dirTortueVisu3D2.setDefaults();
dirTortueVisu3D2.setHidden(true);
dirTortueVisu3D3.setDefaults();
dirTortueVisu3D3.setHidden(true);
pt3DTortue=(PointObject) getC().find(name);
pt3DSupport.setSuperHidden(true);
pt3DSupport.setFixed("x3D("+pt3DTortue.getName()+")","y3D("+pt3DTortue.getName()+")","z3D("+pt3DTortue.getName()+")");
pt3DSupport01.setSuperHidden(true);
pt3DSupport01.setFixed("x3D("+pt3DTortue.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DTortue.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DTortue.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport02.setSuperHidden(true);
pt3DSupport02.setFixed("x3D("+pt3DTortue.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DTortue.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DTortue.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport03.setSuperHidden(true);
pt3DSupport03.setFixed("x3D("+pt3DTortue.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DTortue.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DTortue.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport.validate();
pt3DSupport01.validate();
pt3DSupport02.validate();
pt3DSupport03.validate();
dirTortueVisu3D1.validate();
dirTortueVisu3D2.validate();
dirTortueVisu3D3.validate();
p3D.add(pt3DSupport);
t3D1.setDefaults();
t3D1.setSuperHidden(true);
t3D1.setFixed("x3D("+pt3DSupport.getName()+")-0.4*"+longueurTortue3D.getName()+"*x3D("+dirTortueVisu3D1.getName()+")+0.4*"+longueurTortue3D.getName()+"*x3D("+dirTortueVisu3D2.getName()+")","y3D("+pt3DSupport.getName()+")-0.4*"+longueurTortue3D.getName()+"*y3D("+dirTortueVisu3D1.getName()+")+0.4*"+longueurTortue3D.getName()+"*y3D("+dirTortueVisu3D2.getName()+")","z3D("+pt3DSupport.getName()+")-0.4*"+longueurTortue3D.getName()+"*z3D("+dirTortueVisu3D1.getName()+")+0.4*"+longueurTortue3D.getName()+"*z3D("+dirTortueVisu3D2.getName()+")");
p3D.add(t3D1);
t3D2.setDefaults();
t3D2.setSuperHidden(true);
t3D2.setFixed("x3D("+pt3DSupport.getName()+")+0.8*"+longueurTortue3D.getName()+"*x3D("+dirTortueVisu3D1.getName()+")","y3D("+pt3DSupport.getName()+")+0.8*"+longueurTortue3D.getName()+"*y3D("+dirTortueVisu3D1.getName()+")","z3D("+pt3DSupport.getName()+")+0.8*"+longueurTortue3D.getName()+"*z3D("+dirTortueVisu3D1.getName()+")");
p3D.add(t3D2);
t3D3.setDefaults();
t3D3.setSuperHidden(true);
t3D3.setFixed("x3D("+pt3DSupport.getName()+")-0.4*"+longueurTortue3D.getName()+"*x3D("+dirTortueVisu3D1.getName()+")-0.4*"+longueurTortue3D.getName()+"*x3D("+dirTortueVisu3D2.getName()+")","y3D("+pt3DSupport.getName()+")-0.4*"+longueurTortue3D.getName()+"*y3D("+dirTortueVisu3D1.getName()+")-0.4*"+longueurTortue3D.getName()+"*y3D("+dirTortueVisu3D2.getName()+")","z3D("+pt3DSupport.getName()+")-0.4*"+longueurTortue3D.getName()+"*z3D("+dirTortueVisu3D1.getName()+")-0.4*"+longueurTortue3D.getName()+"*z3D("+dirTortueVisu3D2.getName()+")");
p3D.add(t3D3);
t3D1.validate();
t3D2.validate();
t3D3.validate();
pp3D.validate();
pp3D.addConditional("solid",new Expression(pp3D.getName()+"<0",getC(),pp3D));
pp3D.addConditional("thick",new Expression(pp3D.getName()+"<0",getC(),pp3D));
} catch (Exception e) {
return "";
}
return name;
}
else {
try {
if (ptO==null) {
longueurTortue=new ExpressionObject(getC(), 0, 0);
longueurTortue.setDefaults();
longueurTortue.setHidden(true);
longueurTortue.setName("kTortue");
longueurTortue.setPrompt(longueurTortue.getName());
styloBaisse = true;
p1= new Vector();
t1=new PointObject(getC(),0,0);
t2=new PointObject(getC(),0,0);
t3=new PointObject(getC(),0,0);
t4=new PointObject(getC(),0,0);
pp1 = new AreaObject(getC(),p1);
p2= new Vector();
t5=new PointObject(getC(),0,0);
t6=new PointObject(getC(),0,0);
pp2 = new AreaObject(getC(),p2);
tete= new Vector();
t7=new PointObject(getC(),0,0);
t8=new PointObject(getC(),0,0);
t9=new PointObject(getC(),0,0);
t10=new PointObject(getC(),0,0);
t11=new PointObject(getC(),0,0);
ttete = new AreaObject(getC(),tete);
if (getC().find("turtleVttete")==null) {ttete.setName("turtleVttete");}
p3= new Vector();
t12=new PointObject(getC(),0,0);
t13=new PointObject(getC(),0,0);
t14=new PointObject(getC(),0,0);
pp3 = new AreaObject(getC(),p3);
p4= new Vector();
t15=new PointObject(getC(),0,0);
t16=new PointObject(getC(),0,0);
t17=new PointObject(getC(),0,0);
pp4 = new AreaObject(getC(),p4);
cara= new Vector();
t18=new PointObject(getC(),0,0);
t19=new PointObject(getC(),0,0);
t20=new PointObject(getC(),0,0);
t21=new PointObject(getC(),0,0);
t22=new PointObject(getC(),0,0);
t23=new PointObject(getC(),0,0);
t24=new PointObject(getC(),0,0);
ccara = new AreaObject(getC(),cara);
if (getC().find("turtleVccara")==null) {ccara.setName("turtleVccara");}
pp1.setDefaults();
pp1.setFilled(true);
pp1.setSpecialColor(new Color(138,102,66));
pp2.setDefaults();
pp2.setFilled(true);
pp2.setSpecialColor(new Color(138,102,66));
ttete.setDefaults();
ttete.setFilled(true);
ttete.setSpecialColor(new Color(138,102,66));
pp3.setDefaults();
pp3.setFilled(true);
pp3.setSpecialColor(new Color(138,102,66));
pp4.setDefaults();
pp4.setFilled(true);
pp4.setSpecialColor(new Color(138,102,66));
ccara.setDefaults();
ccara.setFilled(true);
ccara.setSpecialColor(new Color(82,139,139));
}
try {
longueurTortue.setExpression("60/pixel", getC());
} catch (final ConstructionException e) {
return "";
}
ptTortue=(PointObject) getC().find(name);
//
ptO=new PointObject(getC(),0,0);
ptO2=new PointObject(getC(),1,0);
dirTortue= new VectorObject(getC(),ptO,ptO2);
ptSupport=new PointObject(getC(),0,0);
ptSupport2=new PointObject(getC(),0,0);
ptTortue2=new PointObject(getC(),0,0);
dirTortueVisu= new VectorObject(getC(),ptSupport,ptSupport2);
addObject(longueurTortue);
ptO.setHidden(true);
addObject(ptO);
ptO.setFixed("0*x("+ptTortue.getName()+")","0"); // astuce...
ptO2.setSuperHidden(true);
addObject(ptO2);
ptO2.setFixed("1","0*y("+ptTortue.getName()+")");
ptO.validate();
ptO2.validate();
dirTortue.validate();
dirTortue.setDefaults();
dirTortue.setHidden(true);
addObject(dirTortue);
ptSupport.setSuperHidden(true);
addObject(ptSupport);
ptSupport.setFixed("x("+ptTortue.getName()+")","y("+ptTortue.getName()+")");
ptSupport2.setSuperHidden(true);
addObject(ptSupport2);
ptSupport2.setFixed("x("+ptTortue.getName()+")+x("+dirTortue.getName()+")","y("+ptTortue.getName()+")+y("+dirTortue.getName()+")");
ptTortue2.setDefaults();
ptTortue2.setSuperHidden(true);
addObject(ptTortue2);
ptTortue2.setFixed("x("+ptTortue.getName()+")+x("+dirTortue.getName()+")","y("+ptTortue.getName()+")+y("+dirTortue.getName()+")");
ptTortue2.validate();
dirTortueVisu.validate();
dirTortueVisu.setDefaults();
dirTortueVisu.setHidden(true);
addObject(dirTortueVisu);
t1.setDefaults();
t1.setSuperHidden(true);
addObject(t1);
t1.setFixed("x("+ptSupport.getName()+")-0.2*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.2*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p1.add(t1);
t2.setDefaults();
t2.setSuperHidden(true);
addObject(t2);
t2.setFixed("x("+ptSupport.getName()+")-0.4*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.4*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p1.add(t2);
t3.setDefaults();
t3.setSuperHidden(true);
addObject(t3);
t3.setFixed("x("+ptSupport.getName()+")+0.2*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")-0.2*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.2*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")+0.2*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p1.add(t3);
addObject(pp1);
t4.setDefaults();
t4.setSuperHidden(true);
addObject(t4);
t4.setFixed("x("+ptSupport.getName()+")+0.5*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")-0.3*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.5*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")+0.3*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p2.add(t4);
t5.setDefaults();
t5.setSuperHidden(true);
addObject(t5);
t5.setFixed("x("+ptSupport.getName()+")+0.7*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")-0.5*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.7*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")+0.5*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p2.add(t5);
t6.setDefaults();
t6.setSuperHidden(true);
addObject(t6);
t6.setFixed("x("+ptSupport.getName()+")+0.65*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")-0.2*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.65*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")+0.2*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p2.add(t6);
addObject(pp2);
t7.setDefaults();
t7.setSuperHidden(true);
addObject(t7);
t7.setFixed("x("+ptSupport.getName()+")+0.75*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")-0.1*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.75*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")+0.1*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
tete.add(t7);
t8.setDefaults();
t8.setSuperHidden(true);
addObject(t8);
t8.setFixed("x("+ptSupport.getName()+")+0.9*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")-0.15*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.9*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")+0.15*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
tete.add(t8);
t9.setDefaults();
t9.setSuperHidden(true);
addObject(t9);
t9.setFixed("x("+ptSupport.getName()+")+1.05*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+1.05*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")");
tete.add(t9);
t10.setDefaults();
t10.setSuperHidden(true);
addObject(t10);
t10.setFixed("x("+ptSupport.getName()+")+0.9*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")+0.15*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.9*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")-0.15*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
tete.add(t10);
t11.setDefaults();
t11.setSuperHidden(true);
addObject(t11);
t11.setFixed("x("+ptSupport.getName()+")+0.75*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")+0.1*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.75*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")-0.1*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
tete.add(t11);
addObject(ttete);
t12.setDefaults();
t12.setSuperHidden(true);
addObject(t12);
t12.setFixed("x("+ptSupport.getName()+")+0.2*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")-0.2*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p3.add(t12);
t13.setDefaults();
t13.setSuperHidden(true);
addObject(t13);
t13.setFixed("x("+ptSupport.getName()+")+0.4*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")-0.4*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p3.add(t13);
t14.setDefaults();
t14.setSuperHidden(true);
addObject(t14);
t14.setFixed("x("+ptSupport.getName()+")+0.2*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")+0.2*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.2*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")-0.2*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p3.add(t14);
addObject(pp3);
t15.setDefaults();
t15.setSuperHidden(true);
addObject(t15);
t15.setFixed("x("+ptSupport.getName()+")+0.5*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")+0.3*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.5*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")-0.3*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p4.add(t15);
t16.setDefaults();
t16.setSuperHidden(true);
addObject(t16);
t16.setFixed("x("+ptSupport.getName()+")+0.7*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")+0.5*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.7*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")-0.5*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p4.add(t16);
t17.setDefaults();
t17.setSuperHidden(true);
addObject(t17);
t17.setFixed("x("+ptSupport.getName()+")+0.65*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")+0.2*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.65*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")-0.2*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p4.add(t17);
addObject(pp4);
t18.setDefaults();
t18.setSuperHidden(true);
addObject(t18);
t18.setFixed("x("+ptSupport.getName()+")","y("+ptSupport.getName()+")");
cara.add(t18);
t19.setDefaults();
t19.setSuperHidden(true);
addObject(t19);
t19.setFixed("x("+ptSupport.getName()+")+0.3*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")+0.35*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.3*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")-0.35*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
cara.add(t19);
t20.setDefaults();
t20.setSuperHidden(true);
addObject(t20);
t20.setFixed("x("+ptSupport.getName()+")+0.6*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")+0.35*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.6*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")-0.35*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
cara.add(t20);
t21.setDefaults();
t21.setSuperHidden(true);
addObject(t21);
t21.setFixed("x("+ptSupport.getName()+")+0.8*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")+0.05*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.8*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")-0.05*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
cara.add(t21);
t22.setDefaults();
t22.setSuperHidden(true);
addObject(t22);
t22.setFixed("x("+ptSupport.getName()+")+0.8*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")-0.05*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.8*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")+0.05*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
cara.add(t22);
t23.setDefaults();
t23.setSuperHidden(true);
addObject(t23);
t23.setFixed("x("+ptSupport.getName()+")+0.6*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")-0.35*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.6*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")+0.35*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
cara.add(t23);
t24.setDefaults();
t24.setSuperHidden(true);
addObject(t24);
t24.setFixed("x("+ptSupport.getName()+")+0.3*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")-0.35*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.3*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")+0.35*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
cara.add(t24);
addObject(ccara);
} catch (Exception e) {
return "";
}
return name;
}
}
}
else {
return("");
}
}
public static String FixTurtle(String name) {
pt3DTortue=(PointObject) getC().find(name);
if (pt3DTortue!=null) {
turtleIs3D=pt3DTortue.is3D();
synchronized (getC()) {
if (turtleIs3D) {
try { if (pt3D0==null) {
longueurTortue3D=new ExpressionObject(getC(), 0, 0);
longueurTortue3D.setDefaults();
longueurTortue3D.setHidden(true);
longueurTortue3D.setName("kTortue3D");
longueurTortue3D.setPrompt(longueurTortue3D.getName());
styloBaisse = true;
pt3D0=new PointObject(getC(),0,0);
longueurTortue3D.setExpression("60/pixel", getC());
pt3D1=new PointObject(getC(),0,0);
pt3D2=new PointObject(getC(),0,0);
pt3D3=new PointObject(getC(),0,0);
pt3D1b=new PointObject(getC(),0,0);
pt3D2b=new PointObject(getC(),0,0);
pt3D3b=new PointObject(getC(),0,0);
dirTortue3D1= new VectorObject(getC(),pt3D0,pt3D1);
dirTortue3D2= new VectorObject(getC(),pt3D0,pt3D2);
dirTortue3D3= new VectorObject(getC(),pt3D0,pt3D3);
pt3DSupport=new PointObject(getC(),0,0);
pt3DSupport01=new PointObject(getC(),0,0);
pt3DSupport02=new PointObject(getC(),0,0);
pt3DSupport03=new PointObject(getC(),0,0);
dirTortueVisu3D1= new VectorObject(getC(),pt3DSupport,pt3DSupport01);
dirTortueVisu3D2= new VectorObject(getC(),pt3DSupport,pt3DSupport02);
dirTortueVisu3D3= new VectorObject(getC(),pt3DSupport,pt3DSupport03);
p3D= new Vector();
t3D1=new PointObject(getC(),0,0);
t3D2=new PointObject(getC(),0,0);
t3D3=new PointObject(getC(),0,0);;
t3D4=new PointObject(getC(),0,0);
pp3D = new AreaObject(getC(),p3D);
pp3D.setDefaults();
pp3D.setFilled(true);
pp3D.setSpecialColor(new Color(138,74,0));
}
else {
pt3D1=new PointObject(getC(),0,0);
pt3D2=new PointObject(getC(),0,0);
pt3D3=new PointObject(getC(),0,0);
pt3D1b=new PointObject(getC(),0,0);
pt3D2b=new PointObject(getC(),0,0);
pt3D3b=new PointObject(getC(),0,0);
}
addObject(longueurTortue3D);
addObject(pt3D0);
addObject(pt3D1);
addObject(pt3D2);
addObject(pt3D3);
addObject(pt3D1b);
addObject(pt3D2b);
addObject(pt3D3b);
addObject(dirTortue3D1);
addObject(dirTortue3D2);
addObject(dirTortue3D3);
addObject(pt3DSupport);
addObject(pt3DSupport01);
addObject(pt3DSupport02);
addObject(pt3DSupport03);
addObject(dirTortueVisu3D1);
addObject(dirTortueVisu3D2);
addObject(dirTortueVisu3D3);
addObject(t3D1);
addObject(t3D2);
addObject(t3D3);
addObject(pp3D);
pt3D0.setIs3D(true);
pt3D1.setIs3D(true);
pt3D2.setIs3D(true);
pt3D3.setIs3D(true);
pt3D0.setFixed("0","0","0");
pt3D0.validate();
pt3D1.setFixed("1","0","0");
pt3D1.validate();
pt3D2.setFixed("0","1","0");
pt3D3.validate();
pt3D3.setFixed("0","0","1");
pt3D0.setHidden(true);
pt3D1.setSuperHidden(true);
pt3D2.setSuperHidden(true);
pt3D3.setSuperHidden(true);
pt3D1b.setSuperHidden(true);
pt3D2b.setSuperHidden(true);
pt3D3b.setSuperHidden(true);
pt3D1b.setIs3D(true);
pt3D2b.setIs3D(true);
pt3D3b.setIs3D(true);
pt3D1b.setFixed("1","0","0");
pt3D2b.setFixed("0","1","0");
pt3D3b.setFixed("0","0","1");
pt3DSupport.setIs3D(true);
pt3DSupport01.setIs3D(true);
pt3DSupport02.setIs3D(true);
pt3DSupport03.setIs3D(true);
t3D1.setIs3D(true);
t3D2.setIs3D(true);
t3D3.setIs3D(true);
t3D4.setIs3D(true);
dirTortue3D1.setDefaults();
dirTortue3D1.setHidden(true);
dirTortue3D2.setDefaults();
dirTortue3D2.setHidden(true);
dirTortue3D3.setDefaults();
dirTortue3D3.setHidden(true);
dirTortueVisu3D1.setDefaults();
dirTortueVisu3D1.setHidden(true);
dirTortueVisu3D2.setDefaults();
dirTortueVisu3D2.setHidden(true);
dirTortueVisu3D3.setDefaults();
dirTortueVisu3D3.setHidden(true);
pt3DTortue=(PointObject) getC().find(name);
pt3DSupport.setSuperHidden(true);
pt3DSupport.setFixed("x3D("+pt3DTortue.getName()+")","y3D("+pt3DTortue.getName()+")","z3D("+pt3DTortue.getName()+")");
pt3DSupport01.setSuperHidden(true);
pt3DSupport01.setFixed("x3D("+pt3DTortue.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DTortue.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DTortue.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport02.setSuperHidden(true);
pt3DSupport02.setFixed("x3D("+pt3DTortue.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DTortue.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DTortue.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport03.setSuperHidden(true);
pt3DSupport03.setFixed("x3D("+pt3DTortue.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DTortue.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DTortue.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport.validate();
pt3DSupport01.validate();
pt3DSupport02.validate();
pt3DSupport03.validate();
dirTortueVisu3D1.validate();
dirTortueVisu3D2.validate();
dirTortueVisu3D3.validate();
p3D.add(pt3DSupport);
t3D1.setDefaults();
t3D1.setSuperHidden(true);
t3D1.setFixed("x3D("+pt3DSupport.getName()+")-0.4*"+longueurTortue3D.getName()+"*x3D("+dirTortueVisu3D1.getName()+")+0.4*"+longueurTortue3D.getName()+"*x3D("+dirTortueVisu3D2.getName()+")","y3D("+pt3DSupport.getName()+")-0.4*"+longueurTortue3D.getName()+"*y3D("+dirTortueVisu3D1.getName()+")+0.4*"+longueurTortue3D.getName()+"*y3D("+dirTortueVisu3D2.getName()+")","z3D("+pt3DSupport.getName()+")-0.4*"+longueurTortue3D.getName()+"*z3D("+dirTortueVisu3D1.getName()+")+0.4*"+longueurTortue3D.getName()+"*z3D("+dirTortueVisu3D2.getName()+")");
p3D.add(t3D1);
t3D2.setDefaults();
t3D2.setSuperHidden(true);
t3D2.setFixed("x3D("+pt3DSupport.getName()+")+0.8*"+longueurTortue3D.getName()+"*x3D("+dirTortueVisu3D1.getName()+")","y3D("+pt3DSupport.getName()+")+0.8*"+longueurTortue3D.getName()+"*y3D("+dirTortueVisu3D1.getName()+")","z3D("+pt3DSupport.getName()+")+0.8*"+longueurTortue3D.getName()+"*z3D("+dirTortueVisu3D1.getName()+")");
p3D.add(t3D2);
t3D3.setDefaults();
t3D3.setSuperHidden(true);
t3D3.setFixed("x3D("+pt3DSupport.getName()+")-0.4*"+longueurTortue3D.getName()+"*x3D("+dirTortueVisu3D1.getName()+")-0.4*"+longueurTortue3D.getName()+"*x3D("+dirTortueVisu3D2.getName()+")","y3D("+pt3DSupport.getName()+")-0.4*"+longueurTortue3D.getName()+"*y3D("+dirTortueVisu3D1.getName()+")-0.4*"+longueurTortue3D.getName()+"*y3D("+dirTortueVisu3D2.getName()+")","z3D("+pt3DSupport.getName()+")-0.4*"+longueurTortue3D.getName()+"*z3D("+dirTortueVisu3D1.getName()+")-0.4*"+longueurTortue3D.getName()+"*z3D("+dirTortueVisu3D2.getName()+")");
p3D.add(t3D3);
t3D1.validate();
t3D2.validate();
t3D3.validate();
pp3D.validate();
pp3D.addConditional("solid",new Expression(pp3D.getName()+"<0",getC(),pp3D));
pp3D.addConditional("thick",new Expression(pp3D.getName()+"<0",getC(),pp3D));
} catch (Exception e) {
return "";
}
return name;
}
else {
try {
if (ptO==null) {
longueurTortue=new ExpressionObject(getC(), 0, 0);
longueurTortue.setDefaults();
longueurTortue.setHidden(true);
longueurTortue.setName("kTortue");
longueurTortue.setPrompt(longueurTortue.getName());
styloBaisse = true;
p1= new Vector();
t1=new PointObject(getC(),0,0);
t2=new PointObject(getC(),0,0);
t3=new PointObject(getC(),0,0);
t4=new PointObject(getC(),0,0);
pp1 = new AreaObject(getC(),p1);
p2= new Vector();
t5=new PointObject(getC(),0,0);
t6=new PointObject(getC(),0,0);
pp2 = new AreaObject(getC(),p2);
tete= new Vector();
t7=new PointObject(getC(),0,0);
t8=new PointObject(getC(),0,0);
t9=new PointObject(getC(),0,0);
t10=new PointObject(getC(),0,0);
t11=new PointObject(getC(),0,0);
ttete = new AreaObject(getC(),tete);
if (getC().find("turtleVttete")==null) {ttete.setName("turtleVttete");}
p3= new Vector();
t12=new PointObject(getC(),0,0);
t13=new PointObject(getC(),0,0);
t14=new PointObject(getC(),0,0);
pp3 = new AreaObject(getC(),p3);
p4= new Vector();
t15=new PointObject(getC(),0,0);
t16=new PointObject(getC(),0,0);
t17=new PointObject(getC(),0,0);
pp4 = new AreaObject(getC(),p4);
cara= new Vector();
t18=new PointObject(getC(),0,0);
t19=new PointObject(getC(),0,0);
t20=new PointObject(getC(),0,0);
t21=new PointObject(getC(),0,0);
t22=new PointObject(getC(),0,0);
t23=new PointObject(getC(),0,0);
t24=new PointObject(getC(),0,0);
ccara = new AreaObject(getC(),cara);
if (getC().find("turtleVccara")==null) {ccara.setName("turtleVccara");}
pp1.setDefaults();
pp1.setFilled(true);
pp1.setSpecialColor(new Color(138,102,66));
pp2.setDefaults();
pp2.setFilled(true);
pp2.setSpecialColor(new Color(138,102,66));
ttete.setDefaults();
ttete.setFilled(true);
ttete.setSpecialColor(new Color(138,102,66));
pp3.setDefaults();
pp3.setFilled(true);
pp3.setSpecialColor(new Color(138,102,66));
pp4.setDefaults();
pp4.setFilled(true);
pp4.setSpecialColor(new Color(138,102,66));
ccara.setDefaults();
ccara.setFilled(true);
ccara.setSpecialColor(new Color(82,139,139));
}
try {
longueurTortue.setExpression("60/pixel", getC());
} catch (final ConstructionException e) {
return "";
}
ptTortue=(PointObject) getC().find(name);
//
ptO=new PointObject(getC(),0,0);
ptO2=new PointObject(getC(),1,0);
dirTortue= new VectorObject(getC(),ptO,ptO2);
ptSupport=new PointObject(getC(),0,0);
ptSupport2=new PointObject(getC(),0,0);
ptTortue2=new PointObject(getC(),0,0);
dirTortueVisu= new VectorObject(getC(),ptSupport,ptSupport2);
addObject(longueurTortue);
ptO.setHidden(true);
addObject(ptO);
ptO.setFixed("0*x("+ptTortue.getName()+")","0"); // astuce...
ptO2.setSuperHidden(true);
addObject(ptO2);
ptO2.setFixed("1","0*y("+ptTortue.getName()+")");
ptO.validate();
ptO2.validate();
dirTortue.validate();
dirTortue.setDefaults();
dirTortue.setHidden(true);
addObject(dirTortue);
ptSupport.setSuperHidden(true);
addObject(ptSupport);
ptSupport.setFixed("x("+ptTortue.getName()+")","y("+ptTortue.getName()+")");
ptSupport2.setSuperHidden(true);
addObject(ptSupport2);
ptSupport2.setFixed("x("+ptTortue.getName()+")+x("+dirTortue.getName()+")","y("+ptTortue.getName()+")+y("+dirTortue.getName()+")");
ptTortue2.setDefaults();
ptTortue2.setSuperHidden(true);
addObject(ptTortue2);
ptTortue2.setFixed("x("+ptTortue.getName()+")+x("+dirTortue.getName()+")","y("+ptTortue.getName()+")+y("+dirTortue.getName()+")");
ptTortue2.validate();
dirTortueVisu.validate();
dirTortueVisu.setDefaults();
dirTortueVisu.setHidden(true);
addObject(dirTortueVisu);
t1.setDefaults();
t1.setSuperHidden(true);
addObject(t1);
t1.setFixed("x("+ptSupport.getName()+")-0.2*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.2*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p1.add(t1);
t2.setDefaults();
t2.setSuperHidden(true);
addObject(t2);
t2.setFixed("x("+ptSupport.getName()+")-0.4*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.4*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p1.add(t2);
t3.setDefaults();
t3.setSuperHidden(true);
addObject(t3);
t3.setFixed("x("+ptSupport.getName()+")+0.2*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")-0.2*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.2*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")+0.2*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p1.add(t3);
addObject(pp1);
t4.setDefaults();
t4.setSuperHidden(true);
addObject(t4);
t4.setFixed("x("+ptSupport.getName()+")+0.5*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")-0.3*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.5*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")+0.3*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p2.add(t4);
t5.setDefaults();
t5.setSuperHidden(true);
addObject(t5);
t5.setFixed("x("+ptSupport.getName()+")+0.7*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")-0.5*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.7*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")+0.5*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p2.add(t5);
t6.setDefaults();
t6.setSuperHidden(true);
addObject(t6);
t6.setFixed("x("+ptSupport.getName()+")+0.65*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")-0.2*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.65*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")+0.2*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p2.add(t6);
addObject(pp2);
t7.setDefaults();
t7.setSuperHidden(true);
addObject(t7);
t7.setFixed("x("+ptSupport.getName()+")+0.75*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")-0.1*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.75*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")+0.1*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
tete.add(t7);
t8.setDefaults();
t8.setSuperHidden(true);
addObject(t8);
t8.setFixed("x("+ptSupport.getName()+")+0.9*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")-0.15*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.9*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")+0.15*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
tete.add(t8);
t9.setDefaults();
t9.setSuperHidden(true);
addObject(t9);
t9.setFixed("x("+ptSupport.getName()+")+1.05*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+1.05*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")");
tete.add(t9);
t10.setDefaults();
t10.setSuperHidden(true);
addObject(t10);
t10.setFixed("x("+ptSupport.getName()+")+0.9*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")+0.15*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.9*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")-0.15*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
tete.add(t10);
t11.setDefaults();
t11.setSuperHidden(true);
addObject(t11);
t11.setFixed("x("+ptSupport.getName()+")+0.75*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")+0.1*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.75*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")-0.1*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
tete.add(t11);
addObject(ttete);
t12.setDefaults();
t12.setSuperHidden(true);
addObject(t12);
t12.setFixed("x("+ptSupport.getName()+")+0.2*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")-0.2*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p3.add(t12);
t13.setDefaults();
t13.setSuperHidden(true);
addObject(t13);
t13.setFixed("x("+ptSupport.getName()+")+0.4*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")-0.4*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p3.add(t13);
t14.setDefaults();
t14.setSuperHidden(true);
addObject(t14);
t14.setFixed("x("+ptSupport.getName()+")+0.2*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")+0.2*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.2*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")-0.2*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p3.add(t14);
addObject(pp3);
t15.setDefaults();
t15.setSuperHidden(true);
addObject(t15);
t15.setFixed("x("+ptSupport.getName()+")+0.5*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")+0.3*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.5*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")-0.3*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p4.add(t15);
t16.setDefaults();
t16.setSuperHidden(true);
addObject(t16);
t16.setFixed("x("+ptSupport.getName()+")+0.7*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")+0.5*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.7*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")-0.5*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p4.add(t16);
t17.setDefaults();
t17.setSuperHidden(true);
addObject(t17);
t17.setFixed("x("+ptSupport.getName()+")+0.65*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")+0.2*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.65*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")-0.2*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
p4.add(t17);
addObject(pp4);
t18.setDefaults();
t18.setSuperHidden(true);
addObject(t18);
t18.setFixed("x("+ptSupport.getName()+")","y("+ptSupport.getName()+")");
cara.add(t18);
t19.setDefaults();
t19.setSuperHidden(true);
addObject(t19);
t19.setFixed("x("+ptSupport.getName()+")+0.3*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")+0.35*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.3*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")-0.35*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
cara.add(t19);
t20.setDefaults();
t20.setSuperHidden(true);
addObject(t20);
t20.setFixed("x("+ptSupport.getName()+")+0.6*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")+0.35*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.6*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")-0.35*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
cara.add(t20);
t21.setDefaults();
t21.setSuperHidden(true);
addObject(t21);
t21.setFixed("x("+ptSupport.getName()+")+0.8*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")+0.05*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.8*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")-0.05*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
cara.add(t21);
t22.setDefaults();
t22.setSuperHidden(true);
addObject(t22);
t22.setFixed("x("+ptSupport.getName()+")+0.8*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")-0.05*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.8*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")+0.05*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
cara.add(t22);
t23.setDefaults();
t23.setSuperHidden(true);
addObject(t23);
t23.setFixed("x("+ptSupport.getName()+")+0.6*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")-0.35*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.6*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")+0.35*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
cara.add(t23);
t24.setDefaults();
t24.setSuperHidden(true);
addObject(t24);
t24.setFixed("x("+ptSupport.getName()+")+0.3*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")-0.35*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")","y("+ptSupport.getName()+")+0.3*"+longueurTortue.getName()+"*y("+dirTortueVisu.getName()+")+0.35*"+longueurTortue.getName()+"*x("+dirTortueVisu.getName()+")");
cara.add(t24);
addObject(ccara);
} catch (Exception e) {
return "";
}
return name;
}
}
}
else {
return("");
}
}
public static boolean BaisserStylo() {
styloBaisse = true;
return true;
}
public static boolean TurtleDown() {
styloBaisse = true;
return true;
}
public static boolean LeverStylo() {
styloBaisse = false;
return false;
}
public static boolean TurtleUp() {
styloBaisse = false;
return false;
}
public static String[] Avancer(String ptName, String segtName, String di) throws Exception {
PointObject pt=null;
SegmentObject so=null;
String[] ptSegmt=new String[2];
synchronized (getC()) {
if (segtName.equals("undefined")) {
di=ptName;
segtName="";
ptName="";
} else if (di.equals("undefined")) {
di=segtName;
segtName="";
}
if (turtleIs3D) {
try {
pt=new PointObject(getC(), 0, 0);
pt.setIs3D(true);
pt.setFixed("x3D("+pt3DTortue.getName()+")","y3D("+pt3DTortue.getName()+")","z3D("+pt3DTortue.getName()+")");
pt.validCoordinates();
pt.setDefaults();
pt.setShowValue(false);
pt.setShowName(false);
pt.setType(3);
if (!ptName.equals("")) {
pt.setName(parseVariables(ptName));
}
addObject(pt);
pt3DSupport.setFixed("x3D("+pt.getName()+")","y3D("+pt.getName()+")","z3D("+pt.getName()+")");
pt3DSupport.validCoordinates();
pt3DSupport01.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport01.validCoordinates();
pt3DSupport02.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport02.validCoordinates();
pt3DSupport03.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport03.validCoordinates();
if (styloBaisse) {
so=new SegmentObject(getC(),pt3DTortue,pt);
so.validate();
so.setDefaults();
if (!segtName.equals("")) {
so.setName(parseVariables(segtName));
}
addObject(so);
}
else {
pt.setHidden(true);
}
for (int l=1;l<nbSteps;l++) {
pt.setFixed("x3D("+pt3DTortue.getName()+")+"+(l/nbSteps)+"*("+parseVariables(di)+")*x3D("+dirTortue3D1.getName()+")","y3D("+pt3DTortue.getName()+")+"+(l/nbSteps)+"*("+parseVariables(di)+")*y3D("+dirTortue3D1.getName()+")","z3D("+pt3DTortue.getName()+")+"+(l/nbSteps)+"*("+parseVariables(di)+")*z3D("+dirTortue3D1.getName()+")");
refreshZC();
}
pt.setFixed("x3D("+pt3DTortue.getName()+")+("+parseVariables(di)+")*x3D("+dirTortue3D1.getName()+")","y3D("+pt3DTortue.getName()+")+("+parseVariables(di)+")*y3D("+dirTortue3D1.getName()+")","z3D("+pt3DTortue.getName()+")+("+parseVariables(di)+")*z3D("+dirTortue3D1.getName()+")");
pt.validCoordinates();
refreshZC();
pt3DTortue=pt;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
ptSegmt[0]=pt.getName();
if (so==null) {
ptSegmt[1]="";
}
else {ptSegmt[1]=so.getName();}
return ptSegmt;
}
else {
try {
pt=new PointObject(getC(), 0, 0);
pt.setDefaults();
pt.setType(3);
pt.setShowValue(false);
pt.setShowName(false);
pt.setFixed("x("+ptTortue.getName()+")","y("+ptTortue.getName()+")");
if (!ptName.equals("")) {
pt.setName(parseVariables(ptName));
}
pt.validate();
addObject(pt);
ptSupport.setFixed("x("+pt.getName()+")","y("+pt.getName()+")");
ptSupport.validCoordinates();
ptSupport2.setFixed("x("+pt.getName()+")+x("+dirTortue.getName()+")","y("+pt.getName()+")+y("+dirTortue.getName()+")");
ptSupport2.validCoordinates();
if (styloBaisse) {
so=new SegmentObject(getC(),ptTortue,pt);
so.validate();
so.setDefaults();
if (!segtName.equals("")) {
so.setName(parseVariables(segtName));
}
addObject(so);
}
else {
pt.setHidden(true);
}
for (int l=1;l<nbSteps;l++) {
pt.setFixed("x("+ptTortue.getName()+")+"+(l/nbSteps)+"*("+parseVariables(di)+")*x("+dirTortue.getName()+")","y("+ptTortue.getName()+")+"+(l/nbSteps)+"*("+parseVariables(di)+")*y("+dirTortue.getName()+")");
refreshZC();
}
pt.setFixed("x("+ptTortue.getName()+")+("+parseVariables(di)+")*x("+dirTortue.getName()+")","y("+ptTortue.getName()+")+("+parseVariables(di)+")*y("+dirTortue.getName()+")");
pt.validCoordinates();
refreshZC();
ptTortue=pt;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
ptSegmt[0]=pt.getName();
if (so==null) {
ptSegmt[1]="";
}
else {ptSegmt[1]=so.getName();}
return ptSegmt;
}
}
}
public static String[] MoveForward(String ptName, String segtName, String di) throws Exception {
PointObject pt=null;
SegmentObject so=null;
String[] ptSegmt=new String[2];
synchronized (getC()) {
if (segtName.equals("undefined")) {
di=ptName;
segtName="";
ptName="";
} else if (di.equals("undefined")) {
di=segtName;
segtName="";
}
if (turtleIs3D) {
try {
pt=new PointObject(getC(), 0, 0);
pt.setIs3D(true);
pt.setFixed("x3D("+pt3DTortue.getName()+")","y3D("+pt3DTortue.getName()+")","z3D("+pt3DTortue.getName()+")");
pt.validCoordinates();
pt.setDefaults();
pt.setShowValue(false);
pt.setShowName(false);
pt.setType(3);
if (!ptName.equals("")) {
pt.setName(parseVariables(ptName));
}
addObject(pt);
pt3DSupport.setFixed("x3D("+pt.getName()+")","y3D("+pt.getName()+")","z3D("+pt.getName()+")");
pt3DSupport.validCoordinates();
pt3DSupport01.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport01.validCoordinates();
pt3DSupport02.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport02.validCoordinates();
pt3DSupport03.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport03.validCoordinates();
if (styloBaisse) {
so=new SegmentObject(getC(),pt3DTortue,pt);
so.validate();
so.setDefaults();
if (!segtName.equals("")) {
so.setName(parseVariables(segtName));
}
addObject(so);
}
else {
pt.setHidden(true);
}
for (int l=1;l<nbSteps;l++) {
pt.setFixed("x3D("+pt3DTortue.getName()+")+"+(l/nbSteps)+"*("+parseVariables(di)+")*x3D("+dirTortue3D1.getName()+")","y3D("+pt3DTortue.getName()+")+"+(l/nbSteps)+"*("+parseVariables(di)+")*y3D("+dirTortue3D1.getName()+")","z3D("+pt3DTortue.getName()+")+"+(l/nbSteps)+"*("+parseVariables(di)+")*z3D("+dirTortue3D1.getName()+")");
refreshZC();
}
pt.setFixed("x3D("+pt3DTortue.getName()+")+("+parseVariables(di)+")*x3D("+dirTortue3D1.getName()+")","y3D("+pt3DTortue.getName()+")+("+parseVariables(di)+")*y3D("+dirTortue3D1.getName()+")","z3D("+pt3DTortue.getName()+")+("+parseVariables(di)+")*z3D("+dirTortue3D1.getName()+")");
pt.validCoordinates();
refreshZC();
pt3DTortue=pt;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
ptSegmt[0]=pt.getName();
if (so==null) {
ptSegmt[1]="";
}
else {ptSegmt[1]=so.getName();}
return ptSegmt;
}
else {
try {
pt=new PointObject(getC(), 0, 0);
pt.setDefaults();
pt.setType(3);
pt.setShowValue(false);
pt.setShowName(false);
pt.setFixed("x("+ptTortue.getName()+")","y("+ptTortue.getName()+")");
if (!ptName.equals("")) {
pt.setName(parseVariables(ptName));
}
pt.validate();
addObject(pt);
ptSupport.setFixed("x("+pt.getName()+")","y("+pt.getName()+")");
ptSupport.validCoordinates();
ptSupport2.setFixed("x("+pt.getName()+")+x("+dirTortue.getName()+")","y("+pt.getName()+")+y("+dirTortue.getName()+")");
ptSupport2.validCoordinates();
if (styloBaisse) {
so=new SegmentObject(getC(),ptTortue,pt);
so.validate();
so.setDefaults();
if (!segtName.equals("")) {
so.setName(parseVariables(segtName));
}
addObject(so);
}
else {
pt.setHidden(true);
}
for (int l=1;l<nbSteps;l++) {
pt.setFixed("x("+ptTortue.getName()+")+"+(l/nbSteps)+"*("+parseVariables(di)+")*x("+dirTortue.getName()+")","y("+ptTortue.getName()+")+"+(l/nbSteps)+"*("+parseVariables(di)+")*y("+dirTortue.getName()+")");
refreshZC();
}
pt.setFixed("x("+ptTortue.getName()+")+("+parseVariables(di)+")*x("+dirTortue.getName()+")","y("+ptTortue.getName()+")+("+parseVariables(di)+")*y("+dirTortue.getName()+")");
pt.validCoordinates();
refreshZC();
ptTortue=pt;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
ptSegmt[0]=pt.getName();
if (so==null) {
ptSegmt[1]="";
}
else {ptSegmt[1]=so.getName();}
return ptSegmt;
}
}
}
public static String[] Reculer(String ptName, String segtName, String di) throws Exception {
PointObject pt=null;
SegmentObject so=null;
String[] ptSegmt=new String[2];
synchronized (getC()) {
if (segtName.equals("undefined")) {
di=ptName;
segtName=""; ptName="";
} else if (di.equals("undefined")) {
di=segtName;
segtName="";
}
if (turtleIs3D) {
try {
pt=new PointObject(getC(), 0, 0);
pt.setIs3D(true);
pt.setFixed("x3D("+pt3DTortue.getName()+")","y3D("+pt3DTortue.getName()+")","z3D("+pt3DTortue.getName()+")");
pt.validCoordinates();
pt.setDefaults();
pt.setShowValue(false);
pt.setShowName(false);
pt.setType(3);
if (!ptName.equals("")) {
pt.setName(parseVariables(ptName));
}
addObject(pt);
pt3DSupport.setFixed("x3D("+pt.getName()+")","y3D("+pt.getName()+")","z3D("+pt.getName()+")");
pt3DSupport.validCoordinates();
pt3DSupport01.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport01.validCoordinates();
pt3DSupport02.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport02.validCoordinates();
pt3DSupport03.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport03.validCoordinates();
if (styloBaisse) {
so=new SegmentObject(getC(),pt3DTortue,pt);
so.validate();
so.setDefaults();
if (!segtName.equals("")) {
so.setName(parseVariables(segtName));
}
addObject(so);
}
else {
pt.setHidden(true);
}
for (int l=1;l<nbSteps;l++) {
pt.setFixed("x3D("+pt3DTortue.getName()+")-"+(l/nbSteps)+"*("+parseVariables(di)+")*x3D("+dirTortue3D1.getName()+")","y3D("+pt3DTortue.getName()+")-"+(l/nbSteps)+"*("+parseVariables(di)+")*y3D("+dirTortue3D1.getName()+")","z3D("+pt3DTortue.getName()+")-"+(l/nbSteps)+"*("+parseVariables(di)+")*z3D("+dirTortue3D1.getName()+")");
refreshZC();
}
pt.setFixed("x3D("+pt3DTortue.getName()+")-("+parseVariables(di)+")*x3D("+dirTortue3D1.getName()+")","y3D("+pt3DTortue.getName()+")-("+parseVariables(di)+")*y3D("+dirTortue3D1.getName()+")","z3D("+pt3DTortue.getName()+")-("+parseVariables(di)+")*z3D("+dirTortue3D1.getName()+")");
pt.validCoordinates();
refreshZC();
pt3DTortue=pt;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
ptSegmt[0]=pt.getName();
if (so==null) {
ptSegmt[1]="";
}
else {ptSegmt[1]=so.getName();}
return ptSegmt;
}
else {
try {
pt=new PointObject(getC(), 0, 0);
pt.setFixed("x("+ptTortue.getName()+")","y("+ptTortue.getName()+")");
pt.validCoordinates();
pt.setDefaults();
pt.setShowValue(false);
pt.setShowName(false);
pt.setType(3);
if (!ptName.equals("")) {
pt.setName(parseVariables(ptName));
}
addObject(pt);
ptSupport.setFixed("x("+pt.getName()+")","y("+pt.getName()+")");
ptSupport.validCoordinates();
ptSupport2.setFixed("x("+pt.getName()+")+x("+dirTortue.getName()+")","y("+pt.getName()+")+y("+dirTortue.getName()+")");
ptSupport2.validCoordinates();
if (styloBaisse) {
so=new SegmentObject(getC(),ptTortue,pt);
so.validate();
so.setDefaults();
if (!segtName.equals("")) {
so.setName(parseVariables(segtName));
}
addObject(so);
}
else {
pt.setHidden(true);
}
for (int l=1;l<nbSteps;l++) {
pt.setFixed("x("+ptTortue.getName()+")-"+(l/nbSteps)+"*("+parseVariables(di)+")*x("+dirTortue.getName()+")","y("+ptTortue.getName()+")-"+(l/nbSteps)+"*("+parseVariables(di)+")*y("+dirTortue.getName()+")");
refreshZC();
}
pt.setFixed("x("+ptTortue.getName()+")-("+parseVariables(di)+")*x("+dirTortue.getName()+")","y("+ptTortue.getName()+")-("+parseVariables(di)+")*y("+dirTortue.getName()+")");
pt.validCoordinates();
refreshZC();
ptTortue=pt;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
ptSegmt[0]=pt.getName();
if (so==null) {
ptSegmt[1]="";
}
else {ptSegmt[1]=so.getName();}
return ptSegmt;
}
}
}
public static String[] MoveBackward(String ptName, String segtName, String di) throws Exception {
PointObject pt=null;
SegmentObject so=null;
String[] ptSegmt=new String[2];
synchronized (getC()) {
if (segtName.equals("undefined")) {
di=ptName;
segtName=""; ptName="";
} else if (di.equals("undefined")) {
di=segtName;
segtName="";
}
if (turtleIs3D) {
try {
pt=new PointObject(getC(), 0, 0);
pt.setIs3D(true);
pt.setFixed("x3D("+pt3DTortue.getName()+")","y3D("+pt3DTortue.getName()+")","z3D("+pt3DTortue.getName()+")");
pt.validCoordinates();
pt.setDefaults();
pt.setShowValue(false);
pt.setShowName(false);
pt.setType(3);
if (!ptName.equals("")) {
pt.setName(parseVariables(ptName));
}
addObject(pt);
pt3DSupport.setFixed("x3D("+pt.getName()+")","y3D("+pt.getName()+")","z3D("+pt.getName()+")");
pt3DSupport.validCoordinates();
pt3DSupport01.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport01.validCoordinates();
pt3DSupport02.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport02.validCoordinates();
pt3DSupport03.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport03.validCoordinates();
if (styloBaisse) {
so=new SegmentObject(getC(),pt3DTortue,pt);
so.validate();
so.setDefaults();
if (!segtName.equals("")) {
so.setName(parseVariables(segtName));
}
addObject(so);
}
else {
pt.setHidden(true);
}
for (int l=1;l<nbSteps;l++) {
pt.setFixed("x3D("+pt3DTortue.getName()+")-"+(l/nbSteps)+"*("+parseVariables(di)+")*x3D("+dirTortue3D1.getName()+")","y3D("+pt3DTortue.getName()+")-"+(l/nbSteps)+"*("+parseVariables(di)+")*y3D("+dirTortue3D1.getName()+")","z3D("+pt3DTortue.getName()+")-"+(l/nbSteps)+"*("+parseVariables(di)+")*z3D("+dirTortue3D1.getName()+")");
refreshZC();
}
pt.setFixed("x3D("+pt3DTortue.getName()+")-("+parseVariables(di)+")*x3D("+dirTortue3D1.getName()+")","y3D("+pt3DTortue.getName()+")-("+parseVariables(di)+")*y3D("+dirTortue3D1.getName()+")","z3D("+pt3DTortue.getName()+")-("+parseVariables(di)+")*z3D("+dirTortue3D1.getName()+")");
pt.validCoordinates();
refreshZC();
pt3DTortue=pt;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
ptSegmt[0]=pt.getName();
if (so==null) {
ptSegmt[1]="";
}
else {ptSegmt[1]=so.getName();}
return ptSegmt;
}
else {
try {
pt=new PointObject(getC(), 0, 0);
pt.setFixed("x("+ptTortue.getName()+")","y("+ptTortue.getName()+")");
pt.validCoordinates();
pt.setDefaults();
pt.setShowValue(false);
pt.setShowName(false);
pt.setType(3);
if (!ptName.equals("")) {
pt.setName(parseVariables(ptName));
}
addObject(pt);
ptSupport.setFixed("x("+pt.getName()+")","y("+pt.getName()+")");
ptSupport.validCoordinates();
ptSupport2.setFixed("x("+pt.getName()+")+x("+dirTortue.getName()+")","y("+pt.getName()+")+y("+dirTortue.getName()+")");
ptSupport2.validCoordinates();
if (styloBaisse) {
so=new SegmentObject(getC(),ptTortue,pt);
so.validate();
so.setDefaults();
if (!segtName.equals("")) {
so.setName(parseVariables(segtName));
}
addObject(so);
}
else {
pt.setHidden(true);
}
for (int l=1;l<nbSteps;l++) {
pt.setFixed("x("+ptTortue.getName()+")-"+(l/nbSteps)+"*("+parseVariables(di)+")*x("+dirTortue.getName()+")","y("+ptTortue.getName()+")-"+(l/nbSteps)+"*("+parseVariables(di)+")*y("+dirTortue.getName()+")");
refreshZC();
}
pt.setFixed("x("+ptTortue.getName()+")-("+parseVariables(di)+")*x("+dirTortue.getName()+")","y("+ptTortue.getName()+")-("+parseVariables(di)+")*y("+dirTortue.getName()+")");
pt.validCoordinates();
refreshZC();
ptTortue=pt;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
ptSegmt[0]=pt.getName();
if (so==null) {
ptSegmt[1]="";
}
else {ptSegmt[1]=so.getName();}
return ptSegmt;
}
}
}
public static void TournerGauche(String ang) throws Exception {
if (turtleIs3D) {
synchronized (getC()) {
try {
pt3D1b=new PointObject(getC(),0,0);
pt3D1b.setIs3D(true);
pt3D1b.setHidden(true);
pt3D1b.setShowValue(false);
pt3D1b.setShowName(false);
pt3D1b.setFixed("x3D("+pt3D1.getName()+")","y3D("+pt3D1.getName()+")","z3D("+pt3D1.getName()+")");
addObject(pt3D1b);
pt3D2b=new PointObject(getC(),0,0);
pt3D2b.setIs3D(true);
pt3D2b.setHidden(true);
pt3D2b.setShowValue(false);
pt3D2b.setShowName(false);
pt3D2b.setFixed("x3D("+pt3D2.getName()+")","y3D("+pt3D2.getName()+")","z3D("+pt3D2.getName()+")");
addObject(pt3D2b);
pt3D1b.validCoordinates();
pt3D2b.validCoordinates();
dirTortue3D1= new VectorObject(getC(),pt3D0,pt3D1b);
dirTortue3D1.validate();
dirTortue3D1.setDefaults();
dirTortue3D1.setHidden(true);
addObject(dirTortue3D1);
dirTortue3D2= new VectorObject(getC(),pt3D0,pt3D2b);
dirTortue3D2.validate();
dirTortue3D2.setDefaults();
dirTortue3D2.setHidden(true);
addObject(dirTortue3D2);
pt3DSupport01.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport01.validCoordinates();
pt3DSupport02.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport02.validCoordinates();
pt3DSupport03.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport03.validCoordinates();
for (int l=1;l<nbSteps;l++) {
pt3D1b.setFixed("x3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")");
pt3D2b.setFixed("-x3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","-y3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","-z3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")");
refreshZC();
}
pt3D1b.setFixed("x3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")");
pt3D2b.setFixed("-x3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")","-y3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")","-z3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")");
pt3D1=pt3D1b;
pt3D2=pt3D2b;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
}
}
else {
synchronized (getC()) {
try {
ptO3=new PointObject(getC(),0,0);
ptO3.setHidden(true);
ptO3.setShowValue(false);
ptO3.setShowName(false);
addObject(ptO3);
ptO3.setFixed("x("+ptO2.getName()+")","x("+ptO2.getName()+")");
ptO3.validCoordinates();
dirTortue= new VectorObject(getC(),ptO,ptO3);
dirTortue.validate();
dirTortue.setDefaults();
dirTortue.setHidden(true);
addObject(dirTortue);
ptSupport2.setFixed("x("+ptTortue.getName()+")+x("+dirTortue.getName()+")","y("+ptTortue.getName()+")+y("+dirTortue.getName()+")");
ptSupport2.validCoordinates();
for (int l=1;l<nbSteps;l++) {
ptO3.setFixed("x("+ptO2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")-y("+ptO2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","x("+ptO2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+y("+ptO2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")");
refreshZC();
}
ptO3.setFixed("x("+ptO2.getName()+")*cos("+parseVariables(ang)+")-y("+ptO2.getName()+")*sin("+parseVariables(ang)+")","x("+ptO2.getName()+")*sin("+parseVariables(ang)+")+y("+ptO2.getName()+")*cos("+parseVariables(ang)+")");
ptO2=ptO3;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
}
}
}
public static void TurnLeft(String ang) throws Exception {
if (turtleIs3D) {
synchronized (getC()) {
try {
pt3D1b=new PointObject(getC(),0,0);
pt3D1b.setIs3D(true);
pt3D1b.setHidden(true);
pt3D1b.setShowValue(false);
pt3D1b.setShowName(false);
pt3D1b.setFixed("x3D("+pt3D1.getName()+")","y3D("+pt3D1.getName()+")","z3D("+pt3D1.getName()+")");
addObject(pt3D1b);
pt3D2b=new PointObject(getC(),0,0);
pt3D2b.setIs3D(true);
pt3D2b.setHidden(true);
pt3D2b.setShowValue(false);
pt3D2b.setShowName(false);
pt3D2b.setFixed("x3D("+pt3D2.getName()+")","y3D("+pt3D2.getName()+")","z3D("+pt3D2.getName()+")");
addObject(pt3D2b);
pt3D1b.validCoordinates();
pt3D2b.validCoordinates();
dirTortue3D1= new VectorObject(getC(),pt3D0,pt3D1b);
dirTortue3D1.validate();
dirTortue3D1.setDefaults();
dirTortue3D1.setHidden(true);
addObject(dirTortue3D1);
dirTortue3D2= new VectorObject(getC(),pt3D0,pt3D2b);
dirTortue3D2.validate();
dirTortue3D2.setDefaults();
dirTortue3D2.setHidden(true);
addObject(dirTortue3D2);
pt3DSupport01.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport01.validCoordinates();
pt3DSupport02.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport02.validCoordinates();
pt3DSupport03.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport03.validCoordinates();
for (int l=1;l<nbSteps;l++) {
pt3D1b.setFixed("x3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")");
pt3D2b.setFixed("-x3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","-y3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","-z3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")");
refreshZC();
}
pt3D1b.setFixed("x3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")");
pt3D2b.setFixed("-x3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")","-y3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")","-z3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")");
pt3D1=pt3D1b;
pt3D2=pt3D2b;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
}
}
else {
synchronized (getC()) {
try {
ptO3=new PointObject(getC(),0,0);
ptO3.setHidden(true);
ptO3.setShowValue(false);
ptO3.setShowName(false);
addObject(ptO3);
ptO3.setFixed("x("+ptO2.getName()+")","x("+ptO2.getName()+")");
ptO3.validCoordinates();
dirTortue= new VectorObject(getC(),ptO,ptO3);
dirTortue.validate();
dirTortue.setDefaults();
dirTortue.setHidden(true);
addObject(dirTortue);
ptSupport2.setFixed("x("+ptTortue.getName()+")+x("+dirTortue.getName()+")","y("+ptTortue.getName()+")+y("+dirTortue.getName()+")");
ptSupport2.validCoordinates();
for (int l=1;l<nbSteps;l++) {
ptO3.setFixed("x("+ptO2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")-y("+ptO2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","x("+ptO2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+y("+ptO2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")");
refreshZC();
}
ptO3.setFixed("x("+ptO2.getName()+")*cos("+parseVariables(ang)+")-y("+ptO2.getName()+")*sin("+parseVariables(ang)+")","x("+ptO2.getName()+")*sin("+parseVariables(ang)+")+y("+ptO2.getName()+")*cos("+parseVariables(ang)+")");
ptO2=ptO3;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
}
}
}
public static void TournerDroite(String ang) throws Exception {
if (turtleIs3D) {
synchronized (getC()) {
try {
pt3D1b=new PointObject(getC(),0,0);
pt3D1b.setIs3D(true);
pt3D1b.setHidden(true);
pt3D1b.setShowValue(false);
pt3D1b.setShowName(false);
addObject(pt3D1b);
pt3D1b.setFixed("x3D("+pt3D1.getName()+")","y3D("+pt3D1.getName()+")","z3D("+pt3D1.getName()+")");
pt3D2b=new PointObject(getC(),0,0);
pt3D2b.setIs3D(true);
pt3D2b.setHidden(true);
pt3D2b.setShowValue(false);
pt3D2b.setShowName(false);
addObject(pt3D2b);
pt3D2b.setFixed("x3D("+pt3D2.getName()+")","y3D("+pt3D2.getName()+")","z3D("+pt3D2.getName()+")");
pt3D1b.validCoordinates();
pt3D2b.validCoordinates();
dirTortue3D1= new VectorObject(getC(),pt3D0,pt3D1b);
dirTortue3D1.validate();
dirTortue3D1.setDefaults();
dirTortue3D1.setHidden(true);
addObject(dirTortue3D1);
dirTortue3D2= new VectorObject(getC(),pt3D0,pt3D2b);
dirTortue3D2.validate();
dirTortue3D2.setDefaults();
dirTortue3D2.setHidden(true);
addObject(dirTortue3D2);
pt3DSupport01.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport01.validCoordinates();
pt3DSupport02.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport02.validCoordinates();
pt3DSupport03.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport03.validCoordinates();
for (int l=1;l<nbSteps;l++) {
pt3D1b.setFixed("x3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")-x3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")-y3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")-z3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")");
pt3D2b.setFixed("x3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")");
refreshZC();
}
pt3D1b.setFixed("x3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")-x3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")-y3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")-z3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")");
pt3D2b.setFixed("x3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")");
pt3D1=pt3D1b;
pt3D2=pt3D2b;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
}
}
else {
synchronized (getC()) {
try {
ptO3=new PointObject(getC(),0,0);
ptO3.setHidden(true);
addObject(ptO3);
ptO3.setFixed("x("+ptO2.getName()+")","y("+ptO2.getName()+")");
ptO3.validCoordinates();
dirTortue= new VectorObject(getC(),ptO,ptO3);
dirTortue.validate();
dirTortue.setDefaults();
dirTortue.setHidden(true);
addObject(dirTortue);
ptSupport2.setFixed("x("+ptTortue.getName()+")+x("+dirTortue.getName()+")","y("+ptTortue.getName()+")+y("+dirTortue.getName()+")");
ptSupport2.validCoordinates();
for (int l=1;l<nbSteps;l++) {
ptO3.setFixed("x("+ptO2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")+y("+ptO2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","-x("+ptO2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+y("+ptO2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")");
refreshZC();
}
ptO3.setFixed("x("+ptO2.getName()+")*cos("+parseVariables(ang)+")+y("+ptO2.getName()+")*sin("+parseVariables(ang)+")","-x("+ptO2.getName()+")*sin("+parseVariables(ang)+")+y("+ptO2.getName()+")*cos("+parseVariables(ang)+")");
ptO2=ptO3;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
}
}
}
public static void TurnRight(String ang) throws Exception {
if (turtleIs3D) {
synchronized (getC()) {
try {
pt3D1b=new PointObject(getC(),0,0);
pt3D1b.setIs3D(true);
pt3D1b.setHidden(true);
pt3D1b.setShowValue(false);
pt3D1b.setShowName(false);
addObject(pt3D1b);
pt3D1b.setFixed("x3D("+pt3D1.getName()+")","y3D("+pt3D1.getName()+")","z3D("+pt3D1.getName()+")");
pt3D2b=new PointObject(getC(),0,0);
pt3D2b.setIs3D(true);
pt3D2b.setHidden(true);
pt3D2b.setShowValue(false);
pt3D2b.setShowName(false);
addObject(pt3D2b);
pt3D2b.setFixed("x3D("+pt3D2.getName()+")","y3D("+pt3D2.getName()+")","z3D("+pt3D2.getName()+")");
pt3D1b.validCoordinates();
pt3D2b.validCoordinates();
dirTortue3D1= new VectorObject(getC(),pt3D0,pt3D1b);
dirTortue3D1.validate();
dirTortue3D1.setDefaults();
dirTortue3D1.setHidden(true);
addObject(dirTortue3D1);
dirTortue3D2= new VectorObject(getC(),pt3D0,pt3D2b);
dirTortue3D2.validate();
dirTortue3D2.setDefaults();
dirTortue3D2.setHidden(true);
addObject(dirTortue3D2);
pt3DSupport01.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport01.validCoordinates();
pt3DSupport02.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport02.validCoordinates();
pt3DSupport03.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport03.validCoordinates();
for (int l=1;l<nbSteps;l++) {
pt3D1b.setFixed("x3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")-x3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")-y3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")-z3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")");
pt3D2b.setFixed("x3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")");
refreshZC();
}
pt3D1b.setFixed("x3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")-x3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")-y3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")-z3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")");
pt3D2b.setFixed("x3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")");
pt3D1=pt3D1b;
pt3D2=pt3D2b;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
}
}
else {
synchronized (getC()) {
try {
ptO3=new PointObject(getC(),0,0);
ptO3.setHidden(true);
addObject(ptO3);
ptO3.setFixed("x("+ptO2.getName()+")","y("+ptO2.getName()+")");
ptO3.validCoordinates();
dirTortue= new VectorObject(getC(),ptO,ptO3);
dirTortue.validate();
dirTortue.setDefaults();
dirTortue.setHidden(true);
addObject(dirTortue);
ptSupport2.setFixed("x("+ptTortue.getName()+")+x("+dirTortue.getName()+")","y("+ptTortue.getName()+")+y("+dirTortue.getName()+")");
ptSupport2.validCoordinates();
for (int l=1;l<nbSteps;l++) {
ptO3.setFixed("x("+ptO2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")+y("+ptO2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","-x("+ptO2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+y("+ptO2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")");
refreshZC();
}
ptO3.setFixed("x("+ptO2.getName()+")*cos("+parseVariables(ang)+")+y("+ptO2.getName()+")*sin("+parseVariables(ang)+")","-x("+ptO2.getName()+")*sin("+parseVariables(ang)+")+y("+ptO2.getName()+")*cos("+parseVariables(ang)+")");
ptO2=ptO3;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
}
}
}
public static void PivoterGauche(String ang) throws Exception {
if (turtleIs3D) {
synchronized (getC()) {
try {
pt3D3b=new PointObject(getC(),0,0);
pt3D3b.setIs3D(true);
pt3D3b.setHidden(true);
pt3D3b.setShowValue(false);
pt3D3b.setShowName(false);
addObject(pt3D3b);
pt3D3b.setFixed("x3D("+pt3D3.getName()+")","y3D("+pt3D3.getName()+")","z3D("+pt3D3.getName()+")");
pt3D2b=new PointObject(getC(),0,0);
pt3D2b.setIs3D(true);
pt3D2b.setHidden(true);
pt3D2b.setShowValue(false);
pt3D2b.setShowName(false);
addObject(pt3D2b);
pt3D2b.setFixed("x3D("+pt3D2.getName()+")","y3D("+pt3D2.getName()+")","z3D("+pt3D2.getName()+")");
pt3D3b.validCoordinates();
pt3D2b.validCoordinates();
dirTortue3D3= new VectorObject(getC(),pt3D0,pt3D3b);
dirTortue3D3.validate();
dirTortue3D3.setDefaults();
dirTortue3D3.setHidden(true);
addObject(dirTortue3D3);
dirTortue3D2= new VectorObject(getC(),pt3D0,pt3D2b);
dirTortue3D2.validate();
dirTortue3D2.setDefaults();
dirTortue3D2.setHidden(true);
addObject(dirTortue3D2);
pt3DSupport03.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport03.validCoordinates();
pt3DSupport02.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport02.validCoordinates();
pt3DSupport01.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport01.validCoordinates();
for (int l=1;l<nbSteps;l++) {
pt3D3b.setFixed("x3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","y3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","z3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")");
pt3D2b.setFixed("-x3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","-y3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","-z3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")");
refreshZC();
}
pt3D3b.setFixed("x3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")","y3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")","z3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")");
pt3D2b.setFixed("-x3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")","-y3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")","-z3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")");
pt3D3=pt3D3b;
pt3D2=pt3D2b;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
}
}
else {
return;
}
}
public static void RollLeft(String ang) throws Exception {
if (turtleIs3D) {
synchronized (getC()) {
try {
pt3D3b=new PointObject(getC(),0,0);
pt3D3b.setIs3D(true);
pt3D3b.setHidden(true);
pt3D3b.setShowValue(false);
pt3D3b.setShowName(false);
addObject(pt3D3b);
pt3D3b.setFixed("x3D("+pt3D3.getName()+")","y3D("+pt3D3.getName()+")","z3D("+pt3D3.getName()+")");
pt3D2b=new PointObject(getC(),0,0);
pt3D2b.setIs3D(true);
pt3D2b.setHidden(true);
pt3D2b.setShowValue(false);
pt3D2b.setShowName(false);
addObject(pt3D2b);
pt3D2b.setFixed("x3D("+pt3D2.getName()+")","y3D("+pt3D2.getName()+")","z3D("+pt3D2.getName()+")");
pt3D3b.validCoordinates();
pt3D2b.validCoordinates();
dirTortue3D3= new VectorObject(getC(),pt3D0,pt3D3b);
dirTortue3D3.validate();
dirTortue3D3.setDefaults();
dirTortue3D3.setHidden(true);
addObject(dirTortue3D3);
dirTortue3D2= new VectorObject(getC(),pt3D0,pt3D2b);
dirTortue3D2.validate();
dirTortue3D2.setDefaults();
dirTortue3D2.setHidden(true);
addObject(dirTortue3D2);
pt3DSupport03.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport03.validCoordinates();
pt3DSupport02.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport02.validCoordinates();
pt3DSupport01.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport01.validCoordinates();
for (int l=1;l<nbSteps;l++) {
pt3D3b.setFixed("x3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","y3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","z3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")");
pt3D2b.setFixed("-x3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","-y3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","-z3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")");
refreshZC();
}
pt3D3b.setFixed("x3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")","y3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")","z3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")");
pt3D2b.setFixed("-x3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")","-y3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")","-z3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")");
pt3D3=pt3D3b;
pt3D2=pt3D2b;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
}
}
else {
return;
}
}
public static void PivoterDroite(String ang) throws Exception {
if (turtleIs3D) {
synchronized (getC()) {
try {
pt3D3b=new PointObject(getC(),0,0);
pt3D3b.setIs3D(true);
pt3D3b.setHidden(true);
pt3D3b.setShowValue(false);
pt3D3b.setShowName(false);
addObject(pt3D3b);
pt3D3b.setFixed("x3D("+pt3D3.getName()+")","y3D("+pt3D3.getName()+")","z3D("+pt3D3.getName()+")");
pt3D2b=new PointObject(getC(),0,0);
pt3D2b.setIs3D(true);
pt3D2b.setHidden(true);
pt3D2b.setShowValue(false);
pt3D2b.setShowName(false);
addObject(pt3D2b);
pt3D2b.setFixed("x3D("+pt3D2.getName()+")","y3D("+pt3D2.getName()+")","z3D("+pt3D2.getName()+")");
pt3D3b.validCoordinates();
pt3D2b.validCoordinates();
dirTortue3D3= new VectorObject(getC(),pt3D0,pt3D3b);
dirTortue3D3.validate();
dirTortue3D3.setDefaults();
dirTortue3D3.setHidden(true);
addObject(dirTortue3D3);
dirTortue3D2= new VectorObject(getC(),pt3D0,pt3D2b);
dirTortue3D2.validate();
dirTortue3D2.setDefaults();
dirTortue3D2.setHidden(true);
addObject(dirTortue3D2);
pt3DSupport03.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport03.validCoordinates();
pt3DSupport02.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport02.validCoordinates();
pt3DSupport01.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport01.validCoordinates();
for (int l=1;l<nbSteps;l++) {
pt3D3b.setFixed("x3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")-x3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","y3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")-y3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","z3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")-z3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")");
pt3D2b.setFixed("x3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","y3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","z3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")");
refreshZC();
}
pt3D3b.setFixed("x3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")-x3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")","y3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")-y3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")","z3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")-z3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")");
pt3D2b.setFixed("x3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")","y3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")","z3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")");
pt3D3=pt3D3b;
pt3D2=pt3D2b;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
}
}
else {
return;
}
}
public static void RollRight(String ang) throws Exception {
if (turtleIs3D) {
synchronized (getC()) {
try {
pt3D3b=new PointObject(getC(),0,0);
pt3D3b.setIs3D(true);
pt3D3b.setHidden(true);
pt3D3b.setShowValue(false);
pt3D3b.setShowName(false);
addObject(pt3D3b);
pt3D3b.setFixed("x3D("+pt3D3.getName()+")","y3D("+pt3D3.getName()+")","z3D("+pt3D3.getName()+")");
pt3D2b=new PointObject(getC(),0,0);
pt3D2b.setIs3D(true);
pt3D2b.setHidden(true);
pt3D2b.setShowValue(false);
pt3D2b.setShowName(false);
addObject(pt3D2b);
pt3D2b.setFixed("x3D("+pt3D2.getName()+")","y3D("+pt3D2.getName()+")","z3D("+pt3D2.getName()+")");
pt3D3b.validCoordinates();
pt3D2b.validCoordinates();
dirTortue3D3= new VectorObject(getC(),pt3D0,pt3D3b);
dirTortue3D3.validate();
dirTortue3D3.setDefaults();
dirTortue3D3.setHidden(true);
addObject(dirTortue3D3);
dirTortue3D2= new VectorObject(getC(),pt3D0,pt3D2b);
dirTortue3D2.validate();
dirTortue3D2.setDefaults();
dirTortue3D2.setHidden(true);
addObject(dirTortue3D2);
pt3DSupport03.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport03.validCoordinates();
pt3DSupport02.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport02.validCoordinates();
pt3DSupport01.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport01.validCoordinates();
for (int l=1;l<nbSteps;l++) {
pt3D3b.setFixed("x3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")-x3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","y3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")-y3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","z3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")-z3D("+pt3D2.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")");
pt3D2b.setFixed("x3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","y3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","z3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")");
refreshZC();
}
pt3D3b.setFixed("x3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")-x3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")","y3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")-y3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")","z3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")-z3D("+pt3D2.getName()+")*sin("+parseVariables(ang)+")");
pt3D2b.setFixed("x3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")+x3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")","y3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")+y3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")","z3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")+z3D("+pt3D2.getName()+")*cos("+parseVariables(ang)+")");
pt3D3=pt3D3b;
pt3D2=pt3D2b;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
}
}
else {
return;
}
}
public static void PivoterHaut(String ang) throws Exception {
if (turtleIs3D) {
synchronized (getC()) {
try {
pt3D1b=new PointObject(getC(),0,0);
pt3D1b.setIs3D(true);
pt3D1b.setHidden(true);
pt3D1b.setShowValue(false);
pt3D1b.setShowName(false);
addObject(pt3D1b);
pt3D1b.setFixed("x3D("+pt3D1.getName()+")","y3D("+pt3D1.getName()+")","z3D("+pt3D1.getName()+")");
pt3D3b=new PointObject(getC(),0,0);
pt3D3b.setIs3D(true);
pt3D3b.setHidden(true);
pt3D3b.setShowValue(false);
pt3D3b.setShowName(false);
addObject(pt3D3b);
pt3D3b.setFixed("x3D("+pt3D3.getName()+")","y3D("+pt3D3.getName()+")","z3D("+pt3D3.getName()+")");
pt3D1b.validCoordinates();
pt3D3b.validCoordinates();
dirTortue3D1= new VectorObject(getC(),pt3D0,pt3D1b);
dirTortue3D1.validate();
dirTortue3D1.setDefaults();
dirTortue3D1.setHidden(true);
addObject(dirTortue3D1);
dirTortue3D3= new VectorObject(getC(),pt3D0,pt3D3b);
dirTortue3D3.validate();
dirTortue3D3.setDefaults();
dirTortue3D3.setHidden(true);
addObject(dirTortue3D3);
pt3DSupport01.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport01.validCoordinates();
pt3DSupport02.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport02.validCoordinates();
pt3DSupport03.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport03.validCoordinates();
for (int l=1;l<nbSteps;l++) {
pt3D1b.setFixed("x3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")+x3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")+y3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")+z3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")");
pt3D3b.setFixed("-x3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+x3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","-y3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+y3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","-z3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+z3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")");
refreshZC();
}
pt3D1b.setFixed("x3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")+x3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")+y3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")+z3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")");
pt3D3b.setFixed("-x3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+x3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")","-y3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+y3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")","-z3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+z3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")");
pt3D1=pt3D1b;
pt3D3=pt3D3b;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
}
}
else {
return;
}
}
public static void PitchUp(String ang) throws Exception {
if (turtleIs3D) {
synchronized (getC()) {
try {
pt3D1b=new PointObject(getC(),0,0);
pt3D1b.setIs3D(true);
pt3D1b.setHidden(true);
pt3D1b.setShowValue(false);
pt3D1b.setShowName(false);
addObject(pt3D1b);
pt3D1b.setFixed("x3D("+pt3D1.getName()+")","y3D("+pt3D1.getName()+")","z3D("+pt3D1.getName()+")");
pt3D3b=new PointObject(getC(),0,0);
pt3D3b.setIs3D(true);
pt3D3b.setHidden(true);
pt3D3b.setShowValue(false);
pt3D3b.setShowName(false);
addObject(pt3D3b);
pt3D3b.setFixed("x3D("+pt3D3.getName()+")","y3D("+pt3D3.getName()+")","z3D("+pt3D3.getName()+")");
pt3D1b.validCoordinates();
pt3D3b.validCoordinates();
dirTortue3D1= new VectorObject(getC(),pt3D0,pt3D1b);
dirTortue3D1.validate();
dirTortue3D1.setDefaults();
dirTortue3D1.setHidden(true);
addObject(dirTortue3D1);
dirTortue3D3= new VectorObject(getC(),pt3D0,pt3D3b);
dirTortue3D3.validate();
dirTortue3D3.setDefaults();
dirTortue3D3.setHidden(true);
addObject(dirTortue3D3);
pt3DSupport01.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport01.validCoordinates();
pt3DSupport02.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport02.validCoordinates();
pt3DSupport03.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport03.validCoordinates();
for (int l=1;l<nbSteps;l++) {
pt3D1b.setFixed("x3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")+x3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")+y3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")+z3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")");
pt3D3b.setFixed("-x3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+x3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","-y3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+y3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","-z3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+z3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")");
refreshZC();
}
pt3D1b.setFixed("x3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")+x3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")+y3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")+z3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")");
pt3D3b.setFixed("-x3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+x3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")","-y3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+y3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")","-z3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+z3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")");
pt3D1=pt3D1b;
pt3D3=pt3D3b;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
}
}
else {
return;
}
}
public static void PivoterBas(String ang) throws Exception {
if (turtleIs3D) {
synchronized (getC()) {
try {
pt3D1b=new PointObject(getC(),0,0);
pt3D1b.setIs3D(true);
pt3D1b.setHidden(true);
pt3D1b.setShowValue(false);
pt3D1b.setShowName(false);
addObject(pt3D1b);
pt3D1b.setFixed("x3D("+pt3D1.getName()+")","y3D("+pt3D1.getName()+")","z3D("+pt3D1.getName()+")");
pt3D3b=new PointObject(getC(),0,0);
pt3D3b.setIs3D(true);
pt3D3b.setHidden(true);
pt3D3b.setShowValue(false);
pt3D3b.setShowName(false);
addObject(pt3D3b);
pt3D3b.setFixed("x3D("+pt3D3.getName()+")","y3D("+pt3D3.getName()+")","z3D("+pt3D3.getName()+")");
pt3D1b.validCoordinates();
pt3D3b.validCoordinates();
dirTortue3D1= new VectorObject(getC(),pt3D0,pt3D1b);
dirTortue3D1.validate();
dirTortue3D1.setDefaults();
dirTortue3D1.setHidden(true);
addObject(dirTortue3D1);
dirTortue3D3= new VectorObject(getC(),pt3D0,pt3D3b);
dirTortue3D3.validate();
dirTortue3D3.setDefaults();
dirTortue3D3.setHidden(true);
addObject(dirTortue3D3);
pt3DSupport01.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport01.validCoordinates();
pt3DSupport02.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport02.validCoordinates();
pt3DSupport03.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport03.validCoordinates();
for (int l=1;l<nbSteps;l++) {
pt3D1b.setFixed("x3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")-x3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")-y3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")-z3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")");
pt3D3b.setFixed("x3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+x3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+y3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+z3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")");
refreshZC();
}
pt3D1b.setFixed("x3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")-x3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")-y3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")-z3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")");
pt3D3b.setFixed("x3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+x3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+y3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+z3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")");
pt3D1=pt3D1b;
pt3D3=pt3D3b;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
}
}
else {
return;
}
}
public static void PitchDown(String ang) throws Exception {
if (turtleIs3D) {
synchronized (getC()) {
try {
pt3D1b=new PointObject(getC(),0,0);
pt3D1b.setIs3D(true);
pt3D1b.setHidden(true);
pt3D1b.setShowValue(false);
pt3D1b.setShowName(false);
addObject(pt3D1b);
pt3D1b.setFixed("x3D("+pt3D1.getName()+")","y3D("+pt3D1.getName()+")","z3D("+pt3D1.getName()+")");
pt3D3b=new PointObject(getC(),0,0);
pt3D3b.setIs3D(true);
pt3D3b.setHidden(true);
pt3D3b.setShowValue(false);
pt3D3b.setShowName(false);
addObject(pt3D3b);
pt3D3b.setFixed("x3D("+pt3D3.getName()+")","y3D("+pt3D3.getName()+")","z3D("+pt3D3.getName()+")");
pt3D1b.validCoordinates();
pt3D3b.validCoordinates();
dirTortue3D1= new VectorObject(getC(),pt3D0,pt3D1b);
dirTortue3D1.validate();
dirTortue3D1.setDefaults();
dirTortue3D1.setHidden(true);
addObject(dirTortue3D1);
dirTortue3D3= new VectorObject(getC(),pt3D0,pt3D3b);
dirTortue3D3.validate();
dirTortue3D3.setDefaults();
dirTortue3D3.setHidden(true);
addObject(dirTortue3D3);
pt3DSupport01.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport01.validCoordinates();
pt3DSupport02.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport02.validCoordinates();
pt3DSupport03.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport03.validCoordinates();
for (int l=1;l<nbSteps;l++) {
pt3D1b.setFixed("x3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")-x3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")-y3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")-z3D("+pt3D3.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")");
pt3D3b.setFixed("x3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+x3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+y3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*sin("+(l/nbSteps)+"*"+parseVariables(ang)+")+z3D("+pt3D3.getName()+")*cos("+(l/nbSteps)+"*"+parseVariables(ang)+")");
refreshZC();
}
pt3D1b.setFixed("x3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")-x3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")-y3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*cos("+parseVariables(ang)+")-z3D("+pt3D3.getName()+")*sin("+parseVariables(ang)+")");
pt3D3b.setFixed("x3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+x3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")","y3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+y3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")","z3D("+pt3D1.getName()+")*sin("+parseVariables(ang)+")+z3D("+pt3D3.getName()+")*cos("+parseVariables(ang)+")");
pt3D1=pt3D1b;
pt3D3=pt3D3b;
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
}
}
else {
return;
}
}
public static void MontrerTortue(){
if (turtleIs3D) {
pp3D.setHidden(false);
}
else {
pp1.setHidden(false);
pp2.setHidden(false);
pp3.setHidden(false);
pp4.setHidden(false);
ttete.setHidden(false);
ccara.setHidden(false);
}
}
public static void ShowTurtle(){
if (turtleIs3D) {
pp3D.setHidden(false);
}
else {
pp1.setHidden(false);
pp2.setHidden(false);
pp3.setHidden(false);
pp4.setHidden(false);
ttete.setHidden(false);
ccara.setHidden(false);
}
}
public static void CacherTortue(){
if (turtleIs3D) {
pp3D.setHidden(true);
}
else {
pp1.setHidden(true);
pp2.setHidden(true);
pp3.setHidden(true);
pp4.setHidden(true);
ttete.setHidden(true);
ccara.setHidden(true);
}
}
public static void HideTurtle(){
if (turtleIs3D) {
pp3D.setHidden(true);
}
else {
pp1.setHidden(true);
pp2.setHidden(true);
pp3.setHidden(true);
pp4.setHidden(true);
ttete.setHidden(true);
ccara.setHidden(true);
}
}
public static void OrienterTortue(String ang){
if (turtleIs3D) {
synchronized (getC()) {
pt3D1=new PointObject(getC(),0,0);
pt3D2=new PointObject(getC(),0,0);
pt3D3=new PointObject(getC(),0,0);
addObject(pt3D1);
addObject(pt3D2);
addObject(pt3D3);
pt3D1.setIs3D(true);
pt3D2.setIs3D(true);
pt3D3.setIs3D(true);
pt3D1.setSuperHidden(true);
pt3D2.setSuperHidden(true);
pt3D3.setSuperHidden(true);
pt3D1.setFixed("cos("+parseVariables(ang)+")","sin("+parseVariables(ang)+")","0");
pt3D2.setFixed("-sin("+parseVariables(ang)+")","cos("+parseVariables(ang)+")","0");
pt3D3.setFixed("0","0","1");
dirTortue3D1= new VectorObject(getC(),pt3D0,pt3D1);
dirTortue3D2= new VectorObject(getC(),pt3D0,pt3D2);
dirTortue3D3= new VectorObject(getC(),pt3D0,pt3D3);
addObject(dirTortue3D1);
addObject(dirTortue3D2);
addObject(dirTortue3D3);
dirTortue3D1.setDefaults();
dirTortue3D2.setDefaults();
dirTortue3D3.setDefaults();
dirTortue3D1.setHidden(true);
dirTortue3D2.setHidden(true);
dirTortue3D3.setHidden(true);
pt3DSupport01.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport02.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport03.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport.validate();
pt3DSupport01.validate();
pt3DSupport02.validate();
pt3DSupport03.validate();
dirTortueVisu3D1.validate();
dirTortueVisu3D2.validate();
dirTortueVisu3D3.validate();
}
}
else {
synchronized (getC()) {
ptO2=new PointObject(getC(),0,1);
addObject(ptO2);
ptO2.setSuperHidden(true);
ptO2.setFixed("cos("+parseVariables(ang)+")","sin("+parseVariables(ang)+")");
dirTortue= new VectorObject(getC(),ptO,ptO2);
dirTortue.validate();
dirTortue.setDefaults();
dirTortue.setHidden(true);
addObject(dirTortue);
ptSupport2.setFixed("x("+ptTortue.getName()+")+x("+dirTortue.getName()+")","y("+ptTortue.getName()+")+y("+dirTortue.getName()+")");
ptTortue2.setFixed("x("+ptTortue.getName()+")+x("+dirTortue.getName()+")","y("+ptTortue.getName()+")+y("+dirTortue.getName()+")");
ptTortue2.validate();
dirTortueVisu.validate();
}
}
}
public static void OrientateTurtle(String ang){
if (turtleIs3D) {
synchronized (getC()) {
pt3D1=new PointObject(getC(),0,0);
pt3D2=new PointObject(getC(),0,0);
pt3D3=new PointObject(getC(),0,0);
addObject(pt3D1);
addObject(pt3D2);
addObject(pt3D3);
pt3D1.setIs3D(true);
pt3D2.setIs3D(true);
pt3D3.setIs3D(true);
pt3D1.setSuperHidden(true);
pt3D2.setSuperHidden(true);
pt3D3.setSuperHidden(true);
pt3D1.setFixed("cos("+parseVariables(ang)+")","sin("+parseVariables(ang)+")","0");
pt3D2.setFixed("-sin("+parseVariables(ang)+")","cos("+parseVariables(ang)+")","0");
pt3D3.setFixed("0","0","1");
dirTortue3D1= new VectorObject(getC(),pt3D0,pt3D1);
dirTortue3D2= new VectorObject(getC(),pt3D0,pt3D2);
dirTortue3D3= new VectorObject(getC(),pt3D0,pt3D3);
addObject(dirTortue3D1);
addObject(dirTortue3D2);
addObject(dirTortue3D3);
dirTortue3D1.setDefaults();
dirTortue3D2.setDefaults();
dirTortue3D3.setDefaults();
dirTortue3D1.setHidden(true);
dirTortue3D2.setHidden(true);
dirTortue3D3.setHidden(true);
pt3DSupport01.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport02.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport03.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport.validate();
pt3DSupport01.validate();
pt3DSupport02.validate();
pt3DSupport03.validate();
dirTortueVisu3D1.validate();
dirTortueVisu3D2.validate();
dirTortueVisu3D3.validate();
}
}
else {
synchronized (getC()) {
ptO2=new PointObject(getC(),0,1);
addObject(ptO2);
ptO2.setSuperHidden(true);
ptO2.setFixed("cos("+parseVariables(ang)+")","sin("+parseVariables(ang)+")");
dirTortue= new VectorObject(getC(),ptO,ptO2);
dirTortue.validate();
dirTortue.setDefaults();
dirTortue.setHidden(true);
addObject(dirTortue);
ptSupport2.setFixed("x("+ptTortue.getName()+")+x("+dirTortue.getName()+")","y("+ptTortue.getName()+")+y("+dirTortue.getName()+")");
ptTortue2.setFixed("x("+ptTortue.getName()+")+x("+dirTortue.getName()+")","y("+ptTortue.getName()+")+y("+dirTortue.getName()+")");
ptTortue2.validate();
dirTortueVisu.validate();
}
}
}
public static void Viser(String pointName, String pointName2) throws Exception{
ConstructionObject o=getC().find(parseVariables(pointName));
if (o==null) {
throw new Exception(Loc("notfound"));
}
if (!(o instanceof PointObject)) {
throw new Exception(Loc("notgoodtype"));
}
if (!turtleIs3D) {
synchronized (getC()) {
ptO2=new PointObject(getC(),0,1);
addObject(ptO2);
ptO2.setSuperHidden(true);
ptO2.setFixed("(x("+pointName+")-x("+ptTortue.getName()+"))/d("+pointName+","+ptTortue.getName()+")","(y("+pointName+")-y("+ptTortue.getName()+"))/d("+pointName+","+ptTortue.getName()+")");
dirTortue= new VectorObject(getC(),ptO,ptO2);
dirTortue.validate();
dirTortue.setDefaults();
dirTortue.setHidden(true);
addObject(dirTortue);
ptSupport2.setFixed("x("+ptTortue.getName()+")+x("+dirTortue.getName()+")","y("+ptTortue.getName()+")+y("+dirTortue.getName()+")");
ptTortue2.setFixed("x("+ptTortue.getName()+")+x("+dirTortue.getName()+")","y("+ptTortue.getName()+")+y("+dirTortue.getName()+")");
ptTortue2.validate();
dirTortueVisu.validate();
}
}
else {
if (pointName2.equals("undefined")) {
synchronized (getC()) {
oldpt3D2=pt3D2;
oldpt3D3=pt3D3;
pt3D1=new PointObject(getC(),0,0);
pt3D2=new PointObject(getC(),0,0);
pt3D3=new PointObject(getC(),0,0);
addObject(pt3D1);
addObject(pt3D2);
addObject(pt3D3);
pt3D1.setIs3D(true);
pt3D2.setIs3D(true);
pt3D3.setIs3D(true);
pt3D1.setSuperHidden(true);
pt3D2.setSuperHidden(true);
pt3D3.setSuperHidden(true);
pt3D2bis=new PointObject(getC(),0,0);
pt3D3bis=new PointObject(getC(),0,0);
addObject(pt3D2bis);
addObject(pt3D3bis);
pt3D2bis.setIs3D(true);
pt3D3bis.setIs3D(true);
pt3D2bis.setSuperHidden(true);
pt3D3bis.setSuperHidden(true);
pt3D1.setFixed("(x3D("+pointName+")-x3D("+pt3DTortue.getName()+"))/d3D("+pointName+","+pt3DTortue.getName()+")","(y3D("+pointName+")-y3D("+pt3DTortue.getName()+"))/d3D("+pointName+","+pt3DTortue.getName()+")","(z3D("+pointName+")-z3D("+pt3DTortue.getName()+"))/d3D("+pointName+","+pt3DTortue.getName()+")");
pt3D2bis.setFixed("y3D("+oldpt3D3.getName()+")*z3D("+pt3D1.getName()+")-y3D("+pt3D1.getName()+")*z3D("+oldpt3D3.getName()+")","z3D("+oldpt3D3.getName()+")*x3D("+pt3D1.getName()+")-z3D("+pt3D1.getName()+")*x3D("+oldpt3D3.getName()+")","x3D("+oldpt3D3.getName()+")*y3D("+pt3D1.getName()+")-x3D("+pt3D1.getName()+")*y3D("+oldpt3D3.getName()+")");
pt3D3bis.setFixed("y3D("+pt3D1.getName()+")*z3D("+oldpt3D2.getName()+")-y3D("+oldpt3D2.getName()+")*z3D("+pt3D1.getName()+")","z3D("+pt3D1.getName()+")*x3D("+oldpt3D2.getName()+")-z3D("+oldpt3D2.getName()+")*x3D("+pt3D1.getName()+")","x3D("+pt3D1.getName()+")*y3D("+oldpt3D2.getName()+")-x3D("+oldpt3D2.getName()+")*y3D("+pt3D1.getName()+")");
pt3D2.setFixed("x3D("+pt3D2bis.getName()+")/d3D("+pt3D2bis.getName()+","+pt3D0.getName()+")","y3D("+pt3D2bis.getName()+")/d3D("+pt3D2bis.getName()+","+pt3D0.getName()+")","z3D("+pt3D2bis.getName()+")/d3D("+pt3D2bis.getName()+","+pt3D0.getName()+")");
pt3D3.setFixed("x3D("+pt3D3bis.getName()+")/d3D("+pt3D3bis.getName()+","+pt3D0.getName()+")","y3D("+pt3D3bis.getName()+")/d3D("+pt3D3bis.getName()+","+pt3D0.getName()+")","z3D("+pt3D3bis.getName()+")/d3D("+pt3D3bis.getName()+","+pt3D0.getName()+")");
dirTortue3D1= new VectorObject(getC(),pt3D0,pt3D1);
dirTortue3D2= new VectorObject(getC(),pt3D0,pt3D2);
dirTortue3D3= new VectorObject(getC(),pt3D0,pt3D3);
addObject(dirTortue3D1);
addObject(dirTortue3D2);
addObject(dirTortue3D3);
dirTortue3D1.setDefaults();
dirTortue3D2.setDefaults();
dirTortue3D3.setDefaults();
dirTortue3D1.setHidden(true);
dirTortue3D2.setHidden(true);
dirTortue3D3.setHidden(true);
pt3DSupport01.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport02.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport03.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport.validate();
pt3DSupport01.validate();
pt3DSupport02.validate();
pt3DSupport03.validate();
dirTortueVisu3D1.validate();
dirTortueVisu3D2.validate();
dirTortueVisu3D3.validate();
}
}
else {
ConstructionObject p=getC().find(parseVariables(pointName2));
if (p==null) {
throw new Exception(Loc("notfound"));
}
if (!(p instanceof PointObject)) {
throw new Exception(Loc("notgoodtype"));
}
synchronized (getC()) {
oldpt3D2=pt3D2;
oldpt3D3=pt3D3;
pt3D1=new PointObject(getC(),0,0);
pt3D2=new PointObject(getC(),0,0);
pt3D3=new PointObject(getC(),0,0);
addObject(pt3D1);
addObject(pt3D2);
addObject(pt3D3);
pt3D1.setIs3D(true);
pt3D2.setIs3D(true);
pt3D3.setIs3D(true);
pt3D1.setSuperHidden(true);
pt3D2.setSuperHidden(true);
pt3D3.setSuperHidden(true);
pt3D2bis=new PointObject(getC(),0,0);
pt3D3bis=new PointObject(getC(),0,0);
npoint=new PointObject(getC(),0,0);
addObject(pt3D2bis);
addObject(pt3D3bis);
addObject(npoint);
pt3D2bis.setIs3D(true);
pt3D3bis.setIs3D(true);
npoint.setIs3D(true);
pt3D2bis.setSuperHidden(true);
pt3D3bis.setSuperHidden(true);
npoint.setSuperHidden(true);
pt3D1.setFixed("(x3D("+pointName+")-x3D("+pt3DTortue.getName()+"))/d3D("+pointName+","+pt3DTortue.getName()+")","(y3D("+pointName+")-y3D("+pt3DTortue.getName()+"))/d3D("+pointName+","+pt3DTortue.getName()+")","(z3D("+pointName+")-z3D("+pt3DTortue.getName()+"))/d3D("+pointName+","+pt3DTortue.getName()+")");
npoint.setFixed("(y3D("+pointName+")-y3D("+pt3DTortue.getName()+"))*(z3D("+pointName2+")-z3D("+pt3DTortue.getName()+"))-(y3D("+pointName2+")-y3D("+pt3DTortue.getName()+"))*(z3D("+pointName+")-z3D("+pt3DTortue.getName()+"))","(z3D("+pointName+")-z3D("+pt3DTortue.getName()+"))*(x3D("+pointName2+")-x3D("+pt3DTortue.getName()+"))-(z3D("+pointName2+")-z3D("+pt3DTortue.getName()+"))*(x3D("+pointName+")-x3D("+pt3DTortue.getName()+"))","(x3D("+pointName+")-x3D("+pt3DTortue.getName()+"))*(y3D("+pointName2+")-y3D("+pt3DTortue.getName()+"))-(x3D("+pointName2+")-x3D("+pt3DTortue.getName()+"))*(y3D("+pointName+")-y3D("+pt3DTortue.getName()+"))");
pt3D2bis.setFixed("y3D("+npoint.getName()+")*z3D("+pt3D1.getName()+")-y3D("+pt3D1.getName()+")*z3D("+npoint.getName()+")","z3D("+npoint.getName()+")*x3D("+pt3D1.getName()+")-z3D("+pt3D1.getName()+")*x3D("+npoint.getName()+")","x3D("+npoint.getName()+")*y3D("+pt3D1.getName()+")-x3D("+pt3D1.getName()+")*y3D("+npoint.getName()+")");
pt3D3bis.setFixed("y3D("+pt3D1.getName()+")*z3D("+pt3D2bis.getName()+")-y3D("+pt3D2bis.getName()+")*z3D("+pt3D1.getName()+")","z3D("+pt3D1.getName()+")*x3D("+pt3D2bis.getName()+")-z3D("+pt3D2bis.getName()+")*x3D("+pt3D1.getName()+")","x3D("+pt3D1.getName()+")*y3D("+pt3D2bis.getName()+")-x3D("+pt3D2bis.getName()+")*y3D("+pt3D1.getName()+")");
pt3D2.setFixed("x3D("+pt3D2bis.getName()+")/d3D("+pt3D2bis.getName()+","+pt3D0.getName()+")","y3D("+pt3D2bis.getName()+")/d3D("+pt3D2bis.getName()+","+pt3D0.getName()+")","z3D("+pt3D2bis.getName()+")/d3D("+pt3D2bis.getName()+","+pt3D0.getName()+")");
pt3D3.setFixed("x3D("+pt3D3bis.getName()+")/d3D("+pt3D3bis.getName()+","+pt3D0.getName()+")","y3D("+pt3D3bis.getName()+")/d3D("+pt3D3bis.getName()+","+pt3D0.getName()+")","z3D("+pt3D3bis.getName()+")/d3D("+pt3D3bis.getName()+","+pt3D0.getName()+")");
dirTortue3D1= new VectorObject(getC(),pt3D0,pt3D1);
dirTortue3D2= new VectorObject(getC(),pt3D0,pt3D2);
dirTortue3D3= new VectorObject(getC(),pt3D0,pt3D3);
addObject(dirTortue3D1);
addObject(dirTortue3D2);
addObject(dirTortue3D3);
dirTortue3D1.setDefaults();
dirTortue3D2.setDefaults();
dirTortue3D3.setDefaults();
dirTortue3D1.setHidden(true);
dirTortue3D2.setHidden(true);
dirTortue3D3.setHidden(true);
pt3DSupport01.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport02.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport03.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport.validate();
pt3DSupport01.validate();
pt3DSupport02.validate();
pt3DSupport03.validate();
dirTortueVisu3D1.validate();
dirTortueVisu3D2.validate();
dirTortueVisu3D3.validate();
}
}
}
}
public static void OrientateTowards(String pointName, String pointName2) throws Exception{
ConstructionObject o=getC().find(parseVariables(pointName));
if (o==null) {
throw new Exception(Loc("notfound"));
}
if (!(o instanceof PointObject)) {
throw new Exception(Loc("notgoodtype"));
}
if (!turtleIs3D) {
synchronized (getC()) {
ptO2=new PointObject(getC(),0,1);
addObject(ptO2);
ptO2.setSuperHidden(true);
ptO2.setFixed("(x("+pointName+")-x("+ptTortue.getName()+"))/d("+pointName+","+ptTortue.getName()+")","(y("+pointName+")-y("+ptTortue.getName()+"))/d("+pointName+","+ptTortue.getName()+")");
dirTortue= new VectorObject(getC(),ptO,ptO2);
dirTortue.validate();
dirTortue.setDefaults();
dirTortue.setHidden(true);
addObject(dirTortue);
ptSupport2.setFixed("x("+ptTortue.getName()+")+x("+dirTortue.getName()+")","y("+ptTortue.getName()+")+y("+dirTortue.getName()+")");
ptTortue2.setFixed("x("+ptTortue.getName()+")+x("+dirTortue.getName()+")","y("+ptTortue.getName()+")+y("+dirTortue.getName()+")");
ptTortue2.validate();
dirTortueVisu.validate();
}
}
else {
if (pointName2.equals("undefined")) {
synchronized (getC()) {
oldpt3D2=pt3D2;
oldpt3D3=pt3D3;
pt3D1=new PointObject(getC(),0,0);
pt3D2=new PointObject(getC(),0,0);
pt3D3=new PointObject(getC(),0,0);
addObject(pt3D1);
addObject(pt3D2);
addObject(pt3D3);
pt3D1.setIs3D(true);
pt3D2.setIs3D(true);
pt3D3.setIs3D(true);
pt3D1.setSuperHidden(true);
pt3D2.setSuperHidden(true);
pt3D3.setSuperHidden(true);
pt3D2bis=new PointObject(getC(),0,0);
pt3D3bis=new PointObject(getC(),0,0);
addObject(pt3D2bis);
addObject(pt3D3bis);
pt3D2bis.setIs3D(true);
pt3D3bis.setIs3D(true);
pt3D2bis.setSuperHidden(true);
pt3D3bis.setSuperHidden(true);
pt3D1.setFixed("(x3D("+pointName+")-x3D("+pt3DTortue.getName()+"))/d3D("+pointName+","+pt3DTortue.getName()+")","(y3D("+pointName+")-y3D("+pt3DTortue.getName()+"))/d3D("+pointName+","+pt3DTortue.getName()+")","(z3D("+pointName+")-z3D("+pt3DTortue.getName()+"))/d3D("+pointName+","+pt3DTortue.getName()+")");
pt3D2bis.setFixed("y3D("+oldpt3D3.getName()+")*z3D("+pt3D1.getName()+")-y3D("+pt3D1.getName()+")*z3D("+oldpt3D3.getName()+")","z3D("+oldpt3D3.getName()+")*x3D("+pt3D1.getName()+")-z3D("+pt3D1.getName()+")*x3D("+oldpt3D3.getName()+")","x3D("+oldpt3D3.getName()+")*y3D("+pt3D1.getName()+")-x3D("+pt3D1.getName()+")*y3D("+oldpt3D3.getName()+")");
pt3D3bis.setFixed("y3D("+pt3D1.getName()+")*z3D("+oldpt3D2.getName()+")-y3D("+oldpt3D2.getName()+")*z3D("+pt3D1.getName()+")","z3D("+pt3D1.getName()+")*x3D("+oldpt3D2.getName()+")-z3D("+oldpt3D2.getName()+")*x3D("+pt3D1.getName()+")","x3D("+pt3D1.getName()+")*y3D("+oldpt3D2.getName()+")-x3D("+oldpt3D2.getName()+")*y3D("+pt3D1.getName()+")");
pt3D2.setFixed("x3D("+pt3D2bis.getName()+")/d3D("+pt3D2bis.getName()+","+pt3D0.getName()+")","y3D("+pt3D2bis.getName()+")/d3D("+pt3D2bis.getName()+","+pt3D0.getName()+")","z3D("+pt3D2bis.getName()+")/d3D("+pt3D2bis.getName()+","+pt3D0.getName()+")");
pt3D3.setFixed("x3D("+pt3D3bis.getName()+")/d3D("+pt3D3bis.getName()+","+pt3D0.getName()+")","y3D("+pt3D3bis.getName()+")/d3D("+pt3D3bis.getName()+","+pt3D0.getName()+")","z3D("+pt3D3bis.getName()+")/d3D("+pt3D3bis.getName()+","+pt3D0.getName()+")");
dirTortue3D1= new VectorObject(getC(),pt3D0,pt3D1);
dirTortue3D2= new VectorObject(getC(),pt3D0,pt3D2);
dirTortue3D3= new VectorObject(getC(),pt3D0,pt3D3);
addObject(dirTortue3D1);
addObject(dirTortue3D2);
addObject(dirTortue3D3);
dirTortue3D1.setDefaults();
dirTortue3D2.setDefaults();
dirTortue3D3.setDefaults();
dirTortue3D1.setHidden(true);
dirTortue3D2.setHidden(true);
dirTortue3D3.setHidden(true);
pt3DSupport01.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport02.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport03.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport.validate();
pt3DSupport01.validate();
pt3DSupport02.validate();
pt3DSupport03.validate();
dirTortueVisu3D1.validate();
dirTortueVisu3D2.validate();
dirTortueVisu3D3.validate();
}
}
else {
ConstructionObject p=getC().find(parseVariables(pointName2));
if (p==null) {
throw new Exception(Loc("notfound"));
}
if (!(p instanceof PointObject)) {
throw new Exception(Loc("notgoodtype"));
}
synchronized (getC()) {
oldpt3D2=pt3D2;
oldpt3D3=pt3D3;
pt3D1=new PointObject(getC(),0,0);
pt3D2=new PointObject(getC(),0,0);
pt3D3=new PointObject(getC(),0,0);
addObject(pt3D1);
addObject(pt3D2);
addObject(pt3D3);
pt3D1.setIs3D(true);
pt3D2.setIs3D(true);
pt3D3.setIs3D(true);
pt3D1.setSuperHidden(true);
pt3D2.setSuperHidden(true);
pt3D3.setSuperHidden(true);
pt3D2bis=new PointObject(getC(),0,0);
pt3D3bis=new PointObject(getC(),0,0);
npoint=new PointObject(getC(),0,0);
addObject(pt3D2bis);
addObject(pt3D3bis);
addObject(npoint);
pt3D2bis.setIs3D(true);
pt3D3bis.setIs3D(true);
npoint.setIs3D(true);
pt3D2bis.setSuperHidden(true);
pt3D3bis.setSuperHidden(true);
npoint.setSuperHidden(true);
pt3D1.setFixed("(x3D("+pointName+")-x3D("+pt3DTortue.getName()+"))/d3D("+pointName+","+pt3DTortue.getName()+")","(y3D("+pointName+")-y3D("+pt3DTortue.getName()+"))/d3D("+pointName+","+pt3DTortue.getName()+")","(z3D("+pointName+")-z3D("+pt3DTortue.getName()+"))/d3D("+pointName+","+pt3DTortue.getName()+")");
npoint.setFixed("(y3D("+pointName+")-y3D("+pt3DTortue.getName()+"))*(z3D("+pointName2+")-z3D("+pt3DTortue.getName()+"))-(y3D("+pointName2+")-y3D("+pt3DTortue.getName()+"))*(z3D("+pointName+")-z3D("+pt3DTortue.getName()+"))","(z3D("+pointName+")-z3D("+pt3DTortue.getName()+"))*(x3D("+pointName2+")-x3D("+pt3DTortue.getName()+"))-(z3D("+pointName2+")-z3D("+pt3DTortue.getName()+"))*(x3D("+pointName+")-x3D("+pt3DTortue.getName()+"))","(x3D("+pointName+")-x3D("+pt3DTortue.getName()+"))*(y3D("+pointName2+")-y3D("+pt3DTortue.getName()+"))-(x3D("+pointName2+")-x3D("+pt3DTortue.getName()+"))*(y3D("+pointName+")-y3D("+pt3DTortue.getName()+"))");
pt3D2bis.setFixed("y3D("+npoint.getName()+")*z3D("+pt3D1.getName()+")-y3D("+pt3D1.getName()+")*z3D("+npoint.getName()+")","z3D("+npoint.getName()+")*x3D("+pt3D1.getName()+")-z3D("+pt3D1.getName()+")*x3D("+npoint.getName()+")","x3D("+npoint.getName()+")*y3D("+pt3D1.getName()+")-x3D("+pt3D1.getName()+")*y3D("+npoint.getName()+")");
pt3D3bis.setFixed("y3D("+pt3D1.getName()+")*z3D("+pt3D2bis.getName()+")-y3D("+pt3D2bis.getName()+")*z3D("+pt3D1.getName()+")","z3D("+pt3D1.getName()+")*x3D("+pt3D2bis.getName()+")-z3D("+pt3D2bis.getName()+")*x3D("+pt3D1.getName()+")","x3D("+pt3D1.getName()+")*y3D("+pt3D2bis.getName()+")-x3D("+pt3D2bis.getName()+")*y3D("+pt3D1.getName()+")");
pt3D2.setFixed("x3D("+pt3D2bis.getName()+")/d3D("+pt3D2bis.getName()+","+pt3D0.getName()+")","y3D("+pt3D2bis.getName()+")/d3D("+pt3D2bis.getName()+","+pt3D0.getName()+")","z3D("+pt3D2bis.getName()+")/d3D("+pt3D2bis.getName()+","+pt3D0.getName()+")");
pt3D3.setFixed("x3D("+pt3D3bis.getName()+")/d3D("+pt3D3bis.getName()+","+pt3D0.getName()+")","y3D("+pt3D3bis.getName()+")/d3D("+pt3D3bis.getName()+","+pt3D0.getName()+")","z3D("+pt3D3bis.getName()+")/d3D("+pt3D3bis.getName()+","+pt3D0.getName()+")");
dirTortue3D1= new VectorObject(getC(),pt3D0,pt3D1);
dirTortue3D2= new VectorObject(getC(),pt3D0,pt3D2);
dirTortue3D3= new VectorObject(getC(),pt3D0,pt3D3);
addObject(dirTortue3D1);
addObject(dirTortue3D2);
addObject(dirTortue3D3);
dirTortue3D1.setDefaults();
dirTortue3D2.setDefaults();
dirTortue3D3.setDefaults();
dirTortue3D1.setHidden(true);
dirTortue3D2.setHidden(true);
dirTortue3D3.setHidden(true);
pt3DSupport01.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D1.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D1.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D1.getName()+")");
pt3DSupport02.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D2.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D2.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D2.getName()+")");
pt3DSupport03.setFixed("x3D("+pt3DSupport.getName()+")+x3D("+dirTortue3D3.getName()+")","y3D("+pt3DSupport.getName()+")+y3D("+dirTortue3D3.getName()+")","z3D("+pt3DSupport.getName()+")+z3D("+dirTortue3D3.getName()+")");
pt3DSupport.validate();
pt3DSupport01.validate();
pt3DSupport02.validate();
pt3DSupport03.validate();
dirTortueVisu3D1.validate();
dirTortueVisu3D2.validate();
dirTortueVisu3D3.validate();
}
}
}
}
public static void VitesseTortue(String vitesse){
synchronized (getC()) {
double theSpeed = Double.parseDouble(vitesse);
if (theSpeed<0.01) {
theSpeed=0.01;
} else {
if (theSpeed>100) {
theSpeed=100;
}
}
nbSteps= Math.floor(99/theSpeed)+1;
}
}
public static void TurtleSpeed(String vitesse){
synchronized (getC()) {
double theSpeed = Double.parseDouble(vitesse);
if (theSpeed<0.01) {
theSpeed=0.01;
} else {
if (theSpeed>100) {
theSpeed=100;
}
}
nbSteps= Math.floor(99/theSpeed)+1;
}
}
private static void setJSO(ConstructionObject o) {
ScriptThread th=(ScriptThread) Thread.currentThread();
th.setJSO(o);
}
private static ConstructionObject getJSO() {
ScriptThread th=(ScriptThread) Thread.currentThread();
return th.getJSO();
}
private static boolean isValidII() {
ScriptThread th=(ScriptThread) Thread.currentThread();
return th.isValidII();
}
private static void paint() {
ScriptThread th=(ScriptThread) Thread.currentThread();
th.getZC().repaint();
}
private static void addObject(ConstructionObject o) {
ScriptThread th=(ScriptThread) Thread.currentThread();
th.getC().add(o);
th.getZC().update_distant(o, 1);
}
public static void refreshZC() {
ScriptThread th=(ScriptThread) Thread.currentThread();
th.getZC().dovalidate();
th.getZC().repaint();
}
public static void rafraichirZC() {
ScriptThread th=(ScriptThread) Thread.currentThread();
th.getZC().dovalidate();
th.getZC().repaint();
}
public static Construction getC() {
ScriptThread th=(ScriptThread) Thread.currentThread();
return th.getC();
}
public static ZirkelCanvas getZC() {
ScriptThread th=(ScriptThread) Thread.currentThread();
return th.getZC();
}
public static String getRealScript() {
ScriptThread th=(ScriptThread) Thread.currentThread();
return th.getSCRIPT();
}
public static String getZZ() {
ScriptThread th=(ScriptThread) Thread.currentThread();
String bibop=th.getSCRIPT();
bibop=bibop.replace("=","");
bibop=bibop.replace("⟵⟵","=");
bibop=bibop.replace("!⟵","");
bibop=bibop.replace("<⟵","");
bibop=bibop.replace(">⟵","");
bibop=bibop.replace("Afficherligne","Afficher");
return bibop;
}
public static String prendreZZ() {
ScriptThread th=(ScriptThread) Thread.currentThread();
String bibop=th.getSCRIPTi();
bibop=bibop.replace("=","");
bibop=bibop.replace("⟵⟵","=");
bibop=bibop.replace("!⟵","");
bibop=bibop.replace("<⟵","");
bibop=bibop.replace(">⟵","");
bibop=bibop.replace("Println","Afficher");
bibop=bibop.replace("Print","Afficher");
return bibop;
}
private static ScriptThread getTHREAD() {
ScriptThread th=(ScriptThread) Thread.currentThread();
return th;
}
private static ScriptableObject getSCOPE() {
ScriptThread th=(ScriptThread) Thread.currentThread();
return th.getSCOPE();
}
public static JSOuputConsole getCONSOLE() {
ScriptThread th=(ScriptThread) Thread.currentThread();
return th.getCONSOLE();
}
public static JSOuputConsole prendreCONSOLE() {
ScriptThread th=(ScriptThread) Thread.currentThread();
return th.getCONSOLE();
}
public static boolean SetIconSelection(String iconname, boolean sel) {
return PaletteManager.setSelected_with_clic2(iconname, sel);
}
public static boolean ClicVirtuel(String iconname, boolean sel) {
return PaletteManager.setSelected_with_clic2(iconname, sel);
}
public static boolean IsIconSelected(String iconname) {
return PaletteManager.isSelected(iconname);
}
/**
* Read a file an return is content as a string.<br>
* <br>
* This function will be useful in javascript context.<br>
* One will be able, for instance, to write inside a CaRScript :<br>
* <i>eval(Load("mytools.js"));</i> <br>
* This will behave as if the file "mytools.js" had been imported.<br>
* The objects of "mytools.js" will be accessible within the CaRScript.<br>
*
* Load is more versatile than just an import function.<br>
* Indeed, you have the opportunity to make some text processing
* after loading and before evaluating :<br>
*<i>MyTools = Load("mytools.js");</i><br>
*<i>MyTools = doSomeModificationsTo(MyTools); // apply some regexps or whatever</i><br>
*<i>eval(Mytools);</i><br>
*
* @param fic
* @return The read text
*/
public static String Load(String fic) {
String FS=System.getProperty("file.separator");
String myfic=Global.getHomeDirectory()+"scripts"+FS+fic.replace("/", FS);
if (!new File(myfic).exists()) {
myfic=FileName.path(JZirkelCanvas.getFileName())+FS+fic.replace("/", FS);
}
String r;
String s="";
boolean firstLine=true;
try {
java.io.BufferedReader f=new java.io.BufferedReader(new java.io.FileReader(myfic));
try {
while ((r=f.readLine())!=null) {
s=(firstLine==true)?r:s+System.getProperty("line.separator")+r;
firstLine=false;
}
f.close();
return s;
} catch (java.io.IOException e) {
return s;
}
} catch (java.io.FileNotFoundException e) {
return "";
}
}
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=getSCOPE().get(m.group(2), getSCOPE());
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=getSCOPE().get(m.group(1), getSCOPE());
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 LastNObjectsName(int N){
if(N==0){
return "";
}
String names;
if(getC().lastButN(0)!=null){
names = getC().lastButN(0).getName();
} else {
names = "";
}
for(int i=1; i<N; i++){
if(getC().lastButN(i)!=null){
names = getC().lastButN(i).getName()+","+names;
} else {
return "";
}
}
return names;
}
//
// static public String LastObjectName() {
// if (getC().last()!=null) {
// return getC().last().getName();
// } else {
// return "";
// }
// }
//
// static public String Last2ObjectsName() {
// if (getC().last()!=null&&getC().lastButOne()!=null) {
// return getC().lastButOne().getName()+","+getC().last().getName();
// } else {
// return "";
// }
// }
//
// static public String Last4ObjectsName() {
// if (getC().last()!=null&&getC().lastButOne()!=null&&getC().lastButTwo()!=null&&getC().lastButThree()!=null) {
// return getC().lastButThree().getName()+","+getC().lastButTwo().getName()+","+getC().lastButOne().getName()+","+getC().last().getName();
// } else {
// return "";
// }
// }
synchronized static public void NormalizeLast() {
ConstructionObject o=getC().lastButN(0);
if (o!=null) {
o.setColorType(ConstructionObject.NORMAL);
o.setShowName(false);
o.setShowValue(false);
o.setFilled(false);
o.setPartial(false);
}
}
synchronized static public void Normalize(int i) {
ConstructionObject o=getC().lastButN(i);
if (o!=null) {
o.setColorType(ConstructionObject.NORMAL);
o.setShowName(false);
o.setShowValue(false);
o.setFilled(false);
o.setPartial(false);
}
}
synchronized static public void Normalize(ConstructionObject o) {
if (o!=null) {
o.setColorType(ConstructionObject.NORMAL);
o.setShowName(false);
o.setShowValue(false);
o.setFilled(false);
o.setPartial(false);
}
}
/**
* Pause in milliseconds
* @param millis
*/
static public void Pause(int millis) {
try {
refreshZC();
Thread.sleep(millis);
} catch (InterruptedException e) {
System.err.println(e);
//e.printStackTrace();
}
}
/**
* Print a string in a getCONSOLE(). Print calls won't generate carriage return
* at the end of the output. If the getCONSOLE() is not visible, it will be
* bring to front automatically.
* @param a String to be displayed
*/
static public void Print(String a) {
if (!getCONSOLE().isVisible()) {
getCONSOLE().setVisible(true);
}
getCONSOLE().print(parseVariables(a));
}
static public void Afficher(String a) {
if (!getCONSOLE().isVisible()) {
getCONSOLE().setVisible(true);
}
getCONSOLE().print(parseVariables(a));
}
/**
* Print a string in a getCONSOLE(). Println calls will generate carriage return
* at the end of the output. If the getCONSOLE() is not visible, it will be
* bring to front automatically.
* @param a String to be displayed
*/
static public void Println(String a) {
if (!getCONSOLE().isVisible()) {
getCONSOLE().setVisible(true);
}
String u = parseVariables(a).replace("Infinity","");
getCONSOLE().println(u);
}
static public void Afficherligne(String a) {
if (!getCONSOLE().isVisible()) {
getCONSOLE().setVisible(true);
}
String u = parseVariables(a).replace("Infinity","");
getCONSOLE().println(u);
}
/**
* 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(
getZC(),
msg,
"Input dialog",
JOptionPane.QUESTION_MESSAGE,
null,
null, // c'est ouvert !!!
""); // valeur initiale
return s;
}
static public Object Entrée(String msg) {
Object s=JOptionPane.showInputDialog(
getZC(),
msg,
"Input dialog",
JOptionPane.QUESTION_MESSAGE,
null,
null, // c'est ouvert !!!
""); // valeur initiale
return s;
}
static public double EntréeNombreEntier(String msg) {
String s= (String) JOptionPane.showInputDialog(
getZC(),
msg,
"Input dialog",
JOptionPane.QUESTION_MESSAGE,
null,
null, // c'est ouvert !!!
""); // valeur initiale
return Integer.parseInt(s);
}
static public double EntréeNombreDécimal(String msg) {
String s= (String) JOptionPane.showInputDialog(
getZC(),
msg,
"Input dialog",
JOptionPane.QUESTION_MESSAGE,
null,
null, // c'est ouvert !!!
""); // valeur initiale
return Double.parseDouble(s);
}
/**
* Ask for an OpenDialogBox. This will return the name of selected file if any.
* Otherwise this will return "null"
* @param msg
* @return
*/
static public Object GetOpenFile(String msg) {
if (OS.isUnix()) {
String name=null;
final JFileChooser jfc=new JFileChooser(Global.getOpenSaveDirectory());
jfc.setDialogType(javax.swing.JFileChooser.OPEN_DIALOG);
final int rep=jfc.showOpenDialog(pipe_tools.getFrame());
if (rep==JFileChooser.APPROVE_OPTION) {
name=jfc.getSelectedFile().getAbsolutePath();
}
return name;
} else {
FileDialog fd=new FileDialog(pipe_tools.getFrame(),
Global.Loc("filedialog.open"),
FileDialog.LOAD);
fd.setDirectory(Global.getOpenSaveDirectory());
fd.setSize(500, 400);
fd.pack();
fd.setVisible(true);
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;
}
}
static public Object PrendreFichierOuvert(String msg) {
if (OS.isUnix()) {
String name=null;
final JFileChooser jfc=new JFileChooser(Global.getOpenSaveDirectory());
jfc.setDialogType(javax.swing.JFileChooser.OPEN_DIALOG);
final int rep=jfc.showOpenDialog(pipe_tools.getFrame());
if (rep==JFileChooser.APPROVE_OPTION) {
name=jfc.getSelectedFile().getAbsolutePath();
}
return name;
} else {
FileDialog fd=new FileDialog(pipe_tools.getFrame(),
Global.Loc("filedialog.open"),
FileDialog.LOAD);
fd.setDirectory(Global.getOpenSaveDirectory());
fd.setSize(500, 400);
fd.pack();
fd.setVisible(true);
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;
}
}
/**
* 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 Error {
synchronized (getC()) {
setJSO(null);
ObjectConstructor oc=getZC().getTool();
getZC().setJSTool(getTHREAD(), msg, type);
while (getJSO()==null) {
if (!isValidII()) {
// /* JSmacroTool is running, but when user set an other tool,
// * we do not have to set the tool which has been saved some
// * lines above
// */
// oc=getZC().getTool();
// if (oc instanceof JSmacroTool) {
// oc=((JSmacroTool) oc).getPreviousTool();
// }
getZC().setTool(oc);
throw new Error();
}
// v1 not working
// if (!isValidII()) {
// //getZC().setTool(oc);
//
// if(getZC().getTool() instanceof JSmacroTool){
// getZC().setTool(oc);
// } //else {
// //getZC().setTool(getZC().getTool());
// //}
// throw new Error();
// }
}
getZC().clearSelected();
getZC().setTool(oc);
return getJSO().getName();
}
}
static public Object EntréeInteractive(String msg, String type) throws Error {
synchronized (getC()) {
setJSO(null);
ObjectConstructor oc=getZC().getTool();
getZC().setJSTool(getTHREAD(), msg, type);
while (getJSO()==null) {
if (!isValidII()) {
// /* JSmacroTool is running, but when user set an other tool,
// * we do not have to set the tool which has been saved some
// * lines above
// */
// oc=getZC().getTool();
// if (oc instanceof JSmacroTool) {
// oc=((JSmacroTool) oc).getPreviousTool();
// }
getZC().setTool(oc);
throw new Error();
}
// v1 not working
// if (!isValidII()) {
// //getZC().setTool(oc);
//
// if(getZC().getTool() instanceof JSmacroTool){
// getZC().setTool(oc);
// } //else {
// //getZC().setTool(getZC().getTool());
// //}
// throw new Error();
// }
}
getZC().clearSelected();
getZC().setTool(oc);
return 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(
getZC(),
parseVariables(msg),
"Prompt dialog",
JOptionPane.WARNING_MESSAGE);
}
static public void Signaler(String msg) {
JOptionPane.showMessageDialog(
getZC(),
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(
getZC(),
parseVariables(msg),
"Prompt dialog",
JOptionPane.WARNING_MESSAGE);
}
static public void Alerte(String msg) {
JOptionPane.showMessageDialog(
getZC(),
parseVariables(msg),
"Prompt dialog",
JOptionPane.WARNING_MESSAGE);
}
static public void c(String a) {
getZC().JSsend(a);
getZC().update_distant(a);
}
static public String cm(String a) {
getZC().JSsend(a);
return LastNObjectsName(1);
}
/**
* 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
* @throws java.lang.Exception
*/
static public void Move(String name, String i, String j, String k) throws Exception {
if (k.equals("undefined")) {
ConstructionObject o=getC().find(parseVariables(name));
if (o==null) {
throw new Exception(Loc("notfound"));
}
if (!(o instanceof PointObject||o instanceof VectorObject)) {
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);
getZC().update_distant(o, 3);
} catch (NumberFormatException 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());
//pose problème: Si on essaye de mettre des coordonnées
//algébriques (des expressions), on a NaN. Donc remplacé par
o.setFixed(parseVariables(expX.toString()), parseVariables(expY.toString()));
}
refreshZC();
}
else {
ConstructionObject o=getC().find(parseVariables(name));
if (o==null) {
throw new Exception(Loc("notfound"));
}
if (!((o instanceof PointObject&& ((PointObject) o).is3D())||(o instanceof VectorObject&& ((VectorObject) o).is3D()))) {
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;
double z=Math.round(Double.valueOf(parseVariables(k))*1E13)/1E13;
o.move3D(x, y, z);
getZC().update_distant(o, 3);
} catch (NumberFormatException e) {
Expression expX=new Expression(parseVariables(i), o.getConstruction(), o);
Expression expY=new Expression(parseVariables(j), o.getConstruction(), o);
Expression expZ=new Expression(parseVariables(j), o.getConstruction(), o);
//o.move(expX.getValue(), expY.getValue());
//pose problème: Si on essaye de mettre des coordonnées
//algébriques (des expressions), on a NaN. Donc remplacé par
o.setFixed(parseVariables(expX.toString()), parseVariables(expY.toString()), parseVariables(expZ.toString()));
}
refreshZC();
}
}
static public void Déplacer(String name, String i, String j, String k) throws Exception {
if (k.equals("undefined")) {
ConstructionObject o=getC().find(parseVariables(name));
if (o==null) {
throw new Exception(Loc("notfound"));
}
if (!(o instanceof PointObject||o instanceof VectorObject)) {
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);
getZC().update_distant(o, 3);
} catch (NumberFormatException 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());
//pose problème: Si on essaye de mettre des coordonnées
//algébriques (des expressions), on a NaN. Donc remplacé par
o.setFixed(parseVariables(expX.toString()), parseVariables(expY.toString()));
}
refreshZC();
}
else {
ConstructionObject o=getC().find(parseVariables(name));
if (o==null) {
throw new Exception(Loc("notfound"));
}
if (!((o instanceof PointObject&& ((PointObject) o).is3D())||(o instanceof VectorObject&& ((VectorObject) o).is3D()))) {
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;
double z=Math.round(Double.valueOf(parseVariables(k))*1E13)/1E13;
o.move3D(x, y, z);
getZC().update_distant(o, 3);
} catch (NumberFormatException e) {
Expression expX=new Expression(parseVariables(i), o.getConstruction(), o);
Expression expY=new Expression(parseVariables(j), o.getConstruction(), o);
Expression expZ=new Expression(parseVariables(j), o.getConstruction(), o);
//o.move(expX.getValue(), expY.getValue());
//pose problème: Si on essaye de mettre des coordonnées
//algébriques (des expressions), on a NaN. Donc remplacé par
o.setFixed(parseVariables(expX.toString()), parseVariables(expY.toString()), parseVariables(expZ.toString()));
}
refreshZC();
}
}
/**
* Delete a given object in the current CaRMetal window.
* @param name Name of the object you wan
* @throws java.lang.Exception
*/
static public void Delete(String name) throws Exception {
ConstructionObject o=getC().find(name);
if (o==null) {
throw new Exception(Loc("notfound"));
}
getZC().delete(o);
}
static public void Supprimer(String name) throws Exception {
ConstructionObject o=getC().find(name);
if (o==null) {
throw new Exception(Loc("notfound"));
}
getZC().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.
* @throws java.lang.Exception
*/
static public double GetExpressionValue(String name) throws Exception {
ConstructionObject o=getC().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 (ConstructionException ex) {
}
return res;
}
static public double PrendreValeurExpression(String name) throws Exception {
ConstructionObject o=getC().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 (ConstructionException 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
* @throws java.lang.Exception
*/
static public void SetExpressionValue(String name, String value) throws Exception {
ConstructionObject o=getC().find(name);
if (o==null) {
throw new Exception(Loc("notfound"));
}
if (!(o instanceof ExpressionObject)) {
throw new Exception(Loc("notgoodtype"));
}
ExpressionObject oc=(ExpressionObject) o;
oc.setFixed(parseVariables(value));
refreshZC();
}
static public void MettreValeurExpression(String name, String value) throws Exception {
ConstructionObject o=getC().find(name);
if (o==null) {
throw new Exception(Loc("notfound"));
}
if (!(o instanceof ExpressionObject)) {
throw new Exception(Loc("notgoodtype"));
}
ExpressionObject oc=(ExpressionObject) o;
oc.setFixed(parseVariables(value));
refreshZC();
}
/**
* @author Alain
* Tells if an object exists (and is finite).
* @param name Name of the object
* @return true or false depending on the object being valid.
* @throws java.lang.Exception
*/
static public Boolean Exists(String name) throws Exception {
ConstructionObject o=getC().find(name);
if (o==null) {
return false;
} else {
return o.valid();
}
}
static public Boolean Existe(String name) throws Exception {
ConstructionObject o=getC().find(name);
if (o==null) {
return false;
} else {
return o.valid();
}
}
/**
* @author Alain
* Returns the text value of a text object.
* @param name Name of an existing text
* @return the content of the text object.
* @throws java.lang.Exception
*/
static public String GetText(String name) throws Exception {
ConstructionObject o=getC().find(name);
if (o==null) {
throw new Exception(Loc("notfound"));
}
if (!(o instanceof TextObject)) {
throw new Exception(Loc("notgoodtype"));
}
TextObject oc=(TextObject) o;
String res="";
try {
res=oc.getText();
} catch (Exception ex) {
}
return res;
}
static public String PrendreTexte(String name) throws Exception {
ConstructionObject o=getC().find(name);
if (o==null) {
throw new Exception(Loc("notfound"));
}
if (!(o instanceof TextObject)) {
throw new Exception(Loc("notgoodtype"));
}
TextObject oc=(TextObject) o;
String res="";
try {
res=oc.getText();
} catch (Exception ex) {
}
return res;
}
/**
* Set the value of a given text object which is in the construction.
* @param name Name of a text object
* @param value the new text
* @throws java.lang.Exception
*/
static public void SetText(String name, String value) throws Exception {
ConstructionObject o=getC().find(name);
if (o==null) {
throw new Exception(Loc("notfound"));
}
if (!(o instanceof TextObject)) {
throw new Exception(Loc("notgoodtype"));
}
o.setLines(parseVariables(value));
refreshZC();
}
static public void MettreTexte(String name, String value) throws Exception {
ConstructionObject o=getC().find(name);
if (o==null) {
throw new Exception(Loc("notfound"));
}
if (!(o instanceof TextObject)) {
throw new Exception(Loc("notgoodtype"));
}
o.setLines(parseVariables(value));
refreshZC();
}
/**
*Sets the track of an object.
* @param name the name of the object
* @param state the state of the track (true for a visible track)
* @throws java.lang.Exception
*/
static public void PenDown(String name, boolean state) throws Exception {
ConstructionObject o=getC().find(name);
if (o!=null) {
o.setTracked(state);
} else {
throw new Exception(Loc("notfound"));
}
}
static public void CrayonBaissé(String name, boolean state) throws Exception {
ConstructionObject o=getC().find(name);
if (o!=null) {
o.setTracked(state);
} else {
throw new Exception(Loc("notfound"));
}
}
/**
*Sets the red component of an object.
* @param name the name of the object
* @param amount the amount of red
* @throws java.lang.Exception
*/
static public void SetRed(String name, String amount) throws Exception {
ConstructionObject o=getC().find(name);
if (o!=null) {
o.setRed(parseVariables(amount));
} else {
throw new Exception(Loc("notfound"));
}
}
static public void MettreRouge(String name, String amount) throws Exception {
ConstructionObject o=getC().find(name);
if (o!=null) {
o.setRed(parseVariables(amount));
} else {
throw new Exception(Loc("notfound"));
}
}
/**
*Sets the green component of an object.
* @param name the name of the object
* @param amount the amount of green
* @throws java.lang.Exception
*/
static public void SetGreen(String name, String amount) throws Exception {
ConstructionObject o=getC().find(name);
if (o!=null) {
o.setGreen(parseVariables(amount));
} else {
throw new Exception(Loc("notfound"));
}
}
static public void MettreVert(String name, String amount) throws Exception {
ConstructionObject o=getC().find(name);
if (o!=null) {
o.setGreen(parseVariables(amount));
} else {
throw new Exception(Loc("notfound"));
}
}
/**
*Sets the blue component of an object.
* @param name the name of the object
* @param amount the amount of blue
* @throws java.lang.Exception
*/
static public void SetBlue(String name, String amount) throws Exception {
ConstructionObject o=getC().find(name);
if (o!=null) {
o.setBlue(parseVariables(amount));
} else {
throw new Exception(Loc("notfound"));
}
}
static public void MettreBleu(String name, String amount) throws Exception {
ConstructionObject o=getC().find(name);
if (o!=null) {
o.setBlue(parseVariables(amount));
} else {
throw new Exception(Loc("notfound"));
}
}
/**
*Return the red component of an object.
* @param name the name of the object
* @return the red quantity, as an integer from 0 (no red) to 255
* @throws java.lang.Exception
*/
static public int GetRed(String name) throws Exception {
ConstructionObject o=getC().find(name);
if (o!=null) {
return o.getColor().getRed();
} else {
throw new Exception(Loc("notfound"));
}
}
static public int PrendreRouge(String name) throws Exception {
ConstructionObject o=getC().find(name);
if (o!=null) {
return o.getColor().getRed();
} else {
throw new Exception(Loc("notfound"));
}
}
/**
*Return the green component of an object.
* @param name the name of the object
* @return the green quantity, as an integer from 0 (no green) to 255
* @throws java.lang.Exception
*/
static public int GetGreen(String name) throws Exception {
ConstructionObject o=getC().find(name);
if (o!=null) {
return o.getColor().getGreen();
} else {
throw new Exception(Loc("notfound"));
}
}
static public int PrendreVert(String name) throws Exception {
ConstructionObject o=getC().find(name);
if (o!=null) {
return o.getColor().getGreen();
} else {
throw new Exception(Loc("notfound"));
}
}
/**
*Return the blue component of an object.
* @param name the name of the object
* @return the blue quantity, as an integer from 0 (no blue) to 255
* @throws java.lang.Exception
*/
static public int GetBlue(String name) throws Exception {
ConstructionObject o=getC().find(name);
if (o!=null) {
return o.getColor().getBlue();
} else {
throw new Exception(Loc("notfound"));
}
}
static public int PrendreBleu(String name) throws Exception {
ConstructionObject o=getC().find(name);
if (o!=null) {
return o.getColor().getBlue();
} else {
throw new Exception(Loc("notfound"));
}
}
/**
*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
* @throws java.lang.Exception
*/
static public double X(String name) throws Exception {
ConstructionObject o=getC().find(parseVariables(name));
if (o!=null) {
if (o instanceof PrimitiveLineObject) {
if (o instanceof VectorObject) {
final VectorObject toutDroit=(VectorObject) o;
return toutDroit.getDeltaX();
} else {
final PrimitiveLineObject toutDroit=(PrimitiveLineObject) o;
return toutDroit.getDX();
}
} else {
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
* @throws java.lang.Exception
*/
static public double Y(String name) throws Exception {
ConstructionObject o=getC().find(parseVariables(name));
if (o!=null) {
if (o instanceof PrimitiveLineObject) {
if (o instanceof VectorObject) {
final VectorObject toutDroit=(VectorObject) o;
return toutDroit.getDeltaY();
} else {
final PrimitiveLineObject toutDroit=(PrimitiveLineObject) o;
return toutDroit.getDY();
}
} else {
return o.getY();
}
} else {
throw new Exception(Loc("notfound"));
}
}
/**
*Return the x3D-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 x3D-coordinate
*/
static public double X3D(String name) throws Exception {
ConstructionObject o=getC().find(parseVariables(name));
if (o!=null) {
if (o instanceof PointObject) {
return ((PointObject)o).getX3D();
}
if (o instanceof VectorObject) {
return ((VectorObject)o).getDeltaX3D();
}
else { throw new Exception(Loc("notgoodtype"));}
}
else {
throw new Exception(Loc("notfound"));
}
}
/**
*Return the y3D-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 x3D-coordinate
*/
static public double Y3D(String name) throws Exception {
ConstructionObject o=getC().find(parseVariables(name));
if (o!=null) {
if (o instanceof PointObject) {
return ((PointObject)o).getY3D(); }
if (o instanceof VectorObject) {
return ((VectorObject)o).getDeltaY3D();
} else { throw new Exception(Loc("notgoodtype"));}
} else {
throw new Exception(Loc("notfound"));
}
}
/**
*Return the z3D-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 x3D-coordinate
*/
static public double Z3D(String name) throws Exception {
ConstructionObject o=getC().find(parseVariables(name));
if (o!=null) {
if (o instanceof PointObject) {
return ((PointObject)o).getZ3D(); }
if (o instanceof VectorObject) {
return ((VectorObject)o).getDeltaZ3D();
} else { throw new Exception(Loc("notgoodtype"));}
} else {
throw new Exception(Loc("notfound"));
}
}
static public double Distance(String dep, String fin) throws Exception {
ConstructionObject o=getC().find(parseVariables(dep));
ConstructionObject p=getC().find(parseVariables(fin));
if (o!=null) {
if (p!=null) {
return Math.sqrt((X(fin)-X(dep))*(X(fin)-X(dep))+(Y(fin)-Y(dep))*(Y(fin)-Y(dep)));
}
else {
throw new Exception(Loc("notfound"));
}
}
else {
throw new Exception(Loc("notfound"));
}
}
static public double Distance3D(String dep, String fin) throws Exception {
ConstructionObject o=getC().find(parseVariables(dep));
ConstructionObject p=getC().find(parseVariables(fin));
if (o!=null) {
if (p!=null) {
return Math.sqrt((X3D(fin)-X3D(dep))*(X3D(fin)-X3D(dep))+(Y3D(fin)-Y3D(dep))*(Y3D(fin)-Y3D(dep))+(Z3D(fin)-Z3D(dep))*(Z3D(fin)-Z3D(dep)));
}
else {
throw new Exception(Loc("notfound"));
}
}
else {
throw new Exception(Loc("notfound"));
}
}
/**
* Return the origin of a vector. Works with a segment too
* @param name the name of the vector
* @return the name of the origin
* @throws java.lang.Exception
*/
static public String Origin(String name) throws Exception {
ConstructionObject v=getC().find(name);
if (v!=null) {
if (v instanceof TwoPointLineObject) {
final TwoPointLineObject toutDroit=(TwoPointLineObject) v;
return toutDroit.getP1().getName();
} else {
throw new Exception(Loc("notgoodtype"));
}
} else {
throw new Exception(Loc("notfound"));
}
}
static public String Origine(String name) throws Exception {
ConstructionObject v=getC().find(name);
if (v!=null) {
if (v instanceof TwoPointLineObject) {
final TwoPointLineObject toutDroit=(TwoPointLineObject) v;
return toutDroit.getP1().getName();
} else {
throw new Exception(Loc("notgoodtype"));
}
} else {
throw new Exception(Loc("notfound"));
}
}
/**
* Return the extremity of a vector. Works with a segment too
* @param name the name of the vector
* @return the name of the extremity
* @throws java.lang.Exception
*/
static public String Extremity(String name) throws Exception {
ConstructionObject v=getC().find(name);
if (v!=null) {
if (v instanceof TwoPointLineObject) {
final TwoPointLineObject toutDroit=(TwoPointLineObject) v;
return toutDroit.getP2().getName();
} else {
throw new Exception(Loc("notgoodtype"));
}
} else {
throw new Exception(Loc("notfound"));
}
}
static public String Extrémité(String name) throws Exception {
ConstructionObject v=getC().find(name);
if (v!=null) {
if (v instanceof TwoPointLineObject) {
final TwoPointLineObject toutDroit=(TwoPointLineObject) v;
return toutDroit.getP2().getName();
} else {
throw new Exception(Loc("notgoodtype"));
}
} 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.
* <br><b>Note</b> : It's possible to change this property in one step for
* multiple object.
* <br><b> Example</b> : <i><b>SetColor("A,B,c1,E1","cyan")</b></i> 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=parseVariables(name).split(",");
for(String name1 : names) {
c("color("+col+"," + name1 + ")");
}
}
static public void MettreCouleur(String name, String col) {
String[] names=parseVariables(name).split(",");
for(String name1 : names) {
c("color("+col+"," + name1 + ")");
}
}
/**
*Set the shape of a point. It has no effect if the object is not a point.
* <br><b>Note</b> : It's possible to change this property in one step for
* multiple points.
* <br><b> Example</b> : <i><b>SetPointType("A,B,E,F","square")</b></i> 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=parseVariables(name).split(",");
for(String name1 : names) {
c("type("+type+"," + name1 + ")");
}
}
static public void MettreTypePoint(String name, String type) {
String[] names=parseVariables(name).split(",");
for(String name1 : names) {
c("type("+type+"," + name1 + ")");
}
}
/**
* Set the RGB color of an object using 3 integer numbers in [0..255].
* <br><b>Note</b> : It's possible to change this property in one step for
* multiple object.
* <br><b> Example</b> : <i><b>SetColor("A,B,c1",120,40,245)</b></i> 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, String r, String g, String b) {
// Color mycolor=new Color(r, g, b);
String[] names=parseVariables(name).split(",");
for (String name1 : names) {
ConstructionObject o = getC().find(name1);
if (o!=null) {
// o.setSpecialColor(mycolor);
o.setSpecialColor(r,g,b);
}
}
// getZC().repaint();
// validate();
// paint()
}
static public void MettreCouleurRVB(String name, String r, String g, String b) {
// Color mycolor=new Color(r, g, b);
String[] names=parseVariables(name).split(",");
for (String name1 : names) {
ConstructionObject o = getC().find(name1);
if (o!=null) {
// o.setSpecialColor(mycolor);
o.setSpecialColor(r,g,b);
}
}
// getZC().repaint();
// validate();
// paint()
}
/**
* Set the thickness of an object.
* <br><b>Note</b> : It's possible to change this property in one step for
* multiple objects.
* <br><b> Example</b> : <i><b>SetThickness("A,B,c1,l1","thick")</b></i> 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=parseVariables(name).split(",");
for (String name1 : names) {
c("thickness("+thc+"," + name1 + ")");
}
}
static public void MettreEpaisseur(String name, String thc) {
String[] names=parseVariables(name).split(",");
for (String name1 : names) {
c("thickness("+thc+"," + name1 + ")");
}
}
/**
* Set the alias name of an object.
* <br><b>Note</b> : It's possible to change this property in one step for
* multiple objects.
* <br><b>Example</b> : <i><b>SetAlias("A,B,c1,l1","My beautiful object")</b></i>
* 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=parseVariables(name).split(",");
for (String name1 : names) {
ConstructionObject o = getC().find(name1);
if (o!=null) {
o.setAlias(parseVariables(alias));
}
}
}
static public void MettreAlias(String name, String alias) {
String[] names=parseVariables(name).split(",");
for (String name1 : names) {
ConstructionObject o = getC().find(name1);
if (o!=null) {
o.setAlias(parseVariables(alias));
}
}
}
/**
* Set the increment of a point object.
* <br><b>Note</b> : It's possible to change this property in one step for
* multiple points.
* <br><b>Example</b> : <i><b>SetIncrement("A,B,C",0.1)</b></i>
* will set the increment of A, B, and C
* @param name Name of the point you want to set the increment.
* @param delta
*/
static public void SetIncrement(String name, double delta) {
String[] names=parseVariables(name).split(",");
for(String name1 : names) {
ConstructionObject o = getC().find(name1);
if (o instanceof PointObject) {
o.setIncrement(delta);
}
}
}
static public void MettreIncrément(String name, double delta) {
String[] names=parseVariables(name).split(",");
for(String name1 : names) {
ConstructionObject o = getC().find(name1);
if (o instanceof PointObject) {
o.setIncrement(delta);
}
}
}
/**
* 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=getC().find(name);
if ((o==null)||(!(o instanceof PointObject))) {
return;
}
PointObject pt=(PointObject) o;
pt.setMagnetRayExp(parseVariables(ray));
refreshZC();
}
static public void MettreRayonMagnétique(String name, String ray) {
ConstructionObject o=getC().find(name);
if ((o==null)||(!(o instanceof PointObject))) {
return;
}
PointObject pt=(PointObject) o;
pt.setMagnetRayExp(parseVariables(ray));
refreshZC();
}
/**
* Set the objects that will magnetize a given point
* <br><b>Example</b> : <i><b>SetMagneticObjects("P","c1,d1,A")</b></i> will
* make the point P attracted by the objects c1, d1 and A.
* <br> 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=getC().find(name);
if ((o==null)||(!(o instanceof PointObject))) {
return;
}
PointObject pt=(PointObject) o;
pt.setMagnetObjects(parseVariables(objectlist));
}
static public void MettreObjetsMagnétiques(String name, String objectlist) {
ConstructionObject o=getC().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=getC().find(name);
if ((o==null)||(!(o instanceof PointObject))) {
return;
}
PointObject pt=(PointObject) o;
pt.addMagnetObject(parseVariables(object));
}
static public void AjouterObjetMagnétique(String name, String object) {
ConstructionObject o=getC().find(name);
if ((o==null)||(!(o instanceof PointObject))) {
return;
}
PointObject pt=(PointObject) o;
pt.addMagnetObject(parseVariables(object));
}
/**
* Fix or unfix an object in the CaRMetal current window. A fixed object
* can't be moved with the mouse.
* <br><b>Note</b> : It's possible to change this property in one step for
* multiple objects.
* <br><b>Example</b> : <i><b>SetFixed("A,B,c1,l1",true)</b></i>
* 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(String name1 : names) {
ConstructionObject o = getC().find(name1);
if (o!=null) {
o.setFixed(bool);
}
}
}
static public void MettreFixe(String name, boolean bool) {
String[] names=parseVariables(name).split(",");
for(String name1 : names) {
ConstructionObject o = getC().find(name1);
if (o!=null) {
o.setFixed(bool);
}
}
}
static public void Liberate(String name) {
String[] names=parseVariables(name).split(",");
for(String name1 : names) {
ConstructionObject o = getC().find(name1);
if (o!=null) {
o.setFixed(false);
}
}
}
static public void Libérer(String name) {
String[] names=parseVariables(name).split(",");
for(String name1 : names) {
ConstructionObject o = getC().find(name1);
if (o!=null) {
o.setFixed(false);
}
}
}
/**
* Shows or hide the name of an object (or multiple objects).
* <br><b>Example</b> : <i><b>SetShowName("A,B,c1,l1",true)</b></i>
* 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(String name1 : names) {
ConstructionObject o = getC().find(name1);
if (o!=null) {
o.setShowName(bool);
}
}
}
static public void MettreMontrerNom(String name, boolean bool) {
String[] names=parseVariables(name).split(",");
for(String name1 : names) {
ConstructionObject o = getC().find(name1);
if (o!=null) {
o.setShowName(bool);
}
}
}
/**
* Shows or hide the value of an object (or multiple objects).
* <br><b>Example</b> : <i><b>SetShowValue("A,B,c1,l1",true)</b></i>
* 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 (String name1 : names) {
ConstructionObject o = getC().find(name1);
if (o!=null) {
o.setShowValue(bool);
}
}
}
static public void MettreMontrerValeur(String name, boolean bool) {
String[] names=parseVariables(name).split(",");
for (String name1 : names) {
ConstructionObject o = getC().find(name1);
if (o!=null) {
o.setShowValue(bool);
}
}
}
/**
* Some objects can be filled (circles, polygons, etc...). This will
* fill or unfill an object (or multiple objects).
* <br><b>Example</b> : <i><b>SetFilled("A,B,c1,l1",true)</b></i>
* 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 (String name1 : names) {
ConstructionObject o = getC().find(name1);
if (o!=null) {
o.setFilled(bool);
}
}
}
static public void MettreRempli(String name, boolean bool) {
String[] names=parseVariables(name).split(",");
for (String name1 : names) {
ConstructionObject o = getC().find(name1);
if (o!=null) {
o.setFilled(bool);
}
}
}
static public void SetSolid(String name, boolean bool) {
String[] names=parseVariables(name).split(",");
for (int i=0; i<names.length; i++) {
ConstructionObject o=getC().find(names[i]);
if (o!=null) {
o.setSolid(bool);
}
}
}
static public void MettreOpaque(String name, boolean bool) {
String[] names=parseVariables(name).split(",");
for (int i=0; i<names.length; i++) {
ConstructionObject o=getC().find(names[i]);
if (o!=null) {
o.setSolid(bool);
}
}
}
/**
* Some objects can be drawn partially (circles, lines). This will
* draw partially or not an object (or multiple objects).
* <br><b>Example</b> : <i><b>SetPartial("A,B,c1,l1",true)</b></i>
* 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 (String name1 : names) {
ConstructionObject o = getC().find(name1);
if (o!=null) {
o.setPartial(bool);
getC().updateCircleDep();
}
}
}
static public void MettrePartiel(String name, boolean bool) {
String[] names=parseVariables(name).split(",");
for (String name1 : names) {
ConstructionObject o = getC().find(name1);
if (o!=null) {
o.setPartial(bool);
getC().updateCircleDep();
}
}
}
/**
*After calling this command, names of new objects will be displayed.
*/
static public void Shownames() {
cm("shownames");
}
static public void MontrerNoms() {
cm("shownames");
}
/**
*After calling this command, names of new objects will not be displayed.
*/
static public void Hidenames() {
cm("hidenames");
}
static public void CacherNoms() {
cm("hidenames");
}
/**
* Hides an object (or multiple objects).
* <br><b>Example</b> : <i><b>Hide("A,B,c1,l1")</b></i>
* 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(String name1 : names) {
c("hide(true," + name1 + ")");
}
paint();
}
static public void Cacher(String name) {
String[] names=parseVariables(name).split(",");
for(String name1 : names) {
c("hide(true," + name1 + ")");
}
paint();
}
static public void SetHide(String name, boolean b) {
String[] names=parseVariables(name).split(",");
for (String name1 : names) {
c("hide("+b+"," + name1 + ")");
}
paint();
}
static public void MettreCaché(String name, boolean b) {
String[] names=parseVariables(name).split(",");
for (String name1 : names) {
c("hide("+b+"," + name1 + ")");
}
paint();
}
/**
* Shows an object (or multiple objects).
* <br><b>Example</b> : <i><b>Show("A,B,c1,l1")</b></i>
* 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 (String name1 : names) {
c("hide(false," + name1 + ")");
}
paint();
}
static public void Montrer(String name) {
String[] names=parseVariables(name).split(",");
for (String name1 : names) {
c("hide(false," + name1 + ")");
}
paint();
}
// static public void Delete(String name) {
// String[] names=parseVariables(name).split(",");
// for (int i=0; i<names.length; i++) {
// ConstructionObject c=getC().find(names[i]);
// if (c!=)
//
// c("hide(false,"+names[i]+")");
// }
// paint()
// }
// **********************************************
// Création des objets :
// **********************************************
/**
* set a layer number for an object or list of objects
* @param name Name(s) of object(s)
* @param exp layer number (an expression); the lowest numbers are over the other ones
* @throws java.lang.Exception
*/
static public void Layer(String name, String exp) throws Exception {
Conditional(name, "z", parseVariables(exp));//parseVariablé par Alain le 24 janvier 2012, à tester!
}
static public void Calque(String name, String exp) throws Exception {
Conditional(name, "z", parseVariables(exp));//parseVariablé par Alain le 24 janvier 2012, à tester!
}
/**
* Create a condition for an object or a list of objects
* @param name Name(s) of object(s)
* @param TAG type of condition this can be equal to :
* solid, hidden, normal, thick, thin, black, green, blue,
* cyan, red, brown, showvalue, showname, background, and superhidden
* @param expTXT conditional expression to be apply
* @throws java.lang.Exception
*/
static public void Conditional(String name, String TAG, String expTXT) throws Exception {
try {
String[] names=parseVariables(name).split(",");
for (String name1 : names) {
ConstructionObject O = getC().find(name1);
if (O!=null) {
O.clearConditional(TAG);
Expression e=new Expression(parseVariables(expTXT), getC(), O);
if (!e.isValid()) {
throw new Exception(Loc("condition"));
}
O.addConditional(TAG, e);
}
}
getZC().recompute();
getZC().validate();
getZC().repaint();
} catch (Exception ex) {
throw new Exception(Loc("condition"));
}
}
static public void Conditionnel(String name, String TAG, String expTXT) throws Exception {
try {
String[] names=parseVariables(name).split(",");
for (String name1 : names) {
ConstructionObject O = getC().find(name1);
if (O!=null) {
O.clearConditional(TAG);
Expression e=new Expression(parseVariables(expTXT), getC(), O);
if (!e.isValid()) {
throw new Exception(Loc("condition"));
}
O.addConditional(TAG, e);
}
}
getZC().recompute();
getZC().validate();
getZC().repaint();
} catch (Exception ex) {
throw new Exception(Loc("condition"));
}
}
/**
* Create a point at given coordinates. coordinates can be defined by numerical
* values (e.g. Point("A",-1,5.2)) or using expressions (e.g. Point("C","x(B)+1","y(B)+1").
* If the name is not given (e.g. Point("",2,-2.5)), the point will be created as well.
* <br>From javascript, you can also do something like this :
* <ol>
* <li>a=Point("",1,2)</li>
* <li>b=Point("",-2,3)</li>
* <li>m=4</li>
* <li>c=Point("","(x_a+x_b)/_m","(y_a+y_b)/_m")</li>
* </ol>
* The "_" symbol means that javascript must use the content of variables.
* For example The string "_m" will be replaced by "4" (line 3).<br>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
* @throws java.lang.Exception
*/
static public String Point(String name, String x, String y) throws Exception {
PointObject pt=null;
synchronized (getC()) {
if (x.equals("undefined")) {
double xx=getC().getX()+2*Math.random()*getC().getW()-getC().getW();
double yy=getC().getY()-Math.random()*getC().getH()+getC().getH()/2;
x=""+xx;
y=""+yy;
if (name.equals("undefined")) {
name="";
}
} else if (y.equals("undefined")) {
y=x;
x=name;
name="";
}
try {
pt=new PointObject(getC(), Math.round(Double.valueOf(x)*1E13)/1E13, Math.round(Double.valueOf(y)*1E13)/1E13);
} catch (NumberFormatException e) {
try {
pt=new PointObject(getC(), 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(parseVariables(name));
}
pt.validate();
addObject(pt);
return pt.getName();
}
}
/**
* @author Dibs
*
*/
static public String Point3D(String name, String x, String y, String z) throws Exception {
if (!getZC().is3D()) return "";
PointObject pt=null;
synchronized (getC()) {
if (x.equals("undefined")) {
double xx=getC().getX()+2*Math.random()*getC().getW()-getC().getW();
double yy=getC().getY()-Math.random()*getC().getH()+getC().getH()/2;
try {
double xO=getC().find("O").getX(), yO = getC().find("O").getY();
double x3DO=getC().find("O").getX();
double y3DO=getC().find("O").getY();
double xx3D = Math.sin(Math.toRadians(getC().find("E10").getValue()))*(xx-xO)-Math.sin(Math.toRadians(getC().find("E11").getValue()))*Math.cos(Math.toRadians(getC().find("E10").getValue()))*(yy-yO);
double yy3D = Math.cos(Math.toRadians(getC().find("E10").getValue()))*(xx-xO)+Math.sin(Math.toRadians(getC().find("E11").getValue()))*Math.sin(Math.toRadians(getC().find("E10").getValue()))*(yy-yO);
double zz3D = Math.cos(Math.toRadians(getC().find("E11").getValue()))*(yy-yO);
if (Math.abs(xx3D)<1e-16) {
xx3D=0;
}
if (Math.abs(yy3D)<1e-16) {
yy3D=0;
}
if (Math.abs(zz3D)<1e-16) {
zz3D=0;
}
x=""+xx3D;
y=""+yy3D;
z=""+zz3D;
}
catch (final Exception f) {
x=""+Math.random();
y=""+Math.random();
z=""+Math.random();
}
if (name.equals("undefined")) {
name="";
}
} else if (z.equals("undefined")) {
z=y;
y=x;
x=name;
name="";
}
try {
double x1 = Math.round(Double.valueOf(x)*1E13)/1E13;
double y1 =Math.round(Double.valueOf(y)*1E13)/1E13;
double z1 =Math.round(Double.valueOf(z)*1E13)/1E13;
pt=new PointObject(getC(), 0, 0);
pt.setFixed("x(O)+("+x1+")*(x(X)-x(O))+("+y1+")*(x(Y)-x(O))+("+z1+")*(x(Z)-x(O))", "y(O)+("+x1+")*(y(X)-y(O))+("+y1+")*(y(Y)-y(O))+("+z1+")*(y(Z)-y(O))");
pt.setIs3D(true);
pt.setX3D(x1);
pt.setY3D(y1);
pt.setZ3D(z1);
} catch (Exception e) {
try {
pt=new PointObject(getC(), 0, 0);
pt.setFixed(x,y,z);
pt.setIs3D(true);
pt.validCoordinates3D();
pt.setFixed("x(O)+("+parseVariables(x)+")*(x(X)-x(O))+("+parseVariables(y)+")*(x(Y)-x(O))+("+parseVariables(z)+")*(x(Z)-x(O))", "y(O)+("+parseVariables(x)+")*(y(X)-y(O))+("+parseVariables(y)+")*(y(Y)-y(O))+("+parseVariables(z)+")*(y(Z)-y(O))");
pt.validCoordinates();
} catch (Exception ex) {
throw new Exception(Loc("pointcoords"));
}
}
pt.setDefaults();
if (!name.equals("")) {
pt.setName(parseVariables(name));
}
pt.setColorType(ConstructionObject.NORMAL);
pt.setShowName(false);
pt.setShowValue(false);
pt.validate();
addObject(pt);
return pt.getName();
}
}
/**
* Set or Create a bounded point
* @param name Name of the bound point
* @param obj Name of the object
* @return Name of the set or created point
*/
static public String PointOn(String name, String obj) {
PointObject pt;
synchronized (getC()) {
if (obj.equals("undefined")) {
obj=parseVariables(name);//à tester...
pt=new PointObject(getC(), 0, 0);
pt.setDefaults();
addObject(pt);
} else {
ConstructionObject co=getC().find(name);
if (co==null) {
pt=new PointObject(getC(), name);
pt.setDefaults();
addObject(pt);
} else {
pt=(PointObject) co;
}
}
pt.setBound(obj);
pt.setUseAlpha(true); //pt will keep his barycentric coordinates relative to obj
//to avoid the bound point being too near of an existing point
final Enumeration e=getC().elements();
while (e.hasMoreElements()) {
ConstructionObject c=(ConstructionObject) e.nextElement();
if (c instanceof PointObject) {
if ((pt.getX()-c.getX()<0.1)&&(pt.getY()-c.getY()<0.1)) {
pt.setXY(pt.getX()+Math.random()*2-1, pt.getY()+Math.random()*2-1);
break;
}
}
}
return pt.getName();
}
}
static public String PointSur(String name, String obj) {
PointObject pt;
synchronized (getC()) {
if (obj.equals("undefined")) {
obj=parseVariables(name);//à tester...
pt=new PointObject(getC(), 0, 0);
pt.setDefaults();
addObject(pt);
} else {
ConstructionObject co=getC().find(name);
if (co==null) {
pt=new PointObject(getC(), name);
pt.setDefaults();
addObject(pt);
} else {
pt=(PointObject) co;
}
}
pt.setBound(obj);
pt.setUseAlpha(true); //pt will keep his barycentric coordinates relative to obj
//to avoid the bound point being too near of an existing point
final Enumeration e=getC().elements();
while (e.hasMoreElements()) {
ConstructionObject c=(ConstructionObject) e.nextElement();
if (c instanceof PointObject) {
if ((pt.getX()-c.getX()<0.1)&&(pt.getY()-c.getY()<0.1)) {
pt.setXY(pt.getX()+Math.random()*2-1, pt.getY()+Math.random()*2-1);
break;
}
}
}
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) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
String sn = Global.name("name.short.Midpoint");
if (name.equals("")) {
c(sn+"("+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+b+")");
}
return LastNObjectsName(1);
}
}
static public String Milieu(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
String sn = Global.name("name.short.Midpoint");
if (name.equals("")) {
c(sn+"("+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+b+")");
}
return LastNObjectsName(1);
}
}
/**
* Reflects the point p with line d
* @param name Name of the Symmetric
* @param l Reflection line
* @param p Point to reflect
* @return the reflection point name
* @throws java.lang.Exception
*/
static public String Reflection(String name, String l, String p) throws Exception {
synchronized (getC()) {
if (p.equals("undefined")) {
p=l;
l=name;
name="";
}
l=parseVariables(l);
p=parseVariables(p);
if (name.equals("")) {
c("@builtin@/syma("+l+","+p+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"=@builtin@/syma("+l+","+p+")");
}
return LastNObjectsName(1);
}
}
static public String SymétrieAxiale(String name, String l, String p) throws Exception {
synchronized (getC()) {
if (p.equals("undefined")) {
p=l;
l=name;
name="";
}
l=parseVariables(l);
p=parseVariables(p);
if (name.equals("")) {
c("@builtin@/syma("+l+","+p+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"=@builtin@/syma("+l+","+p+")");
}
return LastNObjectsName(1);
}
}
/**
* 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
* @throws java.lang.Exception
*/
static public String Translation(String name, String a, String b, String p) throws Exception {
synchronized (getC()) {
if (p.equals("undefined")) {
p=b;
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
p=parseVariables(p);
if (name.equals("")) {
c("@builtin@/trans("+a+","+b+","+p+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"=@builtin@/trans("+a+","+b+","+p+")");
}
return LastNObjectsName(1);
}
}
/**
* Reflect the point b with center a
* @param name Name of the Reflect point
* @param a Symmetry center
* @param b Point to reflect
* @return the symmetric point name
*/
static public String Symmetry(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
String sn = Global.name("name.short.Point");
if (name.equals("")) {
c(sn+"(2*x("+a+")-x("+b+"),2*y("+a+")-y("+b+"))");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"(2*x("+a+")-x("+b+"),2*y("+a+")-y("+b+"))");
}
return LastNObjectsName(1);
}
}
static public String SymétrieCentrale(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
String sn = Global.name("name.short.Point");
if (name.equals("")) {
c(sn+"(2*x("+a+")-x("+b+"),2*y("+a+")-y("+b+"))");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"(2*x("+a+")-x("+b+"),2*y("+a+")-y("+b+"))");
}
return LastNObjectsName(1);
}
}
/**
* Creates 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) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
if (name.equals("")) {
c("@builtin@/med("+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"=@builtin@/med("+a+","+b+")");
}
return LastNObjectsName(1);
}
}
static public String Médiatrice(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
if (name.equals("")) {
c("@builtin@/med("+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"=@builtin@/med("+a+","+b+")");
}
return LastNObjectsName(1);
}
}
/**
* 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
* @throws java.lang.Exception
*/
static public String AngleBisector(String name, String a, String b, String c) throws Exception {
synchronized (getC()) {
if (c.equals("undefined")) {
c=b;
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
c=parseVariables(c);
if (name.equals("")) {
c("@builtin@/biss("+a+","+b+","+c+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"=@builtin@/biss("+a+","+b+","+c+")");
}
return LastNObjectsName(1);
}
}
static public String Bissectrice(String name, String a, String b, String c) throws Exception {
synchronized (getC()) {
if (c.equals("undefined")) {
c=b;
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
c=parseVariables(c);
if (name.equals("")) {
c("@builtin@/biss("+a+","+b+","+c+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"=@builtin@/biss("+a+","+b+","+c+")");
}
return LastNObjectsName(1);
}
}
/**
* Create the circumcicular 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 circumcicular circle name
* @throws java.lang.Exception
*/
static public String Circle3pts(String name, String a, String b, String c) throws Exception {
synchronized (getC()) {
if (c.equals("undefined")) {
c=b;
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
c=parseVariables(c);
if (name.equals("")) {
c("@builtin@/circ("+a+","+b+","+c+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"=@builtin@/circ("+a+","+b+","+c+")");
}
getC().lastButN(0).setDefaults();
return LastNObjectsName(1);
}
}
static public String Cercle3pts(String name, String a, String b, String c) throws Exception {
synchronized (getC()) {
if (c.equals("undefined")) {
c=b;
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
c=parseVariables(c);
if (name.equals("")) {
c("@builtin@/circ("+a+","+b+","+c+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"=@builtin@/circ("+a+","+b+","+c+")");
}
getC().lastButN(0).setDefaults();
return LastNObjectsName(1);
}
}
/**
* Creates 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
* @throws java.lang.Exception
*/
static public String Circle3(String name, String a, String b, String c) throws Exception {
synchronized (getC()) {
if (c.equals("undefined")) {
c=b;
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
c=parseVariables(c);
String sn = Global.name("name.short.Circle3");
if (name.equals("")) {
c(sn+"("+a+","+b+","+c+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+b+","+c+")");
}
return LastNObjectsName(1);
}
}
static public String Cercle3(String name, String a, String b, String c) throws Exception {
synchronized (getC()) {
if (c.equals("undefined")) {
c=b;
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
c=parseVariables(c);
String sn = Global.name("name.short.Circle3");
if (name.equals("")) {
c(sn+"("+a+","+b+","+c+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+b+","+c+")");
}
return LastNObjectsName(1);
}
}
/**
* 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
* @throws java.lang.Exception
*/
static public String Arc3pts(String name, String a, String b, String c) throws Exception {
synchronized (getC()) {
if (c.equals("undefined")) {
c=b;
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
c=parseVariables(c);
if (name.equals("")) {
c("@builtin@/arc("+a+","+b+","+c+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"=@builtin@/arc("+a+","+b+","+c+")");
}
return LastNObjectsName(1);
}
}
/**
* 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 <i>name</i> parameter, two intersection
* points will be created, if the <i>a</i> and <i>b</i> 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
* @param order Number which gives the order of intersection : 0 means first
* @return Name of intersection point
* @throws java.lang.Exception
* @see #Intersection2
*/
static public String OrderedIntersection(String name, String a, String b, String order) throws Exception {
synchronized (getC()) {
if (order.equals("undefined")) {
order=b;
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
order=parseVariables(order);
String sn = Global.name("name.short.Intersection");
if (name.equals("")) {
c(sn+"("+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+b+")");
}
IntersectionObject i=(IntersectionObject) getC().lastButN(0);
i.setFirst(Integer.valueOf(order)==0);
return LastNObjectsName(1);
}
}
static public String IntersectionOrdonnée(String name, String a, String b, String order) throws Exception {
synchronized (getC()) {
if (order.equals("undefined")) {
order=b;
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
order=parseVariables(order);
String sn = Global.name("name.short.Intersection");
if (name.equals("")) {
c(sn+"("+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+b+")");
}
IntersectionObject i=(IntersectionObject) getC().lastButN(0);
i.setFirst(Integer.valueOf(order)==0);
return LastNObjectsName(1);
}
}
/**
* 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 <i>name</i> parameter, two intersection
* points will be created, if the <i>a</i> and <i>b</i> 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
* @throws java.lang.Exception
* @see #Intersection2
*/
static public String Intersection(String name, String a, String b) throws Exception {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
String sn = Global.name("name.short.Intersection");
if (name.equals("")) {
c(sn+"("+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+b+")");
}
return LastNObjectsName(1);
}
}
/**
* 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) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name2;
name2=name1;
name1="";
if (b.equals("undefined")) {
b=a;
a=name2;
name2="";
}
}
a=parseVariables(a);
b=parseVariables(b);
String sn = Global.name("name.short.Intersection");
if (name1.equals("")) {
c("I2,I1="+sn+"("+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
c(name2+","+name1+"="+sn+"("+a+","+b+")");
}
return LastNObjectsName(2);
}
}
/**
* General case: The number of the intersection points depends
* on the nature of the lines intersected
* @param name of the first intersection point
* @param a Name of first object
* @param b Name of second object
* @return list of the intersection points in a String
* @throws java.lang.Exception
* @see #Intersection
*/
static public String Intersections(String name, String a, String b) throws Exception {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
String sn = Global.name("name.short.Intersection");
if (name.equals("")) {
c(sn+"("+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+b+")");
}
if (getC().find(a) instanceof PrimitiveLineObject&&getC().find(b) instanceof PrimitiveLineObject) {
return LastNObjectsName(1);
} else {
if ((getC().find(a) instanceof PrimitiveCircleObject||getC().find(b) instanceof PrimitiveCircleObject)
||(getC().find(a) instanceof PrimitiveLineObject&&getC().find(b) instanceof QuadricObject)
||(getC().find(a) instanceof QuadricObject&&getC().find(b) instanceof PrimitiveLineObject)) {
return LastNObjectsName(2);
} else {
if (getC().find(a) instanceof QuadricObject&&getC().find(b) instanceof QuadricObject) {
return LastNObjectsName(4);
} else {
if (getC().find(a) instanceof FunctionObject||getC().find(b) instanceof FunctionObject) {
return LastNObjectsName(1);
} else {
throw new Exception(Loc("notgoodtype"));
}
}
}
}
}
}
/**
* 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) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
String sn = Global.name("name.short.Line");
if (name.equals("")) {
c(sn+"("+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+b+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
static public String Droite(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
String sn = Global.name("name.short.Line");
if (name.equals("")) {
c(sn+"("+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+b+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
/**
* 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) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
String sn = Global.name("name.short.Ray");
if (name.equals("")) {
c(sn+"("+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+b+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
static public String DemiDroite(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
String sn = Global.name("name.short.Ray");
if (name.equals("")) {
c(sn+"("+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+b+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
/**
* 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) {
synchronized (getC()) {
if (c.equals("undefined")) {
c=b;
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
c=parseVariables(c);
String sn = Global.name("name.short.Angle");
if (name.equals("")) {
c(sn+"("+a+","+b+","+c+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+b+","+c+")");
}
return LastNObjectsName(1);
}
}
/**
* 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) throws Exception{
synchronized (getC()) {
if (c.equals("undefined")) {
c=b;
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
String sn = Global.name("name.short.Angle");
try {
if (name.equals("")) {
c(sn+"("+a+","+b+","+Math.round(Double.valueOf(c)*1E13)/1E13+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+b+","+Math.round(Double.valueOf(c)*1E13)/1E13+")");
}
NormalizeLast();
getC().lastButN(0).setDefaults();
return LastNObjectsName(1);
} catch (NumberFormatException e) {
try {
if (name.equals("")) {
c(sn+"("+a+","+b+",0)");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+b+",0)");
}
NormalizeLast();
getC().lastButN(0).setDefaults();
c=parseVariables(c);
((FixedAngleObject) getC().lastButN(0)).setFixed(c);
return LastNObjectsName(1);
} catch (Exception ex) {
throw new Exception(Loc("notgoodtype"));
}
}
}
}
static public String AngleFixe(String name, String a, String b, String c) throws Exception{
synchronized (getC()) {
if (c.equals("undefined")) {
c=b;
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
String sn = Global.name("name.short.Angle");
try {
if (name.equals("")) {
c(sn+"("+a+","+b+","+Math.round(Double.valueOf(c)*1E13)/1E13+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+b+","+Math.round(Double.valueOf(c)*1E13)/1E13+")");
}
NormalizeLast();
getC().lastButN(0).setDefaults();
return LastNObjectsName(1);
} catch (NumberFormatException e) {
try {
if (name.equals("")) {
c(sn+"("+a+","+b+",0)");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+b+",0)");
}
NormalizeLast();
getC().lastButN(0).setDefaults();
c=parseVariables(c);
((FixedAngleObject) getC().lastButN(0)).setFixed(c);
return LastNObjectsName(1);
} catch (Exception ex) {
throw new Exception(Loc("notgoodtype"));
}
}
}
}
/**
* Set angles as reflex or not.
* <br><b>Example</b> : <i><b>ReflexAngle("a1,a2",true)</b></i>
* @param name Name(s) of object.
* @param bool "true" to set as reflex, "false" to have only angles less than 180°.
* @throws java.lang.Exception
*/
static public void ReflexAngle(String name, boolean bool) throws Exception {
String[] names=parseVariables(name).split(",");
for (String name1 : names) {
ConstructionObject o = getC().find(name1);
if (!(o instanceof AngleObject)) {
throw new Exception(Loc("notgoodtype"));
}
if (o!=null && true) {
o.setObtuse(bool);
}
}
}
static public void AngleRentrant(String name, boolean bool) throws Exception {
String[] names=parseVariables(name).split(",");
for (String name1 : names) {
ConstructionObject o = getC().find(name1);
if (!(o instanceof AngleObject)) {
throw new Exception(Loc("notgoodtype"));
}
if (o!=null && true) {
o.setObtuse(bool);
}
}
}
/**
* Execute a macro-construction m with parameters params
* @param lastObjName Name of last created object(s)
* @param macroname Name of macro
* @param params list of objects (e.g. "A,E,F,G")
* @return Name of the last created object or the String array with all targets name
*/
static public Object ExecuteMacro(String lastObjName, String macroname, String params) {
synchronized (getC()) {
if (params.equals("undefined")) {
params=macroname;
macroname=lastObjName;
lastObjName="";
}
if (lastObjName.equals("")) {
c(macroname+"("+parseVariables(params)+")");
//getC().lastButN(0).setShowName(false);
} else {
c(parseVariables(lastObjName)+"="+macroname+"("+parseVariables(params)+")");
}
String[] TargetsNamesArray = MacroRunner.TargetsNameList.toArray(new String[MacroRunner.TargetsNameList.size()]);
for (int i=0; i<TargetsNamesArray.length; i++) {
getC().lastButN(i).setShowName(false);
}
if (TargetsNamesArray.length == 0) {
return getC().lastButN(0).getName();
} else if (TargetsNamesArray.length == 1) {
return TargetsNamesArray[0];
} else {
return TargetsNamesArray;
}
}
}
static public Object ExécuterMacro(String lastObjName, String macroname, String params) {
synchronized (getC()) {
if (params.equals("undefined")) {
params=macroname;
macroname=lastObjName;
lastObjName="";
}
if (lastObjName.equals("")) {
c(macroname+"("+parseVariables(params)+")");
//getC().lastButN(0).setShowName(false);
} else {
c(parseVariables(lastObjName)+"="+macroname+"("+parseVariables(params)+")");
}
String[] TargetsNamesArray = MacroRunner.TargetsNameList.toArray(new String[MacroRunner.TargetsNameList.size()]);
for (int i=0; i<TargetsNamesArray.length; i++) {
getC().lastButN(i).setShowName(false);
}
if (TargetsNamesArray.length == 0) {
return getC().lastButN(0).getName();
} else if (TargetsNamesArray.length == 1) {
return TargetsNamesArray[0];
} else {
return TargetsNamesArray;
}
}
}
/**
* @author Dibs
* idem ExecuteMacro but return the String array with all targets names in the order given when the macro was constructed
*/
static public Object ExecuteMacroAsBuilt(String lastObjName, String macroname, String params) {
synchronized (getC()) {
if (params.equals("undefined")) {
params=macroname;
macroname=lastObjName;
lastObjName="";
}
if (lastObjName.equals("")) {
c(macroname+"("+parseVariables(params)+")");
//getC().lastButN(0).setShowName(false);
} else {
c(parseVariables(lastObjName)+"="+macroname+"("+parseVariables(params)+")");
}
if (MacroRunner.TargetsNameList.size()<2) {
getC().lastButN(0).setShowName(false);
return MacroRunner.TargetsNameList.get(0);
}
else if (MacroRunner.TargetsIndexList.get(0)!=MacroRunner.TargetsIndexList.get(1)) {
String[] TargetsNamesArray = new String[MacroRunner.TargetsNameList.size()];
for (int k=0; k<MacroRunner.TargetsNameList.size(); k++) {
TargetsNamesArray[MacroRunner.TargetsIndexList.get(k)] = MacroRunner.TargetsNameList.get(k);
}
for (int i=0; i<TargetsNamesArray.length; i++) {
getC().lastButN(i).setShowName(false);
}
return TargetsNamesArray;
}
else {
String[] TargetsNamesArray = MacroRunner.TargetsNameList.toArray(new String[MacroRunner.TargetsNameList.size()]);
for (int i=0; i<TargetsNamesArray.length; i++) {
getC().lastButN(i).setShowName(false);
}
return TargetsNamesArray;
}
}
}
static public Object ExécuterMacroCommeDéfinie(String lastObjName, String macroname, String params) {
synchronized (getC()) {
if (params.equals("undefined")) {
params=macroname;
macroname=lastObjName;
lastObjName="";
}
if (lastObjName.equals("")) {
c(macroname+"("+parseVariables(params)+")");
//getC().lastButN(0).setShowName(false);
} else {
c(parseVariables(lastObjName)+"="+macroname+"("+parseVariables(params)+")");
}
if (MacroRunner.TargetsNameList.size()<2) {
getC().lastButN(0).setShowName(false);
return MacroRunner.TargetsNameList.get(0);
}
else if (MacroRunner.TargetsIndexList.get(0)!=MacroRunner.TargetsIndexList.get(1)) {
String[] TargetsNamesArray = new String[MacroRunner.TargetsNameList.size()];
for (int k=0; k<MacroRunner.TargetsNameList.size(); k++) {
TargetsNamesArray[MacroRunner.TargetsIndexList.get(k)] = MacroRunner.TargetsNameList.get(k);
}
for (int i=0; i<TargetsNamesArray.length; i++) {
getC().lastButN(i).setShowName(false);
}
return TargetsNamesArray;
}
else {
String[] TargetsNamesArray = MacroRunner.TargetsNameList.toArray(new String[MacroRunner.TargetsNameList.size()]);
for (int i=0; i<TargetsNamesArray.length; i++) {
getC().lastButN(i).setShowName(false);
}
return TargetsNamesArray;
}
}
}
/**
* Creates a polygon define by a list of points. e.g. Polygon("","A,B,C")
* will create the triangle ABgetC().
* @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) {
synchronized (getC()) {
if (params.equals("undefined")) {
params=name;
name="";
}
String[] c=parseVariables(params).split(",");
Vector V=new Vector();
for (String c1 : c) {
ConstructionObject o = getC().find(c1);
if (o!=null) {
V.add(o);
}
}
AreaObject poly=new AreaObject(getC(), V);
poly.setDefaults();
if (!name.equals("")) {
poly.setName(name);
}
poly.validate();
addObject(poly);
return LastNObjectsName(1);
}
}
static public String Polygone(String name, String params) {
synchronized (getC()) {
if (params.equals("undefined")) {
params=name;
name="";
}
String[] c=parseVariables(params).split(",");
Vector V=new Vector();
for (String c1 : c) {
ConstructionObject o = getC().find(c1);
if (o!=null) {
V.add(o);
}
}
AreaObject poly=new AreaObject(getC(), V);
poly.setDefaults();
if (!name.equals("")) {
poly.setName(name);
}
poly.validate();
addObject(poly);
return LastNObjectsName(1);
}
}
static public String Polygone3D(String name, String params) throws Exception{
synchronized (getC()) {
if (params.equals("undefined")) {
params=name;
name="";
}
String[] c=parseVariables(params).split(",");
Vector V=new Vector();
for (String c1 : c) {
ConstructionObject o = getC().find(c1);
if (o!=null) {
V.add(o);
}
}
AreaObject poly=new AreaObject(getC(), V);
poly.setDefaults();
if (!name.equals("")) {
poly.setName(name);
}
poly.validate();
addObject(poly);
String expCalque="(-cos(E10)*cos(E11)*(";
for (int i=0;i<c.length-1;i++) {
ConstructionObject o = getC().find(c[i]);
expCalque +="x3D("+o.getName()+")+";
}
expCalque +="x3D("+getC().find(c[c.length-1]).getName()+"))+sin(E10)*cos(E11)*(";
for (int i=0;i<c.length-1;i++) {
ConstructionObject o = getC().find(c[i]);
expCalque +="y3D("+o.getName()+")+";
}
expCalque +="y3D("+getC().find(c[c.length-1]).getName()+"))-sin(E11)*(";
for (int i=0;i<c.length-1;i++) {
ConstructionObject o = getC().find(c[i]);
expCalque +="z3D("+o.getName()+")+";
}
expCalque +="z3D("+getC().find(c[c.length-1]).getName()+")))/"+c.length;
Expression e=new Expression(parseVariables(expCalque), getC(), poly);
if (!e.isValid()) {
throw new Exception(Loc("condition"));
}
poly.addConditional("z", e);
return LastNObjectsName(1);
}
}
static public String Polygon3D(String name, String params) throws Exception{
synchronized (getC()) {
if (params.equals("undefined")) {
params=name;
name="";
}
String[] c=parseVariables(params).split(",");
Vector V=new Vector();
for (String c1 : c) {
ConstructionObject o = getC().find(c1);
if (o!=null) {
V.add(o);
}
}
AreaObject poly=new AreaObject(getC(), V);
poly.setDefaults();
if (!name.equals("")) {
poly.setName(name);
}
poly.validate();
addObject(poly);
String expCalque="(-cos(E10)*cos(E11)*(";
for (int i=0;i<c.length-1;i++) {
ConstructionObject o = getC().find(c[i]);
expCalque +="x3D("+o.getName()+")+";
}
expCalque +="x3D("+getC().find(c[c.length-1]).getName()+"))+sin(E10)*cos(E11)*(";
for (int i=0;i<c.length-1;i++) {
ConstructionObject o = getC().find(c[i]);
expCalque +="y3D("+o.getName()+")+";
}
expCalque +="y3D("+getC().find(c[c.length-1]).getName()+"))-sin(E11)*(";
for (int i=0;i<c.length-1;i++) {
ConstructionObject o = getC().find(c[i]);
expCalque +="z3D("+o.getName()+")+";
}
expCalque +="z3D("+getC().find(c[c.length-1]).getName()+")))/"+c.length;
Expression e=new Expression(parseVariables(expCalque), getC(), poly);
if (!e.isValid()) {
throw new Exception(Loc("condition"));
}
poly.addConditional("z", e);
return LastNObjectsName(1);
}
}
static public String Triangle(String name, String som1, String som2, String som3) {
synchronized (getC()) {
if (som3.equals("undefined")) {
som3=som2; som2=som1; som1=name;
name="";
}
Vector V=new Vector();
ConstructionObject o = getC().find(som1);
if (o!=null) {
V.add(o);
}
o = getC().find(som2);
if (o!=null) {
V.add(o);
}
o = getC().find(som3);
if (o!=null) {
V.add(o);
}
AreaObject poly=new AreaObject(getC(), V);
poly.setDefaults();
if (!name.equals("")) {
poly.setName(name);
}
poly.validate();
addObject(poly);
return LastNObjectsName(1);
}
}
static public String Triangle3D(String name, String som1, String som2, String som3) throws Exception{
synchronized (getC()) {
if (som3.equals("undefined")) {
som3=som2; som2=som1; som1=name;
name="";
}
Vector V=new Vector();
ConstructionObject o = getC().find(som1);
if (o!=null) {
V.add(o);
}
o = getC().find(som2);
if (o!=null) {
V.add(o);
}
o = getC().find(som3);
if (o!=null) {
V.add(o);
}
AreaObject poly=new AreaObject(getC(), V);
poly.setDefaults();
if (!name.equals("")) {
poly.setName(name);
}
poly.validate();
addObject(poly);
String expCalque="(-cos(E10)*cos(E11)*(x3D("+som1+")+x3D("+som2+")+x3D("+som3+"))";
expCalque += "+sin(E10)*cos(E11)*(y3D("+som1+")+y3D("+som2+")+y3D("+som3+"))";
expCalque += "-sin(E11)*(z3D("+som1+")+z3D("+som2+")+z3D("+som3+")))/3";
Expression e=new Expression(parseVariables(expCalque), getC(), poly);
if (!e.isValid()) {
throw new Exception(Loc("condition"));
}
poly.addConditional("z", e);
return LastNObjectsName(1);
}
}
static public String Quadrilatère(String name, String som1, String som2, String som3, String som4) {
synchronized (getC()) {
if (som4.equals("undefined")) {
som4=som3; som3=som2; som2=som1; som1=name;
name="";
}
Vector V=new Vector();
ConstructionObject o = getC().find(som1);
if (o!=null) {
V.add(o);
}
o = getC().find(som2);
if (o!=null) {
V.add(o);
}
o = getC().find(som3);
if (o!=null) {
V.add(o);
}
o = getC().find(som4);
if (o!=null) {
V.add(o);
}
AreaObject poly=new AreaObject(getC(), V);
poly.setDefaults();
if (!name.equals("")) {
poly.setName(name);
}
poly.validate();
addObject(poly);
return LastNObjectsName(1);
}
}
static public String Quadrangle(String name, String som1, String som2, String som3, String som4) {
synchronized (getC()) {
if (som4.equals("undefined")) {
som4=som3; som3=som2; som2=som1; som1=name;
name="";
}
Vector V=new Vector();
ConstructionObject o = getC().find(som1);
if (o!=null) {
V.add(o);
}
o = getC().find(som2);
if (o!=null) {
V.add(o);
}
o = getC().find(som3);
if (o!=null) {
V.add(o);
}
o = getC().find(som4);
if (o!=null) {
V.add(o);
}
AreaObject poly=new AreaObject(getC(), V);
poly.setDefaults();
if (!name.equals("")) {
poly.setName(name);
}
poly.validate();
addObject(poly);
return LastNObjectsName(1);
}
}
static public String Quadrilatère3D(String name, String som1, String som2, String som3, String som4) throws Exception{
synchronized (getC()) {
if (som4.equals("undefined")) {
som4=som3; som3=som2; som2=som1; som1=name;
name="";
}
Vector V=new Vector();
ConstructionObject o = getC().find(som1);
if (o!=null) {
V.add(o);
}
o = getC().find(som2);
if (o!=null) {
V.add(o);
}
o = getC().find(som3);
if (o!=null) {
V.add(o);
}
o = getC().find(som4);
if (o!=null) {
V.add(o);
}
AreaObject poly=new AreaObject(getC(), V);
poly.setDefaults();
if (!name.equals("")) {
poly.setName(name);
}
poly.validate();
addObject(poly);
String expCalque="(-cos(E10)*cos(E11)*(x3D("+som1+")+x3D("+som2+")+x3D("+som3+")+x3D("+som4+"))";
expCalque += "+sin(E10)*cos(E11)*(y3D("+som1+")+y3D("+som2+")+y3D("+som3+")+y3D("+som4+"))";
expCalque += "-sin(E11)*(z3D("+som1+")+z3D("+som2+")+z3D("+som3+")+z3D("+som4+")))/4";
Expression e=new Expression(parseVariables(expCalque), getC(), poly);
if (!e.isValid()) {
throw new Exception(Loc("condition"));
}
poly.addConditional("z", e);
return LastNObjectsName(1);
}
}
static public String Quadrangle3D(String name, String som1, String som2, String som3, String som4) throws Exception{
synchronized (getC()) {
if (som4.equals("undefined")) {
som4=som3; som3=som2; som2=som1; som1=name;
name="";
}
Vector V=new Vector();
ConstructionObject o = getC().find(som1);
if (o!=null) {
V.add(o);
}
o = getC().find(som2);
if (o!=null) {
V.add(o);
}
o = getC().find(som3);
if (o!=null) {
V.add(o);
}
o = getC().find(som4);
if (o!=null) {
V.add(o);
}
AreaObject poly=new AreaObject(getC(), V);
poly.setDefaults();
if (!name.equals("")) {
poly.setName(name);
}
poly.validate();
addObject(poly);
String expCalque="(-cos(E10)*cos(E11)*(x3D("+som1+")+x3D("+som2+")+x3D("+som3+")+x3D("+som4+"))";
expCalque += "+sin(E10)*cos(E11)*(y3D("+som1+")+y3D("+som2+")+y3D("+som3+")+y3D("+som4+"))";
expCalque += "-sin(E11)*(z3D("+som1+")+z3D("+som2+")+z3D("+som3+")+z3D("+som4+")))/4";
Expression e=new Expression(parseVariables(expCalque), getC(), poly);
if (!e.isValid()) {
throw new Exception(Loc("condition"));
}
poly.addConditional("z", e);
return LastNObjectsName(1);
}
}
/**
* 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) {
synchronized (getC()) {
if (e.equals("undefined")) {
e=d;
d=c;
c=b;
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
c=parseVariables(c);
d=parseVariables(d);
e=parseVariables(e);
String sn = Global.name("name.short.Quadric");
if (name.equals("")) {
c(sn+"("+a+","+b+","+c+","+d+","+e+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+b+","+c+","+d+","+e+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
static public String Quadrique(String name, String a, String b, String c, String d, String e) {
synchronized (getC()) {
if (e.equals("undefined")) {
e=d;
d=c;
c=b;
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
c=parseVariables(c);
d=parseVariables(d);
e=parseVariables(e);
String sn = Global.name("name.short.Quadric");
if (name.equals("")) {
c(sn+"("+a+","+b+","+c+","+d+","+e+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+b+","+c+","+d+","+e+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
/**
* 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) {
synchronized (getC()) {
if (fx.equals("undefined")) {
fx=b;
b=a;
a=name;
name="";
}
final FunctionObject f=new FunctionObject(getC());
f.setDefaults();
if (!name.equals("")) {
f.setName(name);
}
f.setExpressions("x", "", parseVariables(fx));
if ((!a.equals(""))&&(!b.equals(""))) {
f.setRange(a, b, "0");
}
addObject(f);
refreshZC();
NormalizeLast();
return f.getName();
}
}
static public String FonctionCartésienne(String name, String a, String b, String fx) {
synchronized (getC()) {
if (fx.equals("undefined")) {
fx=b;
b=a;
a=name;
name="";
}
final FunctionObject f=new FunctionObject(getC());
f.setDefaults();
if (!name.equals("")) {
f.setName(name);
}
f.setExpressions("x", "", parseVariables(fx));
if ((!a.equals(""))&&(!b.equals(""))) {
f.setRange(a, b, "0");
}
addObject(f);
refreshZC();
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) {
synchronized (getC()) {
if (yt.equals("undefined")) {
yt=xt;
xt=b;
b=a;
a=name;
name="";
}
final FunctionObject f=new FunctionObject(getC());
f.setDefaults();
if (!name.equals("")) {
f.setName(name);
}
f.setExpressions("t", parseVariables(xt), parseVariables(yt));
if ((!a.equals(""))&&(!b.equals(""))) {
f.setRange(a, b, "0");
}
addObject(f);
refreshZC();
NormalizeLast();
return f.getName();
}
}
static public String FonctionParamétrique(String name, String a, String b, String xt, String yt) {
synchronized (getC()) {
if (yt.equals("undefined")) {
yt=xt;
xt=b;
b=a;
a=name;
name="";
}
final FunctionObject f=new FunctionObject(getC());
f.setDefaults();
if (!name.equals("")) {
f.setName(name);
}
f.setExpressions("t", parseVariables(xt), parseVariables(yt));
if ((!a.equals(""))&&(!b.equals(""))) {
f.setRange(a, b, "0");
}
addObject(f);
refreshZC();
NormalizeLast();
return f.getName();
}
}
static public void SetMinOpen(String name, boolean bool) {
String[] names=parseVariables(name).split(",");
for (String name1 : names) {
ConstructionObject o = getC().find(name1);
if (o!=null && o instanceof FunctionObject) {
FunctionObject of=(FunctionObject) o;
of.setMinOpen(bool);
}
}
}
static public void SetMinClosed(String name, boolean bool) {
String[] names=parseVariables(name).split(",");
for (String name1 : names) {
ConstructionObject o = getC().find(name1);
if (o!=null && o instanceof FunctionObject) {
FunctionObject of=(FunctionObject) o;
of.setMinClosed(bool);
}
}
}
static public void SetMaxOpen(String name, boolean bool) {
String[] names=parseVariables(name).split(",");
for (String name1 : names) {
ConstructionObject o = getC().find(name1);
if (o!=null && o instanceof FunctionObject) {
FunctionObject of=(FunctionObject) o;
of.setMaxOpen(bool);
}
}
}
static public void SetMaxClosed(String name, boolean bool) {
String[] names=parseVariables(name).split(",");
for (String name1 : names) {
ConstructionObject o = getC().find(name1);
if (o!=null && o instanceof FunctionObject) {
FunctionObject of=(FunctionObject) o;
of.setMaxClosed(bool);
}
}
}
/**
* Creates an implicit curve as the set of zeroes of f (function of x and y)
* @param name Name of the function (suggestion)
* @param f expression (should depend on x and y)
* @return Name of the function
*/
static public String ImplicitPlot(String name, String f) {
synchronized (getC()) {
if (f.equals("undefined")) {
f=name;
name="";
}
final EquationXYObject e=new EquationXYObject(getC(), parseVariables(f));
e.setDefaults();
if (!name.equals("")) {
e.setName(name);
}
addObject(e);
refreshZC();
NormalizeLast();
return e.getName();
}
}
static public String TracéImplicite(String name, String f) {
synchronized (getC()) {
if (f.equals("undefined")) {
f=name;
name="";
}
final EquationXYObject e=new EquationXYObject(getC(), parseVariables(f));
e.setDefaults();
if (!name.equals("")) {
e.setName(name);
}
addObject(e);
refreshZC();
NormalizeLast();
return e.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) {
synchronized (getC()) {
if (r.equals("undefined")) {
r=a;
a=name;
name="";
}
a=parseVariables(a);
r=parseVariables(r);
String sn = Global.name("name.short.Segment");
if (name.equals("")) {
c(sn+"("+a+","+r+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+r+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
static public String SegmentFixe(String name, String a, String r) {
synchronized (getC()) {
if (r.equals("undefined")) {
r=a;
a=name;
name="";
}
a=parseVariables(a);
r=parseVariables(r);
String sn = Global.name("name.short.Segment");
if (name.equals("")) {
c(sn+"("+a+","+r+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+r+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
/**
* 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) {
synchronized (getC()) {
SegmentObject so;
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
try {
so=new SegmentObject(getC(), (PointObject) getC().find(a), (PointObject) getC().find(b));
} catch (Exception e) {
return "";
}
so.setDefaults();
if (!name.equals("")) {
so.setName(parseVariables(name));
}
so.setArrow(false);
//so.setColorType(ConstructionObject.NORMAL);
so.setShowName(false);
so.setShowValue(false);
so.validate();
addObject(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) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
VectorObject vo;
try {
vo=new VectorObject(getC(), (PointObject) getC().find(a), (PointObject) getC().find(b));
} catch (Exception e) {
return "";
}
vo.setDefaults();
if (!name.equals("")) {
vo.setName(parseVariables(name));
}
vo.setColorType(ConstructionObject.NORMAL);
vo.setShowName(false);
vo.setShowValue(false);
addObject(vo);
return vo.getName();
}
}
static public String Vecteur(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
VectorObject vo;
try {
vo=new VectorObject(getC(), (PointObject) getC().find(a), (PointObject) getC().find(b));
} catch (Exception e) {
return "";
}
vo.setDefaults();
if (!name.equals("")) {
vo.setName(parseVariables(name));
}
vo.setColorType(ConstructionObject.NORMAL);
vo.setShowName(false);
vo.setShowValue(false);
addObject(vo);
return vo.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) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
String sn = Global.name("name.short.Circle");
if (name.equals("")) {
c(sn+"("+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+b+")");
}
NormalizeLast();
getC().lastButN(0).setDefaults();
return LastNObjectsName(1);
}
}
static public String Cercle(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
String sn = Global.name("name.short.Circle");
if (name.equals("")) {
c(sn+"("+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+b+")");
}
NormalizeLast();
getC().lastButN(0).setDefaults();
return LastNObjectsName(1);
}
}
/**
* 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) throws Exception{
synchronized (getC()) {
if (r.equals("undefined")) {
r=a;
a=name;
name="";
}
a=parseVariables(a);
String sn = Global.name("name.short.Circle");
try {
if (name.equals("")) {
c(sn+"("+a+","+Math.round(Double.valueOf(r)*1E13)/1E13+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+Math.round(Double.valueOf(r)*1E13)/1E13+")");
}
NormalizeLast();
getC().lastButN(0).setDefaults();
return LastNObjectsName(1);
} catch (NumberFormatException e) {
try {
if (name.equals("")) {
c(sn+"("+a+",1)");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+",1)");
}
NormalizeLast();
getC().lastButN(0).setDefaults();
r=parseVariables(r);
((FixedCircleObject) getC().lastButN(0)).setFixed(r);
return LastNObjectsName(1);
} catch (Exception ex) {
throw new Exception(Loc("notgoodtype"));
}
}
}
}
static public String CercleRayon(String name, String a, String r) throws Exception{
synchronized (getC()) {
if (r.equals("undefined")) {
r=a;
a=name;
name="";
}
a=parseVariables(a);
String sn = Global.name("name.short.Circle");
try {
if (name.equals("")) {
c(sn+"("+a+","+Math.round(Double.valueOf(r)*1E13)/1E13+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+","+Math.round(Double.valueOf(r)*1E13)/1E13+")");
}
NormalizeLast();
getC().lastButN(0).setDefaults();
return LastNObjectsName(1);
} catch (NumberFormatException e) {
try {
if (name.equals("")) {
c(sn+"("+a+",1)");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+a+",1)");
}
NormalizeLast();
getC().lastButN(0).setDefaults();
r=parseVariables(r);
((FixedCircleObject) getC().lastButN(0)).setFixed(r);
return LastNObjectsName(1);
} catch (Exception ex) {
throw new Exception(Loc("notgoodtype"));
}
}
}
}
/**
* 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) {
synchronized (getC()) {
if (pt.equals("undefined")) {
pt=lne;
lne=name;
name="";
}
lne=parseVariables(lne);
pt=parseVariables(pt);
String sn = Global.name("name.short.Parallel");
if (name.equals("")) {
c(sn+"("+lne+","+pt+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+lne+","+pt+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
static public String Parallèle(String name, String lne, String pt) {
synchronized (getC()) {
if (pt.equals("undefined")) {
pt=lne;
lne=name;
name="";
}
lne=parseVariables(lne);
pt=parseVariables(pt);
String sn = Global.name("name.short.Parallel");
if (name.equals("")) {
c(sn+"("+lne+","+pt+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+lne+","+pt+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
/**
* 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) {
synchronized (getC()) {
if (pt.equals("undefined")) {
pt=lne;
lne=name;
name="";
}
lne=parseVariables(lne);
pt=parseVariables(pt);
String sn = Global.name("name.short.Plumb");
if (name.equals("")) {
c(sn+"("+lne+","+pt+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+lne+","+pt+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
static public String Perpendiculaire(String name, String lne, String pt) {
synchronized (getC()) {
if (pt.equals("undefined")) {
pt=lne;
lne=name;
name="";
}
lne=parseVariables(lne);
pt=parseVariables(pt);
String sn = Global.name("name.short.Plumb");
if (name.equals("")) {
c(sn+"("+lne+","+pt+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"="+sn+"("+lne+","+pt+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
/**
* 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) {
synchronized (getC()) {
if (y.equals("undefined")) {
y=x;
x=exp;
exp=name;
name="";
}
exp=parseVariables(exp);
final ExpressionObject p=new ExpressionObject(getC(), 0, 0);
p.setDefaults();
if (!name.equals("")) {
p.setName(name);
}
try {
p.setExpression(exp, getC());
} catch (final ConstructionException 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);
}
addObject(p);
NormalizeLast();
p.setShowValue(true);
refreshZC();
return p.getName();
}
}
//------------------------------------------------------------------------
//------------------------------------------------------------------------
// Complex numbers
//------------------------------------------------------------------------
//------------------------------------------------------------------------
//------------------------------------------------------------------------
//------------------------------------------------------------------------
// end of the complex numbers
//------------------------------------------------------------------------
//------------------------------------------------------------------------
//------------------------------------------------------------------------
//------------------------------------------------------------------------
// Hyperbolic Geometry in the Poincaré Disk (names beginning with "DP")
//------------------------------------------------------------------------
//------------------------------------------------------------------------
/**
* Creates an hyperbolic point inside the Poincaré disk.
* @param name Name of point (suggestion)
* @return Name of point object
* @throws java.lang.Exception
*/
static public String DPPoint(String name) throws Exception {
synchronized (getC()) {
double xx=getC().getX()+2*Math.random()-1;
double yy=getC().getY()+2*Math.random()-1;
String x=""+xx;
String y=""+yy;
if (name.equals("undefined")) {
name="";
}
PointObject pt=null;
try {
pt=new PointObject(getC(), Math.round(Double.valueOf(x)*1E13)/1E13, Math.round(Double.valueOf(y)*1E13)/1E13);
} catch (NumberFormatException e) {
try {
pt=new PointObject(getC(), 0.1, 0.01);
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.setBound("HzBack");
pt.setInside(true);
pt.setColorType(ConstructionObject.NORMAL);
pt.setShowName(false);
pt.setShowValue(false);
pt.validate();
addObject(pt);
return pt.getName();
}
}
/**
* Creates an hyperbolic 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 hyperbolic line
*/
static public String DPLine(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
if (name.equals("")) {
c("@builtin@/DP_line(Hz,"+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"=@builtin@/DP_line(Hz,"+a+","+b+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
/**
* Creates an hyperbolic segment (geodesic in the Poincaré disk) 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 hyperbolic segment
*/
static public String DPSegment(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
if (name.equals("")) {
c("@builtin@/DP_segment(Hz,"+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"=@builtin@/DP_segment(Hz,"+a+","+b+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
/**
* Creates an hyperbolic perpendicular line through a point
* @param name Name of the perpendicular (suggestion)
* @param l Name of the given hyperbolic linepoint
* @param p Name of the point
* @return Name of the created hyperbolic line
*/
static public String DPPerpendicular(String name, String l, String p) {
synchronized (getC()) {
if (p.equals("undefined")) {
p=l;
l=name;
name="";
}
l=parseVariables(l);
p=parseVariables(p);
if (name.equals("")) {
c("@builtin@/DP_plumb(Hz,"+l+","+p+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"=@builtin@/DP_plumb(Hz,"+l+","+p+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
/**
* Creates the perpendicular bisector of 2 points in the Poincaré disk
* @param name Name of the line to create (suggestion)
* @param a Name of first point
* @param b Name of second point
* @return Name of the created perpendicular bisector
*/
static public String DPPerpendicularBisector(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
if (name.equals("")) {
c("@builtin@/DP_bi_med(Hz,"+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"=@builtin@/DP_bi_med(Hz,"+a+","+b+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
/**
* Creates an hyperbolic midpoint
* @param name Name of the midpoint (suggestion)
* @param a Name of first point
* @param b Name of second point
* @return Name of the created midpoint
*/
static public String DPMidPoint(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
if (name.equals("")) {
c("@builtin@/DP_midpoint(Hz,"+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"=@builtin@/DP_midpoint(Hz,"+a+","+b+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
/**
* Creates an hyperbolic circle in the Poincaré disk
* @param name Name of the circle (suggestion)
* @param a Name of center (a point)
* @param b Name of a point on the circle
* @return Name of the created hyperbolic circle
*/
static public String DPCircle(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
if (name.equals("")) {
c("@builtin@/DP_circle(Hz,"+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"=@builtin@/DP_circle(Hz,"+a+","+b+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
/**
* Creates the image of a point in an hyperbolic mirror
* @param name Name of the image (suggestion)
* @param l Name of mirror (an hyperbolic line)
* @param p Name of point
* @return Name of the created image
*/
static public String DPReflexion(String name, String l, String p) {
synchronized (getC()) {
if (p.equals("undefined")) {
p=l;
l=name;
name="";
}
l=parseVariables(l);
p=parseVariables(p);
if (name.equals("")) {
c("@builtin@/DP_bi_syma(Hz,"+l+","+p+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"=@builtin@/DP_bi_syma(Hz,"+l+","+p+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
/**
* Creates the hyperbolic symmetric of a point behind another
* @param name Name of the symmetric (suggestion)
* @param a Name of center (a point)
* @param b Name of the point
* @return Name of the created symmetric
*/
static public String DPSymmetry(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
if (name.equals("")) {
c("@builtin@/DP_bi_symc(Hz,"+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"=@builtin@/DP_bi_symc(Hz,"+a+","+b+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
/**
* Creates an angular bisector in the hyperbolic Poincaré disk
* @param name Name of the bisector (suggestion)
* @param a Name of first point
* @param o Name of vertex
* @param b Name of second point
* @return Name of the bisector (an hyperbolic ray)
*/
static public String DPAngleBisector(String name, String a, String o, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=o;
o=a;
a=name;
name="";
}
a=parseVariables(a);
o=parseVariables(o);
b=parseVariables(b);
if (name.equals("")) {
c("@builtin@/DP_bi_biss(Hz,"+a+","+o+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"=@builtin@/DP_bi_biss(Hz,"+a+","+o+","+b+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
/**
* Creates the hyperbolic line which cuts 2 given lines at right angle
* @param name Name of the line (suggestion)
* @param a Name of first line
* @param b Name of second line
* @return Name of the created hyperbolic common perpendicular
*/
static public String DPCommonPerpendicular(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
if (name.equals("")) {
c("@builtin@/DP_bi_perp_common(Hz,"+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"=@builtin@/DP_bi_perp_common(Hz,"+a+","+b+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
/**
* Creates an hyperbolic ray
* @param name Name of the ray (suggestion)
* @param a Name of vertex
* @param b Name of a point on the ray
* @return Name of the created hyperbolic ray
*/
static public String DPRay(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
if (name.equals("")) {
c("@builtin@/DP_ray(Hz,"+a+","+b+")");
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
c(name+"=@builtin@/DP_ray(Hz,"+a+","+b+")");
}
NormalizeLast();
return LastNObjectsName(1);
}
}
//------------------------------------------------------------------------
//------------------------------------------------------------------------
// End of the hyperbolic Geometry in the Poincaré Disk
//------------------------------------------------------------------------
//------------------------------------------------------------------------
/**
* Creates a text.
* @param name Name of text object (suggestion)
* @param txt text to create (String)
* @param x x-coordinate of text (number or expression)
* @param y y-coordinate of text (number or expression)
* @return Name of text object
*/
static public String Text(String name, String txt, String x, String y) {
synchronized (getC()) {
if (y.equals("undefined")) {
y=x;
x=txt;
txt=name;
name="";
}
final TextObject p=new TextObject(getC(), 0, 0);
p.setDefaults();
if (!name.equals("")) {
p.setName(name);
}
p.setLines(txt);
try {
double xx=Math.round(Double.valueOf(x)*1E13)/1E13;
double yy=Math.round(Double.valueOf(y)*1E13)/1E13;
p.move(xx, yy);
} catch (NumberFormatException e) {
x=parseVariables(x);
y=parseVariables(y);
p.setFixed(x, y);
}
addObject(p);
NormalizeLast();
p.setShowValue(true);
refreshZC();
return p.getName();
}
}
static public String Texte(String name, String txt, String x, String y) {
synchronized (getC()) {
if (y.equals("undefined")) {
y=x;
x=txt;
txt=name;
name="";
}
final TextObject p=new TextObject(getC(), 0, 0);
p.setDefaults();
if (!name.equals("")) {
p.setName(name);
}
p.setLines(txt);
try {
double xx=Math.round(Double.valueOf(x)*1E13)/1E13;
double yy=Math.round(Double.valueOf(y)*1E13)/1E13;
p.move(xx, yy);
} catch (NumberFormatException e) {
x=parseVariables(x);
y=parseVariables(y);
p.setFixed(x, y);
}
addObject(p);
NormalizeLast();
p.setShowValue(true);
refreshZC();
return p.getName();
}
}
// 3D
/**
* Creates a sphere with center a to point b.
* @param name Name of the sphere (suggestion)
* @param a center point
* @param b point of the sphere
* @return Name of the sphere
*/
static public String Sphere(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
ConstructionObject sphere;
if (name.equals("")) {
//sphere=( (ConstructionObject) ExecuteMacro("","@builtin@/3Dspherepoint","O,X,Y,Z,"+a+","+b));
ExecuteMacro("","@builtin@/3Dspherepoint","O,X,Y,Z,"+a+","+b);
sphere=getC().lastButN(13);
sphere.setShowName(false);
} else {
name=parseVariables(name);
//sphere= (ConstructionObject) ExecuteMacro("","@builtin@/3Dspherepoint","O,X,Y,Z,"+a+","+b);
ExecuteMacro("","@builtin@/3Dspherepoint","O,X,Y,Z,"+a+","+b);
sphere=getC().lastButN(13);
sphere.setName(name);
}
Normalize(sphere);
return sphere.getName();
}
}
static public String Sphère(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
ConstructionObject sphere;
if (name.equals("")) {
//sphere=( (ConstructionObject) ExecuteMacro("","@builtin@/3Dspherepoint","O,X,Y,Z,"+a+","+b));
ExecuteMacro("","@builtin@/3Dspherepoint","O,X,Y,Z,"+a+","+b);
sphere=getC().lastButN(13);
sphere.setShowName(false);
} else {
name=parseVariables(name);
//sphere= (ConstructionObject) ExecuteMacro("","@builtin@/3Dspherepoint","O,X,Y,Z,"+a+","+b);
ExecuteMacro("","@builtin@/3Dspherepoint","O,X,Y,Z,"+a+","+b);
sphere=getC().lastButN(13);
sphere.setName(name);
}
Normalize(sphere);
return sphere.getName();
}
}
static public String FixedSphere(String name, String a, String r) {
synchronized (getC()) {
if (r.equals("undefined")) {
r=a;
a=name;
name="";
}
a=parseVariables(a);
r=parseVariables(r);
if (name.equals("")) {
ExecuteMacro("","@builtin@/3Dsphererayon","O,X,Y,Z,"+a);
getC().lastButN(13).setShowName(false);
} else {
name=parseVariables(name);
ExecuteMacro("","@builtin@/3Dsphererayon","O,X,Y,Z,"+a);
getC().lastButN(13).setName(name);
}
Normalize(13);
( (FixedCircleObject) getC().lastButN(13)).setFixed(r);
return getC().lastButN(13).getName();
}
}
static public String SphèreRayon(String name, String a, String r) {
synchronized (getC()) {
if (r.equals("undefined")) {
r=a;
a=name;
name="";
}
a=parseVariables(a);
r=parseVariables(r);
if (name.equals("")) {
ExecuteMacro("","@builtin@/3Dsphererayon","O,X,Y,Z,"+a);
getC().lastButN(13).setShowName(false);
} else {
name=parseVariables(name);
ExecuteMacro("","@builtin@/3Dsphererayon","O,X,Y,Z,"+a);
getC().lastButN(13).setName(name);
}
Normalize(13);
( (FixedCircleObject) getC().lastButN(13)).setFixed(r);
return getC().lastButN(13).getName();
}
}
/**
* Creates the projection on a plane
* a is "A,B,C"
* b is the point to project
*/
static public String Projection3D(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
if (name.equals("")) {
ExecuteMacro("","@builtin@/3Dproj","O,X,Y,Z,"+a+","+b);
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
ExecuteMacro("","@builtin@/3Dproj","O,X,Y,Z,"+a+","+b);
getC().lastButN(0).setName(name);
}
Normalize(0);
return getC().lastButN(0).getName();
}
}
static public String Reflection3D(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
if (name.equals("")) {
ExecuteMacro("","@builtin@/3Dsymp","O,X,Y,Z,"+a+","+b);
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
ExecuteMacro("","@builtin@/3Dsymp","O,X,Y,Z,"+a+","+b);
getC().lastButN(0).setName(name);
}
Normalize(0);
return getC().lastButN(0).getName();
}
}
static public String Symétrie3DPlan(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
if (name.equals("")) {
ExecuteMacro("","@builtin@/3Dsymp","O,X,Y,Z,"+a+","+b);
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
ExecuteMacro("","@builtin@/3Dsymp","O,X,Y,Z,"+a+","+b);
getC().lastButN(0).setName(name);
}
Normalize(0);
return getC().lastButN(0).getName();
}
}
static public String Symmetry3D(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
if (name.equals("")) {
ExecuteMacro("","@builtin@/3Dsymc","O,X,Y,Z,"+a+","+b);
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
ExecuteMacro("","@builtin@/3Dsymc","O,X,Y,Z,"+a+","+b);
getC().lastButN(0).setName(name);
}
Normalize(0);
return getC().lastButN(0).getName();
}
}
static public String SymétrieCentrale3D(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
if (name.equals("")) {
ExecuteMacro("","@builtin@/3Dsymc","O,X,Y,Z,"+a+","+b);
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
ExecuteMacro("","@builtin@/3Dsymc","O,X,Y,Z,"+a+","+b);
getC().lastButN(0).setName(name);
}
Normalize(0);
return getC().lastButN(0).getName();
}
}
static public String Translation3D(String name, String a, String b, String p) throws Exception {
synchronized (getC()) {
if (p.equals("undefined")) {
p=b;
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
p=parseVariables(p);
if (name.equals("")) {
ExecuteMacro("","@builtin@/3Dtrans","O,X,Y,Z,"+a+","+b+","+p);
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
ExecuteMacro("","@builtin@/3Dtrans","O,X,Y,Z,"+a+","+b+","+p);
getC().lastButN(0).setName(name);
}
Normalize(0);
return getC().lastButN(0).getName();
}
}
static public String Circle3D(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
if (name.equals("")) {
try {
ExecuteMacro("","@builtin@/3Dcircle1","O,X,Y,Z,"+a+","+b);
}
catch (final Exception f) {
Println("Potential problem executing macro @builtin@/3Dcircle1(O,X,Y,Z,"
+ a + "," + b + "):" + f.getMessage());
}
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
try {
ExecuteMacro("","@builtin@/3Dcircle1","O,X,Y,Z,"+a+","+b);
}
catch (final Exception f) {
Println("Potential problem executing macro assignment " +
name + " = @builtin@/3Dcircle1(O,X,Y,Z," +
a + "," + b + "):" + f.getMessage());
}
getC().lastButN(0).setName(name);
}
Normalize(0);
refreshZC();
return getC().lastButN(0).getName();
}
}
static public String Cercle3D(String name, String a, String b) {
synchronized (getC()) {
if (b.equals("undefined")) {
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
if (name.equals("")) {
try {
ExecuteMacro("","@builtin@/3Dcircle1","O,X,Y,Z,"+a+","+b);
}
catch (final Exception f) {
Println("Il y a peut-etre une probleme avec macro @builtin@/3Dcircle1(O,X,Y,Z,"
+ a + "," + b + "):" + f.getMessage());
}
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
try {
ExecuteMacro("","@builtin@/3Dcircle1","O,X,Y,Z,"+a+","+b);
}
catch (final Exception f) {
Println("Il y a peut-etre une probleme avec macro assignment " +
name + " = @builtin@/3Dcircle1(O,X,Y,Z," +
a + "," + b + "):" + f.getMessage());
}
getC().lastButN(0).setName(name);
}
Normalize(0);
refreshZC();
return getC().lastButN(0).getName();
}
}
static public String FixedCircle3D(String name, String a, String b, String r) {
synchronized (getC()) {
if (r.equals("undefined")) {
r=b;
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
r=parseVariables(r);
if (name.equals("")) {
try { ExecuteMacro("","@builtin@/3Dcircle2","O,X,Y,Z,"+a+","+b+","+r);
}
catch (final Exception f) {}
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
try { ExecuteMacro("","@builtin@/3Dcircle2","O,X,Y,Z,"+a+","+b+","+r);
}
catch (final Exception f) {}
getC().lastButN(0).setName(name);
}
Normalize(0);
refreshZC();
return getC().lastButN(0).getName();
}
}
static public String CercleRayon3D(String name, String a, String b, String r) {
synchronized (getC()) {
if (r.equals("undefined")) {
r=b;
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
r=parseVariables(r);
if (name.equals("")) {
try { ExecuteMacro("","@builtin@/3Dcircle2","O,X,Y,Z,"+a+","+b+","+r);
}
catch (final Exception f) {}
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
try { ExecuteMacro("","@builtin@/3Dcircle2","O,X,Y,Z,"+a+","+b+","+r);
}
catch (final Exception f) {}
getC().lastButN(0).setName(name);
}
Normalize(0);
refreshZC();
return getC().lastButN(0).getName();
}
}
static public String Circle3D3pts(String name, String a, String b, String c) {
synchronized (getC()) {
if (c.equals("undefined")) {
c=b;
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
c=parseVariables(c);
if (name.equals("")) {
try { ExecuteMacro("","@builtin@/3Dcircle3pts","O,X,Y,Z,"+a+","+b+","+c);
}
catch (final Exception f) {}
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
try { ExecuteMacro("","@builtin@/3Dcircle3pts","O,X,Y,Z,"+a+","+b+","+c);
}
catch (final Exception f) {}
getC().lastButN(0).setName(name);
}
Normalize(0);
refreshZC();
return getC().lastButN(0).getName();
}
}
static public String Cercle3D3pts(String name, String a, String b, String c) {
synchronized (getC()) {
if (c.equals("undefined")) {
c=b;
b=a;
a=name;
name="";
}
a=parseVariables(a);
b=parseVariables(b);
c=parseVariables(c);
if (name.equals("")) {
try { ExecuteMacro("","@builtin@/3Dcircle3pts","O,X,Y,Z,"+a+","+b+","+c);
}
catch (final Exception f) {}
getC().lastButN(0).setShowName(false);
} else {
name=parseVariables(name);
try { ExecuteMacro("","@builtin@/3Dcircle3pts","O,X,Y,Z,"+a+","+b+","+c);
}
catch (final Exception f) {}
getC().lastButN(0).setName(name);
}
Normalize(0);
refreshZC();
return getC().lastButN(0).getName();
}
}
static public void afficher() throws Exception {// la super fonction
}
}