Aller au contenu

Messages recommandés

Posté(e)

SALUT

 

 

BRED si j'ai bein compris ton bout de LISP

on ne peut pas trouver le nom d'un groupe pour une entite

 

mais faut d'abord faire la liste des groupes et verifier ensuite si cette entite fait partie de la liste

c'est ca ??

 

y'a bcp d'autre truc comme ca, ou il faut résonner a l'envers ?? En LISP

 

bon sinon avec ton LISP j'en ai fait ca

 

 

  ; ------------------------------
   ; AJOUTE DES ENTITES A UN GROUPE
   ; ------------------------------
(defun C:AGRP (/ GROUPES LST LSTF NG VLA-SEL X)
;;; listes (Groupes (objet1 objet2 ...))
  (setq GROUPES (vla-get-groups (vla-get-activedocument (vlax-get-acad-object)))
 LSTF	 NIL
  )
  (vlax-for N GROUPES
     (setq NG	(vla-get-name N)
    LST	NIL
     )
     (vlax-for I (vla-item GROUPES NG) (setq LST (cons I LST)))
     (setq LSTF (append (list (cons NG LST)) LSTF))
  )
  (setq VLA-SEL (vlax-ename->vla-object (car (entsel "\nCHOIX DU GROUPE AUQUEL RAJOUTER DES ENTITES :"))))
  (repeat (setq X (length LSTF))
     (if (member VLA-SEL (nth (setq X (1- X)) LSTF))
 (progn
;;;	    (setq NOGR (car (nth X LSTF)))
;;;	 (princ (strcat "\n Groupe : " (car (nth X LSTF))))
	(prompt "\nCLIQUER SUR LE(S) ENTITE(S) A AJOUTER AU GROUPE :")
	(command "-GROUPE" "A" (car (nth X LSTF)) (while (> (getvar "cmdactive") 0) (command PAUSE)))
 )
     )
  )
  (princ)
)

; --------------------------------
; SUPPRIME DES ENTITES A UN GROUPE
; --------------------------------

(defun C:SGRP (/ GROUPES LST LSTF NG VLA-SEL X)
;;; listes (Groupes (objet1 objet2 ...))
  (setq GROUPES (vla-get-groups (vla-get-activedocument (vlax-get-acad-object)))
 LSTF	 NIL
  )
  (vlax-for N GROUPES
     (setq NG	(vla-get-name N)
    LST	NIL
     )
     (vlax-for I (vla-item GROUPES NG) (setq LST (cons I LST)))
     (setq LSTF (append (list (cons NG LST)) LSTF))
  )
  (setq VLA-SEL (vlax-ename->vla-object (car (entsel "\nCHOIX DU GROUPE AUQUEL RAJOUTER DES ENTITES :"))))
  (repeat (setq X (length LSTF))
     (if (member VLA-SEL (nth (setq X (1- X)) LSTF))
 (progn
;;;	    (setq NOGR (car (nth X LSTF)))
;;;	 (princ (strcat "\n Groupe : " (car (nth X LSTF))))
	(prompt "\nCLIQUER SUR LE(S) ENTITE(S) A SUPRIMER DU GROUPE :")
	(command "-GROUPE" "S" (car (nth X LSTF)) (while (> (getvar "cmdactive") 0) (command PAUSE)))
 )
     )
  )
  (princ)
)

 

bon regroupage degroupage

si ca peux servir

 

phil

 

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Posté(e)
BRED si j'ai bein compris ton bout de LISP

on ne peut pas trouver le nom d'un groupe pour une entite

 

mais faut d'abord faire la liste des groupes et verifier ensuite si cette entite fait partie de la liste

c'est ca ??

 

y'a bcp d'autre truc comme ca, ou il faut résonner a l'envers ?? En LISP

 

C'est ça, en effet, tu as compris...

Mais savoir si c'est la bonne méhode, et la seule, j'avoues ne pas le savoir (mais on va vite l'apprendre : je vois quelqu'un qui est connecté qui va nous sauter dessus !)

J'apprends aussi, je cherche...

J'étais au début passé par les codes dxf, mais je trouvais le code trop long....

 

... pour une fois que j'utilise (vlax-for ....

 

