Numéro de page

Numéro de page

Anonymous
Non applicable
8 203 Visites
20 Réponses
Message 1 sur 21

Numéro de page

Anonymous
Non applicable

bonjour à tous,

 

Comme beaucoup de monde j'ai des fichiers .dwg qui comporte un certain nombre de présentation. Je cherche un moyen de récupérer le position de la présentation pour en faire un numéro de page.

 

Aprés quelque recherche j'ai vue des choses plus ou moyen convaincante. Une des solutions est de renommer la présentation avec un numéro mais si j'insert une nouvelle présentation il faudra renommer toutes les présentation, ce qui est quasiment plus long que de changer un texte (numéro) sur toute les présentations.

Et deuxième point, mon carnet de plan regroupe deux fichiers dwg. J'édite des carnets de plan d'environ 20 à 30 pages.

 

Le top serai de pouvoir récupérer la position de la présentation dans un champ. 

la formule pourrait ce traduire comme ci-dessous

champ numéro de départ + champ position = numéro de page 

 

Donc si j'insert le champ "numéro de page" j'ai automatiquement le bon numéro. Si je déplace ou insert une présentation les numéros se mette à jour.

 

Je pense que la solution viendra avec du lisp (utilisation et langage inconnue pour moi). 

 

merci d'avance pour votre aide 

et au plaisir de lire vos solutions

 

 

0 J'aime
Solutions acceptées (2)
8 204 Visites
20 Réponses
Replies (20)
Message 2 sur 21

patrick_35
Collaborator
Collaborator

Salut

 

Tu as RON qui renumérote les onglets de 01 à ...

Ensuite, avec un champ, tu peux récupérer la valeur souhaitée.

 

@+

0 J'aime
Message 3 sur 21

Remy_MAURCOT
Advisor
Advisor
Solution acceptée

Bonjour,

 

Pour compléter un peu la réponse, tu peux aller plus loin qu'un simple champs en utilisant une expression diesel au sein de ton texte.

 

Par exemple pour une présentation qui se nomme FAR - PL - 999 A

Tu peux utiliser l'expression suivante pour récupérer seulement FAR - PL - 999

$(substr,$(getvar, ctab),1,$(-, $(strlen, $(getvar, ctab)) [, 2]))

 

Tu peux aussi extraire lettre par lettre, comme par exemple pour l'indice de révision A:

$(substr,$(getvar, ctab),$(-, $(strlen, $(getvar, ctab)) [, 1]),1)

 

Couplé au jeu de feuille cela devient un bonheur !

 

Dans mon ancien bureau d'étude, j'avais crée un cartouche automatique avec des chanmps de ce type et des champs personnalisés en exploitant ces expressions, par exemple avec les propriétés du dessin.

 

Si besoin de plus d'explications, n'hésite pas !

 


Rémy MAURCOT
BIM Manager

Mon C.V.
Profil LinkedIn
Message 4 sur 21

Anonymous
Non applicable

Bonjour, 

 

Après quelques  essais j'ai réussi à faire fonctionner  là fonction Ron de patrick_35.  Par contre elle est pas mal pour renommée mais cela écrase les noms déjà  définie.  En faite je voudrais garder les noms déjà definie et ajoutez  uniquement un préfixe ( garder un nom de presentation peux être pratique pour retrouver c'est petit). 

0 J'aime
Message 5 sur 21

braudpat
Mentor
Mentor

 

Hello

 

Welcome to the Autodesk / AutoCAD Forums !

 

J'ai une Routine qui fait PRESQUE le Boulot !

MAIS malheureusement elle ne numerote pas dans l'ordre les Presentations et je ne sais pas pourquoi ?

 

La routine originale (ou sa copine avec un Suffixe) me permet de renommer TOUTEs les Presentations avec un Prefixe et j'ai essaye de la modifier MAIS mes connaissances en Lisp/VLisp sont tres faibles !

 

En esperant que Patrick_35, Gilles ou autre Pro du Lisp/VLisp la corrige !?

 

Regards, Patrice

 

 

