Aller au contenu

Mettre le contenu d\'un calque au premier plan


Messages recommandés

Posté(e)

rebonjour,

 

pour la commande de la macro - calque avant

 

*^C^Cexpert;5;_-VIEW;SA;GOTOP;;P;L;GOTOP;E;;;expert;2;_Laymcur;\_-layer;G;*;;ordretrace;tout;;AV;_-view;R;GOTOP;REGENALL; [surligneur] [/surligneur]

 

Soit exactement celle proposer par Rebcao plus haut

 

maintenant je dois avouer que ca me balance une bonne trentaine de ligne (et je suis loin du compte je crois) dans ma barre de texte en bas :exclam:

 

et autre soucis cette commande ne fonctionne que dans l' espace objet :(

 

en extrait bonus voici une fois que je clique sur la petite icone de la macro ce qui s'affiche

 

Commande:

Commande: expert

Entrez une nouvelle valeur pour EXPERT <5>: 5

Commande: _-VIEW

Entrez une option [?/SUpprimer/orthoGonal/Rappel/SAuver/Paramètres/Fenêtre]: SA

Entrez le nom de la vue à enregistrer: GOTOP

VUESCU = 1 SCU sera enregistré avec la vue

Commande:

-VUE Entrez une option

[?/SUpprimer/orthoGonal/Rappel/SAuver/Paramètres/Fenêtre]: P

Entrez une option [aRrière-plan/Classer par catégories/cliché des caLques/COupe

3D/SCu/STyle visuel]]: L

Entrez un nom de vue dont le cliché des calques doit être modifié ou [?]: GOTOP

Entrez une option [Enregistrer/Supprimer] : E

Entrez une option [aRrière-plan/Classer par catégories/cliché des caLques/COupe

3D/SCu/STyle visuel]]:

Entrez une option [?/SUpprimer/orthoGonal/Rappel/SAuver/Paramètres/Fenêtre]:

Commande: expert

Entrez une nouvelle valeur pour EXPERT <5>: 2

Commande: _Laymcur

Sélectionnez l'objet dont le calque va devenir le calque courant:

15 - GRILLE est maintenant le calque courant.

Commande: _-layer

Calque courant: "15 - GRILLE"

Entrez une option

[?/Etablir/CHoisir/Nouv/ACtif/INactif/COuleur/TLigne/EPaisseurl/MAtériau/Tracé/G

eler/Libérer/Verrouiller/Déverrouiller/étAt]: G

Entrer la liste des noms de calque de geler ou : *

Impossible de geler le calque "15 - GRILLE". Il s'agit du calque COURANT.

Entrez une option

[?/Etablir/CHoisir/Nouv/ACtif/INactif/COuleur/TLigne/EPaisseurl/MAtériau/Tracé/G

eler/Libérer/Verrouiller/Déverrouiller/étAt]:

Commande: ordretrace

Choix des objets: tout

31 trouvé(s)

Choix des objets:

Entrez une option de disposition d'objets [Dessus/dEssous/AVant/ARrière]

: AV

Commande: _-view

Entrez une option [?/SUpprimer/orthoGonal/Rappel/SAuver/Paramètres/Fenêtre]: R

Entrez le nom de la vue à restaurer: GOTOP

Régénération du modèle.

Commande: REGENALL

Commande inconnue "REGENALL". Appuyez sur F1 pour obtenir de l'aide.

Commande:

Commande:

Commande: expert

Entrez une nouvelle valeur pour EXPERT <2>: 5

Commande: _-VIEW

Entrez une option [?/SUpprimer/orthoGonal/Rappel/SAuver/Paramètres/Fenêtre]: SA

Entrez le nom de la vue à enregistrer: GOTOP

VUESCU = 1 SCU sera enregistré avec la vue

Commande:

-VUE Entrez une option

[?/SUpprimer/orthoGonal/Rappel/SAuver/Paramètres/Fenêtre]: P

Entrez une option [aRrière-plan/Classer par catégories/cliché des caLques/COupe

3D/SCu/STyle visuel]]: L

Entrez un nom de vue dont le cliché des calques doit être modifié ou [?]: GOTOP

Entrez une option [Enregistrer/Supprimer] : E

Entrez une option [aRrière-plan/Classer par catégories/cliché des caLques/COupe

3D/SCu/STyle visuel]]:

Entrez une option [?/SUpprimer/orthoGonal/Rappel/SAuver/Paramètres/Fenêtre]:

Commande: expert

Entrez une nouvelle valeur pour EXPERT <5>: 2

Commande: _Laymcur