Par contre tu pourrais chercher à ne pas passer pas (command "-GROUPE" ... pour ajouter ou retirer une entitée d'un groupe ....

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

salut

 

baaa ca marche comme ca

 

c'est le principal

 

et ca met en surbrillance le groupe comme ca avec la commande "groupre"

 

mais faut faire la selection un par un

 

tu proposes plutot de sélectionner le groupe

ensuite toutes les entites a enlever ou ajouter

et ensuite de le programme fait la manip d'ajouter ou soustraire les entites

 

avec l'avantage de pouvoir selectionner les entites par plusieurs a la fois ???

 

phil

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Posté(e)
baaa ca marche comme ca

 

c'est le principal

 

Oui, mais j'apprends et j'essaye de faire le mieux possible... le plus "programmation"....

 

Ci-dessous une commande pour ajouter une selection d'objet à un groupe.

;;; ajouter selection à un groupe
(defun c:[b]ajoutagr[/b] (/ GROUPES I NOM-GROUPE SEL G)
 (setq nom-groupe nil)
 (while (not nom-groupe)
   (setq nom-groupe (Get-Nom-Groupe (car (entsel "\n Choix du Groupe :"))))
   )
 (princ (strcat "\n Groupe " nom-groupe " sélectionné."))

 (setq groupes (vla-get-groups (vla-get-activedocument (vlax-get-acad-object))))

 (vlax-for n groupes
   (if (equal (vla-get-name n) nom-groupe)
     (progn
(setq g n)(vla-Highlight g :vlax-false))))

 (princ (strcat "\nChoix des Objets à rajouter au Groupe " nom-groupe))
 (setq sel (ssget))
 (vla-Highlight g :vlax-True)

 (repeat (setq i (sslength sel))
   (vlax-invoke g 'AppendItems (list (vlax-ename->vla-object (ssname sel (setq i (1- i))))))
   )
 (princ (strcat "\n"(rtos (sslength sel)) " objet(s) ajouté au groupe " nom-groupe))
 (princ)
 )

; routine retournant le nom du groupe de l'objet sélectionné
(defun Get-Nom-Groupe (sel / GR GROUPES LST LSTF NG VLA-SEL X)
 (if sel
   (progn
     (setq groupes (vla-get-groups (vla-get-activedocument (vlax-get-acad-object)))
    lstF nil)
     (vlax-for n groupes
(setq ng (vla-get-name n)
      lst nil)
(vlax-for i (vla-item groupes ng)
  (setq lst (cons i lst))
  )
(setq lstF (append (list (cons ng lst)) lstF))
)
     (setq vla-sel (vlax-ename->vla-object sel))
     (repeat (setq x (length lstF))
(if (member vla-sel (nth (setq x (1- x)) lstF))
  (setq gr (car (nth x lstF)))
  )
)
     )
   )
 gr
)

 

 

 

[Edité le 25/7/2007 par Bred]

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

  • 2 semaines après...
Posté(e)

hello bred

 

 

super super mieux ta version du lisp

ca va bcp plus vite pour la selection

 

tu aurais le meme en enlevant des entites ???

 

merci

 

phil

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Posté(e)

Salut,

A tester (j'ai mis une gestion d'erreur dans les routines précédentes, je les répetes ici.)

 


;;; [b]ajouter selection à un groupe[/b]
(defun c:[b]ajoutagr[/b] (/ GROUPES I NOM-GROUPE SEL G)
 (setq nom-groupe nil
ex-error *error*
*error*	err-groupe)  
 (while (not nom-groupe)
   (setq nom-groupe (Get-Nom-Groupe (car (entsel "\n Choix du Groupe :"))))
   )
 (princ (strcat "\n Groupe " nom-groupe " sélectionné."))

 (setq groupes (vla-get-groups (vla-get-activedocument (vlax-get-acad-object))))

 (vlax-for n groupes
   (if (equal (vla-get-name n) nom-groupe)
     (progn
(setq g n)(vla-Highlight g :vlax-false))))

 (princ (strcat "\nChoix des Objets à rajouter au Groupe " nom-groupe))
 (setq sel (ssget))
 (vla-Highlight g :vlax-True)

 (repeat (setq i (sslength sel))
   (vlax-invoke g 'AppendItems (list (vlax-ename->vla-object (ssname sel (setq i (1- i))))))
   )
 
 (setq *error* ex-error
ex-error nil)
 
 (princ (strcat "\n"(rtos (sslength sel)) " objet(s) ajouté au groupe " nom-groupe))
 (princ)
 )

;;; [b]Choix des objets à dégrouper[/b]
(defun c:[b]enlevagr[/b] (/ GROUPES I NOM-GROUPE SEL G)
 (setq nom-groupe nil
lst-sel nil
sel 1
ex-error *error*
*error*	err-groupe)
 (while (not nom-groupe)
   (setq nom-groupe (Get-Nom-Groupe (car (entsel "\n Choix du Groupe :"))))
   )
 (princ (strcat "\n Groupe " nom-groupe " sélectionné."))

 (setq groupes (vla-get-groups (vla-get-activedocument (vlax-get-acad-object))))

 (vlax-for n groupes
   (if (equal (vla-get-name n) nom-groupe)
     (progn
(setq g n)(vla-Highlight g :vlax-false))))

 (princ (strcat "\nChoix des Objets à Enlever au Groupe " nom-groupe))
 (while sel
   (setq sel (car (entsel "\n Choix de l'objet :")))
   (if sel
     (progn
(redraw  sel 4)
(setq lst-sel (append (list (vlax-ename->vla-object sel)) lst-sel))	
     )
   )
  )

 (vlax-invoke g 'RemoveItems lst-sel)
 (vla-Highlight g :vlax-True)

 (setq *error* ex-error
ex-error nil)
   
 (princ (strcat "\n"(rtos (length lst-sel)) " objet(s) Enlevé au groupe " nom-groupe))
 (princ)
 )	  
 
;;; [b]nom du groupe de l'objet selectionné.[/b]
(defun c:[b]grob[/b] (/ GROUPES LST LSTF NG VLA-SEL X)
 ;;; listes (Groupes (objet1 objet2 ...))
 (setq groupes (vla-get-groups (vla-get-activedocument (vlax-get-acad-object)))
lstF nil)
 (vlax-for n groupes
   (setq ng (vla-get-name n)
  lst nil)
   (vlax-for i (vla-item groupes ng)
     (setq lst (cons i lst))
     )
   (setq lstF (append (list (cons ng lst)) lstF))
   )

 (setq vla-sel (vlax-ename->vla-object (car (entsel "\n Choix de l'objet :"))))
 (repeat (setq x (length lstF))
   (if (member vla-sel (nth (setq x (1- x)) lstF))
     (princ (strcat "\n Groupe : " (car (nth x lstF))))
   )
 )
 (princ)
 )

; routine retournant le nom du groupe de l'objet sélectionné
(defun Get-Nom-Groupe (sel / GR GROUPES LST LSTF NG VLA-SEL X)
 (if sel
   (progn
     (setq groupes (vla-get-groups (vla-get-activedocument (vlax-get-acad-object)))
    lstF nil)
     (vlax-for n groupes
(setq ng (vla-get-name n)
      lst nil)
(vlax-for i (vla-item groupes ng)
  (setq lst (cons i lst))
  )
(setq lstF (append (list (cons ng lst)) lstF))
)
     (setq vla-sel (vlax-ename->vla-object sel))
     (repeat (setq x (length lstF))
(if (member vla-sel (nth (setq x (1- x)) lstF))
  (setq gr (car (nth x lstF)))
  )
)
     )
   )
 gr
)

; Gestion d'erreur
(defun err-groupe (msg)
 (if (or (= msg "Fonction annulée")(= msg "Function cancelled")
  (= msg "quitter / sortir abandon")(= msg "quit / exit abort"))
   (princ)
   (princ (strcat "\nErreur: " msg)))

 (vla-Highlight g :vlax-True)
 
 (setq *error* ex-error
ex-error nil)
 (princ)
)

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Salut,

Excusez mon ignorance, mais à quoi sert ce lisp puisque la commande "groupe" de AutoCAD permet à tous moments de rajouter des entités à un groupe nommé ???.

Tu as plusieurs routine, permettant de ne pas passer par la boite de dialogue, et permettant d'aller plus vite je pense.

Test les.

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

hello bred

 

j'ai tester tes derniers lisp

je sais pas ou mais il y a un tit bug je crois

 

mais je ne suis tjrs pas assez callé pour le corriger

ca doit venir du systeme de recherche d'erreur

 

ca fait tourner "autocad" sans jamais rien faire: ni grouper ni degrouper

 

merci bred

 

phil

 

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Posté(e)

Pour être plus précis, pourrais-tu me dire sous quelle version tu es ?

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

salut bred

 

apres un nouvel essai

 

le lispe pour rajouter des entites au groupe marche tres bien

soit avec la selection entite par entirer

soit avec le rectangle de selection: cp sp

tout les modes de selection en fait

 

mais pour enlever des entites au groupe apparement

on ne peut enlever que entite par entite

 

 

 

je crois avoir piger tu ne peux pas faire une selection comme pour ajouter car sinon le programe reselectionne le groupe et ne peux pas s'autoeliminer

 

ok ok

 

sinon autocad architecture 2008

 

phil

 

 

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Posté(e)
je crois avoir piger tu ne peux pas faire une selection comme pour ajouter car sinon le programe reselectionne le groupe et ne peux pas s'autoeliminer

Exactement.

ssget selectionne le groupe, alors que entsel me permet de récupérer l'entité selectionné, qu'elle fasse partis d'un groupe ou pas.....

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

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é