(gile) Posté(e) le 9 novembre 2007 Posté(e) le 9 novembre 2007 Salut, Je reconnais ce LISP (du moins le style) L'erreur vient de l'endroit où tu as mis :(if lay(command "_chprop" (entlast) "" "_Layer" lay "")) tu l'as mis l'intérieur de l'expression (vla-InsertBlock ...) à la place du nom du block d'où l'erreur stringp nil. Tu as aussi placé (if (setq ss (ssget "_X" (list '(0 . "INSERT") (cons 2 bname)))) (setq lay (cdr (assoc 8 (entget (ssname ss 0))))) ) juste avant (vlax-for (vla-get-ActiveSelectionSet ...) qui traite le jeu de sélection actif qui du coup se trouve être les blocs insérés dans le dessin au lieu des polylignes. Modifier un LISP, demande de comprendre comment il fonctionne, on ne peut pas toujours simplement remplacer une expression par une autre, d'autant plus qu'il s'agit ici de Visual LISP, un peu moins facile à comprendre. J'ai aussi supprimé certains test inutiles : avec getblock on est sûr d'avoir un nom de bloc valide. (defun c:ins-vtx (/ acdoc space bname ss lay n ins) (vl-load-com) (setq acdoc (vla-get-activeDocument (vlax-get-acad-object)) space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace acdoc) (vla-get-ModelSpace acdoc) ) ) (if (setq bname (getblock "Nom du bloc")) (progn (if (setq ss (ssget "_X" (list '(0 . "INSERT") (cons 2 bname)))) (setq lay (cdr (assoc 8 (entget (ssname ss 0))))) ) (if (ssget "_X" '((0 . "*POLYLINE"))) (progn (vla-startUndoMark acdoc) (vlax-for pl (vla-get-ActiveSelectionSet acdoc) (setq n (fix (vlax-curve-getEndParam pl))) (or (= (vla-get-Closed pl) :vlax-false) (setq n (1- n)) ) (repeat (1+ n) (setq ins (vla-InsertBlock space (vlax-3d-point (vlax-curve-getPointAtParam pl n)) bname 1.0 1.0 1.0 0.0 ) ) (if lay (vla-put-layer ins lay) ) (setq n (1- n)) ) ) (vla-EndUndoMark acdoc) ) ) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 9 novembre 2007 Posté(e) le 9 novembre 2007 Re, Merci encore (gile), tes remarques sont trés interessante pour apprendre.Si maintenant, je voulais choisir le calque des polylignes à traiter (pour le moment le lisp met le bloc sur Toutes les polylignes même si le calque est gelé!) ou bien en selection graphique, ou même (le top du top) se servir de GETLAYERS ?? Evidemment, cet outil deviendrai tout de suite trés interessant, dans pas mal d'application même. Merci d'avance si tu as (ou quelqu'un d'autres ?) le courage (j'en doute pas) de jeter un oeil. Bon WE à tous, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 9 novembre 2007 Posté(e) le 9 novembre 2007 Re, Modifier un LISP, demande de comprendre comment il fonctionne, on ne peut pas toujours simplement remplacer une expression par une autre, d'autant plus qu'il s'agit ici de Visual LISP, un peu moins facile à comprendre. J'suis bien conscient de cela, mais chaque test, même stupide, me permet de mieux comprendre l'esprit du lisp et je sais que toi, ou quelques autres trouverons toujours un moment pour répondre, la preuve. Et on ne répond pas tous les jours qu'à des questions inteliigentes,....Mais continuer d'oser les poser, je trouve ça mieux que de rester dans son coin à ne rien comprendre.(Dans la mesure ou c'est pas trop "gonflant", bien sûr!). En tous cas, merci encore. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 9 novembre 2007 Posté(e) le 9 novembre 2007 (defun c:ins-vtx (/ acdoc space bname ss lay layf n ins) (vl-load-com) (setq acdoc (vla-get-activeDocument (vlax-get-acad-object)) space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace acdoc) (vla-get-ModelSpace acdoc) ) ) (if (setq bname (getblock "Nom du bloc")) (progn (if (setq ss (ssget "_X" (list '(0 . "INSERT") (cons 2 bname)))) (setq lay (cdr (assoc 8 (entget (ssname ss 0))))) ) (if (setq layf (getlayer "Choisir le calque filtre de polylignes")) (if (ssget "_X" (list '(0 . "*POLYLINE") (cons 8 layf))) (progn (vla-startUndoMark acdoc) (vlax-for pl (vla-get-ActiveSelectionSet acdoc) (setq n (fix (vlax-curve-getEndParam pl))) (or (= (vla-get-Closed pl) :vlax-false) (setq n (1- n)) ) (repeat (1+ n) (setq ins (vla-InsertBlock space (vlax-3d-point (vlax-curve-getPointAtParam pl n)) bname 1.0 1.0 1.0 0.0 ) ) (if lay (vla-put-layer ins lay) ) (setq n (1- n)) ) ) (vla-EndUndoMark acdoc) ) ) ) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 9 novembre 2007 Posté(e) le 9 novembre 2007 Ouf, Bientôt, on aura plus le temps de poster nos requêtes, super . Quand je pense que j'ai quasiment passé la journée sur CADxp et que toi c'est tous les jours comme ça,... C'est ce que je disais sur un autre post, cela va trés vite su ce site et il est bele et bien vivant. Merci encore (gile) le résultat est terrible !!! (Imaginons la pose de bornes sur un terrain de 500 lots ,,!!! Même covadis ne sais pas faire (heu, tout du moins à ma connaissance, à part en géocodification sur le terrain ou en "bidouillant" la géobase, c'est à dire en associant le code du symbole au point) Et pour l'habillage 3D, oh là là, il me tarde de tester sur un plan topo 3D !!!. [Edité le 9/11/2007 par lili2006] Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
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