Sélectionnez l'objet dont le calque va devenir le calque courant:

*erreur*

Commande: _-layer

Calque courant: "15 - GRILLE"

Entrez une option

[?/Etablir/CHoisir/Nouv/ACtif/INactif/COuleur/TLigne/EPaisseurl/MAtériau/Tracé/G

eler/Libérer/Verrouiller/Déverrouiller/étAt]: G

Entrer la liste des noms de calque de geler ou : *

Impossible de geler le calque "15 - GRILLE". Il s'agit du calque COURANT.

Entrez une option

[?/Etablir/CHoisir/Nouv/ACtif/INactif/COuleur/TLigne/EPaisseurl/MAtériau/Tracé/G

eler/Libérer/Verrouiller/Déverrouiller/étAt]:

Commande: ordretrace

Choix des objets: tout

31 trouvé(s)

Choix des objets:

Entrez une option de disposition d'objets [Dessus/dEssous/AVant/ARrière]

: AV

Commande: _-view

Entrez une option [?/SUpprimer/orthoGonal/Rappel/SAuver/Paramètres/Fenêtre]: R

Entrez le nom de la vue à restaurer: GOTOP

Régénération du modèle.

Commande: REGENALL

Commande inconnue "REGENALL". Appuyez sur F1 pour obtenir de l'aide.

Commande:

Commande:

Commande: expert

Entrez une nouvelle valeur pour EXPERT <2>: 5

Commande: _-VIEW

Entrez une option [?/SUpprimer/orthoGonal/Rappel/SAuver/Paramètres/Fenêtre]: SA

Entrez le nom de la vue à enregistrer: GOTOP

VUESCU = 1 SCU sera enregistré avec la vue

Commande:

-VUE Entrez une option

[?/SUpprimer/orthoGonal/Rappel/SAuver/Paramètres/Fenêtre]: P

Entrez une option [aRrière-plan/Classer par catégories/cliché des caLques/COupe

3D/SCu/STyle visuel]]: L

Entrez un nom de vue dont le cliché des calques doit être modifié ou [?]: GOTOP

Entrez une option [Enregistrer/Supprimer] : E

Entrez une option [aRrière-plan/Classer par catégories/cliché des caLques/COupe

3D/SCu/STyle visuel]]:

Entrez une option [?/SUpprimer/orthoGonal/Rappel/SAuver/Paramètres/Fenêtre]:

Commande: expert

Entrez une nouvelle valeur pour EXPERT <5>: 2

Commande: _Laymcur

Sélectionnez l'objet dont le calque va devenir le calque courant: *Annuler*

 

et quand je suis en espace papier

 

Commande: expert

Entrez une nouvelle valeur pour EXPERT <5>: 5

Commande: _-VIEW

Commande non disponible dans la fenêtre d'aperçu verrouillée.

Commande: SA

Commande inconnue "SA". Appuyez sur F1 pour obtenir de l'aide.

Commande: GOTOP

Commande inconnue "GOTOP". Appuyez sur F1 pour obtenir de l'aide.

Commande:

-VUE Commande non disponible dans la fenêtre d'aperçu verrouillée.

Commande: P

PAN

La fenêtre est verrouillée. Passez dans l'espace papier.

Spécifiez le point de base ou déplacement: L

Nécessite deux points ou un déplacement suivi de ENTREE.

Spécifiez le point de base ou déplacement: *Annuler*

Revenir dans l'espace papier.

Commande: *Annuler*

 

en esperant avoir repondu au mieux a ta demande

  • Réponses 51
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Posté(e)

en fait je ne choisi rien, apres avoir créé mes deux macros je les ai installé dans ma barre d'outils "ordre de tracé" ensuite je clic sur la macro que je désire avant ou arrière, je selectionne un trait et autocad s'amuse comme un grand. Une fois qu'il s'est calmé, c'est à dire une fois que les éléments souhaités sont qu premier plan, je fais "echap" et c'est tout.

 

que dire de plus....

 

 

 

 

Posté(e)

Salut,

 

grid1334,

 

Si je peux me permettre quelques remarques concernant ton code, je pense qu'il vaut mieux passer directement le jeu de sélection comme argument à la fonction command, plutôt que "griper" le jeu de sélection avant de lancer la commande : cette dernière méthode ne fonctionnera que si PICKFIRST est à 1 (sélection nom-verbe).

 

D'autre part, il est toujours préférable d'utiliser les noms de commandes et leur options en langage international, ainsi tes routines fonctionneront quelle que soit la version (langage) d'AutoCAD.

 

