Aller au contenu

Marques de pliures dynamique en A4


bonuscad

Messages recommandés

Bonsoir à tous,

 

Je vous présente un bout de code, qui dans l'état est encore fun

Je pense aller plus loin. L'idée de départ et de faire une marque de pliage en dynamique de format A4 pour réaliser une mise en page la plus adéquate possible.

L'idée finale sera de faire un carroyage lambert le plus simplement possible de façon assistée (j'essaye de reprendre réécriture, plus actuelle, de mes anciens codes)

 

Voici où j'en suis rendu, je pense ajouter par la suite la notion de déplacement, d'échelle (gérer la notion d'échelle maxi par rapport à la possibilité d'un format A0 rouleau) ainsi qu'un pliage portrait ou paysage.

 

Le code qui je l'espère pourra vous formuler des idées.

 

(defun des_vec (lst col / lst_sg)
 (setq lst_sg (list (cadr lst) (car lst)))
 (setq lst (cdr lst))
 (while lst
   (if (cadr lst)
     (setq lst_sg (cons (cadr lst) (cons (car lst) lst_sg)))
     (setq lst_sg (cons (last lst_sg) (cons (car lst) lst_sg)))
   )
   (setq lst (cdr lst))
 )
 (setq lst_sg (cons col lst_sg))
 (grvecs lst_sg)
)
(defun c:A4_dyn ( / hview old_snapang pt_ins dx dy format_scale pt_tmp ang key pt_key n nb_column nb_raw pt_row count s_ang)
 (setq
   hview (getvar "VIEWSIZE")
   old_snapang (getvar "SNAPANG")
   pt_ins (list (- (car (getvar "VIEWCTR")) (* hview 0.5)) (- (cadr (getvar "VIEWCTR")) (* hview 0.5)))
   dx 210.0 dy (* 210.0 (sqrt 2)) format_scale 1.0 pt_tmp pt_ins ang (getvar "SNAPANG")
 )
 (if (> (fix (/ hview dy)) 3)
   (while (> (fix (/ hview dy)) 3)
     (setq format_scale (* format_scale 10) dx (* dx 10) dy (* dy 10))
   )
 )
 (if (< (fix (/ hview dy)) 1)
   (while (< (fix (/ hview dy)) 1)
     (setq format_scale (* format_scale 0.1) dx (* dx 0.1) dy (* dy 0.1))
   )
 )
 (princ "\nSpécifiez le coin haut droit ou [R] pour effectuer une rotation, [D] un déplacement, [+/-] un changement d'échelle: ")
 (while (and (setq key (grread T 4 0)) (/= (car key) 3))
   (cond
     ((eq (car key) 5)
       (setq pt_key (cadr key))
       (setq n
         (*
           (setq nb_column (fix (/ (+ (* (- (car pt_key) (car pt_ins)) (cos ang)) (* (- (cadr pt_key) (cadr pt_ins)) (sin ang))) dx)))
           (setq nb_raw (fix (/ (- (* (- (cadr pt_key) (cadr pt_ins)) (cos ang)) (* (- (car pt_key) (car pt_ins)) (sin ang))) dy)))
         )
         pt_row pt_ins count 0
       )
       (redraw)
       (repeat n
         (des_vec
           (list
             (list (car pt_ins) (cadr pt_ins))
             (list (+ (car pt_ins) (* dx (cos ang))) (+ (cadr pt_ins) (* dx (sin ang))))
             (list
               (+ (car pt_ins) (- (* dx (cos ang)) (* dy (sin ang))))
               (+ (cadr pt_ins) (+ (* dy (cos ang)) (* dx (sin ang))))
             )
             (list (- (car pt_ins) (* dy (sin ang))) (+ (cadr pt_ins) (* dy (cos ang))))
           )
           3
         )
         (setq count (1+ count))
         (if (< count nb_column)
           (setq pt_ins (list (+ (car pt_ins) (* dx (cos ang))) (+ (cadr pt_ins) (* dx (sin ang)))))
           (setq pt_ins (list (- (car pt_row) (* dy (sin ang))) (+ (cadr pt_row) (* dy (cos ang)))) pt_row pt_ins count 0)
         )
       )
       (setq pt_ins pt_tmp)
     )
     ((or (eq (cadr key) 114) (eq (cadr key) 82))
       (initget 0)
       (setq s_ang
         (getorient pt_ins
           (strcat
             "\nNouvel angle<"
             (angtos (getvar "SNAPANG"))
             ">: "
           )
         )
       )
       (if (not s_ang) (setq s_ang ang))
       (if (and (> s_ang (/ pi 2)) (<= s_ang (/ (* 3 pi) 2)))
         (setq ang (+ s_ang pi))
         (setq ang s_ang)
       )
       (setvar "SNAPANG" ang)
       (princ "\nSpécifiez le coin haut droit ou [R] pour effectuer une rotation, [D] un déplacement, [+/-] un changement d'échelle: ")
     )
     ((or (eq (cadr key) 100) (eq (cadr key) 68))
       (initget 9)
       (setq pt_ins (getpoint "\nSpécifiez le coin bas gauche: "))
       (setq pt_ins (list (car pt_ins) (cadr pt_ins)) pt_tmp pt_ins)
       (princ "\nSpécifiez le coin haut droit ou [R] pour effectuer une rotation, [D] un déplacement, [+/-] un changement d'échelle: ")
     )
     ((eq (cadr key) 43)
       (setq format_scale (* format_scale 2.0) dx (* dx 2.0) dy (* dy 2.0))
     )
     ((eq (cadr key) 45)
       (setq format_scale (* format_scale 0.5) dx (* dx 0.5) dy (* dy 0.5))
     )
   )
 )
 (setvar "SNAPANG" old_snapang)
 (princ "\n")
 (redraw)
 (prin1)
)

 

[Edité le 27/7/2010 par bonuscad]

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Une mise à jour du code ci-dessus

 

Il sera plus facile de le tester; définition des paramètre de départ adapté à la vue en cours.

J'ai rajouté le déplacement et l'échelle (facteur de 2 par rapport à celle calculée de la vue initiale).

 

Dans l'état ce code n'a aucune influence sur le dessin en cours, les trace sont virtuelles (mis à part la variable SNAPANG, si la routine est "breakée")

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité