doy Posté(e) le 11 juin 2007 Posté(e) le 11 juin 2007 Salut à tous, voici un programme qui permet de décaler une polyligne qui marche.je cherche à sa voir comment l'on peut faire pour sélectionner les deux poylignes précédemment décalées (et seulement celles là) et les placer dans un calque différent de celui de la polyligne d'origine. (defun c:boite () (setq largeur_corridor (getdist "\n Donner la largeur du corridor ?:") ) ; la largeur du corridor = distance de decalage. (setq entité1 (entget (car (entsel "Selectionner la ligne ou la polyligne:")) ) ) (if (eq (cdr (assoc 0 entité1)) "LINE");;; determine si l'objet est ligne ou polyligne (progn (Setq P1 (cdr (assoc 10 entité1))) (setq P2 (cdr (assoc 11 entité1))) ) (progn (setq entitépoints (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) entité1) ) ) (progn (progn (setq P1 (car entitépoints))) (progn (setq P2 (cadr entitépoints))) ) ) ) (setq anglepl (angle P1 P2)) (setq PtGauche (polar P1 (+ anglepl (/ pi 2)) largeur_corridor)) (setq PtDroite (polar P1 (- anglepl (/ pi 2)) largeur_corridor));;; commande appelant la fonction " decaler ". (command "_offset" (/ largeur_corridor 2) P1 PtGauche "") (command "_offset" (/ largeur_corridor 2) P1 PtDroite "") (princ); fin de la fonction de double décalage.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Voila la partie du programme qui permet de sélectionner les deux polylignes et de les placer dans un autre calque mais je ne sais pas comment continuer. ; selection des limites.(setq limite (entsel " \nSélectionnez les polylignes des limites : ")) ;Sélectionnez les polylignes (ssget "L";(Prompt "\n Sélectionner les limites du corridor:") (command "-calque" "LIMITE" "co" "bleu" "")) Je serai trés reconnaissant aux personnes qui pourraient m'aider. merci @+ Doy
bonuscad Posté(e) le 11 juin 2007 Posté(e) le 11 juin 2007 Tu peux après avoir décaler utiliser (entlast) pour récupérer la dernière entité. Soit tu utilise après chaque décalage(command "_.chprop" (entlast) "" "_layer" "LIMITE" "_color" "_blue" "") Soit tu crée un jeu de sélection vide (setq js (ssadd)) et après chaque décalage tu rajoute la dernière entité a ton jeu de sélection (setq js (ssadd (entlast) js)) et tu fais ton changement en une seule fois (et ton jeu de sélection peut re-servir par la suite)(command "_.chprop" js "" "_layer" "LIMITE" "_color" "_blue" "") Bien sur le calque "LIMITE" doit exister... Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Didier-AD Posté(e) le 11 juin 2007 Posté(e) le 11 juin 2007 sinon, dès que tu as décalé ta polyligne, tu récupères son nom avec (entlast) et tu la changes de calque comme ceci ;; récupération du nom de la polyligne (setq LstPol (entlast)) ; ;récupérer les données autoCAd de la polyligne (setq Ent (entget LstPol)) ; ;Modifier la donnée "Calque "de la polyligne (setq NewEnt (subst (cons 8 "LIMITES") (assoc 8 Ent) Ent)) ;; Mettre à jour la polyligne (entmod NewEnt) avec cette syntaxe, le calque LIMITES n'a pas besoin d'exister, autoCAd le crée on peut faire un peu plus court encore avec les fonctions Vla mais pour un débutant c'est un peu moins lisible.
Didier-AD Posté(e) le 11 juin 2007 Posté(e) le 11 juin 2007 Eh !çà s'arrose; je viens de poster mon 100 ème message, j'ai gagné un galon à ma ceinturequand je pense au palmares de Tramber, çà me mine....
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