Aller au contenu

message à (gile)


richard-c

Messages recommandés

Bonjour,

 

j'utile ssf.lsp plutot de le filtre rapide,

 

question : si je choisi une entité ayant la couleur DuCalque, le programme

renvoie [surligneur] erreur: liste SSGET incorrecte[/surligneur], ce qui est normal car il n'a pas de code dxf 62, n'y a t'il pas un moyen d'y remédier, idem pour un bloc qui a la couleur DuBloc ?

 

Merci et A+

Lien vers le commentaire
Partager sur d’autres sites

Non, tu n'as pas fais une erreur, quand on fait un programme on peut faire des oublis, et je pense que les tests fait par d'autre permette à faire progresser les programmes.

 

un exemple : souvent, quant on fais un programme on le teste dans un dessin neuf, donc dans le SCG, et on oublie souvent que dans un dessin on est dans un SCU.

 

J'ai d'autres questions, mais c'est bientot le week end,

 

A+

Lien vers le commentaire
Partager sur d’autres sites

encore moi

 

j'ai essayé de rajouter dans le nouveau ssfilter (çà marchais dans l'autre version) :

 

  spacer;
 :toggle{
   label="Style du texte";
   key="sty";
   value="0";
   fixed_width=true;
   allow_accept=true;
 }
 spacer;
 :toggle{
   label="Valeur du texte";
   key="val";
   value="0";
   fixed_width=true;
   allow_accept=true;
 }
 spacer;
 :toggle{
   label="Hauteur du texte";
   key="ht";
   value="0";
   fixed_width=true;
   allow_accept=true;
 }

 

dans le dcl

 

