CaRMtl/eric/JSprogram/JSFunctions.java

7871 lines
356 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", "Vertices", "Sommets",
"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 ABC.
* @param name Name of the polygon (suggestion)
* @param params list of objects
* @return Name of the created polygon
*/
static public String Polygon(String name, String params) {
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);
}
}
/**
* Obtains the list of vertices of a polygon, for example if "t" is the
* the triangle created by Polygon("t","A,B,C"), returns the comma-separated
* string "A,B,C".
* @param name Name of the polygon
* @return Comma-separated string of the names of the vertices
* */
static public String Vertices(String name) {
synchronized (getC()) {
name = parseVariables(name);
ConstructionObject o = getC().find(name);
if (o == null) { return ""; }
if (!(o instanceof AreaObject)) { return ""; }
return ((AreaObject) o).getVertexString(",");
}
}
/* Why isn't this
* static public String Sommets(String nom) { return Vertices(nom); }
* ???
*/
static public String Sommets(String name) {
synchronized (getC()) {
name = parseVariables(name);
ConstructionObject o = getC().find(name);
if (o == null) { return ""; }
if (!(o instanceof AreaObject)) { return ""; }
return ((AreaObject) o).getVertexString(",");
}
}
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
}
}