id='CHANGE' matriz='sí' evaluar='una-sola-vez' columnas='500' filas='9' expresión='_objeto=0;_col_i=1;_col_f=2;_wdth_i=3;_wdth_f=4;_linestyle_i=5;_linestyle_f=6;_oculto_i=7;_oculto_f=8' tipo='matriz' 
id='initCHG()' algoritmo='sí' expresión='1' hacer='nCHG=0;maxnCHG=0' tipo='función' 
id='undoCnstrct()' algoritmo='sí' expresión='1' inicio='undoing=2' hacer='OBGRA[NOG-1,_oculto]=0;NOG=max(NOG-1,minNOG);NOGP=NOG;PASOS[paso,0]=NOGP-1;undo_status=OBGRA[NOG,_cnstool_];status=girar;undo_color=OBGRA[NOG,_col];countCurvasYReglados();selOBGRA=(selOBGRA>=NOG)?-1:selOBGRA;safe=0;' tipo='función' 
id='redoCnstrct()' algoritmo='sí' expresión='1' inicio='undoing=2' hacer='undo_status=OBGRA[NOG,_cnstool_];status=girar;undo_color=OBGRA[NOG,_col];NOG=min(NOG+1,maxNOG);updateLocal(1,NOG-1,NOG-1);NOGP=NOG;PASOS[paso,0]=NOGP-1;countCurvasYReglados();;' tipo='función' 
id='undoChange()' algoritmo='sí' expresión='1' local='obj' hacer='nCHG=nCHG-1;obj=CHANGE[nCHG,_objeto];OBGRA[obj,_col]=CHANGE[nCHG,_col_i];OBGRA[obj,_wdth]=CHANGE[nCHG,_wdth_i];OBGRA[obj,_linestyle]=CHANGE[nCHG,_linestyle_i];OBGRA[obj,_oculto]=CHANGE[nCHG,_oculto_i];' tipo='función' 
id='redoChange()' algoritmo='sí' expresión='1' local='obj' hacer='obj=CHANGE[nCHG,_objeto];OBGRA[obj,_col]=CHANGE[nCHG,_col_f];OBGRA[obj,_wdth]=CHANGE[nCHG,_wdth_f];OBGRA[obj,_linestyle]=CHANGE[nCHG,_linestyle_f];OBGRA[obj,_oculto]=CHANGE[nCHG,_oculto_f];nCHG=nCHG+1;' tipo='función' 
id='____SEARCHING____' expresión='0' tipo='variable' 
id='fixToE3(P,mx,my)' algoritmo='sí' expresión='1' local='x3,y3,z3,c1,c2,c3,x1,y1,z1' hacer='x3=0;y3=Ojo.y+mx;z3=Ojo.z+my;c1=x3-(E3Rxx*E2.pixOx+E3Rxy*E2.pixOy+E3Rxz*E2.pixOz);c2=y3-(E3Ryx*E2.pixOx+E3Ryy*E2.pixOy+E3Ryz*E2.pixOz);c3=z3-(E3Rzx*E2.pixOx+E3Rzy*E2.pixOy+E3Rzz*E2.pixOz);x1=Det3x3(c1,E3Rxy,E3Rxz,c2,E3Ryy,E3Ryz,c3,E3Rzy,E3Rzz);y1=Det3x3(E3Rxx,c1,E3Rxz,E3Ryx,c2,E3Ryz,E3Rzx,c3,E3Rzz);z1=Det3x3(E3Rxx,E3Rxy,c1,E3Ryx,E3Ryy,c2,E3Rzx,E3Rzy,c3);set_Point(P,x1,y1,z1);;;' tipo='función' 
id='fixToL(P,L,mx,my)' algoritmo='sí' expresión='1' local='x0,y0,z0,x1,y1,z1,x2,y2,z2,dx,dy,dz,Ax,Ay,Az,Bx,By,Bz,t1,t2,t,Xt,Yt' hacer='x1=OBGRA[L,_L_x1];y1=OBGRA[L,_L_y1];z1=OBGRA[L,_L_z1];x2=OBGRA[L,_L_x2];y2=OBGRA[L,_L_y2];z2=OBGRA[L,_L_z2];dx=x2-x1;dy=y2-y1;dz=z2-z1;x0=x1+E2.pixOx;y0=y1+E2.pixOy;z0=z1+E2.pixOz;Ax=E3Rxx*x0+E3Rxy*y0+E3Rxz*z0;Ay=E3Ryx*x0+E3Ryy*y0+E3Ryz*z0;Az=E3Rzx*x0+E3Rzy*y0+E3Rzz*z0;Bx=E3Rxx*dx+E3Rxy*dy+E3Rxz*dz;By=E3Ryx*dx+E3Ryy*dy+E3Ryz*dz;Bz=E3Rzx*dx+E3Rzy*dy+E3Rzz*dz;t1=(Ojo.x*(Ojo.y-Ay)-mx*(Ax-Ojo.x))/(mx*Bx+Ojo.x*By);t2=(Ojo.x*(Ojo.z-Az)-my*(Ax-Ojo.x))/(my*Bx+Ojo.x*Bz);t=(abs(mx*Bx+Ojo.x*By)>=abs(my*Bx+Ojo.x*Bz))?t1:t2;Xt=Ojo.x*(Ojo.y-Ay-t*By)/(Ax+t*Bx-Ojo.x);Yt=Ojo.x*(Ojo.z-Az-t*Bz)/(Ax+t*Bx-Ojo.x);OBGRA[P,_prprtn]=&squot;&squot;;set_Point(P,x1+t*dx,y1+t*dy,z1+t*dz);;;' tipo='función' 
id='getAnyP(mx,my)' algoritmo='sí' expresión='anyP' local='anyP,anyP0,cnstr,fix' hacer='anyP=selP(mx,my);anyP0=anyP;anyP=(anyP0<0)?newAuxCtrl(mx,my,&squot;&squot;):anyP;fix=(anyP>=0)&(anyP0<0)&show_E3;cnstr=OBGRA[anyP,_cnstr];(fix&(OBGRA[cnstr,_type]==segment))?fixToL(anyP,cnstr,mx,my):&squot;&squot;;(fix&(OBGRA[cnstr,_type]!=segment))?fixToE3(anyP,mx,my):&squot;&squot;;' tipo='función' 
id='selA(xx,yy)' algoritmo='sí' expresión='sO' local='isType,mind,newd,isBetter,sO,n' inicio='mind=(show_E2)?pxthr/E2.escala:pxthr/E3_2.escala;sO=-1;n=NOG-1;_distA_=1000' hacer='isType=(n!=excludedObj)&(OBGRA[n,_type]==angle)&isVisible(n);newd=(isType&show_E2)?sqrt((X2(n)-xx)^2+(Y2(n)-yy)^2):&squot;&squot;;newd=(isType&show_E3)?sqrt((x32(n)-xx)^2+(y32(n)-yy)^2):newd;isBetter=isType&(newd<mind);mind=(isBetter)?newd:mind;sO=(isBetter)?n:sO;_distA_=mind;n=n-1' mientras='(n>=minNOG)' tipo='función' 
id='selG(xx,yy)' algoritmo='sí' expresión='sO' local='isType,mind,newd,isBetter,sO,n' inicio='mind=pxthr/E2.escala;sO=-1;n=NOG-1;_distG_=1000' hacer='isType=(n!=excludedObj)&(OBGRA[n,_type]==control)&isVisible(n);newd=(isType)?distance(xx,yy,n):&squot;&squot;;isBetter=isType&(newd<mind);mind=(isBetter)?newd:mind;sO=(isBetter)?n:sO;_distG_=mind;n=n-1' mientras='(n>=minNOG)' tipo='función' 
id='selP(xx,yy)' algoritmo='sí' expresión='sO' local='isType,mind,newd,isBetter,sO,n' inicio='mind=pxthr/E2.escala;sO=-1;n=NOG-1;_distP_=1000' hacer='isType=(n!=excludedObj)&((OBGRA[n,_type]==point)|(OBGRA[n,_type]==control))&isVisible(n);newd=(isType)?distance(xx,yy,n):&squot;&squot;;isBetter=isType&(newd<mind);mind=(isBetter)?newd:mind;sO=(isBetter)?n:sO;_distP_=mind;n=n-1' mientras='(n>=minNOG)' tipo='función' 
id='selP3D(xx,yy,zz)' algoritmo='sí' expresión='sO' local='isType,mind,newd,isBetter,sO,n' inicio='mind=pxthr/E2.escala;sO=-1;n=NOG-1;_distP_=1000' hacer='isType=(n!=excludedObj)&((OBGRA[n,_type]==point)|(OBGRA[n,_type]==control))&isVisible(n);newd=(isType)?sqrt((X2(n)-xx)^2+(Y2(n)-yy)^2+(Z2(n)-zz)^2):&squot;&squot;;isBetter=isType&(newd<mind);mind=(isBetter)?newd:mind;sO=(isBetter)?n:sO;_distP_=mind;n=n-1' mientras='(n>=minNOG)' tipo='función' 
id='selC(xx,yy)' algoritmo='sí' expresión='sO' local='isType,mind,newd,isBetter,sO,n' inicio='mind=pxthr/E2.escala;sO=-1;n=NOG-1;_distC_=1000' hacer='isType=(n!=excludedObj)&(OBGRA[n,_type]==circle)&isVisible(n);newd=((isType)&show_E2)?abs(sqrt((X2(OBGRA[n,_centro])-xx)^2+(Y2(OBGRA[n,_centro])-yy)^2)-OBGRA[n,_r]):1000000;newd=((isType)&show_E3)?abs(sqrt((x32(OBGRA[n,_centro])-xx)^2+(y32(OBGRA[n,_centro])-yy)^2)-OBGRA[n,_r32]):newd;isBetter=isType&(newd<mind);mind=(isBetter)?newd:mind;sO=(isBetter)?n:sO;_distC_=mind;n=n-1' mientras='(n>=minNOG)' tipo='función' 
id='selCirc3D(xx,yy)' algoritmo='sí' expresión='sO' local='isType,mind,newd,isBetter,sO,n' inicio='mind=pxthr/E2.escala;sO=-1;n=NOG-1;_distC_=1000' hacer='isType=(n!=excludedObj)&(OBGRA[n,_type]==circ3D)&isVisible(n);newd=((isType)&show_E3)?distToCirc3D(xx,yy,n):newd;isBetter=isType&(newd<mind);mind=(isBetter)?newd:mind;sO=(isBetter)?n:sO;_distC_=mind;n=n-1;;' mientras='(n>=minNOG)' tipo='función' 
id='selL(xx,yy)' algoritmo='sí' expresión='sO' local='isType,mind,newd,isBetter,sO,n' inicio='mind=pxthr/E2.escala;sO=-1;n=NOG-1;_distL_=1000' hacer='isType=(n!=excludedObj)&(OBGRA[n,_type]==segment)&OBGRA[n,_isLine]&isVisible(n);newd=&squot;&squot;;newd=(isType&show_E2)?distAL2D(xx,yy,n):newd;newd=(isType&show_E3)?distAL32(xx,yy,n):newd;isBetter=isType&(newd<mind);mind=(isBetter)?newd:mind;sO=(isBetter)?n:sO;_distL_=mind;n=n-1' mientras='(n>=minNOG)' tipo='función' 
id='selS(xx,yy)' algoritmo='sí' expresión='sO' local='isType,mind,newd,isBetter,sO,n' inicio='mind=pxthr/E2.escala;sO=-1;n=NOG-1;_distS_=1000' hacer='isType=(n!=excludedObj)&(OBGRA[n,_type]==segment)&(!OBGRA[n,_isLine])&isVisible(n);newd=&squot;&squot;;newd=(isType&show_E2)?distAS2D(xx,yy,n):newd;newd=(isType&show_E3)?distAS32(xx,yy,n):newd;isBetter=isType&(newd<mind);mind=(isBetter)?newd:mind;sO=(isBetter)?n:sO;_distS_=mind;n=n-1' mientras='(n>=minNOG)' tipo='función' 
id='selLorS(xx,yy)' algoritmo='sí' expresión='sO' local='isType,mind,newd,isBetter,sO,n' inicio='mind=pxthr/E2.escala;sO=-1;n=NOG-1;_distLS_=1000' hacer='isType=(n!=excludedObj)&(OBGRA[n,_type]==segment)&isVisible(n);newd=(isType)?distAOB(xx,yy,n):&squot;&squot;;isBetter=isType&(newd<mind);mind=(isBetter)?newd:mind;sO=(isBetter)?n:sO;_distLS_=mind;n=n-1' mientras='(n>=minNOG)' tipo='función' 
id='selLorC(xx,yy)' algoritmo='sí' expresión='sO' local='isType,mind,newd,isBetter,sO,n' inicio='mind=pxthr/E2.escala;mind1=mind;sO=-1;_selLoC1_=-1;n=NOG-1;_distLC_=1000' hacer='isType=(n!=excludedObj)&((OBGRA[n,_type]==circle)|(OBGRA[n,_type]==segment))&isVisible(n);newd=(isType)?distAOB(xx,yy,n)/2:&squot;&squot;;isBetter=isType&(newd<mind1);mind1=(isBetter)?mind:mind1;mind=(isBetter)?newd:mind;_selLoC1_=(isBetter)?sO:_selLoC1_;_distLC1_=(isBetter)?mind1:_distLC1_;sO=(isBetter)?n:sO;_selLoC0_=sO;_distLC0_=mind;n=n-1' mientras='(n>=minNOG)' tipo='función' 
id='selT(xx,yy)' algoritmo='sí' expresión='T' local='n,T' inicio='T=-1;n=NOG-1' hacer='T=((n!=excludedObj)&isVisible(n)&(((OBGRA[n,_type]==triangle)&isInT(xx,yy,n))|(OBGRA[n,_type]==plane)&isInPlane32(xx,yy,n)))?n:T;n=n-1' mientras='(T<0)&(n>=minNOG)' tipo='función' 
id='selEq(xx,yy)' algoritmo='sí' expresión='sO' local='F,isType,mind,newd,isBetter,sO,n,xi,yi' inicio='mind=pxthr/E2.escala;sO=-1;n=NOG-1;_distEq_=1000' hacer='isType=(n!=excludedObj)&isVisible(n)&((OBGRA[n,_type]==conic5pts)|(OBGRA[n,_type]==cubic9pts)|((OBGRA[n,_type]==curve)&(OBGRA[n,_Eq_]!=&squot;&squot;)));xi=xx;yi=yy;F=OBGRA[n,_Eq_];(isType)?NewtonRaphson():&squot;&squot;;newd=(isType)?sqrt((xi-xx)^2+(yi-yy)^2):1000;isBetter=isType&(newd<mind);mind=(isBetter)?newd:mind;sO=(isBetter)?n:sO;_distEq_=mind;n=n-1;' mientras='(n>=minNOG)' tipo='función' 
id='selOB(xx,yy)' algoritmo='sí' expresión='sO' local='sA,sG,sP,sS,sC,sL,sT,sEq,sO,_condP_,_condS_,_condC_,_condL_,_condT_,condEq' hacer='sA=selA(xx,yy);sG=selG(xx,yy);sP=selP(xx,yy);sS=selS(xx,yy);sC=selC(xx,yy);sL=selL(xx,yy);sL=((sA>=0)&(sL>0)&(_indexOf_(&squot;calcBisector&squot;<OBGRA[sL,_func]))&(OBGRA[sA,_p1]==OBGRA[sL,_p1]))?-1:sL;sT=selT(xx,yy);sEq=selEq(xx,yy);sO=(sA>=0)?sA:sG;_condP_=(sA<0)&((sG<0)|(_distP_<_distG_/4));_condS_=(sA<0)&(sG<0)&(sP<0);_condC_=(sA<0)&(sG<0)&(sP<0)&(_distC_<_distS_);_condL_=(sA<0)&(sG<0)&(sP<0)&(_distL_<_distS_*0.9)&(_distL_<_distC_);_condEq_=(sA<0)&(sG<0)&(sP<0)&(_distEq_<_distS_*0.9)&(_distEq_<_distC_)&(_distEq_<_distL_);sO=(_condP_)?sP:sO;sO=(_condS_)?sS:sO;sO=(_condC_)?sC:sO;sO=(_condL_)?sL:sO;sO=(_condEq_)?sEq:sO;sO=(sO<0)?sT:sO;' tipo='función' 
id='selE3OB(xx,yy)' algoritmo='sí' expresión='sO' local='sO' inicio='sO=-1' hacer='sO=selA(xx,yy);sO=(sO<0)?selG(xx,yy):sO;sO=(sO<0)?selP(xx,yy):sO;sO=(sO<0)?selS(xx,yy):sO;sO=(sO<0)?selL(xx,yy):sO;sO=(sO<0)?selC(xx,yy):sO;sO=(sO<0)?selCirc3D(xx,yy):sO;sO=(sO<0)?selT(xx,yy):sO;;' tipo='función' 
id='___CONSTRUCTIONS___' expresión='0' tipo='variable' 
id='inCnstrctn(s)' algoritmo='no' expresión='(((status==conica5)&((s==c5p_P0)|(s==c5p_P1)|(s==c5p_P2)|(s==c5p_P3)|(s==c5p_P4)))|((status==cubica9)&((s==c9p_P0)|(s==c9p_P1)|(s==c9p_P2)|(s==c9p_P3)|(s==c9p_P4)|(s==c9p_P5)|(s==c9p_P6)|(s==c9p_P7)|(s==c9p_P8))))' tipo='función' 
id='initC5Pts()' algoritmo='sí' expresión='1' hacer='c5p_P0=-1;c5p_P1=-1;c5p_P2=-1;c5p_P3=-1;c5p_P4=-1;' tipo='función' 
id='initC9Pts()' algoritmo='sí' expresión='1' hacer='c9p_P0=-1;c9p_P1=-1;c9p_P2=-1;c9p_P3=-1;c9p_P4=-1;c9p_P5=-1;c9p_P6=-1;c9p_P7=-1;c9p_P8=-1;' tipo='función' 
id='cnstrConic5Pts()' algoritmo='sí' expresión='1' local='ready,n' hacer='c5p_P4=(mup&(c5p_P4<0)&(c5p_P3>=0))?getAnyP(mx,my):c5p_P4;c5p_P3=(mup&(c5p_P3<0)&(c5p_P2>=0))?getAnyP(mx,my):c5p_P3;c5p_P2=(mup&(c5p_P2<0)&(c5p_P1>=0))?getAnyP(mx,my):c5p_P2;c5p_P1=(mup&(c5p_P1<0)&(c5p_P0>=0))?getAnyP(mx,my):c5p_P1;c5p_P0=(mup&(c5p_P0<0))?getAnyP(mx,my):c5p_P0;;;ready=mup&(c5p_P0>=0)&(c5p_P1>=0)&(c5p_P2>=0)&(c5p_P3>=0)&(c5p_P4>=0);n=(ready)?newConic5Pts(c5p_P0,c5p_P1,c5p_P2,c5p_P3,c5p_P4,&squot;&squot;):-1;(ready)?initC5Pts():&squot;&squot;;' tipo='función' 
id='cnstrCubic9Pts()' algoritmo='sí' expresión='1' local='ready,n' hacer='c9p_P8=(mup&(c9p_P8<0)&(c9p_P7>=0))?getAnyP(mx,my):c9p_P8;c9p_P7=(mup&(c9p_P7<0)&(c9p_P6>=0))?getAnyP(mx,my):c9p_P7;c9p_P6=(mup&(c9p_P6<0)&(c9p_P5>=0))?getAnyP(mx,my):c9p_P6;c9p_P5=(mup&(c9p_P5<0)&(c9p_P4>=0))?getAnyP(mx,my):c9p_P5;c9p_P4=(mup&(c9p_P4<0)&(c9p_P3>=0))?getAnyP(mx,my):c9p_P4;c9p_P3=(mup&(c9p_P3<0)&(c9p_P2>=0))?getAnyP(mx,my):c9p_P3;c9p_P2=(mup&(c9p_P2<0)&(c9p_P1>=0))?getAnyP(mx,my):c9p_P2;c9p_P1=(mup&(c9p_P1<0)&(c9p_P0>=0))?getAnyP(mx,my):c9p_P1;c9p_P0=(mup&(c9p_P0<0))?getAnyP(mx,my):c9p_P0;;ready=mup&(c9p_P0>=0)&(c9p_P1>=0)&(c9p_P2>=0)&(c9p_P3>=0)&(c9p_P4>=0)&(c9p_P5>=0)&(c9p_P6>=0)&(c9p_P7>=0)&(c9p_P8>=0);n=(ready)?newCubic9Pts(c9p_P0,c9p_P1,c9p_P2,c9p_P3,c9p_P4,c9p_P5,c9p_P6,c9p_P7,c9p_P8,&squot;&squot;):-1;(ready)?initC9Pts():&squot;&squot;;' tipo='función' 
id='cnstrCC()' algoritmo='sí' expresión='1' local='doCC,n,selC2' hacer='selC1=(mdn)?selC(mx,my):selC1;selC2=(mup&(selC1>=0))?selC(mx,my):-1;doCC=mup&(selC1>=0)&(selC2>=0)&(selC1!=selC2);n=(show_E3&doCC&(selC1<selC2))?newRadicalPlane(selC1,selC2):-1;n=(show_E3&doCC&(selC2<selC1))?newRadicalPlane(selC2,selC1):-1;n=(show_E2&doCC&(selC1<selC2))?newRadicalAxis(selC1,selC2,color,ancho,&squot;&squot;):-1;n=(show_E2&doCC&(selC2<selC1))?newRadicalAxis(selC2,selC1,color,ancho,&squot;&squot;):-1;;help_text=((status==eje_radical)&show_E2)?&squot;Eje radical (C) ...&squot;:help_text;help_text=((status==eje_radical)&show_E3)?&squot;Plano radical (C) ...&squot;:help_text;;(mup)?cleanCnstr():&squot;&squot;;' tipo='función' 
id='cnstrCircle()' algoritmo='sí' expresión='1' local='n,selP2,selLoC,elRadio' hacer='_allowFreePoints_=(mup&(selS1<0))?0:1;selP2=(mup)?getAnyP(mx,my):-1;elRadio=(mup&(selP1>=0)&(selP2<0))?&squot;&squot;+sqrt((X2(E2.MD)-mx)^2+(Y2(E2.MD)-my)^2):&squot;&squot;;n=(mup&(selP1>=0)&(selP2>=0))?newCircleCP2D(selP1,selP2,1,1,&squot;&squot;):-1;n=(mup&(n<0)&(selP1>=0)&(selS1<0))?newCircle2D(selP1,elRadio,1,&squot;&squot;):n;selP2=(mup&(n<0)&(selS1>=0)&(selP2<0))?getAnyP(mx,my):selP2;n=(mup&(n<0)&(selP2>=0)&(selS1>=0))?newCircleSC2D(selS1,selP2,1,1,&squot;&squot;):n;;selP1=(mdn)?selP(mx,my):selP1;selS1=(mdn&(selP1<0))?selS(mx,my):selS1;selP1=(mdn&(selP1<0)&(selS1<0))?getAnyP(mx,my):selP1;;selOBGRA=(selS1>=0)?selS1:E2.MD;selS1=(mup)?-1:selS1;selP1=(mup)?-1:selP1;selC=(mup)?-1:selC;' tipo='función' 
id='cnstrCurve()' algoritmo='sí' expresión='1' local='ready,n,selP2,forbidden' inicio='selP2=-1' hacer='selP1=(mdn)?selP(mx,my):selP1;selP1=(mdn&(selP1<0))?selLorS(mx,my):selP1;selP2=((selP1>=0)&mup)?selG(mx,my):selP2;forbidden=(selP2>=minNOG)&(OBGRA[OBGRA[selP2,_cnstr],_type]==segment)&(OBGRA[OBGRA[selP2,_cnstr],_vsL]>=minNOG);selP2=(forbidden)?-1:selP2;ready=mup&(selP1>=0)&(selP2>=0)&(selP1!=selP2)&(OBGRA[selP2,_cnstr]!=0)&(OBGRA[selP2,_cnstr]!=&squot;&squot;);n=(ready)?newCurve(selP1,selP2,&squot;&squot;):-1;(n>=0)?setColSz(n):&squot;&squot;;;help_text=&squot;Curva o familia&squot;;;(mup)?cleanCnstr():&squot;&squot;;;' tipo='función' 
id='cnstrHarmonic()' algoritmo='sí' expresión='1' local='doPC,doPS,doPL,doPT,doCC,doLC,doTC,n,selP2,selC2,selL2,selT2,selEq2' hacer='mx000=(mdn)?mx:mx000;my000=(mdn)?my:my000;selEq1=(mdn&(selP1<0))?selEq(mx,my):selEq1;selC1=(mdn&(selP1<0)&(selEq1<0))?selC(mx,my):selC1;selT=(mdn&(selP1<0)&(selS1<0))?selT(mx,my):selT;selP2=(mup&((selEq1>=0)|(selC1>=0)|(selS1>=0)|(selT>=0)))?selP(mx,my):-1;doPEq=mup&(selEq1>=0)&(selP2>=0);selEq2=(mup&(selEq1>=0)&(selC1<0)&(selS1<0)&(selT<0)&(selP2<0)&(!doPEq))?selEq(mx,my):-1;doPC=mup&(selC1>=0)&(selP2>=0);doPT=mup&(selT>=0)&(selP2>=0);n=(mup&(selEq1>0)&(selEq2>0))?newCommonPole(mx000,my000,selEq1,selEq2):n;n=(doPEq)?newPolarLine(selP2,selEq1,&squot;&squot;):-1;n=(doPC)?newInversePoint(&squot;&squot;,&squot;&squot;,selP2,selC1,&squot;&squot;):n;n=(doPT)?newReflection(selT,selP2):n;;selC2=(mup&(selC1>=0)&(selP2<0))?selC(mx,my):-1;doCC=mup&(selC1>=0)&(selP2<0)&(selC2>=0);n=(doCC)?newInverseCircle(selC2,selC1,color,ancho,&squot;&squot;):-1;;selL2=(mup&((selC1>=0)|(selEq1>=0))&(selP2<0)&(selC2<0))?selL(mx,my):-1;selT2=(mup&((selC1>=0)|(selEq1>=0))&(selP2<0)&(selC2<0)&(selL2<0))?selT(mx,my):-1;doLC=mup&(selC1>=0)&(selP2<0)&(selC2<0)&(selL2>=0);doTC=mup&(selC1>=0)&(selP2<0)&(selC2<0)&(selT2>=0);n=(doLC)?newInverseLine(selL2,selC1,color,ancho,&squot;&squot;):-1;n=(doTC)?newInversePlane(selT2,selC1,color,ancho,&squot;&squot;):-1;;doLEq=mup&(selEq1>=0)&(selP2<0)&(selC2<0)&(selL2>=0);n=(doLEq)?newPole(selL2,selEq1,desdeAquí):-1;;selOBGRA=(selEq1>=0)?selEq1:selOBGRA;selOBGRA=(selC1>=0)?selC1:selOBGRA;selOBGRA=(selT>=0)?selT:selOBGRA;selOBGRA=(mup&(selOBGRA>=0))?-1:selOBGRA;;help_text=((selC1>=0)&show_E2)?&squot;Invertir ... (P, L o C)&squot;:help_text;help_text=((selC1>=0)&show_E3)?&squot;Invertir ... (P, T o C)&squot;:help_text;help_text=((selEq1>=0))?&squot;Polo o polar de ... (P, L o C)&squot;:help_text;;(mup)?cleanCnstr():&squot;&squot;;;;' tipo='función' 
id='cnstrLHarmonic()' algoritmo='sí' expresión='1' local='selL3,doIt,newl' hacer='selL3=(mup&(selL1>0)&((selL2>0)|(selP1>0)))?selLorS(mx,my):-1;newl=(mup&(selL2<0)&(selL1>0)&(selP1>0)&(selL3>0))?newHarmonicReflection(testLine,selP1,selL3,&squot;&squot;):-1;doIt=mup&(newl<0)&(selL1>0)&(selL2>0)&(selL3>0);(doIt&concurrent(selL1,selL2,selL3))?newHarmonicReflection(selL1,selL2,selL3,&squot;&squot;):&squot;&squot;;selL2=(mdn&(selL1>0))?selLorS(mx,my):selL2;selP1=(mdn&(selL2<0))?selP(mx,my):selP1;selP2=(mup&(selP2<0))?selP(mx,my):selP2;newl=(mup&(newl<0)&(selL2>0)&(selP2>0))?newHarmonicReflection(testLine,selP2,selL2,&squot;&squot;):newl;(mup&(newl<0)&(selP2>0)&isInL2D(testLine,selP2))?newInversePoint(&squot;&squot;,&squot;&squot;,selP2,testLine,&squot;&squot;):&squot;&squot;;(mup&(newl<0)&(selL2<0)&(selP2>0)&!isInL2D(testLine,selP2))?newReflection(testLine,selP2):&squot;&squot;;selL1=(mup&(selL1<0))?selLorS(mx,my):selL1;selOBGRA=(selL1>0)?selL1:testLine;help_text=&squot;Reflexión armónica ... &squot;;(doIt|(mup&((selP2>0)|(newl>0))))?cleanCnstr():&squot;&squot;;;;' tipo='función' 
id='cnstrPHarmonic()' algoritmo='sí' expresión='1' local='doIt' hacer='selP3=-1;selP3=((selP2>=0)&(mup)&(selP3<0))?selP(mx,my):selP3;selP3=((selP2>=0)&(mup)&(selP3<0))?selL(mx,my):selP3;selP3=((selP2>=0)&(mup)&(selP3<0))?selT(mx,my):selP3;doIt=mup&(selP3>0)&(selP2>0)&(selP1>0)&(selP1==selOBGRA);;(doIt)?newHarmonicReflection(selP1,selP2,selP3,color,&squot;&squot;):&squot;&squot;;;selP2=((selP1>=0)&mdn&(selP2<0))?selP(mx,my):selP2;selP2=((selP1>=0)&mdn&(selP2<0))?selL(mx,my):selP2;selP2=((selP1>=0)&mdn&(selP2<0))?selT(mx,my):selP2;;selP1=(mup&(selP1<0))?selP(mx,my):selP1;selL1=(mup&(selP1<0)&(selL1<0))?selLorS(mx,my):selL1;;selP2=((selP3>=0)&mup)?-1:selP2;selP1=((selP3>=0)&mup)?-1:selP1;;selOBGRA=(selP1>0)?selP1:selOBGRA;selOBGRA=(selL1>0)?selL1:selOBGRA;;help_text=&squot;armónico conjugado ... &squot;;(doIt)?cleanCnstr():&squot;&squot;;;;;;' tipo='función' 
id='cnstrPlano()' algoritmo='sí' expresión='1' local='n,doIt,tryT,tryP,anular' inicio='n=-1' hacer='selP3=(mup&(selP1>0)&(selP2>0))?getAnyP(mx,my):-1;tryT=mup&(selP1>0)&(selP2>0)&(selP3>0);(tryT&(!isTvsP)&(!isTvsL))?newT(selP1,selP2,selP3,color,&squot;&squot;):&squot;&squot;;(tryT&isTvsP)?newTvsP(selP1,selP2,selP3,selP_for_TvsP,color,&squot;&squot;):&squot;&squot;;(tryT&isTvsL)?newTvsL(selP1,selP2,selP3,selL_for_TvsL,color,&squot;&squot;):&squot;&squot;;;selP2=(mdn&(selP1>0))?getAnyP(mx,my):selP2;selL2=(mup&(selL1>0))?selLorS(mx,my):selL2;selL2=(mup&(selL1>0)&(selL2>0)&!coplanarLL(selL1,selL2))?-1:selL2;selP2=(mup&(selL1>0)&(selL2<0))?getAnyP(mx,my):selP2;;anular=(mup&(selL1>0)&(selL2>0)&(selL1==selL2));selL1=(anular)?-1:selL1;selL2=(anular)?-1:selL2;selP2=(anular)?-1:selP2;selP1=(anular)?getAnyP(mx,my):selP1;;tryP=mup&(((selL2>0))|(selP2>0));n=(tryP&(selL1>0)&(selL2>0)&(selL2!=selL1)&coplanarLL(selL1,selL2))?newPlane(selL1,selL2):-1;(tryP&(n<0)&(selL1>0)&(selP2>0))?newPlane(selL1,selP2):&squot;&squot;;;selP1=(mdn&(selP1<0)&(selL1<0))?selP(mx,my):selP1;selL1=(mdn&(selP1<0)&(selL1<0))?selLorS(mx,my):selL1;selP1=(mdn&(selP1<0)&(selL1<0))?getAnyP(mx,my):selP1;;selOBGRA=(selL1>0)?selL1:selOBGRA;selOBGRA=(selP1>0)?selP1:selOBGRA;;help_text=(selL1>0)?&squot;Plano generado por ...&squot;:&squot;&squot;;(tryT|tryP)?cleanCnstr():&squot;&squot;;' tipo='función' 
id='cnstrIntersection()' algoritmo='sí' expresión='1' local='selOb2,doIt' inicio='excludedObj=(mdn)?-1:excludedObj' hacer='selOb1=(mdn&show_E2)?selOB(mx,my):selOb1;selOb1=(mdn&show_E3)?selE3OB(mx,my):selOb1;excludedObj=selOb1;selOb2=(mup&show_E2)?selOB(mx,my):selOb2;selOb2=(mup&show_E3)?selE3OB(mx,my):selOb2;doIt=mup&(selOb1>=0)&(selOb2>=0)&(selOb1!=selOb2);(doIt)?newIntersection(mx,my,selOb1,selOb2,&squot;&squot;):&squot;&squot;;selOBGRA=(mdn)?selOb1:selOBGRA;selOBGRA=(mup)?-1:selOBGRA;excludedObj=(mup)?-1:excludedObj;;help_text=&squot;Intersecar con ...&squot;;(mup)?cleanCnstr():&squot;&squot;' tipo='función' 
id='cnstr3POB()' algoritmo='sí' expresión='1' local='n,doIt,drawing' hacer='selP3=-1;selP3=((selP2>=0)&mup)?getAnyP(mx,my):-1;doIt=mup&(selP3>0)&(selP2>0)&(selP1>0);;n=(doIt&(status==bisectriz))?newBisector2D(selP1,selP2,selP3,color,ancho,&squot;&squot;):-1;;n=(doIt&(status==angulo))?newAng(&squot;&squot;,&squot;&squot;,selP2,selP1,selP3,color,&squot;&squot;):-1;;selP2=((selP1>=0)&mdn&(selP2<0))?getAnyP(mx,my):selP2;selP1=(mup&(selP1<0))?getAnyP(mx,my):selP1;;selP2=(selP3>=0)?-1:selP2;selP1=(selP3>=0)?-1:selP1;;drawing=(selP1>0)&(selP2>0)&mdn;drawingAngle=drawing&(status==angulo);drawingBisector=drawing&(status==bisectriz);;selP1=(doIt)?-1:selP1;selP2=(mup)?-1:selP2;selOBGRA=selP1;;cLINE=E2.Bsc;set_Point(OBGRA[E2.Bsc,_p1],_X_(selP1),_Y_(selP1),0);set_Point(OBGRA[E2.Bsc,_p2],_X_(selP2),_Y_(selP2),0);OBGRA[E2.Bsc,_p3]=E2.M;;OBGRA[E2.Ang,_p1]=selP2;OBGRA[E2.Ang,_p2]=selP1;OBGRA[E2.Ang,_p3]=E2.M;;drawingAngle=(status==angulo);drawingBisector=(status==bisectriz);help_text=(drawingAngle&(selP1>0))?&squot;Ángulo&squot;:&squot;&squot;;help_text=(drawingBisector &(selP1>0))?&squot;Bisectriz&squot;:help_text;;(doIt)?cleanCnstr():&squot;&squot;;' tipo='función' 
id='cnstrLPOB()' algoritmo='sí' expresión='1' local='n,selL2,selP2,doPerp,PinL,doPerpLL' hacer='selP2=(mup&((selL>=0)|(selT>=0)))?selP(mx,my):-1;selL2=(mup&show_E3&(selL>=0)&(selP2<0))?selLorS(mx,my):-1;selP2=(mup&((selL>=0)|(selT>=0))&(selL2<0))?getAnyP(mx,my):-1;doPerp=(status==perpendicular)&mup&(selL>=0)&(selP2>=0);doPerpL =(status==perpendicular)&mup&(selL>100)&(selL2>100);PinL=(doPerp&(selL2<0))?pointInLine(selP2,selL):0;;n=(doPerpL)?newPerpLL(selL,selL2):-1;n=(show_E3&doPerp)?newPerpPlane(selL,selP2):-1;n=(doPerp&(!PinL))?newPerp3D(selL,selP2,1,1,&squot;&squot;):-1;n=(mup&(status==perpendicular)&(selT>=0)&(selP2>=0))?newPerp3D(selT,selP2,1,1,&squot;&squot;):-1;n=(show_E2&doPerp&PinL)?newPerp2D(selL,selP2,1,1,&squot;&squot;):-1;;n=(show_E3&mup&(status==paralela)&mup&(selT>=0)&(selP2>=0))?newParalPlane(selT,selP2,1,1,&squot;&squot;):-1;n=(mup&(status==paralela)&mup&(selL>=0)&(selP2>=0))?newParal2D(selL,selP2,1,1,&squot;&squot;):-1;;statperp=(status==perpendicular);selP1=(mdn&statperp&(selL<0))?selP(mx,my):selP1;selL=(mdn&(selP1<0))?selLorS(mx,my):selL;selT=(mdn&statperp&(selP1<0)&(selL<0))?selT(mx,my):selT;selP1=(mdn&statperp&(selP1<0)&(selL<0)&(selT<0))?getAnyP(mx,my):selP1;;selL=((n<0)&mup&statperp&(selP1>0))?selLorS(mx,my):selL;selT=((n<0)&mup&statperp&(selP1>0)&(selL<0))?selT(mx,my):selT;n=((n<0)&mup&statperp&(selP1>0)&(selT>0))?newFootTP(selT,selP1):n;n=((n<0)&mup&statperp&(selP1>0)&(selL>0))?newFootLP(selL,selP1):n;;selT=(mdn&(selP1<0)&(selL<0))?selT(mx,my):-1;selL=(mup)?-1:selL;selOBGRA=(mdn&(selP1>=0))?selP1:selOBGRA;selOBGRA=(mdn&(selL>=0))?selL:selOBGRA;selOBGRA=(mdn&(selT>=0))?selT:selOBGRA;selOBGRA=(mup)?-1:selOBGRA;cLINE=(mdn&(selL>=0)&(status==paralela))?E2.Prl:cLINE;cLINE=(mdn&(selL>=0)&(status==perpendicular))?E2.Prp:cLINE;OBGRA[cLINE,_p1]=(show_E2)?selL:E2.R;OBGRA[cLINE,_p2]=E2.M;OBGRA[E2.R,_is2P]=1;OBGRA[E2.R,_1]=P1;OBGRA[E2.R,_2]=P2;set_Point(P1,X32(OBGRA[selL,_L_x1],OBGRA[selL,_L_y1],OBGRA[selL,_L_z1]),Y32(OBGRA[selL,_L_x1],OBGRA[selL,_L_y1],OBGRA[selL,_L_z1]),0);set_Point(P2,X32(OBGRA[selL,_L_x2],OBGRA[selL,_L_y2],OBGRA[selL,_L_z2]),Y32(OBGRA[selL,_L_x2],OBGRA[selL,_L_y2],OBGRA[selL,_L_z2]),0);;help_text=((status==perpendicular)&(selP1<0))?&squot;Perpendicular por (P)&squot;:help_text;help_text=((status==perpendicular)&(selP1>0))?&squot;Pie de P en (L o T)&squot;:help_text;;(mup)?cleanCnstr():&squot;&squot;;;;' tipo='función' 
id='cnstr2LOB()' algoritmo='sí' expresión='1' local='doIt' hacer='selL1=(mdn)?selLorS(mx,my):selL1;selL2=(mup&(selL1>0))?selLorS(mx,my):selL2;doIt=(mup&(selL1>0)&(selL2>0)& (selL1!=selL2)&coplanarLL(selL1,selL2));;(doIt&(status==bisectriz))?newBisector(selL1,selL2,&squot;&squot;):&squot;&squot;;(doIt&(status==angulo))?newAngle(selL1,selL2,&squot;&squot;):&squot;&squot;;;selOBGRA=selL1;;drawingAngle=0;drawingBisector=0;help_text=(status==bisectriz)?&squot;Bisectriz&squot;:&squot;&squot;;help_text=(status==angulo)?&squot;Ángulo&squot;:help_text;;(mup)?cleanCnstr():&squot;&squot;' tipo='función' 
id='cnstr2POB()' algoritmo='sí' expresión='1' local='ready,n,selP2' inicio='_mdn_x=(mdn)?mx:_mdn_x;_mdn_y=(mdn)?my:_mdn_y' hacer='selP1=(mdn)?getAnyP(mx,my):selP1;selP2=(mup&(sqrt((_mdn_x-mx)^2+(_mdn_y-my)^2)>pxthr/E2.escala))?getAnyP(mx,my):-1;cLINE=(mdn&(selP1>=0)&(status==segment))?E2.R:E2.R;cLINE=(mdn&(selP1>=0)&(status==mediatriz))?E2.Mdt:cLINE;;OBGRA[E2.R,_1]=(mdn&(selP1>=0)&show_E2)?selP1:OBGRA[E2.R,_1];OBGRA[E2.R,_1]=(mdn&(selP1>=0)&show_E3)?P9:OBGRA[E2.R,_1];OBGRA[E2.R,_2]=(mdn&(selP1>=0))?E2.M:OBGRA[E2.R,_2];(show_E3)?set_Point(OBGRA[E2.R,_1],_mdn_x,_mdn_y,0):&squot;&squot;;;OBGRA[E2.MP,_p1]=(mdn&(selP1>=0))?selP1:OBGRA[E2.MP,_p1];OBGRA[E2.MP,_p2]=(mdn&(selP1>=0))?E2.M:OBGRA[E2.MP,_p2];;ready=mup&(selP1>=0)&(selP2>=0)&(selP1!=selP2);n=(ready&(status==puntoMedio))?newMidPoint(&squot;&squot;,&squot;&squot;,selP1,selP2,&squot;&squot;):-1;n=(ready&(status==recta))?newLine2D(selP1,selP2,color,ancho,&squot;&squot;):-1;n=(ready&(status==segmento)&!isSvsL)?newS(selP1,selP2,color,ancho,&squot;&squot;):-1;n=(ready&(status==segmento)&isSvsL)?newSvsL(selP1,selP2,selL_for_SvsL,color,ancho,&squot;&squot;):-1;n=(show_E2&ready&(status==mediatriz))?newMediatrix2D(selP1,selP2,color,ancho,&squot;&squot;):-1;n=(show_E3&ready&(status==mediatriz))?newMediatorPlane(selP1,selP2):-1;;(mup)?cleanCnstr():&squot;&squot;;;' tipo='función' 
id='handleConstr(mx,my,mp,mpa)' algoritmo='sí' expresión='1' local='mdn,mup,n,twoPOB,firstNOG' inicio='NOG=NOGP' hacer='_allowFreePoints_=(status!=intersection);color=getColor(colix);(mp)?set_Point(E2.M,mx,my,0):&squot;&squot;;mdn=mp&(!mpa);mup=mpa&(!mp);(mdn)?set_Point(E2.MD,mx,my,0):&squot;&squot;;firstNOG =(mdn)?NOG:firstNOG;(firstNOG<NOG)?initCHG():&squot;&squot;;;twoPOB=(status==recta)|(status==segmento)|(status==puntoMedio)|(status==mediatriz);((mdn|mup)&twoPOB)?cnstr2POB():&squot;&squot;;((mdn|mup)&(status==intersection))?cnstrIntersection():&squot;&squot;;((mdn|mup)&(status==plano))?cnstrPlano():&squot;&squot;;((mdn|mup)&(status==curva))?cnstrCurve():&squot;&squot;;((mdn|mup)&(status==circuloRC))?cnstrCircle():&squot;&squot;;((mdn|mup)&(status==eje_radical))?cnstrCC():&squot;&squot;;((mdn|mup)&((status==perpendicular)|(status==paralela)))?cnstrLPOB():&squot;&squot;;((mdn|mup)&(status==conica5))?cnstrConic5Pts():&squot;&squot;;((mdn|mup)&(status==cubica9))?cnstrCubic9Pts():&squot;&squot;;testPoint=(mdn&(selP1<0)&(testLine<0))?selP(mx,my):testPoint;testLine=(mdn&(testPoint<0)&(selL1<0))?selLorS(mx,my):testLine;((mdn|mup)&(status==inversion)&(testPoint<0)&(testLine<0))?cnstrHarmonic():&squot;&squot;;((mdn|mup)&(status==inversion)&(testPoint>0)&(testLine<0))?cnstrPHarmonic():&squot;&squot;;((mdn|mup)&(status==inversion)&(testPoint<0)&(testLine>0))?cnstrLHarmonic():&squot;&squot;;((mdn|mup)&((status==bisectriz)|(status==angulo))&(testLine<0))?cnstr3POB():&squot;&squot;;((mdn|mup)&((status==bisectriz)|(status==angulo))&(testLine>0))?cnstr2LOB():&squot;&squot;;maxNOG=NOG;NOGP=NOG;PASOS[paso,0]=NOG-1;(!mup)?updateLocal(1,iniNOG0,iniNOG1-1):&squot;&squot;;((mdn|mup)&(NOG>firstNOG))?updateLocal(1,firstNOG,NOG-1):&squot;&squot;;_Eval_(OBGRA[cLINE,_func]);(mup&(status==curva))?countCurvasYReglados():&squot;&squot;;;;;;;;;;' tipo='función' 
id='___HANDLERS___' expresión='0' tipo='variable' 
id='handleLUPA2D(lmx,lmy,lmp,lmpa)' algoritmo='sí' expresión='1' local='lmdn,fctr' inicio='changeCursor(&squot;MOVE&squot;,&squot;zoom-in&squot;)' hacer='lmdn=lmp&!lmpa;lmx0=(lmdn)?lmx:lmx0;lmy0=(lmdn)?lmy:lmy0;E2.Ox0=(lmdn)?E2.Ox:E2.Ox0;E2.Oy0=(lmdn)?E2.Oy:E2.Oy0;_escala_0=(lmdn)?_escala_: _escala_0;_escala_=max(_escala_0*(1+(lmy-lmy0)/(24+3*_escala_0)),0.000001);fctr=1-_escala_/_escala_0;ldx=( lmx0-E2.Ox0)*fctr;ldy=(-lmy0-E2.Oy0)*fctr;E2.Ox=E2.Ox0+ldx;E2.Oy=E2.Oy0+ldy;calcSpaceParams(lmpa&!lmp);;' tipo='función' 
id='handleLUPA3D(lmx,lmy,lmp,lmpa)' algoritmo='sí' expresión='1' local='lmdn,fctr' inicio='changeCursor(&squot;MOVE&squot;,&squot;zoom-in&squot;)' hacer='lmdn=lmp&!lmpa;lmx0=(lmdn)?lmx:lmx0;lmy0=(lmdn)?lmy:lmy0;X230=(lmdn)?X23(lmx,lmy):X230;Y230=(lmdn)?Y23(lmx,lmy):Y230;Z230=(lmdn)?Z23(lmx,lmy):Z230;_escala_0=(lmdn)?_escala_:_escala_0;_escala_=max(_escala_0*(1+(lmy-lmy0)/(24+3* _escala_0)),0.000001);fctr=(1-_escala_/_escala_0)/(amp_3D*amp_box);calcSpaceParams(lmpa&!lmp);' tipo='función' 
id='handleMOVE(emx,emy,emp,empa)' algoritmo='sí' expresión='1' local='emdn,edx,edy' inicio='changeCursor(&squot;MOVE&squot;,&squot;move&squot;)' hacer='emdn=emp&!empa;emx0=(emdn)?emx:emx0;emy0=(emdn)?emy:emy0;edx=(emx-emx0);edy=(emy-emy0);E2.Ox0=(emdn)?E2.Ox:E2.Ox0;E2.Oy0=(emdn)?E2.Oy:E2.Oy0;Ex.Oy0=(emdn)?Ex.Oy:Ex.Oy0;E2.Ox=(show_E2)?E2.Ox0+edx:E2.Ox0+X23(edx,edy);E2.Oy=(show_E2)?E2.Oy0-edy:E2.Oy0-Y23(edx,edy);Ex.Oy=(show_E2)?Ex.Oy0    :Ex.Oy0-Z23(edx,edy);calcSpaceParams(empa&!emp);;;;' tipo='función' 
id='handleCTRLG()' algoritmo='sí' expresión='color' local='xx,yy,coltest,colixa,doIt' inicio='xx=CTRLG.mouse_x;yy=CTRLG.mouse_y;colixa=colix' hacer='coltest=ent((xx-COLOR.x+colw/2)/colw);doIt=(coltest>=0)&(coltest<=9);coltest=(yy<-ent(CTRLG._h/6))?coltest+10:coltest;coltest=(yy> ent(CTRLG._h/6))?coltest+20:coltest;colix=(doIt)?coltest:colix;color=getColor(colix);//(doIt)?_Print_(color+&squot; = &squot;+Hex(color)):&squot;&squot;;COL[color,_hidden]=(doIt&(colix==colixa))?1-COL[color,_hidden]:COL[color,_hidden];(doIt&(selOBGRA>=0))?setColSz(selOBGRA):&squot;&squot;;' tipo='función' 
id='handleTEXTO()' algoritmo='sí' expresión='1' local='mx,my' inicio='mx=TEXTO.mouse_x;my=TEXTO.mouse_y' hacer='((mx>=0)&(mx<TECLA_w*30)&(-TECLA_h<=my)&(my<=TECLA_h))?texto_editado.insertAtCursor(SYMBOL[sYmB*60+ent(mx/TECLA_w)+30*(my<0)]):&squot;&squot;' tipo='función' 
id='makeCHG()' algoritmo='sí' expresión='x' hacer='CHANGE[nCHG,_objeto]=selOBGRA;CHANGE[nCHG,_col_i]=OBGRA[selOBGRA,_col];CHANGE[nCHG,_wdth_i]=OBGRA[selOBGRA,_wdth];CHANGE[nCHG,_linestyle_i]=OBGRA[selOBGRA,_linestyle];CHANGE[nCHG,_oculto_i]=OBGRA[selOBGRA,_oculto];;(status==cambiar)?setColSz(selOBGRA):&squot;&squot;;(status==cambia_color)?setCol(selOBGRA):&squot;&squot;;(status==cambia_grosor)?setSz(selOBGRA,ancho):&squot;&squot;;(status==cambia_estilo)?setStyle(selOBGRA,estilo):&squot;&squot;;OBGRA[selOBGRA,_oculto]=(status==ocultar)?1:OBGRA[selOBGRA,_oculto];;CHANGE[nCHG,_col_f]=OBGRA[selOBGRA,_col];CHANGE[nCHG,_wdth_f]=OBGRA[selOBGRA,_wdth];CHANGE[nCHG,_linestyle_f]=OBGRA[selOBGRA,_linestyle];CHANGE[nCHG,_oculto_f]=OBGRA[selOBGRA,_oculto];;nCHG=nCHG+1;maxnCHG=nCHG;;selOBGRA=-1;safe=0;' tipo='función' 
id='moveSphereIn3D()' algoritmo='sí' expresión='0' local='xc,yc,newr' hacer='_radio_0=(E3mdn)?OBGRA[selOBGRA,_r]:_radio_0;xc=x32(OBGRA[selOBGRA,_centro]);yc=y32(OBGRA[selOBGRA,_centro]);newr=_radio_0+(dx*(E3.mouse_x-xc)+dy*(E3.mouse_y-yc))/sqrt((E3.mouse_x-xc)^2+(E3.mouse_y-yc)^2);OBGRA[selOBGRA,_radio]=&squot;&squot;+newr;(_radio_0!=OBGRA[selOBGRA,_radio])?updateLocal(1,selOBGRA,NOG-1):&squot;&squot;;' tipo='función' 
id='adaptToL(L)' algoritmo='sí' expresión='amp' local='x1,y1,z1,x2,y2,z2,d2,X1,Y1,X2,Y2,D2,amp' hacer='x1=OBGRA[L,_L_x1];y1=OBGRA[L,_L_y1];z1=OBGRA[L,_L_z1];x2=OBGRA[L,_L_x2];y2=OBGRA[L,_L_y2];z2=OBGRA[L,_L_z2];d2=(x2-x1)^2+(y2-y1)^2+(z2-z1)^2;X1=X32(x1,y1,z1);Y1=Y32(x1,y1,z1);X2=X32(x2,y2,z2);Y2=Y32(x2,y2,z2);D2=(X2-X1)^2+(Y2-Y1)^2;amp=min(max(d2/D2,1),100);newx=selOBGRA.x0+xx*amp;newy=selOBGRA.y0+yy*amp;newz=selOBGRA.z0+zz*amp;;;;;' tipo='función' 
id='adaptToPlane(p)' algoritmo='sí' expresión='1' local='a,b,c,np,t' hacer='a=OBGRA[p,_pa];b=OBGRA[p,_pb];c=OBGRA[p,_pc];np=sqrt(a^2+b^2+c^2);a=a/np;b=b/np;c=c/np;t=-(a*xx+b*yy+c*zz)/(a*E3Rxx+b*E3Rxy+c*E3Rxz);newx=selOBGRA.x0+xx+t*E3Rxx;newy=selOBGRA.y0+yy+t*E3Rxy;newz=selOBGRA.z0+zz+t*E3Rxz;;;' tipo='función' 
id='adaptToCirc3D(p)' algoritmo='sí' expresión='1' local='a,b,c,np,t' hacer='a=OBGRA[p,_Nx];b=OBGRA[p,_Ny];c=OBGRA[p,_Nz];np=sqrt(a^2+b^2+c^2);a=a/np;b=b/np;c=c/np;t=-(a*xx+b*yy+c*zz)/(a*E3Rxx+b*E3Rxy+c*E3Rxz);newx=selOBGRA.x0+xx+t*E3Rxx;newy=selOBGRA.y0+yy+t*E3Rxy;newz=selOBGRA.z0+zz+t*E3Rxz;;;' tipo='función' 
id='moveCtrlIn3D(cnstr)' algoritmo='sí' expresión='x' local='xx,yy,zz,n2,newx,newy,newz' hacer='xx=X23(dx,dy);yy=Y23(dx,dy);zz=Z23(dx,dy);n2=xx^2+yy^2+zz^2;newx=selOBGRA.x0+xx;newy=selOBGRA.y0+yy;newz=selOBGRA.z0+zz;((OBGRA[cnstr,_type]==circ3D)&(n2>epsilon))?adaptToCirc3D(cnstr):&squot;&squot;;((OBGRA[cnstr,_type]==segment)&(n2>epsilon))?adaptToL(cnstr):&squot;&squot;;(((OBGRA[cnstr,_type]==triangle)|(OBGRA[cnstr,_type]==plane))&(n2>epsilon))?adaptToPlane(cnstr):&squot;&squot;;newz=(abs(newz*E3.escala)<6)?0:newz;set_Point(selOBGRA,newx,newy,newz);OBGRA[selOBGRA,_invalid]=0;OBGRA[selOBGRA,_invisible]=0;' tipo='función' 
id='handleE3naming()' algoritmo='sí' expresión='1' local='found' inicio='E_touched=1;openingfile=0' hacer='selOBGRA=(E3.mp&(!E3.mpa))?selE3OB(E3.mouse_x,E3.mouse_y):selOBGRA;found=E3.mp&(!E3.mpa)&(selOBGRA>=minNOG)&isVisible(selOBGRA);(found)?nameOne():&squot;&squot;;;' tipo='función' 
id='handleE3()' algoritmo='sí' expresión='1' local='dx,dy,isC,doRotate,keepSelOBGRA' inicio='E_touched=1;openingfile=0' hacer='E3mdn=E3.mp&!E3.mpa;hasMoved=(E3mdn)?0:hasMoved;E3mup=E3.mpa&!E3.mp;mdx0=(E3mdn)?E3.mouse_x:mdx0;mdy0=(E3mdn)?E3.mouse_y:mdy0;selOBGRA=(E3mdn)?selE3OB(E3.mouse_x,E3.mouse_y):selOBGRA;selOBGRA=(E3mup&hasMoved)?-1:selOBGRA;can_anim=(selOBGRA>=minNOG)&isVisible(selOBGRA)&(OBGRA[selOBGRA,_type]!=control);isCtrl=(selOBGRA>=minNOG)&isVisible(selOBGRA)&(OBGRA[selOBGRA,_type]==control);selOBGRA.x0=(E3mdn&isCtrl)?X2(selOBGRA):selOBGRA.x0;selOBGRA.y0=(E3mdn&isCtrl)?Y2(selOBGRA):selOBGRA.y0;selOBGRA.z0=(E3mdn&isCtrl)?Z2(selOBGRA):selOBGRA.z0;E3.mouse_xa=(E3.mp&(!E3.mpa))?E3.mouse_x:E3.mouse_xa;E3.mouse_ya=(E3.mp&(!E3.mpa))?E3.mouse_y:E3.mouse_ya;dx=E3.mouse_x-mdx0;dy=E3.mouse_y-mdy0;hasMoved=hasMoved|(dx!=0)|(dy!=0);isC=(selOBGRA>=0)&(OBGRA[selOBGRA,_type]==circle)&(OBGRA[selOBGRA,_func]==&squot;calcCircle2D(&squot;+selOBGRA+&squot;)&squot;);doRotate=(selOBGRA<0)|(OBGRA[selOBGRA,_type]!=control)&(!isC);(isC&E3.mp)?moveSphereIn3D():&squot;&squot;;((OBGRA[selOBGRA,_type]==control))?moveCtrlIn3D(OBGRA[selOBGRA,_cnstr]):&squot;&squot;;updateLocal(1,max(100&selOBGRA),NOG-1);ROT_x=(doRotate)?E3.mouse_x-E3.mouse_xa:0;ROT_y=(doRotate)?E3.mouse_y-E3.mouse_ya:0;((ROT_x!=0)|(ROT_y!=0))?calcE3R():&squot;&squot;;keepSelOBGRA=(selOBGRA>=0)&E3mup;(keepSelOBGRA)?getColSz(selOBGRA):&squot;&squot;;nombre=(keepSelOBGRA)?OBGRA[selOBGRA,_name]:&squot;&squot;;subnombre=(keepSelOBGRA)?OBGRA[selOBGRA,_subix]:&squot;&squot;;(E3.mp&(selOBGRA>=0)&((status<explorar)|(status==ocultar)))?makeCHG():&squot;&squot;;E3.mouse_xa=E3.mouse_x;E3.mouse_ya=E3.mouse_y;//(E3mup)?updateOBGRAs():&squot;&squot;' tipo='función' 
id='handleE3Rotate()' algoritmo='sí' expresión='1' local='dx,dy' inicio='E_touched=1' hacer='E3mdn=E3.mp&!E3.mpa;hasMoved=(E3mdn)?0:hasMoved;E3mup=E3.mpa&!E3.mp;mdx0=(E3mdn)?E3.mouse_x:mdx0;mdy0=(E3mdn)?E3.mouse_y:mdy0;E3.mouse_xa=(E3.mp&(!E3.mpa))?E3.mouse_x:E3.mouse_xa;E3.mouse_ya=(E3.mp&(!E3.mpa))?E3.mouse_y:E3.mouse_ya;dx=E3.mouse_x-mdx0;dy=E3.mouse_y-mdy0;ROT_x=E3.mouse_x-E3.mouse_xa;ROT_y=E3.mouse_y-E3.mouse_ya;((ROT_x!=0)|(ROT_y!=0))?calcE3R():&squot;&squot;;E3.mouse_xa=E3.mouse_x;E3.mouse_ya=E3.mouse_y;;;;;' tipo='función' 
id='handleE2naming()' algoritmo='sí' expresión='1' local='found' inicio='E_touched=1;openingfile=0' hacer='selOBGRA=(E2.mp&(!E2.mpa))?selOB(E2.mouse_x,E2.mouse_y):selOBGRA;found=E2.mp&(!E2.mpa)&(selOBGRA>=minNOG)&isVisible(selOBGRA);(found)?nameOne():&squot;&squot;;;' tipo='función' 
id='moveCircleRadius()' algoritmo='sí' expresión='0' local='dx,dy,xc,yc,newr' hacer='E2mdx0=(mdn)?E2.mouse_x:E2mdx0;E2mdy0=(mdn)?E2.mouse_y:E2mdy0;dx=E2.mouse_x-E2mdx0;dy=E2.mouse_y-E2mdy0;_radio_0=(mdn)?OBGRA[selOBGRA,_r]:_radio_0;xc=X2(OBGRA[selOBGRA,_centro]);yc=Y2(OBGRA[selOBGRA,_centro]);newr=_radio_0+(dx*(E2.mouse_x-xc)+dy*(E2.mouse_y-yc))/sqrt((E2.mouse_x-xc)^2+(E2.mouse_y-yc)^2);OBGRA[selOBGRA,_radio]=&squot;&squot;+newr;(_radio_0!=OBGRA[selOBGRA,_radio])?updateLocal(1,selOBGRA,NOG-1):&squot;&squot;;' tipo='función' 
id='handleE2()' algoritmo='sí' expresión='1' local='found,isC,mdn' inicio='E_touched=1;openingfile=0' hacer='mdn=E2.mp&!E2.mpa;(mdn)?set_Point(E2.MD,E2.mouse_x,E2.mouse_y,0):&squot;&squot;;set_Point(E2.M,E2.mouse_x,E2.mouse_y,0);selOBGRA_a=(mdn)?selOBGRA:selOBGRA_a;selOBGRA=(mdn)?selOB(E2.mouse_x,E2.mouse_y):selOBGRA;selOBGRA=((!E2.mp)&(selOBGRA_a==selOBGRA)&(X2(E2.MD)==X2(E2.M))&(Y2(E2.MD)==Y2(E2.M)))?-1:selOBGRA;found=(status==explorar)&E2.mp&(!E2.mpa)&(selOBGRA>=minNOG)&isVisible(selOBGRA)&(OBGRA[selOBGRA,_type]==control);ncg=(found)?selOBGRA:ncg;xp=(found)?OBGRA[ncg,_x]:xp;yp=(found)?OBGRA[ncg,_y]:yp;x0=(found)?E2.mouse_x:x0;y0=(found)?E2.mouse_y:y0;seHaMovido=(ncg>0)&((E2.mouse_x!=x0)|(E2.mouse_y!=y0));(ncg>0)?set_Point(ncg,xp+E2.mouse_x-x0,yp+E2.mouse_y-y0,OBGRA[ncg,_z]):&squot;&squot;;;(seHaMovido&(ncg>0))?updateLocal(1,ncg,NOG-1):&squot;&squot;;;ncg=(!E2.mp)?-1:ncg;;isC=(selOBGRA>=0)&(OBGRA[selOBGRA,_type]==circle)&(OBGRA[selOBGRA,_func]==&squot;calcCircle2D(&squot;+selOBGRA+&squot;)&squot;);(isC&E2.mp)?moveCircleRadius():&squot;&squot;;;;selOBGRA=(((X2(E2.MD)!=X2(E2.M))|(Y2(E2.MD)!=Y2(E2.M)))&(!E2.mp)&((OBGRA[selOBGRA,_type]==control)|isC))?-1:selOBGRA;((!E2.mp)&(selOBGRA>=0)&(status==explorar))?getColSz(selOBGRA):&squot;&squot;;(E2.mp&(selOBGRA>=0)&((status<explorar)|(status==ocultar)))?makeCHG():&squot;&squot;;;selHasName=(selOBGRA>=minNOG)&((OBGRA[selOBGRA,_type]==control)|(OBGRA[selOBGRA,_type]==point)|(OBGRA[selOBGRA,_type]==angle));nombre=(selHasName)?OBGRA[selOBGRA,_name]:&squot;&squot;;subnombre=(selHasName)?OBGRA[selOBGRA,_subix]:&squot;&squot;;;;;;;;;;;;' tipo='función' 
id='cleanCnstr()' algoritmo='sí' expresión='1' hacer='excludedObj=-1;selP1=-1;selP2=-1;selP3=-1;selL1=-1;selL2=-1;selL3=-1;selS1=-1;selEq1=-1;selC1=-1;selL=-1;selT=-1;help_text=&squot;&squot;;selOBGRA=-1;initC5Pts();initC9Pts();help_text=&squot;&squot;;testPoint=-1;testLine=-1;drawingAngle=0;drawingBisector=0;' tipo='función' 
id='setStatus(s)' algoritmo='sí' expresión='1' inicio='status=s' hacer='selL_for_SvsL=(((OBGRA[selOBGRA,_type]==segment)&(OBGRA[selOBGRA,_isLine]))|(OBGRA[selOBGRA,_type]==triangle)|(OBGRA[selOBGRA,_type]==plane))?selOBGRA:-1;isSvsL=(selL_for_SvsL>minNOG);selP_for_TvsP=((OBGRA[selOBGRA,_type]==triangle)|(OBGRA[selOBGRA,_type]==plane))?selOBGRA:-1;isTvsP=(selP_for_TvsP>minNOG);selL_for_TvsL=((OBGRA[selOBGRA,_type]==segmento)&(OBGRA[selOBGRA,_isLine]))?selOBGRA:-1;isTvsL=(selL_for_TvsL>minNOG);cleanCnstr()' tipo='función'