Aller au contenu

création d\'un objet sur un calque précis


chrchat

Messages recommandés

Bonjour a tous.

 

Je suis en train de faire des petits lisp et j'ai un petit probleme :)

 

Voila je crée un objet (c'est pas le probleme) en fonction d'un point que je selectionne sur une autre entitée (généralement une ligne ou polyligne).

 

mon objet ce crée sur le calque courant, seulement je voudrais que celui ci ce crée sur le même calque que l'entitée selectionnée.

 

comment faire pour extraire le calque et le definir courant ?

 

 

merci

CCAD la DAO au service de l'Energie - http://c.cad.free.fr

Lien vers le commentaire
Partager sur d’autres sites

Ma routine selectionne un objet, détermine son calque et transfert les entités choisies dans ce layer.

Tu peux t'en inspirer.

 

(defun c:ENT_Layer ( / co pl lt)

;;(defun c:ENT_Layer ()

(setvar "cmdecho" 0) ;;desactive l'affichage des op‚rations

(setq ent(entsel "\nCliquez l'entite pour le LAYER de reference. "))

(while (= ent Nil)

(progn

(c:beep)

(alert "Selectionnez une entite...!")

(setq ent(entsel "\nCliquez l'entite pour le LAYER de reference. "))

)

)

(setq an (car ent))

(redraw an 3)

(Prompt "\nSelectionnez les entites a changer ...")

(setq sel (ssget))

(redraw an)

 

(if (/= ent nil)

(progn

(setq ent(entget (car ent)))

(setq pl (assoc 8 ent)) ;; <<<< --------- Layer sélectionné

(setq pl (cdr pl))

 

(setq co (assoc 62 ent)) ;; Color

(setq co (cdr co))

(if (= co nil)

(setq co "Bylayer")

(Setq co (rtos co))

)

 

(setq lt (assoc 6 ent)) ;; Ltype

(setq lt (cdr lt))

(if (= lt nil) (setq lt "Bylayer"))

 

(setq ha (assoc 39 ent)) ;; Thickness

(setq ha (cdr ha))

(if (= ha nil) (setq ha 0.0))

 

(if (/= sel nil)

(command "chprop" "si" sel

"layer" pl

""

)

)

)

)

(setvar "cmdecho" 1) ;;reactive l'affichage des op‚rations

(princ (Strcat "Nouveaux parametres: "

"Layer " pl

)

)

(princ)

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Ah, grillé par CoolMan pour la réponse, mais je la donne quand même pour être un peu plus explicite

 

Tu fais un entget sur ton entité et avec un (cdr (assoc 8 ent)) tu trouves le calque

 

Maintenant, pour changer le calque de l'autre entité, soit par un chprop ou encore

 

un entget sur l'entité de destination

 

(setq dest (subst (assoc 8 ent) (assoc 8 dest) dest))
(entmod dest)
(entupd (cdr (assoc -1 dest)))

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Je n'y arrive pas, voila mon lisp :

 

 

(defun c:rr (/ ent1 p1 p2 dist ang p3 demidist calq)

 

(setvar "cmdecho" 0)

 

(setq ent1 (entsel))

(setq p1 (cadr ent1))

(setq ent1 (entget (entlast)))

(setq calq (cdr (assoc 8 ent1)))

 

 

(command "accrobj" "per")

(setq p2 (getpoint p1 "\nCliquer le second point"))

 

(setvar "osmode" 0)

 

(setq dist (distance p1 p2))

(setq demidist (/ dist 2))

(setq ang (angle p1 p2))

(setq p3 (polar p1 ang demidist))

 

 

(command "arc" p1 "_e" p3 "_a" 90 "")

(command "chprop" "d" "" "CA" calq "")

(command "arc" p3 "_e" p2 "_a" 90 "")

(command "chprop" "d" "" "CA" calq "")

(command "arc" p2 "_e" p3 "_a" 90 "")

(command "chprop" "d" "" "CA" calq "")

 

)

CCAD la DAO au service de l'Energie - http://c.cad.free.fr

Lien vers le commentaire
Partager sur d’autres sites

essaie ceci:

 

(DEFUN c:rr (/ ent1 p1 p2 dist ang p3 demidist calq)

 

(SETVAR "cmdecho" 0)

 

;;;Sauve le layer actuel

;;;****************************

(SETQ anc_layer (GETVAR "clayer"))

;;;****************************

;;;Sauve l'accrochage actuel

;;;****************************

(SETQ anc_osmode (GETVAR "osmode"))

 

(SETQ ent1 (ENTSEL))

(SETQ p1 (CADR ent1))

(SETQ ent1 (ENTGET (CAR ent1))) ; <<- changement pout trouver l'entite du layer-----

(SETQ calq (CDR (ASSOC 8 ent1)))

 

 

;;;force le mode Perpendiculaire

(SETVAR "osmode" 128)

 

;;;; *******(command "accrobj" "per") ****

(SETQ p2 (GETPOINT p1 "\nCliquer le second point"))

 

(SETVAR "osmode" 0)

 

(SETQ dist (DISTANCE p1 p2))

(SETQ demidist (/ dist 2))

(SETQ ang (ANGLE p1 p2))

(SETQ p3 (POLAR p1 ang demidist))

 

;;; Rend actif le layer de reference

;;;***************************

(SETVAR "clayer" calq)

;;;***************************

;;;tes dessins se font dans le bon layer

 

(COMMAND "arc" p1 "_e" p3 "_a" 90)

(COMMAND "arc" p3 "_e" p2 "_a" 90)

(COMMAND "arc" p2 "_e" p3 "_a" 90)

 

;;;;Restore le layer de départ

(SETVAR "clayer" anc_layer)

 

;;;;Restore l'accrochage de départ

(SETVAR "osmode" anc_osmode)

 

(PRINC)

 

)

 

Lien vers le commentaire
Partager sur d’autres sites

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é