Aller au contenu

Décaler et changer de calque une polyligne


Messages recommandés

Posté(e)

Hello tous,

 

Je viens de faire ce petit lisp. Il sert à cliquer sur deux points pour créer une pline puis cette pline est décalée de chaque cotés pour dessiner une canalisation.

 

1- Comment faire pour que le choix du deuxième point se fasse en mode ortho ?

2-Comment faire pour que les deux plines décalées soient transférées sur le calque "0 cana" ?

 

 
(defun c:canal (/ p1 p2 p3 p4 li li2 li3 dc delta)
(setq delta 1)
(setq p1 (getpoint "Premier point SVP : "))
????????????????????????????????????????????????????????????
(setq p2 (getpoint "Deuxième point SVP : "))
(Setq dc (getreal "Diamètre de la canalisation ? : "))
(Setq dc2 (/ dc 2))
(command "_.layer" "_make" "0 Axes" "")
(setvar "clayer" "0 Axes")
(command "_.pline" p1 p2 "")
(setq li (entlast))
(command "_.layer" "_make" "0 Cana" "")
(setvar "clayer" "0 Cana")
(setq p3 (list (-(car p1) delta) (+(cadr p2) delta)))
(setq p4 (list (+(car p2) delta) (-(cadr p1) delta)))
(command "_.offset" dc2 li p3 "")
(setq li2 (entlast))
????????????????????????????????????????????????????????????
(command "_.offset" dc2 li p4 "")
(setq li3 (entlast))
????????????????????????????????????????????????????????????
(princ)
)

 

Merci !

"La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.

Posté(e)

Salut,

 

1- Comment faire pour que le choix du deuxième point se fasse en mode ortho ?

 

Tu peux utiliser la fonction setvar : (setvar "ORTHOMODE" 1) avant la sélection des points.

Pour un LISP "propre", on essaye qu'après l'exécution de la routine l'environnement soit le même qu'avant, il faut donc stocker les valeurs initiales des variables qu'on aura à modifier puis restaurer leurs valeurs initiales ensuite :

 

(setq ortho (getvar "ORTHOMODE")) ; on conserve la valeur initiale dans ortho
(setvar "ORTHOMODE" 1) ; on met orthomode à 1
(setq p1 (getpoint "Premier point SVP : "))
(setq p2 (getpoint [b]p1[/b] "Deuxième point SVP : ")) ; p1 pour une ligne élastique
(setvar "ORTHOMODE" ortho); on restaure la valeur initiale

 

2-Comment faire pour que les deux plines décalées soient transférées sur le calque "0 cana" ?

 

Tu peux utiliser la commande CHPROP :

 

(setq li2 (entlast))
 (command "_chprop" li2 "" "_layer" "0 Cana" "") 

 

De la même manière tu peux utiliser cette commande pour la ligne d'axe ce qui évite de changer le calque courant.

 

PS : avant de faire le décalage il serait prudent de désactiver l'accrochage aux objets (même méthode que pour orthomode).

 

PPS : tu peux utiliser getdist à la place de getreal pour récupérer' la distance de décalage. ce qui permet la saisie au clavier ou à l'écran (là ausssi on peut avoir la ligne élastque) :

 

(Setq dc (getdist p1 "Diamètre de la canalisation ? : ")) 

 

[Edité le 21/2/2008 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Ce double décalage me rappelle un vieux sujet

 

Pour ton besoin tu pourrais le retourner comme ça par exemple...

(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] : ") "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)
) 

 

Toutes les entités décalées seront "gripées", avec le volet des propriétés, tu n'as plus qu'à les mettre dans le calque, couleur, type de ligne etc...

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

Posté(e)

Merci les gars !

 

Voilà le lisp finalisé et commenté pour les futurs prétendants au lisp...

 

 
; LISP Finalisé et testé
;Créé une canalisation en fonction de l'axe et du diamètre

