Bred Posté(e) le 18 juillet 2006 Posté(e) le 18 juillet 2006 Salut,Lorsque j'utilise (vla-InsertBlock (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) vlax-3d-point pt) chem 1 1 1 0)à l'insertion du bloc, j'ai à chaque fois le message sur la ligne de commande : Définition à double du bloc xxxxxxxx ignorée.... malgré cmdecho sur 0 ... y a t'il un moyen du supprimer ces messages ??? ...merci d'avance. Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
bonuscad Posté(e) le 18 juillet 2006 Posté(e) le 18 juillet 2006 Je pense qu'il faut fixer la variable "EXPERT" au minimun à 2 ou plus. Regarde l'aide pour les différentes valeurs possibles [Edité le 18/7/2006 par bonuscad] Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Bred Posté(e) le 18 juillet 2006 Auteur Posté(e) le 18 juillet 2006 merci bonuscad, mais je viens de tester et ça n'a pas l'air d'être ça.... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
(gile) Posté(e) le 18 juillet 2006 Posté(e) le 18 juillet 2006 Ça a peut-être rapport avec ce sujet Juste une suggestion où NOM est le nom du bloc et CHEM le chemin complet d'un wbloc (vla-insertblock (vla-get-paperspace (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point pt) (if (vla-item (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object))) NOM) NOM CHEM ) 1 1 1 0 ) [Edité le 18/7/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Bred Posté(e) le 18 juillet 2006 Auteur Posté(e) le 18 juillet 2006 Salut (gile) et merci,non, ça ne fonctionne pas : je l'ai tester avec mon lisp de remplacement de bloc en -vl, je le copie ci-dessous :(j'ai changé le "vla-get-paperspace " en "vla-get-modelspace " sinon j'avais une erreur...) (defun c:bbb (/ bloc_sel bloc_R) (princ "\n------------------------------\n Sélection du Bloc à Remplacer :") (while (= bloc_sel nil) (setq bloc_sel (ssget "_:S:E" '((0 . "INSERT"))))) (setq bloc_R (getstring "\n Entrez le nom du bloc Remplaçant ou : ")) (if (= bloc_R "")(progn (while (= bloc_R "") (setq bloc_R (ssget "_:S:E" '((0 . "INSERT"))))) (setq bloc_R (cdr (assoc 2 (entget (ssname bloc_R 0))))))) (vla-put-layer (vla-insertblock (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point (cdr (assoc 10 (entget (ssname bloc_sel 0))))) (if (vla-item (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object)))bloc_R) (findfile (strcat bloc_R ".dwg" ))) (cdr (assoc 41 (entget (ssname bloc_sel 0)))) (cdr (assoc 42 (entget (ssname bloc_sel 0)))) (cdr (assoc 43 (entget (ssname bloc_sel 0)))) (cdr (assoc 50 (entget (ssname bloc_sel 0))))) (cdr (assoc 8 (entget (ssname bloc_sel 0))))) (entdel (ssname bloc_sel 0)) ) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
(gile) Posté(e) le 18 juillet 2006 Posté(e) le 18 juillet 2006 C'est mon côté "maniaque", mais je préfère les codes où ne sont pas mélangés les styles. Si tu te mets au vlisp, oublie les entget, récupérer les propriétés d'un objet est beaucoup plus évident en vlisp. Il faut d'abord transformer le nom d'entité (ename) en vla-object : (setq obj (vlax-ename->vla-object ent)) En faisant un (vlax-dump-object obj) tu pourras voir toutes les propriétés accessible pour l'objet. tu peux récupérer ces propriétes aves un (vla-get-property obj) ou les modifier avec un (vla-put-property obj [arg ...]) Si tu fais (vlax-dump-object obj T) tu auras aussi toutes les "méthodes" applicables à l'objet avec un (vla-method [arg...]) Le test sur la présence ou non du bloc dans la collection ne me semble pas utile vla-Insert fonctionne aussi bien avec un nom de bloc (si le bloc est dans la collection) ou un chemin complet (si le chemin est valide): (if (vla-item (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object)) ) bloc_R ) (findfile (strcat bloc_R ".dwg")) ) Volà ce que ça pourrait donner : (defun c:bbb (/ bloc_sel bloc_R) (princ "\n------------------------------\n Sélection du Bloc à Remplacer :" ) (while (= bloc_sel nil) (setq bloc_sel (ssget "_:S:E" '((0 . "INSERT")))) ) ;; Changement du nom d'entité en vla-object (setq obj (vlax-ename->vla-object (ssname bloc_sel 0))) (setq bloc_R (getstring "\n Entrez le nom du bloc Remplaçant ou : ")) (if (= bloc_R "") (progn (while (= bloc_R "") (setq bloc_R (ssget "_:S:E" '((0 . "INSERT")))) ) (setq bloc_R (cdr (assoc 2 (entget (ssname bloc_R 0))))) ) ) (vla-put-layer (vla-insertblock (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)) ) (vla-get-InsertionPoint obj) Bloc_R (vla-get-XScaleFactor obj) (vla-get-YScaleFactor obj) (vla-get-ZScaleFactor obj) (vla-get-rotation obj) ) (vla-get-layer obj) ) (vla-delete obj) ) EDIT : remplacé (vla-delete bloc) par (vla-delete obj). [Edité le 18/7/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Bred Posté(e) le 18 juillet 2006 Auteur Posté(e) le 18 juillet 2006 Alors là, merci pour ce petit cours de vl !!! Juste pour info, je viens de tester ta proposition et elle ne fonctionne pas si le bloc n'est pas déjà dans le dessin (mais je pense qu'il faut juste marquer le chemin de recherche du bloc pour que ça fonctionne), par contre, le bloc remplacé ne s'efface pas.... j'édite :je confirme, pour remplacer le bloc avec un bloc ne se trouvant pas dans le dessin, remplacer bloc_R par (findfile (strcat bloc_R ".dwg" )) (à l'insertion en fin de lisp) [Edité le 18/7/2006 par Bred] Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
(gile) Posté(e) le 18 juillet 2006 Posté(e) le 18 juillet 2006 le bloc remplacé ne s'efface pas... L'erreur est réparée voir EDIT au dessus. Il faut effectivement spécifier le chemin complet si le bloc n'est pas dans la collection du dessin. Il est possible de faire un test pour savoir si le bloc est présent dans la collection, mais attention, (vla-item ...) ne retourne pas nil mais une erreur si l'item n'est pas trouvé, il faut donc utiliser les fonctions vl-catch-all-error-p et vl-catch-all-apply. Si le bloc n'est pas dans la colection on peut chercher son chemin avec (findfile bloc_R) : (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object)) ) bloc_R ) ) ) (setq bloc_R (findfile bloc_R)) ) Dans ce cas bloc_R doit avoir été spécifié avec l'extension .dwg et être dans un dossier du chemin de recherche d'AutoCAD. Il peut être prudent de faire ce test avant le (vla-put-layer (vla-InsertBlock ...)) et même de ne lancer celui-ci qu'après un (if bloc_R ...) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 18 juillet 2006 Posté(e) le 18 juillet 2006 Pour faire au plus simple, un (vla-put-name obj Bloc_R) (si Bloc_R existe) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
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