;; 
;; Routine: Layout_Rename 
;;
;; Micro-Adaptation / Modification par Patrice BRAUD v1
;; Modifier en consequence la ligne :  (setq prefixlayout "OLD__") 
;; 
;; Micro-Modif v2 avec un PREFIX 101,102,103,etc + "__"
;; 
 
 (defun c:Layout_Rename ( / prefixlayout     i oldName  j  pref )
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
  (setq prefixlayout "OLD__") 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

 (command "_undo" "_begin")
  
 (setq i 0)  

 (setq j 101) ;; depart avec J =  101 
  
 (mapcar 
  '(lambda (oldName) 

    (setq pref (rtos j 2 0)) 

;;  (command "_.layout" "_rename" oldName  (strcat  prefixlayout       oldname  )) 
    (command "_.layout" "_rename" oldName  (strcat  pref   "__"         oldname  ))  ;; Micro-Modif v2 par Patrice 

    (setq i (1+ i)) 

    (setq j (1+ j))  ;; J = J+1

   )
   (layoutlist)
 )

 (command "_undo" "_end")

 (princ)
)

 

 

Patrice ( Supporting Troops ) - Autodesk Expert Elite
If you are happy with my answer please mark "Accept as Solution" and if very happy please give me a Kudos (Felicitations) - Thanks

Patrice BRAUD

EESignature


0 J'aime
Message 6 sur 21

patrick_35
Collaborator
Collaborator

Salut

 

Ce que tu demandes est spécifique. Comment reconnaitre un nouvel onglet ou éviter d'ajouter un préfix après une nouvelle utilisation du lisp ?
Indique-nous comment sont numérotés tes onglets.

 

@Anonymous
Tu utilises (layoutlist) pour récupérer le nom des présentations qui sont triées dans l'ordre alphabètique, ce qui n'est pas obligatoirement leurs ordre dans le dessin.
Pour cela, une petite fonction

(defun ordre_layouts(/ lay lst)
  (vlax-for lay (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))
    (setq lst (cons (cons (vla-get-taborder lay) (vla-get-name lay)) lst))
  )
  (vl-remove "Model" (mapcar 'cdr (vl-sort lst '(lambda(a b)(< (car a) (car b))))))
)

@+

0 J'aime
Message 7 sur 21

braudpat
Mentor
Mentor

 

Hello Patrick

 

Et donc SVP la routine "Layout_Rename" integree avec TA fonction "ordre_layouts, cela s'ecrirait comment SVP ?

 

Car la fonction mapcar me fait planer !?

 

Merci d'avance, Regards, Patrice

 

 

Patrice ( Supporting Troops ) - Autodesk Expert Elite
If you are happy with my answer please mark "Accept as Solution" and if very happy please give me a Kudos (Felicitations) - Thanks

Patrice BRAUD

EESignature


0 J'aime
Message 8 sur 21

patrick_35
Collaborator
Collaborator

Dans ta routine, tu remplaces (layoutlist) par (ordre_layouts)

 

Pour simplifier, la fonction mapcar n'est qu'une boucle dans laquelle passe les arguments d'une liste

Un exemple qui illustre bien la fonction mapcar, ajouter 1 a cette liste '(0 1 2 3 4 5 6 7 8 9)

(mapcar '1+ '(0 1 2 3 4 5 6 7 8 9))

@+

Message 9 sur 21

braudpat
Mentor
Mentor

 

Hello Patrick_35

 

MERCI , ca fonctionne "magnifiquement" !

 

Ci-dessous la nouvelle version de la routine "Layout_Rename" qui GARDE l'Odre des Presentations / Layouts

 

Regards, Patrice

 

 

 

 
;; 
;; Routine: Layout_Rename 
;;
;; Micro-Adaptation / Modification par Patrice BRAUD v1
;; Modifier en consequence la ligne :  (setq prefixlayout "OLD__") 
;; 
;; Micro-Modif v2 avec un PREFIX 101,102,103,etc + "__" 
;; 
;; Micro-Modif v3 : Ordre des Presentations / Layouts CONSERVE - Merci Patrick_35
;; 
 
