Aller au contenu

Messages recommandés

Posté(e)

Je recherche une routine pour modifier la couleur, le type de ligne d'un calque sans l'intermediaire du gestionnaire de calque

Le 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 modifier

Attention je n'ai pas dit forcer la couleur ou le type de ligne de l'objet

 

merci d'avance

Posté(e)

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

Posté(e)

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

Posté(e)

Merci a gile

Mais juste une petite erreure

(command "_layer" "_lt" lt "" "_c" col "" "")

il faut activer le calque a modifier en courant

remplacer par (command "_layer" [surligneur] "E" lay[/surligneur] "_lt" lt "" "_c" col "" "")

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é