Aller au contenu

bigsyke

Membres
  • Compteur de contenus

    91
  • Inscription

  • Dernière visite

Tout ce qui a été posté par bigsyke

  1. bigsyke

    manipulation liste

    Thanks for your help Elpanov :) However (acet-list-remove-duplicates l nil) its available only if you have express tools installed
  2. bigsyke

    comparaison de valeur

    Bonjour, Merci pour ta réponse.Sur le forum j'étais partie sur une mauvaise piste en voulant transformé l’écriture scientifique en décimal. Effectivement si j'étais partie sur le terme "equal" je serai tombé sur ce lien Mon lien Désolé de vous ennuyé avec mes questions
  3. Bonjour à toutes et à tous, Je voulais juste faire partagé un cas que je trouve bizarre. Je fais un lisp ou j'extrais les coordonnées des points d'une polyligne sous forme de liste. Ensuite j'aimerais savoir si le premier point et le dernier sont identique mais lorsque je fais une comparaison avec des valeurs scientifique cela ne fonctionne pas comme vous pouvez le voir le code suivant: Commande: (setq firstpt (car lpt)) (-477785.0 1.05555e+006) Commande: (setq lastpt (car (reverse lpt))) (-477785.0 1.05555e+006) Commande: (= (car firstpt) (car lastpt)) T Commande: (= (cdr firstpt) (cdr lastpt)) nil Commande: (cdr firstpt) (1.05555e+006) Commande: (cdr lastpt) (1.05555e+006) Je me suis alors dit que les valeurs après la virgule n'etait pas identique alors j'ai fait ça: Commande: (rtos (nth 0 (cdr firstpt)) 2 10) "1055553.33314437" Commande: (rtos (nth 0 (cdr lastpt)) 2 10) "1055553.33314437" J'ai regardé sur le forum et je suis tombé sur ce lien Mon lien Doit on toujours jouer du rtos et atof dès qu'on a des valeurs scientifique pour etre sûr que la 25eme valeur apres la virgule soit la meme?
  4. bigsyke

    manipulation liste

    Merci Patrick_35 Je dois pas avoir une méthode de recherche au point...je vais regardé tout cela
  5. bigsyke

    manipulation liste

    Bonjour Gile, Je t'assure que j'avais recherché sur le forum et sur internet avec plusieurs appellation comme classer,dénombrer,ranger,etc...les éléments/ atomes d'une liste mais sans succès.J'ai bien trouvé un tas de lisp relatif au manipulation de liste (comme sur ton site gileCAD) mais pas ce que je recherchais. Je suis peut être passé à coté ou ma méthode de recherche n'est pas la bonne :) En plus j'ai toujours pour principe de chercher par moi même avant de solliciter votre aide et vos conseils et c'est vrai que ce site est génial pour l’entraide :) Merci pour ton lisp qui va me permettre de progresser. Y a plus qu'a regardé comment tout cela s'articule pour comprendre son fonctionnement ;)
  6. Bonjour à tous, Est il possible de compter le nombre d'éléments constituant une liste? Par exemple si j'ai une liste de la forme ( a b a c b a c c a a),j'aimerai obtenir a partir de cette liste la liste suivante ((a 5) (b 2) (c 3)) Merci pour votre aide ;)
  7. bigsyke

    calque xref

    Bonjour Guillaume, En effet ton petit lisp fonctionne à merveille et je t'en remercie :) . Mon erreur était que pour une solution ou il faut sélectionner l'objet, j'avais mis entsel au lieu de nentsel ce qui faisait que j'obtenais le nom du calque sur lequel j'avais inséré mon xref Existe il une solution de type ssget (ou autre) qui permettrai de balayer tous les calques de mon plan, xref compris? J'ai essayé un code de type: (setq lw (ssget "_X" '((8 . "calque1")))) mais rien n'est sélectionné...
  8. bigsyke

    calque xref

    Bonjour tout le monde :) Je vais taché d'illustrer ma question par un exemple afin d'etre clair. J'ai un dessin dwg que je nommerai dessin1.dwg et que je souhaite utiliser comme xref. dessin1.dwg est composé d'entité graphique qui sont sur differents calques comme par exemple calque1, calque2, etc... Jusque là, rien de bien folichon. J'ouvre maintenant un autre dwg que j'appelerai dessin2.dwg dans lequel je viens inserer mon xref. Ma question est la suivante: Si je suis dans dessin2.dwg est il possible en lisp,de cliquer sur une entité appartenant a mon xref (qui est dessin1.dwg) et de retrouver le nom du calque attacher a la source de mon xref (par exemple calque 1)?Est il possible de recuperer ce nom de calque avec un ssget? Merci d'avance pour votre aide
  9. Le lisp marche à merveille :D Je pense l'incorporer en sous programme pour modifier une liste de terme pré-établie grace a la fonction foreach B) Merci au crabe pour le lien qui fait mention de la longueur des caracteres :) Pour ma part j'avais bien trouvé la commande "BLOCK?" (j'ai autocad 2012) pour repondre a mon problème mais il n'y a apparemment pas d'équivalent en lisp Encore merci pour l'aide apportée et merci encore a tout ceux qui prennent sur leur temps nous aider ;)
  10. Oulà...ça c'est du lisp :(rires forts): Je teste ce lisp dès demain matin et je te tiens au courant! En tout cas mille merci pour ton aide precieuse!
  11. Merci pour ta réponse, Le problème c'est que j'ai une serie de folio dont je ne suis pas l'auteur et donc je n'ai pas l'historique des blocs qui ont été créér. Il faudrait que j'ouvre tout mes folios pour faire un balayage pour savoir s'ils sont constitués d'attribut, de texte, ou des deux pour pouvoir les modifier selon le principe que tu a decris. Je pensais que puisque ces données étaient accessible via la commande rechercher/remplacer ou via un éditeur de texte avec le DXF, il y avait peut être une astuce par lisp pour y avoir acces sans passer par une redefinition du bloc. Vivement qu'autodesk crée une ligne de commande rechercher/remplacer sans passer par une fenetre! En tout cas je te remercie beaucoup pour le partage de ton savoir :)
  12. Bonjour à toutes et a tous, J'aurais besoin de votre aide et de vos conseils car je cherche à réalisé un lisp (si possible en autolisp) qui me permettrait de changer un texte qui appartiendrait à un bloc sans attribut. Le problème c'est qu'en parcourant des code DXF pour modifier la valeur de mon texte, je n'ai que le code INSERT et rien d'autre (normal puisque je n'ai pas de code 66). Y a t il un moyen de rentré au coeur du bloc pour y modifier un texte en passant par un lisp ou est ce tout simplement pas possible? Merci pour conseil :)
  13. bigsyke

    Croissement de liste

    Merci beaucoup Gile! La solution en (foo l1 l2) est exactement ce que je cherchais :) :) :) J'avoue que j'ai encore quelques lacunes dans la manipulation des listes...surtout avec mapcar et lambda (comme par hasard <img src='http://cadxp.com/public/style_emoticons/<#EMO_DIR#>/laugh.gif' class='bbc_emoticon' alt=':(rires forts):' /> ) J'étais personnellement partie sur quelque chose de plus lourd a coup de nth ou de foreach que je maitrise mieux. Merci encore pour ton aide Gile ;)
  14. Bonjour à toutes et a tous :) Avant tout je voudrais remercier une fois de plus tout ceux qui font vivre ce forum, prenne sur leur temps pour se pencher sur nos petits problèmes et partage leur savoir. Voici mon petit souci: Je dispose de 2 listes (lstptx et lstpty) correspondant a des coordonnées de point Commande: !lstptx ((X1 Y1 Z1) (X2 Y2 Z2) (Xn Yn Zn)) Commande: !lstpty ((X’1 Y’1 Z’1) (X’2 Y’2 Z’2) (X’n Y’n Z’n)) Le but est de créer une nouvelle liste qui donnerait cela : Commande: !lstpt ((X1 Y’1 Z’1) (X1 Y’2 Z’2) (X1 Y’n Z’n)……(X2 Y’1 Z’1) (X2 Y’2 Z’2) (X2 Y’n Z’n)...) Je pense bien a certaine piste mais elle me donne l’impression de tuer une mouche avec un marteau…
  15. bigsyke

    Image raster

    C'est parfait!!!Merci mille fois pour le coup de pouce! Bien pratique ce Vlisp
  16. bigsyke

    Image raster

    Re-bonjour à tous et merci d'avoir pris un peu de temps pour me repondre :) Goldorak44, j'ai essayé ton code suivant: (vlax-get-Name (vlax-ename->vla-object (car (entsel)))) Malheuresement cela n'a pas marché :( .Voilà ce que j'obtiens: Commande: (vlax-get-Name (vlax-ename->vla-object (car (entsel)))) Choix de l'objet: ; erreur: no function definition: VLAX-GET-NAME Effectivement j'ai essayé de trouver VLAX-GET-NAME dans l'aide autocad partie aide au developpeur mais j'ai rien trouvé (ni meme quelque chose qui y ressemble). Pourtant cela m'aurais bien été utile avec cette simple ligne de commande :P Pour ce qui est du lisp (setq a (entget (car (entsel)))) (setq b (entget (cdr (assoc 340 a)))) (setq c (entget (cdr (assoc 330 B)))) (cdr (assoc 3 c)) Je l'ai essayé mais j'ai decouvert qu'il me donnait toujours la meme reponse hélas. J'ai donc executé ligne par ligne le lisp. Déjà j'ai été étonné de constater qu'il pouvait y avoir des especes de "sous-ename" :huh: Enfin bref, j'ai deroulé les differentes strates des enames jusqu'a tomber sur (0 . "DICTIONARY"). Je comprends maintenant pourquoi lorsque j'utilisais le lisp j'obtenais toujours la meme reponse...Dans DICTIONARY sont listés tous les noms de mes images raster en code dxf 3. Lorsque je fait (cdr (assoc 3 c)) il me prends le premier code en 3. Comment distinguer le bon nom de l'image raster des autres noms.... :unsure:
  17. bigsyke

    Image raster

    Merci de ta reponse. J'ai deja eu ce problème d'image avec seulement un cadre avec le chemin qui apparait a l'interieur mais j'ai pu le resoudre. Ce que je voudrais (si c'est possible bien sur) c'est cliquer sur une image raster et recuperer via un lisp le nom de cette image. J'ai essayé avec(entget (car (entsel)) de "balayer" l'ename pour retrouver le nom de mon image raster mais sans succes
  18. bigsyke

    Image raster

    Bonsoir à toutes et tous, Est il possible de recuperer via un lisp, le nom d'une image raster en la selectionnant. J'ai eu beau regardé du coté des variables systemes je n'ai rien trouvé. Ce qui est bizarre c'est que je n'arrive pas a mettre la main sur le code dxf qui me donnerais le nom de l'image raster a coup de entget et de entnext alors que je le retrouve si j'enregistre mon dessin en dxf et que je le lis avec un editeur de texte... Quelqu'un peut il m'aider :unsure:
  19. bigsyke

    Besoin d'aide

    Merci pour ta reponse Je savais bien que ça devais etre un truc simple . Je pensais que mon filtre ne selectionnais que les entités avec le code (0 . "INSERT") car effectivement mon dessin dispose de bloc avec et sans attribut d'ou mon etonnement quand j'ai vu apparaitre (0 . "TEXT"). Je m'attendais plutot a un truc comme nil ou SEQEND en cas d'abscence d'attribut. Pour moi l'entité suivante de la base de donnée devais forcement etre un bloc comme preciser dans mon jeu de selection. En tout cas je ne connais pas ce code DXF et je te remercie beaucoup de ton aide :(rires forts):
  20. Bonjour à tous B) Je bute sur un problème relativement simple à mon avis...il dois y avoir quelque chose qui m'échappe J'ai donc un dessin ou je fais un ssget pour selectionner que les blocs (setq sel (ssget "X" '((0 . "INSERT")))) Donc ensuite j'extrait le premier ename (setq ent (ssname sel n)) Pour après avoir la liste des éléments que constituent l'entité (entget ent) Et j'obtient donc: ((-1 . <Nom d'entité: 7d8100f0>) (0 . "INSERT") (330 . <Nom d'entité: 7d806c10>) (5 . "11B6") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbBlockReference") (2 . "DISJ01") (10 267.36 237.525 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)) Jusque là tout va bien puisque j'ai bien le code (0 . "INSERT"). Maintenant je souhaite avoir les sous-liste de mon entité avec entnext et donc je fais: (entget (entnext ent)) Et j'obtient (-1 . <Nom d'entité: 7d810108>) (0 . "TEXT") (330 . <Nom d'entité: 7d806c10>) (5 . "11C1") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbText") (10 220.806 83.4879 0.0) (40 . 2.0) (1 . "Filerie 2.5² Cu") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "romans") (71 . 0) (72 . 1) (11 231.949 84.4879 0.0) (210 0.0 0.0 1.0) (100 . "AcDbText") (73 . 2)) Et la je comprends plus rien :blink: . Pourquoi j'obtient un code avec "TEXT" et pas "ATTRIB"? Le pire c'est qu'en faisant la meme manoeuvre mais en passant pas entsel au lieu de ssget je retrouve bien mes petits... Merci pour votre aide car là je seche completement
  21. bigsyke

    DXF 3

    Bonjour Patrick_35 et merci de ton attention. Je pensais pourtant que la boucle de selection se faisais en meme temps que ma boucle sur la recherche du texte. Ici precisement: (or (vl-string-search "5000CDE" (cdr (assoc 3 se))) (ssname ss nb)) Mon erreur ne serais pas dû au faite (vl-string-search "5000CDE" (cdr (assoc 3 se))) est peut etre egal a nil d'entré de jeu?
  22. bigsyke

    DXF 3

    Bonjour à toutes et à tous :) Bonne et heureuse année 2013 ;) Je suis entrain de m'exercer sur un petit lisp afin de changer la valeur d'un texte multiligne avec un code DXF 3. J'y suis donc allez gentillement avec ce lisp : (setq txt (car (entsel "Cliquez sur le texte: "))) (setq se (entget txt)) (while (vl-string-search "5000CDE" (cdr (assoc 3 se))) (setq nouv (cons 3 (vl-string-subst "6000CDC" "5000CDE" (cdr (assoc 3 se))))) (setq anc (assoc 3 se)) (entmod (subst nouv anc se)) (setq se (entget txt)) ) (princ "fin...") (princ) J'ai testé ce petit lisp sur un texte multiligne ou la valeur 5000CDE apparaissait a plusieurs reprise (il semblerait d'ailleurs qu'un saut de ligne sois representé par //P) et le lisp fonctionne bien. Maintenant, je souhaite modifier mon code pour cette fois ci faire une selection via ssget et voilà ce que cela donne: (setq ss (ssget "_X" '((0 . "MTEXT")))) (setq nb 0) (setq txt (ssname ss nb)) (setq se (entget txt)) (while (or (vl-string-search "5000CDE" (cdr (assoc 3 se))) (ssname ss nb)) (setq txt (ssname ss nb)) (setq se (entget txt)) (if (assoc 3 se) (progn (setq nouv (cons 3 (vl-string-subst "6000CDC" "5000CDE" (cdr (assoc 3 se))))) (setq anc (assoc 3 se)) (entmod (subst nouv anc se)) (setq se (entget txt)) ) ) (setq nb (+ 1 nb)) ) (princ "fin...") (princ) Et comme vous vous en doutez,ça marche pas <_< (sinon ce serai trop facile je suppose...) alors si quequ'un voit mon erreur et peut me l'expliquer le pourquoi du comment je lui en serais reconnaissant
  23. bigsyke

    Mystere...

    Merci pour vos points de vue Je ne savais pas que je pouvais désactiver l'accroche objet avec "_none" Patrick_35. J'avais pour ma part plutot pensé sur OSMODE mais ta methode est plus rapide ;) J'ai aussi l'habitude de mettre mes cartouches en 0,0 Fraid mais quand tu récupères des dessins fait par d'autre personne qui bricole des trucs sur autocad comme explosé des hachures pour pouvoir les modifier tu es obligé de faire avec car tu n'as pas le budget temps pour tout reprendre. Pour ce qui est de ma tête elle est entrain de reprendre forme humaine...tout doucement B)
  24. bigsyke

    Mystere...

    Alors là j'en tombe des nues :o J'ai effectivement désactivé le mode d'accrochage et tout marche impeccablement :D Dire que je me suis tapé la tete contre les murs durant des heures sans avoir trouvé...mille merci pour votre aide et vos conseils!! Tramber je prends acte de tes conseils et éviterai autant que possible les conversions et manipulation de chaine de caractère Didier voici l'esprit de mon lisp.J'ai une page de garde A3 avec un cartouche,une liste de folio représente sous la forme d'un tableau avec des croix placé en fonction de l'indice impacté et du numéro de folio...sur ce folio je cherche a implanté un bloc flèche et a effacer certaine partie du folio.Le truc c'est que mon folio n'est implanté au même endroit suivant les dossiers que j'ouvre,je suis donc obligé pour être sur de mes boites d'effacements se trouve au bonne endroit et n'efface pas n'importe quoi,de trouver un point de repère qui se trouve sur le folio.Ce point qui me servira de 0,0,0 en quelque sorte sera le point d'insertion d'un bloc nommé "CARTOUCHEA3" qui figure sur ma page de garde.Donc de ce point je détermine les coordonnées du point d'insertion de mon bloc ainsi que de mes fenêtres d'effacement en faisant un simple calcul de translation. Dans mon lisp cela donne la chose suivante: (setvar "cmdecho" 0) (setq cc (ssget "_X" '((2 . "CARTOUCHEA3")))) (setq ena (ssname cc 0)) (setq pnt (cdr (assoc 10 (entget ena)))) (setq xo (rtos (car pnt) 2 4)) (setq x1 (atof xo)) (setq yo (rtos (cadr pnt) 2 4)) (setq y1 (atof yo)) Ici je selectionne mon bloc "CARTOUCHEA3" et j'extrait les coordonnées de son point d'insertion qui sont x1 et y1 (setq x2 (- x1 179)) (setq y2 (+ y1 85.9108)) (setq x3 (- x1 190)) (setq y3 (+ y1 87.9108)) (setq x4 (+ x1 0.5)) (setq y4 (+ y1 103.9108)) (setq x5 (- x1 255.4961)) (setq y5 (+ y1 57.9108)) (setq x6 (- x1 209.4981)) (setq y6 (+ y1 248.9108)) La commence le calcul des points fait a partir des coordonnées du point d'insertion du bloc qui me servent de référant pour les coordonnées de mes autres point (setq pti2 (list x2 y2)) (setq pti3 (list x3 y3)) (setq pti4 (list x4 y4)) (setq pti5 (list x5 y5)) (setq pti6 (list x6 y6)) Ici je compose mes coordonnées de mes points (command "effacer" "boite" pti3 pti4 "" "") (command "effacer" "boite" pti5 pti6 "" "") (command "inserer" "FLECHE" pti2 "1" "1" "0") (setvar "cmdecho" 1) Une fois mes points définis,j’exécute les différentes commande associés Voilà Didier tu sais tout :D En tout cas mille merci pour vos aides et pour le temps que vous prenez pour nous répondre
  25. bigsyke

    Mystere...

    Bonjour, J'ai un drôle de problème et franchement je ne vois pas d’où cela peut provenir... Je cherche (entre autre) a implanter via un lisp une flèche a un endroit bien précis de mon folio A3 Pour ce faire je recherche les coordonnées du point d'implantation de mon bloc cartouche appelé "CARTOUCHEA3" et de ce point d'implantation je détermine les coordonnées de mon point d'insertion de mon bloc "FLECHE" ce qui me donne le lisp suivant: (defun c:FL() (setvar "cmdecho" 0) (setq cc (ssget "_X" '((2 . "CARTOUCHEA3")))) (setq ena (ssname cc 0)) (setq pnt (cdr (assoc 10 (entget ena)))) (setq xo (rtos (car pnt) 2 4)) (setq x1 (atof xo)) (setq yo (rtos (cadr pnt) 2 4)) (setq y1 (atof yo)) (setq x2 (- x1 179)) (setq y2 (+ y1 85.9108)) (setq x3 (- x1 190)) (setq y3 (+ y1 87.9108)) (setq x4 (+ x1 0.5)) (setq y4 (+ y1 103.9108)) (setq x5 (- x1 255.4961)) (setq y5 (+ y1 57.9108)) (setq x6 (- x1 209.4981)) (setq y6 (+ y1 248.9108)) (setq pti2 (list x2 y2)) (setq pti3 (list x3 y3)) (setq pti4 (list x4 y4)) (setq pti5 (list x5 y5)) (setq pti6 (list x6 y6)) (command "effacer" "boite" pti3 pti4 "" "") (command "effacer" "boite" pti5 pti6 "" "") (command "inserer" "FLECHE" pti2 "1" "1" "0") (setvar "cmdecho" 1) ) Le problème c'est que lorsque j’exécute le lisp mon bloc FLECHE ne s’insère pas au point pti2 mais legerement en dessous... Concrètement si je lance le lisp ma flèche est mal positionné et pourtant lorsque je tape la commande suivante: Commande: !pti2 (215.0 90.9108) ce qui represente bien le point d'insertion recherché! Pire encore,lorsque je tape la commande suivante : Commande: l LIGNE Spécifiez le premier point: !pti2 (215.0 90.9108) Spécifiez le point suivant ou [annUler]: le point d'insertion du premier point ne corresponds pas au point (215,90.9108) :blink: Alors que si j'effectue la commande suivante: Commande: l LIGNE Spécifiez le premier point: 215,90.9108 Spécifiez le point suivant ou [annUler]: *Annuler* le point d'insertion du premier point corresponds bien aux coordonnées 215,90.9108!! Si quelqu'un y comprends quelque chose je serais ravie de connaitre le pourquoi du comment de la chose
×
×
  • 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é