Aller au contenu

Messages recommandés

  • Réponses 70
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Posté(e)

Salut Speedy !!

 

C'est le bon début !

 

Pour t'aider, regarde du coté des codes dxf liés à un bloc...

"Chacun compte pour un, et nul ne compte pour plus d'un."

  • 2 semaines après...
Posté(e)

retour de vacances ... j'ai tout oublié!!

 

Bonne année à tous

 

en ce qui concerne notre probème, en affichant les codes dxf d'un bloc normal et

d'un bloc à attribut, la seule différence concerne le code 66 qui apparait sur le

bloc à attribut,dois je utiliser ce code?

Posté(e)

Salut Pascal !

 

Bonne année à toi aussi, merci...

la seule différence concerne le code 66 qui apparait sur le

bloc à attribut,dois je utiliser ce code?

C'est exactement ça !

"Chacun compte pour un, et nul ne compte pour plus d'un."

Posté(e)

allez je me lance:

 

(defun c:bl_att(/ blatt)

(while (not blatt)

(setq blatt (cdr (assoc 66 (entget (car (entsel "\nSélectionnez le bloc: ?")))))))

(prin1 "\nceci est un bloc à attribut")

 

)

 

J'ai un peu de mal pour afficher un résultat entre prin1 princ prompt read...

 

Posté(e)

Ah oui, ok... C'est pas mal ! par contre si ton bloc est sans attribut, tu ne peux pas le sélectionner... bof !

 

C'est presque ça !

 

J'ai un peu de mal pour afficher un résultat entre prin1 princ prompt read...

Le plus utilisé est sans nul doute le princ.

Il faut en mettre un tout seul à la toute fin de ton code, pour éviter la répétition...

(defun c:bl_att(/ blatt)
(while (not blatt)
(setq blatt (cdr (assoc 66 (entget (car (entsel "\nSélectionnez le bloc: ?")))))))
(princ "\nceci est un bloc à attribut.")
[b](princ)[/b]
)

 

essaie d'utiliser une condition à ton résultat de code dxf 66...

 

[Edité le 3/1/2008 par Matt666]

"Chacun compte pour un, et nul ne compte pour plus d'un."

Posté(e)

Bonjour et bonne année,

 

Bravo pour cette initiative"El Diablo", je pense que nous sommes très nombreux à avoir besoin de recommencer sur de bonnes bases pour cette nouvelle année.

Pour ma part, j'aurais suggéré un test de plus avec le entsel, à savoir s'il s'agit bien d'un bloc :

 

