Aller au contenu

Messages recommandés

Posté(e)

Salut à tous,

 

Un grand merci (comme on dit chez nous) à Patrick_35 pour vlr-miscellaneous-reactor qui semble très bien fonctionner.

 

Je modifie à nouveau le code (réponse 8) version 1.4 :

 

- utilisation de vlr-miscellaneous-reactor ;

- correction d'un dysfonctionnement quand le calque courant est coché ;

- ajout d'une expression pour le chargement automatique.

 

[Edité le 31/10/2007 par (gile)]

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

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

Meilleurs contributeurs dans ce sujet

Meilleurs contributeurs dans ce sujet

Posté(e)

Je ne suis pas sûr que ce soit possible, en tous cas je ne sais pas faire (javais vu la demande).

 

La routine ci-dessus gèle les calques quand on est dans l'onglet objet et les dégèle dans les onglets présentation, c'est le passage d'un onglet à l'autre qui lance le réacteur.

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

Posté(e)

Salut,

merci (gile).

un "détail" :

ne serait-il pas logique de rendre "incochable" les calques déjà gelée "normalement".

Car si ils ont été gelé (en EO+EP), il y a forcément une raison qui rends inutile (et non logique) la possibilité de le rendre gelé uniquement en EO...

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

Posté(e)

Salut Bred,

 

Merci pour le test.

 

J'ai essayé de répondre à ta remarque, ça semble fonctionner les calques gelés en EO+EP et le calque courant sont grisés dans la boite de dialogue (getLayers2).

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

Posté(e)

Et bien on atteinds (presque) la perfection !!!!...

 

(le "presque" n'est en fait par pour toi, (gile), car je comprends que l'on ne peux pas faire autrement, et c'est du "chipotage" de ma part : lorsque l'on passe dans un onglet EP, on voit les objets du calque verrouillé en EO se dégeler.)

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

Posté(e)

J'ai encore trouvé une situation où la mise à jour des listes de gelobj ne se faisait pas quand on dégelait un calque avec les commandes AutoCAD, c'est réparé.

 

Il me semble avoir fait le tour de toutes les situations (version 2) mais rien n'est moins sur...

 

Merci aux testeurs de me faire savoir les dysfonctionnements qu'ils pourraient rencontrer.

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

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

Bonjours

je suis tres interesse par ce lisp mais autocad affiche un message d'erreur

la boite de dialogue est trop grande pour tenir à l'ecran .

je suis debutant .

merci

La vitesse de la lumière étant supérieure à celle du son, beaucoup de gens paraissent brillants jusqu''à ce qu''ils ouvrent leur gueule...

Posté(e)

Salut yodaguy,

 

As tu chargé la dernière version ?

Elle affiche les calques sur 1, 2, ou 3 colonnes suivant leur nombre, si ça ne suffit pas, je peux essayer d'ajouter une 4ème colonne mais je crains de dépasser la limite en largeur si des noms de calques sont un peu longs.

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

Posté(e)

Bonjour

 

merci de repondre si vite

en effet avec un fichier plus light tout fonctionne , trop de calque .

j'utilise la derniere version

 

bonne journée

 

[Edité le 30/11/2007 par yodaguy]

La vitesse de la lumière étant supérieure à celle du son, beaucoup de gens paraissent brillants jusqu''à ce qu''ils ouvrent leur gueule...

  • 3 semaines après...
  • 7 mois après...
Posté(e)

Salut sigecom et bienvenue sur CADxp,

 

J'ai essayé de faire quelque chose avec des list_box à choix multiple, il ne devrait plus y avoir de problème d'affichage.

Dans la liste "Geler" ne sont affichés que les calques dégelés à sélectionner pour les geler dans l'EO.

Dans la liste "Dégeler, ne sont affichés que les calques gelés dans l'EO avec msfreeze. Les sélectionner pour les dégeler.

 

Au premier lancement de msfreeze seule la liste "Geler" apparaît (normal !)

http://img179.imageshack.us/img179/1968/msf2gf2.png

 

Si des calques ont été gelés avec msfreeze, on a les 2 listes

http://img292.imageshack.us/img292/6683/msf2tc5.png

 

EDIT : corrections mineures

 

;; MSFREEZE R1.3 (gile) 24/08/2008
;; Pour geler des calques spécifiés uniquement dans l'onglet objet
;; Merci à Patrick_35 pour vlr-miscellaneous-reactor
;;;
;;; Modification
;;; 23/08/08 : ajout de la possibilité de sélectionner des calques à l'écran