et

 

     (and (= \"1\" (get_tile \"sty\"))
     (setq lst (cons 7 lst))
   )
   (and (= \"1\" (get_tile \"val\"))
     (setq lst (cons 1 lst))
   )
   (and (= \"1\" (get_tile \"ht\"))
     (setq lst (cons 40 lst))
   )

 

dans le lsp

 

ces 3 commandes ne fonctionnent pas . . .

 

je ne sai pas pourquoi.

 

Bon WE et à +

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

tu n'as pa du les placer où il faut

 

le DCL

 

ssfilter_box:dialog{
 label="Propriétés";
 :toggle{
   label="Type d'entité";
   key="ent";
   value="0";
   fixed_width=true;
   allow_accept=true;
 }
 spacer;
 :toggle{
   label="Calque";
   key="lay";
   value="0";
   fixed_width=true;
   allow_accept=true;
 }
 spacer;
 :toggle{
   label="Couleur";
   key="col";
   value="0";
   fixed_width=true;
   allow_accept=true;
 }
 spacer;
 :toggle{
   label="Type de ligne";
   key="typ";
   value="0";
   fixed_width=true;
   allow_accept=true;
 }
 spacer;
 :toggle{
   label="Epaisseur de ligne";
   key="wid";
   value="0";
   fixed_width=true;
   allow_accept=true;
 }
spacer;
:toggle{
label="Style du texte";
key="sty";
value="0";
fixed_width=true;
allow_accept=true;
}
spacer;
:toggle{
label="Valeur du texte";
key="val";
value="0";
fixed_width=true;
allow_accept=true;
}
spacer;
:toggle{
label="Hauteur du texte";
key="ht";
value="0";
fixed_width=true;
allow_accept=true;
}
 spacer;
 ok_cancel;
} 

 

le LISP (corrigé)

 

(defun ssfilter_box (/ dcl_id lst)
 (setq dcl_id (load_dialog "ssfilter.dcl"))
 (if (not (new_dialog "ssfilter_box" dcl_id))
   (exit)
 )
 (action_tile
   "accept"
   "(and (= \"1\" (get_tile \"wid\"))
     (setq lst (cons 370 lst))
   )
   (and	(= \"1\" (get_tile \"typ\"))
(setq lst (cons 6 lst))
   )
   (and (= \"1\" (get_tile \"col\"))
     (setq lst (cons 62 lst))
   )
   (and	(= \"1\" (get_tile \"lay\"))
     (setq lst (cons 8 lst))
   )
   (and (= \"1\" (get_tile \"ent\"))
     (setq lst (cons 0 lst))
   )
   (and (= \"1\" (get_tile \"sty\"))
     (setq lst (cons 7 lst))
   )
   (and (= \"1\" (get_tile \"val\"))
     (setq lst (cons 1 lst))
   )
   (and (= \"1\" (get_tile \"ht\"))
     (setq lst (cons 40 lst))
   )
   (done_dialog)"
 )
 (action_tile "cancel" "(setq lst nil)")
 (start_dialog)
 (unload_dialog dcl_id)
 lst
)


(defun c:ssf (/ ss ent lst flst n elst)
 (and
   (or
     (setq ss (cadr (ssgetfirst)))
     (setq ss (ssget))
   )
   (setq lst (ssfilter_box))
   (repeat (setq n (sslength ss))
     (setq elst (cons (entget (ssname ss (setq n (1- n)))) elst))
     )
   (setq flst
   (append
     (cons '(-4 . "[b]		   (apply 'append
		  (mapcar '(lambda (x)
			     (append (cons '(-4 . "[b]						   (mapcar '(lambda (y)
						      (assoc x y)
						    )
						   elst
					   )
				     )
				     (list '(-4 . "OR>"))
			     )
			   )
			  lst
		  )
	   )
     )
     (list '(-4 . "AND>"))
   )
   )
   (sssetfirst nil (ssget "_X" flst))
 )
 (princ)
) 

 

[Edité le 22/10/2007 par (gile)]

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

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

C'est CADxp qui interprète les

 

Attention, si tu utilises un filtre sur les propriétés spécifiques aux textes (style de texte, valeur ou hauteur) la sélection de base ne doit contenir que des textes, sinon tu auras un message d'erreur : liste SSGET incorrecte.

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

Lien vers le commentaire
Partager sur d’autres sites

Pour éviter l'erreur citée ci dessus, on peut évaluer le contenu de la sélection de base et "griser" les cases "texte" si la sélection ne contient pas que des textes (ou mtextes). Le DCL est inchangé.

 

(defun ssfilter_box (text / dcl_id lst)
 (setq dcl_id (load_dialog "ssfilter.dcl"))
 (if (not (new_dialog "ssfilter_box" dcl_id))
   (exit)
 )
 (if (not text)
   (foreach tile '("sty" "val" "ht")
     (mode_tile tile 1)
     )
   )
 (action_tile
   "accept"
   "(and (= \"1\" (get_tile \"wid\"))
(setq lst (cons 370 lst))
)
(and (= \"1\" (get_tile \"typ\"))
(setq lst (cons 6 lst))
)
(and (= \"1\" (get_tile \"col\"))
(setq lst (cons 62 lst))
)
(and (= \"1\" (get_tile \"lay\"))
(setq lst (cons 8 lst))
)
(and (= \"1\" (get_tile \"ent\"))
(setq lst (cons 0 lst))
)
(and (= \"1\" (get_tile \"sty\"))
(setq lst (cons 7 lst))
)
(and (= \"1\" (get_tile \"val\"))
(setq lst (cons 1 lst))
)
(and (= \"1\" (get_tile \"ht\"))
(setq lst (cons 40 lst))
)
(done_dialog)"
 )
 (action_tile "cancel" "(setq lst nil)")
 (start_dialog)
 (unload_dialog dcl_id)
 lst
)


(defun c:ssf (/ ss ent lst flst n elst)
 (and
   (or
     (setq ss (cadr (ssgetfirst)))
     (setq ss (ssget))
   )
   (repeat (setq n (sslength ss))
     (setq elst (cons (entget (ssname ss (setq n (1- n)))) elst))
   )
   (if	(vl-every '(lambda (x)
	     (wcmatch (cdr (assoc 0 x)) "*TEXT")
	   )
	  elst
)
     (setq lst (ssfilter_box T))
     (setq lst (ssfilter_box nil))
   )
   (setq flst
   (append
     (cons '(-4 . "[b]		   (apply 'append
		  (mapcar '(lambda (x)
			     (append (cons '(-4 . "[b]						   (mapcar '(lambda (y)
						      (assoc x y)
						    )
						   elst
					   )
				     )
				     (list '(-4 . "OR>"))
			     )
			   )
			  lst
		  )
	   )
     )
     (list '(-4 . "AND>"))
   )
   )
   (sssetfirst nil (ssget "_X" flst))
 )
 (princ)
) 

 

[Edité le 22/10/2007 par (gile)]

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

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é