Aller au contenu

Messages recommandés

Posté(e)

Monsieur Autodesk, en copie à votre fils prodigue Autocad,

 

Si vous pouviez nous rajouter l'option "Geler le calque en Espace Objet - dans l'onglet Objet -"

Afin que l'on puisse éviter lorque l'on travail en EO,

de geler un calque inutile dans cette espace,

 

et que ce calque soit toujours accessible en EP dans une fenêtre,

car justement créer pour travailler qu'en EP !...

 

merci !

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

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

Meilleurs contributeurs dans ce sujet

Meilleurs contributeurs dans ce sujet

Posté(e)

Excellente idée - je viens de créer 56 fichiers d'impression pour 56 communes et il faut libérer en espace objet pour la gestion en espace papier. cela encombre pour le travail de mise à jour.

 

Les grands esprits se rencontrent !

Posté(e)

je viens d'avoir la même demande en formation il y a 2 minutes.

 

si c'est pas du sujet récurant ca.......

Thierry Garré

 

Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap

Posté(e)

Salut,

 

J'ai essayé de faire quelque chose avec les réacteurs, c'est vraiment une ébauche (pas testé) mais je le livre tel quel à vos critiques qui serviront peut--être à l'améliorer.

 

CE CODE POUVANT PROVOQUER DES ERREURS FATALES A ÉTÉ SUPPRIMÉ, UTILISER CELUI DONNÉ RÉPONSE 8

 

[Edité le 8/11/2007 par (gile)]

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

Posté(e)

Merci pour ce premier retour,

 

j'ai modifié le code pour que les calques s'affichent sur 2 colonnes dans la boite de dialogue, ça devrait suffire pour le fichier avec lequel tu as testé mais il faudra peut-être en envisager 3 pour des dessins avec beaucoup de calques...

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

Posté(e)

bonjour,

 

j'ai testé le programme ce matin (sur V2002), çà fonctionne,

mais si je passe en présentation pour voir si le calque gelé en objet est présent

(et ilest présent) et que je revient en espace objet,

[surligneur] j'ai une erreur fatale . . .[/surligneur]

 

A+

Posté(e)

Salut Richard-c,

 

Je ne saurais dire si l'erreur est due à la version, je n'ai pas 2002 pour tester.

 

Les quelques tests que j'ai fait (sur 2007) ont fonctionné, si ce n'est une bizzarerie dans l'affichage de l'icone SCU (icone SCU de l'EP supplémentaire dans l'EO et vice versa)

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

Posté(e)

Une autre version, qui utilise un réacteur vlr-miscellaneous-reactor au lieu des variables système (merci à Patrick_35).

 

NOUVELLE VERSION (2.1)

 

;; GELOBJ (version 2.1) 09/11/2007
;; Pour geler des calques spécifiés uniquement dans l'onglet objet
;; Merci à Patrick_35 pour vlr-miscellaneous-reactor