(defun c:msfreeze (/ lst th fr)

 (vl-load-com)

 (or *acdoc*
     (setq *acdoc* (vla-get-activeDocument (vlax-get-acad-object)))
 )
 (or *layers* (setq *layers* (vla-get-layers *acdoc*)))

 (if (= (getvar "TILEMODE") 1)
   (progn
     (foreach l (vlax-ldata-get "MSpaceFreeze" "frozen")
(and (getItem *layers* l)
     (= (vla-get-Freeze (vla-item *layers* l)) :vlax-true)
     (setq th (cons l th))
)
     )
     (or *MSpaceFreeze*
  (setq	*MSpaceFreeze*
	 (vlr-miscellaneous-reactor
	   nil
	   '((:vlr-layoutSwitched . msfreezerea))
	 )
  )
     )
     (setq fr
     (vl-remove
       (getvar "clayer")
       (mapcar 'vla-get-Name
	       (vl-remove-if
		 (function
		   (lambda (x)
		     (= (vla-get-Freeze x) :vlax-true)
		   )
		 )
		 (vlax-for l *layers*
		   (setq lst (cons l lst))
		 )
	       )
       )
     )
     )
     (setq lst (MSFreezeBox (vl-sort fr '      (foreach l (cadr lst)
(vla-put-Freeze (vla-item *layers* l) :vlax-false)
(setq th (vl-remove l th))
     )
     (foreach l (car lst)
(vla-put-Freeze (vla-item *layers* l) :vlax-true)
(setq th (cons l th))
     )
     (vlax-ldata-put "MSpaceFreeze" "frozen" th)
     (or th
  (progn
    (vlr-remove *MSpaceFreeze*)
    (setq *MSpaceFreeze* nil)
  )
     )
     (vla-regen *acdoc* acAllViewports)
   )
   (alert
     "Vous devez être dans l'onglet objet pour lancer GELOBJ."
   )
 )
 (princ)
)


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

(defun MsFreezeRea (rea lay / false true th)
 (setq th (vlax-ldata-get "MSpaceFreeze" "frozen"))
 (vlax-for l *layers*
   (if	(= (vla-get-Freeze l) :vlax-false)
     (setq false (cons (vla-get-Name l) false))
     (setq true (cons (vla-get-Name l) true))
   )
 )
 (cond
   ((= (car lay) "Model")
    (foreach l	th
      (if (or (= (getvar "CLAYER") l)
       (= (vla-get-Freeze (vla-item *layers* l)) :vlax-true)
   )
 (vlax-ldata-put "MSpaceFreeze" "frozen" (vl-remove l th))
 (vla-put-Freeze (vla-item *layers* l) :vlax-true)
      )
    )
    (setq *FromPaperSpace* nil)
   )
   (T
    (if (not *FromPaperSpace*)
      (progn
 (foreach l (common th false)
   (vlax-ldata-put
     "MSpaceFreeze"
     "frozen"
     (vl-remove l th)
   )
 )
 (foreach l th
   (vla-put-Freeze (vla-item *layers* l) :vlax-false)
 )
      )
    )
    (setq *FromPaperSpace* T)
   )
 )
 (vla-regen *acdoc* acAllViewports)
)

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

;;; GetItem (gile)
;;; Retourne le vla-object de l'item s'il est présent dans la collection
;;;
;;; Arguments
;;; col : la collection (vla-object)
;;; name : le nom de l'objet (string) ou son indice (entier)
;;;
;;; Retour : le vla-object ou nil

(defun GetItem (col name / obj)
 (vl-catch-all-apply
   '(lambda () (setq obj (vla-item col name)))
 )
 obj
)

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

;;; COMMON (gile)
;;; Retourne la liste des éléments communs à lst1 et lst2
;;; (COMMON '(1 2 3 4) '( 2 3 4 5)) -> (2 3 4)
(defun common (l1 l2)
 (if l1
   (if	(member (car l1) l2)
     (cons (car l1) (common (cdr l1) l2))
     (common (cdr l1) l2)
   )
 )
)

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

;;; SUBLIST (gile)
;;; Retourne une sous-liste
;;;
;;; Arguments
;;; lst : une liste
;;; start : l'index de départ de la sous liste (premier élément = 0)
;;; leng : la longueur (nombre d'éléments) de la sous-liste (ou nil)
;;;
;;; Exemples :
;;; (sublist '(1 2 3 4 5 6) 2 2) -> (3 4)
;;; (sublist '(1 2 3 4 5 6) 2 nil) -> (3 4 5 6)

(defun sublist (lst start leng / n r)
 (if (or (not leng) (    (setq leng (- (length lst) start))
 )
 (setq n (+ start leng))
 (repeat leng
   (setq r (cons (nth (setq n (1- n)) lst) r))
 )
)

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

;; MSFreezebox (gile)
;; Boite de dialogue

(defun MSFreezebox (fr	  th	/     len   tmp	  file	dcl_id
	    freeze	thaw  ret   ss	  lay	lst   frv
	    thv	  pos
	   )
 (setq	len  (max (length fr) (length th))
tmp  (vl-filename-mktemp "tmp.dcl")
file (open tmp "w")
 )
 (write-line
   "MSFreezbox:dialog{label=\"Geler dans l'espace objet\";:row{"
   file
 )
 (if fr
   (write-line
     (strcat
":list_box{label=\"Geler\";key=\"freeze\";
       multiple_select=true;width=40;height="
(cond
  ((	  ((	  (T "10")
)
";}"
     )
     file
   )
 )
 (if th
   (write-line
     (strcat
":list_box{label=\"Dégeler\";key=\"thaw\";
       multiple_select=true;width=40;height="
(cond
  ((	  ((	  (T "10")
)
";}"
     )
     file
   )
 )
 (write-line
   (strcat
     "}"
     (if fr
":button{key=\"sel\";label=\"Sélection >>\";fixed_width=true;}"
""
     )
     "spacer;ok_cancel;}"
   )
   file
 )
 (close file)
 (setq	dcl_id	  (load_dialog tmp)
what_next 2
frv	  ""
thv	  ""
 )
 (while (    (if	(not (new_dialog "MSFreezbox" dcl_id))
     (exit)
   )
   (and fr
 (start_list "freeze")
 (mapcar 'add_list fr)
 (end_list)
   )
   (and th
 (start_list "thaw")
 (mapcar 'add_list th)
 (end_list)
   )
   (or (= frv "") (set_tile "freeze" frv))
   (or (= thv "") (set_tile "thaw" thv))
   (action_tile "freeze" "(setq frv $value)")
   (action_tile "thaw" "(setq thv $value)")
   (action_tile "sel" "(done_dialog 3)")
   (action_tile
     "accept"
     "(or (not (setq ret (get_tile \"freeze\")))
     (= ret \"\")
     (foreach n (str2lst ret \" \")
     (setq freeze (cons (nth (atoi n) fr) freeze))))
     (or (not (setq ret (get_tile \"thaw\")))
     (= ret \"\")
     (foreach n (str2lst ret \" \")
     (setq thaw (cons (nth (atoi n) th) thaw))))
     (done_dialog 1)"
   )
   (setq what_next (start_dialog))
   (if	(= 3 what_next)
     (if (ssget (list (cons 8 (strcat "~" (getvar "clayer")))))
(progn
  (vlax-for o (setq ss (vla-get-ActiveSelectionSet *acdoc*))
    (or	(member (setq lay (vla-get-Layer o)) lst)
	(setq lst (cons (vla-get-Layer o) lst))
    )
    (foreach n lst
      (and (setq pos (vl-position n fr))
	   (or (vl-string-search (strcat " " (itoa pos) " ") frv)
	       (setq frv (strcat frv " " (itoa pos)))
	   )
      )
    )
  )
  (vla-delete ss)
)
     )
   )
 )
 (unload_dialog dcl_id)
 (vl-file-delete tmp)
 (list freeze thaw)
)

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

;; Chargement au démarrage (acaddoc.lsp ou MNL)

(and
 (not *MSpaceFreeze*)
 (vlax-ldata-get "GelerOngletObjet" "toggled")
 (or *acdoc*
     (setq *acdoc* (vla-get-activeDocument (vlax-get-acad-object)))
 )
 (or *layers* (setq *layers* (vla-get-layers *acdoc*)))
 (setq	*MSpaceFreeze*
 (vlr-miscellaneous-reactor
   nil
   '((:vlr-layoutSwitched . msfreezerea))
 )
 )
) 

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

 

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

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

Posté(e)

hello

 

bon la je vais vraiment polluer

 

autocad offre moults possibilité de bosser

et d'avoir chacun sa méthode de travail

 

vue que l'on est 40000 inscrits ca fait pas mal de méthodes

 

pour éclairer ma lanterne vous pouvez me donner un exemple

ou le non moins génial LISp de gile serait utile ??

 

 

je précise je ne travail quand espace objet avec énormement de calque tous nommés explicitement

les presentations ( EP) ne me servent qu'aux cartouches et aux fenetres EO

 

bonne nuit

 

phil

 

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Posté(e)

D'après ce que tu dis, tu cotes dans l'espace objet, tu peux donc, par exemple, geler certains calques de cotes dans l'EO qui seront automatiquement dégelés quan tu repasses en EP.

 

Autre exemple, si tu fais de la 3D et que tu utilises SOLPROF ou SOLVIEW/SOLDRAW ou encore APLANIRGEOM, toutes ces commandes génèrent des objets 2d (et parfois sur des calques spécifiques) à partir de solides 3d. Ces objets 2d servent dans les présentations mais "polluent" (et pour le coup, c'est vrai) l'EO. Il peut être interessant que ces calques soient gelés en EO mais pas en EP.

 

Ce LISP répondait à une demande de Bred, s'il passe par là, il pourra t'en dire plus.

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

Posté(e)

hello

 

ok en effet tres utiles en effet pour la 3d

 

ca me vas comme explication

et puis je trouverai bien une utilité t'en fait pas

 

merci

 

phil

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

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é