Aller au contenu

modification de iat de patrick 35


dilack

Messages recommandés

salut à tous,

Patrick ou les pros du lisp si vous passez par là je cherche à modifier le lisp "iat" de patrick pour effectuer une sélection par fenetre pour gagner du temps.

;;;=================================================================

;;;

;;; IAT.LSP V1.10

;;;

;;; Incrémenter sur des attributs

;;;

;;; Copyright © Patrick_35

;;;

;;;=================================================================

 

(defun c:iat(/ Boucle Ent Js inc n_ini nb nb_dec old_error erriat incsuff Trouve select)

 

(defun erriat(msg)

(if (/= msg "Function cancelled")

(if (= msg "quit / exit abort")

(princ)

(princ (strcat "\nErreur : " msg))

)

(princ)

)

(setq Boucle 0)

(while (ssname Js Boucle)

(redraw (ssname Js Boucle) 4)

(setq Boucle (1+ Boucle))

)

(setq *error* old_error)

(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))

(princ)

)

 

;-------------------------------------------------------------------------

; Incrementer la valeur de +1

;-------------------------------------------------------------------------

 

;; INCSUFF - Gilles Chanteau - 15/01/08

;; Incrémente le suffixe d'une chaîne de caractères de la valeur spécifiée.

;; Est pris en compte comme suffixe, l'ensemble des caractères [0-9] depuis

;; la fin de la chaîne ainsi que les caractères [A-Z] et [a-z] si alpha est non nil

;;

;; Arguments

;; str : une chaîne avec un suffixe valide

;; inc : un entier positif

;; alpha : si non nil, les caractères [a-z] [A-Z] sont intégrés au suffixe

;;

;; Retour

;; la chaîne avec son suffixe incrémenté (ou nil si aucun suffixe valide)

;;

;; Exemples :

;; (incsuff "N°002" 12 T) = "N°014"

;; (incsuff "test_ZZ9" 1 T) = "test_AAA0"

;; (incsuff "test_ZZ9" 1 nil) = "test_ZZ10"

;; (incsuff "12-" 1 nil) = nil

 

(defun incsuff (str inc alpha / lst crt pas ind dep quo ret)

(setq lst (reverse (vl-string->list str)))

(while

(and

(setq crt (car lst))

(cond

((< 47 crt 58)

(setq pas 10

ind 48

)

)

((and alpha (< 64 crt 91))

(setq pas 26

ind 65

)

)

((and alpha (< 96 crt 123))

(setq pas 26

ind 97

)

)

((< 0 quo)

(setq crt (if (= 10 pas)

ind

(1- ind)

)

lst (cons (car lst) lst)

)

)

)

)

(setq dep (- crt ind)

quo (/ (+ dep inc) pas)

ret (cons (+ ind (rem (+ dep inc) pas)) ret)

)

(if (zerop quo)

(setq ret (append (reverse (cdr lst)) ret)

lst nil

)

(if (cdr lst)

(setq lst (cdr lst)

inc quo

)

(setq lst (list ind)

inc (if (= 10 pas)

quo

(1- quo)

)

)

)

)

)

(if ret

(vl-list->string ret)

)

)

 

(defun Trouve(Tbl Ent / Boucle Rech)

(setq Boucle 0 Rech nil)

(while (ssname Tbl Boucle)

(if (eq (ssname Tbl Boucle) Ent)

(setq Rech T Boucle (1+ (sslength Tbl)))

)

(setq Boucle (1+ Boucle))

)

Rech

)

 

(defun select (Js / Ajout Boucle Ent Texte)

(setq Ent "" Ajout T)

(while Ent

(initget "Ajouter Retirer Supprimer")

(if Ajout

(setq Texte (strcat "\nSélectionner les attributs (" (itoa (sslength Js)) " sélectionné(s)) : "))

(setq Texte (strcat "\nRetirer les attributs (" (itoa (sslength Js)) " sélectionné(s)) : "))

)

(if (setq Ent (nentsel Texte))

(cond

((= Ent "")

(setq Ent nil)

)

((= Ent "Ajouter")

(setq Ajout T)

)

((or (= Ent "Retirer")(= Ent "Supprimer"))

(setq Ajout nil)

)

((= (cdr (assoc 0 (entget (car ent)))) "ATTRIB")

(if Ajout

(if (not (Trouve Js (car Ent)))

(progn

(setq Js (ssadd (car Ent) Js))

(redraw (car Ent) 3)

)

)

(if (Trouve Js (car Ent))

(progn

(setq Js (ssdel (car Ent) Js))

(redraw (car Ent) 4)

)

)

)

)

)

)

)

Js

)

 

