Aller au contenu

VDH-Bruno

Membres
  • Compteur de contenus

    1 146
  • Inscription

  • Dernière visite

  • Jours gagnés

    20

Tout ce qui a été posté par VDH-Bruno

  1. VDH-Bruno

    Recherche une variable

    Salut BonusCAD Pour avoir déjà tenter quelque chose de similaire avec la fonction getvar ,avant de m’apercevoir qu’il était possible de récupérer la liste des variables AutoCAD via la Je peux dire que je me suis confronté très vite à la notion d’explosion combinatoire (que j’ai apprise à l’occasion) en atteingnant péniblement la combinaison du 5ème caractères après plus d’une demi-journée. En fait, on peut apparenter cela au type de code qualifié de brut de force utilisé pour craker des mots de passe. Pour générer ma liste je m’étais basé sur cette fonction, car selon moi une récursive ne s’impose pas.. ;; --------------------------------------------------------------- ;; ar-1:n => Arrangement à Répétition de 1 à n (Version itérative) ;; --------------------------------------------------------------- ;; Argument: Une liste de symboles (d'éléments) ;; Retourne: Tous les arrangements de 1 à n ;; Exemple : ;; (ar-1:n '(A B C) 2) ;; => ((A) (B) (C) (A A) (A B) (A C) (B A) (B B) (B C) (C A) (C B) (C C)) (defun ar-1:n (l n / lst res) (setq lst '(nil)) (repeat n (setq res (append res (setq lst (apply 'append (mapcar '(lambda (x) (mapcar '(lambda (y) (cons x y)) lst)) l))) ) ) ) ) Donc je ne pense pas que la solution soit là, à moins que je ne me trompe et n’ai rien compris à ton idée… A+
  2. Salut, Pour un lisp utilise la fonction type: (if (= (type (eval (read var))) 'USUBR) ;test si c'est une fonction lisp ((eval (read var))) ; lance le lisp ) Ps : Avec boundp il faudra privilégier la syntaxe suivante (boundp ‘var) si je ne me trompe car dans le teste (boundp (read var)), read renverra une erreur si var est nil.. A+
  3. Salut, Comme tout le monde y va de sa petite solution, personnellement je fais comme Didier à la nuance près que je trace une DROITE (_xline) ou une demi-droite (_ray ), façon planche à dessin c’est très efficace.. Donc pour tracer une pente à 6.5% sous autoCAD (Ps : Mais après avoir testé le lisp de BonusCAD si j’ai un peu de temps je m'essayerai peut être à en écrire un.) Cordialement
  4. VDH-Bruno

    Recherche une variable

    Salut Patick_35 Je vais me rallier à l’avis de lecrabe, j’ai été jusqu'a déclaré un réacteur de type vlr-sysvar-reactor, et cela n’a rien donné … (or *acadvarreactor* (setq *acadvarreactor* (vlr-sysvar-reactor nil '((:vlr-sysVarChanged . trace-sysvar-callback)))) ) (defun trace-sysvar-callback (rea sysvar) (princ "\n") (princ (car sysvar))) A+ Bruno
  5. Merci (gile) pour le retour et la confirmation. A+
  6. Re, Merci à (gile) pour son coup d’œil averti, car la fonction a l’air séduisante et confortable d’utilisation, je n’exclut pas d’y recourir un jour :) ,(de plus il y a le source). Je comprends que tu puisse préférer cette voie, comme toi je préfère utiliser ce que je maitrise. Je rappellerai toute fois que c’est une superposition d’entité qui est proposé plus qu’une réelle substitution, pour simuler la substitution il faudrait en plus aller jouer avec le code dxf 60 (visibilité) de la sous entité du bloc , et sans teste préalable je ne saurai dire de tête si ça n’amène pas plus de soucis que cela en résoudraient… A+
  7. Bonjour, Effectivement ce n’est pas directement possible en lisp comme vient de le rappeler (gile) Dans le post que tu cites, il y en lien de James Allen vers cette autre discution http://forums.autodesk.com/t5/Visual-LISP-AutoLISP-and-General/Highlight-Nested-Lisp-Net-Interop/m-p/2464441 Dans laquelle il offre à la communauté la possibilité de charger un fichier HighlightNested.zip contenant une dll ainsi que le fichier source cs (C#) Visiblement cette dll écrite en .NET permet de définir une nouvelle fonction lisp, nenthl qui prendrait en argument la valeur de retour de la fonction lisp native nentsel, exemple : (nenthl (nentsel)) Cette nouvelle fonction accessible après un chargement préalable de la dll, permettrais de mettre en surbrillance une sous-entité comme celle appartenant à un bloc. Voilà pour la solution proposée dans le post auquel tu fais référence, je n’ai personnellement pas testé la dll et je ne suis pas compétent pour apprécier la qualité du fichier sources. Sinon pour ce qui est de définir des extensions de fonction en .NET (ou en ARX, d’ailleurs il me semble avoir lu que vlisp avait été écrit dans ce dernier) cela ce fait, d’ailleurs sur ce forum (gile) nous a déjà proposé une bibliothèque de fonction LISP définies sur le même principe. http://cadxp.com/index.php?/topic/34242-extension-pour-autolisp/page__p__185472__fromsearch__1#entry185472 Cordialement,
  8. Ou surtout plus justement <_< comme ceci le caadr dans des codes précédents étant un raccourci un peu malheureux.. ((lambda (ent) (if (and ent (wcmatch (cdr (assoc 0 (setq ent (entget ent)))) "MTEXT,TEXT")) (car (apply 'mapcar (cons '- (reverse (textbox (list (assoc 1 ent)(assoc 40 ent) (assoc 7 ent))))))) ) ) (car (entsel)) )
  9. Re, Ou plus simplement comme ceci en ne transmettant à textbox qu'une liste partiel correspondant aux élements à prendre en compte… ((lambda (ent) (if (and ent (wcmatch (cdr (assoc 0 (setq ent (entget ent)))) "MTEXT,TEXT")) (caadr (textbox (list (assoc 1 ent)(assoc 40 ent) (assoc 7 ent)))) ) ) (car (nentsel)) ) Ce qui permet de travailler indistinctement avec les TEXT et MTEXT (avec les restrictions rappelées précédemment), et même de connaitre tout ou partie de la longueur d’un texte.. A+
  10. Bonjour, Oui c’est bien dommage, sans doute parce que la fonction textbox a été écrit avant qu’apparaisse les entités MTEXT dans AutoCAD et que son code n’a jamais été révisé depuis… Mais même si il n’est pas possible d’utiliser textbox directement avec le nom d’entité, on peut tout de même arriver à un résultat en passant par les codes dxf 1 et le réglage préalable des codes 7 & 40 (respectivement TEXTSTYLE et TEXTSIZE) ce que j’avais omis de préciser précédemment… Une seconde illustration reprenant le souhait de Fraid : ((lambda (ent) (cond ((and ent (wcmatch (cdr (assoc 0 (setq ent (entget ent)))) "MTEXT,TEXT")) (setvar 'TEXTSTYLE (cdr (assoc 7 ent))) (setvar 'TEXTSIZE(cdr (assoc 40 ent))) (caadr (textbox (list (assoc 1 ent)))) ) )) (car (nentsel)) ) Certes le code est beaucoup moins robuste que celui de (gile) car les MTEXT doivent être homogène et ne pas utiliser de caractère spéciaux et être sur la même ligne, mais bon l’idée principal était de monter une autre voie que l’emploie systématique de GetBoundingBox fonction plus polyvalente. A rapeller également que l’idée de passer par le code 1 et le réglage éventuelle des codes 7 & 40 permet également de connaitre l’encombrement des textes sans que ceci ne soit créé... _$ (caadr (textbox (list (cons 1 "WWWWW")))) 79.296 _$ (caadr (textbox (list (cons 1 "iiiii")))) 24.864 Amicalement Bruno
  11. Dans le mien tu verra aucun problème de scu n'y de rotation ;)
  12. Re, Ca y est j'ai retrouvé un sujet similaire que j'avais en tête sur le même thème, je le recommande http://cadxp.com/index.php?/topic/28718-bounding-box-texdyn/ Cordialement
  13. Salut, Sinon en lisp avec textbox l'expression suivante retourne une liste (x y z) représentant l'encombrement du texte.. ((lambda (lst) (mapcar '- (cadr lst) (car lst))) (textbox (list (assoc 1 (entget (car (nentsel))))))) A+
  14. Re, Oui je le pense en testant rapidement, si tu lances l’expression suivante : (entget (car (nentselp))) Dans ton fichier servant d’Xref et celui dans le quelle il est insérer les noms de maintien (handle) semble respecté code 5 en dxf par ce biais tu dois donc pouvoir arriver à quelque chose.. Cordialement,
  15. Bonjour krunch, Pour bien comprendre ce qui se passe je te propose la démonstration inverse de l’exemple que tu as proposé c.a.d ouvre ton fichier servant d’Xref, lance ta routine passe le cercle en rouge et enregistre, va dans ton fichier dans lequel est chargé l’Xref la modif ne sera répercuté seulement si tu recharge ton Xref ou que tu quittes puis relance ton fichier ce qui rechargera l’Xref modifiée. Donc comme tu le vois point de hiatus dans tout cela lorsque tu ouvres un fichier contenant une Xref cette dernière est chargé en mémoire dans ton dessin (comme un fichier tampon) dans ton exemple tu accède à l’entité du fichier tampon (un double de l’entité d’origine) et c’est cette dernière que tu modifie mais à aucun moment tu n’as modifié l’entité présente dans le fichier source. A+
  16. Effectivement et c’est très joli comme ça
  17. Salut, Je le pense aussi, sinon une petite observation en passant (bien que j’ai une petite idée de la réponse), c’est voulu d’avoir un fichier d’aide et pas de bouton correspondant ? ;) Serai ce le début d'une longue série... A+ Ps : Je vois mieux à quoi tu faisais allusion en te repenchant sur les nombres romains
  18. Re Ou plus comme cela pour la première pour rester dans l’esprit de ce que je voulais montrer.. (defun c:sssd () (or (cadr (sssetfirst nil (ssget "_I" '((0 . "DIMENSION"))))) (sssetfirst nil (ssget '((0 . "DIMENSION")))) ) ) (Ps : Décidément à trop veiller le soir, la mise en route ce matin est assez laborieuse..)
  19. Oui c'est ce qui arrive quant on prend trop d'assurance :angry: , on post sans tester voilà la correction pour la première (defun c:sssd (/ js) (or (setq js (ssget "_I" '((0 . "DIMENSION")))) (setq js (ssget '((0 . "DIMENSION"))))) (sssetfirst nil js) ) A+
  20. Re En repensant à ta ligne de code, je pense que tu cherchais plus à faire quelque chose comme çela.. (defun c:sssd () (or (sssetfirst nil (ssget "_I" '((0 . "DIMENSION")))) (sssetfirst nil (ssget '((0 . "DIMENSION")))) ) ) Ou écrit comme ceci (defun c:sssd () (sssetfirst nil (cond ((ssget "_I" '((0 . "DIMENSION")))) ((ssget '((0 . "DIMENSION")))) ) ) ) A+
  21. Salut, Peut également s'écrire comme cela, pour filtrer les entitées gripper à l'écran.. (defun c:sssd () (sssetfirst nil (ssget "_I" '((0 . "DIMENSION")))))
  22. Salut, A cette occasion j’ai également découvert que la règle soustractive IV, IX etc… N’a pas toujours été la norme, cela c’est (entre autre) également noté IIII, VIIII etc… D’ailleurs Cet usage fut repris en horlogerie, où le chiffre 4 s'écrit IIII, essentiellement pour des raisons de lisibilité sur un cadran rond, surtout quand les bières (gravures chiffrées) y sont inclinées. Cela m’a beaucoup amusé de porter un autre regard sur le quadrant de mon horloge :(rires forts): , dire qu’il m’a fallu 40 ans et ce challenge pour observer et réfléchir à ce détail… :blink: Amicalement (Ps : Patrick_35 bien vu pour ta ligne de code, je dois avouer que je n’avais pas poussé plus loin la généralisation de l’usage de vl-string->list, merci car explodestr est une routine appelé dans d’autres fonctions bibliothèques).
  23. Bonsoir, En tombant sur ce challenge un peu par hasard, l’idée m’a plu, et je mis suis attelé dans la soirée histoire de voir si il restait encore de la place pour d’autres propositions : Pour les fonctions de conversions : Décimal en Romain : Je n’ai rien pondu de neuf qui puisse détrôner les codes proposés précédemment. Romain en Décimal: une variante qui devrait avoir sa place parmi celles de Patrick_35 et de (gile) ;; Conversion de chiffre Romain en Décimal ;; Exemple: (roman2arabic "MMXII") -> 2012 (defun roman2arabic (str / lst) (cond ((setq lst (assoc (substr str 1 2) '(("IV" . 4) ("IX" . 9) ("XL" . 40) ("XC" . 90) ("CD" . 400) ("CM" . 900)))) (+ (cdr lst) (roman2arabic (substr str 3))) ) ((setq lst (assoc (substr str 1 1) '(("I" . 1) ("V" . 5) ("X" . 10) ("L" . 50) ("C" . 100) ("D" . 500) ("M" . 1000)))) (+ (cdr lst) (roman2arabic (substr str 2))) ) ((= str "") 0) ) ) (Ps : Au passage sur cette version si on sort de la plage de caractère la fonction renvoie une erreur, plutôt qu'un résultat erroné) Pour la fonction d'incrémentation : Ma solution premiere ;; VDH-Bruno Explose un string (fonction symétrique à strcat) ;; Exemple: (explodestr "string") -> ("s" "t" "r" "i" "n" "g") (defun explodestr (str) (if (/= str "") (cons (substr str 1 1) (explodestr (substr str 2))))) (defun I+ (s / foo) (defun foo (n l r) (cond ((and r (= n (car l) (cadr l) (caddr l))) (if (= (cadddr l) (car r)) (cons (cadr r) (cons n (cddddr l))) (cons (car r) (cddr l)) ) ) ((and (/= (car l) (cadr l)) (= n (cadr l))) (foo (car l) (cddr l) (cddr r)) ) (T (cons n l)) ) ) (apply 'strcat (reverse (foo "I" (reverse (explodestr s)) '("V" "X" "L" "C" "D" "M") ) ) ) ) Puis une seconde version sur le même algorithme, mais cette fois reprenant l’idée qui consiste à transformer la chaine en liste de caractère codé. (defun I+ (s / foo) (defun foo (n l r) (cond ((and r (= n (car l) (cadr l) (caddr l))) (if (= (cadddr l) (car r)) (cons (cadr r) (cons n (cddddr l))) (cons (car r) (cddr l)) ) ) ((and (/= (car l) (cadr l)) (= n (cadr l))) (foo (car l) (cddr l) (cddr r)) ) (T (cons n l)) ) ) (vl-list->string (reverse (foo 73 (reverse (vl-string->list s)) '(86 88 76 67 68 77)) ) ) ) A+
  24. Bonjour, Avec l'expression suivant pour gripper ta sélection (sssetfirst nil (ssget "_x" '((0 . "DIMENSION")))) Sinon l'expression que tu donne renvoie bien une sélection Cordialement
  25. VDH-Bruno

    Le vapotage !

    Salut, J’en suis très heureux pour toi, personnellement j’ai également été un gros fumeur, j’ai stoppé l’année dernière à la naissance de mon petit dernier, et je confirme c’est que du bénef d’ailleurs ça ce voit.. ;) A+
×
×
  • 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é