Aller au contenu

2 outils que j\'ai dans la tête...


Pieroka

Messages recommandés

Je ne peux utiliser que cette rubrique de suggestion de développement, car j'y connais rien en lisp. donc je suggère : :P (peut être que quelqu'un les a déjà programmés...?)

 

1er outil :

"Utiliser les param. d'une entité comme param. courants".

Ca peut s'apparenter à "RENDCALQUECOUR" (_Laymcur) mais il n'y a pas que le calque qui devient courant. (mais aussi type de ligne - couleur - epr.... de l'entité sélectionnée ).

Il y aurait un dialogue de paramétrage genre celle de "CORRESPROP" ci dessous, qui permet de choisir les paramètres à prendre en compte.

 

http://xs114.xs.to/xs114/07161/param.jpg

 

Cette commande serait dispo dans le menu contextuel d'une entité selectionnée.

 

 

 

 

 

____________________________________________

 

 

2eme Outil :

Ca se rapproche du LISP de Gile "special_Selections" que je viens de tester. (Merci encore à Gile !! )

 

"Sélectionner les entités identiques"

 

Il permet de sélectionner toutes les entités identiques du dessin. Par exemple toutes les lignes, calque zéro, couleur ducalque, epr 0.3mm...

On pourra choisir les param. à prendre en compte dans le même type de dialogue que ci dessus ("CORRESPROP") .

 

Le plus souvent, par défaut, on pourra choisir moins de param. pour sélectionner simplement toutes les entités d'un même calque.

 

Cette commande serait dispo dans le menu contextuel d'une entité selectionnée.

 

Bref Bref voilà...

Formateur Autocad - Revit - Sketchup - Photoshop

Lien vers le commentaire
Partager sur d’autres sites

pour sélectionner simplement toutes les entités d'un même calque.

 

là, j'ai fait quelque chose comme ça

 

(defun c:laysel (/ SS FILTRE I E LAY)
 (setq SS (ssget))
 (if SS
   (progn
     (setq FILTRE '((-4 . "OR>")) )
     (setq I 0)
     (while (< I (sslength SS))
       (setq E (entget (ssname SS  I)))
       (setq LAY (assoc 8 E))
       (setq FILTRE (cons LAY FILTRE))
       (setq I (+ I 1))
     )
[surligneur]      (setq FILTRE (cons '(-4 . "< OR") FILTRE))[/surligneur] 
     (setq SS (ssget "_X" FILTRE))
     (sssetfirst SS SS)
   )
 )
 (princ)
) 

 

Attention, il y a un espace en trop après le < de la ligne surlignée. A supprimer, sinon ça marche pas. Si j'enlève l'espace, l'éditeur de CadXP supprime automatiquement le reste de la ligne.

 

L'outil te permet de cliquer sur plusieurs objets (donc un seul aussi : qui peut le plus peut le moins) et ça te filtre tous les objets qui sont sur les calques des objets sélectionnés.

 

c'est déjà un début.

 

Amicalement

Zebulon_

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Voilà un premier jet. Pour les commandes ssmatch et matchset l'entité peut être sélectionnée avant ou après le lancement de la commande (eel peuvent donc être placées dans un menu contextuel).

 

Le DCL à enregistrer sous Props.dcl dans un répertoire de chemin de recherche des fichiers de support.

 

props:dialog{
 label="Propriétés";
 :toggle{
   label="Couleur";
   key="col";
   value="1";
   fixed_width=true;
   allow_accept=true;
 }
 :toggle{
   label="Calque";
   key="lay";
   value="1";
   fixed_width=true;
   allow_accept=true;
 }
 :toggle{
   label="Type de ligne";
   key="typ";
   value="1";
   fixed_width=true;
   allow_accept=true;
 }
 :toggle{
   label="Epaisseur de ligne";
   key="wid";
   value="1";
   fixed_width=true;
   allow_accept=true;
 }
 spacer;
 ok_cancel;
} 

 

La routine getprops qui doit être chargée pour ouvrir la boite de dialogue.

 

(defun getprops	(ent / lst)
 (setq	elst   (entget ent)
dcl_id (load_dialog "Props.dcl")
 )
 (if (not (new_dialog "props" dcl_id))
   (exit)
 )
 (action_tile
   "accept"
   "(if	(= \"1\" (get_tile \"wid\"))
     (if (assoc 370 elst)
(setq lst (cons (assoc 370 elst) lst))
(setq lst (cons '(370 . -1) lst))
     )
   )
   (if	(= \"1\" (get_tile \"typ\"))
     (if (assoc 6 elst)
(setq lst (cons (assoc 6 elst) lst))
(setq lst (cons '(6 . \"BYLAYER\") lst))
     )
   )
   (if	(= \"1\" (get_tile \"lay\"))
     (if (assoc 8 elst)
(setq lst (cons (assoc 8 elst) lst))
(setq lst (cons '(8 . \"BYLAYER\") lst))
     )
   )
   (if	(= \"1\" (get_tile \"col\"))
     (if (assoc 62 elst)
(setq lst (cons (assoc 62 elst) lst))
(setq lst (cons '(62 . 256) lst))
     )
   )
   (done_dialog)"
 )
 (start_dialog)
 (unload_dialog dcl_id)
 lst
) 

 

ssmatch : pour sélectionner toutes les entités qui ont les mêmes propriétés (celles qui sont cochées dans la boite dialogue) que l'entité sélectionnée.

Si la commande est lancée plusieurs fois à la suite, les nouveaux objets s'ajoutent au jeu de sélection.

 

(defun c:ssmatch (/ ss ent lst)
 (and
   (or
     (and
(setq ss (cadr (ssgetfirst)))
(= 1 (sslength ss))
(setq ent (ssname ss 0))
     )
     (setq ent (car (entsel)))
   )
   (setq lst (getprops ent))
   (sssetfirst nil (ssget "_X" lst))
 )
 (princ)
) 

 

matchset : pour rendre courantes les propriétés (cochées) de l'entité sélectionnée.

 

(defun c:matchset (/ ss ent lst)
 (if
   (or
     (and
(setq ss (cadr (ssgetfirst)))
(= 1 (sslength ss))
(setq ent (ssname ss 0))
     )
     (setq ent (car (entsel)))
   )
    (progn
      (setq lst (getprops ent))
      (cond
 ((= 256 (cdr (assoc 62 lst)))
  (setq lst (subst '(62 . "BYLAYER") '(62 . 256) lst))
 )
 ((= 0 (cdr (assoc 62 lst)))
  (setq lst (subst '(62 . "BYBLOCK") '(62 . 0) lst))
 )
 ((numberp (cdr (assoc 62 lst)))
  (setq	lst (subst (cons 62 (itoa (cdr (assoc 62 lst))))
		   (assoc 62 lst)
		   lst
	    )
  )
 )
      )
      (mapcar '(lambda	(code var)
	  (if (assoc code lst)
	    (setvar var (cdr (assoc code lst)))
	  )
	)
       '(62 8 6 370)
       '("CECOLOR" "CLAYER" "CELTYPE" "CELWEIGHT")
      )
    )
 )
 (princ)
) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Merci les amis, chouette premier jet Gile.

Le fonctionnement avec des pré-réglages par défaut comme dans "CORRESPROP" me semble plus pratique, avec l'accès au dialogue des paramètres, en option, seulement si on souhaite les modifier. Mais l'esprit du truc est là ! :D

 

merci et bonne nuit, faut aller se coucher maintenant.

Formateur Autocad - Revit - Sketchup - Photoshop

Lien vers le commentaire
Partager sur d’autres sites

J'avais tenté une approche de ton souhait dans ce sujet

C'était un compromis entre la commande lisp SSX et ton souhait en boite de dialogue. J'utilise en fait les options dans le menu contextuel du click-droit.

L'inconvénient: il faut être un familier de la valeur des code DXF.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Nouvelle mouture.

 

Utiliser la même boite de dialogue pour les deux fonctions ne s'avère pas si pratique, donc j'ai fait deux boites différentes et j'ai ajouté le type d'entité dans celle de SSMATCH.

 

Le fonctionnement avec des pré-réglages par défaut comme dans "CORRESPROP" me semble plus pratique, avec l'accès au dialogue des paramètres, en option

CORRESPROP invite à choisir des objets ou [PAramètres]. L'équivalent supposerait une invite suppléméntaire dans SSMATCH et MATCHSET du style :

"Valider ou [Paramètres] : "

et valider en réponse à l'invite reviendrait au même que de faire entée quand la boite appaarît avec toutes les cases cochées.

Si tu y tiens vraiment, je peux le faire, mais je n'en vois pas trop l'intérêt.

 

SSMATCH version1.1

 

Le DCL

 

ssmatch_box:dialog{
 label="Propriétés";
 :toggle{
   label="Type d'entité";
   key="ent";
   value="1";
   fixed_width=true;
   allow_accept=true;
 }
 :toggle{
   label="Couleur";
   key="col";
   value="1";
   fixed_width=true;
   allow_accept=true;
 }
 :toggle{
   label="Calque";
   key="lay";
   value="1";
   fixed_width=true;
   allow_accept=true;
 }
 :toggle{
   label="Type de ligne";
   key="typ";
   value="1";
   fixed_width=true;
   allow_accept=true;
 }
 :toggle{
   label="Epaisseur de ligne";
   key="wid";
   value="1";
   fixed_width=true;
   allow_accept=true;
 }
 spacer;
 ok_cancel;
} 

 

Les LISP

 

(defun ssmatch_box (ent / elst lst dcl_id)
 (setq	elst   (entget ent)
lst    (list (assoc 0 elst)
	     (cond
	       ((assoc 62 elst))
	       ('(62 . 256))
	     )
	     (assoc 8 elst)
	     (cond
	       ((assoc 6 elst))
	       ('(6 . "BYLAYER"))
	     )
	     (cond
	       ((assoc 370 elst))
	       ('(370 . -1))
	     )
       )
dcl_id (load_dialog "ssmatch_box.dcl")
 )
 (if (not (new_dialog "ssmatch_box" dcl_id))
   (exit)
 )
 (action_tile
   "accept"
   "(or (= \"1\" (get_tile \"ent\"))
     (setq lst (vl-remove (assoc 0 lst) lst))
   )
   (or (= \"1\" (get_tile \"col\"))
     (setq lst (vl-remove (assoc 62 lst) lst))
   )
   (or	(= \"1\" (get_tile \"lay\"))
     (setq lst (vl-remove (assoc 8 lst) lst))
   )
   (or	(= \"1\" (get_tile \"typ\"))
(setq lst (vl-remove (assoc 6 lst) lst))
   )
   (or	(= \"1\" (get_tile \"wid\"))
     (setq lst (vl-remove (assoc 370 lst) lst))
   )
   (done_dialog)"
 )
 (start_dialog)
 (unload_dialog dcl_id)
 lst
)

(defun c:ssmatch (/ ss ent lst)
 (and
   (or
     (and
(setq ss (cadr (ssgetfirst)))
(= 1 (sslength ss))
(setq ent (ssname ss 0))
     )
     (setq ent (car (entsel)))
   )
   (setq lst (ssmatch_box ent))
   (sssetfirst nil (ssget "_X" lst))
 )
 (princ)
) 

 

 

MATCHSET version1.1

 

Le DCL

 

matchset_box:dialog{
 label="Propriétés";
 :toggle{
   label="Couleur";
   key="col";
   value="1";
   fixed_width=true;
   allow_accept=true;
 }
 :toggle{
   label="Calque";
   key="lay";
   value="1";
   fixed_width=true;
   allow_accept=true;
 }
 :toggle{
   label="Type de ligne";
   key="typ";
   value="1";
   fixed_width=true;
   allow_accept=true;
 }
 :toggle{
   label="Epaisseur de ligne";
   key="wid";
   value="1";
   fixed_width=true;
   allow_accept=true;
 }
 spacer;
 ok_cancel;
} 

 

Les LISP

 

(defun matchset_box (ent / elst lst dcl_id)
 (setq	elst   (entget ent)
lst    (list (cond
	       ((or (null (assoc 62 elst))
		    (= 256 (cdr (assoc 62 elst)))
		    )
	       '(62 . "BYLAYER"))
	       ((= 0 (cdr (assoc 62 elst)))
		'(62 . "BYBLOCK")
		)
	       ((cons 62 (itoa (cdr (assoc 62 elst)))))
	     )
	     (assoc 8 elst)
	     (cond
	       ((assoc 6 elst))
	       ('(6 . "BYLAYER"))
	     )
	     (cond
	       ((assoc 370 elst))
	       ('(370 . -1))
	     )
       )
dcl_id (load_dialog "matchset_box.dcl")
 )
 (if (not (new_dialog "matchset_box" dcl_id))
   (exit)
 )
 (action_tile
   "accept"
   "(or (= \"1\" (get_tile \"col\"))
     (setq lst (vl-remove (assoc 62 lst) lst))
   )
   (or	(= \"1\" (get_tile \"lay\"))
     (setq lst (vl-remove (assoc 8 lst) lst))
   )
   (or	(= \"1\" (get_tile \"typ\"))
(setq lst (vl-remove (assoc 6 lst) lst))
   )
   (or	(= \"1\" (get_tile \"wid\"))
     (setq lst (vl-remove (assoc 370 lst) lst))
   )
   (done_dialog)"
 )
 (start_dialog)
 (unload_dialog dcl_id)
 lst
)

(defun c:matchset (/ ss ent lst)
 (and
   (or
     (and
(setq ss (cadr (ssgetfirst)))
(= 1 (sslength ss))
(setq ent (ssname ss 0))
     )
     (setq ent (car (entsel)))
   )
   (setq lst (matchset_box ent))
   (mapcar '(lambda (code var)
       (if (assoc code lst)
	 (setvar var (cdr (assoc code lst)))
       )
     )
    '(62 8 6 370)
    '("CECOLOR" "CLAYER" "CELTYPE" "CELWEIGHT")
   )
   (sssetfirst)
 )
 (princ)
) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

  • 3 ans après...

Bonjour,

 

J'utilise depuis peu le superbe lisp de Gilles : matchset

 

le truc c'est qu'il y a qqs trucs qui me genet sur ce lisp :

-la longueur de la commande (c'est une commande que j'emploie pls fois par heures aussi un raccourci genre MS serait bienvenue, en je suis le rois des fautes de frappes!!)

-la boite de dialogue pour confirmer les calques, couleurs style de trait épaisseur me gène...

je préfère ne pas avoir de boite de dialogue et modifier ces paramètres au cas par cas (ce qui est pas fréquent)

je ne peux pas modifier ce lisp (peut être que je sais pas m'y prendre!) aussi si vous pouviez m'aider.

 

D'avance merci.

 

Phil

Projeteur Revit Indépendant - traitement des eaux/CVC

Lien vers le commentaire
Partager sur d’autres sites

hello gile

 

haaa grrr les fameux *.zip de gile

 

je suis désolé ca ne marche tjrs pas chez moi

impossible de récuperer un *.zip qui ne soit pas corrompu

 

ton deuxieme : ssmatch renvoie vers une page inconnue de "orange"

 

tjrs bizarre

 

a+

 

phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Bonjour,

 

J'utilise depuis peu le superbe lisp de Gilles : matchset

 

le truc c'est qu'il y a qqs trucs qui me genet sur ce lisp :

-la longueur de la commande (c'est une commande que j'emploie pls fois par heures aussi un raccourci genre MS serait bienvenue, en je suis le rois des fautes de frappes!!)

-la boite de dialogue pour confirmer les calques, couleurs style de trait épaisseur me gène...

je préfère ne pas avoir de boite de dialogue et modifier ces paramètres au cas par cas (ce qui est pas fréquent)

je ne peux pas modifier ce lisp (peut être que je sais pas m'y prendre!) aussi si vous pouviez m'aider.

 

D'avance merci.

 

Phil

Tu as aussi celui-ci (message 5)

 

@+

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

hello lilian .gile. patrick ....

 

 

avec toi lilian ca marche *.zip nickel

 

heu tu peux donner un petit cours a gile pour les *.zip ???

je plaisante bien sur

 

merci tous

 

bon soleillll

 

phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois aprè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 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é