(vl-load-com)

(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))

(setq Old_Error *error* *error* erriat)

(setq Js (select (ssadd)))

(if (setq n_ini (getstring T "\nIncrementer en débutant à [chiffre/lettre/alphanumérique] : "))

(progn

(setq Boucle 0)

(while (ssname Js Boucle)

(setq Ent (entget (ssname Js Boucle)))

(setq Ent (subst (cons 1 n_ini) (assoc 1 Ent) Ent))

(entmod Ent)

(redraw (cdr (assoc -1 Ent)) 4)

(entupd (cdr (assoc -1 Ent)))

(setq n_ini (incsuff n_ini 1 T))

(setq Boucle (1+ Boucle))

)

)

)

(setq *error* Old_Error)

(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))

(princ)

)

 

(setq nom_lisp "IAT")

(if (/= app nil)

(if (= (strcase (substr app (1+ (- (strlen app) (strlen nom_lisp))) (strlen nom_lisp))) nom_lisp)

(princ (strcat "..." nom_lisp " chargé."))

(princ (strcat "\n" nom_lisp ".LSP Chargé.....Tapez " nom_lisp " pour l'éxecuter.")))

(princ (strcat "\n" nom_lisp ".LSP Chargé......Tapez " nom_lisp " pour l'éxecuter.")))

(setq nom_lisp nil)

(princ)

 

merci d'avance pour m'avoir dépanner

 

[Edité le 6/7/2008 par dilack]

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à vous (CADxp)

 

 

Exacte , l'incrémentation ne fonctionne que lorsqu'on copie un bloc d'attribut , l'option avec une sélection par fenêtre des blocs m'intéresserai aussi .

 

** aussi (Patrick_35) avoir une incrémentation avec l'option choix " nombre de départ à incrémenter" et de combien ( 1 , 2 , 3 .... etc) voir les exemples:

 

(exemple 1 : mon 1er nombre est : " 1 " ; mon incrémentation est de: " 2 " )

donnant ce résultat d'incrémentation : 1 , 3 , 5 , 7 , 9 , 11 , 13 , 15 ... etc

 

ou ( exemple 2 : mon 1er nombre est : " 0 " ; mon incrémentation est de: " 3 " )

donnant ce résultat d'incrémentation : 0 , 3 , 6 , 9 , 12 , 15 , ... etc

 

Ainsi de suite ... ( plusieurs combinaisons possible )

 

Merci d'avance

 

 

 

 

[Edité le 6/7/2008 par JUJUZAZA]

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je me permet de répondre à la place Patrick_35.

Les attributs sont des sous-entités qui ne sont sélectionnables qu'un par un avec la fonction nentsel (ou nentselp).

Un jeu de sélection par fenêtre, avec ssget ne permet que de sélectionner des blocs et supposerait de ne filtrer que le bloc contenant l'attribut à incrémenter et dans chaque référence retrouver l'attribut à incrémenter (il peut y en avoir plusieurs)

Tout ceci alourdirait considérablement la routine (et les entrés utilisateur)

 

Plus important encore, une incrémentation suppose un ordre et si ce n'est pas l'utilisateur qui le choisis en sélectionnant les attributs un par un, c'est le LISP qui le fera suivant des critères (ordre de création des blocs par exemple) qui ne conviendront pas forcément.

Automatiser, c'est bien, mais il faut parfois garder le contrôle...

 

Par contre la valeur de l'incrément pourrait être spécifiée par l'utilisateur (option), je laisse le soin à Patrick de modifier son code.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Bonjour

Par contre la valeur de l'incrément pourrait être spécifiée par l'utilisateur (option), je laisse le soin à Patrick de modifier son code.

Tu pourrais aussi le faire ;)

Bon, c'est modifié en version 1.11

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à toutes et tous,

 

Ouh là Patrick_35,j'comprend rien à l'utilisation, désolé, ;)

 

Quand je choisi l'option "alphanumérique", par exemple, l'attribut prend ce nom (à droite sur l'image ci-dessous) et je sors de la fonction ??!! Autre exemple (en bas de l'image) avec l'option "chiffre"

 

http://images4.hiboox.com/images/2808/3489eaf535aec0a52d58fe1de9501056.jpg

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Re

 

Je n'avais pas vu que l'on pouvait avoir une liste déroulante avec le clic droit.

Il suffit de mettre un texte. C'était pour dire que toutes les combinaisons sont possibles.

Donc, taper directement un texte ou un chiffre à la question suffit

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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é