(defun c:calav (/ ent)
 (if (setq
ent (car
      (entsel "\nSélectionnez un objet sur le calque cible: ")
    )
     )
   (command "_.draworder"
     (ssget "_X" (list (assoc 8 (entget ent))))
     ""
     "_front"
   )
 )
 (princ)
)

(defun c:calar (/ ent)
 (if (setq
ent (car
      (entsel "\nSélectionnez un objet sur le calque cible: ")
    )
     )
   (command "_.draworder"
     (ssget "_X" (list (assoc 8 (entget ent))))
     ""
     "_back"
   )
 )
 (princ)
) 

 

Comme les deux fonctions ne diffèrent que par leur nom et une option, on peu les définir dans une seule expression mapcar (ça relève plus de l'exercice de style que de l'amélioration, mais ça m'amuse...)

 

(mapcar
 (function
   (lambda (fun opt)
     (eval
(list
  'defun
  fun
  '(/ ent)
  (list
    'if
    '(setq ent (car (entsel "\nSélectionnez un objet sur le calque cible: ")))
    (list
      'command
      "_.draworder"
      '(ssget "_X" (list (assoc 8 (entget ent))))
      ""
      opt
    )
  )
  '(princ)
)
     )
   )
 )
 '(c:calar c:calav)
 '("_back" "_front")
) 

 

 

[Edité le 19/8/2008 par (gile)]

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

Posté(e)

La même chose en Visual LISP, le code est plus long, mais l'exécution devrait être (un peu) plus rapide (commande renommées TOP et BOT.

 

;;; TOP & BOT (gile)
;;; Placer tous les objets du calque de l'objet cible en avant (TOP)
;;; ou en arrière (BOT).
;;;
;;; L'utilisation de la fonction mapcar permet de définir les deux fonctions
;;; dans une seule expression.

(mapcar
 (function
   (lambda (cde fun)
     (eval
(list
  'defun
  cde
  '(/ ent doc sort space ss cnt var)
  '(vl-load-com)
  (list
    'and
    '(setq
      ent
      (car
       (entsel "\nSélectionnez un objet sur le calque cible: ")
      )
     )
    '(setq
      doc
      (vla-get-ActiveDocument (vlax-get-acad-object))
      space
      (if
       (= 1 (getvar 'cvport))
       (vla-get-PaperSpace doc)
       (vla-get-ModelSpace doc)
      )
     )
    '(or
      (not
       (vl-catch-all-error-p
	(setq
	 sort
	 (vl-catch-all-apply
	  'vla-getObject
	  (list
	   (vla-getExtensionDictionary
	    space
	   )
	   "ACAD_SORTENTS"
	  )
	 )
	)
       )
      )
      (setq
       sort
       (vla-addObject
	(vla-getExtensionDictionary
	 space
	)
	"ACAD_SORTENTS"
	"AcDbSortentsTable"
       )
      )
     )
    (list
      'progn
      '(vla-StartUndoMark doc)
      '(setq ss (ssget "_X" (list (assoc 8 (entget ent)))))
      '(setq
	var
	(vlax-make-safearray
	 vlax-vbObject
	 (cons 0 (1- (sslength ss)))
	)
	cnt
	0
       )
      '(vlax-for
	obj
	(setq ss (vla-get-ActiveSelectionSet doc))
	(vlax-safearray-put-element var cnt obj)
	(setq cnt (1+ cnt))
       )
      '(vla-delete ss)
      (list fun 'sort '(vlax-make-variant var))
      '(vla-EndUndoMark doc)
    )
  )
  '(princ)
)
     )
   )
 )
 '(c:top c:bot)
 '(vla-MoveToTop vla-MoveToBottom)
) 

 

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

Posté(e)

Chalut,

 

Bon je vais faire plaisir à Cricri, car chez moi (sous AA2008) ses fonctions pas-diesel marche sans souchis.

 

Le seul truc que j'ai modifié c'est REGENALL, que AA2008 ne connais pas, par REGNTOUT qui lui fonctionne.

 

@+

MDSV41

 

PS: ne me demander pas de tester sous AA2009, je l'ai définitivement virer de mon ordinateur. (Si je tient le responsable de ce projet, je lui fais manger le DVD avec ou sans sauce Béarnaise)

 

 

 

[Edité le 20/8/2008 par mdsv31]

Dessinateur Indépendant

Posté(e)

gile

 

J'interviens rarement lorsque le thread est autonome mais j'ai remarqué ceci:

 

