Dessiner des LIGNES (suite)

Après avoir vu comment dessiner une ligne on va voir comment dessiner un cercle englobant cette ligne, ce genre de figure :

Donc il va d'abord falloir dessiner une ligne définie par deux points comme déjà vu mais on va "programmer" un tantinet plus , c'est à dire faire une fonction qui va "calculer" le milieu de la la ligne, et de ce milieu on pourra dessiner un cercle dont le diamètre est la longueur de la ligne. Tout le monde suit ?

On va donc reprendre l'exercice du chapitre précédent :

;;; dessiner une ligne :
( setq pt-dep ( getpoint "\nCliquez un point pour le départ de la ligne \n" )
           pt-arr ( getpoint pt-dep "\nCliquez un point qui sera la fin de la ligne\n" ) )
( command "_line" pt-dep pt-arr "" )

Passons à la fonction de calcul du milieu, elle aura besoin de deux arguments qui seront les deux points début et fin de la droite.
Comment trouver le milieu de deux points connus en X Y ?
Simplement en faisant une liste de la moyenne des coordonnées des points, autrement dit on extrait chaque X, on les additionne, et on divise par deux ce résultat, on fait pareil pour les Y et on met le tout dans une liste avec la fonction (list).
j'utilise les fonctions car et cadr puis l'addition et enfin la division,
tout le monde est OK ? me contacter si une explication est confuse.

comme ceci (en image de code pour vous habituer à taper vos commandes)

ou comme ceci pour les copieurs-colleurs :

( defun da:mil-2-pts ( p1 p2 )
( list
        ( / 
           ( + ( car p1 ) ( car p2 ) )
       2.0 )
       ( /
           ( + ( cadr p1 ) ( cadr p2 ) )
       2.0 )
    )
) ;fin defun da:mil-2-pts

Une fois que la fonction est créée elle peut servir autant de fois que de besoin, (c'est un des gros avantages de la programmation) il suffira de la mettre dans une ligne de code comme une fonction native en lui donnant ses arguments attendus, en l'occurrence deux triplets de points :
(elle est surlignée en jaune sur l'image qui suit)

( setq pt-dep ( getpoint "\nCliquez un point pour le départ de la ligne \n" )
           pt-arr ( getpoint pt-dep "\nCliquez un point qui sera la fin de la ligne\n" )
)
( setvar "cecolor" "1" )
( command "_line" pt--dep pt-arr "" )
( setvar "cecolor" "5" )
( setq centrecercle ( da:mil-2-pts pt-dep pt-arr ) )
( command "_circle" centrecercle "d" ( distance pt-dep pt-arr ) )
( setvar "cecolor" "256" )

Les appels à (setvar "cecolor" "1") servent à modifier le contenu de la variable "cecolor" ce qui équivaut à forcer la couleur de dessin de la prochaine entité, le "1" signifie "rouge", le "2" " jaune" etc. dans l'ordre des couleurs. Vous avez noté que la réponse à l'appel de la variable est entré sous forme de chaîne de caractère (string).
Je suis tout à fait conscient que ce n'est pas bien de forcer les couleurs et qu'il vaut mieux mettre l'entité dans un autre calque avec la couleur "ducalque", je vous expliquerai rapidement comment changer l'entité de calque, chaque chose en son temps, tout ça c'est pour faire des exemples.

Vous avez remarqué que j'ai mis mes initiales en préfixe de la nouvelle fonction, ce n'est pas par mégalomanie, je ne crois pas souffrir de ce mal, c'est simplement pour personnaliser le nom de la fonction et pour ne pas emprunter par erreur un nom réservé par le logiciel et, éventuellement, reconnaître mon travail si quelqu'un copie-colle le code pour le fourrer dans le sien sans citer l'auteur ce qui est courant mais en désaccord avec les bonnes pratiques.

   
on continue ? ...

Haut de page

Revenir au menu LIgnes


11 novembre 2017