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
-
Bonjour Ci-dessous quelques ligne de code à glisser dans un des fichiers de chargement automatique d'AutoCAD, normalement tu devrais sur le même model que la solution (setq useri1 (length (layoutlist)) ) avoir accès à une variable lisp *NombrePresentation* qui se met à jour automatiquement, à mettre dans un champ pour renseigner le nombre de présentation. Inconvénient: ceci ne fonctionnera que sur les postes ayant les lignes de codes chargées, pense à convertir le champ en texte avant de distribuer le dwg, ou de diffuser les lignes de code lisp. ;; VDH-Bruno le: 10-07-2017 ;; ----------------- NombrePresentation V 1.00 ------------------------------------- ;; Crée une variable lisp global *NombrePresentation* renseignant le nombre de ;; présentation présente dans le dessin actif. (vl-load-com) ;; Déclaration du réacteur ;; (vlr-remove *command-reactor-NombrePresentation*) (or *command-reactor-NombrePresentation* (setq *command-reactor-NombrePresentation* (vlr-command-reactor "Nombre Presentation" '((:vlr-commandEnded . NombrePresentation-callback)))) ) ;; Routine de mise à jour automatique de la variable lisp *NombrePresentation* (defun NombrePresentation-callback (rea evenement) (and (eq (car evenement) "LAYOUT_CONTROL") (setq *NombrePresentation* (length (layoutlist))) ) (princ) ) ;; Initialisation de la variable (NombrePresentation-callback nil (list "LAYOUT_CONTROL")) A+
-
Toutes les entités couleurs Ducalque sauf les hachures
VDH-Bruno a répondu à un(e) sujet de zara dans LISP et Visual LISP
Bonjour, Ceci devrait également convenir: (command "CHPROP" (ssget "X" '((0 . "~HATCH"))) "" "CO" "DUCALQUE" "") A+ -
[Résolu] Ajout de paire pointées dans une liste
VDH-Bruno a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Effectivement pour retourner une liste depuis une liste le couple mapcar/lambda est une évidence, mais les fonctions récursives aussi car elles empilent et dépilent les appels de la même manière qu'est construite une liste.. (defun indLst (i l) (if l (cons (cons i (car l)) (indLst (1+ i) (cdr l))) ) ) _$ (indLst 1 '("tata" "toto" "titi" "tutu")) ((1 . "tata") (2 . "toto") (3 . "titi") (4 . "tutu")) A+ Bruno -
[Résolu] Ajout de paire pointées dans une liste
VDH-Bruno a répondu à un(e) sujet de DenisHen dans Débuter en LISP
D'où l'utilité de travailler avec assoc et les paires pointées, comme dans les codes dxf. Sinon la fonction reverse est ton amie _$ (reverse '((2 . "titi") (1 . "toto"))) ((1 . "toto") (2 . "titi")) A+ -
[Résolu] Ajout de paire pointées dans une liste
VDH-Bruno a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Bonjour, Une liste se construit par la tête "car" si tu utilises la fonction de constructeur de liste cons, sinon utilise append si tu veux mettre des listes bout à bout... ;; Créer une paire pointée (setq dotpair (cons 1 "toto")) -> (1 . "toto") ;; Créer une liste contenant une paire pointée (setq lstdotpair (cons dotpair nil)) -> ((1 . "toto")) ;; ou (setq lstdotpair (list dotpair )) -> ((1 . "toto")) ;; Ajouter une paire pointé à la liste de paire pointée (setq lstdotpair (cons (cons 2 "titi") lstdotpair)) -> ((2 . "titi") (1 . "toto")) A l'occasion je t'invite à relire cette discussion http://cadxp.com/topic/29314-ces-listes-qui-nen-sont-pas/page__view__findpost__p__159425 A+ -
Bonjour, En complément de ce qui précède la variable OSNAPCOORD, permet de préciser les priorités lors d'éventuels conflit entre les accrochages objets en cours et les saisies clavier de coordonnées (dans ou en dehors des scripts). Par défaut cette variable est réglée sur 2, dans ton cas il peut être intéressant d'envisager un réglage à 1. A+ Bruno
-
quoté ou pas quoté ? comment le savoir ?
VDH-Bruno a répondu à un(e) sujet de GEGEMATIC dans LISP et Visual LISP
Re, Oui des problèmes qui finissent par s'oublier car effectivement je me souviens maintenant d'une discussion ou tu avais soulevé un problème avec ce double quote + mapcar Ce qui m'avait fait préféré cette écriture plus robuste: _$ (mapcar '(lambda (x) (list 'quote x)) '(A B C D E)) ((QUOTE A) (QUOTE B) (QUOTE C) (QUOTE D) (QUOTE E)) Discution que tu peux retrouver ici -> quote quote A+ Bruno -
quoté ou pas quoté ? comment le savoir ?
VDH-Bruno a répondu à un(e) sujet de GEGEMATIC dans LISP et Visual LISP
Oui j'ai vu ça, comme quoi patauger ç'arrive même aux meilleurs, pour s'amuser et tester si on est au point avec quote et eval, un exercice amusant consiste à réécrire une vraie fonction apply Si si il est possible de "surquoter" les éléments d'une liste (mapcar 'quote lst) ((quote (1 2)) (quote (1 2))) EDIT du 17/05/2017: pour la bonne syntaxe voir code réponse 14 Dans ton expression précédente tu as "quoté" l'argument de ta fonction anonyme et non les éléments de ta liste A+ Bruno -
quoté ou pas quoté ? comment le savoir ?
VDH-Bruno a répondu à un(e) sujet de GEGEMATIC dans LISP et Visual LISP
Re, Au vu de la nature de tes listes, effectivement comme suggéré par Patrick_35 je préférerais la fonction equal à = Sinon pour le retour sur le point suivant: Pour appliquer vl-every à une liste d'argument variable, la bonne syntaxe est la suivante: _$ (setq lst '((1 2) ( 1 2))) ((1 2) (1 2)) _$ (apply 'vl-every (cons '= lst)) T A+ Bruno -
quoté ou pas quoté ? comment le savoir ?
VDH-Bruno a répondu à un(e) sujet de GEGEMATIC dans LISP et Visual LISP
Bonjour Gérald, Au risque de répondre à coté, je ne suis pas sur de comprendre la difficulté que tu exposes.. Dans le cas de plus de 2 listes (non constitué de sous liste) ;) _$ (apply 'and (mapcar '= '(1 2 3) '(4 5 6) '(7 8 9)))) nil _$ (apply 'and (mapcar '= '(1 2 3) '(1 2 3) '(1 2 3))) T ------ EDIT 1 ---------------------- Et si au moins une de tes listes est doublement "quoté" l'expression retournera nil _$ (apply 'and (mapcar '= '(1 2 3) ''(1 2 3) '(1 2 3))) nil Le car de ta liste étant de type SYM: (type (car ''(1 2 3))) => SYM (type (car '(1 2 3))) => INT ------ EDIT 2 -------------------- Oupsss j'avais pas lu ceci et cela me fait penser que ma proposition n'est qu'une réécriture de la fonction vl-every... A+ -
RECHERCHE D'UNE ROUTINE LISP OU AUTRE
VDH-Bruno a répondu à un(e) sujet de Chris24 dans LISP et Visual LISP
Le sujet portant sur une demande de solution en lisp, il est possible de mixer les 2 propositions en adaptant très légèrement le code de (gile), donc très rapidement: (defun c:debitfield (/ getAttribs getAtt getVal block attribs puissance delta debit elst) (defun getAttribs (ent / elst rslt) (while (and ent (= (cdr (assoc 0 (setq elst (entget ent)))) "ATTRIB")) (setq rslt (cons (cons (cdr (assoc 2 elst)) ent) rslt) ent (entnext ent) ) ) rslt ) (defun getAtt (tag /) (cond ((cdr (assoc tag attribs))) (T (prompt (strcat "\nL'attribut '" tag "' est introuvable"))) ) ) ;| (defun getVal (tag / att val) (if (and (setq att (getAtt tag)) (< 0. (setq val (atof (cdr (assoc 1 (entget att)))))) ) val (prompt (strcat "\nLa valeur de l'attribut '" tag "' n'est pas valide")) ) ) |;;; remplace la fonction getval (defun getid (tag) (vla-get-ObjectID (vlax-ename->vla-object (getAtt tag)))) (and (setq block (car (entsel "\nSélectionnez un bloc: "))) (setq attribs (getAttribs (entnext block))) (setq puissance (getid "PUISSANCE")) (setq delta (getid "DELTA")) (setq debit (getAtt "DEBIT")) (setq elst (entget debit)) (entmod (subst (cons 1 (strcat ;; (rtos (/ (* puissance 0.86) delta) 2 0) " l/h")) "%<\\AcExpr (%<\\AcObjProp Object(%<\\_ObjId " (itoa puissance) " 0>%).TextString>%*0.86/%<\\AcObjProp Object(%<\\_ObjId " (itoa delta) " 0>%).TextString>%) \\f \"%lu2%pr2%zs8\">%" ) ) (assoc 1 elst) elst ) ) ) (command "_regen") (princ) ) A+ Bruno -
RECHERCHE D'UNE ROUTINE LISP OU AUTRE
VDH-Bruno a répondu à un(e) sujet de Chris24 dans LISP et Visual LISP
Re, Plusieurs liens sur le sujet, ou je me suis essayé à une explication (avec plus ou moins de clarté…), discussion à lire dans leur intégralité. http://cadxp.com/topic/37644-calcul-entre-attributs-dans-bloc/page__view__findpost__p__207410 http://cadxp.com/topic/37644-calcul-entre-attributs-dans-bloc/page__view__findpost__p__210490 http://cadxp.com/topic/40695-pb-champ-dans-bloc/page__view__findpost__p__228056 En espérant que tu y trouve ton bonheur. A+ Bruno -
RECHERCHE D'UNE ROUTINE LISP OU AUTRE
VDH-Bruno a répondu à un(e) sujet de Chris24 dans LISP et Visual LISP
Re, https://we.tl/HpZLqFj6gF Essaye voir si cela peux te convenir fonctionne sous 2007 et + A+ Bruno -
RECHERCHE D'UNE ROUTINE LISP OU AUTRE
VDH-Bruno a répondu à un(e) sujet de Chris24 dans LISP et Visual LISP
Bonjour, Je veux bien essayer de te joindre un exemple si c'est possible (et si je suis bien dans le sujet), mais j'ai besoin de comprendre comment sont renseigné tes attributs puissance et delta (car je ne peux le voir sur ma version) A+ Brun0 -
RECHERCHE D'UNE ROUTINE LISP OU AUTRE
VDH-Bruno a répondu à un(e) sujet de Chris24 dans LISP et Visual LISP
Bonjour, J'ai été faire un petit tour rapide sur le sujet en question, je répond ici n'ayant pas de compte sur ce forum, et je répond peut être à coté car je ne connais pas les évolutions du logiciel depuis d'AutoCAD 2007... Mais pour faire ce que tu souhaites sur version ancienne c'est possible, mais dans une référence de bloc pour avoir accès propriétés des attributs et pas dans une définition de bloc. A l'usage sur d'ancienne version, dans ton dessin tu ne dois pas insérer une définition de bloc mais une référence de bloc.. A+ Bruno -
[Résolu] Sélection d'un texte OU saisi d'un texte.
VDH-Bruno a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Bonjour Consernant l'écriture d'une fonction spécifique pour la une sélection d'un texte ou une saisie numérique Je profite de l'occasion pour faire remarquer que les fonctions entsel, nentsel et nentselp permettant la saisie de coordonnées, elles ne réagissent pas de la même manière sur la ligne de commande en fonction d'une saisie numérique ou d'une saisie alphanumérique Je pense qu'au moyen de la variable lastprompt on peut se servir de cette particularités pour filtrer la saisie, ma proposition de code: ;; SelGetNum ;; Saisie numérique ou sélectionnez une entitée *TEXT ou ATTRIB ;; Retourne un texte (STR) ou nil ;; ;; Exemple: ;; (SelGetNum "\nEntrez un nombre ou sélectionnez un texte: ") (defun SelGetNum (msg / ent rep) (cond ((and (setq ent (car (nentsel msg))) (wcmatch (cdr (assoc 0 (entget ent))) "*TEXT,ATTRIB")) (cdr (assoc 1 (entget ent))) ) ((numberp (read (setq rep (vl-string-left-trim msg (getvar 'lastprompt))))) rep) ) ) A+ -
Un grand merci à vous 2, j'ai regardé et testé vos 2 codes (très complémentaire pour mon besoin), j'ai là toute la matière pour arriver à ce que je souhaiterai, il y a plus cas.. ;) A+ Bruno
-
Bonjour, Qui aurait un lien, routine, co-routine ou extrait de code lisp, de décalage des lwpolyligne croisées. Pour être un peu plus clair sur ma version (peut-être cela à évolué depuis), une polyligne optimisé lorsqu'elle est décalé se coupe à chaque croisement… Je cherche une routine ou extrait de code qui traite ce décalage de polyligne en la gardant en un seul morceau continu, dans l'optique d'avoir une base de départ à adapter rapidement pour à un besoin ponctuel. D'avance merci VDH-Bruno
-
Bonjour Non effectivement il ni en pas l'utilité si vraiment tu voulais utiliser mapcar, ce serai après cette première factorisation. Comme montré dans ce sujet. En effectuant une seconde factorisation, sur la séquence de déclaration de commande (defun c:C0() (truc "0")) (defun c:C1() (truc "AXES")) (defun c:C2() (truc "CACHE")) (defun c:C3() (truc "CARTOUCHE")) (defun c:C4() (truc "COTATION")) (defun c:C5() (truc "FIN")) (defun c:C6() (truc "HACHURES")) (defun c:C7() (truc "TEXTE")) (defun c:0p() (truc "PIPE")) (defun c:0e() (truc "Existant")) (defun c:0f() (truc "Fittings")) .... Comme ceci, pour créer tes fonctions à la volé: (mapcar '(lambda (f v) (eval (list 'defun f nil (list 'truc v)))) '(c:C0 c:C1 c:C2 c:C3 c:C4 c:C5 c:C6 c:C7 c:0p c:0e c:0f) '("0" "AXES" "CACHE" "CARTOUCHE" "COTATION" "FIN" "HACHURES" "TEXTE" "PIPE" "Existant" "Fittings") ) A+
-
Lisp Calcul Côte Facile ... Sauf pour moi
VDH-Bruno a répondu à un(e) sujet de Topheur dans AutoCAD 2014
Bonjour Pour une réponse AutoCAD je me servirai de l'accrochage objet milieu entre 2 points m2p à l'invite de commande d'Autocad Pour une variante lisp et pour mémoire, en lisp il assez facile de faire appel à la calculatrice géométrique en ligne d'AutoCAD (définie comme une application extérieur: geomcal.arx) Calcul du milieu entre 2 points (setq p1 (getpoint) p2 (getpoint) pm (c:cal "plt(p1,p2,0.5)") ) Ceci étant une variante très spécifique à AutoCAD, les versions données précédemment par (gile) étant évidemment beaucoup plus pertinente pour l'apprentissage et la compréhension de la programmation Lisp. A+ -
Bonjour Olivier J'ai connu ça, et pire encore.. Mais bon même en trainant des pieds, s'il y a une volonté de suppression des droits administrateurs tu n'y couperas hélas pas. Mais insiste pour qu'AutoCAD puisse s'exécuter en tant qu'administrateur, cela limitera certains désagrément notamment avec tes palettes. A+ Bruno
-
Probl DropBox et AutoCAD/REVIT/etc
VDH-Bruno a répondu à un(e) sujet de lecrabe dans CAO, généralités
Le prend pas pour toi, c'est pas de ta faute tu n'es pas développeur chez Dropbox que je sache ;) A+ Bruno (Ps: profite de tes vacances et repose toi bien) -
Probl DropBox et AutoCAD/REVIT/etc
VDH-Bruno a répondu à un(e) sujet de lecrabe dans CAO, généralités
J'ai vécu le truc hier, je n'ai trouvé la solution que ce matin sur un forum window, j'ai perdu 1/2 journée de prod au plus mauvais moment sur les dossiers en cours :angry: :angry: :angry: -
Ou plus classiquement copie-colle ton expression de champs dans des textes sur tes différents onglets, plutôt que l'entités texte. A+
-
Bonjour, Allez ma petite astuce du jour que j'utilise en version 2007, consiste à dupliquer tes champs sur l'espace Objet, pour les insérer dans l'onglet de ton choix passe par la commande changespace, cette commande de permettra de garder les liens entre ton champs et l'ID de l'objet source. Ce que ne permet pas le copier-coller de window Salutations au forum VDH-Bruno
