fabcad Posté(e) le 25 juillet 2007 Posté(e) le 25 juillet 2007 Bonjour amis vlispeurs,Avec cette fonction ci-dessous qui permet de délimiter une image avec une lwpolyligne préalablement crée je souhaiterais la convertir en visual lisp pour en comprendre le mecanisme.merci d'avance, (defun c:delim-image (/ m c1 i) (setvar "cmdecho" 0) (setq ent (car (entsel "\nSelectionnez une lwpolyligne :"))) (setq img (car (entsel "\nSelectionnez une image :"))) (if (= (cdr (assoc 280 (entget img))) 0) (command "DELIMIMAGE" img "Nouveau" "Polygonal") (command "DELIMIMAGE" img "Nouveau" "oui" "Polygonal") );fin if si image est déjà délimitée (if (= (cdr (assoc 0 (entget ent))) "LWPOLYLINE") (progn (setq lst-ent (entget ent)) (setq lng-lst (length lst-ent)) (setq i 0) (while (<= i lng-lst) (if (= (car (nth i lst-ent)) 10) (progn (setq p1 (cdr (nth i lst-ent))) (command (strcat (rtos (car p1) 2 2) "," (rtos (cadr p1) 2 2))) );fin progn );fin if (setq i (+ i 1)) ); fin while );fin progn (prompt "\n Cet objet n'est pas une LWPOLYLINE !!! Utilisez CONVERT pour la transformer !!!") );fin if (setvar "cmdecho" 1) );fin defun ;;;-------------------------------------------------------------------
(gile) Posté(e) le 26 juillet 2007 Posté(e) le 26 juillet 2007 Salut, voilà un exemple de ce qu'on peut faire : (defun c:delim (/ p i a s) (vl-load-com) (and (setq p (car (entsel "\nSélectionnez une polyligne: "))) (setq p (vlax-ename->vla-object p)) ; traduction en objet vla (= (vla-get-ObjectName p) "AcDbPolyline") (princ "\nSélectionnez une image: ") (setq i (ssget "_:S:E" '((0 . "IMAGE")))) (setq i (vlax-ename->vla-object (ssname i 0))) ; traduction en objet vla (setq s (vlax-get p 'coordinates)) ; liste des coordonnées des sommets de la polyligne (setq s (append s (list (car s) (cadr s)))) ; Ajout du premier sommet en fin de liste (progn (vlax-invoke i 'Clipboundary s) ; créer la délimitation (vla-put-ClippingEnabled i :vlax-true) ; afficher la délimitation ) ) (princ) ) Quelques explications supplémentaires :- j'ai préféré utiliser (ssget "_:S:E" '((0 . "IMAGE"))) pour la sélection de l'image ce qui évite de sélectionner la polyligne d'une image déjà délimitée.- les fonctions vlax-get, vlax-put et vlax-invoke permettent d'utiliser des listes au lieu de variants comme nécesaire avec leurs équivalents vlax-get-property, vlax-put-property, vlax-invoke-method ou les fonctions vla-* (voir ici ).- pour connaître les propriétés et méthodes applicables à un objet vla, on peut utiliser la fonction vlax-dump-object : (vlax-dump-object (vlax-ename->vla-object (car (entsel))) T) Et aussi, la fonction inverse (pour supprimer une délimitation) : (defun c:undelim (/ i a o x y h l) (vl-load-com) (and (princ "\nsélectionnez une image: ") (setq i (ssget "_:S:E" '((0 . "IMAGE")))) (setq i (vlax-ename->vla-object (ssname i 0))) (setq o (vlax-get i 'Origin)) (setq x (car o)) (setq y (cadr o)) (setq h (vla-get-ImageHeight i)) (setq l (vla-get-ImageWidth i)) (vlax-invoke i 'Clipboundary (list x y (+ x l) y (+ x l) (+ y h) x (+ y h) x y) ) (princ) ) [Edité le 26/7/2007 par (gile)] [Edité le 26/7/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
fabcad Posté(e) le 26 juillet 2007 Auteur Posté(e) le 26 juillet 2007 merci gile pour tes informations que je vais de ce pas décortiquer.a+
Calecx Posté(e) le 9 septembre 2010 Posté(e) le 9 septembre 2010 Bonjour, Le sujet date un peu mais je viens de découvrir ces lisp, tout à fait pratiques. J'ai testé la version de gile, mais chez moi je constate un petit bug (je précise que mes images à délimiter sont des ECW chargée en "_imageattach", grace au petit addon d'autodesk "Autodesk Raster Design 2006 Object Enabler", je suis sous Autocad 2006).La délimitation se déroule correctement, je sélectionne ma polyligne fermée, puis l'image (je précise que la poyligne dépasse du cadre de l'image car je délimite plusieurs images accolées avec une seule polyligne), mais une fois la délimitation effectuée, l'image disparait lorsque le zoom est trop large, mais réapparait en zoomant dessus, curieux non? J'ai testé également la version de fabcad, je ne rencontre pas de problème d'affichage de l'image lié au zoom, mais par contre, après avoir sélectionné ma polyligne, au moment de la sélection de l'image, le polygone de sélection s'accroche au cadre de l'image, insérant ainsi un ou plusieurs sommet dans la délimitation de l'image, déformant ainsi le cadre de ma polyligne. Le problème n'existe pas si la polyligne est soit en limite, soit contenu dans le cadre de l'image.
Calecx Posté(e) le 9 septembre 2010 Posté(e) le 9 septembre 2010 En lisant différents sujets sur le forum, une autre solution pour la délimitation existe, qui finalement me convient parfaitement: utiliser les Super Hachures des Express tools.
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