(defun c:gelobj	(/ lst tog)

 (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
     (setq tog (vlax-ldata-get "GelerOngletObjet" "toggled"))
     (or *GelerOngletObjet*
  (setq	*GelerOngletObjet*
	 (vlr-miscellaneous-reactor
	   nil
	   '((:vlr-layoutSwitched . gelobjrea))
	 )
  )
     )
     (vlax-for	l *layers*
(if (= (vla-get-Freeze l) :vlax-true)
  (setq lst (cons (vla-get-Name l) lst))
)
     )
     (foreach l (exclusive (mapcar 'car tog) lst)
(setq tog (vl-remove (assoc l tog) tog))
     )
     (vlax-ldata-put
"GelerOngletObjet"
"disable"
(cons (getvar "CLAYER") (exclusive lst (mapcar 'car tog)))
     )
     (setq lst tog)
     (setq lst
     (mapcar
       (function
	 (lambda (x)
	   (cond
	     ((assoc x tog))
	     (T (cons x (vla-get-freeze (vla-item *layers* x))))
	   )
	 )
       )
       (getlayers
	 "Geler dans l'onglet objet"
	 (mapcar 'car tog)
	 (vlax-ldata-get "GelerOngletObjet" "disable")
       )
     )
     )
     (foreach l (exclusive tog lst)
(vla-put-Freeze (vla-item *layers* (car l)) (cdr l))
     )
     (vlax-ldata-put "GelerOngletObjet" "toggled" lst)
     (if lst
(foreach l lst
  (vla-put-Freeze (vla-item *layers* (car l)) :vlax-true)
)
(progn
  (vlr-remove *GelerOngletObjet*)
  (setq *GelerOngletObjet* nil)
)
     )
     (vla-regen *acdoc* acAllViewports)
   )
   (alert
     "Vous devez être dans l'onglet objet pour lancer GELOBJ."
   )
 )
 (princ)
)

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

(defun gelobjrea (rea lay / false true tog)
 (setq tog (vlax-ldata-get "GelerOngletObjet" "toggled"))
 (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	(append
	  (exclusive true (mapcar 'car tog))
	  (common true (mapcar 'car tog))
	  )
      (if (assoc l tog)
 (vlax-ldata-put
   "GelerOngletObjet"
   "toggled"
   (vl-remove (assoc l tog) tog)
 )
      )
    )
    (vlax-ldata-put
      "GelerOngletObjet"
      "disable"
      (cons (getvar "CLAYER") (exclusive true (mapcar 'car tog)))
    )
    (foreach l	tog
      (if (= (getvar "CLAYER") (car l))
 (vlax-ldata-put
   "GelerOngletObjet"
   "toggled"
   (vl-remove l tog)
 )
 (vla-put-Freeze (vla-item *layers* (car l)) :vlax-true)
      )
    )
   )
   (T
    (foreach l	(common (mapcar 'car tog) false)
      (vlax-ldata-put
 "GelerOngletObjet"
 "toggled"
 (vl-remove (assoc l tog) tog)
      )
    )
    (foreach l	tog
      (vla-put-Freeze (vla-item *layers* (car l)) (cdr l))
    )
   )
 )
 (vla-regen *acdoc* acAllViewports)
)

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

;;; EXCLUSIVE
;;; Retourne une liste contenant les éléments appartenant exclusivement à l1
;;; (exclusive '(1 2 3 4) '( 2 3 4 5)) -> (1)

(defun exclusive (l1 l2)
 (if l1
   (if	(member (car l1) l2)
     (exclusive (cdr l1) l2)
     (cons (car l1) (exclusive (cdr l1) l2))
   )
 )
)

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

;;; COMMON 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 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))
 )
)

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

;; GETLAYERS (gile) 02/12/07
;; Retourne la liste des calques cochés dans la boite de dialogue
;;
;; arguments
;; titre : le titre de la boite de dialogue ou nil (defaut = Choisir les calques)
;; lst1 : la liste des calques à pré-cochés ou nil
;; lst2 : la liste des calques non cochables (grisés) ou nil

(defun getlayers (titre lst1 lst2 / toggle_column tmp file lay	layers len
	   dcl_id)

 (defun toggle_column (lst)
   (apply 'strcat
   (mapcar
     (function
       (lambda (x)
	 (strcat ":toggle{key="
		 (vl-prin1-to-string x)
		 ";label="
		 (vl-prin1-to-string x)
		 ";}"
	 )
       )
     )
     lst
   )
   )
 )

 (setq	tmp  (vl-filename-mktemp "tmp.dcl")
file (open tmp "w")
 )
 (while (setq lay (tblnext "LAYER" (not lay)))
   (setq layers (cons (cdr (assoc 2 lay)) layers))
 )
 (setq	layers (vl-sort layers '	len    (length layers)
 )
 (write-line
   (strcat
     "GetLayers:dialog{label="
     (cond (titre (vl-prin1-to-string titre))
    ("\"Choisir les calques\"")
     )
     ";:boxed_row{:column{"
     (cond
((	((	 (strcat (toggle_column (sublist layers 0 (/ len 2)))
	 "}:column{"
	 (toggle_column (sublist layers (/ len 2) nil))
 )
)
((	 (strcat (toggle_column (sublist layers 0 (/ len 3)))
	 "}:column{"
	 (toggle_column (sublist layers (/ len 3) (/ len 3)))
	 "}:column{"
	 (toggle_column (sublist layers (* (/ len 3) 2) nil))
 )
)
(T
 (strcat (toggle_column (sublist layers 0 (/ len 4)))
	 "}:column{"
	 (toggle_column (sublist layers (/ len 4) (/ len 4)))
	 "}:column{"
	 (toggle_column (sublist layers (/ len 2) (/ len 4)))
	 "}:column{"
	 (toggle_column (sublist layers (* (/ len 4) 3) nil))
 )
)
     )
     "}}spacer;ok_cancel;}"
   )
   file
 )
 (close file)
 (setq dcl_id (load_dialog tmp))
 (if (not (new_dialog "GetLayers" dcl_id))
   (exit)
 )
 (foreach n lst1
   (set_tile n "1")
 )
 (foreach n lst2
   (mode_tile n 1)
 )
 (action_tile
   "accept"
   "(setq lst nil)
(foreach n layers
(if (= (get_tile n) \"1\")
(setq lst (cons n lst))))
(done_dialog)"
 )
 (start_dialog)
 (unload_dialog dcl_id)
 (vl-file-delete tmp) 
 lst
)

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

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

(and
 (not *GelerOngletObjet*)
 (vlax-ldata-get "GelerOngletObjet" "toggled")
 (setq	*GelerOngletObjet*
 (vlr-miscellaneous-reactor
   nil
   '((:vlr-layoutSwitched . gelobjrea))
 )
 )
) 

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

 

[Edité le 2/12/2007 par (gile)]

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

Posté(e)

Bonjour,

 

avec ta nouvelle version, je n'ai plus d'erreur fatale, c'est déjà un plus,

parfois je me heurte à :

[surligneur] ; erreur: Erreur Automation Calque incorrect[/surligneur]

pourquoi ?

 

Dans mon dessin test

j'ai crée deux calques : calque1(de couleur rouge) et calque2 (de couleur jaune),

lorsque je lance gelobj, seul n'apparaissent les calques 0 et calque2, pas la moindre trace de calque1,

alors j'ai créé deux autres calques calque3 et calque4, alors quand je lance gelobj, c'est maintenant le calque2 qui n'apparait plus, bizare,

je n'ai pas essayé sur un dessin avec beaucoup de calques

 

A suivre . . .

 

A+

Posté(e)

et pourquoi pas utiliser un liste déroulante avec le nom des calques plutôt qu'une boite ou l'on coche le calque à geler, çà serait plus facile si on a beaucoup de calques.

 

A+

Posté(e)

Salut,

 

Je n'ai pas trop de temps en ce moment, tout ça est fait un peu "à l'arrache", alors désolé pour les erreurs.

 

Jai modifié la routine getLayers, les calques sont affichés sur 1, 2 ou 3 colonnes suivant leur nombre (et aucun calque n'est omis).

 

Je pense que les cases à cocher permettent mieux de voir (et de modifier) les calques à geler, en plus c'est plus facile à gérer avec le parti pris d'une boite de dialogues définie dans le LISP (il n'y a pas de fichier DCL à enregistrer).

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

Posté(e)

Salut,

ça à l'air trés trés bien, merci !

 

juste un détail, après quelques test :

Il faudrait (si le lisp est chargé au démarrage), le lancer "à vide" afin de geler les calques spécifiés ulterieurement dans un dessin où gelobj à déjà été utilisé.

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

Posté(e)

Re,

Il faudrait (si le lisp est chargé au démarrage), le lancer "à vide" afin de geler les calques spécifiés ulterieurement dans un dessin où gelobj à déjà été utilisé.

J'ai copier/coller ça pour que ça se charge en direct :

merci de me confirmer si je ne fais pas d'erreur.

(setq	*GelerOngletObjet*
	 (vlr-command-reactor
	   nil
	   '((:vlr-commandWillStart . gelobjstart)
	     (:vlr-commandEnded . gelobjend)
	    )
	 )
  )

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

Posté(e)
et tu places ou ton petit bout de programme ?

dans gelobj.lsp ?

non, tu le mets tout en bas des lisp de (gile), sans (defun ...) afin que cela se charge au demarrage.

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

Posté(e)

Salut Bred

J'aurai plutôt vu le réacteur vlr-miscellaneous-reactor avec l'évènement :vlr-layoutSwitched afin que cela ne réagisse qu'en changeant de présentation et pas à chaque commande.

 

@+

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

Posté(e)

OK, mais moi, je ne charge pas les programmes au démarage, j'ai un dossier propre au programmes que j'ai besoin, avec un menu déroulant ou barre d'outils,

exemple:

 

[surligneur] [Gèle dans l'Espace Objet]^c^c(if(not c:gelobj)(load "gelobj"));gelobj[/surligneur]

 

et la, je les place ou tes lignes de programme?

 

A+

Posté(e)

Salut Patrick_35

J'aurai plutôt vu le réacteur vlr-miscellaneous-reactor avec l'évènement :vlr-layoutSwitched afin que cela ne réagisse qu'en changeant de présentation et pas à chaque commande.

hein ??? ;)

je suis completement largué en réacteur !....

J'ai juste recopié un bout de code présent dans le lisp de (gile) et qui me semblait lancer la mise à jour de l'outils (et ça marche...)

Donc, ce que tu m'expliques, et je l'avoues sans honte, c'est du chinois pour moi !...

quand j'en serait arrivé au niveau des réacteurs (et j'ai encore beaucoup de chose à comprendre) j'en serait trés heureux....

 

Richard-c :

Ben ça ne peux pas fonctionner alors....

Il faut charger obligatoirement le lisp au demarrage vu que ça fait appel au lisp....

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

Posté(e)

Ah oui, j'ai été trop vite :red:

 

Désolé Bred, je pensais que tu commençais avec les réacteurs, d'où ma réponse.

 

Le lisp est bien, sauf qu'il réagit à chaque commande d'autocad. Avec le réacteur que je viens de donner, le réacteur ne réagira qu'au changement de présentation (de layout pour être plus précis). C'est juste pour optimiser le lisp.

Je ne l'ai lu qu'en travers, mais que ce passe t'il si une commande est annulée ?

 

@+

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

Posté(e)

j'arive bettement à le fairedepuis quelques minutes, voila comment je passe à travers les mailles (c'est de l'alchimie)

 

j'ai un menu MNL :

 

[surligneur] (load "C:\\Mes documents\\SoftE88 2006\\recharge_image.lsp")

(load "C:\\Mes documents\\SoftE88 2006\\gelobj.lsp")

 

(load "C:\\Mes documents\\SoftE88 2006\\sauvgrd_auto.lsp")

(if s::startup

(setq s::startup (append s::startup '(c:sauvgrd_auto)))

(defun-q s::startup () (c:sauvgrd_auto))

)

 

(princ "\n======== Les menus SoftE88 sont Chargés ========\n")

(princ)[/surligneur]

 

puis dans le programme sauvgrd_auto.lsp (il vérifie la sauvegarde automatique à chaque démarage de dessin (V2002 = 120mn de base, chez moi =10mn)

 

je lance [surligneur] (c:gelobj)[/surligneur]

 

bien sur, j'ai la case de dialogue qui arrive, je répond OK et c'est tout,

mais je le répete [surligneur] c'est de l'alchimie[/surligneur]

 

A+

 

 

Posté(e)

le papy vient de faire un nouvel essai (qui semble marcher) :

 

dans le programme sauvgrd_auto.lsp (il vérifie la sauvegarde automatique à chaque démarage de dessin (V2002 = 120mn de base, chez moi =10mn)

 

je lance tes lignes :

 

(setq *GelerOngletObjet*

(vlr-command-reactor

nil

'((:vlr-commandWillStart . gelobjstart)

(:vlr-commandEnded . gelobjend)

)

)

)

 

çà fontionne sans que la case de dialogue arrive au démarage,

 

affaire à suive . . .

 

A+

 

Posté(e)

peut être qu'un message d'alerte serait le bienvenu si des calques sont gelés dans l'espace objet, car il faut lancer gelobj.lsp pour les dégeler, (si on les dégèle à la manière habituelle, on passe dans une présentation ,ils sont visibles, on revient en objet ils sont encore gelé.

 

par contre j'ai fai l'essai sur un poste qui n'a pas gelobj.lsp, les calques sont gelé à l'ouverture et on les dégèle de la manière habituelle.

 

A+

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é