phil_vsd Posté(e) le 20 février 2008 Posté(e) le 20 février 2008 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.
(gile) Posté(e) le 20 février 2008 Posté(e) le 20 février 2008 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
bonuscad Posté(e) le 20 février 2008 Posté(e) le 20 février 2008 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
phil_vsd Posté(e) le 21 février 2008 Auteur Posté(e) le 21 février 2008 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.
lecrabe Posté(e) le 21 février 2008 Posté(e) le 21 février 2008 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
phil_vsd Posté(e) le 21 février 2008 Auteur Posté(e) le 21 février 2008 .../...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.
lecrabe Posté(e) le 21 février 2008 Posté(e) le 21 février 2008 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
lili2006 Posté(e) le 21 février 2008 Posté(e) le 21 février 2008 Bonsoir à toutes et tous, Les multilignes, non ? CF éventuellement ici. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
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