Aller au contenu

Micro-Amelioration sur Lisp SVP


Messages recommandés

Posté(e)

Hello

 

J ai un Lisp qui fait automatiquement un double Decalage (Gauche - Droite) qui me convient tout a fait !

 

Mais je desire que les Objets generes soient sur le calque COURANT

et non pas sur le Calque d'Origine des objets selectionnes !

 

Donc SVP j espere que une ame charitable nous donnera la solution !?

 

Je pense que derriere les 2 lignes "vla-offset ..."

Il faut recuperer le DERNIER objet dessine et le mettre sur le calque Par Defaut = COURANT !?

 

LA SANTE (Stay Safe), Bye, lecrabe "triste"

Automne 2020, la retraite

 

;; 
;; Commande au clavier: dbl_offset
;; Decalage des 2 cotes d un objet
;; et question Effacer oui/non l objet d'origine 
;; 

(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 Decalage <" (rtos (getvar "USERR1")) "> : ")))
(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'entite selectionnée [Oui/Non] <Non> : ") "Yes") T nil))
(while (/= ent "Exit")
(setq js (ssadd))
(initget "Sortir _Exit")
(while (or (null (setq ent (entsel "\nChoix de l'objet a Decaler 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) 
) 

Autodesk Expert Elite Team

Posté(e)

Hello Olivier

 

Merci de ton aide mais j'ai fais "un poil" different !

En ajoutant la ligne suivante :

(command "_CHPROP" "_L" "" "_LAYER" (getvar "CLAYER") "")

Derriere chaque ligne "vla-offset ..."

 

LA SANTE (Stay Safe), Bye, lecrabe "triste"

Automne 2020, la retraite

Autodesk Expert Elite Team

Posté(e)

Ou pour rester élégant, vu que les fonction (vla-...) sont déjà utilisées et ainsi éviter un (command)

 

(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 <" (rtos (getvar "USERR1")) ">:")))
(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] <Non>: ") "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-put-Layer (vlax-ename->vla-object (entlast)) (getvar "CLAYER"))
				(vla-Offset vla_obj (- (/ val_offset 2.0)))
				(setq js (ssadd (entlast) js))
				(vla-put-Layer (vlax-ename->vla-object (entlast)) (getvar "CLAYER"))
				(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

Posté(e)

Hello Bruno

 

MERCI MAGNIFIQUE !

 

Et SVP puis je solliciter une amelioration significative !?

 

A lieu de faire UN CLIC sur chaque objet A DECALER,

Ne pourrait on pas faire une selection classique de N objets

ET generer les N Doubles Decalages !?

 

ET toujours avec l'option de garder ou pas, les objets de reference !

 

MERCI d'avance de ton attention, LA SANTE (Stay Safe), Bye, lecrabe "triste"

Automne 2020, la retraite

Autodesk Expert Elite Team

Posté(e)

J'ai essayé d'être le plus large possible aux niveaux du choix des entités, toutes ne supportent (vla-offset)

(vl-load-com)
(defun c:dbl_offset ( / val_offset del_ent js n vla_obj)
 (initget 6)
 (setq val_offset (getdist (strcat "\nLargeur totale du décalage <" (rtos (getvar "USERR1")) ">:")))
 (if (not val_offset) (setq val_offset (getvar "USERR1")) (setvar "USERR1" val_offset))
 (princ "\nChoix des objets à décaler de part et d'autre")
 (setq js
(ssget
 	(list
   	(cons -4 "<AND")
     	(cons 0 "*POLYLINE,LINE,ARC,CIRCLE,ELLIPSE,XLINE")
     	(cons -4 "<NOT")
       	(cons -4 "&") (cons 70 126)
     	(cons -4 "NOT>")
   	(cons -4 "AND>")
 	)
)
 )
 (initget "Oui Non _Yes No")
 (setq del_ent (if (eq (getkword "\nSupprimer l'objet source [Oui/Non] <Non>: ") "Yes") T nil))
 (cond
(js
 	(repeat (setq n (sslength js))
   	(setq vla_obj (vlax-ename->vla-object (ssname js (setq n (1- n)))))
   	(vla-Offset vla_obj (* val_offset 0.5))
   	(vla-put-Layer (vlax-ename->vla-object (entlast)) (getvar "CLAYER"))
   	(vla-Offset vla_obj (- (* val_offset 0.5)))
   	(vla-put-Layer (vlax-ename->vla-object (entlast)) (getvar "CLAYER"))
   	(if del_ent (vla-delete vla_obj))
 	)
)
 )
 (princ)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Hiya,

 

(vl-load-com)
(defun c:dbl_offset ( / val_offset del_ent js ent vla_obj jsel i)
       (initget 6)
       (setq val_offset (getdist (strcat "\nLargeur totale du décalage <" (rtos (getvar "USERR1")) ">:")))
       (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] <Non>: ") "Yes") T nil))
       (if (or (setq jsel (ssget "_I"))
               (setq jsel (ssget))
           )
             (progn
               (repeat (setq js (ssadd) i (sslength jsel))
                       (setq ent (ssname jsel (setq i (1- i)))
                             vla_obj (vlax-ename->vla-object ent)
                       )
                       (vla-Offset vla_obj (/ val_offset 2.0))
                       (setq js (ssadd (entlast) js))
                       (vla-put-Layer (vlax-ename->vla-object (entlast)) (getvar "CLAYER"))
                       (vla-Offset vla_obj (- (/ val_offset 2.0)))
                       (setq js (ssadd (entlast) js))
                       (vla-put-Layer (vlax-ename->vla-object (entlast)) (getvar "CLAYER"))
                       (if del_ent (entdel ent))
               )
               (if js (sssetfirst nil js))
           )
       )
       (princ)
)

 

Permet la pré-sélection si besoin (je ne connais pas la fonction vla-offset donc je ne sais pas comment ça se passe dans le cas d'une sélection d'objets non "décalables") et supprime la question "Sortir ?" :3

 

Bisous,

Luna

Posté(e)

Hello Les Pros du Lisp/VLisp

 

MERCI Beaucoup !

 

Que la volupte supreme et le bonheur absolu daignent vous honorer !

 

LA SANTE (Stay Safe), Bye, lecrabe "triste"

Automne 2020, la retraite

Autodesk Expert Elite Team

  • 1 an après...
Posté(e)

Coucou,

Le soucis c'est que l'on ne peut pas vraiment décaler une polyligne 3D. L'outil DECALER permet uniquement de créer une polyligne 2D coplanaire à une distance spécifique de la première. Dans le cas d'une polyligne 3D, il n'y a pas de notion de coplanéité car un plan est défini par 3 points, or chaque segment de la polyligne appartiennent à leur propre plan et ne sont définis que par 2 points. Donc impossible de "fixer" un plan pour ces segments et donc de les décaler de manière coplanaire (il y a une infinité de plan possible pour chaque segment).
Donc je dirais que mathématiquement parlant, il n'est pas possible de DECALER une polyligne 3D.

Bisous,
Luna

  • 5 mois après...
Posté(e)

Salut à la communauté.
Et juste un changement de propriété avec (entlast) après la création de chaque parallèle ?

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

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é