((defun c:bl_att(/ blatt)
(while (not blatt)
(setq blatt (entget (car (entsel "\nSélectionnez le bloc: ?"))))
(if (/= (cdr(assoc 0 blatt)) "INSERT") (setq blatt nil)))
;;; la suite
(princ)
) 

 

Je laisse la suite à Pascal.

Posté(e)

:cool: El diablo....

j'aurais suggéré un test de plus avec le entsel, à savoir s'il s'agit bien d'un bloc

Exactement ! Une condition qui dit d'abord si l'entité sélectionnée est de type BLOC.

 

Ensuite, si oui, trouver le code 66.

 

Voilà !A toi de jouer Pascal !

Merci Vinz34.

"Chacun compte pour un, et nul ne compte pour plus d'un."

Posté(e)

Salut Matt,

 

J'espère que je ne t'ai pas blessé, c'est le triple 6 qui m'a inspiré.

 

Pour Pascal,

 

La solution est toute trouvée, tu l'as toi même donnée, elle est juste à réorganiser comme te l'a suggéré l'initiateur de ce sujet.

Posté(e)

Bonjour à tous,

 

Voici une petite idée...

 

 (defun c:vfblatt (/ ent)
(while
(not ent)
(setq ent (entget(car(entsel "\nCliquez un bloc : "))))

(if (/= (cdr (assoc 0 ent)) "INSERT") (alert "ceci n'est pas un bloc") 
(if (= (cdr (assoc 66 ent)) nil) (Alert "Ce bloc ne contient pas d'attribut") (Alert "ceci est bloc bloc contenant des attribut")))
)
)

 

Ce n'est pas parfait mais il me semble que c'est sur la bonne voie.

@plus

Posté(e)

Bravo Lovecraft :D

 

Juste un soucis de parenthèse...

La fonction 'while' avec 'not' sert à répéter le entsel jusqu'à ce que celui ci soit rempli.

 

Ta fonction while ne fonctionne pas comme cela...

Si tu fais simplement ceci (bouger une parenthèse+entget mal placé) :

(defun c:vfblatt (/ ent)
(while
(not ent)
(setq ent (car(entsel "\nCliquez un bloc : ")))
)
(setq ent (entget ent))
(if (/= (cdr (assoc 0 ent)) "INSERT") (alert "ceci n'est pas un bloc")
(if (= (cdr (assoc 66 ent)) nil) (Alert "Ce bloc ne contient pas d'attribut") (Alert "ceci est bloc bloc contenant des attribut")))
)

Là le 'while' et 'not' fera son travail !

 

sinon ta condition (if (= (cdr (assoc 66 ent)) nil) ...) peut s'écrire avec 'not'...

(if (not (cdr (assoc 66 ent))) ...)

 

Voilà...

je montre la mienne..

(defun c:vblat (/ ent)
   (while (or  
           (not (setq ent (car (entsel "\nSélectionner un bloc :"))))
           (/= (cdr (assoc 0 (entget ent))) "INSERT")
       )
   )
   (if (cdr (assoc 66 (entget ent)))
       (princ "\nCe bloc contient un ou des attributs.")
       (princ "\nCe bloc ne contient pas d'attribut.")
   )
   (princ)
)

 

Maintenant, on sait comment voir si un bloc contient des attributs. Mais on ne sait toujours pas les voir !!!

 

La seule façon de voir un attribut, c'est de faire un entnext sur l'entité bloc-attribut.

 

Voilà.

 

Prochain exercice : Afficher la valeur du premier attribut trouvé dans un bloc attribut !

C'est pas évident, mais on va y arriver !

 

par exemple j'ai un attribut date, je veux afficher la valeur de la date...

 

Bon courage.

A bientot !

Matt.

 

"Chacun compte pour un, et nul ne compte pour plus d'un."

Posté(e)

Je vais juste donner le code permettant de recupérer la date ;) , à nos nouveaux de l'intégrer dans le lisp ci dessous cf: Matt666

 

 (defun c:vblat (/ ent)
(while (or 
(not (setq ent (car (entsel "\nSélectionner un bloc :"))))
(/= (cdr (assoc 0 (entget ent))) "INSERT")
)
)
(if (cdr (assoc 66 (entget ent)))
(princ "\nCe bloc contient un ou des attributs.")
(princ "\nCe bloc ne contient pas d'attribut.")
)
(princ)
)

 

 

 ;code permettant de récupérer le premier attribut.
(setq att1 (entnext ent))
(setq valdate (cdr (assoc 1 (entget att1))))

 

 

Une fois cette étape réalisée, il faudrait connaitre le nombres d'attribut que le bloc contient à vous de jouer....

 

@plus

 

Posté(e)

Attention, ton code ne fonctionne tout le temps...

Qui te dit que l'entité qui suit le bloc est un attribut ???

L'entité qui suit le nom du bloc est peut être une des lignes qui composent le bloc, par exemple ! ;)

 

EDIT : C'est quoi 888 ? Excuse le manque de savoir....

 

[Edité le 4/1/2008 par Matt666]

"Chacun compte pour un, et nul ne compte pour plus d'un."

Posté(e)

re matt666

 

Attention, ton code ne fonctionne tout le temps...

Qui te dit que l'entité qui suit le bloc est un attribut ???

L'entité qui suit le nom du bloc est peut être une des lignes qui composent le bloc, par exemple !

 

Là je ne vois pas car je viens de faire un teste sur un bloc comprennant un cercle+une polyligne+une ligne+1 attribut et je ne vois jamais apparaitre la polyligne et la ligne et ni le cercle.

 

ent 1 = assoc 0 ==>"insert"

 

ent 2 = assoc 0 ==>"attrib"

 

ent 3 = assoc 0 ==>"seqend"

 

??????

 

@plus

Posté(e)

Oups :mad2:

 

Oui, c'est vrai... J'ai confondu entre entité et table...

 

Mais cela revient au même ! Tu as des attrib et des seqend... Il ne faut prendre que des attribs !

"Chacun compte pour un, et nul ne compte pour plus d'un."

Posté(e)

Bonjour,

 

Je ne vais pas trop m'aventurer ce sur terrain glissant alors, merci pour cette info culture "G".

 

