Aller au contenu

Problème d\'association polyligne / calque


Messages recommandés

Posté(e)

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

 

Posté(e)

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

Posté(e)

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.

 

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é