sechanbask Posté(e) le 17 mars 2013 Posté(e) le 17 mars 2013 Bonjour, J’utilise le lisp force8 depuis quelque temps déjà car il est extrêmement efficace. J'aimerais ajouter quelques fonctions mais j'aurais besoin d'explication sur son fonctionnement. Je l'ai volontairement renommé pour qu'il corresponde à mes besoins. En effet, je souhaite passer toutes les entités en bylayer, et toutes les entités des blocs sur le calque 0 pour pouvoir purger un maximum de calque. je souhaite également changer tous les calques d'une certaine couleur, puis lancer la commande c_txt, mais ça c'est pour plus tard. (defun c:FORCEBYLAYER (/ doc) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vlax-map-collection (vla-get-blocks doc) '(lambda (x) (vlax-for item x ; Mettre toutes les entités en couleur DUCALQUE (vla-put-color item 256) ; Mettre toutes les entités du bloc sur le calque 0 (vla-put-layer item 0) ) ) ) (vla-regen doc acAllViewports) (princ) ) J'ai rajouté la ligne (vla-put-layer item 0), en pensant que seul les entités du bloc serait affecté mais ce n'est pas le cas pourquoi ? Comment faire pour que seul les entités du bloc passe sur le calque 0 ? ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
bryce Posté(e) le 17 mars 2013 Posté(e) le 17 mars 2013 Bonjour, L'espace Objet et les espaces Papier sont eux-même des blocs, il faut donc tester le nom du bloc en cours de modification pour les ignorer: (defun c:FORCEBYLAYER (/ doc) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vlax-map-collection (vla-get-blocks doc) '(lambda (x) (setq bname (strcase (vla-get-Name x))) (if (not (or (= bname "*MODEL_SPACE") (wcmatch bname "\*PAPER_SPACE*"))) (progn (vlax-for item x ; Mettre toutes les entités en couleur DUCALQUE (vla-put-color item 256) ; Mettre toutes les entités du bloc sur le calque 0 (vla-put-layer item 0) ) ) ) ) ) (vla-regen doc acAllViewports) (princ) ) Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
(gile) Posté(e) le 17 mars 2013 Posté(e) le 17 mars 2013 Salut, Il me semble que sechenbask veut mettre tous les objets en couleur ByLayer et uniquement ceux dans les blocs sur le calque "0" ( PS1 : pour tester si le bloc est un espace, la propriété IsLayout est plus pratique que les test sur le nom du bloc.PS2 : j'ai tout passé en 'vlax-for', je trouvais inélégant ce mélange de 'vlax-map' et 'vlax-for'. (defun c:FORCEBYLAYER (/ doc) (vl-load-com) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) ;; pour chaque bloc du document (vlax-for block (vla-get-Blocks doc) ;; pour chaque objet du bloc (vlax-for obj block ;; si le bloc n'est pas un Layout... (if (= (vla-get-IsLayout block) :vlax-false) ;; ...on met l'objet sur le calque "0" (vla-put-Layer obj "0") ) ;; dans tous les cas on met l'objet en couleur ByLayer (vla-put-Color obj 256) ) ) (vla-regen doc acAllViewports) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bryce Posté(e) le 18 mars 2013 Posté(e) le 18 mars 2013 Bonjour, notez les guillemets, les noms de calques sont de chaînes de caractères !Tu as bien sûr raison. Je n'y ai pas prêté attention, car manifestement ça fonctionne sans les guillemets quand le nom du calque est un nombre. :mellow: PS1 : pour tester si le bloc est un espace, la propriété IsLayout est plus pratique que les test sur le nom du bloc.C'est bien mieux en effet. PS2 : j'ai tout passé en 'vlax-for', je trouvais inélégant ce mélange de 'vlax-map' et 'vlax-for'.Gnagnagna... :P Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
sechanbask Posté(e) le 18 mars 2013 Auteur Posté(e) le 18 mars 2013 merci à vous deux, ce que vous avez modifier marche à la perfection, comment savoir quel type d'entité je suis en train de traiter ? car si c'est un texte, il faudrait que lance la commande c_txt pour déforcer le texte, si c'est une cote, la supprimer, etc... Encore merci !! ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
bryce Posté(e) le 19 mars 2013 Posté(e) le 19 mars 2013 Bonjour, Par exemple: (setq objType (vla-get-ObjectName obj)) (cond ((= objType "AcDbText") ... ) ((wcmatch objType "AcDb*Dimension") ... ) ) Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
sechanbask Posté(e) le 11 juin 2013 Auteur Posté(e) le 11 juin 2013 Bonjour, j'ai pas encore compris comment intégrer certaine chose mais j'ai ajouté quelques fonction pour me rapporcher de mon feu nettoyeur en VBA. (defun c:FORCEBYLAYER (/ doc) ;; todo ;; dévérouiller les calques ;; mettre tous les calques en couleur 8 ;; supprimer toutes les cotations ;; traiter les textes pour supprimer le forçage (vl-load-com) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) ;; pour chaque bloc du document (vlax-for block (vla-get-Blocks doc) ;; pour chaque objet du bloc (vlax-for obj block ;; si le bloc n'est pas un Layout... (if (= (vla-get-IsLayout block) :vlax-false) ;; ...on met l'objet sur le calque "0" (vla-put-Layer obj "0") ) ;; dans tous les cas on met l'objet en couleur ByLayer (vla-put-Color obj 256) ) ) (vla-regen doc acAllViewports) ;; Mettre à jour les modification apporté aux attributs (command "attsync" "N" "*") ;; Changer le style de point en invisible (command "pdmode" "0") ;; Mettre à jour l'affiche pour voir les modifications apportées (command "regen") (princ) ) ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
salvanorigatore Posté(e) le 14 octobre 2013 Posté(e) le 14 octobre 2013 Bonjour sechanbask,as-tu pu avancer un peu sur ce sujet ?en effet je suis "vachement " intéressé par le résultat final.:wub:Merci d'avance. Bonne journée a toi et a bientôt. Salvatore " Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "
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