* Patch from Bezier Control Points, (C) EMA 1998, LM:20.12.98 INTERNAL INTEGER ER,I,I1,I2,J,J1,J2,K,L,M1,M2,N,O1,O2,MAX1,MAX2,UV1(2),UV2(2), % NU1,NV1,NU2,NV2,UPTCH1,VPTCH1,UPTCH2,VPTCH2,NU,RET1,RET2,MOD, % ENV,ID1,ID2,ID3,ID4,ID5,INDEX(6) REAL X(3),U,V,D1,D2,D3,D4,R,W,P(3,256),P1(3,256),P2(3,256),VAL(5), % PX(3,256),VEC(3,3),V1(3),V2(3),W1(3),W2(3), % DEV FORMAT 6/3,TGT(6,3) CHAR*35 CEMA INIT '----D E M O---- Patch, (C) Ema 1998' SUR SUR1,SUR2,SUR3,SUR4,SUR5 PT PT1,PT2,PT(7) LN LN1,LN2 CRV CRV1,CRV2,CRV1DUP,CRV2DUP,SPLINE UNDEFLM S1(4),S2(4),S,T,G1(4),G2(4),A1,A2,E1,E2,AXS LOGICAL SWAP PROC LABEL SUR1 NOHIGHLT E1,E2 LET SUR1=NULL LET CRV1=NULL LET LN1=NULL LET PT1=NULL LET E1=NULL ERASE G1(1),G1(2),G1(3),G1(4),G2(1),G2(2),G2(3),G2(4),CRV1DUP,CRV2DUP IF(S1(1)NE NULL)LOAD GICSHO 1,S1(1),0,ER IF(S1(2)NE NULL)LOAD GICSHO 1,S1(2),0,ER IF(S1(3)NE NULL)LOAD GICSHO 1,S1(3),0,ER IF(S1(4)NE NULL)LOAD GICSHO 1,S1(4),0,ER IF(S2(1)NE NULL)LOAD GICSHO 1,S2(1),0,ER IF(S2(2)NE NULL)LOAD GICSHO 1,S2(2),0,ER IF(S2(3)NE NULL)LOAD GICSHO 1,S2(3),0,ER IF(S2(4)NE NULL)LOAD GICSHO 1,S2(4),0,ER LOAD GICTMM 1,ER SELECT 'Select SUR1,CRV1,LN1,PT1 // YES:END'//CEMA E1,YES,NO IF(KODE EQ YES)THEN EOE BLOCKIF(KODE EQ SEL)THEN HIGHLT E1 IF(TYPP(E1)EQ 5)THEN SUR1_SEL IF(TYPP(E1)EQ 3)THEN CRV1_SEL IF(TYPP(E1)EQ 2)THEN LN1_SEL IF(TYPP(E1)EQ 1)THEN PT1_SEL IF(TYPP(E1)GE 20)AND(TYPP(E1)LE 23)THEN CON1_SEL BEEP MSGCNTL 'INVALID ELEMENT' BRANCH SUR1 ENDIF ERASE SUR3 MSGCNTL 'PATCH DELETED' BRANCH SUR1 ************************************************** SUR1 selected ******* LABEL SUR1_SEL LET RET1=1 LET SUR1=E1 BLOCKIF(SUR1 EQ SUR3)THEN IF((MOD GE 2)AND(MOD LE 4))ERASE SUR3 BLOCKIF(SWAP)THEN LET SWAP=FALSE ELSE LET SWAP=TRUE ENDIF IF(MOD EQ 2)THEN SWAP_S_S IF(MOD EQ 3)THEN SWAP_S_C IF(MOD EQ 4)THEN SWAP_C_C ENDIF LOAD GUMCOP PX,6144,P,ER LOAD GUMCOP PX,6144,P1,ER LOAD GUMCOP PX,6144,P2,ER LOAD GSLILI 1,SUR1,UV1,UV2,ER LET UV1(1)=(UV2(1)-1)/2+1 LET UV1(2)=(UV2(2)-1)/2+1 LET U=1-UV2(1)/2.+UV2(1)/2 LET V=1-UV2(2)/2.+UV2(2)/2 LOAD GSOIBP 1,SUR1,UV1(1),U,1,0.,1,X,VAL,ER LOAD GCWTPT 1,12,X,S1(1),ER LOAD GSOIBP 1,SUR1,UV2(1),1.,UV1(2),V,1,X,VAL,ER LOAD GCWTPT 1,12,X,S1(2),ER LOAD GSOIBP 1,SUR1,UV1(1),U,UV2(2),1.,1,X,VAL,ER LOAD GCWTPT 1,12,X,S1(3),ER LOAD GSOIBP 1,SUR1,1,.0,UV1(2),V,1,X,VAL,ER LOAD GCWTPT 1,12,X,S1(4),ER BLOCKIF(UV2(2)NE 1)THEN LOAD GCWTNU 1,S1(4),' CRV',0,G1(4),ER LOAD GCWTNU 1,S1(2),' CRV',0,G1(2),ER LOAD GICPIC 1,S1(2),0,ER LOAD GICPIC 1,S1(4),0,ER ELSE LOAD GCWTNU 1,S1(4),' ARC',0,G1(4),ER LOAD GCWTNU 1,S1(2),' ARC',0,G1(2),ER ENDIF BLOCKIF(UV2(1)NE 1)THEN LOAD GCWTNU 1,S1(3),' CRV',0,G1(3),ER LOAD GCWTNU 1,S1(1),' CRV',0,G1(1),ER LOAD GICPIC 1,S1(3),0,ER LOAD GICPIC 1,S1(1),0,ER ELSE LOAD GCWTNU 1,S1(3),' ARC',0,G1(3),ER LOAD GCWTNU 1,S1(1),' ARC',0,G1(1),ER ENDIF LOAD GICPIC 1,G1(1),0,ER LOAD GICPIC 1,G1(2),0,ER LOAD GICPIC 1,G1(3),0,ER LOAD GICPIC 1,G1(4),0,ER LABEL SYMB1 SELECT 'Sel. symbol 1 // YES:END '//CEMA S,YES,NO IF(KODE EQ YES)THEN EOE IF(KODE EQ NO)THEN SUR1 BLOCKIF((S NE S1(1))AND(S NE S1(2))AND(S NE S1(3))AND(S NE S1(4)))THEN BEEP MSGCNTL 'INVALID SELECTION' BRANCH SYMB1 ENDIF HIGHLT S BRANCH SUR2 ************************************************** CRV1 selected ******* LABEL CRV1_SEL LET RET1=2 LET CRV1=E1 LABEL APROX1 LOAD GSDICV 1,CRV1,N,UV1,X,NU1,X,I,X,X,ER IF(N EQ 1)THEN SUR2 BEEP MSGCNTL 'CURVE FROM SEVERAL ARCS' MSG 'YES:aproximate curve to arc '//CEMA YES,NO IF(KODE EQ NO)THEN SUR1 LOAD GSOICL 1,CRV1,PT(7),PT(6),ER LOAD GSOOOC 1,CRV1,PT(7),PT(6),0.,4,PT,ER LET PT(5)=PT(4) LET PT(4)=PT(3) LET PT(3)=PT(2) LET PT(2)=PT(1) LET PT(1)=PT(7) LOAD GSCSM1 1,6,PT,TGT,INDEX,5,SPLINE,ER ERASE CRV1DUP LOAD GSMACV 1,SPLINE,1,1,3,0,CRV1DUP,I,I,DEV,ER ERASE PT(1),PT(2),PT(3),PT(4),PT(5),PT(6),PT(7),SPLINE MSGCNTL 'MAX.APPROX.DEVIATION:'//CHCONV(DEV) LET CRV1=CRV1DUP BRANCH SUR2 ************************************************** CONIC1 selected ***** LABEL CON1_SEL LET RET1=2 LOAD GSCTKA 1,E1,CRV1,ER LET CRV1DUP=CRV1 BRANCH APROX1 ************************************************** LN1 selected ******** LABEL LN1_SEL LET RET1=2 LOAD GICTEM ER LOAD GSCTMP 1,E1,CRV1,ER LET CRV1DUP=CRV1 BRANCH SUR2 ************************************************** PT1 selected ******** LABEL PT1_SEL LET PT1=E1 LET RET1=4 LABEL SUR2 IF(CRV1DUP NE NULL)LOAD GICSHO 1,CRV1DUP,0,ER LOAD GIRENV I,AXS,ENV,ER LET ENV=2*ENV-I NOHIGHLT E2 LET SUR2=NULL LET CRV2=NULL LET LN2=NULL LET PT2=NULL LET E2=NULL HIGHLT E1 ERASE S2(2),S2(4),S2(1),S2(3),G2(1),G2(2),G2(3),G2(4),CRV2DUP SELECT 'Select SUR2,CRV2,LN2,PT2 // YES:END'//CEMA E2,YES,NO IF(KODE EQ YES)THEN EOE BLOCKIF(KODE EQ SEL)THEN HIGHLT E2 IF(TYPP(E2)EQ 5)THEN SUR2_SEL IF(TYPP(E2)EQ 3)THEN CRV2_SEL IF(TYPP(E2)EQ 2)THEN LN2_SEL IF(TYPP(E2)EQ 1)THEN PT2_SEL IF(TYPP(E2)GE 20)AND(TYPP(E2)LE 23)THEN CON2_SEL BEEP MSGCNTL 'INVALID ELEMENT' BRANCH SUR2 ENDIF NOHIGHLT S1(1),S1(2),S1(3),S1(4) MSGCNTL 'Step back' IF(RET1 EQ 1)BRANCH SYMB1 IF(RET1 NE 1)BRANCH SUR1 ************************************************** SUR2 selected ******* LABEL SUR2_SEL LET RET2=1 LET SUR2=E2 BLOCKIF(SUR2 EQ SUR1)THEN BEEP MSGCNTL 'SURFACE ALREADY SELECTED' BRANCH SUR2 ENDIF LOAD GSLILI 1,SUR2,UV1,UV2,ER LET UV1(1)=(UV2(1)-1)/2+1 LET UV1(2)=(UV2(2)-1)/2+1 LET U=1-UV2(1)/2.+UV2(1)/2 LET V=1-UV2(2)/2.+UV2(2)/2 LOAD GSOIBP 1,SUR2,UV1(1),U,1,0.,1,X,VAL,ER LOAD GCWTPT 1,12,X,S2(1),ER LOAD GSOIBP 1,SUR2,UV2(1),1.,UV1(2),V,1,X,VAL,ER LOAD GCWTPT 1,12,X,S2(2),ER LOAD GSOIBP 1,SUR2,UV1(1),U,UV2(2),1.,1,X,VAL,ER LOAD GCWTPT 1,12,X,S2(3),ER LOAD GSOIBP 1,SUR2,1,.0,UV1(2),V,1,X,VAL,ER LOAD GCWTPT 1,12,X,S2(4),ER BLOCKIF(UV2(2)NE 1)THEN LOAD GCWTNU 1,S2(4),' CRV',0,G2(4),ER LOAD GCWTNU 1,S2(2),' CRV',0,G2(2),ER LOAD GICPIC 1,S2(4),0,ER LOAD GICPIC 1,S2(2),0,ER ELSE LOAD GCWTNU 1,S2(4),' ARC',0,G2(4),ER LOAD GCWTNU 1,S2(2),' ARC',0,G2(2),ER ENDIF BLOCKIF(UV2(1)NE 1)THEN LOAD GCWTNU 1,S2(3),' CRV',0,G2(3),ER LOAD GCWTNU 1,S2(1),' CRV',0,G2(1),ER LOAD GICPIC 1,S2(3),0,ER LOAD GICPIC 1,S2(1),0,ER ELSE LOAD GCWTNU 1,S2(3),' ARC',0,G2(3),ER LOAD GCWTNU 1,S2(1),' ARC',0,G2(1),ER ENDIF LOAD GICPIC 1,G2(1),0,ER LOAD GICPIC 1,G2(2),0,ER LOAD GICPIC 1,G2(3),0,ER LOAD GICPIC 1,G2(4),0,ER LABEL SYMB2 SELECT 'Sel. symbol 2 // YES:END '//CEMA T,YES,NO IF(KODE EQ YES)THEN EOE IF(KODE EQ NO)THEN SUR2 BLOCKIF((T NE S2(1))AND(T NE S2(2))AND(T NE S2(3))AND(T NE S2(4)))THEN BEEP MSGCNTL 'INVALID SELECTION' BRANCH SYMB2 ENDIF HIGHLT T IF(RET1 EQ 1)THEN GO_ON LET SUR1=SUR2 LET S=T LET S1(1)=S2(1) LET S1(2)=S2(2) LET S1(3)=S2(3) LET S1(4)=S2(4) LET CRV2=CRV1 LET PT2=PT1 BRANCH GO_ON ************************************************** CRV2 selected ******* LABEL CRV2_SEL LET RET2=2 LET CRV2=E2 IF(CRV2 EQ CRV1)THEN ERR_SEL LABEL APROX2 LOAD GSDICV 1,CRV2,N,UV2,X,NU2,X,I,X,X,ER IF((RET1 EQ 4)AND(N EQ 1))LET CRV1=CRV2 IF((RET1 EQ 4)AND(N EQ 1))LET PT2=PT1 IF(N EQ 1)BRANCH GO_ON BEEP MSGCNTL 'CURVE FROM SEVERAL ARCS' MSG 'YES:aproximate curve to arc '//CEMA YES,NO IF(KODE EQ NO)THEN SUR2 LOAD GSOICL 1,CRV2,PT(7),PT(6),ER LOAD GSOOOC 1,CRV2,PT(7),PT(6),0.,4,PT,ER LET PT(5)=PT(4) LET PT(4)=PT(3) LET PT(3)=PT(2) LET PT(2)=PT(1) LET PT(1)=PT(7) LOAD GSCSM1 1,6,PT,TGT,INDEX,5,SPLINE,ER ERASE CRV2DUP LOAD GSMACV 1,SPLINE,1,1,3,0,CRV2DUP,I,I,DEV,ER ERASE PT(1),PT(2),PT(3),PT(4),PT(5),PT(6),PT(7),SPLINE MSGCNTL 'MAX.APPROX.DEVIATION:'//CHCONV(DEV) LET CRV2=CRV2DUP BRANCH GO_ON ************************************************** CONIC2 selected ***** LABEL CON2_SEL LET RET2=2 LOAD GSCTKA 1,E2,CRV2,ER LET CRV2DUP=CRV2 BRANCH APROX2 ************************************************** LN2 selected ******** LABEL LN2_SEL LET RET2=2 LET LN2=E2 IF(LN2 EQ LN1)THEN ERR_SEL LOAD GICTEM ER LOAD GSCTMP 1,LN2,CRV2,ER LET CRV2DUP=CRV2 IF(RET1 EQ 4)LET CRV1=CRV2 IF(RET1 EQ 4)LET PT2=PT1 BRANCH GO_ON ************************************************** PT2 selected ******** LABEL PT2_SEL LET RET2=4 LET PT2=E2 BLOCKIF(PT2 EQ PT1)THEN LABEL ERR_SEL BEEP MSGCNTL 'ELEMENT ALREADY SELECTED' BRANCH SUR2 ENDIF BLOCKIF(RET1 EQ 4)THEN BEEP MSGCNTL '2 POINTS SELECTED, NO SOLUTIONS' BRANCH SUR2 ENDIF ************************************************** GO ON *************** LABEL GO_ON IF(CRV2DUP NE NULL)LOAD GICSHO 1,CRV2DUP,0,ER LET MOD=RET1+RET2 IF(ENV NE 2)THEN SUR1 IF(MOD EQ 2)THEN SUR_SUR IF(MOD EQ 3)THEN SUR_CRV IF(MOD EQ 4)THEN CRV_CRV IF(MOD EQ 5)THEN SUR_PT IF(MOD EQ 6)THEN CRV_PT BEEP MSGCNTL 'INVALID MOD, NO SOLUTION' BRANCH SUR1 ** MOD=2 ******************* COMPUTATION * START * SUR SUR ************* LABEL SUR_SUR LET UPTCH1=1 LET VPTCH1=1 LOAD GSDISF 1,SUR1,I,J,NU1,NV1,R,R,ER IF(S1(2)EQ S)LET UPTCH1=I IF(S1(3)EQ S)LET VPTCH1=J LOAD GSOIMH 1,SUR1,UPTCH1,VPTCH1,P1,NU1,NV1,ER LET UPTCH2=1 LET VPTCH2=1 LOAD GSDISF 1,SUR2,I,J,NU2,NV2,R,R,ER IF(S2(2)EQ T)LET UPTCH2=I IF(S2(3)EQ T)LET VPTCH2=J LOAD GSOIMH 1,SUR2,UPTCH2,VPTCH2,P2,NU2,NV2,ER IF((S1(1)EQ S)OR(S1(3)EQ S))LET MAX1=NU1 IF((S1(2)EQ S)OR(S1(4)EQ S))LET MAX1=NV1 IF((S2(1)EQ T)OR(S2(3)EQ T))LET MAX2=NU2 IF((S2(2)EQ T)OR(S2(4)EQ T))LET MAX2=NV2 BLOCKIF(MAX1 NE MAX2)THEN LET X(1)=0. LET X(2)=1. LET X(3)=0. LET I=1 LET J=1 BLOCKIF(MAX1 LT MAX2)THEN DO BLOCKIF((P1(1,I)NE 0.)OR(P1(2,I)NE 0.)OR(P1(3,I)NE 0.))THEN LET P(1,J)=P1(1,I) LET P(2,J)=P1(2,I) LET P(3,J)=P1(3,I) LET J=J+1 ENDIF LET I=I+1 WHILE(I LE 256) LOAD GSUCPB 1,P,NU1,NV1,SUR4,ER LET I=MAX2-1 BLOCKIF((S1(1)EQ S)OR(S1(3)EQ S))THEN LET J=NV1-1 LOAD GSSASF 1,SUR4,2,X,I,2,X,J,SUR5,VAL,ER ELSE LET J=NU1-1 LOAD GSSASF 1,SUR4,2,X,J,2,X,I,SUR5,VAL,ER ENDIF LOAD GSOIMH 1,SUR5,1,1,P1,NU1,NV1,ER LET MAX1=MAX2 ELSE DO BLOCKIF((P2(1,I)NE 0.)OR(P2(2,I)NE 0.)OR(P2(3,I)NE 0.))THEN LET P(1,J)=P2(1,I) LET P(2,J)=P2(2,I) LET P(3,J)=P2(3,I) LET J=J+1 ENDIF LET I=I+1 WHILE(I LE 256) LOAD GSUCPB 1,P,NU2,NV2,SUR4,ER LET I=MAX1-1 BLOCKIF((S2(1)EQ T)OR(S2(3)EQ T))THEN LET J=NV2-1 LOAD GSSASF 1,SUR4,2,X,I,2,X,J,SUR5,VAL,ER ELSE LET J=NU2-1 LOAD GSSASF 1,SUR4,2,X,J,2,X,I,SUR5,VAL,ER ENDIF LOAD GSOIMH 1,SUR5,1,1,P2,NU2,NV2,ER ENDIF ERASE SUR4,SUR5 ENDIF **************************** U V * EQUALED ******* SUR SUR ************* IF(S1(1)EQ S)LET ID1=1 IF(S1(1)EQ S)LET ID2=NU1 IF(S1(2)EQ S)LET ID1=NU1 IF(S1(2)EQ S)LET ID2=NU1+(NV1-1)*16 IF(S1(3)EQ S)LET ID1=1+(NV1-1)*16 IF(S1(3)EQ S)LET ID2=NU1+(NV1-1)*16 IF(S1(4)EQ S)LET ID1=1 IF(S1(4)EQ S)LET ID2=1+(NV1-1)*16 IF(S2(1)EQ T)LET ID3=1 IF(S2(1)EQ T)LET ID4=NU2 IF(S2(2)EQ T)LET ID3=NU2 IF(S2(2)EQ T)LET ID4=NU2+(NV2-1)*16 IF(S2(3)EQ T)LET ID3=1+(NV2-1)*16 IF(S2(3)EQ T)LET ID4=NU2+(NV2-1)*16 IF(S2(4)EQ T)LET ID3=1 IF(S2(4)EQ T)LET ID4=1+(NV2-1)*16 LET I=ID1 LET L=ID3 LET D1=(P1(1,I)-P2(1,L))**2+(P1(2,I)-P2(2,L))**2+(P1(3,I)-P2(3,L))**2 LET I=ID2 LET L=ID4 LET D2=(P1(1,I)-P2(1,L))**2+(P1(2,I)-P2(2,L))**2+(P1(3,I)-P2(3,L))**2 LET I=ID1 LET L=ID4 LET D3=(P1(1,I)-P2(1,L))**2+(P1(2,I)-P2(2,L))**2+(P1(3,I)-P2(3,L))**2 LET I=ID2 LET L=ID3 LET D4=(P1(1,I)-P2(1,L))**2+(P1(2,I)-P2(2,L))**2+(P1(3,I)-P2(3,L))**2 IF(D1+D2 GT D3+D4)LET SWAP=TRUE ******************************* TEST SWAP OK ***** SUR SUR ************* LABEL SWAP_S_S BLOCKIF(S1(1)EQ S)THEN LET I1=1 LET N=MAX1 LET M1=1 LET O1=16 LOAD GSOIBP 1,SUR1,UPTCH1,.01,VPTCH1,0.,2,VEC,VAL,ER LET V1(1)=-1*VEC(1,3) LET V1(2)=-1*VEC(2,3) LET V1(3)=-1*VEC(3,3) LOAD GSOIBP 1,SUR1,UPTCH1,.99,VPTCH1,0.,2,VEC,VAL,ER LET V2(1)=-1*VEC(1,3) LET V2(2)=-1*VEC(2,3) LET V2(3)=-1*VEC(3,3) ENDIF BLOCKIF(S1(2)EQ S)THEN LET I1=NU1 LET N=NU1+(MAX1-1)*16 LET M1=16 LET O1=-1 LOAD GSOIBP 1,SUR1,UPTCH1,1.,VPTCH1,.01,2,VEC,VAL,ER LET V1(1)=VEC(1,2) LET V1(2)=VEC(2,2) LET V1(3)=VEC(3,2) LOAD GSOIBP 1,SUR1,UPTCH1,1.,VPTCH1,.99,2,VEC,VAL,ER LET V2(1)=VEC(1,2) LET V2(2)=VEC(2,2) LET V2(3)=VEC(3,2) ENDIF BLOCKIF(S1(3)EQ S)THEN LET I1=(NV1-1)*16+1 LET N=NU1+(NV1-1)*16 LET M1=1 LET O1=-16 LOAD GSOIBP 1,SUR1,UPTCH1,.01,VPTCH1,1.,2,VEC,VAL,ER LET V1(1)=VEC(1,3) LET V1(2)=VEC(2,3) LET V1(3)=VEC(3,3) LOAD GSOIBP 1,SUR1,UPTCH1,.99,VPTCH1,1.,2,VEC,VAL,ER LET V2(1)=VEC(1,3) LET V2(2)=VEC(2,3) LET V2(3)=VEC(3,3) ENDIF BLOCKIF(S1(4)EQ S)THEN LET I1=1 LET N=NU1+(MAX1-1)*16 LET M1=16 LET O1=1 LOAD GSOIBP 1,SUR1,UPTCH1,0.,VPTCH1,.01,2,VEC,VAL,ER LET V1(1)=-1*VEC(1,2) LET V1(2)=-1*VEC(2,2) LET V1(3)=-1*VEC(3,2) LOAD GSOIBP 1,SUR1,UPTCH1,0.,VPTCH1,.99,2,VEC,VAL,ER LET V2(1)=-1*VEC(1,2) LET V2(2)=-1*VEC(2,2) LET V2(3)=-1*VEC(3,2) ENDIF BLOCKIF(S2(1)EQ T)THEN LET I2=1 LET M2=1 LET O2=16 LOAD GSOIBP 1,SUR2,UPTCH2,.01,VPTCH2,0.,2,VEC,VAL,ER LET W1(1)=VEC(1,3) LET W1(2)=VEC(2,3) LET W1(3)=VEC(3,3) LOAD GSOIBP 1,SUR2,UPTCH2,.99,VPTCH2,0.,2,VEC,VAL,ER LET W2(1)=VEC(1,3) LET W2(2)=VEC(2,3) LET W2(3)=VEC(3,3) BLOCKIF(SWAP)THEN LET I2=NU2 LET M2=-1 LET X(1)=W1(1) LET X(2)=W1(2) LET X(3)=W1(3) LET W1(1)=W2(1) LET W1(2)=W2(2) LET W1(3)=W2(3) LET W2(1)=X(1) LET W2(2)=X(2) LET W2(3)=X(3) ENDIF ENDIF BLOCKIF(S2(2)EQ T)THEN LET I2=NU2 LET M2=16 LET O2=-1 LOAD GSOIBP 1,SUR2,UPTCH2,1.,VPTCH2,.01,2,VEC,VAL,ER LET W1(1)=-1*VEC(1,2) LET W1(2)=-1*VEC(2,2) LET W1(3)=-1*VEC(3,2) LOAD GSOIBP 1,SUR2,UPTCH2,1.,VPTCH2,.99,2,VEC,VAL,ER LET W2(1)=-1*VEC(1,2) LET W2(2)=-1*VEC(2,2) LET W2(3)=-1*VEC(3,2) BLOCKIF(SWAP)THEN LET I2=NU2+(NV2-1)*16 LET M2=-16 LET X(1)=W1(1) LET X(2)=W1(2) LET X(3)=W1(3) LET W1(1)=W2(1) LET W1(2)=W2(2) LET W1(3)=W2(3) LET W2(1)=X(1) LET W2(2)=X(2) LET W2(3)=X(3) ENDIF ENDIF BLOCKIF(S2(3)EQ T)THEN LET I2=(NV2-1)*16+1 LET M2=1 LET O2=-16 LOAD GSOIBP 1,SUR2,UPTCH2,.01,VPTCH2,1.,2,VEC,VAL,ER LET W1(1)=-1*VEC(1,3) LET W1(2)=-1*VEC(2,3) LET W1(3)=-1*VEC(3,3) LOAD GSOIBP 1,SUR2,UPTCH2,.99,VPTCH2,1.,2,VEC,VAL,ER LET W2(1)=-1*VEC(1,3) LET W2(2)=-1*VEC(2,3) LET W2(3)=-1*VEC(3,3) BLOCKIF(SWAP)THEN LET I2=(NV2-1)*16+NU2 LET M2=-1 LET X(1)=W1(1) LET X(2)=W1(2) LET X(3)=W1(3) LET W1(1)=W2(1) LET W1(2)=W2(2) LET W1(3)=W2(3) LET W2(1)=X(1) LET W2(2)=X(2) LET W2(3)=X(3) ENDIF ENDIF BLOCKIF(S2(4)EQ T)THEN LET I2=1 LET M2=16 LET O2=1 LOAD GSOIBP 1,SUR2,UPTCH2,0.,VPTCH2,.01,2,VEC,VAL,ER LET W1(1)=VEC(1,2) LET W1(2)=VEC(2,2) LET W1(3)=VEC(3,2) LOAD GSOIBP 1,SUR2,UPTCH2,0.,VPTCH2,.99,2,VEC,VAL,ER LET W2(1)=VEC(1,2) LET W2(2)=VEC(2,2) LET W2(3)=VEC(3,2) BLOCKIF(SWAP)THEN LET I2=(NV2-1)*16+1 LET M2=-16 LET X(1)=W1(1) LET X(2)=W1(2) LET X(3)=W1(3) LET W1(1)=W2(1) LET W1(2)=W2(2) LET W1(3)=W2(3) LET W2(1)=X(1) LET W2(2)=X(2) LET W2(3)=X(3) ENDIF ENDIF LET NU=3 LET I=1 DO LET J1=I1+O1 LET J2=I2+O2 LET D1=(P1(1,I1)-P2(1,I2))**2 LET D2=(P1(2,I1)-P2(2,I2))**2 LET D3=(P1(3,I1)-P2(3,I2))**2 LET X(1)=P1(1,I1)-P1(1,J1) LET X(2)=P1(2,I1)-P1(2,J1) LET X(3)=P1(3,I1)-P1(3,J1) LET D4=SQRT(X(1)**2+X(2)**2+X(3)**2)*NU IF((D4 LE .1E-4)AND(I EQ 1))LET X(1)=V1(1) IF((D4 LE .1E-4)AND(I EQ 1))LET X(2)=V1(2) IF((D4 LE .1E-4)AND(I EQ 1))LET X(3)=V1(3) IF((D4 LE .1E-4)AND(I NE 1))LET X(1)=V2(1) IF((D4 LE .1E-4)AND(I NE 1))LET X(2)=V2(2) IF((D4 LE .1E-4)AND(I NE 1))LET X(3)=V2(3) LET D4=SQRT(D1+D2+D3)/(SQRT(X(1)**2+X(2)**2+X(3)**2)*NU) LET P(1,I)=P1(1,I1) LET P(2,I)=P1(2,I1) LET P(3,I)=P1(3,I1) LET K=I+MAX1 LET P(1,K)=P1(1,I1)+X(1)*D4 LET P(2,K)=P1(2,I1)+X(2)*D4 LET P(3,K)=P1(3,I1)+X(3)*D4 LET K=I+MAX1*2 LET X(1)=P2(1,J2)-P2(1,I2) LET X(2)=P2(2,J2)-P2(2,I2) LET X(3)=P2(3,J2)-P2(3,I2) LET D4=SQRT(X(1)**2+X(2)**2+X(3)**2)*NU IF((D4 LE .1E-4)AND(I EQ 1))LET X(1)=W1(1) IF((D4 LE .1E-4)AND(I EQ 1))LET X(2)=W1(2) IF((D4 LE .1E-4)AND(I EQ 1))LET X(3)=W1(3) IF((D4 LE .1E-4)AND(I NE 1))LET X(1)=W2(1) IF((D4 LE .1E-4)AND(I NE 1))LET X(2)=W2(2) IF((D4 LE .1E-4)AND(I NE 1))LET X(3)=W2(3) LET D4=SQRT(D1+D2+D3)/(SQRT(X(1)**2+X(2)**2+X(3)**2)*NU) LET P(1,K)=P2(1,I2)-X(1)*D4 LET P(2,K)=P2(2,I2)-X(2)*D4 LET P(3,K)=P2(3,I2)-X(3)*D4 LET K=I+MAX1*3 LET P(1,K)=P2(1,I2) LET P(2,K)=P2(2,I2) LET P(3,K)=P2(3,I2) LET I1=I1+M1 LET I2=I2+M2 LET I=I+1 WHILE(I1 LE N) LET K=NU+1 BRANCH COMPUTE ** MOD=3 ******************* COMPUTATION * START * SUR CRV ************* LABEL SUR_CRV LET UPTCH1=1 LET VPTCH1=1 LOAD GSDISF 1,SUR1,I,J,NU1,NV1,R,R,ER IF(S1(2)EQ S)LET UPTCH1=I IF(S1(3)EQ S)LET VPTCH1=J LOAD GSOIMH 1,SUR1,UPTCH1,VPTCH1,P1,NU1,NV1,ER IF((S1(1)EQ S)OR(S1(3)EQ S))LET MAX1=NU1 IF((S1(2)EQ S)OR(S1(4)EQ S))LET MAX1=NV1 LOAD GSOIMA 1,CRV2,1,P2,MAX2,ER IF(MAX1 EQ MAX2)THEN NDEG_OK BLOCKIF(MAX1 LT MAX2)THEN LET X(1)=0. LET X(2)=1. LET X(3)=0. LET I=1 LET J=1 DO BLOCKIF((P1(1,I)NE 0.)OR(P1(2,I)NE 0.)OR(P1(3,I)NE 0.))THEN LET P(1,J)=P1(1,I) LET P(2,J)=P1(2,I) LET P(3,J)=P1(3,I) LET J=J+1 ENDIF LET I=I+1 WHILE(I LE 256) LOAD GSUCPB 1,P,NU1,NV1,SUR4,ER LET I=MAX2-1 BLOCKIF((S1(1)EQ S)OR(S1(3)EQ S))THEN LET J=NV1-1 LOAD GSSASF 1,SUR4,2,X,I,2,X,J,SUR5,VAL,ER ELSE LET J=NU1-1 LOAD GSSASF 1,SUR4,2,X,J,2,X,I,SUR5,VAL,ER ENDIF LOAD GSOIMH 1,SUR5,1,1,P1,NU1,NV1,ER LET MAX1=MAX2 ERASE SUR4,SUR5 ELSE LET N=MAX1-1 LOAD GICTEM ER LOAD GSMACV 1,CRV2,3,3,N,0,CRV2DUP,PT1,PT2,X,ER LOAD GSOIMA 1,CRV2DUP,1,P2,MAX2,ER ENDIF LABEL NDEG_OK **************************** U V * EQUALED ******* SUR CRV ************* IF(S1(1)EQ S)LET ID1=1 IF(S1(1)EQ S)LET ID2=NU1 IF(S1(2)EQ S)LET ID1=NU1 IF(S1(2)EQ S)LET ID2=NU1+(NV1-1)*16 IF(S1(3)EQ S)LET ID1=1+(NV1-1)*16 IF(S1(3)EQ S)LET ID2=NU1+(NV1-1)*16 IF(S1(4)EQ S)LET ID1=1 IF(S1(4)EQ S)LET ID2=1+(NV1-1)*16 LET I=ID1 LET L=1 LET D1=(P1(1,I)-P2(1,L))**2+(P1(2,I)-P2(2,L))**2+(P1(3,I)-P2(3,L))**2 LET I=ID2 LET L=MAX2 LET D2=(P1(1,I)-P2(1,L))**2+(P1(2,I)-P2(2,L))**2+(P1(3,I)-P2(3,L))**2 LET I=ID1 LET L=MAX2 LET D3=(P1(1,I)-P2(1,L))**2+(P1(2,I)-P2(2,L))**2+(P1(3,I)-P2(3,L))**2 LET I=ID2 LET L=1 LET D4=(P1(1,I)-P2(1,L))**2+(P1(2,I)-P2(2,L))**2+(P1(3,I)-P2(3,L))**2 IF(D1+D2 GT D3+D4)LET SWAP=TRUE ******************************* TEST SWAP OK ***** SUR CRV ************* LABEL SWAP_S_C BLOCKIF(S1(1)EQ S)THEN LET I1=1 LET N=MAX1 LET M1=1 LET O1=16 LOAD GSOIBP 1,SUR1,UPTCH1,.01,VPTCH1,0.,2,VEC,VAL,ER LET V1(1)=-1*VEC(1,3) LET V1(2)=-1*VEC(2,3) LET V1(3)=-1*VEC(3,3) LOAD GSOIBP 1,SUR1,UPTCH1,.99,VPTCH1,0.,2,VEC,VAL,ER LET V2(1)=-1*VEC(1,3) LET V2(2)=-1*VEC(2,3) LET V2(3)=-1*VEC(3,3) ENDIF BLOCKIF(S1(2)EQ S)THEN LET I1=NU1 LET N=NU1+(MAX1-1)*16 LET M1=16 LET O1=-1 LOAD GSOIBP 1,SUR1,UPTCH1,1.,VPTCH1,.01,2,VEC,VAL,ER LET V1(1)=VEC(1,2) LET V1(2)=VEC(2,2) LET V1(3)=VEC(3,2) LOAD GSOIBP 1,SUR1,UPTCH1,1.,VPTCH1,.99,2,VEC,VAL,ER LET V2(1)=VEC(1,2) LET V2(2)=VEC(2,2) LET V2(3)=VEC(3,2) ENDIF BLOCKIF(S1(3)EQ S)THEN LET I1=(NV1-1)*16+1 LET N=NU1+(NV1-1)*16 LET M1=1 LET O1=-16 LOAD GSOIBP 1,SUR1,UPTCH1,.01,VPTCH1,1.,2,VEC,VAL,ER LET V1(1)=VEC(1,3) LET V1(2)=VEC(2,3) LET V1(3)=VEC(3,3) LOAD GSOIBP 1,SUR1,UPTCH1,.99,VPTCH1,1.,2,VEC,VAL,ER LET V2(1)=VEC(1,3) LET V2(2)=VEC(2,3) LET V2(3)=VEC(3,3) ENDIF LOAD GICTEM ER BLOCKIF(S1(4)EQ S)THEN LET I1=1 LET N=NU1+(MAX1-1)*16 LET M1=16 LET O1=1 LOAD GSOIBP 1,SUR1,UPTCH1,0.,VPTCH1,.01,2,VEC,VAL,ER LET V1(1)=-1*VEC(1,2) LET V1(2)=-1*VEC(2,2) LET V1(3)=-1*VEC(3,2) LOAD GSOIBP 1,SUR1,UPTCH1,0.,VPTCH1,.99,2,VEC,VAL,ER LET V2(1)=-1*VEC(1,2) LET V2(2)=-1*VEC(2,2) LET V2(3)=-1*VEC(3,2) ENDIF LET I2=1 LET M2=1 LET NU=2 LOAD GICTEM ER LET I=1 DO LET J1=I1+O1 LET D1=(P1(1,I1)-P2(1,I2))**2 LET D2=(P1(2,I1)-P2(2,I2))**2 LET D3=(P1(3,I1)-P2(3,I2))**2 LET X(1)=P1(1,I1)-P1(1,J1) LET X(2)=P1(2,I1)-P1(2,J1) LET X(3)=P1(3,I1)-P1(3,J1) LET D4=SQRT(X(1)**2+X(2)**2+X(3)**2)*NU IF((D4 LE .1E-4)AND(I EQ 1))LET X(1)=V1(1) IF((D4 LE .1E-4)AND(I EQ 1))LET X(2)=V1(2) IF((D4 LE .1E-4)AND(I EQ 1))LET X(3)=V1(3) IF((D4 LE .1E-4)AND(I NE 1))LET X(1)=V2(1) IF((D4 LE .1E-4)AND(I NE 1))LET X(2)=V2(2) IF((D4 LE .1E-4)AND(I NE 1))LET X(3)=V2(3) LET D4=SQRT(D1+D2+D3)/(SQRT(X(1)**2+X(2)**2+X(3)**2)*NU) LET P(1,I)=P1(1,I1) LET P(2,I)=P1(2,I1) LET P(3,I)=P1(3,I1) LET K=I+MAX1 LET P(1,K)=P1(1,I1)+X(1)*D4 LET P(2,K)=P1(2,I1)+X(2)*D4 LET P(3,K)=P1(3,I1)+X(3)*D4 LET K=I+MAX1*2 IF(SWAP)LET K=3*MAX1-I+1 LET P(1,K)=P2(1,I) LET P(2,K)=P2(2,I) LET P(3,K)=P2(3,I) LET I1=I1+M1 LET I2=I2+M2 LET I=I+1 WHILE(I1 LE N) LET K=NU+1 BRANCH COMPUTE ** MOD=4 ******************* COMPUTATION * START * CRV CRV ************* LABEL CRV_CRV LOAD GSOIMA 1,CRV1,1,P1,MAX1,ER LOAD GSOIMA 1,CRV2,1,P2,MAX2,ER IF(MAX1 EQ MAX2)THEN CRV_OK BLOCKIF(MAX1 LT MAX2)THEN LET N=MAX2-1 LOAD GICTEM ER LOAD GSMACV 1,CRV1,3,3,N,0,CRV1DUP,PT1,PT2,X,ER LOAD GSOIMA 1,CRV1DUP,1,P1,MAX1,ER ELSE LET N=MAX1-1 LOAD GICTEM ER LOAD GSMACV 1,CRV2,3,3,N,0,CRV2DUP,PT1,PT2,X,ER LOAD GSOIMA 1,CRV2DUP,1,P2,MAX2,ER ENDIF LABEL CRV_OK LET I=1 LET L=1 LOAD GICTEM ER LET D1=(P1(1,I)-P2(1,L))**2+(P1(2,I)-P2(2,L))**2+(P1(3,I)-P2(3,L))**2 LET I=MAX1 LET L=MAX2 LET D2=(P1(1,I)-P2(1,L))**2+(P1(2,I)-P2(2,L))**2+(P1(3,I)-P2(3,L))**2 LET I=1 LET L=MAX2 LET D3=(P1(1,I)-P2(1,L))**2+(P1(2,I)-P2(2,L))**2+(P1(3,I)-P2(3,L))**2 LET I=MAX1 LET L=1 LET D4=(P1(1,I)-P2(1,L))**2+(P1(2,I)-P2(2,L))**2+(P1(3,I)-P2(3,L))**2 IF(D1+D2 GT D3+D4)LET SWAP=TRUE LABEL SWAP_C_C LET I=1 LOAD GICTEM ER DO LET K=MAX1+I IF(SWAP)LET K=2*MAX1-I+1 LET P(1,I)=P1(1,I) LET P(2,I)=P1(2,I) LET P(3,I)=P1(3,I) LET P(1,K)=P2(1,I) LET P(2,K)=P2(2,I) LET P(3,K)=P2(3,I) LET I=I+1 WHILE(I LE MAX1) LET K=2 BRANCH COMPUTE ** MOD=5 ******************* COMPUTATION * START * SUR PT ************** LABEL SUR_PT LET UPTCH1=1 LET VPTCH1=1 LOAD GSDISF 1,SUR1,I,J,NU1,NV1,R,R,ER IF(S1(2)EQ S)LET UPTCH1=I IF(S1(3)EQ S)LET VPTCH1=J LOAD GSOIMH 1,SUR1,UPTCH1,VPTCH1,P1,NU1,NV1,ER IF((S1(1)EQ S)OR(S1(3)EQ S))LET MAX1=NU1 IF((S1(2)EQ S)OR(S1(4)EQ S))LET MAX1=NV1 BLOCKIF(S1(1)EQ S)THEN LET I1=1 LET N=MAX1 LET M1=1 LET O1=16 LOAD GSOIBP 1,SUR1,UPTCH1,.01,VPTCH1,0.,2,VEC,VAL,ER LET V1(1)=-1*VEC(1,3) LET V1(2)=-1*VEC(2,3) LET V1(3)=-1*VEC(3,3) LOAD GSOIBP 1,SUR1,UPTCH1,.99,VPTCH1,0.,2,VEC,VAL,ER LET V2(1)=-1*VEC(1,3) LET V2(2)=-1*VEC(2,3) LET V2(3)=-1*VEC(3,3) ENDIF BLOCKIF(S1(2)EQ S)THEN LET I1=NU1 LET N=NU1+(MAX1-1)*16 LET M1=16 LET O1=-1 LOAD GSOIBP 1,SUR1,UPTCH1,1.,VPTCH1,.01,2,VEC,VAL,ER LET V1(1)=VEC(1,2) LET V1(2)=VEC(2,2) LET V1(3)=VEC(3,2) LOAD GSOIBP 1,SUR1,UPTCH1,1.,VPTCH1,.99,2,VEC,VAL,ER LET V2(1)=VEC(1,2) LET V2(2)=VEC(2,2) LET V2(3)=VEC(3,2) ENDIF BLOCKIF(S1(3)EQ S)THEN LET I1=(NV1-1)*16+1 LET N=NU1+(NV1-1)*16 LET M1=1 LET O1=-16 LOAD GSOIBP 1,SUR1,UPTCH1,.01,VPTCH1,1.,2,VEC,VAL,ER LET V1(1)=VEC(1,3) LET V1(2)=VEC(2,3) LET V1(3)=VEC(3,3) LOAD GSOIBP 1,SUR1,UPTCH1,.99,VPTCH1,1.,2,VEC,VAL,ER LET V2(1)=VEC(1,3) LET V2(2)=VEC(2,3) LET V2(3)=VEC(3,3) ENDIF BLOCKIF(S1(4)EQ S)THEN LET I1=1 LET N=NU1+(MAX1-1)*16 LET M1=16 LET O1=1 LOAD GSOIBP 1,SUR1,UPTCH1,0.,VPTCH1,.01,2,VEC,VAL,ER LET V1(1)=-1*VEC(1,2) LET V1(2)=-1*VEC(2,2) LET V1(3)=-1*VEC(3,2) LOAD GSOIBP 1,SUR1,UPTCH1,0.,VPTCH1,.99,2,VEC,VAL,ER LET V2(1)=-1*VEC(1,2) LET V2(2)=-1*VEC(2,2) LET V2(3)=-1*VEC(3,2) ENDIF LET NU=2 LOAD GIRMAT 1,PT2,I,P2,ER LOAD GICTEM ER LET I=1 DO LET J1=I1+O1 LET D1=(P1(1,I1)-P2(1,1))**2 LET D2=(P1(2,I1)-P2(2,1))**2 LET D3=(P1(3,I1)-P2(3,1))**2 LET X(1)=P1(1,I1)-P1(1,J1) LET X(2)=P1(2,I1)-P1(2,J1) LET X(3)=P1(3,I1)-P1(3,J1) LET D4=SQRT(X(1)**2+X(2)**2+X(3)**2)*NU IF((D4 LE .1E-4)AND(I EQ 1))LET X(1)=V1(1) IF((D4 LE .1E-4)AND(I EQ 1))LET X(2)=V1(2) IF((D4 LE .1E-4)AND(I EQ 1))LET X(3)=V1(3) IF((D4 LE .1E-4)AND(I NE 1))LET X(1)=V2(1) IF((D4 LE .1E-4)AND(I NE 1))LET X(2)=V2(2) IF((D4 LE .1E-4)AND(I NE 1))LET X(3)=V2(3) LET D4=SQRT(D1+D2+D3)/(SQRT(X(1)**2+X(2)**2+X(3)**2)*NU) LET P(1,I)=P1(1,I1) LET P(2,I)=P1(2,I1) LET P(3,I)=P1(3,I1) LET K=I+MAX1 LET P(1,K)=P1(1,I1)+X(1)*D4 LET P(2,K)=P1(2,I1)+X(2)*D4 LET P(3,K)=P1(3,I1)+X(3)*D4 LET K=I+MAX1*2 LET P(1,K)=P2(1,1) LET P(2,K)=P2(2,1) LET P(3,K)=P2(3,1) LET I1=I1+M1 LET I=I+1 WHILE(I1 LE N) LET K=NU+1 BRANCH COMPUTE ** MOD=6 ******************* COMPUTATION * START * CRV PT ************** LABEL CRV_PT LOAD GSOIMA 1,CRV1,1,P,MAX1,ER LOAD GIRMAT 1,PT2,I,X,ER LOAD GICTEM ER LET I=MAX1+1 DO LET P(1,I)=X(1) LET P(2,I)=X(2) LET P(3,I)=X(3) LET I=I+1 WHILE(I LE 2*MAX1) LET K=2 ************************************************************************ LABEL COMPUTE LOAD GSUCPB 1,P,MAX1,K,SUR3,ER BLOCKIF(ER EQ 0)THEN MSGCNTL 'PATCH CREATED SWAP GUIDES: SELECT PATCH' ELSE BEEP MSGCNTL 'IMPOSSIBLE GEOMETRY' ENDIF BRANCH SUR1 ************************************************************************ LABEL EOE NOHIGHLT SUR1,SUR2,CRV1,CRV2,LN1,LN2,PT1,PT2 ERASE G1(1),G1(2),G1(3),G1(4),G2(1),G2(2),G2(3),G2(4),CRV1DUP,CRV2DUP ERASE S1(1),S1(2),S1(3),S1(4),S2(1),S2(2),S2(3),S2(4) MSGCNTL 'EOE' END