(vl-load-com)
(defun c:Layout_Rename ( / prefixlayout i oldName j pref ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (setq prefixlayout "OLD__") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (command "_undo" "_begin") (setq i 0) (setq j 101) ;; depart avec J = 101 (mapcar '(lambda (oldName) (setq pref (rtos j 2 0)) ;; (command "_.layout" "_rename" oldName (strcat prefixlayout oldname )) (command "_.layout" "_rename" oldName (strcat pref "__" oldname )) ;; Micro-Modif v2 par Patrice (setq i (1+ i)) (setq j (1+ j)) ;; J = J+1 ) ;;;;;;;;;; ReOrganise l Ordre des Presentations / Layouts ;; (layoutlist) ;;;;;;;;;; Garde l Ordre Ordre des Presentations / Layouts - Merci Patrick_35 (ordre_layouts) ;;;;;;;;;; ) (command "_undo" "_end") (princ) ) ;;; Fonction de P35 (defun ordre_layouts(/ lay lst) (vlax-for lay (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object))) (setq lst (cons (cons (vla-get-taborder lay) (vla-get-name lay)) lst)) ) (vl-remove "Model" (mapcar 'cdr (vl-sort lst '(lambda(a b)(< (car a) (car b)))))) )

 

 

Patrice ( Supporting Troops ) - Autodesk Expert Elite
If you are happy with my answer please mark "Accept as Solution" and if very happy please give me a Kudos (Felicitations) - Thanks

Patrice BRAUD

EESignature


0 J'aime
Message 10 sur 21

Anonymous
Non applicable

bonjour,

 

j'ai essayé la fonction donné si dessus mais celle-ci ne fonctionne pas.

 

j'ai copier coller la fonction sur un bloc note, j'ai changé l'extention en .lsp

dans un fichier autocad avec pas mal de présentation renomé j'ai importé le fichier lsp et "chargé la fenetre d'édition active" fermé le visual Lisp

Exécuté la commande. Ci dessous ce qui s'affiche dans la barre de commande autocad 

 

LAYOUT_RENAME
_undo Paramètres courants: Auto = Activé, Contrôle = Tous, Associer = Oui, Calque = Oui
Entrez le nombre d'opérations à annuler ou [Auto/Contrôle/Début/Fin/Marque/Retour] <1>: _begin
Commande: VVC: Internal Error

 

une idée sur le probléme?

merci d'avance à vous 

0 J'aime
Message 11 sur 21

braudpat
Mentor
Mentor

 

Hello

 

1) Desole mais j'ai teste cette routine "Layout_Rename" v3 sur ACAD MAP 2014 et sur ACAD MAP  2017 !

Encore MERCI a Patrick_35 !!

 

2) Tu trouveras ci-joint la routine Lisp/VLisp "Layout_Rename" v3 en fichier attache ...

 

3) Chargement par :  APPLOAD <Enter>  et  Execution par :  Layout_Rename <Enter>

 

4) Tu es avec quelle version d'AutoCAD exactement ?

 

Regards, Patrice

 

Patrice ( Supporting Troops ) - Autodesk Expert Elite
If you are happy with my answer please mark "Accept as Solution" and if very happy please give me a Kudos (Felicitations) - Thanks

Patrice BRAUD

EESignature


0 J'aime
Message 12 sur 21

patrick_35
Collaborator
Collaborator

on dirait que le lisp est bien chargé et qu'il plante entre le moment ou on définit le undo et la commande _.layout.

 

Tu n'as rien changé ?

Sinon relance Autocad.

Si cela ne change rien, peux-tu donner un exemple qui plante ?

 

@+

0 J'aime
Message 13 sur 21

braudpat
Mentor
Mentor

 

Hello Patrick

 

Remarque: j'ai teste avec des/mes DWGs dont les Noms de Presentations/Layouts sont STRICTS ! 

Aucun caractere special, aucun accent, aucun blanc/espace, etc ...  

Penses tu que cela pourrait etre le probleme ? 

 

Regards, Patrice

 

Patrice ( Supporting Troops ) - Autodesk Expert Elite
If you are happy with my answer please mark "Accept as Solution" and if very happy please give me a Kudos (Felicitations) - Thanks

Patrice BRAUD

EESignature


0 J'aime
Message 14 sur 21

patrick_35
Collaborator
Collaborator

Je n'avais pas testé ton lisp, mais comme @Anonymous à une erreur, j'ai testé sur un dessin au hasard et tout s'est bien passé.

Ce n'est que la commande renommer.

Donc

1) Il à peut-être mis son propre préfix type alphanumérique, mais normalement une erreur du type ; erreur: type d'argument incorrect: numberp: nil

2) Autocad commence à merder, le fermer et le relancer et tout rentre dans l'ordre. Cela m'arrive parfois avec des lisps qui fonctionnent correctement et d'un seul coup Smiley surpris

3) Rien de tout ça et un exemple qui plante devrait nous renseigner sur la cause probable.

 

@+

0 J'aime
Message 15 sur 21

Anonymous
Non applicable

