Aller au contenu

PROPAGER ETAT DE CALQUE DANS LES FENETRES DE PRESENTATIONS


PHILPHIL

Messages recommandés

Hello.

peut on récupérer la liste des noms de l'etat de calques, pour ensuite dans une fenetre en sélectionner un, en LISP ?

peut on acceder a l'espace objet d'une fenetre de présentation sans l'ouvrir ( sans devoir aller dans l'onglet de présentation en restant dans l'onglet objet ), et faire la fonction -calque pour modifier, restaurer l'etat de calque ?

pour aller plus sans devoir passer en revue tous les onglets de présentations.

a+

Phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

Salut

copier/coller manuel d'une fenêtre à l'autre:

tu peux remplacer px_setvar1 et 2 par setvar

;;**************************************************************************
;§/calques/ lit l'état gelé-libéré fen courante d'un viewport et génere la chaine layer-string-state/none
;;inspiré de Paul Turvill

(defun c:PickReferenceViewport (/ v2 frz flist l1 n is-viewport)
  (command "_pspace")
  (while (not is-viewport)
    (prompt
	       "\nSelectionnez la fenêtre de référence pour l'état de calques"
	     )
    (setq v2
	  (ssname  (ssget ":s" '((0 . "viewport"))) 0)

;;;	   (car
;;;	     (entsel
;;;	       "\nSelectionnez la fenêtre de référence pour l'état de calques"
;;;	     )
;;;	   )
    )
    ;;pick the viewport
    (if	(= "VIEWPORT" (cdr (assoc 0 (entget v2))))
      (setq is-viewport T)
      (prompt "\nNot a viewport, please select a viewport")
    )
  )
  (setq frz (cdadr (assoc -3 (entget v2 (list "acad")))))

  ;;...and frz will contain the viewport's extended data, with each frozen
  ;;viewport as the argument of a different "1003" code group.
  ;;To get a comma-delimited list of the frozen viewports, use:

  (setq flist nil)
  (foreach n frz
    (if	(= (car n) 1003)
      (setq L1	  (cdr n)
	   ;; flist (strcat flist L1 ",")
	    flist (cons  L1 flist)
      )
    )
    ;;if
  )
  ;;flist
  ;;Any layer not contained in flist is thawed in the selected viewport.
  (setq layer-string-state flist)
  (vl-propagate 'layer-string-state)
)

;;**************************************************************************
;§/calques/ restaure l'état gelé-libéré fen courante à un autre viewport à partir de la chaine layer-string-state/none

(defun c:PickTargetViewport (/ v2 nvport is-viewport)

  (while (not is-viewport)
    (prompt "\nSelectionnez la fenêtre cible pour l'état de calques")
    (setq v2 (ssname  (ssget ":s" '((0 . "viewport"))) 0)
;;;       (car
;;;	   (entsel
;;;	     "\nSelectionnez la fenêtre cible pour l'état de calques"
;;;	   )
;;;	 )
    )
    ;;pick the viewport
    (if	(= "VIEWPORT" (cdr (assoc 0 (setq eg (entget v2)))))
      (setq is-viewport T)
      (prompt "\nNot a viewport, please select a viewport")
    )
  )
  (setq nvport (cdr (assoc 69 eg)))
  (command "_mspace")
  (pw_setvar "cvport" nvport)
  (command "_VPLAYER" "_thaw" "*" "" "")
  (command "_VPLAYER")
  (foreach l layer-string-state
    (if (tblsearch "LAYER" l)
    (command   "_freeze" l "")
      )
  )
    (command  "")
  (command "_pspace")

)

Pour un truc entièrement automatisé, je peux pas te donner un truc tout en un, sauf a ce que tu installe PowerClic, qui n'a pas forcément été mis à jour, désolé, mais voilà ce que j'ai:

Il y a un sujet cadxp qui m'a aidé d'après le commentaire.

;;**************************************************************************
;§/Calques/propage à la 1ère active fenêtre des présentation sélectionnées un état de calque en utilisant les vues/none
;;demande d'aide: http://cadxp.com/topic/48468-assigner-un-etat-de-calque-a-un-viewport/page__pid__289778#entry289778
;;technique alternative : PickReferenceViewport, PickTargetViewport

(defun c:propage_etat_calque (/ bl lpres l eg)
 ;;etat de calque (optionnel)
 (if (setq letatcalq (pw_liste_layerState))
  (progn

   (pw_bydefault "pw-ac-layerstate" '("aucun"))
   (setq pw-ac-layerstate
	 (pw_s_lchaines3
	  "Choisissez un état de calque à restaurer: "
	  (cons "aucun" letatcalq)
	  nil
	  pw-ac-layerstate
	 )
   )


  )
 )

 (setq lpres (layoutlist))
 (pw_bydefault "masq-calq" "*")
 (pw_getstringmem "\nMasque de calque pour la sélection de la fenêtre ?" "masq-calq")
 (pw_bydefault "l-pres" lpres)
 (setq l-pres (pw_s_lchaines3 "Choisir les présentations auxquelles propager l'état de calque" lpres T l-pres))
 (setq colViews (vla-get-views pw-acaddocument))
 (command "_pspace")
 (foreach l l-pres
  (command "_layout" "_set" l)
  (command "_pspace")

  (if (setq sel (ssget "x" (list '(0 . "viewport") (cons 8 masq-calq) (cons 410 (getvar "CTAB")))))
   (progn
					;(setq lvp (pw_listsel sel))
					;(foreach vp lvp
					; (setq vobj (pw_to_object vp))
    (command "_mspace")
    ;;ci dessous plante si la vue existe déjà
    (command "_view" "_save" l)
    (setq vobj (vla-item colViews l))
    ;;(setq vobj (vla-add colViews l))_ne arche pas dans l'espace paier
    (vlax-put-property vobj 'LayerState (car pw-ac-layerstate))

    ;;(vla-SetView	  (vla-get-ActivePViewport  pw-acaddocument)  vobj);_ne marche pas pour le pviwport

    (command "_view" "_restore" l)
    ;;(vla-delete  vobj);_ne marche pas : si je supprime la vue, je perds l'état de calque

    (command "_pspace")
					;)
   )
  )
 ) ;_foreach
)

 

----------------------------------------------------------------------

Site: https://www.g-eaux.fr

Blog: http://g-eaux.over-blog.com

Lien vers le commentaire
Partager sur d’autres sites

  • 9 mois après...

Bonjour

a tester

PROPAGE_FREEZE_calqueS_dans_fenetres

Ca récupère la liste des calques qui sont "freeze" dans une fenêtre  et le propage dans les fenetres sélectionner dans les présentations

 

PROPAGE FREEZE CALQUE DANS FENETRES.LSP

 

il faut installer vplayerlisp de Gile

 

on doit pouvoir propager autre chose que FREEZE des calques, pour peu que l'on récupère les paramètres du calque

a+

Phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

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é