bigsyke
Membres-
Compteur de contenus
91 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par bigsyke
-
Merci Gile pour tes explications! En effet en mettant (while (/= (cdr (assoc 2 (entget sel)) "REP1028")) cela marche exactement comme je voulais tout en sachant qu'il faut que je sois sur que le bloc selectionner contiennent bien l'etiquette REP1028. Pour ce qui est de ton lisp j'avais bien vue att n'étais pas le bon terme et qu'a la place j'aurais mis blk mais tu es tellement calé en lisp que j'ai eu un doute ;) . De plus je trouve que tu conditionnes par mal a coup de "if" histoire d'etre sur d'etre dans les clous :) Je voulais aussi te remercie pour ton explication concernant "while" et je vais immediatement et precieusement la noté sur un pense bete Grace a toi je vais pouvoir continuer dans mon apprentissage d'autolisp :D Prochaine étape, faire en sorte que le lisp s'arrete proprement dès qu'il aura atteint le SEQEND En core mille merci pour ton aide Gile ;)
-
Merci Gile pour ton aide ;) En plus j'avais completement oublié nentsel qui te permet de selectionner directement l'attribut concerné. Maintenant j'ai repris ton lisp qui permets de parcourir les attributs à la recherche de la paire pointé (2 . "REP1028") afin qu'il m'afficher "TROUVER" si (= "REP-FICH" (cdr (assoc 2 elst))) et "NON TROUVER" si cela n'est pas le cas ce qui donne cela: (if (and (setq blk (car (entsel "\nSélectionnez le bloc: "))) (setq elst (entget att)) (= "INSERT" (cdr (assoc 0 (setq elst (entget att))))) (setq att (entnext blk)) ) (while (and att (setq elst (entget att)) (= "ATTRIB" (cdr (assoc 0 elst))) ) (if (= "REP1028" (cdr (assoc 2 elst))) (princ "TROUVER") (princ "NON TROUVER") ) (setq att (entnext att)) ) ) Dès l'execution du lisp,je selectionne mon bloc mais ensuite voici le message suivant qui s'affiche: Sélectionnez le bloc: ; erreur: type d'argument incorrect: lentityp nil De plus j'aimerais bien s'il vous plait qu'on m'explique pourquoi mon idée de depart étais mauvaise à savoir pourquoi mon lisp suivant ne s'arrete pas a la sous entité contenant la paire pointé (2 . "REP1028") setq sel (car (entsel))) (while (= (cdr (assoc 2 (entget sel)) "REP1028")) (setq sel (entnext sel)) ) (princ "Terminé") (prin1) Pour moi ce lisp est le meme, du moins dans l'esprit que celui ci-dessus qui ne fais que compter de 1 à 10 (setq compteur 1) (while (< compteur 10) (princ compteur) (setq count (1+ compteur)) ) Je sais que je pose beaucoup de question peut etre stupide a vos yeux mais j'essais d'apprendre par moi meme et a force de perceverance et de travail j'espere un jours volé de mes propres ailes ;) En attendant ce jour béni je vous remercie mille fois pour toute l'aide que vous m'apportez
-
Merci beaucoup Gile pour ton aide et une fois de plus tes conseils sont clairs et precieux. J'ai bien modifié mon lisp en y integrant un seul argument a la foncyion cdr et cette fois ci lorsque je teste mon lisp je n'ai pas de message d'erreur. Cependant, alors que le but de mon lisp étais de definir sous quel ename se cachais la paire pointé (2 . "REP1028") lorsque mon lisp s'execute j'ai ceux ci sur ma ligne de commande: Choix de l'objet: Terminé Je me dis alors qu'en faisant (entget sel) je devrais avoir quelque chose qui devrais ressemblé a ceux ci: ((-1 . ) (0 . "ATTRIB") (330 . 7e8cd1b0>).....(2 . "REP1028")... Au lieu de cela j'ai : ((-1 . ) (0 . "INSERT") (330 . 7e8cbcf8>)...(2 . "CART")... Pour moi voilà comment j'ai concu mon lisp: setq sel (car (entsel))) je selection mon entité graphique puis j'enregistre son ename sous la variable sel (while (= (cdr (assoc 2 (entget sel))) "REP1028") J'ouvre ma boucle "tant que" en conditionnant la sortie de celle au faite que tant que l'expression (= (cdr (assoc 2 (entget sel))) "REP1028") n'est pas égal à nil celle ci continue a effectué la meme tache (j'espère avoir été suffisament claire :P ) (setq sel (entnext sel)) Donc si mon expression (= (cdr (assoc 2 (entget sel))) "REP1028") n'est pas égal a nil alors je fais un entnext de sel jusqu'a tombé sur la paire pointé (2 . "REP1028") ce qui me permettra de sortir de ma boucle (princ "Terminé") Une fois trouvé le ename sous lequel etais repertorié la paire pointé recherché le message Terminé s'affiche sur ma ligne de commande Voilà, sur le papier cela devrais marché sauf que cela ne fonctionne pas :P Est ce ma logique qui n'est pas la bonne? Ai je oublié un éléments crucial dans tout cette enchainement? En tout cas merci pour toute l'aide que vous pourrez m'apporter ;)
-
Merci pour ton aide :) Effectivement je n'avais pas vue cette erreur.J'ai donc modifier mon lisp en consequence : setq sel (car (entsel))) (while (= (cdr (assoc 2 (entget sel)) "REP1028")) (setq sel (entnext sel)) (entget sel) ) (princ "Terminé") (prin1) Néanmoins lorsque je veux tester mon lisp j'ai cette fois ci l'erreur suivante: Choix de l'objet: ; erreur: nombre d'arguments trop important Est ce possible que dans un lisp on ai trop d'arguments :P ??
-
Bonjour à tous ;) Je suis actuellement entrain de crée un lisp pour savoir sous quelle ename se cache une paire pointé.J'ai voulu commercé par quelque chose qui me paraissais simple au premiere abord mais qui c'est averé compliqué pour moi :P Alors voir la bête: (setq sel (car (entsel))) (while (= (cdr (assoc 2 sel)) "REP1028")) (setq sel (entnext sel)) (entget sel) ) (princ "Terminé") (prin1) Voilà l'erreur que j'obtien lors de son execution: Choix de l'objet: ; erreur: type d'argument incorrect: listp 7ef04230> A quoi cela est il dû et comment y remedier s'il vous plait ;)
-
Pas évident la subtilité :P Après le "et/ou" de Gile, le "et " de Didier voici le "ou/et" de bseb67 :D :D :D Je pense néanmoins avoir compris le truc et l'exemple de bseb67 m'y a beaucoup aidé Si on part de l'exemple de Gile le ssget recherchera et ne sélectionnera que les blocs dont le nom de bloc est TOTO ou/et de la forme BLA BLI BLO. Après c'est au niveau du ssname qu'on retrouve ces petits.... Je comprends donc mieux l'idée de bseb67 pour ce qui est de, je cite "réunir le filtre sur le nom en mettant (2 . "X-u0gba007-A01,....")" En tout cas j'ai vraiment beaucoup appris grâce a vous :) Mille merci
-
Merci beaucoup pour toutes ces precisions bien utile :D Dommage que dans le ssget on ne puisse faire une liste de nom de bloc qu'avec des ET et pas de OU car j'aurais fait un ssget avec X-u0gba007-A01ou u0gba007 et un autre avec X-U0GBA030-A01ou u0gba030. J'essais d'integré dans mon lisp une condition mais je ne vois pas trop de difference entre "cond" et "if". Quelqu'un pourrais m'expliquer? ;)
-
Merci pour cette information précieuse :D j'ignorais qu'on pouvais faire ça. Par contre peux tu m'expliquer comment faire ssget avec une liste de nom de bloc?
-
Merci pour tes remarques « - tu peux créer une commande AA qui elle appelle A1, A2, A3 et A4 » J’aimerais savoir comment crée une seule et même commande. La seule chose qui me viens à l’esprit serai ce genre de commande : (defun c :AA () (command A1) (command A2) (command A3) (command A4) ) « tu peux créer une fonction A0 ayant un paramètre qui est le nom du bloc, ainsi A1, A2, A3 et A4 n'ont juste qu'a appeler A0 avec le bon paramètre » Ben c’est ce que je cherche a faire…je veux crée un defun d’opération générique que j’appellerai en changeant l’argument (enfin si c’est possible à faire) « - tu n'as pas eu de plantage sur des appels ? car si le ssget renvoie nil, un ssname plante... » Il faut croire que j’ai eu la chance que ssget renvoie autre chose que nil. Il me faut donc faire face a cette éventualité dans le lisp sans quoi le lisp plantera « -faire un filtre sur le code DXF 2 ne marche pas sur les TEXT, MTEXT. pour la DIMENSION cela représente autre chose que le nom ». Tu as raison…en plus seul INSERT m’intéresse puisque je recherche un bloc « - tu peux réunir le filtre sur le nom en mettant (2 . "X-u0gba007-A01,....") » Là j’avoue que je ne t’ai pas bien compris « - si tu veux garder tous tes setq séparés, un cond en testant chaque setq me plaît bien » Je vais étudier cette idée. Mon but étant que suivant le nom du bloc trouvé lors de ssget une serie de commande s’exécute. En tout cas merci pour tes précieux conseils et pour toutes ces pistes. Je vais tacher d’en faire bonne usage et je te soumettrai très bientôt le fruit de mon travail
-
Bonjour à tous, Je travail actuellement sur un grand projet ou les plans on été retouché par beaucoup de personne différente pour qui l'expression "chartre graphique" ne veut pas dire grand chose... Bref, je me retrouve avec des plans A3 disposant d'un cartouche qui est un bloc avec des attributs. Hélas ce "bloc cartouche" suivant les plans que j'ouvre n'a pas le même nom. Un coup il s'appelle u0gba030 et sur d'autre plans il s'appelle X-U0GBA030-A01 alors qu'il s'agit du même bloc. Pour le bloc cartouche de la page de garde j'ai le même problème c'est a dire que sois il s'appelle u0gba007 sois il s'appelle X-u0gba007-A01 alors qu'ils ont les même caractéristique. Dans ce bloc cartouche je dois récupérer la valeur de 2 attributs (attribut "numéro du plan" et "numéro du folio") et en faire la concaténation suivante vers un 3ème attribut: "numéro du plan"_F"numero du folio" J'ai donc crée le lisp suivant mais je n'en suis pas très satisfait. En effet je suis obligé de taper A1 puis A2 puis A3 puis A4 pour être sur d'avoir appliquer le lisp au bon nom du bloc cartouche se qui est fastidieux. En plus je me dis que cela dois être possible mais je ne sais pas s'il vaut mieux utilisé la commande "if" ou "cond". (defun c:A1 (/ ss1 bb1 vv1 bn1 s11 dd11 dd21 dd31 dd41 dd51 dd61 s21 new ent ancliste conliste nouvliste) (setq ss1 (ssget "_X" '((0 . "TEXT,MTEXT,DIMENSION,INSERT") (2 . "X-u0gba007-A01")))) (setq bb1 (ssname ss1 0)) (setq vv1 (entnext bb1)) (setq bn1 (entget vv1)) (setq s11 (cdr (assoc '1 bn1))) (setq dd11 (entnext vv1)) (setq dd21 (entnext dd11)) (setq dd31 (entnext dd21)) (setq dd41 (entnext dd31)) (setq dd51 (entnext dd41)) (setq dd61 (entnext dd51)) (setq ent (entget dd61)) (setq s21 (cdr (assoc '1 (entget dd61)))) (setq new (strcat s11 "_F001")) (command "zoom" "objet" dd61 "") (setq ancliste (assoc 1 ent)) (setq conliste (cons (car ancliste) new)) (setq nouvliste (subst conliste ancliste ent)) (entmod nouvliste) ) (defun c:A2 (/ ss bb vv bn s1 dd1 dd2 s2 new dd3 ent ancliste conliste nouvliste) (setq ss (ssget "_X" '((0 . "TEXT,MTEXT,DIMENSION,INSERT") (2 . "u0gba030")))) (setq bb (ssname ss 0)) (setq vv (entnext bb)) (setq bn (entget vv)) (setq s1 (cdr (assoc '1 bn))) (setq dd1 (entnext vv)) (setq dd2 (entnext dd1)) (setq s2 (cdr (assoc '1 (entget dd2)))) (setq new (strcat s1 "_F" s2)) (setq dd3 (entnext dd2)) (setq ent (entget dd3)) (command "zoom" "objet" dd3 "") (setq ancliste (assoc 1 ent)) (setq conliste (cons (car ancliste) new)) (setq nouvliste (subst conliste ancliste ent)) (entmod nouvliste) ) (defun c:A3 (/ ss2 bb2 vv2 bn2 s12 ddd11 ddd21 ddd31 ddd41 ddd51 ddd61 s21 new ent ancliste conliste nouvliste) (setq ss2 (ssget "_X" '((0 . "TEXT,MTEXT,DIMENSION,INSERT") (2 . "u0gba007")))) (setq bb2 (ssname ss2 0)) (setq vv2 (entnext bb2)) (setq bn2 (entget vv2)) (setq s12 (cdr (assoc '1 bn2))) (setq ddd11 (entnext vv2)) (setq ddd21 (entnext ddd11)) (setq ddd31 (entnext ddd21)) (setq ddd41 (entnext ddd31)) (setq ddd51 (entnext ddd41)) (setq ddd61 (entnext ddd51)) (setq ent (entget ddd61)) (setq s21 (cdr (assoc '1 (entget ddd61)))) (setq new (strcat s12 "_F001")) (command "zoom" "objet" ddd61 "") (setq ancliste (assoc 1 ent)) (setq conliste (cons (car ancliste) new)) (setq nouvliste (subst conliste ancliste ent)) (entmod nouvliste) ) (defun c:A4 (/ ss3 bb3 vv3 bn3 s13 de1 de2 s51 new de3 ent ancliste conliste nouvliste) (setq ss3 (ssget "_X" '((0 . "TEXT,MTEXT,DIMENSION,INSERT") (2 . "X-U0GBA030-A01")))) (setq bb3 (ssname ss3 0)) (setq vv3 (entnext bb3)) (setq bn3 (entget vv3)) (setq s13 (cdr (assoc '1 bn3))) (setq de1 (entnext vv3)) (setq de2 (entnext de1)) (setq s51 (cdr (assoc '1 (entget de2)))) (setq new (strcat s13 "_F" s51)) (setq de3 (entnext de2)) (setq ent (entget de3)) (command "zoom" "objet" de3 "") (setq ancliste (assoc 1 ent)) (setq conliste (cons (car ancliste) new)) (setq nouvliste (subst conliste ancliste ent)) (entmod nouvliste) Merci pour vos suggestions. :)
-
Merci pour tes reponses Gile car la distinction entre les 2 ne paraissait pas tres evidente ;) il ne me reste plus qu'a me plonger dans les boucles et les condition maintenant :cool: ...
-
Salut Gile :) Tu vois ce que je ne comprends pas c'est pourquoi lorsque je fait Commande: (entget (cdr (assoc -2 (tblnext "block" t)))) j'obtiens: ((-1 . ) (0 . "LWPOLYLINE") (330 . 7e0def78>) (5 . "F3") (100 . "AcDbEntity") (67 . 0) (8 . "0") (62 . 0) (6 . "Continuous") (100 . "AcDbPolyline") (90 . 4) (70 . 1) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 -2.5 2.5) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 -2.5 -2.5) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 2.5 -2.5) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 2.5 2.5) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0)) Alors que si je vais Commande: (entget (car (entsel))) Et que je selectionne le bloc "u0gba223" j'obtiens: Commande: (entget (car (entsel))) Choix de l'objet: ((-1 . ) (0 . "INSERT") (330 . d'entité: 7e0decf8>) (5 . "12B") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbBlockReference") (66 . 1) (2 . "u0gba223") (10 223.401 134.096 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0)) Dans un cas j'obtiens la paire pointé (0 . "LWPOLYLINE") et dans l'autre (0 . "INSERT") .... Y a t il une difference entre (cdr (assoc -2 (tblnext "block" t))) et (car (entsel))?Les 2 ne devrais t il pas donné le meme ename? Merci pour ton aide Gile ;)
-
Bonjour à tous ;) et merci de tes reponses Gile J'essais de comprendre tant bien mal :P ... Afin de bien comprendre comment tout cela marche j'ai realiser un dessin avec 3 blocs constitués d'attribut puis j'ai tapé les commandes suivantes jusqu'a tomber sur nil : Commande: (tblnext "block") ((0 . "BLOCK") (2 . "u0gba223") (70 . 2) (4 . "") (10 0.0 0.0 0.0) (-2 . )) Commande: (tblnext "block") ((0 . "BLOCK") (2 . "u0gba677") (70 . 2) (4 . "") (10 0.0 0.0 0.0) (-2 . )) Commande: (tblnext "block") ((0 . "BLOCK") (2 . "BDC") (70 . 2) (4 . "") (10 0.0 0.0 0.0) (-2 . )) Commande: (tblnext "block") nil Alors a ce moment là je me dis que je vais recuperer le nom de l'entité de mon premier bloc via le code -2 ce qui me donne cela: (entget (cdr (assoc -2 (tblnext "block" t)))) ((-1 . ) (0 . "LWPOLYLINE") (330 . 7e0def78>) (5 . "F3") (100 . "AcDbEntity") (67 . 0) (8 . "0") (62 . 0) (6 . "Continuous") (100 . "AcDbPolyline") (90 . 4) (70 . 1) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 -2.5 2.5) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 -2.5 -2.5) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 2.5 -2.5) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 2.5 2.5) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0)) Et la oh surprise je me retrouve avec (0 . "LWPOLYLINE") en code 0 d'ou ma question...pourquoi ce code si mon ename est un bloc??Est ce parce que je suis dans la definition de bloc et non pas dans la reference de bloc :cool: ? J'avoue comprendre facilement les 3 autres strucutres qui compose un dessin a savoir les variables,les tables ou les entités (grosso modo les objet graphique) mais la partie bloc je seche un peu....
-
Merci pour ta reponse rapide Gile! Si seulement ces nuages etaient sur un calque specifique...
-
Bonjour à tous :) Voilà mon problème...j'ai un plan avec des nuages de revision integrés sur le calque 0,or ces nuages ne sont pas toujours facilement visible sur le plan...j'ai parfois l'impression de chercher une aiguille dans une botte de foin....Or j'ai besoin d'effacer tous les nuages de revision appartenant au plan mais j'ai beau essayé plusieurs mode de selection autocad ne semble pas faire la difference entre un nuage de revision et une polyligne :( Y a t il un moyen de pouvoir effacer tous les nuages de revision sans effacer les polyligne?
-
Bonjour à tous :) Voilà mon problème...j'ai un plan avec des nuages de revision integrés sur le calque 0,or ces nuages ne sont pas toujours facilement visible sur le plan...j'ai parfois l'impression de chercher une aiguille dans une botte de foin....Or j'ai besoin d'effacer tous les nuages de revision appartenant au plan mais j'ai beau essayé plusieurs mode de selection autocad ne semble pas faire la difference entre un nuage de revision et une polyligne :( Y a t il un moyen de pouvoir effacer tous les nuages de revision sans effacer les polyligne?
-
Effectivement ça fonctionne mieux avec la bonne orthographe ;) .Il faut que j'apprenne a utilser l'editeur visual lisp Gile je sais que j'abuse mais peux tu m'expliquer le principe de la fonction ssname?
-
Bonjour à tous :) Je suis entrain de m'initier au joie d'Autolisp mais j'avoue que c'est pas evidant... Voilà,je pense avoir compris la difference entre entsel qui nomme une entité unique et ssget qui designe plusieurs entité sous un meme nom mais j'avoue que lorsque j'essaie d'utiliser sslenght je n'y arrive pas :P Si je crée par exemple 3 entités graphique tel qu'un cercle, un rectangle et une ellispe, que je tape (setq sg (ssget)), que je selectionne mes 3 entités et que je tape (sslenght sg),j'ai le message d'erreur suivant: Commande: (sslenght sg) ; erreur: no function definition: SSLENGHT Quelqu'un aurait il la gentillesse de me dire ou est mon erreur s'il vous plait?
-
Merci beaucoup Gile,tu as parfaitement bien compris mon problème :) En effet ce sont bien les attributs que je recherche et il est vrai que ma commande (entnext b) ne pouvais pas marcher car b est une liste et pas un ename ;) .J'ai donc executer la commande (setq e (entnext a)) et là je me suis rendu compte d'un truc tout bete mais que je n'avais pas remarquer la premiere fois...le nom de l'entité n'etais plus le meme! Voilà ce que cela a donner: Ouverture d'un fichier au format AutoCAD 2004. Régénération du modèle. AutoCAD Express Tools Copyright © 2002-2004 Autodesk, Inc. Utilitaires de menu AutoCAD chargés. Commande: (setq a (car(entsel))) Choix de l'objet: Commande: (setq b (entget a)) ((-1 . ) (0 . "INSERT") (330 . 7ef80cf8>) (5 . "17BD") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbBlockReference") (66 . 1) (2 . "u0gba205") (10 235.795 150.739 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0)) Commande: (setq e (entnext a)) C'est donc à cette instant que j'ai compris que le "e" n'avais plus rien a voir avec le "a" alors j'ai continuer ma boucle jusqu'à obtenir enfin mon fameux SEQEND Ouverture d'un fichier au format AutoCAD 2004. Régénération du modèle. AutoCAD Express Tools Copyright © 2002-2004 Autodesk, Inc. Utilitaires de menu AutoCAD chargés. Commande: (setq a (car(entsel))) Choix de l'objet: Commande: (setq b (entget a)) ((-1 . ) (0 . "INSERT") (330 . 7ef80cf8>) (5 . "17BD") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbBlockReference") (66 . 1) (2 . "u0gba205") (10 235.795 150.739 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0)) Commande: (setq e (entnext a)) Commande: (entget e) ((-1 . ) (0 . "ATTRIB") (330 . 7efbe9e8>) (5 . "17BE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 7) (6 . "Continuous") (100 . "AcDbText") (10 222.957 146.996 0.0) (40 . 2.0) (1 . "1500-00-EA1-1599") (50 . 0.0) (41 . 0.8) (51 . 0.0) (7 . "romans") (71 . 0) (72 . 1) (11 235.795 146.996 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttribute") (2 . "REPERE") (70 . 0) (73 . 0) (74 . 0)) Commande: (setq e (entnext e)) ((-1 . ) (0 . "ATTRIB") (330 . 7efbe9e8>) (5 . "17BF") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 7) (6 . "Continuous") (100 . "AcDbText") (10 231.795 151.996 0.0) (40 . 2.0) (1 . "1x36W") (50 . 0.0) (41 . 0.8) (51 . 0.0) (7 . "romans") (71 . 0) (72 . 1) (11 235.795 151.996 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttribute") (2 . "PUISSANCE") (70 . 0) (73 . 0) (74 . 0)) Commande: (setq e (entnext e)) Commande: (entget e) ((-1 . ) (0 . "ATTRIB") (330 . 7efbe9e8>) (5 . "17C0") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 240) (100 . "AcDbText") (10 235.795 157.73 0.0) (40 . 2.0) (1 . "") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "romans") (71 . 0) (72 . 1) (11 235.795 157.73 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttribute") (2 . "PUISSUNIT") (70 . 1) (73 . 0) (74 . 0)) Commande: (setq e (entnext e)) Commande: (entget e) ((-1 . ) (0 . "ATTRIB") (330 . 7efbe9e8>) (5 . "17C1") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 240) (100 . "AcDbText") (10 235.795 160.73 0.0) (40 . 2.0) (1 . "") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "romans") (71 . 0) (72 . 1) (11 235.795 160.73 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttribute") (2 . "OBSERVAT") (70 . 1) (73 . 0) (74 . 0)) Commande: (setq e (entnext e)) Commande: (entget e) ((-1 . ) (0 . " SEQEND") (330 . 7efbe9e8>) (5 . "17C2") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (-2 . )) Et là au miracle :D mon SEQEND est apparue! Au fur et a mesure que je faisais des entnext mon block devoilais enfin tous ces secrets :) Maintenant il ne me reste plus qu'a m'entrainer pour faire une boucle avec tout cela qui s'arreterai dès qu'elle trouverait une certaine valeur :cool: En tout cas je te remercie Gile pour tes conseils mais je n'arrive pas a saisir encore la difference entre "réference de bloc" et "definition de bloc" peux tu m'expliquer s'il te plait?
-
Bonjour à tous, J'aimerais beneficier de votre aide concernant cette fameuse commande entnext... Voilà mon soucis: disons que je veuille connaitre tout ce q'un bloc a dans le ventre Je tape donc (setq a (car(entsel))) Je selectionne mon block et là je recupere donc dans "a" le nom de mon entité (le ename si je ne me trompe pas ;) ).Dans mon cas c'est Ensuite pour avoir la liste des données je tape: (setq b (entget a)) à ce moment là j'ai la liste suivante: Commande: (setq b (entget a)) ((-1 . ) (0 . "INSERT") (330 . 7efe6cf8>) (5 . "17B1") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbBlockReference") (66 . 1) (2 . "u0gba205") (10 235.795 90.0539 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0)) Et c'est la que cela se corse pour moi :cool: ...en effet je sais que cette liste n'est pas finis et que pour avoir la suite il me faut utiliser la commande entnext jusqu'à obtenir mon fameux SEQEND mais j'ai beau esayé je n'y arrive pas :P J'ai essayé cela: Commande: (entnext) Mais comme vous le voyez je n'ai que le ename... j'ai aussi esayé cela: Commande: (entnext b) ; erreur: type d'argument incorrect: lentityp ((-1 . ) (0 . "INSERT") (330 . ) (5 . "17B1") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbBlockReference") (66 . 1) (2 . "u0gba205") (10 235.795 90.0539 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0)) mais la j'ai carrement un message d'erreur... J'ai vraiment besoin de votre aide....
-
non d'une pipe... Mille merci Tramber :D et moi qui etais entrain de pondre une usine a gaz pour obtenir ce simple truc :cool:
-
Juste une petite question pour la route ;) ... Si par exemple je partais d'un lisp ou je recupere une chaine de caractere,genre (setq var "coucou") et qu'ensuite je veuille recuperer cette valeur en lieu et place du 119,comment puis je faire car si je mets "!var" a la place cela remplacera mon attribut par !var et non par coucou?
-
Ca marche! Merci l'homme au casque :D Je ne connaissais pas l'astuce avec """ pause "" ".Pour ce qui est d'Autolisp je suis entrain de mis mettre...avec patience et perseverence.Merci encore pouir ton aide
-
Bonjour a tous, Voilà j'essais de realiser un petit lisp pour modifier la valeur d'un attribut alors voilà ce que ca donne: (command "-attedit""O"" NOMDUBLOC"NOMDELETIQUETTE""""Valeur""r"""CCTP""") Le probleme c'est que lorsque je fais ma selection mon petit lisp ne continue pas son petit bonhomme de chemin et s'arrete a Entrez une option Valeur/POsition/Hauteur/Angle/Style/CAlque/COuleur/suivaNt] Ou est l'erreur?Comment puis je lui faire comprendre de continuer mon lisp apres avoir effectuer ma selection? Merci pour votre aide!
-
Bonjour à tous! J'ai trouver sur le forum le super lisp de gile suivant pour remplacer du texte: defun c:test (/ ss n txt elst str) (defun rep-txt (elst / str) (setq str (cdr (assoc 1 elst))) (while (vl-string-search "%%C" str) (setq str (vl-string-subst "HA" "%%C" str)) ) (entmod (subst (cons 1 str) (assoc 1 elst) elst)) (entupd (cdr (assoc -1 elst))) ) (and (setq ss (ssget "_X" '((0 . "TEXT,MTEXT,DIMENSION,INSERT") (410 . "Model")))) (setq n 0) (while (setq txt (ssname ss n)) (setq elst (entget txt)) (if (= (cdr (assoc 0 elst)) "INSERT") (progn (setq ent (entnext txt)) (while (and ent (/= (cdr (assoc 0 (setq elst (entget ent)))) "SEQEND") ) (if (member (cdr (assoc 0 elst)) '("TEXT" "MTEXT" "DIMENSION" "ATTRIB" ) ) (rep-txt elst) ) (setq ent (entnext ent)) ) ) (rep-txt elst) ) (setq n (1+ n)) ) ) (princ) ) Néanmoins je me demande ce qu'il faudrait modifier pour pouvoir changer plusieurs textes au lieu d'un seul car mes connaissances en lisp sont limités...quelqu'un aurait une idée?