Pour en revenir au sujet, j'ai une proposition :

 

(defun c:vblat (/ e elist lst)
 (while (or
   (not (setq e (car (entsel "\nSélectionner un bloc :"))))
   (/= (cdr (assoc 0 (setq elist (entget e)))) "INSERT") )
 )
 (if (assoc 66 elist)
   (progn
     (setq e (entnext e)
    lst "")
     (while e
(cond ((= (cdr (assoc 0 (setq elist (entget e)))) "ATTRIB")
  (setq	lst (strcat (cdr (assoc 2 elist))  " : " (cdr (assoc 1 elist)) "\n" lst)
	e (entnext e)))
      ((= (cdr (assoc 0 (setq elist (entget e)))) "SEQEND")
       (setq e nil))	       
)	
     )
     (alert lst)
   )
   (princ "\nCe bloc ne contient pas d'attribut.")
 )
 (princ)
) 

Posté(e)

Salut !

Vinz, J'ai l'impression que tu n'es pas vraiment un débutant ;)

je n'ai pas essayé ton lisp, mais à l'avoir regardé, ça m'a l'air pas mal du tout !

 

J'espère que cela ne décourage pas les autres, si vous pensez que l'on va trop vite, dites le nous !! on ralentira un peu.

 

Patrick_35,

terrain glissant sur ce site avec la religion.

Ah bon, ça a déjà été abordé ici ???

 

Cela dit, je m'en fous... :cool:

personnellement c'est sur un terrain bien dur et bien sec que j'avance dans ce thème là... Je n'ai aucun problème avec ça, si des témoins de Jéhovah (par exemple) veulent retrer chez moi et discuter, eh bien qu'ils viennent !! Bien que j'en fasse partie, l'athéisme rime trop souvent avec intransigence...

Maintenant si certains ne sont pas contents de ce que je viens de dire, et bien qu'ils aillent au diable (faites gaffe j'ai un 666 après mon nom :P ) !!!

 

Donc merci Patrick_35 d'éclairer un peu ma lanterne, je ne serais sans doute pas le seul à me coucher moins bête (ah aha ah) ce soir...

 

Tu n'as jamais cherché la signification de ces chiffres ?

nan. J'écoute du métal, c'est tout :thumbup:

le chiffre 666 fait légion dans ce style. Et puisque "Matt" est toujours pris, "Matt666" l'est un peu moins...

 

Après c'est vrai que cela peut être intéressant... J'ai recherché un peu le 888, avant de poster ma question, pour voir sa signification. mais je ne suis pas tombé sur grand-chose...

 

Voilà voilà !!

 

A bientot.

Matt.

 

PS : J'attends vos réponses pour la question sur la vitesse, et je poste une suite...

"Chacun compte pour un, et nul ne compte pour plus d'un."

Posté(e)

Salut Matt,

 

J'avoue ne pas en être à mes tous débuts, mais je ne connaissais pas la solution à ce que tu demandais.

Alors j'ai testé, testé... C'était plus compliqué que ce que je pensais alors j'ai posté pour faire approuver.

Pour moi ça fonctionne, donc à voir...

Posté(e)

Salut !!

 

Vinz,

Et bien dans ce cas, j'approuve !!

Voici ma solution, pour le fun :

(defun c:vblat_matt (/ ent str)
   (while (or  
           (not (setq ent (car (entsel "\nSélectionner un bloc :"))))
           (/= (cdr (assoc 0 (entget ent))) "INSERT")
       )
   )
   (if (cdr (assoc 66 (entget ent)))
       (progn
           (setq str "\nCe bloc contient un ou des attributs : ")
           (while (setq ent (entnext ent))
               (if (eq (cdr (assoc 0 (entget ent))) "ATTRIB")
                   (setq str (strcat 
                           str 
                           "\n" 
                           (cdr (assoc 2 (entget ent))) 
                           "  ->\t" 
                           (cdr (assoc 1 (entget ent)))
                   ))
               )
           )
           (alert str)
       )
       (princ "\nCe bloc ne contient pas d'attribut.")
   )
   (princ)
)

 

Patrick_35,

Merci pour le lien, bien intéressant !

PS : Bien sur que ça intéresse !

 

Nouvel exercice : Changer l'attribut "DATE" par la date du jour !

 

A bientot.

Matt.

"Chacun compte pour un, et nul ne compte pour plus d'un."

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é