chrchat Posté(e) le 28 mai 2004 Posté(e) le 28 mai 2004 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
CoolM@n Posté(e) le 28 mai 2004 Posté(e) le 28 mai 2004 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)
Patrick_35 Posté(e) le 28 mai 2004 Posté(e) le 28 mai 2004 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
chrchat Posté(e) le 28 mai 2004 Auteur Posté(e) le 28 mai 2004 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
CoolM@n Posté(e) le 28 mai 2004 Posté(e) le 28 mai 2004 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) )
didier Posté(e) le 28 mai 2004 Posté(e) le 28 mai 2004 bonsoirdans ton premier message, tu demandescomment rendre un calque courant ?la réponse :(setvar "clayer" "calquechoisi")bien sûr, il faut que le calque existe ;) çà évite de faire appel à "chprop"amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
chrchat Posté(e) le 1 juin 2004 Auteur Posté(e) le 1 juin 2004 :D C'est super ca marche Merci CoolMan CCAD la DAO au service de l'Energie - http://c.cad.free.fr
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