Siham2432 Posté(e) il y a 18 heures Posté(e) il y a 18 heures Bonjour à tous, J'ai trouvé ce lisp de Gile sur ce topic https://cadxp.com/topic/20076-mettre-le-contenu-dun-calque-au-premier-plan/page/2/ qui fonctionne parfaitement, mais j'aimerais l'améliorer pour qu'il cible également les objets situés dans les blocs. Est-ce possible ? Je n'ai pas réussi à créer la boucle pour parcourir tous les blocs sans distinction et mettre les objets situés dans le calque cible au premier plan. ;;; 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) ) Pouvez-vous m'aiguiller sur la démarche à suivre ? Je vous remercie d'avance.
(gile) Posté(e) il y a 16 heures Posté(e) il y a 16 heures Salut les commandes TOP et BOT définies ci-dessous affectent tous les espaces et tous les blocs. (mapcar (function (lambda (cde fun) (eval (list 'defun cde '(/ ent doc blocks layer sort lst 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)) blocks (vla-get-Blocks doc) layer (cdr (assoc 8 (entget ent))) ) '(not (vla-StartUndoMark doc)) (list 'vlax-for 'b 'blocks '(or (not (vl-catch-all-error-p (setq sort (vl-catch-all-apply 'vla-getObject (list (vla-getExtensionDictionary b ) "ACAD_SORTENTS" ) ) ) ) ) (setq sort (vla-addObject (vla-getExtensionDictionary b ) "ACAD_SORTENTS" "AcDbSortentsTable" ) ) ) '(setq lst nil) '(vlax-for obj b (if (= (vla-get-Layer obj) layer) (setq lst (cons obj lst)) ) ) (list 'if 'lst (list fun 'sort '(vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbObject (cons 0 (1- (length lst))) ) lst ) ) ) ) ) ) '(vla-EndUndoMark doc) '(vla-regen doc acActiveViewport) '(princ) ) ) ) ) '(c:top c:bot) '(vla-MoveToTop vla-MoveToBottom) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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