PHILPHIL Posté(e) le 1 septembre 2018 Partager Posté(e) le 1 septembre 2018 bonjour je cherche toujours a activer désactiver des fenetres de l'espace papier a la volée sans pour autant passer en revue toutes les présentations avant j'ai modifié un LISP de Blaes Sébastien ca marche que si les ID 69 sont supérieur a 1( pour le moment je fais apparaitre les "viewport" de l'espace papier ID69=1 pour comprendre )l'ID 69 du viewport se modifie en 1,2,3 .... que si on est déja aller dans la présentation l'idée avec c:changeidviewport est de modifier chaque ID 68 et ID 69 de chaque viewport avant de lancer c:acfp mais ENTMOD ne fonctionne pas avec les viewport y a t'il une autre méthodes en ACTIVEX? VISUAL LIPS ? *.NET pour modifier les ID 69 de chaque fenetre rapidement a la volée sans ouvrir les présentations merci bon week end Phil ; Ce fichier lisp contient toutes les fonctions utiles pour ; CHOISIR L ACTIVATION OU PAS DES FENETRES CONTENUES DANS LES PRESENTATIONS ; ; la commande à utiliser est : ; - acfp pour : Choisir Echelle Fenêtre Présentation ; ; BLAES Sébastien ; version du 29/07/2009 ; ; les variables écrites en majuscules, sont des variables globales (vl-load-com) ;------------------------------------------; ; nom: get_all_fen ; ; role: retourne sous forme de liste de ; ; quadruplets, toutes les fenêtres ; ; existantes dans les des différentes; ; présentations. Les quadruplets sont; ; de cette forme: ; ; - objet vla de la fenêtre ; ; - nom de la présentation ; ; - echelle personnalisée ; ; - verrouillage (V verrouillée ou ; ; D déverrouillée) ; ; param: aucun ; ; retour: liste de quadruplets ; ; nil si erreur ; ; date: 29/07/2009 ; ; Sébastien BLAES ; ;------------------------------------------; (defun get_all_fen (/ RES_ACFP vla_doc vla_pre tmp) (setq RES_ACFP nil tmp nil ; ces variables seront globales et servent à stocker le nombre maximum de caractères ; que prennent l'id, le nom de la présentation ainsi que l'échelle var_acfp_id_max 0 var_acfp_id_fen69_max 0 var_acfp_pre_max 0 var_acfp_cal_max 0 var_acfp_scale_max 0 var_acfp_fix_scale_max 0 ) ; setq (setvar "CTAB" "Model") (cond ; on cherche toutes les fenêtres sauf l'espace objet et les présentations elle-même ((= (setq select (ssget "X" '((0 . "VIEWPORT") ;;; (-4 . "<NOT") (69 . 1) (-4 . "NOT>") ))) nil) (princ (strcat "\nIl n'y a pas de fenêtres dans le fichier")) ) (t (setq RES_ACFP nil) (while (/= (setq ent (ssname select 0)) nil) (setq lent (entget ent) vla_ent (vlax-ename->vla-object ent) id_fen68 (cdr (assoc 68 lent)) id_fen69 (cdr (assoc 69 lent)) pre_name (cdr (assoc 410 lent)) cal_name (cdr (assoc 8 lent)) scale (vla-get-customscale vla_ent) ;;; lock (vla-get-displaylocked vla_ent) acti1 (vla-get-ViewportOn vla_ent) OBJID (vla-get-ObjectID vla_ent) RES_ACFP (cons (list vla_ent pre_name scale acti1 id_fen69 cal_name OBJID id_fen68) RES_ACFP) ) ; setq ; on s'occupe des variables globales (if (> (strlen (cdr (assoc 5 lent))) var_acfp_id_max) (setq var_acfp_id_max (strlen (cdr (assoc 5 lent)))) ) ; if (if (> (strlen (rtos id_fen69)) var_acfp_id_fen69_max) (setq var_acfp_id_fen69_max (strlen (rtos id_fen69))) ) ; if (if (> (strlen pre_name) var_acfp_pre_max) (setq var_acfp_pre_max (strlen pre_name)) ) ; if (if (> (strlen cal_name) var_acfp_cal_max) (setq var_acfp_cal_max (strlen cal_name)) ) ; if (if (> (strlen (rtos scale)) var_acfp_scale_max) (setq var_acfp_scale_max (strlen (rtos scale))) ) ; if (if (> (strlen (itoa (fix scale))) var_acfp_fix_scale_max) (setq var_acfp_fix_scale_max (strlen (itoa (fix scale)))) ) ; if ; on supprime ent de la sélection (ssdel ent select) ) ; while ) ) ; cond (reverse RES_ACFP) ) ; get_all_fen ;-------------------------------------------; ; nom: choisir_echelle_fenetre_presentation ; ; role: ouvre une dcl pour choisir l'échelle; ; personnalisée des fenêtres contenues; ; dans les présentations ; ; param: aucun ; ; retour: t si tout c'est bien passé ; ; nil si erreur ; ; date: 28/07/2009 ; ; Sébastien BLAES ; ;-------------------------------------------; (defun c:acfp (/ RES_ACFP liste_pre_fen_ACFP tmp_dcl desc_tmp_dcl ) (setq RES_ACFP nil) (cond ; on récupère les présentations et leur fenêtres ((= (setq liste_pre_fen_ACFP (get_all_fen)) nil) (princ (strcat "\nIl y a eu une erreur de recherche des fenêtres dans les présentations")) ) ; on va créer un fichier temporaire pour la dcl ((= (setq tmp_dcl (vl-filename-mktemp "tmp.dcl")) nil)) ; on va l'ouvrir ((= (setq desc_tmp_dcl (open tmp_dcl "w")) nil)) (t ;;;;;;;;;;;;;;;;; ; FICHIER DCL ; ;;;;;;;;;;;;;;;;; ; on va écrire dans le fichier temporaire ; on déclare la boite de dialogue (write-line (strcat "acfp_dialog: dialog{label=\"ACFP LISTES DES PRESENTATIONS et FENETRES \";") desc_tmp_dcl ) (write-line ":row{" desc_tmp_dcl) ; LISTE DES PRESENTATIONS (write-line ":column{width=180;" desc_tmp_dcl) (write-line (strcat ":text {label=\"ID_FENETRE - ID 68 - ID 69 - OBJET ID - ACTIVATION - NOM PRESENTATION(S) - ECHELLE - CALQUE Nb DE FENETRE(S) : " (itoa (length liste_pre_fen_ACFP)) "\";}" ) desc_tmp_dcl ) (write-line ":list_box {key=\"k_liste_fen\";height=110;width=70;fixed_width_font=true;multiple_select=true;}" desc_tmp_dcl ) (write-line "}" desc_tmp_dcl) ; ECHELLE PERSONNALISEE ET VEROUILLAGE (write-line ":column{" desc_tmp_dcl) (write-line ":column{" desc_tmp_dcl) (write-line ":spacer {height=2;}" desc_tmp_dcl) ;;; (write-line ":edit_box{key=\"k_ech_perso\";label=\"Echelle\";}" desc_tmp_dcl) (write-line ":radio_column{label=\"ACTIVATION FENETRE \";" desc_tmp_dcl) (write-line ":radio_button{key=\"k_active\";label=\"ACTIVER\";}" desc_tmp_dcl) (write-line ":radio_button{key=\"k_desactive\";label=\"DESACTIVER\";}" desc_tmp_dcl) ;;; (write-line ":radio_button{key=\"k_before\";label=\"ne pas changer\";}" desc_tmp_dcl) (write-line "}" desc_tmp_dcl) (write-line ":button{key=\"k_apply\";label=\"APPLIQUER\";}" desc_tmp_dcl) (write-line "}" desc_tmp_dcl) (write-line "}" desc_tmp_dcl) (write-line "}" desc_tmp_dcl) (write-line ":spacer {height=2;}" desc_tmp_dcl) ; BOUTON OK (write-line ":row{" desc_tmp_dcl) (write-line ":spacer {width=3;}" desc_tmp_dcl) (write-line ":button{key=\"k_ok\";label=\"OK\";is_default=true;}" desc_tmp_dcl) (write-line ":spacer {width=2;}" desc_tmp_dcl) (write-line "}" desc_tmp_dcl) ; on ferme la boite de dialogue (write-line "}" desc_tmp_dcl) ; on ferme le fichier (close desc_tmp_dcl) ;;;;;;;;;;;;;;;;; ;FIN FICHIER DCL; ;;;;;;;;;;;;;;;;; (cond ((= (setq dcl_id (load_dialog tmp_dcl)) nil)) ((= (new_dialog "acfp_dialog" dcl_id) nil)) (t ; cette fonction sert à mettre de façon clair les données (defun en_chaine (lst / RES_ACFP) (setq espace1 " " espace2 " " espace3 " " espace4 " " ) (repeat (+ (- var_acfp_id_max (strlen (cdr (assoc 5 (entget (vlax-vla-object->ename (nth 0 lst))))))) 4) (setq espace1 (strcat espace1 " ")) ) (repeat (+ (- var_acfp_pre_max (strlen (nth 1 lst))) 4) (setq espace2 (strcat espace2 " "))) (repeat (- var_acfp_fix_scale_max (strlen (itoa (fix (nth 2 lst))))) (setq espace3 (strcat espace3 " ")) ) (repeat 4 (setq espace4 (strcat espace4 " "))) (strcat (cdr (assoc 5 (entget (vlax-vla-object->ename (nth 0 lst))))) espace4 (rtos (nth 7 lst) 2 0) espace4 (rtos (nth 4 lst) 2 0) espace4 (rtos (nth 6 lst) 2 0) espace4 (if (= (nth 3 lst) :vlax-true) " ACTIVE " " DESACTIVE " ) espace1 (nth 1 lst) espace2 (rtos (nth 2 lst) 2 10) espace4 (nth 5 lst) ;;; espace4 ; if ) ; strcat ) ; en_chaine (defun applique_verrouillage (chx / liste_choix tmp_choix tmp verr) ; on boucle sur choix afin de chercher les fenêtres concernées (setq liste_choix '() tmp_choix chx ) (while (/= (setq tmp (read tmp_choix)) nil) (setq liste_choix (cons (car (nth tmp liste_pre_fen_ACFP)) liste_choix)) ; on retire de choix la valeur tmp (cond ((vl-string-search (strcat (itoa tmp) " ") tmp_choix) (setq tmp_choix (vl-string-subst "" (strcat (itoa tmp) " ") tmp_choix)) ) ((vl-string-search (strcat (itoa tmp) "") tmp_choix) (setq tmp_choix (vl-string-subst "" (strcat (itoa tmp) "") tmp_choix)) ) ) ; cond ) ; while ; on va simplement appliquer la verrouillage demandé (setq verr (if (= (get_tile "k_active") "1") :vlax-true :vlax-false ) ) (mapcar '(lambda (elem) (vla-put-ViewportOn elem verr)) liste_choix) ; mapcar (cond ((= (setq liste_pre_fen_ACFP (get_all_fen)) nil) (princ (strcat "\nIl y a eu une erreur de recherche des fenêtres dans les présentations")) ) (t ; on remplit la liste des présentations (fill_liste_pre) (set_tile "k_liste_fen" chx) ) ) ; cond ) ; applique_verrouillage (defun applique_echelle (scale / choix tmp_choix liste_choix tmp) (cond ; on teste s'il y a des éléments cochés dans la liste ((= (setq choix (get_tile "k_liste_fen")) "") (princ (strcat "\nAucun élément de sélectionné dans la liste!")) (princ) ) (t ; on boucle sur choix afin de chercher les fenêtres concernées (setq liste_choix '() tmp_choix choix ) (while (/= (setq tmp (read tmp_choix)) nil) (setq liste_choix (cons (car (nth tmp liste_pre_fen_ACFP)) liste_choix)) ; on retire de choix la valeur tmp (cond ((vl-string-search (strcat (itoa tmp) " ") tmp_choix) (setq tmp_choix (vl-string-subst "" (strcat (itoa tmp) " ") tmp_choix)) ) ((vl-string-search (strcat (itoa tmp) "") tmp_choix) (setq tmp_choix (vl-string-subst "" (strcat (itoa tmp) "") tmp_choix)) ) ) ; cond ) ; while ; on met l'échelle (mapcar '(lambda (elem) (vla-put-customscale elem scale)) liste_choix) ; mapcar ; on gère le verrouillage (cond ; si ne pas changer est cocher on ne fait rien ((= (get_tile "k_before") "1") (princ (strcat "\nRien a changer!")) (princ)) (t (applique_verrouillage choix)) ) ; cond ) ) ; cond ) ; applique_verrouillage ; on définit les fonctions utiles sur la dcl (defun fill_liste_pre () (start_list "k_liste_fen") (mapcar '(lambda (elem) (add_list (en_chaine elem))) liste_pre_fen_ACFP) ; mapcar (end_list) ) ; fill_liste_pre (defun k_apply_clic (/) (cond ; on teste la valeur de l'échelle saisie ;;; ((or (= (type (setq cus_scale (read (get_tile "k_ech_perso")))) 'int) (= (type cus_scale) 'real)) ;;; (applique_echelle cus_scale) ;;; ) ; si cus_scale vaut nil, c'est que l'utilisateur n'a pas saisie d'échelle ((= cus_scale nil) (cond ; si ne pas changer est cocher on ne fait rien ;;; ((= (get_tile "k_before") "1") (princ (strcat "\nRien a changer!")) (princ)) ; on teste s'il y a des éléments cochés dans la liste ((= (setq choix (get_tile "k_liste_fen")) "") (princ (strcat "\nAucun élément de sélectionné dans la liste!")) (princ) ) (t (applique_verrouillage choix)) ) ; cond ) ; la valeur saisie n'est pas bonne (t (princ "\nValeur saisie incorrecte") (princ)) ) ; cond ) ; k_apply_clic ; on définit les actions sur la dcl (action_tile "k_ok" "(setq ok t)(done_dialog)") (action_tile "k_apply" "(k_apply_clic)") ; on remplit la liste des présentations (fill_liste_pre) ; par défaut on coche "ne pas changer" (set_tile "k_before" "1") ; on lance la dcl (start_dialog) (unload_dialog dcl_id) ; on a quitter la dcl (cond ((= ok t))) ; cond ) ) ; cond ) ) ; cond ; on supprime le fichier temporaire (vl-file-delete tmp_dcl) (princ) ;;; RES_ACFP ) ; ------------------------------ ; information sur les viewport ; ------------------------------ (defun c:testviewport (/ a0 a1 cals surfent surfent ent js ) (setvar "cmdecho" 0) (setvar "dimzin" 0) (setq cav (getvar "clayer")) ;quel objet de référence pour la surface (setq bl nil) (setq bl (ssget "X" '((0 . "VIEWPORT") ;;(-4 . "<NOT") (69 . 1) (-4 . "NOT>") ))) (setq ent nil) (setq compt 0) (setq compt1 1) (if ( = bl nil) (prompt "\n AUCUNE FENETRE DANS AUCUNE PRESENTATION TROUVE : " ) (progn (setq com (sslength bl)) (while (< compt com) (setq val410 "PAS DE CALQUE" ) (progn (setq ent (entget (ssname bl compt))) ;;; (setq entite (cdr (assoc -1 ent))) ;;; (setq typenti (cdr (assoc 0 ent))) (progn (prompt (strcat "\n| " " ")) (prompt (strcat "\nENTITE N°" (rtos compt1 2 0) " SUR " (rtos com 2 0) "" )) (setq val0 (cdr (assoc 0 ent))) (setq val5 (cdr (assoc 5 ent))) (setq val410 (cdr (assoc 410 ent))) (setq val8 (cdr (assoc 8 ent))) (setq val68 (cdr (assoc 68 ent))) (setq val69 (cdr (assoc 69 ent))) (setq actv (vlax-get-property (vlax-ename->vla-object (cdr (assoc -1 ent))) 'viewporton)) (prompt (strcat "\nTYPE D'ENTITE 0 : " val0)) (prompt (strcat "\nIDENTIFICATEUR ID 5 : " val5)) (prompt (strcat "\nIDENTIFICATEUR PRESENTATION 410 : " val410)) (prompt (strcat "\nIDENTIFICATEUR CALQUE 8 : " val8)) (if (= val68 nil) (prompt "\nPAS D IDENTIFICATEUR 68 : NON") (prompt (strcat "\nIDENTIFICATEUR 68 : " (rtos val68 2 0) )) ) (if (= val69 nil) (prompt "\nPAS D IDENTIFICATEUR 69 : NON") (prompt (strcat "\nIDENTIFICATEUR 69 : " (rtos val69 2 0))) ) (getkword "\nVOULEZ VOUS CONTINUER") ) ) (setq compt (1+ compt)) (setq compt1 (1+ compt1)) ) ) ) ;modifier l'entite (prompt "\n") (setvar "dimzin" 8) (setvar "clayer" cav) ;;; (setvar "cmdecho" 1) ) ; ------------------------------ ; CHANGER ID 68 ET ID 69 DES viewport ; ------------------------------ (defun c:changeidviewport (/ a0 a1 cals surfent surfent ent js) (setvar "cmdecho" 0) (setvar "dimzin" 0) (setq cav (getvar "clayer")) ;quel objet de référence pour la surface (setq bl nil) (setq bl (ssget "X" '((0 . "VIEWPORT") ;;; (-4 . "<NOT") (69 . 1) (-4 . "NOT>") ) ) ) (setq ent nil) (setq compt 0) (setq compt1 1) (if (= bl nil) (prompt "\n AUCUNE FENETRE DANS AUCUNE PRESENTATION TROUVE : ") (progn (setq com (sslength bl)) (while (< compt com) (setq ent (entget (ssname bl compt)) val69 (cdr (assoc 69 ent)) val410 (cdr (assoc 410 ent)) val8 (cdr (assoc 8 ent)) val0 (cdr (assoc 0 ent)) ) (if (= val69 0) (progn (if (= val8 "0") (progn (setq ent (subst (cons 68 1) (assoc 68 ent) ent)) (setq ent (subst (cons 69 1) (assoc 69 ent) ent)) (entmod ent) (prompt "\n MODIFICATION DE ID 68 ET ID69 : ") ) (progn (setq ent (subst (cons 68 1) (assoc 68 ent) ent)) (setq ent (subst (cons 69 (1+ compt1)) (assoc 69 ent) ent)) (entmod ent) (prompt "\n MODIFICATION DE ID 68 ET ID69 FENETRE OBJET : ") ) ) ) (progn (prompt (strcat "\n| " " ")) (prompt (strcat "\nENTITE N°" (rtos compt1 2 0) " SUR " (rtos com 2 0) "")) (setq actv (vlax-get-property (vlax-ename->vla-object (cdr (assoc -1 ent))) 'viewporton)) (prompt (strcat "\nTYPE D'ENTITE 0 : " val0)) (prompt (strcat "\nIDENTIFICATEUR PRESENTATION 410 : " val410)) (prompt (strcat "\nIDENTIFICATEUR CALQUE 8 : " val8)) (if (= val69 nil) (prompt "\nPAS D IDENTIFICATEUR 69 : NON") (prompt (strcat "\nIDENTIFICATEUR 69 : " (rtos val69 2 0))) ) (getkword "\nVOULEZ VOUS CONTINUER") ) ) (setq compt (1+ compt)) (setq compt1 (1+ compt1)) ) ) ) ;modifier l'entite (prompt "\n") (setvar "dimzin" 8) (setvar "clayer" cav) ;;; (setvar "cmdecho" 1) ) FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant