Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

J'ai un problème avec ma boucle "repeat",  cette boucle me permet de dupliquer des présentions dans lequel j'ai 2 viewports à chaque fois. Ainsi si je lui dis par exemple que j'ai 5 pages, il va me faire 2 copies, 4 pages 1 copie etc, jusqu’à là tout fonctionne. De plus j'ai fais en sorte d'avoir un décalage avec la fonction pan dans chaque viewports, de manière linéaire. c'est à dire dans le viewport 2 j'ai 1 x "valeur decalage"  dans le viewport 3 j'ai 2x"valeur decalage" etc

L'élément problématique ici est le fait qu'avec, 3,4,5,6 pages cela fonctionne très bien mais à partir de 7 pages donc 4 copies les décalages de pan sont complétement déréglés. Et je comprends pas pourquoi c'est à partir de ce moment là alors que tout fonctionne par paire (5 et 6; 7 et 8 ; 9 et 10 etc...)
De plus je tiens à dire que les duplications de layout se passent bien comme je le souhaite.

Voici le lisp :

 

 
(setq nb (atoi nombre_pages))  ;; Convertir en entier si nécessaire
 
  (if (< nb 3)
    (princ "\nMoins de 3, donc pas de copie.")
    (progn
      ;; Calcul du nombre de copies en fonction du nombre saisi
      (if (<= nb 4)
        (setq copies 1)
        (setq copies (+ 2 (fix (/ (- nb 5) 2)))))
      (princ (strcat "\nLa commande sera exécutée " (itoa copies) " fois."))

      ;; échelle
     
      (setq ptpan1 (list 0 0))  ;; Point de départ fixe
      (setq ptpandecal1
            (cond
              ((or (= choix_echelle "1/50"))   (list 0 (* (/ Latab 20) copies)))
          
          
              ((or (= choix_echelle "1/100")) (list 0 (* (/ Latab 10) copies)))
          
          
              ((or (= choix_echelle "1/25")) (list 0 (* (/ Latab 40) copies)))
          
              (T (list 0 0))  ;; Échelle non reconnue : pas de décalage
            )
        (princ (strcat "\nValeur du décalage : " (itoa copies)))
      )

      (setq i 0)
      (repeat copies                          ; LE PROBLEME ARRIVE DANS CETTE BOUCLE
        (progn
          ;; Construit un nom dynamique pour la présentation :
          ;; la première copie s'appellera "n", puis "n1", "n2", etc.
          (setq nameSuffix (if (= i 0)
                               "n"
                               (strcat "n" (itoa i))))
          (princ (strcat "\nCréation de la présentation : " nameSuffix))

          ;; --- Copie et établissement de la présentation actuelle avec un nom unique ---
          (command "-presentation" "c" "" nameSuffix)
          (command "-presentation" "E" nameSuffix)

                                                                                                 
          

          ;; --- Sélection des viewports dans le layout actif ---
          (setq ss (ssget "X" (list (cons 0 "VIEWPORT") (cons 410 (getvar "CTAB")))))
          (if ss
            (progn
              (princ (strcat "\n" (itoa (sslength ss)) " viewport(s) sélectionné(s)."))
              ;; Si plusieurs viewports existent, on sélectionne le premier
              (if (> (sslength ss) 1)
                (progn
                  (setq viewport1 (ssname ss 0))
                  (princ "\nPremier viewport sélectionné.")
                )
              )
            )
            (princ "\nAucun viewport trouvé.")
          )

          ;; Passage en espace objet
          (command "_MSPACE")


      ; Deverrouillage VIEWPORT
         (command "_mview" "V" "I" "TOUT" "")

      
          ;; --- Déplacement de la vue (PAN) ---
          (command "-pan" ptpan1 ptpandecal1)

          ;; --- Sélection et modification du viewport actif ---
          (setq ss (ssget "X" (list (cons 0 "VIEWPORT")
                                    (cons 410 (getvar "CTAB")))))
          (if ss
            (progn
              (setq num (sslength ss))
              (princ (strcat "\nNombre de viewports trouvés : " (itoa num)))
              (if (>= num 3)
                (progn
                  ;; Sélection directe du troisième viewport (index = 3)
                  (setq vp-index 3)
                  (command-s "_MSPACE")
                  (setvar "CVPORT" vp-index)
                  (princ (strcat "\nViewport " (itoa vp-index) " activé."))
                )
                (princ "\nIl n'y a pas assez de viewports.")
              )
            )
            (princ "\nAucun viewport trouvé.")
          )

          ;; --- Réexécution du déplacement (PAN) ---
          (command "-pan" ptpan1 ptpandecal1)
          
          (princ "\n--- Exécution de la copie terminée ---")
      
     ; Deverrouillage VIEWPORT
         (command "_mview" "V" "A" "TOUT" "")

          (setq i (1+ i))
        )
      )
    )
  )

 


 

Posté(e)

Bonjour

Je ne comprends pas vraiment la question, car je n'arrive pas à reproduire le souci.
Le LSP semble incomplet et si ça se trouve l'erreur est dans ce qui n'est pas fourni.

Je remarque quelques erreurs de-ci de-là, mais rien de bloquant.
Vous pourriez nous donner un DWG et le LSP complet s'il vous plaît ?
Pour essayer de trouver une réponse appropriée.

Annotez le DWG pour nous expliquer les phases.
Et nous décrire le souci ou donner le message d'erreur.

Amicalement

Éternel débutant…
Mon site perso : Programmer dans AutoCAD

 

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é