CADZEB Posté(e) le 10 février 2010 Posté(e) le 10 février 2010 Bonjour, suite à la demande de quelqu'un qui souhaite que ses hachures soient toujours sur le même calque, sans tenir compte du calque courant, j'ai bien entendu pensé aux réacteurs. La première idée est de passer par 2 réacteurs de commande.Le premier réacteur qui s'enclenche au début de la commande hachure, qui met de côté la valeur du calque courant et qui change cette valeur en ce qui m'intéresse.Le second réacteur s'enclenche à la fin de la commande hachure pour remettre la valeur du calque courant. ;;; Lisp à charger uniquement ... ne pas exécuter !!! (vl-load-com) (vlr-command-reactor "Debut Hachure" '((:vlr-commandWillStart . StartHatch))) (vlr-command-reactor "Fin Hachure" '((:vlr-commandEnded . EndHatch))) (defun StartHatch (calling-reactor commandInfo / thecommand e) (setq thecommand (nth 0 commandInfo)) (if (or (= thecommand "BHATCH") (= thecommand "-BHATCH")) (progn (setq OldCLAYER (getvar "CLAYER")) (if (setq e (tblobjname "layer" "FV_hachures")) (progn (setq e (vlax-ename->vla-object e)) (vla-put-Freeze e :vlax-false) (vla-put-LayerOn e :vlax-true) (setvar "CLAYER" "FV_hachures") ) ) ) ) ) (defun EndHatch (calling-reactor commandInfo / thecommand) (setq thecommand (nth 0 commandInfo)) (if (or (= thecommand "BHATCH") (= thecommand "-BHATCH")) (if OldCLAYER (setvar "CLAYER" OldCLAYER) ) ) ) Ok, c'est de la grosse artillerie pour pas grand chose, mais c'est aussi pour mieux comprendre les réacteurs. La deuxième idée me paraissait plus séduisante. Elle consiste à repérer la création d'une nouvelle hachure et changer son calque en ce qui m'intéresse. Là, il me semblait intéressant d'utiliser un acdb-reactor ;;; Lisp à charger uniquement ... ne pas exécuter !!! (vl-load-com) (vlr-acdb-reactor "calque hachure" '((:vlr-objectAppended . AppendHatch))) (defun AppendHatch (calling-reactor AcDbInfo / e) (setq e (vlax-ename->vla-object (nth 1 AcDbInfo))) (if (= (vla-get-ObjectName e) "AcDbHatch") (if (setq lay (tblobjname "layer" "FV_hachures")) (progn (setq lay (vlax-ename->vla-object lay)) (vla-put-Freeze lay :vlax-false) (vla-put-LayerOn lay :vlax-true) (vla-put-Layer e "FV_hachures") ) ) ) ) Mais l'entité e récupérée par le biais de la fonction callback n'est pas modifiable parce que ouverte en lecture uniquement. Donc, la fonction vla-put-layer renvoie une erreur. AmicalementVincent
Tramber Posté(e) le 10 février 2010 Posté(e) le 10 février 2010 Mais ca serait-ti pas _Zebulon qui se cache dérrière ce pseudo ? Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
(gile) Posté(e) le 10 février 2010 Posté(e) le 10 février 2010 Salut, Une solution serait de créer un CommandReactor/:vlr-commandEnded dans la fonction callback du AcDbReactor en lui passant l'objet hachure. La fonction callback du CommandReactor change le calque de la hachure et détruit le CommandReactor. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 11 février 2010 Posté(e) le 11 février 2010 Salut Quelque chose dans ce style (defun patrick_35:changer_hachures (rea cde) (vla-put-layer (vlr-data rea) "FV_hachures") (vlr-remove un_reacteur_tempo_hachures) ) (defun patrick_35:ajout_hachures (rea cde / obj) (and (= (vlr-data rea) "calque hachure") (tblsearch "layer" "FV_hachures") (setq obj (vlax-ename->vla-object (cadr cde))) (= (vla-get-objectname obj) "AcDbHatch") (setq un_reacteur_tempo_hachures (vlr-editor-reactor obj (list (cons :vlr-commandended (function patrick_35:changer_hachures ) ) ) ) ) ) ) (setq mon_reacteur_hachures (vlr-acdb-reactor "calque hachure" (list (cons :vlr-objectappended (function patrick_35:ajout_hachures) ) ) ) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
CADZEB Posté(e) le 11 février 2010 Auteur Posté(e) le 11 février 2010 Mais ca serait-ti pas _Zebulon qui se cache dérrière ce pseudo ? oui, est dès que j'aurai récupéré un mot de passe, je réapparaitrai comme tel Merci pour les tuyaux, je vais étudier cela de près ! AmicalementVincent
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