Aller au contenu

Messages recommandés

Posté(e)

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

Posté(e)

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

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é