a) J'utilisais normalement tilemode au lieu de cvport. Depuis la 2005, il existe la commande _VPMAX (MAXFENETRE) qui fait en sorte que les gens travaillent probablement plus au travers d'une fenêtre flottante qu'avant, ce qui rend cvport plus simple à utiliser. Il se peut aussi que si tilemode=0 et que cvport <> 1, qu'il faille quand même créer les objets dans l'espace papier puisque c'est de là que l'usager à lancer la routine. Disons que c'est une question que seul l'utilisateur peut répondre. On pourrait aussi poser la question.

b) C'est curieux que (getvar 'variable) fonctionne au lieu de (getvar "variable"). Je ne suis pas certain qu'AutoLISP va toujours suppporter cette syntaxe. J'ai vérifié que ça ne fonctionnait pas en R14 mais oui depuis la 2000.

c) La création de fonction de façon dynamique rend impossible l'ajout de points d'arrêt et donc le débogage impossible. De plus, il faut faire des pieds et des mains pour éviter de ne pas s'y perdre avec les apostrophes. Voici une version différente qui reprend presqu'exactement le code d'avant (que je n'ai pas testé) mais qui utilise la notion de fonction. Note: le but n'est pas de dénigrer l'ancien code mais de proposer une façon plus souple pour le débogage.

 

 (defun c:Top () (MoveTo 'ToTop) (princ))
(defun c:Bot () (MoveTo 'ToBot) (princ))

(defun MoveTo (
To
/ ent doc sort space ss cnt var
)
(vl-load-com)
(and 
(setq ent (car (entsel "\nSélectionnez un objet sur le calque cible: ")))
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(setq space (if (= 1 (getvar "cvport")) (vla-get-paperspace doc) (vla-get-modelspace doc)))
(or
(not (vl-catch-all-error-p (setq sort (vl-catch-all-apply (quote vla-getobject) (list (vla-getExtensionDictionary space) "acad_sortents")))))
(setq sort (vla-addobject (vla-getExtensionDictionary space) "acad_sortents" "acdbsortentstable"))
)
(progn 
(vla-startundomark doc) 
(setq ss (ssget "_x" (list (assoc 8 (entget ent)))))
(setq var (vlax-make-safearray vlax-vbobject (cons 0 (1- (sslength ss)))) cnt 0) 
(vlax-for obj (setq ss (vla-get-ActiveSelectionSet doc)) (vlax-safearray-put-element var cnt obj) (setq cnt (1+ cnt)))
(vla-delete ss)
(cond
((= 'ToTop To) (vla-MoveToTop sort (vlax-make-variant var))
((= 'ToBot To) (vla-MoveToBottom sort (vlax-make-variant var))
(t 
(alert (strcat 
"MoveTo : paramètre incorrect" 
"(usage (MoveTo 'ToTop) ou (MoveTo 'ToBot)"
))
)
)
(vla-EndUndoMark doc)
)
)
(princ)
)

 

Serge

 

Posté(e)

Serge,

 

Merci pour le retour,

 

a) J'utilise CVPORT parce que je considère que si une fenêtre flottante est activée, l'utilisateur est en train de dessiner dans cette fenêtre. Mais dans le cas présent, puisque l'utilisateur sélectionne un objet, on pourrait faire :

(setq space (vla-ObjectIDToObject
      doc
      (vla-get-OwnerID (vlax-ename->vla-object ent))
    )
) 

 

b) C'est un oubli de ma part, il m'arrive d'utiliser cette syntaxe "en privé" mais j'essaye de ne pas la maisser dans ce que je "publie".

 

c) Comme je disais, ça relève de l'exercice de style. Et je trouvais justement l'exercice intéressant en ce qui concerne les différents niveaux d'évaluation (c'est comme ça qu'on dit ?) et donc l'utilisation de quote ou list.

Ta version est beaucoup plus lisible...

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

Posté(e)

Le seul truc que j'ai modifié c'est REGENALL, que AA2008 ne connais pas, par REGNTOUT qui lui fonctionne

 

OOPS ! petite erreur un oubli le [surligneur] _[/surligneur]

 

c'est _REGENALL

 

Petite précision, ces MACROs sont prévues pour les versions Plaeines et LT bien sur, mais que depuis 2007 là ou la commande [surligneur] _Laymcur[/surligneur] est devenue une commande standard d'AutoCAD.

 

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Posté(e)

ReCoucou,

 

Bon je vais faire plaisir à Cricri, car chez moi (sous AA2008) c'est fonction diesel marche sans souchis.

 

J'ai oublié de te dire merKi pour ce petit soutien !!! Mais Y a pas une trace de DIESEL dans ma Macro ! Au prix où il est j'ai pas pu !!!! ;)

 

C'est corrigé au niveau du fichier TEXTE à téléchargé... ainsi que dans ma réponse..

 

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Posté(e)

gile

Je n'avais pas lu l'un de tes messages précédents qui disait que c'était un exercice de style. Avant l'arrivée de Vital Lisp (l'ancêtre de Visual Lisp), je développais des fonctions de cette façon pour le support multilingue. J'avais une liste de noms de commande en français et une autre en anglais et avec un mapcar et une fonction lambda dont le point d'intérêt était (eval (read (strcat "c:" commande))), je pouvais créer les noms locaux.

 

Patrick_35

L'usage de l'apostrophe : a) dans le getvar, il n'y a pas trop d'intérêt. b) comme paramètre, c'est plus pratique qu'une chaine de caractères qui pourrait être sensible au majuscule (la fonction quote convertit toujours en majuscules) et ça veut dire plus ce que ça veut dire si on relit le code 5 ans plus tard. Pour le reste, un Integer aurait été tout aussi efficace (à l'époque du DOS, on aurait dit plus économe)

 

Serge

 

Posté(e)

Merci gile j'ai tenu compte de tes remarques et modifié le programme en m'assurant que la variable pickstyle soit à 1 dés le départ du programme, elle sera réstaurée à la fin du programme.

Je ne maîtrise pas du tout vlisp alors je suis resté au bon vieux autolisp.

 

(defun picvar ()

(setq pic (getvar "pickstyle"))

(if (= 0 (getvar "pickstyle"))

(setvar "pickstyle" 1)

(setvar "pickstyle" 0)

)

)

 

(defun c:calav (/ ent)

(picvar)

(if (setq

ent (car

(entsel "\nSélectionnez un objet sur le calque cible: ")

)

)

 

(command "_.draworder"

(ssget "_X" (list (assoc 8 (entget ent))))

""

"_front"

)

)

(setvar "pickstyle" pic)

(princ)

 

)

 

(defun c:calar (/ ent)

(picvar)

(if (setq

ent (car

(entsel "\nSélectionnez un objet sur le calque cible: ")

)

)

(command "_.draworder"

(ssget "_X" (list (assoc 8 (entget ent))))

""

"_back"

)

)

(setvar "pickstyle" pic)

(princ)

 

)

Posté(e)

Bonjour,

 

Je viens un peu tard, désolé. Mais comme le sujet est intéressant, je me permet de rajouter une couche. Pour ma part, je me suis fait il y a quelques temps une fonction qui demande de saisir une ou des entités et qui "grippe" le ou les calques (avec sssetfirst) qui correspondent.

Après, je lance manuellement la commande autocad que je veux, que ce soit Effacer, Copier, Deplacer, Ordretrace, copier/coller etc.. qui s'applique sur les entités grippées.

 

(defun c:laysel (/ SS FILTRE I E LAY)
 (setq SS (ssget))
 (if SS
   (progn
     (setq FILTRE '((-4 . "OR>")) )
     (setq I 0)
     (while (< I (sslength SS))
       (setq E (entget (ssname SS  I)))
       (setq LAY (assoc 8 E))
       (setq FILTRE (cons LAY FILTRE))
       (setq I (+ I 1))
     )
     (setq FILTRE (cons '(-4 . "      (setq SS (ssget "_X" FILTRE))
     (sssetfirst SS SS)
   )
 )
 (princ)
)

 

J'aime le côté polyvalent de la chose...

 

Amicalement

Vincent

 

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

Salut,

 

C'est encore ce problème avec le signe requête)

 

Il faut remplacer :

 

(setq FILTRE (cons '(-4 . "

 

par

 

(setq FILTRE (cons '(-4 . "

 

Pour avoir le code avant interprétation, on peut toujours utiliser le bouton "Citer" sous le message et il apparaît tel qu'il a été écrit.

 

Pour éviter ce problème une astuce consiste à mettre le signe

 

[Edité le 20/8/2008 par (gile)]

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

Posté(e)

Bonjour,

 

j'ai déjà eu de (rares) soucis avec sssetfirst sur certains fichiers où l'on ne voyait pas apparaitre les poignées. Et je ne suis pas le seul dans ce cas.

Il se trouve que, quelques fois, les poignées ne sont pas visibles (même avec PICKFIRST et GRIPS à 1) mais les objets sont quand même sélectionnés. Et si on fait un REGEN, les poignées apparaissent comme par magie.

 

Je n'utilise encore que la version 2007 sur Windows XP et je ne sais pas comment ça peut réagir sur des versions plus récentes.

 

Amicalement

Vincent

 

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

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é