j'ai testé rapidement je prendrai le temps de faire plus ample essai dans le week end 

 

pour information j'ai rein modifier sur le code donné

j'ai autocad 2016

j'ai testé sur plusieurs fichier présentation renommé avec ou sans espace et sans caractère spéciaux.

 

 

 

0 J'aime
Message 16 sur 21

Anonymous
Non applicable

Je viens de refaire un test sur un autre pc qui a le même autocad 2016. 

toujours le même problème. 

 

je joint un petit plan exemple.

 

merci d'avance  

 

0 J'aime
Message 17 sur 21

braudpat
Mentor
Mentor

 

Hello

 

Bon j'ai reteste la routine "Layout_Rename" v3 (Voir mon message du 2016-11-04 01:56 PM )

sur ACAD MAP 2017 x64 = OK  avec ton DWG et mon DWG ...

 

*** 1 *** Dans tous les cas sur ACAD MAP 2016 x64 et sur ACAD 2015 x64, j'obtiens la meme erreur :

 

Commande: LAYOUT_RENAME
_undo Paramètres courants: Auto = Activé, Contrôle = Tous, Associer = Oui, Calque = Oui
Entrez le nombre d'opérations à annuler ou [Auto/Contrôle/Début/Fin/Marque/Retour] <1>: _begin
Commande: VVC: Internal Error

 

Cela me parait ETONNANT vu la faible complexite de la routine VLisp !!

 

*** 2 *** DE PLUS avec la version v2 qui n'inclut pas la fonction (ordre_layouts) de Patrick_35: MEME probleme !

 

*** 3 *** Comportement different du mapcar en 2017 par rapport aux versions precedentes !?

 

*** 4 *** Peut etre que le Grand Maitre Patrick_35 saura nous expliquer et corriger !?

 

Regards, Patrice

 

 

 

Patrice ( Supporting Troops ) - Autodesk Expert Elite
If you are happy with my answer please mark "Accept as Solution" and if very happy please give me a Kudos (Felicitations) - Thanks

Patrice BRAUD

EESignature


0 J'aime
Message 18 sur 21

patrick_35
Collaborator
Collaborator
Solution acceptée

Salut

 

J'ai testé ta routine sur mon Autocad 2014 et tout fonctionne normalement.

J'ai ouvert 3 fois le dessin et par trois fois, ça fonctionne.

C'est 2016 qui pose problème ?

 

Une version en pur vlisp, histoire de voir si ça fonctionne.

(defun c:layout_rename(/ doc j lay lst)
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))




  (setq j 100) ;; depart avec J =  101 




  (vla-startundomark doc)
  (vlax-for lay (vla-get-layouts doc)
    (setq lst (cons (cons (vla-get-taborder lay) lay) lst))
  )
  (mapcar '(lambda(x)
	    (vla-put-name x (strcat (itoa (setq j (1+ j))) "__" (vla-get-name x)))
	  )
	  (cdr (mapcar 'cdr (vl-sort lst '(lambda(a b)(< (car a) (car b))))))
  )
  (vla-endundomark doc)
  (princ)
)

@+

Message 19 sur 21

patrick_35
Collaborator
Collaborator

Je viens de me souvenir qu'il y avait un problème de comptabilité avec command depuis la 2015. Problème corrigé avec la 2017 on dirait.

Voir ce sujet

 

@+

0 J'aime
Message 20 sur 21

Anonymous
Non applicable

bonjour,

 

merci à vous tous pour votre aide, tout marche correctement.

 

la dernière proposition de @patrick_35 est impeccable.

 

merci a @Remy_MAURCOT qui ma permis de me donner un début de réponse avec le champ pour la numérotation des pages

Ci-dessous ma formules diésel. Elle isole juste un seul caractère si le numéro de la page est inférieur à 10.

 

$(if,$(=,$(substr,$(getvar, ctab),2,1),0),$(substr,$(getvar, ctab),3,1),$(substr,$(getvar, ctab),2,2)) 

 

 

J'ai envie d'abuser un peu @patrick_35 est'il possible de créer un fonction qui efface la numérotation. 

exemple je doit déplacer une page ou en ajouté une je relance la commande Layout_Rename et la numérotation ce fera correctement mais j'aurai un deuxième préfixe. Imaginons que l'on ce trompe plusieurs fois. "101_ 101_ 101_ Dommage (1)"

 

merci d'avance 

est merci pour le travaille déjà fournie. 

 

0 J'aime