diff options
Diffstat (limited to 'texmf-dist/scripts/ketcindy/ketlib/ketcindylib3dr.cs')
-rw-r--r-- | texmf-dist/scripts/ketcindy/ketlib/ketcindylib3dr.cs | 4503 |
1 files changed, 0 insertions, 4503 deletions
diff --git a/texmf-dist/scripts/ketcindy/ketlib/ketcindylib3dr.cs b/texmf-dist/scripts/ketcindy/ketlib/ketcindylib3dr.cs deleted file mode 100644 index ce7a65f1..00000000 --- a/texmf-dist/scripts/ketcindy/ketlib/ketcindylib3dr.cs +++ /dev/null @@ -1,4503 +0,0 @@ -// Copyright (C) 2014 Setsuo Takato, KETCindy Japan project team -// -//This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/> -// - -println("ketcindylib3d(20180327) loaded"); - -//help:start(); - -Ketinit3d():=Ketinit3d(1); -Ketinit3d(sf):=( - regional(tmp); - tmp=round(4*SW.y)/4; -// Ketinit3d(sf,[round(SW.x)+1,tmp-0.5,tmp-1]); - Ketinit3d(sf,[-5,tmp-0.5,tmp-1]); -); -Ketinit3d(subflg,position):=( -//help:Ketinit3d(subflg=1) - regional(ctr,tmp,tmp1,tmp2,tmp3,tmp4,xPos,yTh,yPh); -// println("KETCindy3d V.2.3.5(2016.02.03)"); - BezierNumber3=1; //15.02.28 - if(!islist(BZLIST3), - BZLIST3=[]; //15.02.28 - , - tmp=apply(allpoints(),text(#)); - tmp1=select(tmp,substring(#,length(#)-1,length(#))=="p"); - tmp2=[]; - forall(tmp1,ctr, - tmp=substring(ctr,0,length(ctr)-1); - tmp=select(BZLIST3,#_1==tmp); - if(length(tmp)>0, - tmp2=append(tmp2,tmp_1); - ); - ); - BZLIST3=tmp2; - ); - SUBSCR=subflg; - Setwindow("Msg=no"); - if(length(position)>2, - xPos=position_1; - yTh=position_2; - yPh=position_3; - , - xPos=0; - yTh=position_1; - yPh=position_2; - ); -// THETA=60*pi/180; -// PHI=30*pi/180; - FocusPoint=[0,0,0]; - EyePoint=[5,5,5]; - Listplot("th",[[xPos,yTh],[xPos+9,yTh]],["notex","linecolor->[0,1,0]","Msg=no"]); - Listplot("ph",[[xPos,yPh],[xPos+9,yPh]],["notex","linecolor->[0,1,0]","Msg=no"]); - //16.02.10 - PutonCurve("TH",sgth,[xPos,xPos+9,"Msg=no"]); - PutonCurve("FI",sgph,[xPos,xPos+9,"Msg=no"]); - THETA=(TH.x-xPos)*20*pi/180; - PHI=(FI.x-xPos)*40*pi/180; -// Defvar("THETA",THETA); // 16.06.20 -// Defvar("PHI",PHI); // 16.06.20 - drawtext([xPos-0.8,yTh-0.1],Sprintf((TH.x-xPos)*20,2),align->"right"); //17.05.02 - drawtext([xPos-0.8,yPh-0.1],Sprintf((FI.x-xPos)*40,2),align->"right"); //17.05.02 - tmp="Setangle("+text((TH.x-xPos)*20)+","+text((FI.x-xPos)*40)+")"; - GLIST=append(GLIST,tmp); - Addax(0); - TSIZE=10; - TSIZEZ=10; - ErrFlg=0; -); - -Start3d():=Start3d([]); -Start3d(ptexception):=( -//help:Start3d(); -//help:Start3d(execptionptlist); - regional(xmn,xMx,ymn,yMx,pt,pt3,pt2, - xPos,yTh,yPh,Eps,tmp,tmp1,tmp2,tmp3,tmp4); - ConstantListC=[[50,50],[5000,1500,500,200],[0.00001,0.01,0.1]]; - FuncListC=[]; - CommandListC=[]; - GCLIST=[]; - GLIST=[]; - FUNLIST=[]; - COM0thlist=[]; - COM1stlist=[]; - COM2ndlist=[]; - SEG3dlist=[]; - OutFileList=[]; - FigPdfList=[]; // 16.04.08 - ErrFlag=0; - OBJCMD=[]; // 16.11.29from - OCNAME=Fhead; - OCOPTION=["m","v"];// 16.11.29until - ArrowlineNumber=1; // 16.01.31 - ArrowheadNumber=1; - BezierNumber=1; //16.01.31 - BezierNumber3=1; //16.08.19 - Fnametex=Fhead+".tex"; // 15.04.06 - FnameR=Fhead+".r"; - FnameRbody=Fhead+"body.r"; - Fnameout=Fhead+".txt"; -// Ketinit3d(SUBSCR); // 16.06.20 - Setwindow("Msg=no"); // 16.06.20from - tmp=round(4*SW.y)/4; - xPos=-5;yTh=tmp-0.5;yPh=tmp-1; - Listplot("th",[[xPos,yTh],[xPos+9,yTh]], - ["notex","linecolor->[0,1,0]","Msg=no"]); - Listplot("ph",[[xPos,yPh],[xPos+9,yPh]], - ["notex","linecolor->[0,1,0]","Msg=no"]); - //16.02.10 - PutonCurve("TH",sgth,[xPos,xPos+9,"Msg=no"]); - PutonCurve("FI",sgph,[xPos,xPos+9,"Msg=no"]); - drawtext([xPos-0.8,yTh-0.1],Sprintf((TH.x-xPos)*20,2),align->"right"); //17.05.02 - drawtext([xPos-0.8,yPh-0.1],Sprintf((FI.x-xPos)*40,2),align->"right"); //17.05.02 - tmp="Setangle(" - +format((TH.x-xPos)*20,5)+"," - +format((FI.x-xPos)*40,5)+")"; - GLIST=append(GLIST,tmp); - THETA=(TH.x-xPos)*20*pi/180; - PHI=(FI.x-xPos)*40*pi/180; // 16.06.20until - if(isselected(TH) % isselected(FI), // 17.05.18from - if(length(Ch)>0, - ChNum=Ch_(length(Ch)); - if(ChNum==0, ChNum=1); - , - ChNum=1; - ); - Ch=[0]; - );// 17.05.18until - if(length(VLIST)==0, // 16.06.20 - tmp=remove(allpoints(),[NE,SW,TH,FI,O,X,Y,Z]);//17.06.02 - tmp4=remove(tmp,ptexception); - forall(tmp4,pt, - tmp1=text(pt); - tmp=substring(tmp1,length(tmp1)-1,length(tmp1)); - if(tmp!="z", - tmp=parse(tmp1+"z.y"); - pt3=Xyzcoord(pt.x,pt.y,tmp); - Defvar(tmp1+"3d",pt3); - pt2=Parapt(pt3); // 16.05.28from - Defvar(tmp1+"2d",pt2); // 16.05.28until - ); - ); - , - if(isselected(NE) % isselected(SW), - tmp=remove(allpoints(),[NE,SW,TH,FI]); - tmp4=remove(tmp,ptexception); - forall(tmp4,pt, - tmp1=text(pt); - tmp=substring(tmp1,length(tmp1)-1,length(tmp1)); - if(tmp!="z", - tmp=select(VLIST,#_1==tmp1+"3d"); //17.10.07 - pt3=tmp_1_2; - tmp=tmp1+".xy=Parapt("+pt3+")_[1,2];"; - parse(tmp); -// if(SUBSCR==1, -// tmp=tmp1+"z"+".x=NE.x-SW.x+"+tmp1+".x"; -// parse(tmp); -// ); - ); - ); - , - tmp=remove(allpoints(),[NE,SW,TH,FI]); - tmp4=remove(tmp,ptexception); - forall(tmp4,pt, - tmp1=text(pt); - tmp=substring(tmp1,length(tmp1)-1,length(tmp1)); - if(tmp!="z", - tmp2=parse(tmp1+"z"); - if(isselected(pt) % isselected(tmp2), - Defvar(tmp1+"2d",pt.xy); - tmp=parse(tmp1+"z.y"); - tmp=Xyzcoord(pt.x,pt.y,tmp); - Defvar(tmp1+"3d",tmp); - ); - ); - ); - ); - ); - if(SUBSCR==1, - xmn=SW.x+NE.x-SW.x; - xMx=NE.x+NE.x-SW.x; - ymn=SW.y; - yMx=NE.y; - drawpoly([[xMx,yMx],[xmn,yMx], - [xmn,ymn],[xMx,ymn]],color->[1,1,1]); - connect([[NE.x-SW.x,yMx],[NE.x-SW.x,ymn]], - color->[0.5,0.5,0.5]); - ); - // for Presentation //17.07.01from - letterc=[0.98,0.13,0,0.43]; boxc=[0,0.32,0.52,0]; - shadowc=[0,0,0,0.5]; mboxc="yellow"; //17.03.02 regional debugged - SlideColorList=[letterc,boxc,boxc,boxc,shadowc,shadowc,6,1.3, - letterc,mboxc,mboxc,mboxc,62,2,letterc]; - ThinDense=0.1; //17.07.01until - Ptseg3data(ptexception); //16.08.23 -); - -Setangle(theta,phi):=( //16.12.24 -//help:Setangle(60,30); - regional(xmn,xMx,ymn,yMx,pt,pt3,pt2, - xPos,yTh,yPh,Eps,tmp,tmp1,tmp2,tmp3,tmp4); - tmp=round(4*SW.y)/4; - xPos=-5;yTh=tmp-0.5;yPh=tmp-1; - if(theta=="",theta=THETA*180/pi); // 17.01.19 - if(phi=="",phi=PHI*180/pi); - THETA=theta*pi/180; - TH.x=theta/20+xPos; - PHI=phi*pi/180; - FI.x=phi/40+xPos; -// drawtext([xPos-0.8,yTh-0.1],text(theta)); //17.05.05 -// drawtext([xPos-0.8,yPh-0.1],text(phi)); - tmp="Setangle(" - +format(theta,5)+","+format(phi,5)+")"; - GLIST=append(GLIST,tmp); - if(length(VLIST)==0, // 16.06.20 - tmp=remove(allpoints(),[NE,SW,TH,FI]); - tmp4=remove(tmp,ptexception); - forall(tmp4,pt, - tmp1=text(pt); - tmp=substring(tmp1,length(tmp1)-1,length(tmp1)); - if(tmp!="z", - tmp=parse(tmp1+"z.y"); - pt3=Xyzcoord(pt.x,pt.y,tmp); - Defvar(tmp1+"3d",pt3); - pt2=Parapt(pt3); // 16.05.28from - Defvar(tmp1+"2d",pt2); // 16.05.28until - ); - ); - , - if(isselected(NE) % isselected(SW), - tmp=remove(allpoints(),[NE,SW,TH,FI]); - tmp4=remove(tmp,ptexception); - forall(tmp4,pt, - tmp1=text(pt); - tmp=substring(tmp1,length(tmp1)-1,length(tmp1)); - if(tmp!="z", - tmp=select(VLIST,#_1==tmp1+"3d"); - pt3=tmp_1_2; - tmp=tmp1+".xy=Parapt("+pt3+")_[1,2];"; - parse(tmp); - ); - ); - , - tmp=remove(allpoints(),[NE,SW,TH,FI]); - tmp4=remove(tmp,ptexception); - forall(tmp4,pt, - tmp1=text(pt); - tmp=substring(tmp1,length(tmp1)-1,length(tmp1)); - if(tmp!="z", - tmp2=parse(tmp1+"z"); - if(isselected(pt) % isselected(tmp2), - Defvar(tmp1+"2d",pt.xy); - tmp=parse(tmp1+"z.y"); - tmp=Xyzcoord(pt.x,pt.y,tmp); - Defvar(tmp1+"3d",tmp); - ); - ); - ); - ); - ); - forall(Datalist3d(),#, - tmp1=replace(#,"3d","2d"); - tmp2=Projpara(#,["nodata"]); - tmp=tmp1+"="+textformat(tmp2,5); - parse(tmp); - ); - Ptseg3data(ptexception); -); - -Changestyle3d(nameL,style):=( -//help:Changestyle3d(["geoseg3d","ax3d"],["notex"]); - regional(nmL,name,tmp,tmp1,tmp2); - if(islist(nameL),nmL=nameL,nmL=[nameL]); - tmp1=[]; - forall(nmL,name, - tmp=parse(name); - if(isstring(tmp_1), - tmp1=concat(tmp1,tmp); - , - tmp1=append(tmp1,name); - ); - tmp=apply(tmp1,replace(#,"3d","2d")); - Changestyle(tmp,style); - tmp=apply(tmp,"sub"+#); // 15.05.24 - Changestyle(tmp,style); - ); -); - -Dist3d(pt1):=Dist3d(pt1,[0,0,0]); -Dist3d(pt1,pt2):=( -//help:Dist3d(A3d,B3d); -//help:Dist3d(A,B); -//help:Dist3d("A","B"); - regional(p1,p2); - if(islist(pt1), - p1=pt1; - , - if(ispoint(pt1),p1=text(pt1),p1=pt1); - p1=parse(p1+"3d"); - ); - if(islist(pt2), - p2=pt2; - , - if(ispoint(pt2),p2=text(pt2),p2=pt2); - p2=parse(p2+"3d"); - ); - sqrt((p2-p1)*(p2-p1)); -); - -Findangle(vec):=( -//help:Findangle([2,1,4]); -//help:Findangle([0,0,1,0]); - regional(vec3,vec2,Eps,th,ph,tmp); - Eps=10^(-4); - vec3=vec_(1..3); - vec2=vec_(1..2); - th=arccos(vec_3/|vec3|); - if(|vec2|>Eps, - ph=arccos(vec_1/|vec2|); - if(vec_2<0, - ph=2*pi-ph; // 15.03.28 - ); - , - if(length(vec)>3,ph=vec_4*pi/180,ph=PHI); - ); - [th,ph]; -); - -Cancoordpara(pc):=( -//help:Cancoordpara([1,2,0]); - regional(Xz,Yz,Zz,tmp1,tmp2,tmp3); - Xz=pc_1; Yz=pc_2; Zz=pc_3; - tmp1=-Xz*sin(PHI)-Yz*cos(PHI)*cos(THETA)+Zz*cos(PHI)*sin(THETA); - tmp2=Xz*cos(PHI)-Yz*sin(PHI)*cos(THETA)+Zz*sin(PHI)*sin(THETA); - tmp3=Yz*sin(THETA)+Zz*cos(THETA); - [tmp1,tmp2,tmp3]; -); - -Zparapt(cc):=( - regional(x,y,z); - x=cc_1; y=cc_2; z=cc_3; - x*cos(PHI)*sin(THETA)+y*sin(PHI)*sin(THETA)+z*cos(THETA); -); - -Projcoordpara(cc):=( -//help:Projcoordpara([3,1,2]); - regional(tmp); - tmp=Parapt(cc); - [tmp_1,tmp_2,Zparapt(cc)]; -); - -Parapt(pt):=( -//help:Parapt([2,1,5]); - regional(Xz,Yz); - Xz=-pt_1*sin(PHI)+pt_2*cos(PHI); - Yz=-pt_1*cos(PHI)*cos(THETA)-pt_2*sin(PHI)*cos(THETA)+pt_3*sin(THETA); - [Xz,Yz]; -); - -ProjCurve(crv):=( -//help:Projcurve("sl3d1"); - regional(CurveL,Curve,Eps,AnsL,Out,sp,cp,st,,ct,ii,pt, - Xz,Yz,tmp,tmp1,tmp2); - Eps=10^(-6); - sp=sin(PHI); cp=cos(PHI); - st=sin(THETA); ct=cos(THETA); - if(isstring(crv),CurveL=parse(crv),CurveL=crv); - if(MeasureDepth(CurveL)==1,CurveL=[CurveL]); - Out=[]; - forall(CurveL,Curve, - AnsL=[]; - forall(1..length(Curve),ii, - pt=Curve_ii; - if(pt_1!="inf", - Xz=-pt_1*sp+pt_2*cp; - Yz=-pt_1*cp*ct-pt_2*sp*ct+pt_3*st; - tmp=[Xz,Yz]; - if(ii==1, - AnsL=[tmp]; - , - tmp1=AnsL_(length(AnsL)); - if(tmp1_1=="inf" % |tmp-tmp1|>Eps, - AnsL=append(AnsL,tmp); - ); - ); - , - AnsL=append(AnsL,["inf"]); - ); - ); - tmp1=[]; - tmp2=select(1..length(AnsL),AnsL_#==["inf"]); - tmp=1; - forall(tmp2, - if(#>tmp, - tmp1=concat(tmp1,[AnsL_(tmp..(#-1))]) - ); - tmp=#+1; - ); - if(tmp<length(AnsL), - tmp1=concat(tmp1,[AnsL_(tmp..length(AnsL))]); - ); - AnsL=tmp1; - if(length(AnsL)==1,AnsL=AnsL_1); - Out=append(Out,AnsL); - ); - if(length(Out)==1, - Out=Out_1; - ); - Out; -); - -Projpara(ptdata):=Projpara(ptdata,[]); -Projpara(ptdata,options):=( - regional(name2,name3,Ltype,Noflg,opcindy,dtL,ptL,tmp,Out); - tmp=Divoptions(options); - Ltype=tmp_1; - Noflg=tmp_2; - opcindy=tmp_(length(tmp)); - if(islist(ptdata),dtL=ptdata,dtL=[ptdata]); - Out=[]; - forall(dtL,name3, -// name3=#; - if(indexof(name3,"3d")>0, //17.05.24 - name2=replace(name3,"3d","2d"); - , - name2="para"+name3; - ); - ptL=Projcurve(name3); - ptL=select(ptL,length(#)>1);//17.06.02 - if(length(ptL)==1, - ptL=ptL_1; - ); - Out=append(Out,ptL); - if(Noflg<3, - println("generate projparadata "+name2); - tmp=name2+"="+textformat(ptL,5); - parse(tmp); - tmp=name2+"=Projpara("+name3+")"; - GLIST=append(GLIST,tmp); - ); - if(Noflg<2, - if(isstring(Ltype), - Ltype=GetLinestyle(text(Noflg)+Ltype,name2); - , - if(Noflg==1,Ltype=0); - ); - GCLIST=append(GCLIST,[name2,Ltype,opcindy]); - ); - ); - if(length(Out)==1,Out=Out_1); -// Out=Flattenlist(Out); - if(length(Out)==1,Out=Out_1); // 15.02.24 - tmp=[]; - forall(Out, - if(length(#)>0,tmp=append(tmp,#)); - ); - Out=tmp; - Out; -); - -InvparaptPp(pt,pd):=( - regional(Eps,fk,nfk,ph,fh,ah,bh,ak,bk,v1,v2, - nn,s0,t2,out,tmp,tmp1,tmp2,flg); - Eps=10^(-4); - if(isstring(pd), - fk=pd; - , - fk=textformat(pd,5); - ); - nfk=Numptcrv(parse(fk)); - flg=0; - tmp=pt; - if(length(tmp)==1, - ph=tmp; - fh=pd; - , - fh=Projpara(fk,["nodata"]); - if(nfk>2, - tmp1=Nearestpt(tmp,fh); - ph=tmp1_2; - , - ah=Ptcrv(1,fh); bh=Ptcrv(2,fh); - v1=tmp-ah; v2=bh-ah; - tmp1=Crossprod(v1,v2); - if(abs(tmp1)>Eps, - println(" Not on the line"); - out=[]; - flg=1; - , - ph=Dotprod(v1,v2)/|v2|^2+1; - ); - ); - ); - if(flg==0, - if(nfk>2, - nn=floor(ph); - s0=ph-nn; - if(ph>Numptcrv(fh)-Eps, - out=[Ptend(fk),Numptcrv(fh)]; - flg=1; - ); - , - nn=1; - s0=ph-1; - ); - ); - if(flg==0, - ak=Ptcrv(nn,fk); bk=Ptcrv(nn+1,fk); - ah=Ptcrv(nn,fh); bh=Ptcrv(nn+1,fh); - ph=(1-s0)*ah+a0*bh; - t2=s0; - pk=(1-t2)*ak+t2*bk; - out=[pk,nn+t2]; - ); - out; -); - -Invparapt(pt,pd):=( - regional(tmp); - tmp=InvparaptPp(pt,pd); - tmp_1; -); - -Subgraph(name,opcindy):=( - regional(tht,tmp,tmp1); - tht=THETA; THETA=pi/2; - tmp=Projpara(name3,["nodata"]); - if(length(tmp)>0, //15.08.17 - tmp=Translatedata("",[tmp],[NE.x-SW.x,0],["nodata"]); - tmp1=replace("sub"+name,"3d","2d"); - tmp=tmp1+"="+Textformat(tmp,5); - parse(tmp); - GCLIST=append(GCLIST,[tmp1,0,opcindy]); - ); - THETA=tht; // 15.11.03 -); - -Spaceline(ptlist):=Spaceline(ptlist,[]); // 16.02.22 from -Spaceline(Arg1,Arg2):=( - regional(name,tmp,tmp1,tmp2); - if(isstring(Arg1), - Spaceline(Arg1,Arg2,[]); - , - tmp=text(Arg1); - tmp=substring(tmp,1,length(tmp)-1); - name="-"+replace(tmp,",",""); - Spaceline(name,Arg1,Arg2); - ); -); // 16.02.22 until -Spaceline(nm,ptlistorg,optionorg):=( -//help:Spaceline("1",[[2,5,1],[4,2,3]]); -//help:Spaceline([A,B]); - regional(name2,name3,options,Out,tmp,tmp1,tmp2, - opstr,opcindy,Ltype,Noflg,eqL,ptlist, Msg); - ptlist=apply(ptlistorg,if(ispoint(#),parse(text(#)+"3d"),#)); // 16.02.10 - if(substring(nm,0,2)=="bz", - name2=replace(nm,"bz","bz2d"); - name3=replace(nm,"bz","bz3d"); - , - if(substring(nm,0,1)=="-", - tmp=substring(nm,1,length(nm)); - if(indexof(tmp,"3d")>0,name3=tmp,name3=tmp+"3d"); - name2=replace(name3,"3d","2d"); - , - name2="sl2d"+nm; - name3="sl3d"+nm; - ); - ); - options=select(optionorg,length(#)>0); // 160415 - tmp=Divoptions(options); - Ltype=tmp_1; - Noflg=tmp_2; - eqL=tmp_5; - opcindy=tmp_(length(tmp)); - Msg=1; - forall(eqL, - tmp=substring(#,0,1); - if(Toupper(tmp)=="M", - tmp=indexof(#,"="); - tmp1=substring(#,tmp,tmp+1); - if(Toupper(tmp1)=="N", - Msg=0; - ); - ); - ); - if(Noflg<3, - if(Msg==1, - println("generate Spaceline "+name3); - ); - tmp=name3+"="+ptlist; - parse(tmp); - tmp1=Projpara(name3,["nodata"]); - tmp=name2+"="+textformat(tmp1,5); - parse(tmp); - tmp="["; - forall(ptlist, //17.07.13from - if(isstring(#), - tmp=tmp+#+","; - , - tmp=tmp+textformat(#,5)+","; - ); - ); - tmp=substring(tmp,0,length(tmp)-1)+"]"; - tmp=name3+"=Spaceline("+tmp+")"; //17.07.13until -// tmp=name3+"=Spaceline("+textformat(ptlist,5)+")"; //17.05.24 - GLIST=append(GLIST,tmp); - tmp=name2+"=Projpara("+name3+")"; - GLIST=append(GLIST,tmp); - ); - if(Noflg<2, - if(isstring(Ltype), - Ltype=GetLinestyle(text(Noflg)+Ltype,name2); - , - if(Noflg==1,Ltype=0); - ); - GCLIST=append(GCLIST,[name2,Ltype,opcindy]); - if(SUBSCR==1, // 15.02.11 - Subgraph(name3,opcindy); - ); - ); - ptlist; -); - -Spacecurve(nm,funstr,variable):=Spacecurve(nm,funstr,variable,[]); -Spacecurve(nm,funstr,variable,optionorg):=( -//help:Spacecurve("1","[cos(t),sin(t),0.5*t]","t=[0,4*pi]",["Num=200"]); - regional(name2,name3,options,Out,tmp,tmp1,tmp2,vname,tmpfn,str,Rng,Num,Msg, - Ec,Exfun,Dc,opstr,opcindy,Fntmp,Vatmp,Ltype,Noflg,eqL,t1,t2,dt,tt,pa,ke); - if(substring(nm,0,2)=="bz", - name2=replace(nm,"bz","bz2d"); - name3=replace(nm,"bz","bz3d"); - , - name2="sc2d"+nm; - name3="sc3d"+nm; - ); - Eps=10^(-4); - Num=50; - Ec=[]; - Exfun=""; - Dc=1000; - options=select(optionorg,length(#)>0); // 160415 - tmp=Divoptions(options); - Ltype=tmp_1; - Noflg=tmp_2; - eqL=tmp_5; - opstr=tmp_(length(tmp)-1); - opcindy=tmp_(length(tmp)); - Msg=1; - forall(eqL, - tmp=substring(#,0,1); - if(Toupper(tmp)=="M", - tmp=indexof(#,"="); - tmp1=substring(#,tmp,tmp+2); - if(Toupper(tmp1)=="NO", - Msg=0; - ); - ); - tmp=indexof(#,"N="); - if(tmp>0, - tmp1=substring(#,tmp+1,length(#)); - Num=parse(tmp1); - opstr=opstr+",'"+#+"'"; - ); - tmp=indexof(#,"Num="); - if(tmp>0, - tmp1=substring(#,tmp+3,length(#)); - Num=parse(tmp1); - opstr=opstr+",'"+#+"'"; - ); - tmp=indexof(#,"E="); - if(tmp>0, - tmp1=substring(#,tmp+1,length(#)); - if(substring(tmp1,0,1)=="[", - Ec=parse(tmp1); - , - Exfun=tmp1; - ); - opstr=opstr+",'"+#+"'"; - ); - tmp=indexof(#,"Exc="); - if(tmp>0, - tmp1=substring(#,tmp+3,length(#)); - if(substring(tmp1,0,1)=="[", - Ec=parse(tmp1); - , - Exfun=tmp1; - ); - ); - ); - tmp=indexof(variable,"="); - vname=substring(variable,0,tmp-1); - str=substring(variable,tmp,length(variable)); - Rng=parse(str); - t1=Rng_1; t2=Rng_2; - dt=(t2-t1)/Num; // differ from Scilab - tmp="tmpfn("+vname+"):="+funstr+";"; - parse(tmp); - Out=[]; - Ec=append(sort(Ec),10000); - ke=1; - forall(0..Num, - pt=[]; - tt=Rng_1+#*dt; - if(tt-Ec_ke<-Eps, - pa=tmpfn(tt); - ); - if(abs(tt-Ec_ke)<=Eps, - if(length(Out)>0, - if(Out_(length(Out))_1!="inf", - pa=["inf"]; - ); - ); - ); - if(tt-Ec_ke>Eps, - pa=tmpfn(tt); - ke=ke+1; - ); - if(length(pa)>0, - if(pa_1=="inf", - Out=append(Out,pa); - , - if(length(Out)==0, - Out=[pa]; - , - tmp=Out_(length(Out)); - if(tmp_1=="inf", - Out=append(Out,pa); - , - if(|tmp-pa|<Dc, - Out=append(Out,pa); - , - Out=concat(Out,[["inf"],pa]); - ); - ); - ); - ); - ); - ); - tmp1=[]; - tmp2=select(1..length(Out),Out_#==["inf"]); - tmp=1; - forall(tmp2, - if(#>tmp, - tmp1=concat(tmp1,[Out_(tmp..(#-1))]) - ); - tmp=#+1; - ); - if(tmp<length(Out), - tmp1=concat(tmp1,[Out_(tmp..length(Out))]); - ); - if(length(Out)==1, - Out=Out_1; - ); - if(Noflg<3, - if(Msg==1, - println("generate Spacecurve "+name3); - ); - tmp=name3+"="+textformat(Out,5); - parse(tmp); - tmp1=Projpara(name3,["nodata"]); - tmp=name2+"="+textformat(tmp1,5); - parse(tmp); - tmp=name3+"=Spacecurve(Assign('"+funstr+"'),'"+variable+"'"+opstr+")"; - GLIST=append(GLIST,tmp); - tmp=name2+"=Projpara("+name3+")"; - GLIST=append(GLIST,tmp); - ); - if(Noflg<2, - if(isstring(Ltype), - Ltype=GetLinestyle(text(Noflg)+Ltype,name2); - , - if(Noflg==1,Ltype=0); - ); - GCLIST=append(GCLIST,[name2,Ltype,opcindy]); - if(SUBSCR==1, // 15.02.11 - tmp=parse(name2); // 15.08.17 - if(length(tmp)>0, - Subgraph(name3,opcindy); - ); // 15.08.17 - ); - ); - Out; -); - -Partcrv3d(nm,pA,pB,PkLstr):=Partcrv3d(nm,pA,pB,PkLstr,[]); -Partcrv3d(nm,pA,pB,PkLstr,options):=( -//help:Partcrv3d("1",A,B,"sl3d1"); -//help:Partcrv3d("1",1.3,2.5,"sl3d1"); - regional(p1,p2,q1,q2,dt1,dts,dt3,tmp,tmp1,tmp2); - if(isreal(pA), - p1=pA; q1=pA; - , - if(islist(pA), - tmp=pA; - , - if(ispoint(pA),tmp=text(pA),tmp=pA); - tmp=parse(tmp+"3d"); - ); - p1=parapt(tmp); - q1=[p1_1,tmp_3]+[NE.x-SW.x,0]; - ); - if(isreal(pB), - p2=pB; q2=pB; - , - if(islist(pB), - tmp=pB; - , - if(ispoint(pB),tmp=text(pB),tmp=pB); - tmp=parse(tmp+"3d"); - ); - p2=parapt(tmp); - q2=[p2_1,tmp_3]+[NE.x-SW.x,0]; - ); - tmp=replace(PkLstr,"3d","2d"); - dt1=partcrv("",p1,p2,tmp,["nodata"]); - dts=partcrv("",q1,q2,"sub"+tmp,["nodata"]); - dt=apply(1..length(dt1), - Xyzcoord(dt1_#_1,dt1_#_2,dts_#_2)); - Spaceline("-part3d"+nm,dt,options); -); - -Joincrvs3d(nm,plotstrL):=Joincrvs3d(nm,plotstrL,[]);//16.10.06 -Joincrvs3d(nm,plotstrL,options):=( -//help:Joincrvs3d("1",["bz3da1","bz3da1"]); - regional(PtL,Eps,QdL,Flg,Ni,Qd,pP,pS,pQ,pR,rMN, - opcindy,tmp,tmp1,tmp2,str,name2,name3,Ltype,Noflg); - name2="join2d"+nm; - name3="join3d"+nm; - QdL=[]; - forall(plotstrL,str, - if(isstring(str), - tmp=parse(str); - , - tmp=str; - ); - QdL=append(QdL,tmp); - ); - Eps=10^(-4); - tmp=Divoptions(options); - Ltype=tmp_1; - Noflg=tmp_2; - opcindy=tmp_(length(tmp)); - tmp1=tmp_6; - if(length(tmp1)>0,Eps=tmp1_1); - Flg=0; - if(length(QdL)==0, - PtL=[]; - Flg=1; - ); - if(Flg==0, - PtL=QdL_1; - forall(2..length(QdL),Ni, - Qd=QdL_Ni; - if(length(Qd)>1, - pP=PtL_1; - pS=PtL_(length(PtL)); - pQ=Qd_1; - pR=Qd_(length(Qd)); - rMN=min([norm(pP-pQ),norm(pP-pR), - norm(pS-pQ),norm(pS-pR)]); - if(rMN==norm(pP-pR), - Qd=reverse(Qd); - , - if(rMN==norm(pS-pQ), - PtL=reverse(PtL); - , - if(rMN==norm(pS-pR), - PtL=reverse(PtL); - Qd=reverse(Qd); - ); - ); - ); - ); - if(rMN>Eps, - PtL=concat(PtL,Qd); - , - PtL=concat(PtL,Qd_(2..length(Qd))); - ); - ); - ); - if(Noflg<3, - println("generate Joincurves3d "+name3); - tmp=name3+"="+textformat(PtL,5); - parse(tmp); - tmp1=Projpara(name3,["nodata"]); - tmp=name2+"="+textformat(tmp1,5); - parse(tmp); - tmp=text(plotstrL); - tmp=substring(tmp,1,length(tmp)-1); - tmp=name3+"=Joincrvs("+tmp+")"; - GLIST=append(GLIST,tmp); - tmp=name2+"=Projpara("+name3+")"; - GLIST=append(GLIST,tmp); - ); - if(Noflg<2, - if(isstring(Ltype), - Ltype=GetLinestyle(text(Noflg)+Ltype,name2); - , - if(Noflg==1,Ltype=0); - ); - GCLIST=append(GCLIST,[name2,Ltype,opcindy]); - if(SUBSCR==1, // 15.02.11 - tmp=parse(name2); // 15.08.17 - if(length(tmp)>0, - Subgraph(name3,opcindy); - ); // 15.08.17 - ); - ); - PtL; -); - -Xyzax3data(nm,Xrange,Yrange,Zrange):= - Xyzax3data(nm,Xrange,Yrange,Zrange,[]); -Xyzax3data(nm,Xrange,Yrange,Zrange,options):=( -//help:Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]"); -//help:Xyzax3data(Options2=["a1","Osw"]); - regional(name2,name3,Out,tmp,tmp1,tmp2,eqL,reL,strL, - opstr,opcindy,Ltype,Noflg,Axname,Arrow,Origin); - name2="ax2d"+nm; - name3="ax3d"+nm; - tmp=Divoptions(options); - Ltype=tmp_1; - Noflg=tmp_2; - eqL=tmp_5; - reL=tmp_6; - strL=tmp_7; - opcindy=tmp_(length(tmp)); - Axname=1; - Arrow=0; // 16.08.14 - Origin=""; // 16.08.14 - if(length(reL)>0, - Axname=reL_1; - ); - forall(strL, // 16.08.14from - tmp1=Toupper(substring(#,0,1)); - if(tmp1=="A", - tmp=substring(#,1,length(#)); - if(length(tmp)>0, - Arrow=parse(tmp); - , - Arrow=1; - ); - ); - if(tmp1=="O", - tmp=indexof(#,","); - if(tmp>0, - Origin=substring(#,tmp,length(#)); - , - tmp=substring(#,1,length(#)); - if(length(tmp)>0, - Origin=tmp; - , - Origin="sw"; - ); - ); - ); - ); // 16.08.14until - tmp1=indexof(Xrange,"="); - tmp=parse(substring(Xrange,tmp1,length(Xrange))); - Px=[tmp_1,0,0]; Qx=[tmp_2,0,0]; - tmp1=indexof(Yrange,"="); - tmp=parse(substring(Yrange,tmp1,length(Yrange))); - Py=[0,tmp_1,0]; Qy=[0,tmp_2,0]; - tmp1=indexof(Zrange,"="); - tmp=parse(substring(Zrange,tmp1,length(Zrange))); - Pz=[0,0,tmp_1]; Qz=[0,0,tmp_2]; - Out=[[Px,Qx],[Py,Qy],[Pz,Qz]]; - if(Axname>0, - Xyzaxparaname(Xrange,Yrange,Zrange,[Axname]); - ); - if(Noflg<3, - println("generate axes "+name3); - tmp=name3+"="+textformat(Out,5); - parse(tmp); - tmp1=Projpara([name3],["nodata"]); - tmp=name2+"="+textformat(tmp1,5); - parse(tmp); - tmp=name3+"=Xyzax3data("+ - Dq+Xrange+Dq+","+Dq+Yrange+Dq+","+Dq+Zrange+Dq+")"; - GLIST=append(GLIST,tmp); - tmp=name2+"=Projpara("+name3+")"; - GLIST=append(GLIST,tmp); - ); - if(Noflg<2, - if(isstring(Ltype), - Ltype=GetLinestyle(text(Noflg)+Ltype,name2); - , - if(Noflg==1,Ltype=0); - ); - GCLIST=append(GCLIST,[name2,Ltype,opcindy]); - if(Noflg<1, // 16.08.14from - if(Arrow>0, - tmp1=Parapt(Px); tmp2=Parapt(Qx); - Arrowhead(tmp2,tmp2-tmp1,[Arrow]); - tmp1=Parapt(Py); tmp2=Parapt(Qy); - Arrowhead(tmp2,tmp2-tmp1,[Arrow]); - tmp1=Parapt(Pz); tmp2=Parapt(Qz); - Arrowhead(tmp2,tmp2-tmp1,[Arrow]); - ); - if(length(Origin)>0, - Letter([Parapt([0,0,0]),Origin,"O"]); - ); - ); // 16.08.14until - if(SUBSCR==1, // 15.02.11 - Subgraph(name3,opcindy); - ); - ); - Out; -); - -Xyzaxparaname(Xrange,Yrange,Zrange):= - Xyzaxparaname(Xrange,Yrange,Zrange,[]); -Xyzaxparaname(Xrange,Yrange,Zrange,options):=( - regional(tmp,tmp1,tmp2,Eps,Dr,Noflg,Xname,Yname,Zname, - px,qx,py,qy,pz,qz,ph,qh,rr,ch); - Eps=10.0^(-6); - Dr=0.19*1000/2.54/MilliIn; - Noflg=0; - forall(options, - if(isreal(#),Dr=Dr*#); - ); - tmp=indexof(Xrange,"="); - Xname=substring(Xrange,0,tmp-1); - tmp=parse(substring(Xrange,tmp,length(Xrange))); - px=[tmp_1,0,0]; qx=[tmp_2,0,0]; - tmp=indexof(Yrange,"="); - Yname=substring(Yrange,0,tmp-1); - tmp=parse(substring(Yrange,tmp,length(Yrange))); - py=[0,tmp_1,0]; qy=[0,tmp_2,0]; - tmp=indexof(Zrange,"="); - Zname=substring(Zrange,0,tmp-1); - tmp=parse(substring(Zrange,tmp,length(Zrange))); - pz=[0,0,tmp_1]; qz=[0,0,tmp_2]; - ph=Parapt(px); qh=Parapt(qx); rr=|ph-qh|; - if(rr>Eps, - ch=qh+Dr/rr*(qh-ph); - Expr(ch,"c",Xname); - ); - ph=Parapt(py); qh=Parapt(qy); rr=|ph-qh|; - if(rr>Eps, - ch=qh+Dr/rr*(qh-ph); - Expr(ch,"c",Yname); - ); - ph=Parapt(pz); qh=Parapt(qz); rr=|ph-qh|; - if(rr>Eps, - ch=qh+Dr/rr*(qh-ph); - Expr(ch,"c",Zname); - ); -); - -Datalist3d():=( -//help:Datalist3d(); - regional(out,tmp,tmp2,tmp3); - tmp=apply(GCLIST,#_1); - tmp=select(tmp,indexof(#,"2d")>0); - tmp2=select(tmp,indexof(#,"sub")==0); - tmp3=apply(tmp2,replace(#,"2d","3d")); - out=tmp3; -); - -Datalist2d():=( -//help:Datalist2d(); - regional(out,tmp,tmp2,tmp3); - tmp=apply(GCLIST,#_1); - tmp=select(tmp,indexof(#,"2d")>0); - tmp2=select(tmp,indexof(#,"sub")==0); -// tmp3=apply(tmp2,replace(#,"2d","3d")); - out=tmp2; -); - -Embed(nm,Pd2str,funstr,varstr):= - Embed(nm,Pd2str,funstr,varstr,[]); -Embed(nm,Pd2str,funstr,varstr,options):=( -//help:Embed("1",["gr1"],"A3d+x*(B3d-A3d)+y*(C3d-A3d)","[x,y]"); - regional(name2,name3,Pd2L,Pd2,tmp,tmp1,xstr,ystr, - Ltype,Noflg,opstr,opcindy,Out); - name2="em2d"+nm; - name3="em3d"+nm; - if(!islist(Pd2str),Pd2L=[Pd2str],Pd2L=Pd2str); // 15.03.06 - tmp1=[]; // 15.10.31 - forall(Pd2L, - if(isstring(#),tmp=parse(#),tmp=#); - if(MeasureDepth(tmp)==2, - tmp1=concat(tmp1,tmp); - ); - if(MeasureDepth(tmp)==1, - tmp1=append(tmp1,tmp); - ); - ); - Pd2L=tmp1; - tmp=substring(varstr,0,1); - if(tmp=="[" % tmp=="(", - tmp1=substring(varstr,1,length(varstr)-1); - , - tmp1=varstr; - ); - tmp=indexof(tmp1,","); - xstr=substring(tmp1,0,tmp-1); - ystr=substring(tmp1,tmp,length(tmp1)); - tmp=Divoptions(options); - Ltype=tmp_1; - Noflg=tmp_2; - opcindy=tmp_(length(tmp)); - Out=[]; - forall(Pd2L,Pd2, - tmp1=[]; - forall(Pd2, - tmp=Assign(funstr,xstr,"("+textformat(#_1,5)+")"); - tmp=Assign(tmp,ystr,"("+textformat(#_2,5)+")"); - tmp=parse(tmp); - tmp1=append(tmp1,tmp); - ); - Out=append(Out,tmp1); - ); - if(length(Out)==1, - Out=Out_1; - ); - if(Noflg<3, - println("generate Embed "+name3); - if(length(Out)>0, - tmp=name3+"="+textformat(Out,5); - parse(tmp); - tmp1=Projpara(name3,["nodata"]); - tmp=name2+"="+textformat(tmp1,5); - parse(tmp); - ); - if(!islist(Pd2str), - tmp=Pd2str; - , - tmp=text(Pd2str); - tmp="list("+substring(tmp,1,length(tmp)-1)+")"; - ); - tmp=name3+"=Embed("+tmp+",'"+funstr+"','"+varstr+"'"+")"; - GLIST=append(GLIST,tmp); - tmp=name2+"=Projpara("+name3+")"; - GLIST=append(GLIST,tmp); - ); - if(Noflg<2, - if(isstring(Ltype), - Ltype=GetLinestyle(text(Noflg)+Ltype,name2); - , - if(Noflg==1,Ltype=0); - ); - if(length(Out)>0, - GCLIST=append(GCLIST,[name2,Ltype,opcindy]); - if(SUBSCR==1, // 15.02.11 - Subgraph(name3,opcindy); - ); - ); - ); - Out; -); - -Rotatept3d(point,w1,w2):=Rotate3pt(point,w1,w2); -Rotatept3d(point,w1,w2,center):=Rotate3pt(point,w1,w2,center); -//help:Rotatept3d(pt3d,[0,0,1],pi/2); -//help:Rotatept3d(pt3d,[0,0,1],pi/2,[1,1,1]); -Rotate3pt(point,w1,w2):=Rotate3pt(point,w1,w2,[0,0,0]); -Rotate3pt(point,w1,w2,center):=( -//help:Rotate3pt(pt3d,[0,0,1],pi/2); -//help:Rotate3pt(pt3d,[0,0,1],pi/2,[1,1,1]); - regional(Eps,ct,st,v3,v1,v2,Ans,ns,PtL,num, - pt,tmp,tmp1,tmp2,Retflg,x,y,z,xx,yy,zz,flg); - Eps=10^(-4); - Retflg=0; - if(length(w2)==1, - ct=cos(w2); - st=sin(w2); - v3=1/|w1|*w1; - if(v3_1==0, - tmp=[1,0,0]; - , - tmp=[0,1,0]; - ); - w1=[tmp_2*v3_3-tmp_3*v3_2, - tmp_3*v3_1-tmp_1*v3_3, - tmp_1*v3_2-tmp_2*v3_1]; - v1=1/|w1|*w1; - v2=[v3_2*v1_3-v3_3*v1_2, - v3_3*v1_1-v3_1*v1_3, - v3_1*v1_2-v3_2*v1_1]; - , - tmp=[w1_2*w2_3-w1_3*w2_2, - w1_3*w2_1-w1_1*w2_3, - w1_1*w2_2-w1_2*w2_1]; - if(|tmp|<Eps, - Ans=point; - Retflg=1; - ); - if(Retflg==0, - v1=1/|w1|*w1; - ns=v1_1*w2_1+v1_2*w2_2+v1_3*w2_3; - tmp=w2-ns*v1; - v2=1/|tmp|*tmp; - tmp=[v1_2*v2_3-v1_3*v2_2, - v1_3*v2_1-v1_1*v2_3, - v1_1*v2_2-v1_2*v2_1]; - v3=1/|tmp|*tmp; - ct=ns/|w2|; - st=sqrt(1-ct^2); - ); - ); - if(Retflg==0, - if(|tmp|<Eps, - Ans=point; - Retflg=1; - ); - ); - if(Retflg==0, - if(MeasureDepth(point)>0, - PtL=point; - , - PtL=[point]; - ); - Ans=[]; - flg=0; - forall(1..length(PtL),num, - pt=PtL_num; - if(pt_1=="inf", - Ans=append(Ans,["inf"]); - flg=1; - ); - if(flg==0, - x=pt_1-center_1; y=pt_2-center_2; z=pt_3-center_3; - xx=((v1_1*ct+v2_1*st)*v1_1+ (-v1_1*st+v2_1*ct)*v2_1+v3_1^2)*x - +((v1_1*ct+v2_1*st)*v1_2+(-v1_1*st+v2_1*ct)*v2_2+v3_1*v3_2)*y - +((v1_1*ct+v2_1*st)*v1_3+(-v1_1*st+v2_1*ct)*v2_3+v3_1*v3_3)*z; - yy=((v1_2*ct+v2_2*st)*v1_1+(-v1_2*st+v2_2*ct)*v2_1+v3_1*v3_2)*x - +((v1_2*ct+v2_2*st)*v1_2+(-v1_2*st+v2_2*ct)*v2_2+v3_2^2)*y - +((v1_2*ct+v2_2*st)*v1_3+(-v1_2*st+v2_2*ct)*v2_3+v3_2*v3_3)*z; - zz=((v1_3*ct+v2_3*st)*v1_1+(-v1_3*st+v2_3*ct)*v2_1+v3_1*v3_3)*x - +((v1_3*ct+v2_3*st)*v1_2+(-v1_3*st+v2_3*ct)*v2_2+v3_2*v3_3)*y - +((v1_3*ct+v2_3*st)*v1_3+(-v1_3*st+v2_3*ct)*v2_3+v3_3^2)*z; - Ans=append(Ans,center+[xx,yy,zz]); - ); - ); - if(length(Ans)==1, - Ans=Ans_1; - ); - ); - Ans; -); - -Rotatedata3d(nm,P3data,w1,w2):=Rotate3data(nm,P3data,w1,w2); -Rotatedata3d(nm,P3data,w1,w2,options):= - Rotate3data(nm,P3data,w1,w2,options); -//help:Rotatedata3d("1",["sl3d1","sc3d2"],[0,0,1],pi/3); -Rotate3data(nm,P3data,w1,w2):=Rotate3data(nm,P3data,w1,w2,[]); -Rotate3data(nm,P3data,w1,w2,options):=( - regional(name3,name2,center,pdata,Pd3,Pd,Out,tmp,tmp1, - Ltype,Noflg,opcindy,opstr); - name3="rot3d"+nm; - name2="rot2d"+nm; - center=[0,0,0]; - tmp=Divoptions(options); - Ltype=tmp_1; - Noflg=tmp_2; - opstr=tmp_(length(tmp)-1); - opcindy=tmp_(length(tmp)); - tmp1=tmp_6; - if(length(tmp1)>0, - center=tmp1_1; - ); - if(islist(P3data) & isstring(P3data_1),Pd3=P3data,Pd3=[P3data]); - Out=[]; - forall(Pd3,Pd, - if(isstring(Pd),Pd=parse(Pd)); - if(MeasureDepth(Pd)==1,Pd=[Pd]); - Ans=[]; - forall(Pd, - tmp=Rotate3pt(#,w1,w2,center); - Ans=append(Ans,tmp); - ); - Out=append(Out,Ans); - ); - Out=Flattenlist(Out); - if(length(Out)==1,Out=Out_1); - if(Noflg<3, - println("generate Rotate3data "+name3); - tmp=name3+"="+textformat(Out,5); - parse(tmp); - tmp1=Projpara(name3,["nodata"]); - tmp=name2+"="+textformat(tmp1,5); - parse(tmp); - tmp=textformat(P3data,5); // 17.12.23 - tmp=RSform(tmp); // 17.12.23 -// tmp=replace(tmp,"[","list("); -// tmp=replace(tmp,"]",")"); - tmp=name3+"=Rotate3data("+tmp+"," - +textformat(w1,5)+","+textformat(w2,5)+opstr+")"; - GLIST=append(GLIST,tmp); - tmp=name2+"=Projpara("+name3+")"; - GLIST=append(GLIST,tmp); - ); - if(Noflg<2, - if(isstring(Ltype), - Ltype=GetLinestyle(text(Noflg)+Ltype,name2); - , - if(Noflg==1,Ltype=0); - ); - GCLIST=append(GCLIST,[name2,Ltype,opcindy]); - if(SUBSCR==1, // 15.02.11 - Subgraph(name3,opcindy); - ); - ); - Out; -); - -Translatept3d(point,w1):=Translate3pt(point,w1); -//help:Translatept3d(pt3d,[1,2,3]); -Translate3pt(point,w1):=( - regional(Eps,Ans,PtL,pt,num,xx,yy,zz,flg); - Eps=10^(-4); - if(MeasureDepth(point)>0, - PtL=point; - , - PtL=[point]; - ); - Ans=[]; - flg=0; - forall(1..length(PtL),num, - pt=PtL_num; - if(pt_1=="inf", - Ans=append(Ans,["inf"]); - flg=1; - ); - if(flg==0, - xx=pt_1+w1_1; yy=pt_2+w1_2; zz=pt_3+w1_3; - Ans=append(Ans,[xx,yy,zz]); - ); - ); - if(length(Ans)==1, - Ans=Ans_1; - ); - Ans; -); - -Translatedata3d(nm,P3data,w1):=Translate3data(nm,P3data,w1); -Translatedata3d(nm,P3data,w1,options):= - Translate3data(nm,P3data,w1,options); -//help:Translatedata3d("1",["sl3d1"],[1,2,3]); -Translate3data(nm,P3data,w1):=Translate3data(nm,P3data,w1,[]); -Translate3data(nm,P3data,w1,options):=( - regional(name3,name2,pdata,Pd3,Pd,Out,tmp,tmp1, - Ltype,Noflg,opcindy); - name3="tra3d"+nm; - name2="tra2d"+nm; - tmp=Divoptions(options); - Ltype=tmp_1; - Noflg=tmp_2; - opcindy=tmp_(length(tmp)); - if(islist(P3data) & isstring(P3data_1),Pd3=P3data,Pd3=[P3data]); - Out=[]; - forall(Pd3,Pd, - if(isstring(Pd),Pd=parse(Pd)); - if(MeasureDepth(Pd)==1,Pd=[Pd]); - Ans=[]; - forall(Pd, - tmp=Translate3pt(#,w1); - Ans=append(Ans,tmp); - ); - Out=append(Out,Ans); - ); - Out=Flattenlist(Out); - if(length(Out)==1,Out=Out_1); - if(Noflg<3, - println("generate Translate3data "+name3); - tmp=name3+"="+textformat(Out,5); - parse(tmp); - tmp1=Projpara(name3,["nodata"]); - tmp=name2+"="+textformat(tmp1,5); - parse(tmp); - tmp=textformat(P3data,5); // 17.12.23 - tmp=RSform(tmp); // 17.12.23 -// tmp=text(P3data); -// tmp=replace(tmp,"[","list("); -// tmp=replace(tmp,"]",")"); - tmp=name3+"=Translate3data("+tmp+","+textformat(w1,5)+")"; - GLIST=append(GLIST,tmp); - tmp=name2+"=Projpara("+name3+")"; - GLIST=append(GLIST,tmp); - ); - if(Noflg<2, - if(isstring(Ltype), - Ltype=GetLinestyle(text(Noflg)+Ltype,name2); - , - if(Noflg==1,Ltype=0); - ); - GCLIST=append(GCLIST,[name2,Ltype,opcindy]); - if(SUBSCR==1, // 15.02.11 - Subgraph(name3,opcindy); - ); - ); - Out; -); - -Reflectpoint3d(point,vecL):=Reflect3point(point,vecL); -Reflectpt3d(point,vecL):=Reflect3pt(point,vecL); -//help:Reflectpoint3d(pt3d,[v1,v2,v3]); -Reflect3point(point,vecL):=Reflect3pt(point,vecL); -Reflect3pt(point,vecL):=( - regional(ans,v1,v2,v3,tmp,tmp1); - if(length(vecL)==1, - v1=vecL_1; - ans=2*v1-point; - ); - if(length(vecL)==2, - v1=vecL_1; - v2=vecL_2; - v3=(v2-v1)/|v2-v1|; - tmp=v1+Dotprod(point-v1,v3)*v3; - ans=2*tmp-point; - ); - if(length(vecL)==3, - v1=vecL_1; - v2=vecL_2; - v3=vecL_3; - tmp=Crossprod(v2-v1,v3-v1); - tmp1=point-Dotprod(tmp,point-v1)/|tmp|^2*tmp; - ans=2*tmp1-point; - ); - ans; -); - -Xyzcoord(X,Y,z):=( -//help:Xyzcoord(A.x,A.y,Az.y); - regional(Eps,x3d,y3d,z3d); - x3d=(-X*sin(PHI)*cos(THETA)-Y*cos(PHI)+z*cos(PHI)*sin(THETA))/cos(THETA); - y3d=(X*cos(PHI)*cos(THETA)-Y*sin(PHI)+z*sin(PHI)*sin(THETA))/cos(THETA); - z3d=z; - [x3d,y3d,z3d]; -); - -PutonCurve3d(name,pdstr):=( -//help:PutonCurve3d("T","sc3d1"); - regional(pt,pd2str,tmp,tmp1,tmp2); - pd2str=replace(pdstr,"3d","2d"); - PutonCurve(name,pd2str); - pt=parse(name+".xy"); - tmp=Nearestpt(pt,pd2str); // 15.03.13 - tmp1=ParamonCurve(tmp_1,tmp_2,pd2str); - tmp="sub"+pd2str; - tmp2=PointonCurve(tmp1,tmp); - pt=append(pt,tmp2_2); - pt=Xyzcoord(pt_1,pt_2,pt_3); // 15.03.13 - tmp=name+"z.xy="+textformat(tmp2,5); - parse(tmp); - VLIST=select(VLIST,#_1!=name+"3d"); - Defvar(name+"3d",pt); -); - -Mkpointlist():=Mkpointlist([]); //16.11.12 -Mkpointlist(options):=( //16.11.12 - regional(Eps,pos,ptL,plist,ilist,plistrest, - inforest,free,pt,pt3,ptz,par,vlistpre, - tmp,tmp1,tmp2,tmp3,tmp4,p1,p2,flg); - Eps=10^(-4); - tmp=Finddef(NE); - free=tmp_1; - pos=[NE.x+1,NE.y]; - tmp=remove(allpoints(),[NE,SW,TH,FI]); - tmp=remove(tmp,options); //16.11.12 - plist=select(tmp, - substring(text(#),length(text(#))-1,length(text(#)))!="z" - ); - if(SUBSCR==0,plist=[]); - ptL=[]; - plistrest=[]; - inforest=[]; - forall(plist,pt, - inspect(pt,"ptsize",3); - inspect(pt,"color",2); - inspect(pt,"textsize",TSIZE); - ptz=text(pt)+"z"; - tmp=Finddef(pt); - if(indexof(tmp_1,free)>0, // free point - tmp=select(VLIST,#_1==text(pt)+"3d"); - if(length(tmp)==0, - tmp=pt.x+NE.x-SW.x; - Putpoint(ptz,[tmp,0],[tmp,parse(ptz+".y")]); - pt3=Xyzcoord(pt.x,pt.y,parse(text(ptz)+".y")); - Defvar(text(pt)+"3d",pt3); - Defvar(text(pt)+"fix",0); - vlistpre=VLIST; //16.08.20 - ); - flg=0; - if(isselected(pt), - if(parse(text(pt)+"fix")!=1, // 15.03.01 - tmp=pt.x+NE.x-SW.x; - Putpoint(ptz,[tmp,0],[tmp,parse(ptz+".y")]); - pt3=Xyzcoord(pt.x,pt.y,parse(text(ptz)+".y")); - VLIST=select(VLIST,#_1!=text(pt)+"3d"); - Defvar(text(pt)+"3d",pt3); - vlistpre=VLIST; //16.08.20 - flg=1; - ); - ); - inspect(parse(ptz),"ptsize",3); - inspect(parse(ptz),"color",3); - inspect(parse(ptz),"textsize",TSIZEZ); - if(isselected(parse(ptz)), - if(parse(ptz+"fix")!=1, // 15.03.01 - tmp=select(vlistpre,#_1==text(pt)+"3d"); //16.08.20 - pt3=tmp_1_2; - pt3_3=parse(ptz+".y"); - pt.xy=Parapt(pt3); - tmp=ptz+".x=pt.x+NE.x-SW.x"; - parse(tmp); - VLIST=select(VLIST,#_1!=text(pt)+"3d"); - Defvar(text(pt)+"3d",pt3); - flg=2; - ); - ); - if(flg==0, - tmp=select(VLIST,#_1==text(pt)+"3d"); - if(length(tmp)>0, //17.10.07 - pt3=tmp_1_2; - pt.xy=Parapt(pt3); - tmp=ptz+".x=pt.x+NE.x-SW.x"; - parse(tmp); - ); //17.10.07 - ); - if(isselected(pt) % isselected(parse(ptz)), - drawtext(pos,text(pt3)); - ); - if(!contains(["p","q"],text(pt)), - ptL=append(ptL,pt); - ); - , - tmp=Findgeoinfo(pt); - tmp1=[parse(tmp_1),parse(tmp_2),parse(tmp_3)]; - plistrest=append(plistrest,pt); - inforest=append(inforest,tmp); - ); - ); - if(length(plistrest)>0, - tmp=Sortpointlist([plistrest,inforest]); - plist=tmp_1; - ilist=tmp_2; - forall(1..length(plist), - pt=plist_#; - ptz=text(pt)+"z"; - tmp=ilist_#; - p1=parse(tmp_3); - p2=p1+parse(tmp_2)-parse(tmp_1); - tmp1=p2-p1; - tmp2=pt-p1; - if(abs(tmp1_1)>abs(tmp1_2), - par=tmp2_1/tmp1_1; - , - par=tmp2_2/tmp1_2; - ); - tmp=ilist_#; - tmp1=parse(tmp_1+"3d"); - tmp2=parse(tmp_2+"3d"); - tmp3=parse(tmp_3+"3d"); - tmp1=(1-par)*tmp3+par*(tmp3+tmp2-tmp1); - Putpoint(ptz,[pt.x+NE.x-SW.x,tmp1_3]); - inspect(parse(ptz),"ptsize",3); - inspect(parse(ptz),"color",3); - inspect(parse(ptz),"textsize",TSIZEZ); - pt3=Xyzcoord(pt.x,pt.y,parse(text(ptz)+".y")); - VLIST=select(VLIST,#_1!=tmp1+"3d"); - Defvar(text(pt)+"3d",pt3); - vlistpre=VLIST; //16.08.20 - if(isselected(pt) % isselected(parse(ptz)), - drawtext(pos,text(pt3)); - ); - if(!contains(["p","q"],text(pt)), - ptL=append(ptL,pt); - ); - ); - ); - ptL; -); - -Mkseg3d():=Mkseg3d([]); -Mkseg3d(options):=( - regional(seg,nmseg,def,ptA,ptB,segL,opstr,opcindy, - name,strg,Ltype,Noflg,tht,tmp,tmp1,tmp2,tmp3); - name="geoseg3d"; - strg=name+"=list("; - tmp=Divoptions(options); - Ltype=tmp_1; - Noflg=tmp_2; - opcindy=tmp_(length(tmp)); - segL=[]; - forall(allsegments(),seg, - inspect(seg,"labeled",false); - tmp=Finddef(seg); - def=tmp_1; - ptA=tmp_2; - ptB=tmp_3; - if(ispoint(parse(ptA)) & ispoint(parse(ptB)), - tmp1=select(VLIST,indexof(#_1,ptA+"3d")>0); - tmp2=select(VLIST,indexof(#_1,ptB+"3d")>0); - if(length(tmp1)>0 & length(tmp2)>0, - tmp1="["+ptA+"3d,"+ptB+"3d]"; - nmseg=ptA+ptB; -// Spaceline(nmseg,parse(tmp1),append(options,"Msg=nodisp")); //15.06.15 - Spaceline("-"+nmseg+"3d",[ptA+"3d",ptB+"3d"], // 16.04.07 - append(options,"Msg=nodisp")); //15.06.15 - segL=append(segL,nmseg+"3d");// 16.04.07 - strg=strg+nmseg+"3d,";// 16.04.07 - ); - ); - ); - println("generate totally "+name); - if(length(segL)>0, // 15.03.06 - strg=substring(strg,0,length(strg)-1)+")"; - if(Noflg<3, - GLIST=append(GLIST,strg); - ); - tmp1=apply(segL,Dq+#+Dq); //15.03.02 - tmp=name+"="+text(tmp1); - parse(tmp); - ); - segL; -); - -Ptseg3data():=Ptseg3data([]); -//help:Ptseg3data(); -//help:Ptseg3data([A,B]); -Ptseg3data(options):=( - regional(pt,pt3,plist,tmp,tmp1,tmp2); - if(isselected(TH) % isselected(FI), - tmp=remove(allpoints(),[NE,SW,TH,FI]); - tmp=remove(tmp,options); //16.11.12 - tmp=apply(tmp,text(#)); - plist=select(tmp,substring(#,length(#)-1,length(#))!="z"); - forall(plist,pt, - tmp1=text(pt); - tmp=select(VLIST,#_1==tmp1+"3d"); //17.10.07 - if(length(tmp)>0, - pt3=tmp_1_2; - tmp=tmp1+".xy=Parapt("+pt3+")_[1,2];"; - parse(tmp); - if(SUBSCR==1, - tmp=tmp1+"z"+".x=NE.x-SW.x+"+tmp1+".x"; - parse(tmp); - ); - ); - ); - , - Mkpointlist(options); // 16.12.18 - ); - forall(alllines(), - #.color=[0.5,0.5,1]; - ); - SEG3dlist=Mkseg3d(options); - SEG3dlist; -); - -Putonseg3d(name,ptL):=Putonseg3d(name,ptL_1,ptL_2,[]); -Putonseg3d(name,Arg1,Arg2):=( - if(islist(Arg1), - Putonseg3d(name,Arg1_1,Arg1_2,Arg2); - , - Putonseg3d(name,Arg1,Arg2,[]); - ); -); -Putonseg3d(name,pt1,pt2,options):=( -//help:Putonseg3d("C",[A,B]); -//help:Putonseg3d("C",A,B); - regional(par,pn1,pn2,tmp,tmp1,tmp2,tmp3); - par=0.5; - tmp=divoptions(options); - if(length(tmp_6)>0, - par=tmp_6_1; - ); - Putonseg(name,pt1,pt2,[par]); - inspect(parse(name),"ptsize",3); - inspect(parse(name),"color",2); - inspect(parse(name),"textsize",TSIZEZ); - Putpoint(name+"z",[parse(name+".x"),0]); - inspect(parse(name+"z"),"ptsize",3); - inspect(parse(name+"z"),"color",3); - inspect(parse(name+"z"),"textsize",TSIZEZ); - pn1=text(pt1); - pn2=text(pt2); - tmp1=replace("PTCz.y=PTAz.y+|PTC-PTA|/|PTB-PTA|*(PTBz.y-PTAz.y)","PTC",name); - tmp1=replace(tmp1,"PTA",pn1); - tmp1=replace(tmp1,"PTB",pn2); - tmp2=replace("PTCz.x=PTAz.x+|PTC-PTA|/|PTB-PTA|*(PTBz.x-PTAz.x)","PTC",name); - tmp2=replace(tmp2,"PTA",pn1); - tmp2=replace(tmp2,"PTB",pn2); - parse(tmp2); - parse(tmp1); - tmp1=parse(name+".x"); - tmp2=parse(name+".y"); - tmp3=parse(name+"z.y"); - tmp=Xyzcoord(tmp1,tmp2,tmp3); - Defvar(name+"3d",tmp); -); - -Putpoint3d(ptslist):=Putpoint3d(ptslist,"",0); -Putpoint3d(Arg1,Arg2):=( // 16.03.02 from - if(islist(Arg1), - Putpoint3d(Arg1,Arg2,0); - , - Putpoint3d(Arg1,Arg2,"fix"); - ); -); -Putpoint3d(Arg1,Arg2,Arg3):=( -//help:Putpoint3d(["A",[2,1,3]]); -//help:Putpoint3d(["A",[2,1,3]],"fix"); -//help:Putpoint3d("A",[2,1,3]); -//help:Putpoint3d(["A",[2,1,3]],["fix"]); - regional(nn,kk,pt,pt3,ptslist,fixstr,tmp,tmp1,tmp2,tmp3); //16.08.19 - if(isstring(Arg1), - ptslist=[Arg1,Arg2]; - fixstr=Arg3; - , - ptslist=Arg1; - fixstr=Arg2; - ); - if(islist(fixstr),fixstr=fixstr_1);// 16.03.02 until - nn=length(ptslist)/2; - forall(1..nn,kk, // 16.08.19from - tmp1=ptslist_(2*kk-1); - pt3=ptslist_(2*kk); // 16.08.19until - VLIST=select(VLIST,#_1!=tmp1+"3d"); - tmp2=parse(tmp1); - if(ispoint(tmp2), // 16.05.26from - if(islist(fixstr),tmp=fixstr_1,tmp=fixstr); - tmp=Toupper(tmp); - if(tmp!="FIX", - tmp=Xyzcoord(tmp2.x,tmp2.y,parse(tmp1+"z").y); - , - tmp=pt3; - ); - Defvar(tmp1+"3d",tmp); - , - Defvar(tmp1+"3d",pt3); - ); // 16.05.26until - Defvar(tmp1+"fix",0); - pt=Parapt(pt3); - Putpoint(tmp1,pt,parse(tmp1+".xy")); - inspect(parse(tmp1),"ptsize",3); - inspect(parse(tmp1),"color",2); - inspect(parse(tmp1),"textsize",TSIZE); - if(SUBSCR==1, - tmp2=tmp1+"z"; - tmp=[pt.x+NE.x-SW.x,pt3_3]; - tmp1="[NE.x-SW.x+"+tmp1+".x,"+tmp2+"y]"; - Putpoint(tmp2,tmp,parse(tmp1)); - inspect(parse(tmp2),"ptsize",3); - inspect(parse(tmp2),"color",3); - inspect(parse(tmp2),"textsize",TSIZEZ); - ); - ); - if(islist(fixstr),tmp=fixstr_1,tmp=fixstr); - if(tmp=="fix" % tmp=="Fix", - Fixpoint3d(ptslist); - ); -); - -Fixpoint3d(ptlist):=( -// help:Fixpoint3d(["O",[0,0,0],"X",[1,0,0]]); - regional(name,pt3,pt2,tmp,tmp1,tmp2); - forall(1..(length(ptlist)/2), - name=ptlist_(2*#-1); - Defvar(name+"fix",1); - pt3=ptlist_(2*#); - pt2=Parapt(pt3); - tmp1=textformat(pt2_1,5); - tmp2=textformat(pt2_2,5); - tmp=name+".xy=["+tmp1+","+tmp2+"]"; - parse(tmp); - tmp1=name+".x+NE.x-SW.x"; - tmp2=textformat(pt3_3,5); - tmp=name+"z.xy=["+tmp1+","+tmp2+"];"; - parse(tmp); - ); -); - -Perppt(name,ptstr,pLstr):=Putperp(name,ptstr,pLstr,"draw"); -Perppt(name,ptstr,pLstr,option):=Putperp(name,ptstr,pLstr,option); -Putperp(name,ptstr,pLstr):=Putperp(name,ptstr,pLstr,"put"); -Putperp(name,ptstr,pLstr,option):=( -//help:Perppt("N","O","A-B-C"); -//help:Perppt("N","O","A-B-C","put"); -//help:Perppt("N","O","A-B","none"); - regional(out,Eps,N3d,sgstr,pP,pA,pB,pC,tmp,tmp1,flgpL); - Eps=10^(-4); - pP=parse(ptstr+"3d"); - tmp=indexof(pLstr,"-"); - pA=parse(substring(pLstr,0,tmp-1)+"3d"); - tmp1=substring(pLstr,tmp,length(pLstr)); - tmp=indexof(tmp1,"-"); - if(tmp>0, - pB=parse(substring(tmp1,0,tmp-1)+"3d"); - pC=parse(substring(tmp1,tmp,length(tmp1))+"3d"); - flgpL=1; - , - pB=parse(tmp1+"3d"); - flgpL=0; - ); - if(flgpL==1, - tmp=Crossprod(pB-pA,pC-pA); - if(abs(tmp)<Eps, - err("not a plane"); - , - tmp=tmp/|tmp|; - N3d=pP+tmp; - Defvar("tmp3d",N3d); // temporary - sgstr=ptstr+"-tmp"; - tmp=IntersectsgpL(name,sgstr,pLstr,"none"); - VLIST=select(VLIST,#_1!="tmp3d"); - out=tmp_1; - Defvar(name+"3d",tmp_1); - ); - , - if(|pB-pA|<Eps, - err("on the line"); - , - tmp1=(pB-pA)/|pB-pA|; - tmp=Dotprod(pP-pA,tmp1); - out=pA+tmp*tmp1; - Defvar(name+"3d",out); - ); - ); - if(islist(option),tmp=option_1,tmp=option); - tmp=substring(tmp,0,1); - if(tmp=="P" % tmp=="p", - Putpoint3d([name,out]); - Fixpoint3d([name,out]); - ); - if(tmp=="D" % tmp=="d", - Drawpoint3d(out); - ); - out; -); - -Perpplane(name,ptstr,nvec):= - Perpplane(name,ptstr,nvec,"draw"); -Perpplane(name,ptstr,nstr,option):=( -//help:Perpplane("A-B","P",[1,3,2]); -//help:Perpplane("A-B","P",[0,0,1,0]); - regional(Eps,nvec,sgstr,pP,v1,v2,v3, - th,ph,pA,pB,tmp,tmp1,tmp2); - Eps=10^(-4); - if(isstring(nstr),nvec=parse(nstr+"3d"),nvec=nstr); - pP=parse(ptstr+"3d"); - v3=nvec/|nvec|; - th=THETA; ph=PHI; - tmp=findangle(v3); - THETA=tmp_1; PHI=tmp_2; - v1=Cancoordpara([1,0,0]); - v2=Cancoordpara([0,1,0]); - THETA=th; PHI=ph; - tmp=indexof(pLstr,"-"); - pA=pP+v1; - pB=pP+v2; - if(islist(option),tmp=option_1,tmp=option); - tmp=Toupper(substring(tmp,0,1)); // 16.06.19 - if(tmp=="P", - tmp=indexof(name,"-"); - tmp1=substring(name,0,tmp-1); - tmp2=substring(name,tmp,length(name)); - Putpoint3d([tmp1,pA,tmp2,pB],["fix"]); - ); - if(tmp=="D", - Drawpoint3d(pA); - Drawpoint3d(pB); - ); - [pA,pB]; -); - -Drawpoint3d(pt3):=( -//help:Drawpoint3d(pt3d); - regional(ptL,tmp,tmp1,tmp2); - if(MeasureDepth(pt3)==0,ptL=[pt3],ptL=pt3); - forall(ptL, - tmp=parapt(#); - draw(tmp_(1..2)); - if(SUBSCR==1, - draw([tmp_1+NE.x-SW.x, #_3]); - ); - ); -); - -Putaxes3d(size):=( -//help:Putaxes3d(5); -//help:Putaxes3d([1,2,3]); - regional(sL); - if(islist(size),sL=size,sL=[size,size,size]); - Putpoint3d(["O",[0,0,0]],"fix"); //17.06.02from - Putpoint3d(["X",[sL_1,0,0]],"fix"); - Putpoint3d(["Y",[0,sL_2,0]],"fix"); - Putpoint3d(["Z",[0,0,sL_3]],"fix"); -// Fixpoint3d(["O",[0,0,0]]); -// Fixpoint3d(["X",[sL_1,0,0],"Y",[0,sL_2,0],"Z",[0,0,sL_3]]);//17.06.02funtil -); - -IntersectsgpL(name,sgstr,pLstr):= - IntersectsgpL(name,sgstr,pLstr,"draw"); -IntersectsgpL(name,sgstr,pLstr,option):=( -//help:IntersectsgpL("R","P-Q","A-B-C"); -//help:IntersectsgpL("R","P-Q","A-B-C","put"); -//// help:IntersectsgpL("","P-Q","A-B-C","none"); -//help:IntersectsgpL("",[p1,p2],[p3,p4,p5],"draw"); - regional(opstr,out,pP,pQ,pA,pB,pC,pH,pK,pR,tseg,tt,ss,Eps,flg, - nvec,tmp,tmp1,tmp2,tmp3,tmp4); - if(islist(option),opstr=option_1,opstr=option); - Eps=10^(-4); - flg=0; - if(!isstring(sgstr), // 15.05.29 - pP=sgstr_1; - pQ=sgstr_2; - , - tmp=indexof(sgstr,"-"); - if(tmp>0, // 15.05.28 - pP=parse(substring(sgstr,0,tmp-1)+"3d"); - pQ=parse(substring(sgstr,tmp,length(sgstr))+"3d"); - , - tmp1=parse(sgstr); - pP=tmp1_1; - pQ=tmp1_2; - ); - ); - if(!isstring(pLstr), // 16.02.02 - pA=pLstr_1; - pB=pLstr_2; - pC=pLstr_3; - , - tmp=indexof(pLstr,"-"); - pA=parse(substring(pLstr,0,tmp-1)+"3d"); - tmp1=substring(pLstr,tmp,length(pLstr)); - tmp=indexof(tmp1,"-"); - pB=parse(substring(tmp1,0,tmp-1)+"3d"); - pC=parse(substring(tmp1,tmp,length(tmp1))+"3d"); - ); - nvec=Crossprod(pB-pA,pC-pA); - if(abs(Dotprod(nvec,pQ-pP))>Eps, - pH=(Reflect3point(pP,[pA,pB,pC])+pP)/2; - pK=(Reflect3point(pQ,[pA,pB,pC])+pQ)/2; - tmp1=pP-pH; - tmp2=tmp1+pK-pQ; - tmp=select(tmp2,abs(#)==max(apply(tmp2,abs(#)))); - tmp=select(1..3,tmp2_#==tmp_1); - tmp=tmp_1; - tseg=tmp1_tmp/tmp2_tmp; - pR=(1-tseg)*pH+tseg*pK; - tmp=substring(opstr,0,1); - if(Toupper(tmp)=="P", - Putpoint3d([name,pR]); - Fixpoint3d([name,pR]); - ); - if(Toupper(tmp)=="D", - Drawpoint3d(pR); - ); - tmp=Dotprod(pB-pA,pC-pA); - tmp1=Dotprod(pB-pA,pB-pA); - tmp2=Dotprod(pC-pA,pC-pA); - tmp3=Dotprod(pR-pA,pB-pA); - tmp4=Dotprod(pR-pA,pC-pA); - ss=-(tmp*tmp4-tmp3*tmp2)/(tmp1*tmp2-tmp^2); - tt=(tmp1*tmp4-tmp*tmp3)/(tmp1*tmp2-tmp^2); - out=[pR,tseg,ss,tt]; - , - if(Toupper(substring(opstr,0,1))!="N", - println(" "+sgstr+","+pLstr+" are parallel"); - ); - out=[]; - ); - out; -); - -Bezier3d(nm,ptctrlist):=Bezier3(nm,ptctrlist); -Bezier3d(nm,Ag1,Ag2):=Bezier3(nm,Ag1,Ag2); -Bezier3d(nm,ptlistorg,ctrlistorg,options):= - Bezier3(nm,ptlistorg,ctrlistorg,options); -//help:Bezier3d("1",["A","B","C"],["D","E","F","G"]); -Bezier3(nm,ptctrlist):=Bezier3(nm,ptctrlist_1,ptctrlist_2,[]); -Bezier3(nm,Ag1,Ag2):=( - if(MeasureDepth(Ag1)==0, - Bezier3(nm,Ag1,Ag2,[]); - , - if(MeasureDepth(Ag1)>1, - Bezier3(nm,Ag1_1,Ag1_2,Ag2); - , - if(isstring(Ag_1_1), - Bezier3(nm,Ag1,Ag2,[]); - , - Bezier3(nm,Ag1_1,Ag1_2,Ag2); - ); - ); - ); -); -Bezier3(nm,ptlistorg,ctrlistorg,options):=( //17.10.08 greatly changed - regional(name,name3,name2,tmp,tmp1,tmp2, - Ltype,Noflg,opstr,eqL,Num,ii,knt,ctr,out); - name="bz"+nm; - name3="bz3d"+nm; - name2="bz2d"+nm; - tmp=Divoptions(options); - Ltype=tmp_1; - Noflg=tmp_2; - eqL=tmp_5; - opcindy=tmp_(length(tmp)); - Num=20; - forall(eqL, - tmp=indexof(#,"="); - tmp1=Toupper(substring(#,0,1)); - tmp2=substring(#,tmp,length(#)); - if(tmp1=="N", - Num=parse(tmp2); - ); - ); - ptlist=ptlistorg; - if(isstring(ptlistorg_1),ptlist=apply(ptlistorg,parse(#+"3d"))); - ctrlist=ctrlistorg; - if(isstring(ctrlistorg_1),ctrlist=apply(ctrlistorg,parse(#+"3d"))); - out=[]; - forall(1..(length(ptlist)-1),ii, - knt=[ptlist_ii,ptlist_(ii+1)]; - ctr=[ctrlist_(2*ii-1),ctrlist_(2*ii)]; - tmp="Bezierpt(T,ptlist,ctrlist)";//17.01.04 - tmp=Assign(tmp,"ptlist",knt); - tmp=Assign(tmp,"ctrlist",ctr); - Spacecurve(name+text(ii),tmp,"T=[0,1]",append(eqL,"nodisp")); - GLIST=GLIST_(1..(length(GLIST)-2)); - out=append(out,name3+text(ii)); - ); - tmp1=[]; - forall(1..length(out), - tmp=parse(out_#); - if(#==1,tmp1=tmp,tmp1=concat(tmp1,tmp_(2..length(tmp)))); - ); - if(Noflg<3, - println("generate Beziercurve "+name3); - tmp=name3+"="+tmp1; - parse(tmp); - tmp1=Projpara(name3,["nodata"]); - tmp=name2+"="+textformat(tmp1,5); - parse(tmp); - ptlist=apply(ptlistorg,#+"3d"); - ptlist=RSform(text(ptlist),1); - ctrlist=[]; - forall(1..(length(ctrlistorg)/2), - tmp=[ctrlistorg_(2*#-1),ctrlistorg_(2*#)]; - tmp=apply(tmp,#+"3d"); - ctrlist=append(ctrlist,tmp); - ); - ctrlist=RSform(text(ctrlist),0); - tmp=name3+"=Bezier("+ptlist+","+ctrlist+","+Dq+"Num="+text(Num)+Dq+")"; - GLIST=append(GLIST,tmp); - tmp=name2+"=Projpara("+name3+")"; - GLIST=append(GLIST,tmp); - ); - if(Noflg<2, - if(isstring(Ltype), - Ltype=GetLinestyle(text(Noflg)+Ltype,name2); - , - if(Noflg==1,Ltype=0); - ); - GCLIST=append(GCLIST,[name2,Ltype,opcindy]); - if(SUBSCR==1, // 15.02.11 - Subgraph(name3,opcindy); - ); - ); - out; -); - -Putbezier3data(name,pt3Lorg):=Putbezier3data(name,pt3Lorg,[]); -Putbezier3data(name,pt3Lorg,options):=( // 17.10.08 greatly changed - regional(pt3L,psize,Deg,nn,numstr, - tmp,tmp1,tmp2,tmp3,pts,ctrpts); - tmp=Divoptions(options); - Deg=3; - tmp1=tmp_5; - forall(tmp1, - if(substring(#,0,1)=="D", - tmp=indexof(#,"="); - Deg=parse(substring(#,tmp,length(#))); - ); - ); - pt3L=pt3Lorg; - if(isstring(pt3L_1),pt3L=apply(pt3L,parse(#+"3d"))); - ctrpts=[]; - forall(2..length(pt3L),nn, // 16.08.19from - numstr=text(nn-1); // 16.08.19 - if(Deg==3, - tmp1=name+numstr+"p"; - tmp2=(2*pt3L_(nn-1)+pt3L_(nn))/3; - VLIST=select(VLIST,#_1!=tmp1+"3d"); // 16.08.19from - Putpoint3d([tmp1,tmp2]); - ctrpts=append(ctrpts,tmp1); - tmp1=name+numstr+"q"; - tmp3=(pt3L_(nn-1)+2*pt3L_nn)/3; - VLIST=select(VLIST,#_1!=tmp1+"3d"); - Putpoint3d([tmp1,tmp3]); - ctrpts=append(ctrpts,tmp1); - , - tmp1=name+numstr+"p"; - tmp2=(pt3L_(nn-1)+pt3L_nn)/2; - VLIST=select(VLIST,#_1!=tmp1+"3d"); // 16.08.19until - Putpoint3d([tmp1,tmp2]); - ctrpts=append(ctrpts,tmp1); - ); - ); - ctrpts; -); - -Mkbezierptcrv3d(ptdata):=Mkbezierptcrv3(ptdata); -Mkbezierptcrv3d(ptdata,options):=Mkbezierptcrv3(ptdata,options); -//help:Mkbezierptcrv3d(["A","B","C","D"]); -Mkbezierptcrv3(ptdata):=Mkbezierptcrv3(ptdata,[]); -Mkbezierptcrv3(ptdata,options):=( //17.10.08 greatly changed - regional(Eps,name,bz,pt,p1,p2,p13d,p23d,pt3, - Out,tt,pos,tmp,tmp1,tmp2); - Eps=10^(-4); - pos=[NE.x+1,NE.y]; - Out=[]; - tmp=floor((BezierNumber3-1)/26);// 15.02.23 from - if(tmp==0,tmp="",tmp=text(tmp)); - tmp2=mod(BezierNumber3,26); - if(tmp2==0,tmp2=26); - name=unicode(text(96+tmp2),base->10)+tmp; - tmp2=Putbezier3data(name,ptdata,options); - Bezier3(name,ptdata,tmp2,options); - Out=append(Out,tmp2); - BezierNumber3=BezierNumber3+1; - Out; -); - -/////////////////////////////////////////// - -Readobj(filename):=Readobj(filename,[]); -Readobj(filename,options):=( -//help:Readobj("file.obj",["size=-3"]); - regional(eqL,size,vL,fnL,tmp,tmp1,tmp2); - size=1; - tmp=Divoptions(options); - eqL=tmp_5; - forall(eqL, - if(Toupper(substring(#,0,1))=="S", - tmp=indexof(#,"="); - size=parse(substring(#,tmp,length(#))); - ); - ); - tmp=load(filename); - tmp=tokenize(tmp,"v"); - tmp1=tmp_(2..(length(tmp)-1)); - tmp2=tmp_(length(tmp)); - tmp2=tokenize(tmp2,"f"); - tmp1=append(tmp1,tmp2_1); - tmp1=apply(tmp1,Removespace(#)); - tmp1=apply(tmp1,replace(#," "," ")); - tmp1=apply(tmp1,"["+replace(#," ",",")+"]"); - vL=apply(tmp1,size*parse(#)); - tmp2=tmp2_(2..(length(tmp2))); - tmp2=apply(tmp2,Removespace(#)); - tmp2=apply(tmp2,replace(#," "," ")); - tmp2=apply(tmp2,"["+replace(#," ",",")+"]"); - fnL=apply(tmp2,parse(#)); - [vL,fnL]; -); - -///////////////////////////////////////// - -Readobj(filename,options):=( -//help:Readobj("file.obj",["size=-3"]); - regional(eqL,size,vL,fnL,dtL,numer,flg,flg2, - tmp,tmp1,tmp2,tmp3,tmp4,tmp5); - size=1; - tmp=Divoptions(options); - eqL=tmp_5; - forall(eqL, - if(Toupper(substring(#,0,1))=="S", - tmp=indexof(#,"="); - size=parse(substring(#,tmp,length(#))); - ); - ); - numer="-0123456789"; - tmp=load(filename); - dtL=tokenize(tmp,"v "); - vL=[]; - fnL=[]; - flg=0; - flg2=0; - forall(dtL,dt, - tmp1=Removespace(dt); - if(indexof(numer,substring(tmp1,0,1))>0, - tmp2=""; - tmp=indexof(tmp1,"f"); - if(tmp>0, - tmp2=substring(tmp1,tmp-1,length(tmp1)); - tmp1=substring(tmp1,0,tmp-1); - if(substring(tmp1,length(tmp1)-1,length(tmp1))=="#", - tmp2="#"+tmp2; - tmp1=substring(tmp1,0,length(tmp1)-1); - ); -// tmp=indexof(tmp2,"#"); -// if(tmp>0, -// tmp2=substring(tmp2,0,tmp-1); -// ); - ); - if(flg==1, - tmp1=""; - flg=0; - ); - if(length(tmp1)>0, - tmp=indexof(tmp1,"#"); - if(tmp>0, - tmp1=substring(tmp1,0,tmp-1); - flg=1; - ); - tmp=indexof(tmp1,"vt"); - if(tmp>0, - tmp1=substring(tmp1,0,tmp-1); - ); - tmp1=replace(tmp1," ",","); - tmp1=replace(tmp1," ",","); - tmp1="["+tmp1+"]"; - tmp1=size*parse(tmp1); - vL=append(vL,tmp1); - ); - if(length(tmp2)>0, - tmp2=tokenize(tmp2,"f"); - if(length(tmp2_1)==0, - tmp2=tmp2_(2..length(tmp2)); - // , - // if(tmp2_1=="#", -// tmp2=tmp2_(2..length(tmp2)); -// tmp2_1="#"+tmp2_1; -// ); - ); - forall(1..length(tmp2),tmp3, - tmp=tmp2_tmp3; - if(substring(tmp,length(tmp)-1,length(tmp))=="#", - tmp2_(tmp3+1)="#"+Removespace(tmp2_(tmp3+1)); - tmp2_tmp3=substring(tmp,0,length(tmp)-1); - ); - tmp5=""; - if(length(tmp2_tmp3)>0, - tmp4=tokenize(tmp2_tmp3," "); - forall(tmp4, - if(length(text(#))>0, - if(indexof(text(#),"/")==0, - tmp=text(#); - , - tmp=tokenize(text(#),"/"); - tmp=tmp_1; - ); - if(length(tmp)>0, - tmp5=tmp5+tmp+","; - ); - ); - ); - tmp5=substring(tmp5,0,length(tmp5)-1); - if(length(tmp5)>0, - if(substring(tmp5,0,1)!="#", - tmp5="["+tmp5+"]"; - fnL=append(fnL,parse(tmp5)); - ); - ); - ); - ); - ); - ); - ); - [vL,fnL]; -); - -Concatobj(objL):=Concatobj(objL,[]); -Concatobj(objL,options):=( -//help:Concatobj([polyhed,triangle]); -//help:Concatobj([polyhed,triangle],["Rmf=no"]); -//help:Concatobj([[A,B,C],[A,C,D]]); - regional(obj,vL,fL,vadd,vtx,faces,fnew,face,jj,kk,vctr,eps, - tmp,tmp1,tmp2,tmp3,eqL,rmf); - tmp=divoptions(options); - eqL=tmp_5; - rmf="y"; // 16.08.19 - forall(eqL, - tmp=indexof(#,"="); - tmp1=Toupper(substring(#,0,1)); - tmp2=Toupper(substring(#,tmp,tmp+1)); - if(tmp1=="R", - if(tmp2=="Y",rmf="y"); // 16.08.14 - ); - ); - eps=10^(-4); - vL=[]; - fL=[]; - vctr=0; - forall(objL,obj, - if(isstring(obj), - tmp1=parse(obj); - , - tmp1=obj; - ); - if(length(tmp1)>2, // 16.02.28 - tmp=1..length(tmp1); - tmp1=[tmp1,[tmp]]; - ); - vtx=tmp1_1; // 16.02.11 from - faces=tmp1_2; - fnew=faces; - vctr=0; - vadd=[]; - forall(1..length(vtx),jj, - tmp1=vtx_jj; - tmp=select(1..length(vL),dist3d(vL_#,tmp1)<eps); - if(length(tmp)==0, - vadd=append(vadd,tmp1); - vctr=vctr+1; - tmp2=length(vL)+vctr; - , - tmp2=tmp_1; - ); - forall(1..length(faces),kk, - face=faces_kk; - tmp=select(1..length(face),face_#==jj); - if(length(tmp)>0, - tmp1=tmp_1; - fnew_kk_tmp1=tmp2; - ); - ); - ); - vL=concat(vL,vadd); - fL=concat(fL,fnew); // 16.02.11 until - ); - tmp2=apply(1..length(fL),1); - if(rmf=="y", - forall(1..length(fL),jj, - tmp=fL_jj; - tmp1=select((jj+1)..length(fL),fL_#==tmp); - forall(tmp1,tmp2_#=0); - ); - tmp=select(1..length(tmp2),tmp2_#==1); - fL=fL_tmp; - ); - [vL,fL]; -); - -if(1==0, - -Mkobjfile(fname,objL):=Mkobjfile(Dirwork,fname,objL); -Mkobjfile(path,fnameorg,objL):=( -//help:Mkobj(filename,objlist); - regional(fname,obj,vtx,face,tmp,tmp1,tmp2); - fname=fnameorg; - if(indexof(fname,".")==0,fname=fname+".obj"); - vtx=objL_1; - face=objL_2; - setdirectory(path); - SCEOUTPUT = openfile(fname); - forall(vtx,tmp1, - tmp2=tmp1; - if(ispoint(tmp1), - tmp2=parse(text(tmp1)+"3d"); - ); - tmp="v "+format(tmp2_1,5)+" "+format(tmp2_2,5)+" "+format(tmp2_3,5); - println(SCEOUTPUT,tmp); - ); - forall(face,tmp1, - tmp="f"; - forall(tmp1, - tmp=tmp+" "+text(#); - ); - println(SCEOUTPUT,tmp); - ); - closefile(SCEOUTPUT); - setdirectory(Dirwork); -); - -); - -VertexandEdge(nm,vfnL):=VertexEdgeFace(nm,vfnL,[]); -VertexandEdge(nm,vfnL,options):=VertexEdgeFace(nm,vfnL,options); -VertexEdgeFace(nm,vfnL):=VertexEdgeFace(nm,vfnL,[]); // 16.02.10 -//help:VertexEdgeFace("1",[vL,fnL]); -//help:VertexEdgeFace("1",["A","B","C"]); -//help:VertexEdgeFace(options=["Pt=fix","Edg=geo"]); -VertexEdgeFace(nm,vfnLorg,optionorg):=( - regional(name3,namev,namee,namef,vfnL,options,Noflg,eqL,strL, - vL,eL,enL,face,edge,vtx,vname,fixflg,edgflg,tmp,tmp1,tmp2); - name3="phvef"+nm; - namev="phv3d"+nm; - namee="phe3d"+nm; - namef="phf3d"+nm; - options=optionorg; - vfnL=vfnLorg; // 16.06.19from - if(length(vfnL)>2, - vfnL=[vfnL,[1..length(vfnL)]]; - ); - if(length(vfnL)==1, - vfnL=[vfnL_1,[1..length(vfnL_1)]]; - ); // 16.06.19until - tmp=Divoptions(options); - Noflg=tmp_2; - eqL=tmp_5; - strL=tmp_7; - fixflg=1; - edgflg=1; - forall(eqL, - tmp1=Toupper(substring(#,0,1)); - tmp=indexof(#,"="); - tmp2=Toupper(substring(#,tmp,length(#))); - if(tmp1=="P", - if(tmp2=="FREE", fixflg=0); - options=remove(options,[#]); - ); - if(tmp1=="E", - if(substring(tmp2,0,1)=="N", edgflg=0); - options=remove(options,[#]); - ); - ); - forall(strL, - if(Toupper(#)=="FREE", - fixflg=0; - options=remove(options,[#]); - ); - ); - vL=[]; - forall(1..length(vfnL_1), - vtx=vfnL_1_#; // 16.02.10 from - if(isstring(vtx),vtx=parse(vtx)); // 16.06.19 - if(ispoint(vtx), - tmp=parse(text(vtx)+"3d"); - vname=text(vtx); -// tmp=parse(text(vtx)+"3d"); -// tmp="v"+text(#)+"3d="+textformat(tmp,5); -// parse(tmp); - , - vname="v"+text(#); - if(fixflg==1, - Putpoint3d(["v"+text(#),vtx],"fix"); - ); - ); - vL=append(vL,vname); // 16.02.10 until - ); - eL=[]; - forall(vfnL_2,face, - forall(1..length(face), - tmp1=face_#; - if(#<length(face), - tmp2=face_(#+1); - , - tmp2=face_1; - ); - if(tmp2<tmp1, - tmp=tmp2; tmp2=tmp1; tmp1=tmp; - ); -// tmp1="v"+text(tmp1)+"3d"; -// tmp2="v"+text(tmp2)+"3d"; - tmp1=vL_tmp1+"3d"; - tmp2=vL_tmp2+"3d"; - tmp=select(eL,#==[tmp1,tmp2] % #==[tmp2,tmp1]); - if(length(tmp)==0, - eL=append(eL,[tmp1,tmp2]); - ); - ); - ); - if(Noflg<3, - enL=[]; - forall(eL,edge, - if(edgflg==0, - if(Noflg<2, - tmp1=edge_1;//parse(edge_1); - tmp2=edge_2;//parse(edge_2); - tmp="sl3d"+edge_1+edge_2; - if(islist(parse(tmp)), - Changestyle3d([tmp],["nodisp"]); - ); - tmp="sl3d"+edge_2+edge_1; - if(islist(parse(tmp)), - Changestyle3d([tmp],["nodisp"]); - ); - tmp=replace(edge_1+edge_2,"3d",""); - options=append(options,"Msg=no"); - Spaceline("-"+tmp,[tmp1,tmp2],options); //16.02.28 - ); - enL=append(enL,tmp+"3d"); //16.02.29 - , - tmp1=replace(edge_1,"3d",""); - tmp2=replace(edge_2,"3d",""); - tmp=tmp1+tmp2; - create([tmp],"Segment",[parse(tmp1),parse(tmp2)]); - enL=append(enL,tmp+"3d");//16.02.29 - ); - ); - if(Noflg<2, - println("generate "+name3); - println(" generate totally "+namee); - println(" generate vertexes "+namev); - println(" generate faces "+namef); - ); - tmp1=""; - forall(enL, - tmp1=tmp1+Dq+#+Dq+","; - ); - tmp1=substring(tmp1,0,length(tmp1)-1); - tmp=namee+"=["+tmp1+"]"; - parse(tmp); - tmp=namee+"=list("+tmp1+")"; - tmp=replace(tmp,Dq,""); - GLIST=append(GLIST,tmp); - tmp1=apply(vL,Dq+#+"3d"+Dq); - tmp1=text(tmp1); - tmp1=substring(tmp1,1,length(tmp1)-1); - tmp=namev+"=["+tmp1+"]"; - parse(tmp); - tmp1=replace(tmp1,Dq,""); - tmp=namev+"=list("+tmp1+")"; - GLIST=append(GLIST,tmp); - tmp1=text(vfnL_2); - tmp1=substring(tmp1,1,length(tmp1)-1); - tmp=namef+"=["+tmp1+"]"; - parse(tmp); - tmp=namef+"=list("+tmp1+")"; - GLIST=append(GLIST,tmp); - ); - [namev,namee,namef]; -); - -Phparadata(nm,nmvf):=( - regional(tmp1,tmp2); - tmp1=parse("phv3d"+nmvf); - tmp2=parse("phf3d"+nmvf); - Phparadata(nm,nmvf,[tmp1,tmp2]); -); -Phparadata(nm,nmvf,Arg1):=( - regional(vfL,options,tmp1,tmp2); - if(islist(Arg1) & !islist(Arg1_1), - tmp1=parse("phv3d"+nmvf); - tmp2=parse("phf3d"+nmvf); - vfL=[tmp1,tmp2]; - options=Arg1; - , - vfL=Arg1; - options=[]; - ); - Phparadata(nm,nmvf,vfL,options); -); -Phparadata(nm,nmvf,vfL,options):=( -//help:Phparadata("1","1",["do"]); - regional(name2,name3,nameh2,nameh3,Ltype,Noflg,eqL,Hidden, - opstr,opcindy,Outflg,Inflg,pdata1,tmp,tmp1,tmp2); - name2="php2d"+nm; - name3="php3d"+nm; - nameh2="phh2d"+nm; - nameh3="phh3d"+nm; - tmp=Divoptions(options); - Ltype=tmp_1; - Noflg=tmp_2; - Inflg=tmp_3; - Outflg=tmp_4; - if(Inflg==0 & Outflg==0, Inflg=1;Outflg=1); // 15.05.15 - eqL=tmp_5; - opstr=tmp_(length(tmp)-1); - opcindy=tmp_(length(tmp)); - Hidden=""; - forall(eqL, - tmp=indexof(#,"="); - tmp1=Toupper(substring(#,0,1)); - tmp2=substring(#,tmp,length(#)); - if(tmp1=="H", - Hidden=tmp2; - ); - ); - if(Noflg<3, - if(Outflg>=1, - println("Output Phparadata "+name3); - if(isstring(vfL_1), // 2015.05.27 from - tmp1=vfL_1; - , - tmp1="list("; - forall(vfL_1, - tmp1=tmp1+#+","; - ); - tmp1=substring(tmp1,0,length(tmp1)-1)+")"; - ); - if(isstring(vfL_2), - tmp2=vfL_2; - , - tmp2="list("; - forall(vfL_2, - tmp2=tmp2+text(#)+","; - ); - tmp2=substring(tmp2,0,length(tmp2)-1)+")"; - ); // 2015.05.27 until - tmp=name3+"=Phparadata("+tmp1+","+tmp2+opstr+")"; - GLIST=append(GLIST,tmp); - tmp=name2+"=Projpara("+name3+")"; - GLIST=append(GLIST,tmp); - tmp=nameh3+"=PhHiddenData()"; - GLIST=append(GLIST,tmp); - tmp=nameh2+"=Projpara("+nameh3+")"; - GLIST=append(GLIST,tmp); - ); - ); - if(Noflg<2, - if(isstring(Ltype), - Ltype=GetLinestyle(text(Noflg)+Ltype,name2); - , - if(Noflg==1,Ltype=0); - ); - if(Inflg==1, -// tmp=apply(pltdata1,replace(#,"3d","2d")); // 15.05.18 from - Changestyle3d("phe3d"+nmvf,["nodisp"]); - GCLIST=append(GCLIST,[name2,Ltype,opcindy]); - ); - ); - if(Hidden!="", - Drawlinetype(nameh2,Hidden); - if(Inflg==1, - tmp1=Toupper(substring(Hidden,0,2)); - if(tmp1=="DR",Ltype=0); - if(tmp1=="DA",Ltype=1); - if(tmp1=="DO",Ltype=3); - if(tmp1=="ID",Ltype=1); - GCLIST=append(GCLIST,[nameh2,Ltype,opcindy]); - ); - ); -); - -Nohiddenseg(seg,rng,triang):=( -// help:Nohiddenseg("1",seg1,[0,1],["v1","v2","v3"]); - regional(Eps,pA3,pB3,pC3,pA,pB,pC,sg1,sg2,ss1,ss2,parL,flgL,flg1,flg2, - veB,veC,sgnoh,sghid,added,tristr,tmp,tmp1,tmp2,tmp3,tmp4,tmp5); - Eps=10^(-4); - sgnoh=[0,1]; - pA3=if(isstring(triang_1),parse(triang_1+"3d"),triang_1); //16.06.19 - pA=Parapt(pA3); - pB3=if(isstring(triang_2),parse(triang_2+"3d"),triang_2); //16.06.19 - pB=Parapt(pB3); - pC3=if(isstring(triang_3),parse(triang_3+"3d"),triang_3); //16.06.19 - pC=Parapt(pC3); - sg1=seg_1+rng_1*(seg_2-seg_1); - sg2=seg_1+rng_2*(seg_2-seg_1); - ss1=Parapt(sg1); - ss2=Parapt(sg2); - tristr=replace(text(triang),",","-"); - tristr=substring(tristr,1,length(tristr)-1); - if(|ss2-ss1|>Eps & abs(Crossprod(pB-pA,pC-pA))>Eps, - tmp=IntersectcrvsPp([ss1,ss2],[pA,pB,pC,pA]); - parL=apply(tmp,#_2-1); - parL=sort(parL); - if(length(parL)==0, - parL=[0,1]; - , - if(parL_1>Eps,parL=prepend(0,parL)); - if(parL_(length(parL))<1-Eps,parL=append(parL,1)); - ); - tmp1=Crossprod(pB3-pA3,pC3-pA3); - if(abs(Dotprod(tmp1,sg2-sg1))>Eps, - tmp=IntersectsgpL("",[sg1,sg2],tristr,["nodisp"]); - if(tmp_2>-Eps & tmp_2<1+Eps, - if(tmp_3>-Eps & tmp_4>-Eps & tmp_3+tmp_4<1+Eps, - tmp1=select(parL,abs(tmp_2-#)<Eps); - if(length(tmp1)==0, - parL=sort(append(parL,tmp_2)); - ); - ); - ); - ); - flgL=[]; - forall(parL, - tmp1=sg1+#*(sg2-sg1); - tmp=Projcoordpara(tmp1); - tmp_3=tmp_3+1; - tmp2=Cancoordpara(tmp); - tmp=IntersectsgpL("",[tmp1,tmp2],tristr,["nodisp"]); - tmp1=Projcoordpara(tmp1); - tmp2=Projcoordpara(tmp_1); - flg1=0; - if(tmp1_3<tmp2_3-Eps,flg1=-1); - if(tmp1_3>tmp2_3+Eps,flg1=1); - flgL=append(flgL,flg1); - ); - sgnoh=[]; - forall(2..length(flgL), - added=[]; - flg1=flgL_(#-1); - flg2=flgL_#; - if(max([flg1,flg2])==1 % flg1+flg2==0, - added=[parL_(#-1),parL_#]; - , - sghid=[parL_(#-1),parL_#]; - tmp1=ss1+sghid_1*(ss2-ss1); - tmp2=ss1+sghid_2*(ss2-ss1); - tmp=IntersectcrvsPp([tmp1,tmp2],[pA,pB,pC,pA]); - if(length(tmp)<2, - veB=pB-pA; - veC=pC-pA; - tmp3=tmp1-pA; - tmp4=tmp2-pA; - tmp5=Crossprod(veB,veC); - tmp1=(tmp3_1*veC_2-tmp3_2*veC_1)/tmp5; - tmp2=(-tmp3_1*veB_2+tmp3_2*veB_1)/tmp5; - if(tmp1>-Eps & tmp2>-Eps & tmp1+tmp2<1+Eps,flg1=1,flg1=0); - tmp1=(tmp4_1*veC_2-tmp4_2*veC_1)/tmp5; - tmp2=(-tmp4_1*veB_2+tmp4_2*veB_1)/tmp5; - if(tmp1>-Eps & tmp2>-Eps & tmp1+tmp2<1+Eps,flg2=1,flg2=0); - if(flg1==1 & flg2==0, - if(length(tmp)>0, - tmp1=tmp_1_2-1; - tmp1=sghid_1+(sghid_2-sghid_1)*tmp1; - , - tmp1=sghid_1; - ); - added=[tmp1,sghid_2]; -// added=[tmp1+Eps,sghid_2]; // <--- USUI 2016.02.27 - ); - if(flg1==0 & flg2==1, - if(length(tmp)>0, - tmp1=tmp_1_2-1; - tmp1=sghid_1+(sghid_2-sghid_1)*tmp1; - , - tmp1=sghid_2; - ); - added=[sghid_1,tmp1]; - ); - if(flg1+flg2==0, - added=sghid; - ); - ); - if(length(tmp)==2, - if(min([flg1,flg2])>=0,added=sghid,added=[]); - ); - ); - if(length(added)>0, - if(length(sgnoh)==0, - sgnoh=added; - , - if(sgnoh_(length(sgnoh))<added_1-Eps, - sgnoh=concat(sgnoh,added); - , - sgnoh=sgnoh_(1..(length(sgnoh)-1)); - sgnoh=concat(sgnoh,added_(2..length(added))); - ); - ); - ); - ); - ); - sgnoh=apply(sgnoh,rng_1+#*(rng_2-rng_1)); - sgnoh; -); - -Nohiddensegs(seg,range,faceno,vtxL):=( - regional(Eps,rng,face,vtx,out,ra,rb,tmp,tmp1,tmp2); - Eps=10^(-4); - face=apply(faceno,vtxL_#); // 16.02.10 - rng=range; - out=rng; - forall(2..(length(face)-1),vtx, - tmp1=[face_1,face_vtx,face_(vtx+1)]; - forall(1..(length(rng)/2), - tmp=[rng_(2*#-1),rng_(2*#)]; - out=remove(out,tmp); - tmp2=Nohiddenseg(seg,tmp,tmp1); - if(length(tmp2)>0, - out=remove(out,tmp); - out=concat(out,tmp2); - ); - ); - tmp=sort(out); - out=[]; - forall(1..(length(tmp)/2), - ra=tmp_(2*#-1); - rb=tmp_(2*#); - if(ra<rb-Eps, - if(length(out)==0, - out=[ra,rb]; - , - if(out_(length(out))<ra-Eps, - out=concat(out,[ra,rb]); - , - out_(length(out))=rb; - ); - ); - ); - ); - rng=out; - ); - rng; -); - -Nohiddenbyfaces(nm,facestr):= - Nohiddenbyfaces(nm,Datalist3d(),facestr,[],["do"]); -Nohiddenbyfaces(nm,Arg1,Arg2):=( - regional(segstr,facestr,options); - if(islist(Arg2), - segstr=Datalist3d(); - facestr=Arg1; - options=Arg2; - , - segstr=Arg1; - facestr=Arg2; - options=[]; - ); - Nohiddenbyfaces(nm,segstr,facestr,options,["do"]); -); -Nohiddenbyfaces(nm,Arg1,Arg2,Arg3):=( - regional(segstr,facestr,options,optionsh); - if(islist(Arg2), - segstr=Datalist3d(); - facestr=Arg1; - options=Arg2; - optionsh=Arg3; - , - segstr=Arg1; - facestr=Arg2; - options=Arg3; - optionsh=["do"]; - ); - Nohiddenbyfaces(nm,segstr,facestr,options,optionsh); // 16.02.21 -); -Nohiddenbyfaces(nm,segstr,facestr,optionorg,optionsh):=( -//help:Nohiddenbyfaces("1","phf3d1"); -//help:Nohiddenbyfaces("1","ax3d","phf3d1"); -//help:Nohiddenbyfaces(options1=["dr"]); -//help:Nohiddenbyfaces(options2=["do"]); - regional(Eps,namen,nameh,options,segL,faceL,vtxL,rng,seg,face, - flg,ctr,tmp,tmp1,tmp2,Ltype,Noflg,eqL,opstr,opcindy,frnL,frhL); - Eps=10^(-4); - namen="frn"+nm; - nameh="frh"+nm; - if(isstring(segstr), -// segL=parse(segstr); - segL=[segstr]; // 16.08.19 - , - segL=segstr; - ); - tmp2=[]; // 16.02.29 from - forall(segL,seg, - tmp=replace(seg,"3d","2d"); - tmp1=select(GCLIST,#_1==tmp); - tmp1=tmp1_1; - if(tmp1_2==0, - tmp2=append(tmp2,seg); - ); - ); - segL=tmp2; - Changestyle3d(segL,["nodisp"]); // 16.02.29 until - if(islist(segL), - if(isstring(segL_1), - segL=apply(segL,parse(#)); - ); - ); - segL=Flattenlist(segL); - flg=0; - if(isstring(facestr), - if(substring(facestr,0,3)=="phf", // 16.08.19from - faceL=parse(facestr); - tmp=replace(facestr,"phf","phv"); // 16.02.10 from - tmp=parse(tmp); - vtxL=apply(tmp,replace(#,"3d","")); // 16.02.10 until - flg=1; - , - faceL=parse(facestr); - ); - ); - if(flg==0, - if(length(faceL)==2, // 16.08.19until - vtxL=facestr_1; - faceL=facestr_2; - , - vtxL=facestr; - faceL=[1..length(vtxL)]; - ); - ); -// Hidden=""; - options=optionorg; - tmp=Divoptions(options); - Ltype=tmp_1; - Noflg=tmp_2; - eqL=tmp_5; - opstr=tmp_(length(tmp)-1); - opcindy=tmp_(length(tmp)); -// forall(eqL, -// tmp=indexof(#,"="); -// tmp1=Toupper(substring(#,0,1)); -// tmp2=substring(#,tmp,length(#)); -// if(tmp1=="H", -// Hidden=tmp2; -// ); -// ); - - ctr=1; - frnL=[]; - frhL=[]; - forall(segL,seg, - rng=[0,1]; - forall(faceL,face, - rng=Nohiddensegs(seg,rng,face,vtxL); - ); - forall(1..length(rng)/2, - tmp=rng_(2*#-1); - tmp1=seg_1+tmp*(seg_2-seg_1); - tmp=rng_(2*#); - tmp2=seg_1+tmp*(seg_2-seg_1); -// tmp=remove(options,eqL); - tmp=append(options,"Msg=nodisp"); // 15.06.22 - Spaceline("-"+namen+"n"+text(ctr),[tmp1,tmp2],tmp); - frnL=append(frnL,namen+"n"+text(ctr)+"3d"); - ctr=ctr+1; - ); - if(length(rng)==0, - rng=[0,1]; - , - if(rng_1>0+Eps, - rng=prepend(0,rng); - , - rng=rng_(2..length(rng)); - ); - if(rng_(length(rng))<1-Eps, - rng=append(rng,1); - , - rng=rng_(1..(length(rng)-1)); - ); - ); - forall(1..length(rng)/2, - tmp=rng_(2*#-1); - tmp1=seg_1+tmp*(seg_2-seg_1); - tmp=rng_(2*#); - tmp2=seg_1+tmp*(seg_2-seg_1); - if(length(optionsh)>0,tmp=optionsh,tmp=["do"]); - tmp=append(tmp,"Msg=nodisp"); // 15.06.22 - Spaceline("-"+nameh+"n"+text(ctr),[tmp1,tmp2],tmp); - frhL=append(frhL,nameh+"n"+text(ctr)+"3d"); - ctr=ctr+1; - ); - ); - tmp1=apply(frnL,Dq+#+Dq); - tmp="frn3d"+nm+"="+text(tmp1); - parse(tmp); - println(" generate totally "+"frn3d"+nm); - tmp1=apply(frhL,Dq+#+Dq); - tmp="frh3d"+nm+"="+text(tmp1); - parse(tmp); - println(" generate totally "+"frh3d"+nm); -); - -Faceremovaldata(nm,vfdata,crvdata):=Faceremovaldata(nm,vfdata,crvdata,[]); -Faceremovaldata(nm,vfdata,crvdata,options):=( - regional(name2,name3,nameh2,nameh3,Ltype,Noflg,eqL,Hidden, - opstr,opcindy,Outflg,Inflg,tmp,tmp1,tmp2); - name2="frc2d"+nm; - name3="frc3d"+nm; - nameh2="frch2d"+nm; - nameh3="frch3d"+nm; - tmp=Divoptions(options); - Ltype=tmp_1; - Noflg=tmp_2; - Inflg=tmp_3; - Outflg=tmp_4; - if(Inflg==0 & Outflg==0, Inflg=1;Outflg=1); // 15.05.15 - eqL=tmp_5; - opstr=tmp_(length(tmp)-1); - opcindy=tmp_(length(tmp)); - Hidden=""; - forall(eqL, - tmp=indexof(#,"="); - tmp1=Toupper(substring(#,0,1)); - tmp2=substring(#,tmp,length(#)); - if(tmp1=="H", - Hidden=tmp2; - ); - ); - if(Noflg<3, - if(Outflg>=1, - println("Output Faceremovaldata "+name3); - if(MeasureDepth(vfdata)==1, - tmp1=text(apply(vfdata,#_[1,3])); - , - tmp1=text([vfdata_[1,3]]); - ); - tmp1=replace(tmp1,"[","list("); - tmp1=replace(tmp1,"]",")"); - tmp2=text(crvdata); - tmp2=replace(tmp2,"[","list("); - tmp2=replace(tmp2,"]",")"); -// tmp2="Flattenlist("+tmp2+")"; - tmp=name3+"=Faceremovaldata("+tmp1+","+tmp2+opstr+","+Dq+"para"+Dq+")"; - GLIST=append(GLIST,tmp); - tmp=name2+"=Projpara("+name3+")"; - GLIST=append(GLIST,tmp); - tmp=nameh3+"=PhHiddenData()"; - GLIST=append(GLIST,tmp); - tmp=nameh2+"=Projpara("+nameh3+")"; - GLIST=append(GLIST,tmp); - ); - ); - if(Noflg<2, - if(isstring(Ltype), - Ltype=GetLinestyle(text(Noflg)+Ltype,name2); - , - if(Noflg==1,Ltype=0); - ); - if(Inflg==1, - if(MeasureDepth(vfdata)==1, - tmp1=apply(vfdata,parse(#_2)); - , - tmp1=[parse(vfdata_2)]; - ); - forall(tmp1, - Changestyle3d(#,["nodisp"]); - ); - Changestyle3d(crvdata,["nodisp"]); - GCLIST=append(GCLIST,[name2,Ltype,opcindy]); - ); - ); - if(Hidden!="", - Drawlinetype(nameh2,Hidden); - if(Inflg==1, - tmp1=Toupper(substring(Hidden,0,2)); - if(tmp1=="DR",Ltype=0); - if(tmp1=="DA",Ltype=1); - if(tmp1=="DO",Ltype=3); - if(tmp1=="ID",Ltype=1); - GCLIST=append(GCLIST,[nameh2,Ltype,opcindy]); - ); - ); -); - -Fullformfunc(FdL):=( - regional(Out,nn,ii,Jrg,flg,Urg,Vrg,kk,Uname, - Zf,Xname,Xf,Yname,Yf,tmp,tmp1,tmp2); - Out=[FdL_1]; - nn=length(FdL); - flg=0; - forall(1..nn, - if(flg==0, - tmp=FdL_#; - if(substring(tmp,length(tmp)-1,length(tmp))=="]", - Jrg=#; - Urg=FdL_Jrg; - flg=1; - ); - ); - ); - kk=indexof(Urg,"="); - Uname=Removespace(substring(Urg,0,kk-1)); - tmp=substring(Urg,kk,length(Urg)); - Urg=Uname+"="+tmp; -// tmp1=parse(tmp); -// Urg=Uname+"="+textformat(tmp1,5); - Vrg=FdL_(Jrg+1); - kk=indexof(Vrg,"="); - Vname=Removespace(substring(Vrg,0,kk-1)); - tmp=substring(Vrg,kk,length(Vrg)); - Vrg=Vname+"="+tmp; -// tmp1=parse(tmp); -// Vrg=Vname+"="+textformat(tmp1,5); - if(Jrg==2, - tmp=FdL_1; - kk=indexof(tmp,"="); - Zf=substring(tmp,kk,length(tmp)); - tmp=[Uname,Vname,Zf,Urg,Vrg]; - Out=concat(Out,tmp); - , - if(Jrg==4, - tmp=FdL_1; - kk=indexof(tmp,"="); - Zf=substring(tmp,kk,length(tmp)); - tmp=FdL_2; - kk=indexof(tmp,"="); - Xname=Removespace(substring(tmp,0,kk-1)); - Xf=substring(tmp,kk,length(tmp)); - tmp=FdL_3; - kk=indexof(tmp,"="); - Yname=Removespace(substring(tmp,0,kk-1)); - Yf=substring(tmp,kk,length(tmp)); - tmp=replace(Zf,Xname,"("+Xf+")"); - Zf=replace(tmp,Yname,"("+Yf+")"); - Tmp=[Xf,Yf,Zf,Urg,Vrg]; - Out=concat(Out,Tmp); - , - tmp=FdL_2; - kk=indexof(tmp,"="); - Xf=substring(tmp,kk,length(tmp)); - tmp=FdL_3; - kk=indexof(tmp,"="); - Yf=substring(tmp,kk,length(tmp)); - tmp=FdL_4; - kk=indexof(tmp,"="); - Zf=substring(tmp,kk,length(tmp)); - tmp=[Xf,Yf,Zf,Urg,Vrg]; - Out=concat(Out,tmp); - ); - ); - DrwS="enws"; - BdyL=[]; - forall((Jrg+2)..length(FdL),ii, - tmp=FdL_ii; - if(isstring(tmp), - if(length(tmp)==0, - tmp=" "; - ); - DrwS=tmp; - ); - if(islist(tmp) & length(tmp_1)>1, - BdyL=tmp; - ); - ); - tmp=[DrwS,BdyL]; - Out=concat(Out,tmp); -); - -Surffun(nm,Fd):=( - regional(name,coord,var1,var2,rng1,rng2,bdy,tmp,tmp1,tmp2); - tmp=Fullformfunc(Fd); - rng1=tmp_5; - rng2=tmp_6; - bdy=tmp_7; - coord="["+tmp_2+","+tmp_3+","+tmp_4+"]"; - tmp=indexof(rng1,"="); - var1=substring(rng1,0,tmp-1); - rng1=substring(rng1,tmp,length(rng1)); - tmp=indexof(rng2,"="); - var2=substring(rng2,0,tmp-1); - rng2=substring(rng2,tmp,length(rng2)); - name="Sfn"+nm+"("+var1+","+var2+")"; - Deffun(name,["regional(tmp)","tmp="+coord,"tmp"]); - [name,var1,rng1,var2,rng2,bdy]; -); - -Sf3data(nm,fdata):=Sf3data(nm,fdata,[]); -Sf3data(nm,fdata,optionorg):=( - regional(tmp,tmp1,tmp2); - tmp=Surffun(nm,fdata); - tmp1=tmp_2+"="+tmp_3; - tmp2=tmp_4+"="+tmp_5; - Sf3data(nm,tmp_1,tmp1,tmp2,optionorg); -); -Sf3data(nm,funstr,var1,var2):=Sf3data(nm,funstr,var1,var2,[]); -Sf3data(nm,funstr,var1org,var2org,optionorg):=( -//help:Sf3data("1",Fd); -//help:Sf3data(options=["Num=[25,25]","Wire=[20,20]"]); - regional(name2,name3,var1,var2,Ltype,Noflg,opstr,opcindy,eqL,Num, - Wire,varu,varv,rngu,rngv,sfdtuL,sfdtvL,options, - tmp,tmp1,tmp2,tmp3); - var1=replace(var1org,"%pi","pi"); - var2=replace(var2org,"%pi","pi"); - tmp=Divoptions(optionorg); - Ltype=tmp_1; - Noflg=tmp_2; - eqL=tmp_5; - opstr=tmp_(length(tmp)-1); - opcindy=tmp_(length(tmp)); - options=optionorg; - Num=[25,25]; - Wire=[20,20]; - forall(eqL, - tmp=indexof(#,"="); - tmp1=substring(#,0,tmp-1); - tmp2=substring(#,tmp,length(#)); // 16.05.25 - tmp=Toupper(substring(tmp1,0,1)); - if(tmp=="N", - tmp2=parse(tmp2); - if(!islist(tmp2),tmp2=[tmp2,tmp2]); - Num=tmp2; - options=remove(options,[#]); - ); - if(tmp=="W", - tmp2=parse(tmp2); - if(!islist(tmp2),tmp2=[tmp2,tmp2]); - Wire=tmp2; - options=remove(options,[#]); - ); - ); - tmp=indexof(var1,"="); - varu=substring(var1,0,tmp-1); - rngu=parse(substring(var1,tmp,length(var1))); - tmp=indexof(var2,"="); - varv=substring(var2,0,tmp-1); - rngv=parse(substring(var2,tmp,length(var2))); - sfdtuL=[]; - forall(0..Wire_2, - tmp=rngv_1+#/Wire_2*(rngv_2-rngv_1); - tmp1=replace(funstr,varv,textformat(tmp,5)); - tmp="Num="+text(Num_2); - tmp2=concat(options,["Msg=no",tmp]); - Spacecurve(nm+"u"+#,tmp1,var1,tmp2); - sfdtuL=append(sfdtuL,"sc3d"+nm+"u"+#); - ); - sfdtvL=[]; - forall(0..Wire_1, - tmp=rngu_1+#/Wire_1*(rngu_2-rngu_1); - tmp1=replace(funstr,varu,textformat(tmp,5)); - tmp="Num="+text(Num_1); - tmp2=concat(options,["Msg=no",tmp]); - Spacecurve(nm+"v"+#,tmp1,var2,tmp2); - sfdtvL=append(sfdtvL,"sc3d"+nm+"v"+#); - ); - if(Noflg<3, - println(" generate totally "+"sf3d"+nm); - tmp1=""; - forall(sfdtuL, - tmp1=tmp1+Dq+#+Dq+","; - ); - tmp1=substring(tmp1,0,length(tmp1)-1); - tmp2=""; - forall(sfdtvL, - tmp2=tmp2+Dq+#+Dq+","; - ); - tmp2=substring(tmp2,0,length(tmp2)-1); - tmp="sf3d"+nm+"=[["+tmp1+"],["+tmp2+"]]"; - parse(tmp); - ); - [sfdtuL,sfdtvL]; -); - -Sfbdparadata(nm,fd):= - Sfbdparadata(nm,fd,[],["nodisp"]); -Sfbdparadata(nm,fd,options):= - Sfbdparadata(nm,fd,options,["nodisp"]); -Sfbdparadata(nm,fdorg,optionorg,optionsh):=( -//help:Sfbdparadata("1",Fd); -//help:Sfbdparadata(options2=["Wait=60",division(c(50,50)),Eps1(c(0.01,1)), Eps2(0.05)]); - regional(fd,options,name2,name3,name2h,name3h,waiting, - eqL,reL,strL,fname,tmp,tmp1,tmp2,flg,wflg); - name2="sfbd2d"+nm; - name3="sfbd3d"+nm; - name2h="sfbdh2d"+nm; - name3h="sfbdh3d"+nm; - fname=Fhead+"sfbd"+nm+".txt"; - tmp=apply(fdorg,if(isstring(#),"'"+#+"'",#)); - tmp=text(tmp); - fd=RSform(tmp,2); - options=optionorg; - tmp=Divoptions(options); - eqL=tmp_5; - reL=tmp_6; - strL=tmp_7; - waiting=120; - forall(eqL, - tmp=indexof(#,"="); - tmp1=Toupper(substring(#,0,1)); - tmp2=substring(#,tmp,length(#)); - if(tmp1=="W", - waiting=parse(tmp2); - options=remove(options,[#]); - ); - ); - options=remove(options,reL); - wflg=0; - forall(strL, - tmp=Toupper(substring(#,0,1)); - if(tmp=="M", - wflg=1; - options=remove(options,[#]); - ); - if(tmp=="R", - wflg=-1; - options=remove(options,[#]); - ); - ); - tmp=["fd"+nm]; - if(length(reL)>0, - reL=textformat(reL,4); - reL=substring(reL,1,length(reL)-1); - reL=Rsform(reL); - tmp=append(tmp,reL); - ); - tmp1=[Dqq(fname),Dqq(name3),name3,Dqq(name2),name2]; - tmp1=concat(tmp1,[Dqq(name3h),name3h,Dqq(name2h),name2h]); -// tmp1=concat(tmp1,[Dqq("CUSPPT"),"CUSPPT"]); -// tmp1=concat(tmp1,[Dqq("OTHERPARTITION"),"OTHERPARTITION"]); - tmp2=replace(fname,".txt",".dat"); //18.02.18 - cmdL=[ - "print",[Dqq("fd"+nm)], //18.02.22 - "fd"+nm+"="+fd,[], - name3+"=Sfbdparadata",tmp, - name2+"=Projpara",[name3], - name3h+"=HIDDENDATA",[], - name2h+"=Projpara",[name3h], - "WriteOutData",tmp1, - "save",["CUSPPT","OTHERPARTITION","file='"+tmp2+"'"] - ]; - tmp=replace(fname,".txt","end.txt"); - options=concat(options,["Out=no","Wait="+text(waiting),"Res="+tmp]); - if(wflg==1,options=append(options,"m")); - if(wflg==-1,options=append(options,"r")); - if(ErrFlag==0, - CalcbyR("sfbd"+nm,cmdL,options); - ); - if(ErrFlag==1, - err("Sfbdparadata not completed"); - , - ReadOutData(fname); - if(islist(parse(name2)), - Extractdata(name2,options); - if(length(optionsh)>0,tmp=optionsh,tmp=["nodisp"]); - Extractdata(name2h,tmp); - , - ErrFlag=1; - ); - ); -); - -Addpoints():=(//18.02.20 - if(isstring(ADDPOINT), - ADDPOINT; - , - "list()"; - ); -); -Addpoints(ptlist):=( -//help:Addpoints(list of 3d points); - if(length(ptlist)==0, - ADDPOINT="list()"; - , - ADDPOINT=Rsform(textformat(ptlist,6),2); - ); - ADDPOINT; -); - -Wireparadata(nm,sf,wr1,wr2,fd):= - Wireparadata(nm,sf,fd,wr1,wr2,[],["nodisp"]); -Wireparadata(nm,sf,fd,wr1,wr2,options):= - Wireparadata(nm,sf,fd,wr1,wr2,options,["nodisp"]); -Wireparadata(nm,sfstr,fdorg,wr1,wr2,optionorg,optionsh):=( -//help:Wireparadata("1","sfbd3d1",fd,5,5); -//help:Wireparadata(options2=[division(c(50,50)),Eps1(0.01), Eps2(0.05)]); - regional(fd,options,name2,name3,name2h,name3h,outreg, - eqL,reL,strL,fname,rfname,waiting,tmp,tmp1,tmp2,flg,wflg); - name2="wire2d"+nm; - name3="wiref3d"+nm; - name2h="wireh2d"+nm; - name3h="wireh3d"+nm; - fname=Fhead+"wire"+nm+".txt"; - rfname=Fhead+sfstr+".txt"; - rfname=replace(rfname,"3d",""); - tmp=apply(fdorg,if(isstring(#),"'"+#+"'",#)); - tmp=text(tmp); - fd=RSform(tmp,2); - options=optionorg; - tmp=Divoptions(options); - eqL=tmp_5; - reL=tmp_6; - strL=tmp_7; - waiting=600; - forall(eqL, - tmp=indexof(#,"="); - tmp1=Toupper(substring(#,0,1)); - tmp2=substring(#,tmp,length(#)); - if(tmp1=="W", - waiting=parse(tmp2); - options=remove(options,[#]); - ); - ); - options=remove(options,reL); - wflg=0; - forall(strL, - tmp=Toupper(substring(#,0,1)); - if(tmp=="M", - wflg=1; - options=remove(options,[#]); - ); - if(tmp=="R", - wflg=-1; - options=remove(options,[#]); - ); - ); - tmp1=textformat(wr1,6); - tmp1=Rsform(tmp1,1); - tmp2=textformat(wr2,6); - tmp2=Rsform(tmp2,1); - tmp=[sfstr,"fd"+nm,tmp1,tmp2]; - reL=RSform(text(reL),2); - reL=substring(reL,5,length(reL)-1); - if(length(reL)>0, - reL=textformat(reL,4); - reL=substring(reL,1,length(reL)-1); - reL=Rsform(reL); - tmp=append(tmp,reL); - ); - tmp1=[Dqq(fname),Dqq(name3),name3,Dqq(name2),name2]; - tmp1=concat(tmp1,[Dqq(name3h),name3h,Dqq(name2h),name2h]); - tmp2=replace(rfname,".txt",".dat"); - cmdL=[ - "print",[Dqq("wire"+nm)], //18.02.22 - "fd"+nm+"="+fd,[], - "ReadOutData",[Dqq(rfname)], - "load",[Dqq(tmp2)], - "Addpoints",[Addpoints()], - name3+"=Wireparadata",tmp, - name2+"=Projpara",[name3], - name3h+"=WIREHIDDENDATA",[], - name2h+"=Projpara",[name3h], - "WriteOutData",tmp1 - ]; - tmp=replace(fname,".txt","end.txt"); - options=concat(options,["Out=no","Wait="+text(waiting),"Res="+tmp]); - if(wflg==1,options=concat(options,["m"])); - if(wflg==-1,options=concat(options,["r"])); - if(ErrFlag==0, - CalcbyR("wire"+nm,cmdL,options); - ); - if(ErrFlag==1, - err("Wireparadata not completed"); - , - ReadOutData(fname); - if(islist(parse(name2)), - Extractdata(name2,options); - if(length(optionsh)>0,tmp=optionsh,tmp=["nodisp"]); - Extractdata(name2h,tmp); - , - ErrFlag=1; - ); - ); -); - -Crvsfparadata(nm,crv,sf,fd):= - Crvsfparadata(nm,crv,sf,fd,[],["nodisp"]); -Crvsfparadata(nm,crv,sf,fd,options):= - Crvsfparadata(nm,crv,sf,fd,options,["nodisp"]); -Crvsfparadata(nm,crvstr,sfstr,fdorg,optionorg,optionsh):=( -//help:Crvsfparadata("1","ax3d","sfbd3d1",fd); -//help:Crvsfparadata(options2=[division(c(50,50)),Eps1(0.01), Eps2(0.05)]); - regional(gd,out,fd,options,name2,name3,name2h,name3h, - eqL,reL,strL,fname,rfname,waiting,tmp,tmp1,tmp2,tmp3,flg,wflg); - tmp=replace(crvstr,"3d","2d"); - Changestyle(tmp,["nodisp"]); - name2="crvsf2d"+nm; - name3="crvsf3d"+nm; - name2h="crvsfh2d"+nm; - name3h="crvsfh3d"+nm; - fname=Fhead+"crvsf"+nm+".txt"; - rfname=Fhead+sfstr+".txt"; - rfname=replace(rfname,"3d",""); - tmp=apply(fdorg,if(isstring(#),"'"+#+"'",#)); - tmp=text(tmp); - fd=RSform(tmp,2); - options=optionorg; - tmp=Divoptions(options); - eqL=tmp_5; - reL=tmp_6; - strL=tmp_7; - waiting=120; - forall(eqL, - tmp=indexof(#,"="); - tmp1=Toupper(substring(#,0,1)); - tmp2=substring(#,tmp,length(#)); - if(tmp1=="W", - waiting=parse(tmp2); - options=remove(options,[#]); - ); - ); - options=remove(options,reL); - wflg=0; - forall(strL, - tmp=Toupper(substring(#,0,1)); - if(tmp=="M", - wflg=1; - options=remove(options,[#]); - ); - if(tmp=="R", - wflg=-1; - options=remove(options,[#]); - ); - ); - reL=RSform(text(reL),2); - reL=substring(reL,5,length(reL)-1); - tmp=[crvstr,sfstr,"fd"+nm]; - if(length(reL)>0, - reL=textformat(reL,4); - reL=substring(reL,1,length(reL)-1); - reL=Rsform(reL); - tmp=append(tmp,reL); - ); - tmp1=[DqDq(fname),DqDq(name3),name3,DqDq(name2),name2]; - tmp1=concat(tmp1,[DqDq(name3h),name3h,DqDq(name2h),name2h]); - tmp2=replace(rfname,".txt",".dat"); - cmdL=[ - "print",[Dqq("crv"+nm)], //18.02.22 - "fd"+nm+"="+fd,[], - "ReadOutData",[Dqq(rfname)], - "load",[Dqq(tmp2)], - "Addpoints",[Addpoints()] - ]; - tmp3=select(GLIST,indexof(#,crvstr+"=")>0); //18.02.22from - if(length(tmp3)==0, - tmp3=Fhead+crvstr+".txt"; - tmp3=replace(tmp3,"3d",""); - cmdL=concat(cmdL,[ - "ReadOutData",[Dqq(tmp3)] - ]); - ); //18.02.22until - cmdL=concat(cmdL,[ - name3+"=Crvsfparadata",tmp, - name2+"=Projpara",[name3], - name3h+"=CRVSFHIDDENDATA",[], - name2h+"=Projpara",[name3h], - "WriteOutData",tmp1 - ]); - tmp=replace(fname,".txt","end.txt"); - options=concat(options,["Out=no","Wait="+text(waiting),"Res="+tmp]); - if(wflg==1,options=append(options,"m")); - if(wflg==-1,options=append(options,"r")); - if(ErrFlag==0, - CalcbyR("crvsf"+nm,cmdL,options); - ); - if(ErrFlag==1, - err("Crvsfparadata not completed"); - , - ReadOutData(fname); - if(islist(parse(name2)), - Extractdata(name2,options); - if(length(optionsh)>0,tmp=optionsh,tmp=["nodisp"]); - Extractdata(name2h,tmp); - , - ErrFlag=1; - ); - ); -); - -Crvonsfparadata(nm,crv2d,sf,fd):= - Crvsonfparadata(nm,crv2d,sf,fd,[],["nodisp"]); -Crvonsfparadata(nm,crv2d,sf,fd,options):= - Crvonsfparadata(nm,crv2d,sf,fd,options,["nodisp"]); -Crvonsfparadata(nm,crv2dstr,sfstr,fdorg,optionorg,optionsh):=( -//help:Crvonsfparadata("1",["[1,t]","t=[0,2*pi]","Num=50"],"sfbd3d1",fd); -//help:Crvonsfparadata(options2=[division(c(50,50)),Eps1(0.01), Eps2(0.05)]); - regional(gd,out,fd,options,name2,name3,name2h,name3h, - eqL,reL,strL,fname,rfname,waiting,tmp,tmp1,tmp2,tmp3,flg,wflg); - name2="crvonsf2d"+nm; - name3="crvonsf3d"+nm; - name2h="crvonsfh2d"+nm; - name3h="crvonsfh3d"+nm; - fname=Fhead+"crvonsf"+nm+".txt"; - rfname=Fhead+sfstr+".txt"; - rfname=replace(rfname,"3d",""); - tmp=apply(fdorg,if(isstring(#),Dqq(#),#)); - tmp=text(tmp); - fd=RSform(tmp,2); - options=optionorg; - tmp=Divoptions(options); - eqL=tmp_5; - reL=tmp_6; - strL=tmp_7; - waiting=120; - forall(eqL, - tmp=indexof(#,"="); - tmp1=Toupper(substring(#,0,1)); - tmp2=substring(#,tmp,length(#)); - if(tmp1=="W", - waiting=parse(tmp2); - options=remove(options,[#]); - ); - ); - options=remove(options,reL); - wflg=0; - forall(strL, - tmp=Toupper(substring(#,0,1)); - if(tmp=="M", - wflg=1; - options=remove(options,[#]); - ); - if(tmp=="R", - wflg=-1; - options=remove(options,[#]); - ); - ); - if(isstring(crv2dstr), - crv=Rsform(crv2dstr); - , - crv=apply(crv2dstr,Dqq(#)); - crv=Rsform(text(crv)); - crv="Paramplot"+substring(crv,1,length(crv)); - ); - reL=RSform(text(reL),2); - reL=substring(reL,5,length(reL)-1); - tmp=["crv",sfstr,"fd"+nm]; - if(length(reL)>0, - reL=textformat(reL,4); - reL=substring(reL,1,length(reL)-1); - reL=Rsform(reL); - tmp=append(tmp,reL); - ); - tmp1=[Dqq(fname),Dqq(name3),name3,Dqq(name2),name2]; - tmp1=concat(tmp1,[Dqq(name3h),name3h,Dqq(name2h),name2h]); - tmp2=replace(rfname,".txt",".dat"); - cmdL=[ - "print",[Dqq("crvonsf"+nm)], //18.02.22 - "fd"+nm+"="+fd,[], - "ReadOutData",[Dqq(rfname)], - "load",[Dqq(tmp2)], - "Addpoints",[Addpoints()], - "crv="+crv,[], - name3+"=Crvonsfparadata",tmp, - name2+"=Projpara",[name3], - name3h+"=HIDDENDATA",[], - name2h+"=Projpara",[name3h], - "WriteOutData",tmp1 - ]; - tmp=replace(fname,".txt","end.txt"); - options=concat(options,["Out=no","Wait="+text(waiting),"Res="+tmp]); - if(wflg==1,options=append(options,"m")); - if(wflg==-1,options=append(options,"r")); - if(ErrFlag==0, - CalcbyR("crvonsf"+nm,cmdL,options); - ); - if(ErrFlag==1, - err("Crvonsfparadata not completed"); - , - ReadOutData(fname); - if(islist(parse(name2)), - Extractdata(name2,options); - if(length(optionsh)>0,tmp=optionsh,tmp=["nodisp"]); - Extractdata(name2h,tmp); - , - ErrFlag=1; - ); - ); -); - -Intersectcrvsf(nm,crv,fd):=Intersectcrvsf(nm,crv,fd,"",[]); -Intersectcrvsf(nm,crv,fd,Arg):=( - if(isstring(Arg), - Intersectcrvsf(nm,crv,fd,Arg,[]); - , - Intersectcrvsf(nm,crv,fd,"",Arg); - ); -); -Intersectcrvsf(nm,crvstr,fdorg,bdyeq,optionorg):=( -//help:Intersectcrvsf("1",curve,fd); -//help:Intersectcrvsf("1",curve,fd,curveequation); -//help:Intersectcrvsf(options=[Np([50,50]),Eps(0.01)]); - regional(name,crv,fd,options,reL,fname,crvfname,argR, - waiting,tmp,tmp1,tmp2,flg,wflg,pts); name="crvsf"+nm; - name="crvsf"+nm; - fname=Fhead+name+".txt"; - crvfname=Fhead+"crv"+nm+".txt"; -// crv=parse(crvstr); -// crv=textformat(crv,6); -// crv=Rsform(crv,2); - fd=apply(fdorg,if(isstring(#),Dqq(#),#)); - options=optionorg; - tmp=Divoptions(options); - eqL=tmp_5; - reL=tmp_6; - strL=tmp_7; - waiting=120; - forall(eqL, - tmp=indexof(#,"="); - tmp1=Toupper(substring(#,0,1)); - tmp2=substring(#,tmp,length(#)); - if(tmp1=="W", - waiting=parse(tmp2); - options=remove(options,[#]); - ); - ); - options=remove(options,reL); - wflg=0; - forall(strL, - tmp=Toupper(substring(#,0,1)); - if(tmp=="M", - wflg=1; - options=remove(options,[#]); - ); - if(tmp=="R", - wflg=-1; - options=remove(options,[#]); - ); - ); - tmp=apply(fdorg,if(isstring(#),"'"+#+"'",#)); - tmp=text(tmp); - fd=RSform(tmp,2); - tmp=textformat(reL,4); - tmp=substring(tmp,1,length(tmp)-1); - tmp=Rsform(tmp); - if(length(bdyeq)>0, - argR=","+Dqq(bdyeq); - , - argR=""; - ); - if(length(tmp)>0, - argR=argR+","+tmp; - ); - tmp1=[Dqq(fname),Dqq(name),"tmp"]; - cmdL=[ - "print",[Dqq("crvsf"+nm)], //18.02.22 - "crv="+crvstr,[], - "fd="+fd,[], - "tmp1=Intersectcrvsf(crv,fd"+argR+")",[], - "tmp=c()",[], - "for(j in Looprange(1,length(tmp1))){",[], - " tmp=Appendrow(tmp,tmp1[[j]])",[], - "}",[], - "WriteOutData",tmp1, - "tmp",[] - ]; - tmp=replace(fname,".txt","end.txt"); - options=concat(options,["Out=no","Wait="+text(waiting),"Res="+tmp]); - if(wflg==1,options=append(options,"m")); - if(wflg==-1,options=append(options,"r")); - if(ErrFlag==1, - err("Crvsfparadata not completed"); - , - CalcbyR("ans",cmdL,options); - ReadOutData(fname); - ); - println("generate "+name); - parse(name); -); - -Sfcutparadata(nm,eqstr,sf,fd):= - Sfcutparadata(nm,eqstr,sf,fd,[]); -Sfcutparadata(nm,eqstr,sf,fd,options):= - Sfcutparadata(nm,eqstr,sf,fd,options,["nodisp"]); -Sfcutparadata(nm,eqstr,sf,fdorg,optionorg,optionsh):=( -//help:Sfcutparadata("1","x+y+z=1","sfbd3d1",fd,"x+y+z=1"); -//help:Sfcutparadata(options2=[division(c(50,50)),Eps1(0.01), Eps2(0.05)]); - regional(gd,out,fd,options,name2,name3,name2h,name3h, - eqL,reL,strL,fname,rfname,waiting,tmp,tmp1,tmp2,tmp3,flg,wflg); - tmp=replace(sfcut,"3d","2d"); - Changestyle(tmp,["nodisp"]); - name2="sfcut2d"+nm; - name3="sfcut3d"+nm; - name2h="sfcuth2d"+nm; - name3h="sfcuth3d"+nm; - fname=Fhead+"sfcut"+nm+".txt"; - rfname=Fhead+sf+".txt"; - rfname=replace(rfname,"3d",""); - tmp=apply(fdorg,if(isstring(#),"'"+#+"'",#)); - tmp=text(tmp); - fd=RSform(tmp,2); - options=optionorg; - tmp=Divoptions(options); - eqL=tmp_5; - reL=tmp_6; - strL=tmp_7; - waiting=120; - forall(eqL, - tmp=indexof(#,"="); - tmp1=Toupper(substring(#,0,1)); - tmp2=substring(#,tmp,length(#)); - if(tmp1=="W", - waiting=parse(tmp2); - options=remove(options,[#]); - ); - ); - options=remove(options,reL); - wflg=0; - forall(strL, - tmp=Toupper(substring(#,0,1)); - if(tmp=="M", - wflg=1; - options=remove(options,[#]); - ); - if(tmp=="R", - wflg=-1; - options=remove(options,[#]); - ); - ); - reL=RSform(text(reL),2); - reL=substring(reL,5,length(reL)-1); - tmp=[Dqq(eqstr),sf,"fd"+nm]; - if(length(reL)>0, - reL=textformat(reL,4); - reL=substring(reL,1,length(reL)-1); - reL=Rsform(reL); - tmp=append(tmp,reL); - ); - tmp1=[DqDq(fname),DqDq(name3),name3,DqDq(name2),name2]; - tmp1=concat(tmp1,[DqDq(name3h),name3h,DqDq(name2h),name2h]); - tmp2=replace(rfname,".txt",".dat"); - cmdL=[ - "print",[Dqq("sfcut"+nm)], //18.02.22 - "fd"+nm+"="+fd,[], - "ReadOutData",[Dqq(rfname)], - "load",[Dqq(tmp2)], - name3+"=Sfcutparadata",tmp, - name2+"=Projpara",[name3], - name3h+"=CRVONSFHIDDENDATA",[], - name2h+"=Projpara",[name3h], - "WriteOutData",tmp1 - ]; - tmp=replace(fname,".txt","end.txt"); - options=concat(options,["Out=no","Wait="+text(waiting),"Res="+tmp]); - if(wflg==1,options=append(options,"m")); - if(wflg==-1,options=append(options,"r")); - if(ErrFlag==0, - CalcbyR("sfcut"+nm,cmdL,options); - ); - if(ErrFlag==1, - err("Sfcutparadata not completed"); - , - ReadOutData(fname); - if(islist(parse(name2)), - Extractdata(name2,options); - if(length(optionsh)>0,tmp=optionsh,tmp=["nodisp"]); - Extractdata(name2h,tmp); - , - ErrFlag=1; - ); - ); -); - -Skeletonparadata(nm):=Skeletondatacindy(nm,[]); -Skeletonparadata(nm,options):=Skeletondatacindy(nm,options); -Skeletonparadata(nm,pltdata1,pltdata2):=Skeletondatacindy(nm,pltdata1,pltdata2); -Skeletonparadata(nm,pltdata1org,pltdata2org,options):= - Skeletondatacindy(nm,pltdata1org,pltdata2org,options); - - -////////////// new skeleton 2018.01.04 not completed and slow//////////////// - -Skeletondatacindy(nm):=Skeletondatacindy(nm,[]); -Skeletondatacindy(nm,options):=( - regional(tmp); - tmp=Datalist3d(); - Skeletondatacindy(nm,tmp,tmp,options); -); -Skeletondatacindy(nm,pltdata1,pltdata2):= - Skeletondatacindy(nm,pltdata1,pltdata2,[]); -Skeletondatacindy(nm,pltdata1org,pltdata2org,options):=( -//help:Skeletonparadata("1"); -//help:Skeletonparadata("1",[pdata1,pdata2],[pdata3]); -//help:Skeletondata(options2=[1(width)]); - regional(Eps,Eps2,name2,name3,Ltype,Noflg,reL,opcindy, - Data,Out,ObjL,Plt3L,Rr,pltdata1,pltdata2,Plt2L,ObjL,ii,Data, - Obj3,jj,Gd,PtD,size,tmp,tmp1,tmp2); - name2="sk2d"+nm; - name3="sk3d"+nm; - pltdata1=[];// 16.01.31 - forall(pltdata1org,tmp1, - tmp=parse(tmp1); - pltdata1=append(pltdata1,tmp); - ); - pltdata2=[];// 16.01.31 - forall(pltdata2org,tmp1, - tmp=parse(tmp1); - pltdata2=append(pltdata2,tmp); - ); - tmp=Divoptions(options); - Ltype=tmp_1; - Noflg=tmp_2; - reL=tmp_6; //16.02.28 - opcindy=tmp_9; - Rr=0.15*1000/2.54/MilliIn; - size=1; - Eps2=0.05; - if(length(reL)>0, //16.02.28 - size=reL_1; - Rr=size*Rr; - if(length(reL)>1,Eps2=reL_2); - ); - Eps=10^(-4); - ObjL=Flattenlist(pltdata1); - PltL=Flattenlist(pltdata2); - Data=Makeskeletondata(ObjL,PltL,Rr); - Out=select(Data,length(Projcurve(#))>0); - Out=Flattenlist(Out); - tmp1=apply(Out,textformat(#,5)); - tmp=name3+"="+tmp1; - parse(tmp); - tmp=name2+"=Projcurve("+name3+");"; - parse(tmp); - Changestyle3d(pltdata1org,["nodisp"]); - if(Noflg<3, - println("generate skeleton :"+name3); - tmp1=text(pltdata1org); - tmp1="list("+substring(tmp1,1,length(tmp1)-1)+")"; - tmp2=text(pltdata2org); - tmp2="list("+substring(tmp2,1,length(tmp2)-1)+")"; - tmp=name3+"=Skeletonpara3data("+tmp1+","+tmp2+","; - tmp=tmp+text(size)+")"; - GLIST=append(GLIST,tmp); - tmp=name2+"=Projpara("+name3+")"; - GLIST=append(GLIST,tmp); - ); - if(Noflg<2, - if(isstring(Ltype), - Ltype=GetLinestyle(text(Noflg)+Ltype,name2); - , - if(Noflg==1,Ltype=0); - ); - GCLIST=append(GCLIST,[name2,Ltype,opcindy]); - if(SUBSCR==1, - Subgraph(name3,opcindy); - ); - ); - Out; -); - -Makeskeletondata(ObjL,PltL,R0):=( - regional(Allres,res,Eps1,obj,plt,obj2,remov,flg,koc,z1,z2,Rr,str, - mm,nn,kk,ptk,pL,pt,ptL,tmp,tmp1,tmp2,tmp3,tmp3d); - Eps1=10.0^(-2); - Allres=[]; - forall(1..(length(ObjL)),mm, - obj=ObjL_mm; - remov=[]; - obj2=Projcurve(obj); - forall(1..(length(PltL)),nn, - plt=PltL_nn; - tmp=Projcurve(plt); - koc=IntersectcurvesPp(obj2,tmp); - forall(1..(length(koc)),kk, - ptk=koc_kk; - tmp=PointonCurve(ptk_2,obj); - z1=Zparapt(tmp); - tmp=PointonCurve(ptk_3,plt); - z2=Zparapt(tmp); - if(z1<z2-Eps1, - tmp=max([sqrt(1-(ptk_5)^2),0.75]); - Rr=R0/tmp; - tmp2=[]; - flg=0; - tmp=reverse(1..(floor(ptk_2))); - forall(tmp, - if(flg==0, - if(|obj2_#-ptk_1|>Rr, - tmp2=[#]; - flg=1; - ); - ); - ); - if(length(tmp2)==0,tmp2=[1]); - flg=0; - tmp=(ceil(ptk_2))..(length(obj2)); - forall(tmp, - if(flg==0, - if(|obj2_#-ptk_1|>Rr, - tmp2=append(tmp2,#); - flg=1; - ); - ); - ); - if(length(tmp2)==1,tmp2=append(tmp2,length(obj2))); - tmp=obj2_((tmp2_1)..(tmp2_2)); - tmp1=Circledata("",[ptk_1,ptk_1+[Rr,0]],["Num=8","nodata"]); - tmp1=Intersectcurves(tmp,tmp1); - if(length(tmp1)==2, - tmp=sort([tmp1_1_2,tmp1_2_2]); - tmp=[[tmp2_1-1+tmp_1,1],[tmp2_1-1+tmp_2,-1]]; - remov=concat(remov,tmp); - ); - if(length(tmp1)==1, - if(tmp2_1==1, - tmp=[[1,1],[tmp2_1-1+tmp1_1_2,-1]]; - , - tmp=[[tmp2_1-1+tmp1_1_2,1],[length(obj2),-1]]; - ); - remov=concat(remov,tmp); - ); - ); - ); - ); - if(length(remov)==0, - res=obj; - , - res=[]; - remov=sort(remov,[#_1,#_2]); - tmp=select(remov,#_1<1-Eps1); - if(length(tmp)==0, - flg=0; - res=[1]; - , - flg=length(tmp); - res=[]; - ); - forall(remov, - tmp=flg; - if(#_2==-1, - flg=flg-1; - if(flg==0,res=append(res,#_1)); - ); - if(#_2==1, - flg=flg+1; - if(tmp==0,res=append(res,#_1)); - ); - ); - if((flg==0)&(res_(length(res))<length(obj)), - res=append(res,length(obj)); - ); - tmp=res; - res=[]; - forall(1..(length(tmp)/2),nn, - tmp1=tmp_(2*nn-1); - tmp2=tmp_(2*nn); - pL=(ceil(tmp1))..(floor(tmp2)); - if(tmp1<ceil(tmp1)-Eps1,pL=prepend(tmp1,pL)); - if(tmp2>floor(tmp2)+Eps1,pL=append(pL,tmp2)); - ptL=[]; - forall(pL, - pt=PointonCurve(#,obj); - ptL=append(ptL,pt); - ); - res=append(res,ptL); - ); - ); - Allres=append(Allres,res); - ); - Allres; -); - -////////////// current skeleton 2018.01.04 //////////////// - -Skeletondatacindy(nm):=Skeletondatacindy(nm,[]); -Skeletondatacindy(nm,options):=( - regional(tmp); - tmp=Datalist3d(); - Skeletondatacindy(nm,tmp,tmp,options); -); -Skeletondatacindy(nm,pltdata1,pltdata2):= - Skeletondatacindy(nm,pltdata1,pltdata2,[]); -Skeletondatacindy(nm,pltdata1org,pltdata2org,options):=( -//help:Skeletondatacindy("1"); -//help:Skeletondatacindy("1",[pdata1,pdata2],[pdata3]); -//help:Skeletondatacindy(options2=[1(width)]); - regional(Eps,Eps2,name2,name3,Ltype,Noflg,reL,opcindy, - Out,ObjL,Plt3L,Rr,pltdata1,pltdata2,Plt2L,ObjL,ii,Data, - Obj3,jj,Gd,PtD,size,tmp,tmp1,tmp2); - name2="sk2d"+nm; - name3="sk3d"+nm; - pltdata1=[];// 16.01.31 - forall(pltdata1org,tmp1, - tmp=parse(tmp1); - pltdata1=append(pltdata1,tmp); - ); - pltdata2=[];// 16.01.31 - forall(pltdata2org,tmp1, - tmp=parse(tmp1); - pltdata2=append(pltdata2,tmp); - ); - tmp=Divoptions(options); - Ltype=tmp_1; - Noflg=tmp_2; - reL=tmp_6; //16.02.28 - opcindy=tmp_9; - Rr=0.075*1000/2.54/MilliIn; - size=1; - Eps2=0.05; - if(length(reL)>0, //16.02.28 - size=reL_1; - Rr=size*Rr; - if(length(reL)>1,Eps2=reL_2); - ); - Eps=10^(-4); - ObjL=Flattenlist(pltdata1); - Plt3L=Flattenlist(pltdata2); - tmp=apply(Plt3L,ProjcoordCurve(#)); - Plt2L=Flattenlist(tmp); -/////////// tmp=apply(pltdata1,replace(#,"3d","2d")); - Out=[]; - forall(1..(length(ObjL)),ii, - Obj3=ObjL_ii; - tmp=ProjcoordCurve(Obj3); - Data=Makeskeletondata([tmp],Plt2L,Rr,Eps2); - forall(1..(length(Data)),jj, - Gd=Data_jj; - if((length(Gd)>1) - & (norm(Ptcrv(1,Gd)-Ptcrv(2,Gd))>Eps), - PtD=[]; - forall(1..(length(Gd)), - tmp=Gd_#; - tmp1=Invparapt(tmp,Obj3); - PtD=append(PtD,tmp1); - ); - Out=append(Out,PtD); - ); - ); - ); - Out=select(Out,length(Projcurve(#))>0); // 16.12.19 - tmp1=apply(Out,textformat(#,5)); - tmp=name3+"="+tmp1; - parse(tmp); - tmp=name2+"=Projcurve("+tmp1+");"; - parse(tmp); - Changestyle3d(pltdata1org,["nodisp"]); - if(Noflg<3, - println("generate skeleton :"+name3); - tmp1=text(pltdata1org); - tmp1="list("+substring(tmp1,1,length(tmp1)-1)+")"; - tmp2=text(pltdata2org); - tmp2="list("+substring(tmp2,1,length(tmp2)-1)+")"; - tmp=name3+"=Skeletonpara3data("+tmp1+","+tmp2+","; - tmp=tmp+text(size)+")"; - GLIST=append(GLIST,tmp); - tmp=name2+"=Projpara("+name3+")"; - GLIST=append(GLIST,tmp); - ); - if(Noflg<2, - if(isstring(Ltype), - Ltype=GetLinestyle(text(Noflg)+Ltype,name2); - , - if(Noflg==1,Ltype=0); - ); - GCLIST=append(GCLIST,[name2,Ltype,opcindy]); - if(SUBSCR==1, - Subgraph(name3,opcindy); - ); - ); - Out; -); - -Makeskeletondata(Obj2L,Plt2L,R0,Eps2):=( - regional(Allres,Eps,Dmat,Dind,ii,Dt,nn1,nn2,Nind,Nobj, - Plt2,PhL,ClipL,ns,pt1,pt2,pt,pta,ptb,za,zb,z1,z2,t1,t2,te, - koc,KukanL,nn,tt,Rr,Flg,ii,jj,ptq,hh,Ku,Res,contflg,breakflg); - Eps=10.0^(-4); - Dmat=[]; - Dind=[]; - forall(1..(length(Plt2L)),ii, - Dt=Plt2L_ii; - nn1=length(Dmat)+1; - Dmat=concat(Dmat,Dt); - nn2=length(Dmat); - Dind=append(Dind,[nn1,nn2]); - ); - Nind=length(Dind); - Allres=[]; - forall(1..(length(Obj2L)),Nobj, - Plt2=Obj2L_Nobj; - PhL=Columnlist(Plt2,1..2); - ClipL=[]; - forall(1..(length(PhL)-1),ns, - pt1=PhL_(ns..(ns+1)); - forall(1..(length(Dind)),ii, - tmp=Dind_ii; - tmp=Dmat_(Dind_ii_1..Dind_ii_2); - pt2=Columnlist(tmp,1..2); - koc=IntersectcrvsPp(pt1,pt2,[Eps]); - if(length(koc)>0, - breakflg=0; - forall(1..(length(koc)),jj, - contflg=0; - if(breakflg==0, - pt=Op(1,Op(jj,koc)); - tmp=Op(2,Op(jj,koc)); - if((tmp<1+Eps) & (ns==1), - contflg=1; - ); - if(contflg==0, - if((tmp>length(pt1)-Eps) - & (ns==length(PhL)-1), - contflg=1; - ); - ); - if(contflg==0, - nn1=ns; - nn2=Op(3,Op(jj,koc)); - tmp=Plt2_nn1; - pta=tmp_(1..2); - za=tmp_3; - tmp=Plt2_(nn1+1); - ptb=tmp_(1..2); - zb=tmp_3; - if(norm(pta-ptb)<Eps, - contflg=1; - ); - ); - if(contflg==0, - t1=norm(pta-pt)/norm(pta-ptb); - z1=(1-t1)*za+t1*zb; - tmp=Dmat_(Dind_ii_1..Dind_ii_2); - tmp1=tmp_nn2; - pta=tmp1_(1..2); - za=tmp1_3; - tmp2=tmp_(nn2+1); - ptb=tmp2_(1..2); - zb=tmp2_3; - if(norm(pta-ptb)<Eps, - contflg=1; - ); - ); - if(contflg==0, - t2=norm(pta-pt)/norm(pta-ptb); - z2=(1-t2)*za+t2*zb; - if(z1<z2-Eps2, - if(length(ClipL)==0, - tmp=1; - , - tmp1=column(ClipL,1); - tmp1=apply(tmp1,#-pt_1); - tmp2=column(ClipL,2); - tmp2=apply(tmp2,#-pt_2); - tmp3=apply(tmp1,#^2)+apply(tmp2,#^2); - tmp=min(tmp3); - ); - if(tmp>Eps^2, - tmp1=pt1_2-pt1_1; - tmp2=ptb-pta; - tmp3=Dotprod(tmp1,tmp2); - tmp3=tmp3/norm(tmp1)/norm(tmp2); - tmp=1-0.5*tmp3^2; - tmp1=concat(pt,[nn1,t1,R0/tmp]); - ClipL=append(ClipL,tmp1); - ); - ); - ); - ); - ); - ); - ); - ); - te=length(Plt2); - KukanL=[[1.0,te]]; - pt1=PhL; - if(length(ClipL)>0, - forall(1..(length(ClipL)),ii, - tmp=ClipL_ii; - pt=tmp_(1..2); - nn=tmp_3; - tt=nn+tmp_4; - Rr=tmp_5; - Flg=0; - breakflg=0; - forall(reverse(1..nn),jj, - contflg=0; - if(breakflg==0, - ptq=PointonCurve(jj,pt1); - if(norm(pt-ptq)<Rr, - contflg=1; - ); - if(contflg==0, - Flg=jj; - breakflg=1; - contflg=1; - ); - ); - ); - if(Flg==0, - t1=1; - , - t1=Flg; t2=tt; - hh=t2-t1; - forall(1..10, - hh=hh*0.5; - ptq=PointonCurve(t1+hh,pt1); - if(norm(pt-ptq)<Rr, - t2=t2-hh; - , - t1=t1+hh; - ); - ); - ); - Ku=[t1]; - Flg=0; - breakflg=0; - forall((nn+1)..te,jj, - contflg=0; - if(breakflg==0, - ptq=PointonCurve(jj,pt1); - if(norm(pt-ptq)<Rr, - contflg=1; - ); - if(contflg==0, - Flg=jj; - breakflg=1; - contflg=1; - ); - ); - ); - if(Flg==0, - t2=te; - , - t1=tt; t2=Flg; - hh=t2-t1; - forall(1..10, - hh=hh*0.5; - ptq=PointonCurve(t1+hh,pt1); - if(norm(pt-ptq)<Rr, - t1=t1+hh; - , - t2=t2-hh; - ); - ); - ); - Ku=append(Ku,t2); - KukanL=Kukannozoku(Ku,KukanL); - ); - ); - Res=[]; - forall(1..(length(KukanL)),ii, - tmp=KukanL_ii; - t1=tmp_1; nn1=floor(t1); - t2=tmp_2; nn2=floor(t2); - PtL=[]; - if(t1-nn1<1-Eps, - tmp=PointonCurve(t1,pt1); - PtL=[tmp]; - ); - forall((nn1+1)..nn2,jj, - tmp=PointonCurve(jj,pt1); - PtL=append(PtL,tmp); - ); - if(t2-nn2>Eps, - tmp=PointonCurve(t2,pt1); - PtL=append(PtL,tmp); - ); - tmp=Listplot("",PtL,["nodata"]); - Res=append(Res,tmp); - ); - Allres=concat(Allres,Res); - ); - Allres; -); - -Kukannozoku(Jokyo,KukanL):=( - regional(Res,Eps,nn,ii,t1,t2,Ku,Flg,contflg,tmp,tmp1); - Eps=10^(-6); - nn=length(KukanL); - t1=Jokyo_1; t2=Jokyo_2; - tmp=KukanL_1; - t1=max(t1,tmp_1); - tmp=KukanL_nn; - t2=min(t2,tmp_2); - Res=[]; - Flg=0; - contflg=0; - forall(1..nn,ii, - if(contflg==0, - Ku=KukanL_ii; - if(Flg==0, - if(Ku_2<t1, - Res=append(Res,Ku); - , - Flg=1; - if(Ku_1<t1-Eps, - tmp=[Ku_1,t1]; - Res=append(Res,tmp); - ); - if(Ku_2>t2+Eps, - tmp=[t2,Ku_2]; - Res=append(Res,tmp); - ); - ); - , - if(Flg==1, - if(Ku_2<t2, - contflg=1; - , - if(contflg==0, - Flg=2; - if(Ku_1<t2-Eps, - Ku=[t2,Ku_2]; - ); - Res=append(Res,Ku); - ); - ); - , - if(contflg==0, - Res=append(Res,Ku); - ); - ); - ); - ); - ); - Res; -); - -////////////////// end of current skeleton////////////// - -ProjcoordCurve(Curve):=( - regional(SP,CP,ST,CT,Out,jj,pt,x,y,z,xz,yz,zz); - SP=sin(PHI); CP=cos(PHI); - ST=sin(THETA); CT=cos(THETA); - Out=[]; - forall(1..(length(Curve)),jj, - pt=Curve_jj; - x=pt_1; y=pt_2; z=pt_3; - xz=-x*SP+y*CP; - yz=-x*CP*CT-y*SP*CT+z*ST; - zz=x*CP*ST+y*SP*ST+z*CT; - Out=append(Out,[xz,yz,zz]); - ); - Out; -); - -Divnohidhid(nm,dt3dorg,nvec):=Divnohidhid(nm,dt3dorg,nvec,[],["do"]); -Divnohidhid(nm,dt3dorg,nvec,optionorg,options2):=( -//help:Divnohidhid("1","sc3d1",nvec,["Num=100"],["Num=100","do"]); - regional(name,dt3d,options,pvec,disp,nohid,hid,flg,tmp,tmp1,eqL); - name="nh"+nm; - options=optionorg; - tmp=Divoptions(options); - eqL=tmp_5; - disp="Y"; - forall(eqL, - tmp=Toupper(substring(#,0,1)); - if(tmp=="D", - tmp=indexof(#,"="); - disp=Toupper(substring(#,tmp,tmp+1)); - options=remove(options,[#]); - ); - ); - if(isstring(dt3dorg),dt3d=parse(dt3dorg),dt3d=dt3dorg); - pvec=[sin(THETA)*cos(PHI),sin(THETA)*sin(PHI),cos(THETA)]; - nohid=[]; - hid=[]; - flg=0; - forall(1..(length(dt3d)-1), - p1=dt3d_#; - p2=dt3d_(#+1); - tmp=assign(nvec,["x",p1_1,"y",p1_2,"z",p1_3]); - tmp=parse(tmp); - if(Dotprod(tmp,pvec)>0, - if(flg==0 % flg==-1, - nohid=append(nohid,[p1,p2]); - flg=1; - ); - if(flg==1, - nohid_(length(nohid))=append(nohid_(length(nohid)),p2); - ); - , - if(flg==0 % flg==1, - hid=append(hid,[p1,p2]); - flg=-1; - ); - if(flg==-1, - hid_(length(hid))=append(hid_(length(hid)),p2); - ); - ); - ); - if(disp=="Y", - Changestyle3d([dt3dorg],["nodisp"]); - forall(1..length(nohid), - Spaceline(name+"nh"+text(#),nohid_#,options); - ); - forall(1..length(hid), - Spaceline(name+"h"+text(#),hid_#,options2); - ); - ); - tmp1="["; - forall(nohid,tmp1=tmp1+textformat(#,5)+","); - tmp1=substring(tmp1,0,length(tmp1)-1)+"]"; - parse(name+"nh="+tmp1); - tmp1="["; - forall(hid,tmp1=tmp1+textformat(#,5)+","); - tmp1=substring(tmp1,0,length(tmp1)-1)+"]"; - parse(name+"h="+tmp1); - [nohid,hid]; -); - -Beziersurf(nm,m,n,pL):=( -//help:Beziersurf("pt",2,2,pL); - regional(p3dL,ptlistx,ptlilsty,ptlistz); - factorial(n):=( - regional(out); - out=1; - forall(1..n, - out=out*#; - ); - out; - ); - Deffun("Comb(n,r)",[ - "regional(y)", - "y=factorial(n)/(factorial(r)*factorial(n-r))", - "y" - ]); - Deffun("Bterm(u,v,m,n,i,j)",[ - "regional(y)", - "y=Comb(m,i)*u^i*(1-u)^(m-i)", - "y=y*Comb(n,j)*v^j*(1-v)^(n-j)", - "y" - ]); - Deffun("Ball(u,v,m,n,pL)",[ - "regional(y,ii,jj,tmp,tmp1)", - "y=0", - "forall(0..m,ii, - forall(0..n,jj, - tmp=(n+1)*ii+jj+1; - tmp1=Op(tmp,pL); - tmp1=tmp1*Bterm(u,v,m,n,ii,jj); - y=y+tmp1; - ) - )", - "y" - ]); - if(ispoint(pL_1), - p3dL=apply(pL,parse(text(#)+"3d")); - , - p3dL=apply(pL,parse(#+"3d")); - ); - ptlistx=apply(p3dL,#_1); - ptlisty=apply(p3dL,#_2); - ptlistz=apply(p3dL,#_3); - Defvar(nm+"x",ptlistx); - Defvar(nm+"y",ptlisty); - Defvar(nm+"z",ptlistz); - tmp=[ - "p", - "x=Ball(U,V,2,2,"+nm+"x)", - "y=Ball(U,V,2,2,"+nm+"y)", - "z=Ball(U,V,2,2,"+nm+"z)", - "U=[0,1]", - "V=[0,1]" - ]; - tmp; -); - -//help:end(); |