VDH-Bruno
Membres-
Compteur de contenus
1 146 -
Inscription
-
Dernière visite
-
Jours gagnés
20
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par VDH-Bruno
-
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+
-
Variable vers Commandes
VDH-Bruno a répondu à un(e) sujet de Fraid dans Pour aller plus loin en LISP
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+ -
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
-
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
-
Comment highliter une entité imbriquée ?
VDH-Bruno a répondu à un(e) sujet de krunch dans Pour aller plus loin en LISP
Merci (gile) pour le retour et la confirmation. A+ -
Comment highliter une entité imbriquée ?
VDH-Bruno a répondu à un(e) sujet de krunch dans Pour aller plus loin en LISP
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+ -
Comment highliter une entité imbriquée ?
VDH-Bruno a répondu à un(e) sujet de krunch dans Pour aller plus loin en LISP
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, -
Taille effective d'un texte
VDH-Bruno a répondu à un(e) sujet de Fraid dans Pour aller plus loin en LISP
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)) ) -
Taille effective d'un texte
VDH-Bruno a répondu à un(e) sujet de Fraid dans Pour aller plus loin en LISP
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+ -
Taille effective d'un texte
VDH-Bruno a répondu à un(e) sujet de Fraid dans Pour aller plus loin en LISP
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 -
Taille effective d'un texte
VDH-Bruno a répondu à un(e) sujet de Fraid dans Pour aller plus loin en LISP
Dans le mien tu verra aucun problème de scu n'y de rotation ;) -
Taille effective d'un texte
VDH-Bruno a répondu à un(e) sujet de Fraid dans Pour aller plus loin en LISP
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 -
Taille effective d'un texte
VDH-Bruno a répondu à un(e) sujet de Fraid dans Pour aller plus loin en LISP
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+ -
Modifier les objets d'une XRef
VDH-Bruno a répondu à un(e) sujet de krunch dans Pour aller plus loin en LISP
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, -
Modifier les objets d'une XRef
VDH-Bruno a répondu à un(e) sujet de krunch dans Pour aller plus loin en LISP
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+ -
Effectivement et c’est très joli comme ça
-
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
-
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..)
-
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+
-
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+
-
Salut, Peut également s'écrire comme cela, pour filtrer les entitées gripper à l'écran.. (defun c:sssd () (sssetfirst nil (ssget "_I" '((0 . "DIMENSION")))))
-
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).
-
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+
-
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
-
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+
