kclement Posté(e) le 19 janvier 2009 Posté(e) le 19 janvier 2009 Bonjour, J'ai glâné sur le forum deux lisps qui font le même boulot c'est à dire une décalage de chaque côté de l'objet. Le premier n'efface pas l'objet source (et ne fonctionne pas avec les arcs) et le second efface l'ojet source. Voici les codes (ce ne sont pas les commandes de lancement d'origine) (defun c:ddc (/ vdist entite1 pt1 pt2 entitepoints anglepl PtGauche PtDroite) (if (setq Vdist (getdist "\n Distance de décalage ou valider la précédente ?:")) (setvar "offsetdist" Vdist) (setq Vdist (getvar "offsetdist")) ) (setq entité1 (entget (car (setq select-ent (entsel "Selectionner la ligne ou la polyligne:"))) ) ) (if (eq (cdr (assoc 0 entite1)) "LINE");;; determine si l'objet est ligne ou polyligne (Setq pt1 (cdr (assoc 10 entite1)) pt2 (cdr (assoc 11 entite1))) (setq entitepoints (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) entité1) ) pt1 (car entitepoints) pt2 (cadr entitepoints)) ) (setq anglepl (angle Pt1 Pt2)) (setq PtGauche (polar Pt1 (+ anglepl (/ pi 2)) vdist)) (setq PtDroite (polar Pt1 (- anglepl (/ pi 2)) vdist)) (command "_offset" "" select-ent PtGauche "" ) (command "_offset" "" select-ent PtDroite "" ) (princ) ) (defun c:ddc2 ( / val_offset ent vla_obj) (setq val_offset (getdist (strcat "\nLargeur du décalage <" (rtos (getvar "USERR1")) ">:"))) (if (not val_offset) (setq val_offset (getvar "USERR1")) (setvar "USERR1" val_offset)) (while (null (setq ent (entsel "\nChoix de l'objet à décaler de part et d'autre: ")))) (setq ent (car ent)) (setq vla_obj (vlax-ename->vla-object ent)) (vlax-invoke-method vla_obj "Offset" (- (/ val_offset 2.0))) (vlax-invoke-method vla_obj "Offset" (/ val_offset 2.0)) (entdel ent) (princ) ) Ma requête est la suivante : peut-on avoir un seul lisp (qui accepte tous les objets que la commande décaler d'autocad accepte) qui demande à la fin si on veut effacer l'objet source ? Merci d'avance
bonuscad Posté(e) le 19 janvier 2009 Posté(e) le 19 janvier 2009 Bonjour, La deuxième solution modifiée (vl-load-com) (defun c:dbl_offset ( / val_offset del_ent js ent vla_obj) (initget 6) (setq val_offset (getdist (strcat "\nLargeur totale du décalage [b]<[/b]" (rtos (getvar "USERR1")) "[b]>[/b]:"))) (if (not val_offset) (setq val_offset (getvar "USERR1")) (setvar "USERR1" val_offset)) (initget "Oui Non _Yes No") (setq del_ent (if (eq (getkword "\nSupprimer l'entité sélectionnée [Oui/Non] [b]<[/b]Non[b]>[/b]: ") "Yes") T nil)) (while (/= ent "Exit") (setq js (ssadd)) (initget "Sortir _Exit") (while (or (null (setq ent (entsel "\nChoix de l'objet à décaler de part et d'autre/[sortir]: "))) (/= ent "Exit")) (cond ((not (null ent)) (setq ent (car ent)) (setq vla_obj (vlax-ename->vla-object ent)) (vla-Offset vla_obj (/ val_offset 2.0)) (setq js (ssadd (entlast) js)) (vla-Offset vla_obj (- (/ val_offset 2.0))) (setq js (ssadd (entlast) js)) (if del_ent (entdel ent)) ) ) (initget "Sortir _Exit") ) (if js (sssetfirst nil js)) ) (princ) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
kclement Posté(e) le 20 janvier 2009 Auteur Posté(e) le 20 janvier 2009 Merci Bonuscad ça marche nickel !
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