pascal19 Posté(e) le 20 décembre 2007 Posté(e) le 20 décembre 2007 j'vais trouver...demain je m'y met J'espère que je serai pas seul...a+
speedy Posté(e) le 21 décembre 2007 Posté(e) le 21 décembre 2007 Bonjour (defun c:bl_att(/ blatt)(while (not blatt)(setq blatt (entsel "\nSélectionnez le bloc: ?")) ) je continue à chercher... Michel a
Matt666 Posté(e) le 21 décembre 2007 Auteur Posté(e) le 21 décembre 2007 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."
pascal19 Posté(e) le 2 janvier 2008 Posté(e) le 2 janvier 2008 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 etd'un bloc à attribut, la seule différence concerne le code 66 qui apparait sur lebloc à attribut,dois je utiliser ce code?
Matt666 Posté(e) le 2 janvier 2008 Auteur Posté(e) le 2 janvier 2008 Salut Pascal ! Bonne année à toi aussi, merci...la seule différence concerne le code 66 qui apparait sur lebloc à attribut,dois je utiliser ce code?C'est exactement ça ! "Chacun compte pour un, et nul ne compte pour plus d'un."
lovecraft Posté(e) le 2 janvier 2008 Posté(e) le 2 janvier 2008 Bonsoir à tous et mes meilleurs voeux. Désolé Matt666, je n'avais pas vu ce post , de plus j'ai fait un p'tit break pendant les vacances. j'attends que les nouveaux repondent avant de poster ma solution ;) Va falloir que je m'applique dans mon code (je n'ai pas le droit a l'erreur) ;) @plus http://www.youtube.com/user/CADMINATOR?feature=mhee
pascal19 Posté(e) le 3 janvier 2008 Posté(e) le 3 janvier 2008 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...
Matt666 Posté(e) le 3 janvier 2008 Auteur Posté(e) le 3 janvier 2008 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."
vinz34 Posté(e) le 3 janvier 2008 Posté(e) le 3 janvier 2008 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.
Matt666 Posté(e) le 3 janvier 2008 Auteur Posté(e) le 3 janvier 2008 :cool: El diablo....j'aurais suggéré un test de plus avec le entsel, à savoir s'il s'agit bien d'un blocExactement ! 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."
vinz34 Posté(e) le 3 janvier 2008 Posté(e) le 3 janvier 2008 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.
pascal19 Posté(e) le 3 janvier 2008 Posté(e) le 3 janvier 2008 OK OK OK J'avais pas comprisj'avais testé uniquement sur des blocs... a+
lovecraft Posté(e) le 4 janvier 2008 Posté(e) le 4 janvier 2008 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 http://www.youtube.com/user/CADMINATOR?feature=mhee
Matt666 Posté(e) le 4 janvier 2008 Auteur Posté(e) le 4 janvier 2008 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."
lovecraft Posté(e) le 4 janvier 2008 Posté(e) le 4 janvier 2008 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 http://www.youtube.com/user/CADMINATOR?feature=mhee
Patrick_35 Posté(e) le 4 janvier 2008 Posté(e) le 4 janvier 2008 :cool: El diablo.... Dommage de ne pas penser au 888 ;) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Matt666 Posté(e) le 4 janvier 2008 Auteur Posté(e) le 4 janvier 2008 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."
lovecraft Posté(e) le 4 janvier 2008 Posté(e) le 4 janvier 2008 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 http://www.youtube.com/user/CADMINATOR?feature=mhee
Matt666 Posté(e) le 4 janvier 2008 Auteur Posté(e) le 4 janvier 2008 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."
Patrick_35 Posté(e) le 4 janvier 2008 Posté(e) le 4 janvier 2008 Attention, terrain glissant sur ce site avec la religion. C'est le chiffre moins connu du christ.Tu n'as jamais cherché la signification de ces chiffres ? @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
vinz34 Posté(e) le 7 janvier 2008 Posté(e) le 7 janvier 2008 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) )
Matt666 Posté(e) le 7 janvier 2008 Auteur Posté(e) le 7 janvier 2008 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."
vinz34 Posté(e) le 7 janvier 2008 Posté(e) le 7 janvier 2008 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...
Patrick_35 Posté(e) le 7 janvier 2008 Posté(e) le 7 janvier 2008 MattTu peux aller voir ce lien ps : je me suis amusé à faire le même style de lisp que vinz34, mais en vlisp. Si ça interesse @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Matt666 Posté(e) le 8 janvier 2008 Auteur Posté(e) le 8 janvier 2008 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."
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