Aller au contenu

Messages recommandés

Posté(e)

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
;;;-------------------------------------------------------------------

Posté(e)

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

  • 3 ans après...
Posté(e)

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.

 

 

Posté(e)

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.

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité