#######################################################################################################################################
# #
# T R A C E D ' U N N O E U D S U R U N E S U R F A C E D O N N E E #
# A V E C R U B A N D E M O B I U S : #
# #
# #
# Author of '$xiirv/.KNOT.61.1.$U' : #
# #
# Jean-Francois COLONNA (LACTAMME, 20120516114142). #
# #
#######################################################################################################################################
$Z setParam _____Aduv +1
$Z setParam _____Bduv -1
$Z setParam _____Cduv 0
$Z setParam _____PasMobius 8
$Z setParam _____NombreTours 2
$Z # Argument introduit le 20120517115551... #
$Z setParam _____AjustCouleurs `GetParam $xrv/particule.10$X ajuster_couleurs`
$Z # Argument introduit le 20120518165728 pour 'v $xiirs/BKLN.D5'. Evidemment, lorsqu'il est #
$Z # utilise, il est conseille de faire : #
$Z # #
$Z # set _____TranslationRVB=0 #
$Z # #
$Z setParam _____AjustCouleursH `GetParam $xrv/particule.10$X ajuster_couleurs_independamment_homothetie`
$Z # Argument introduit le 20120518171011 pour 'v $xiirs/BKLN.D5'. #
$Z setParam _____AjustCouleursT `GetParam $xrv/particule.10$X ajuster_couleurs_independamment_translation`
$Z # Argument introduit le 20120518171011 pour 'v $xiirs/BKLN.D5'. #
$Z setParam _____TranslationRVB 150
$Z # Argument introduit le 20120516161807. Une meme valeur est choisie pour les trois #
$Z # composantes car, en effet, le squelette du tore etant en Noir et Blanc, il faut que #
$Z # ses trois composantes soient translatees de la meme facon... #
$Z setParam _____DepthCueing `GetParam $xrv/particule.10$X ZminimumT`
$Z # Argument introduit le 20120516170254... #
$Z setParam _____RotationOX 0.0
$Z setParam _____RotationOY 0.0
$Z setParam _____RotationOZ 0.0
$Z setParam _____Points 32
$Z setParam _____Zoom 1
$Z setParam _____NombreR 1
$Z setParam _____Cubique FAUX
$Z setParam _____DeriveeX 0
$Z setParam _____DeriveeY 0
$Z setParam _____DeriveeZ 0
$Z setParam _____ParticulePara1 "$K_VIDE"
$Z set N_Au_CaRrE=VRAI
$Z # Pour simplifier l'acceleration temporaires du processus lors de tests de mise au point #
$Z # des parametres... #
$Z if ($?_____SurfaceA == $EXIST) then
$Z set SurfaceEffective=$_____SurfaceA
$Z if (! -e $SurfaceEffective) then
$Z set SurfaceEffective=$xrs/$SurfaceEffective
$Z if (! -e $SurfaceEffective) then
$Z set SurfaceEffective=$SurfaceEffective$X
$Z else
$Z endif
$Z else
$Z endif
$Z setParam _____Pu 0.5
$Z setParam _____Pv 0.5
$Z setParam _____SurfaceParam1 "$K_VIDE"
$Z setParam _____SurfaceParam2 "$K_VIDE"
$Z setParam _____SurfaceParam12 "$K_VIDE"
$Z setParam _____RVB0 -0.2
$Z # Valeur du niveau de gris normalise a donner au squelette du tore. La valeur negative est #
$Z # justifiee par le fait que les niveaux de couleur du noeud et du Ruban de Mobsuis seront #
$Z # dans : #
$Z # #
$Z # ROUGE E [-348,+348] #
$Z # VERTE E [-262,+382] #
$Z # BLEUE E [-127,+127] #
$Z # #
$Z setParam _____RayonSurface 0.015
$Z setParam _____RayonDroite 0.050
$Z setParam _____RapportRayon 2
$Z # Argument introduit le 20120518180723... #
$Z FileTmpB FiLeTmP_TORE
$Z $SurfaceEffective \
$Z np=1 \
$Z pu=$_____Pu pv=$_____Pv \
$Z eu=40 ev=40 \
$Z dpu=80 dpv=80 \
$Z maillage_uv=VRAI droite_uv=FAUX \
$Z lister_les_points=VRAI lister_les_points_apres=VRAI \
$Z TZliste=0.5 \
$Z carree=VRAI petit_carre=FAUX \
$Z RVB=FAUX RVB0=$_____RVB0 \
$Z Lz=1000 \
$Z rayon_de_visualisation=$_____RayonSurface \
$Z N_AU_CARRE=FAUX \
$Z edc=VRAI \
$Z extrema_hors=FAUX \
$Z $_____SurfaceParam1 \
$Z $_____SurfaceParam12 \
$Z R=$xTV/SURFACE.m chiffres=0 \
$Z $formatI | \
$Z $GRE -v '^ *$' \
$Z >>! $FiLeTmP_TORE.1
$Z # Definition du maillage de la surface... #
$Z $SurfaceEffective \
$Z np=1 \
$Z pu=$_____Pu pv=$_____Pv \
$Z eu=40 ev=40 \
$Z dpu=80 dpv=80 \
$Z maillage_uv=FAUX droite_uv=VRAI \
$Z tracer_une_droite_du_plan_uv_____compatibilite_20170130=VRAI \
$Z Aduv=$_____Aduv Bduv=$_____Bduv Cduv=$_____Cduv \
$Z lister_les_points=VRAI lister_les_points_apres=VRAI \
$Z TZliste=0.5 \
$Z carree=VRAI petit_carre=FAUX \
$Z RVB=VRAI \
$Z Lz=1000 \
$Z rayon_de_visualisation=$_____RayonDroite \
$Z N_AU_CARRE=FAUX \
$Z edc=VRAI \
$Z extrema_hors=FAUX \
$Z $_____SurfaceParam2 \
$Z $_____SurfaceParam12 \
$Z R=$xTV/SURFACE.d chiffres=0 \
$Z $formatI | \
$Z $GRE -v '^ *$' \
$Z >>! $FiLeTmP_TORE.2
$Z # Definition d'une droite de la surface... #
$Z # #
$Z # Le 20220518094154, "tracer_une_droite_du_plan_uv_____compatibilite_20170130=VRAI" a ete #
$Z # introduit car, en effet, il avait ete oublie il y a bien longtemps. Au passage, je crois #
$Z # que celui qui figure dans le premier appel a '$SurfaceEffective' est inutile, je le #
$Z # supprime donc... #
$Z set SePaRaTeUr="@"
$Z $CA $FiLeTmP_TORE.1 | \
$Z $SE -e 's/^\(.*\)$'"/\1$SePaRaTeUr\1/" | \
$Z $R "$SePaRaTeUr" "$K_NL" \
$Z >>! $FiLeTmP_TORE.1.double
$Z set ArGs="ne=0 fichier=="
$Z set MinR=`$CA $FiLeTmP_TORE.2 | $SE -e 's/^.* ROUGE=\([^ ]*\).*$/\1/' | $xrv/extrema.01$X $ArGs ms=VRAI`
$Z set MinV=`$CA $FiLeTmP_TORE.2 | $SE -e 's/^.* VERTE=\([^ ]*\).*$/\1/' | $xrv/extrema.01$X $ArGs ms=VRAI`
$Z set MinB=`$CA $FiLeTmP_TORE.2 | $SE -e 's/^.* BLEUE=\([^ ]*\).*$/\1/' | $xrv/extrema.01$X $ArGs ms=VRAI`
$Z # Notons que les minima ne servent que pour '$EditerRVB'... #
$Z set MaxR=`$CA $FiLeTmP_TORE.2 | $SE -e 's/^.* ROUGE=\([^ ]*\).*$/\1/' | $xrv/extrema.01$X $ArGs Ms=VRAI`
$Z set MaxV=`$CA $FiLeTmP_TORE.2 | $SE -e 's/^.* VERTE=\([^ ]*\).*$/\1/' | $xrv/extrema.01$X $ArGs Ms=VRAI`
$Z set MaxB=`$CA $FiLeTmP_TORE.2 | $SE -e 's/^.* BLEUE=\([^ ]*\).*$/\1/' | $xrv/extrema.01$X $ArGs Ms=VRAI`
$Z if ($?EditerRVB == $EXIST) then
$Z # Test introduit le 20120518143837 pour faciliter l'ajustement des deux parametres #
$Z # '$_____RVB0' et '$_____TranslationRVB'... #
$Z echo "MaillageNiveauGris="`calcul $_____RVB0*$BLANC`
$Z saut 1
$Z echo "RubanMinimum(ROUGE)=$MinR"
$Z echo "RubanMinimum(VERTE)=$MinV"
$Z echo "RubanMinimum(BLEUE)=$MinB"
$Z saut 1
$Z echo "RubanMaximum(ROUGE)=$MaxR"
$Z echo "RubanMaximum(VERTE)=$MaxV"
$Z echo "RubanMaximum(BLEUE)=$MaxB"
$Z else
$Z endif
$Z set MaxRVB=`$xcg/MAX3.01$X a=$MaxR b=$MaxV c=$MaxB`
$Z $CA $FiLeTmP_TORE.2 | \
$Z $SE -e 's/^\(.*\)$'"/\1$SePaRaTeUr\1/" | \
$Z $R "$SePaRaTeUr" "$K_NL" | \
$Z $SE -e "s/\( ROUGE=\)[^ ]*\( \)/\1$MaxRVB\2/" \
$Z -e "s/\( VERTE=\)[^ ]*\( \)/\1$MaxRVB\2/" \
$Z -e "s/\( BLEUE=\)[^ ]*\( \)/\1$MaxRVB\2/" \
$Z >>! $FiLeTmP_TORE.2.double
$Z # Ainsi le noeud apparaitra Blanc... #
$Z UnSurN $FiLeTmP_TORE.2 1 $_____PasMobius $FiLeTmP_TORE.3
$Z # Generation des points extremes des segments composants le Ruban de Mobius. #
$Z set NMobius=`$CA $FiLeTmP_TORE.3 | $WCl`
$Z @ NMobius = $NMobius / $_____NombreTours
$Z # Le noeud est en fait parcouru deux fois, d'ou la division par 2 afin de ne le parcourir #
$Z # qu'une seule fois... #
$Z @ NMobius11 = 1
$Z @ PaRiTe = $NMobius % 2
$Z if ($PaRiTe != 0) then
$Z # Test introduit le 20220518112545 lors du recalcul de 'v $xiirv/KNOT.61.5.1' (voir a ce #
$Z # propos 'v $xiirv/$Fnota 20220518111523'... #
$Z EROR "Le parametre $K_DOLLAR""NMobius (=$NMobius) n'est pas divisible par 2."
$Z else
$Z endif
$Z @ NMobius12 = $NMobius / 2
$Z # ATTENTION : a la parite de '$NMobius'... #
$Z @ NMobius21 = $NMobius12 + 1
$Z @ NMobius22 = $NMobius
$Z listMN $FiLeTmP_TORE.3 $NMobius11 $NMobius12 \
$Z >>! $FiLeTmP_TORE.3.1
$Z listMN $FiLeTmP_TORE.3 $NMobius21 $NMobius22 \
$Z >>! $FiLeTmP_TORE.3.2
$Z set RaYoN=`$CA $FiLeTmP_TORE.3 | $SE -e 's/^.* \(RAYON=[^ ][^ ]*\) .*$/\1/' | $SOR -u`
$Z set RaYoN1=`echo "$RaYoN" | $SE -e 's/^\(.*=\).*$/\1/'`
$Z set RaYoN2=`echo "$RaYoN" | $SE -e 's/^.*=\(.*\)$/\1/'`
$Z set RaYoN2=`calcul $RaYoN2/$_____RapportRayon`
$Z $CA $FiLeTmP_TORE.3.1 | \
$Z $SE -e 's/^.*$'"/$SePaRaTeUr/" \
$Z >>! $FiLeTmP_TORE.3.separateur
$Z $PAST $FiLeTmP_TORE.3.1 $FiLeTmP_TORE.3.separateur $FiLeTmP_TORE.3.2 | \
$Z $R "$K_TAB" "$K_BLANC" | \
$Z $R "$SePaRaTeUr" "$K_NL" | \
$Z $SE -e "s/ $RaYoN / $RaYoN1$RaYoN2 /" \
$Z >>! $FiLeTmP_TORE.3.ruban
$Z # Generation du Ruban de Mobius... #
$Z $CA $FiLeTmP_TORE.1.double $FiLeTmP_TORE.2.double $FiLeTmP_TORE.3.ruban \
$Z >>! $FiLeTmP_TORE
$Z # Generation de la description du tore, du noeud et du Ruban de Mobius... #
$Z FileTmpB FiLeTmP_COORDONNEES
$Z FileTmpB FiLeTmP_COULEURS
$Z FileTmpB FiLeTmP_RAYONS
$Z $CA $FiLeTmP_TORE | \
$Z $SE -e "s/^.* X=//" \
$Z -e 's/ .*$//' \
$Z >>! $FiLeTmP_COORDONNEES$COORD_X
$Z $CA $FiLeTmP_TORE | \
$Z $SE -e "s/^.* Y=//" \
$Z -e 's/ .*$//' \
$Z >>! $FiLeTmP_COORDONNEES$COORD_Y
$Z $CA $FiLeTmP_TORE | \
$Z $SE -e "s/^.* Z=//" \
$Z -e 's/ .*$//' \
$Z >>! $FiLeTmP_COORDONNEES$COORD_Z
$Z # Recuperation des coordonnees {X,Y,Z}. #
$Z $CA $FiLeTmP_TORE | \
$Z $SE -e "s/^.* ROUGE=//" \
$Z -e 's/ .*$//' \
$Z >>! $FiLeTmP_COULEURS$ROUGE
$Z $CA $FiLeTmP_TORE | \
$Z $SE -e "s/^.* VERTE=//" \
$Z -e 's/ .*$//' \
$Z >>! $FiLeTmP_COULEURS$VERTE
$Z $CA $FiLeTmP_TORE | \
$Z $SE -e "s/^.* BLEUE=//" \
$Z -e 's/ .*$//' \
$Z >>! $FiLeTmP_COULEURS$BLEUE
$Z # Recuperation des couleurs {ROUGE,VERTE,BLEUE}. #
$Z $CA $FiLeTmP_TORE | \
$Z $SE -e "s/^.* RAYON=//" \
$Z -e 's/ .*$//' \
$Z >>! $FiLeTmP_RAYONS
$Z # Recuperation des rayons. #
$Z set NPointsX=`$CA $FiLeTmP_COORDONNEES$COORD_X | $WCl`
$Z set NPointsY=`$CA $FiLeTmP_COORDONNEES$COORD_Y | $WCl`
$Z set NPointsZ=`$CA $FiLeTmP_COORDONNEES$COORD_Z | $WCl`
#20220615104523____:$Z set NPointsXYZ=`$xcg/MAX3.01$X x=$NPointsX y=$NPointsY z=$NPointsZ entier=VRAI` #
$Z set NPointsXYZ=`$xcg/MIN3.01$X x=$NPointsX y=$NPointsY z=$NPointsZ entier=VRAI`
$Z if (-e $_____RotationOY) then
$Z # La possibilite que '$_____RotationOY' soit un fichier fut introduite le 20120611103448 #
$Z # afin de pouvoir generer des stereogrammes en particulier... #
$Z set NImAgEs=`$CA $_____RotationOY | $WCl`
$Z set ImAgER=$_____ImageR.
$Z set ChIfFrEs=4
$Z else
$Z set NImAgEs=1
$Z set ImAgER=$_____ImageR
$Z set ChIfFrEs=0
$Z endif
$Z $xrv/particule.10$X np=$NImAgEs iterations=$NPointsXYZ \
$Z LISTE_X=$FiLeTmP_COORDONNEES$COORD_X \
$Z LISTE_Y=$FiLeTmP_COORDONNEES$COORD_Y \
$Z LISTE_Z=$FiLeTmP_COORDONNEES$COORD_Z \
$Z LISTE_RAYON=$FiLeTmP_RAYONS \
$Z LISTE_ROUGE=$FiLeTmP_COULEURS$ROUGE \
$Z LISTE_VERTE=$FiLeTmP_COULEURS$VERTE \
$Z LISTE_BLEUE=$FiLeTmP_COULEURS$BLEUE \
$Z ajuster_couleurs=$_____AjustCouleurs \
$Z ajuster_couleurs_independamment_homothetie=$_____AjustCouleursH \
$Z ajuster_couleurs_independamment_translation=$_____AjustCouleursT \
$Z BR=$_____TranslationRVB BV=$_____TranslationRVB BB=$_____TranslationRVB \
$Z Lz=1000 \
$Z Zminimum=$_____DepthCueing ZminimumT=$_____DepthCueing \
$Z ROTATION_OX=$_____RotationOX \
$Z ROTATION_OY=$_____RotationOY \
$Z ROTATION_OZ=$_____RotationOZ \
$Z ZOOM=$_____Zoom \
$Z isoles=FAUX chainer=FAUX \
$Z ajuster_points=VRAI points=$_____Points nombreR=$_____NombreR \
$Z equidistance=VRAI compatibilite_20051230=FAUX \
$Z cubique=$_____Cubique \
$Z derivees_automatiques=FAUX \
$Z LISTE_dX=$_____DeriveeX LISTE_dY=$_____DeriveeY LISTE_dZ=$_____DeriveeZ \
$Z RVB=VRAI \
$Z N_AU_CARRE=$N_Au_CaRrE \
$Z $_____ParticulePara1 \
$Z R=$ImAgER \
$Z chiffres=$ChIfFrEs \
$Z CAL1=FAUX \
$Z $formatI
$Z # Visualisation du noeud... #
$Z FileTmpE FiLeTmP_RAYONS
$Z FileTmpE FiLeTmP_COULEURS
$Z FileTmpE FiLeTmP_COORDONNEES
$Z FileTmpE FiLeTmP_TORE
$Z else
$Z EROR "La surface '$_____SurfaceA' n'existe pas."
$Z endif