ASTERIXII Posté(e) le 23 novembre 2006 Posté(e) le 23 novembre 2006 Je recherche une routine pour modifier la couleur, le type de ligne d'un calque sans l'intermediaire du gestionnaire de calqueLe but est de cliquer sur un icon, choisir un objet ,et la une case de dialogue s'ouvre,me donne le nom du calque , type de ligne , couleur avec la possibilité de les modifierAttention je n'ai pas dit forcer la couleur ou le type de ligne de l'objet merci d'avance
BIM G CO Posté(e) le 23 novembre 2006 Posté(e) le 23 novembre 2006 Mes connaissances en DCL et ObjectDCL sont nul je vais bientôt m'y mettre mais voici un début : (setq ELEMENT (entsel "Sélectionner l'élément")) (if ELEMENT (setq ELEMENT (entget (car ELEMENT))) (exit)) ; si vide je sors (setq NOM (cdr (assoc 8 ELEMENT))) ; me donne le nom du calque (setq CALQUE (tblsearch "LAYER" NOM) ; me donne les données DXF du calque (setq NOM ((cdr (assoc 2 CALQUE))) ; NOM du calque (pour le fun) (setq COUL (cdr (assoc 62 CALQUE))) ; COULEUR (setq TPL (cdr (assoc 6 CALQUE))) ; Type de ligne exécution du DCL avec paramétrage qui me sont inconnu puis (setq CALQUE (subst (cons 2 NOUVEAU_NOM) (assoc 2 CALQUE) CALQUE)) (setq CALQUE (subst (cons 62 NOUVEAU_COUL) (assoc 62 CALQUE) CALQUE)) (setq CALQUE (subst (cons 6 NOUVEAU_TPL) (assoc 6 CALQUE) CALQUE)) (entmod CALQUE) devrait fonctionner sinon (command "_-LAYER" "_color" CALQUE NOUVEAU_COUL "") (command "_-RENAME" "_layer" NOM NOUVEAU_NOM) (command "_-LAYER" "_linetype" CALQUE NOUVEAU_TPL "") [Edité le 23/11/2006 par Maximilien] Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office PlaquetteDeplianteMars2024.pdf
Patrick_35 Posté(e) le 23 novembre 2006 Posté(e) le 23 novembre 2006 SalutEt avec un Ctrl+1 (propriété des objets) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
ASTERIXII Posté(e) le 23 novembre 2006 Auteur Posté(e) le 23 novembre 2006 Et avec un Ctrl+1 (propriété des objets) Je ne veux pas forcer les propriétés, mais acceder au calque, au couleur du calque...
(gile) Posté(e) le 23 novembre 2006 Posté(e) le 23 novembre 2006 Salut, Voilà un exemple, un peu fait de bric et de broc, je te laisse le soin de décortiquer et modifier à ta guise. Les fichier DCL à enregistrer sous getLineType.dcl et LayerProp.dcl dans un dossier du chemin de recherche des fichiers de support. // getLineType.dcl getLineType:dialog{ label="Choisir un type de ligne"; :popup_list{ key="lt"; edit_width=20; alignment=centered; } spacer; ok_cancel; } //LayerProp.dcl LayerProp:dialog{ label="Propriétés du calque"; :text{ key="name"; alignment=centered; } spacer; :row{ :text{ key="lt_n"; alignment=left; width=20; } :button{ key="lt"; label="Changer"; alignment=right; width=5; } } :row{ :text{ key="col_n"; alignment=left; width=20; } :button{ key="col"; label="Changer"; alignment=right; width=5; } } ok_cancel; } Les LISP : (defun getLineType (/ f l lst dcl_id nom) (setq f (open (if (= (getvar "MEASUREMENT") 1) (findfile "acadiso.lin") (findfile "acad.lin") ) "r" ) ) (while (setq l (read-line f)) (if (= (substr l 1 1) "*") (setq lst (cons (substr l 2 (1- (vl-string-position 44 l))) lst)) ) ) (setq lst (cons "Continuous" (acad_strlsort lst))) (setq dcl_id (load_dialog "getLineType.dcl")) (if (not (new_dialog "getLineType" dcl_id)) (exit) ) (start_list "lt") (mapcar 'add_list lst) (end_list) (action_tile "accept" (strcat "(progn" "(setq nom (nth (atoi (get_tile \"lt\")) lst)))" "(done_dialog))" ) ) (start_dialog) (unload_dialog dcl_id) nom ) (defun c:LayerProp (/ ent lay col lt dcl_id what_next ent) (while (not (setq ent (car (entsel "\nSélectionnez un objet sur le calque à modifier: ")) ) ) ) (setq lay (cdr (assoc 8 (entget ent))) lay_lst (tblsearch "LAYER" lay) col (cdr (assoc 62 lay_lst)) lt (cdr (assoc 6 lay_lst)) ) (setq dcl_id (load_dialog "LayerProp.dcl")) (setq what_next 2) (while (>= what_next 2) (if (not (new_dialog "LayerProp" dcl_id)) (exit) ) (set_tile "name" (cdr (assoc 2 lay_lst))) (set_tile "lt_n" lt) (set_tile "col_n" (itoa col)) (action_tile "lt" "(done_dialog 3)") (action_tile "col" "(done_dialog 4)") (setq what_next (start_dialog)) (cond ((= what_next 3) (if (setq temp (getLineType)) (setq lt temp) ) ) ((= what_next 4) (if (setq temp (acad_colordlg col)) (setq col temp) ) ) ) ) (unload_dialog dcl_id) (command "_layer" "_lt" lt "" "_c" col "" "") (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
ASTERIXII Posté(e) le 24 novembre 2006 Auteur Posté(e) le 24 novembre 2006 Merci a gile Mais juste une petite erreure (command "_layer" "_lt" lt "" "_c" col "" "")il faut activer le calque a modifier en courantremplacer par (command "_layer" [surligneur] "E" lay[/surligneur] "_lt" lt "" "_c" col "" "")
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