(defun c:cana (/ p1 p2 p3 p4 li li2 li3 dc delta curlay)
(setq delta 1)

(setq curlay (getvar "clayer")) ;on stocke la variable du calque courant en mémoire

(setq ortho (getvar "ORTHOMODE")) ;on conserve la valeur initiale dans ortho
(setvar "ORTHOMODE" 1) ;on passe en mode ortho actif


(setq p1 (getpoint "Premier point SVP : ")) ; demande le premier point de l'axe
(setq p2 (getpoint p1 "Deuxième point SVP : ")) ;pour avoir un élastique entre les points

(setvar "ORTHOMODE" ortho) ;on repasse en mode ortho avant le changement

(Setq dc (getreal "Diamètre de la canalisation ? : ")) ;demande le diamètre de la canalisation
(Setq dc2 (/ dc 2)) ;Le dimaètre de la cana sera divisé par deux pour le décalage

(command "_.layer" "_make" "0 Axes" "") ;création du calque "O axes"
(setvar "clayer" "0 Axes") ;Changement de calque courant
(command "_.pline" p1 p2 "") ;création de la pline en fonction des points choisis
(setq li (entlast)) ;Mise en mémoire de l'axe ainsi créé.

(command "_.layer" "_make" "0 Cana" "")	 ;création du calque "0 cana"

(setvar "clayer" "0 Cana") ;passe le calque courant en "0 cana"

(setq p3 (list (-(car p1) delta) (+(cadr p2) delta))) ;on stocke en mémoire l'abcisse de P1 et l'ordonnée de P2 avec un delta
(setq p4 (list (+(car p2) delta) (-(cadr p1) delta))) ;on stocke en mémoire l'abcisse de P2 et l'ordonnée de P1 avec un delta

(command "_.offset" dc2 li p3 "") ;commande de décalage de l'axe vers un coté
(setq li2 (entlast)) ;mise en mémoire de li2
(command "_chprop" li2 "" "_layer" "0 Cana" "") ;on change les propriétés de la dernière entité

(command "_.offset" dc2 li p4 "") ;commande de décalage de l'axe vers l'autre coté
(setq li3 (entlast)) ;mise en mémoire de li3
(command "_chprop" li3 "" "_layer" "0 Cana" "") ;on change les propriétés de la dernière entité

(setvar "clayer" curlay) ;on remet le calque courant dans l'état initial

(princ)
)

 

PS : Apparement le lisp de Bonuscad marche sur LT extender même s'il comporte des VLA ...

 

[Edité le 21/2/2008 par phil_vsd]

 

[Edité le 21/2/2008 par phil_vsd]

"La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.

Posté(e)

 

Hello

 

Ces routines fonctionnent bien et sont sympas, merci ! :)

 

Une suggestion d'amélioration pou la routine DBL_OFFSET

 

Possibilité de sélectionner N polylignes 2D en une seule fois

et donc génération N x 2 polylignes 2D en décalage :D

 

Et aprés il faut raccorder partout les polylignes décalées (avec quel rayon, d'ailleurs !?) !

Ca serait sympa de l'automatiser aussi :cool:

 

Le Decapode (un peu trop exigeant, peut être)

 

 

Autodesk Expert Elite Team

Posté(e)

.../...

Et aprés il faut raccorder partout les polylignes décalées (avec quel rayon, d'ailleurs !?) !

Ca serait sympa de l'automatiser aussi :cool:

 

Le Decapode (un peu trop exigeant, peut être)

 

Heu j'suis largué... mais faut raccorder avant de décaler afin d'avoir qu'une polyligne à traiter... Je ne sais pas encore raccorder une suite de pline ayant une extrémité en commun.

 

A suivre...

"La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.

Posté(e)

 

Hello

 

Tu imagines que tu as N polylignes 2D (chacune de 1-M sommets) qui representent en fait l'axe des canas !

 

Tu dessines qq polylignes 2D jointives par exemple ...

 

Et je desire générer en fait depuis une seule selection les 2 X N polylignes decalees avec un joli raccord de rayon R parametrable (=0 ou =R) !! :)

 

Suis je clair ? Le Decapode

 

Autodesk Expert Elite Team

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é