mosu
C MOSU SOURCE BP208322 16/11/18 21:19:29 9177 C MODI SUPPRESSION D'UN ELEMENT C IMPLICIT INTEGER(I-N) -INC CCREEL -INC SMELEME -INC CCGEOME COMMON/CMODI/LIGMAX,XDEC,YDEC DIMENSION XTR(10),YTR(10),ZTR(10) SEGMENT IVU(0) SEGMENT XPROJ(3,0) SEGMENT ICPR(0) SEGMENT ISOM(NBSO) do i=1,10 ztr(i)=0 enddo 5 CONTINUE CALL TRMESS('POINTEZ L''ELEMENT A SUPPRIMER') CALL MOPF3 CALL TRDIG(XP,YP,INCLE) CALL TRMESS(' ') IF (INCLE.EQ.3) RETURN IPT1=MELEME SEGACT IPT1*MOD DO 20 IO=1,MAX(1,LISOUS(/1)) IF (LISOUS(/1).NE.0) THEN IPT1=LISOUS(IO) SEGACT IPT1*MOD ENDIF NBNN=IPT1.NUM(/1) IF (KSURF(IPT1.ITYPEL).NE.0) GOTO 60 C C'EST UNE LIGNE DO 40 J=1,IPT1.NUM(/2) IA=ICPR(IPT1.NUM(1,J)) IB=ICPR(IPT1.NUM(NBNN,J)) IF (IVU(IA).NE.1) GOTO 40 IF (IVU(IB).NE.1) GOTO 40 XA=XPROJ(1,IA) YA=XPROJ(2,IA) XB=XPROJ(1,IB) YB=XPROJ(2,IB) SCA=(XP-XA)*(XP-XB)+(YP-YA)*(YP-YB) IF (SCA.LE.0.) GOTO 500 40 CONTINUE GOTO 100 60 IF (KSURF(IPT1.ITYPEL).NE.IPT1.ITYPEL) GOTO 100 C C'EST UNE SURFACE NBSO = NBSOM(IPT1.ITYPEL) IF (NBSO.EQ.0) THEN C Polygone a N cotes NBSO = IPT1.NUM(/1) ENDIF SEGINI ISOM DO 61 I=1,ISOM(/1) ISOM(I)=IBSOM(NSPOS(IPT1.ITYPEL)-1+I) 61 CONTINUE DO 62 J=1,IPT1.NUM(/2) I1=ICPR(IPT1.NUM(ISOM(1),J)) I3=ICPR(IPT1.NUM(ISOM(3),J)) IF (IVU(I1).NE.1) GOTO 62 IF (IVU(I3).NE.1) GOTO 62 X1=XPROJ(1,I1) X3=XPROJ(1,I3) Y1=XPROJ(2,I1) Y3=XPROJ(2,I3) Z1=0. Z2=0. Z3=0. XNORM=(Y2-Y1)*(Z2-Z3)-(Z2-Z1)*(Y2-Y3) YNORM=(Z2-Z1)*(X2-X3)-(X2-X1)*(Z2-Z3) ZNORM=(X2-X1)*(Y2-Y3)-(Y2-Y1)*(X2-X3) DNORM=SQRT(XNORM**2+YNORM**2+ZNORM**2) XNORM=XNORM/DNORM YNORM=YNORM/DNORM ZNORM=ZNORM/DNORM ANG=0. I1=ICPR(IPT1.NUM(ISOM(ISOM(/1)),J)) XV1=XPROJ(1,I1)-XP YV1=XPROJ(2,I1)-YP ZV1=0. DO 63 IS=1,ISOM(/1) ZV2=0. XATA=XNORM*(YV1*ZV2-ZV1*YV2)+YNORM*(ZV1*XV2-XV1*ZV2)+ # ZNORM*(XV1*YV2-YV1*XV2) YATA=XV1*XV2+YV1*YV2+ZV1*ZV2 IF (XATA.EQ.0..AND.YATA.EQ.0.) GOTO 500 ANG=ANG+ATAN2(XATA,YATA) XV1=XV2 YV1=YV2 ZV1=ZV2 63 CONTINUE IF (ABS(ANG).GT.XPI) GOTO 500 62 CONTINUE SEGSUP ISOM 100 CONTINUE 20 CONTINUE * ON N'A PAS TROUVE ON RECOMMENCE GOTO 5 * ON A TROUVE ON DESSINE L'ELEMENT EN REDUIT ET EN ROSE 500 CONTINUE call insegt(3,iresu) ITR=1 XECLAT=0.8 IEL=J CALL CHCOUL(3) K=IPT1.ITYPEL IDEP=LPT(K) IFIN=IDEP+2*LPL(K)-2 IFIN2=IFIN IF (LPL(K).EQ.0.AND.LPT(K).NE.0)THEN C Polygone IFIN =IDEP+2*IPT1.NUM(/1)-2 IFIN2=IFIN -2 ENDIF I=IEL XG=0. YG=0. N=IPT1.NUM(/1) DO 510 J=1,N XG=XG+XPROJ(1,ICPR(IPT1.NUM(J,I))) YG=YG+XPROJ(2,ICPR(IPT1.NUM(J,I))) 510 CONTINUE XG=XG/N YG=YG/N I3=0 DO 520 J=IDEP,IFIN,2 IF (J.LE.IFIN2) THEN I1=ICPR(IPT1.NUM(KSEGM(J),I)) ELSE I1=ICPR(IPT1.NUM(KSEGM(IFIN2+1),I)) ENDIF XR=XG+(XPROJ(1,I1)-XG)*XECLAT YR=YG+(XPROJ(2,I1)-YG)*XECLAT IF (I1.NE.I3) THEN IF (ITR.NE.1) CALL POLRL(ITR,XTR,YTR,ZTR) ITR=1 XTR(ITR)=XR YTR(ITR)=YR ENDIF ITR=ITR+1 XTR(ITR)=XR YTR(ITR)=YR I3=I2 520 CONTINUE IF (ITR.NE.1) CALL POLRL(ITR,XTR,YTR,ZTR) * DEFINITIF IPTSUP=IPT1 IPT1=MELEME DO 610 IO=1,MAX(1,LISOUS(/1)) IF (LISOUS(/1).NE.0) IPT1=LISOUS(IO) IF (IPT1.NE.IPTSUP) GOTO 620 DO 630 IL=IEL,IPT1.NUM(/2)-1 DO 640 IN=1,IPT1.NUM(/1) IPT1.NUM(IN,IL)=IPT1.NUM(IN,IL+1) 640 CONTINUE IPT1.ICOLOR(IL)=IPT1.ICOLOR(IL+1) 630 CONTINUE NBNN=IPT1.NUM(/1) NBELEM=IPT1.NUM(/2)-1 NBREF=0 NBSOUS=0 SEGADJ IPT1 620 CONTINUE 610 CONTINUE * SUPPRIMER LES SOUS-OBJETS VIDES IF (LISOUS(/1).EQ.0) RETURN IO1=0 DO 700 IO=1,LISOUS(/1) IPT1=LISOUS(IO) IF (IPT1.NUM(/2).EQ.0) THEN SEGSUP IPT1 GOTO 700 ENDIF IO1=IO1+1 LISOUS(IO1)=LISOUS(IO) 700 CONTINUE NBELEM=0 NBNN=0 NBREF=0 NBSOUS=IO1 IF (NBSOUS.NE.LISOUS(/1)) SEGADJ MELEME * SI UNE SEULE REFERENCE SUPPRIMER LE CHAPEAU IF (LISOUS(/1).EQ.1) THEN IPT1=LISOUS(1) NBELEM=IPT1.NUM(/2) NBNN=IPT1.NUM(/1) NBSOUS=0 NBREF=0 SEGADJ MELEME ITYPEL=IPT1.ITYPEL DO 731 J=1,NBELEM DO 730 I=1,NBNN NUM(I,J)=IPT1.NUM(I,J) 730 CONTINUE ICOLOR(J)=IPT1.ICOLOR(J) 731 CONTINUE SEGSUP IPT1 ENDIF END
© Cast3M 2003 - Tous droits réservés.
Mentions légales