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
-
Exceptions et anomalies dans certaines fonctions Lisp
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Visual LISP
Fonctions de comparaison <, >, >=, <=, /=, = Pour inaugurer le fil je me lance avec les fonctions <, >, >=, <=, /=, =. Bien que ces fonctions comparent en théorie exclusivement des arguments de type nombre (integer, real) ou string. Elles sont également capables d'évaluer les expressions symboliques T et nil… Ex : (< nil T) retourne T (>= nil T) retourne nil Avec toutefois quelques exception à connaitre si on prend l'hypothèse que les fonctions comparent des valeurs booléens, la fonction /= retourne toujours nil et la comparaison de 2 le symbole T n'est pas possible.. Ex: (< T T) retourne ; erreur: type d'argument de comparaison incorrect: T T Une autre particularité un peu plus intéressante est cette fois de permettre l'évaluation d'arguments nombre ou string avec nil. (< nil -1 0 1) retourne T (< nil "a" "b" "c") retourne T C'est de cette propriété que je me suis inspiré ici pour écrire un code plus concis. -
Bonjour, Pour faire suite à une discussion récente sur le forum, vla-get-textstring -> Ne donne pas forcement la bonne valeur, consultable ici Je propose de créer ici un fil de discussion pour répertorier les limitations ou exception (plus ou moins connus et non documenté) de certaines fonctions lisp.
-
Bien vu, et j'ose même pas imaginer ce sur quoi tu t'exerçais pour trouver ça… ;) _$ (vla-get-textstring (vlax-ename->vla-object (car (entsel)))) "¦" _$ _$ (cdr (assoc 1 (entget (car (entsel))))) "\U+25A0" _$ Merci
-
problème accrochage lors de la création de polyligne
VDH-Bruno a répondu à un(e) sujet de Lespounse dans AutoCAD 2015
Bonjour, A vérifier si dans les Options d’environnement dans les préférences utilisateurs la préférence va bien à la saisie clavier plutôt qu'a l'accrochage objet (variable OSNAPCOORD) A+ -
[Challenge] Comparer des listes hétérogènes
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Pour aller plus loin en LISP
Bonjour, Une petite en passant certainement pas la plus rapide, mais au moins la plus courte.. (defun bv:contentEqual (l m) (equal (vl-sort (mapcar 'vl-prin1-to-string l) '<) (vl-sort (mapcar 'vl-prin1-to-string m) '<)) ) -
Bonjour Demixav, En fait @ sert effectivement à la saisie relative si il précède la saisie de coordonnées, mais il peut également faire office de macro caractère. Utilisé seul en réponse à l'invite d'une commande le symbole @ retourne le dernier point cliqué ou plus exactement les coordonnées mémorisés dans la variable Lastpoint. C'est ce qui était suggeré par bonuscad dans la première routine Lisp du lien auquel il faisait référence.. Donc pour un cercle tu peux saisir @ pour spécifié le centre du cercle sur le dernier point cliqué. A+
-
Re, Effectivement le code de la seconde routine propose d'insérer des marques de type point, donc plus besoin de rappeler les coordonnées mémorisées dans la variable laspoint ;) A+
-
Pas besoin de taper laspoint Tu lance la commande cercle, puis en réponse centre du cercle tu tape @ A+
-
Oui c'est ça, pour un bloc ou un cercle au moment d'entrer le point d'insertion, tu saisi @ au clavier, pour rappeler les coordonnées mémorisées dans la variable lastpoint A+
-
Bonjour, Je viens de tester la routine de bonuscad, son Lisp est bien pratique pour ce type de demande sur des objets curvilignes, personnellement j'ai rarement ce genre de besoin donc jusqu'ici en natif avec AutoCAD et pour des cas similaire, je me débrouillais avec la commande mesurer. A+
-
Bonjour, On a tous fait cela, oui ça a été pratique avant les versions 2000 et la possibilité d'avoir des calques non imprimable, mais maintenant je ne vois plus trop l'intérêt… A+
-
Pour info une petite précision, c'est seulement quant le calque 0 est désactivé ou gelé que les entités du calque Defpoint ne sont plus sélectionnable... A+ Edit: Oupss doublon, car visiblement tu as trouvé par toi même en parallèle, tant mieux
-
Bonjour, Pas besoin de geler tes calques, fait une sélection rapide _QSELECT des objets sur le calque defpoint A+
-
[Challenge] Comparer des listes hétérogènes
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Pour aller plus loin en LISP
Excellent Patrick_35 :), en plus d'être concise, ta dernière version semble la plus efficace "d'après mes tests" (même si je reste prudent dans les comparaisons entre fonctions). Ps: si tu ajoutes un espace entre le B et la parenthèse tu pourra garder un b minuscule -
[Challenge] Comparer des listes hétérogènes
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Pour aller plus loin en LISP
Re, Excellente contribution (gile), pour ma part je me suis orienté sur une solution plus basique.. (defun bv:contentEqual (a b / f) (defun f (a b c) (cond ((not (and a b )) (not (or a b ))) ((equal (car a) (car b ) 1e-8) (f (cdr a) (append c (cdr b )) nil)) (T (f a (cdr b ) (cons (car b ) c))) ) ) (f a b nil) ) Solution dont j'ai cherché à optimisée le traitement, en supprimant l'appel à la fonction append. (defun bv:contentEqual (a b / f g) (defun f (a b c) (cond ((not (and a b )) (not (or a b ))) ((equal (car a) (car b ) 1e-8) (g (cdr a) (cdr b ) c)) (T (f a (cdr b ) (cons (car b ) c))) ) ) (defun g (a b c) (cond ((null c) (f a b c)) ((equal (car a) (car c) 1e-8) (g (cdr a) b (cdr c))) (T (g a (cons (car c) B) (cdr c))) ) ) (f a b nil) ) A+ Ps: (gile) je t'ai pris l'appellation contentEqual , que je trouve beaucoup plus parlante, merci -
[Challenge] Comparer des listes hétérogènes
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Pour aller plus loin en LISP
Bonjour, C'est du rapide je regarderai cela un peu plus dans le détail en soirée, j'attend encore pour donner ma version. A+ Bruno -
[Challenge] Comparer des listes hétérogènes
VDH-Bruno a posté un sujet dans Pour aller plus loin en LISP
Bonsoir, Une petite idée de challenge m’a traversé l’esprit, le but serait de pouvoir comparer des listes constitués d’élément pouvant être de type différent, et ce indépendamment de leurs positions dans la liste. Dans le principe si tous les éléments de la liste 1 sont présents dans la liste 2 et vice-versa, la fonction retourne T, ex : (compare-p '(1 2 "abc" 2 (3.4 "d")) '(2 2 (3.4 "d") "abc" 1)) retourne T Sinon la fonction retourne nil, ex : (compare-p '(1 2 "abc" 2 (3.4 "d")) '(2 3 (3.4 "d") "abc" 1)) retourne nil Bon code -
Bonjour Didier, Tiens c'est rigolo cette histoire de cadenas, ça me rappel cette discussion sur la version 2012 (ou la couleur du cadenas était inversé), tu nous fais constater qu'au fil des versions avec leurs allers et retours sur la couleur du cadenas, ça laisse trainer des buggs d'affichage dans l'interface graphique ;) . A+ (Ps: Sans changer de version depuis 2006, je suis maintenant à jour avec la version 2015 sur la couleur du cadenas :D )
-
Bonjour CADXP, Je suis très peu présent sur la toile, à part CADxp ou je contribue dans le forum Lisp, il y avait le Site du Zero (SdZ) ou je me sentais bien, en accord avec dans le ton et l'esprit, j'en étais un lecteur régulier. Il y a plus d'un an lorsque son créateur a décidé de créer la société IT et dans faire OpenClassroms (OC), ce site a à mes yeux a perdu beaucoup de son intérêt… J'ai très récemment découvert avec joie que depuis Juillet dernier, l'équipe de bénévoles qui œuvraient ont entrepris de remonter un site, avec l'ambition assumé de faire revivre l'esprit qui régnait sur le SdZ. Ce site s'appelle Zeste de Savoir (ZdS) les liens: https://zestedesavoir.com/tutoriels/ https://zestedesavoir.com/forums/ Voilà, je voulais vous faire partager le plaisir que j'ai eu de retrouver certains de mes tutoriels préférés qui m'ont permis d'acquérir le vernis de connaissance dont je me sers aujourd'hui dans mes Lisp. A+
-
Salut, Il me semblait bien avoir lu quelques lignes de code sur le sujet, regarde si tu trouve ton bonheur dans celle-ci écrite par (gile): http://cadxp.com/topic/35699-programmer-autolisp-pour-utf-8/page__view__findpost__p__194338 A+ Bruno
-
Re, Ou sans programmation en passant par la fenêtre de propriété -> Texte -> Décalage du texte NB: Si bien sur cela existe encore sous 2010.. A+
-
Salut, Ce qui suit n'est pas peut-être plus d'actualité sur version récente, voire carrément obsolète…, je développe ma réponse précédente sur la variable DIMGAP Sur ma vieille version non plus je te rassure, il n'y a pas de mise à jour avec les lignes de repère existante , DIMGAP n'agira que sur les nouvelles lignes de repère.. La valeur que tu recherches est enregistrée dans les données étendues de l'entité (du moins sur ma version 2007), donc propre à chaque ligne de repère et sans mise à jour automatique. Pour connaître cette valeur sur une ligne de repère, tu peux tester cette expression Lisp sur ta ligne de commande. (cdr (assoc 1040 (cdadr (assoc -3 (entget (car (entsel)) '("ACAD")))))) Pour appliquer la valeur de DIMGAP sur les lignes de repère existante, je pense que le mieux est de passé par quelques lignes de programmation, ci-dessous un code qui devrait faire l'affaire: ;; VDH-Bruno (Testé sous AutoCAD 2007) 26/11/2014 ;; Prend en compte la valeur de la Variable Dimgap (du style de cote courant) pour mettre à jour le ;; cadre des lignes de repère sélectionnés: ;; Si DIMGAP positif pas de cadre ;; Si DIMGAP négatif affichage d'un cadre, écart entre texte et bordure en fct° de la valeur numérique (defun c:LRCadre () (cond ((ssget "_I" '((0 . "LEADER")))) ((ssget '((0 . "LEADER"))))) (vla-delete (vlax-map-collection (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object))) '(lambda (o) (and (vlax-property-available-p o 'TextGap) (vla-get-Annotation o)(vla-put-TextGap o (getvar 'dimgap)))) ) ) (sssetfirst nil nil) (princ) ) Cordialement Bruno (Ps: Le code ne s'applique pas aux Lignes de repère multiple que je ne connais pas sur ma version) Edit code MAJ pour traiter les LRepères sans annotation
-
Bonjour, Si cela n'a pas changé depuis 2007, regarde du côté de la variable DIMGAP pour le style de cote courant. C'est cette variable qui est prise en compte dans les paramètres de ta ligne de repère A+ Bruno
-
Re, Pour compléter/pinailler et faire également écho à une discussion que nous avons déjà eu ici... Au sujet de la prise en compte des sélections "grippés", la fonction native lisp (ssgetfirst) est 2 fois plus rapide au benchmark que la sélection implicite (ssget "_I"). En fait l'usage de l'expression (ssget "_I") se justifie lorsque l'on souhaite appliquer un filtre de sélection sur les objets grippés. Donc dans le cas présent pour être "puriste" la sélection implicite pourrait s'établir comme ceci: (cond ((cadr(ssgetfirst))) ((ssget))) A+ Bruno Ps: N'ayant pas de réunion cette fois ci, j'ai pris le soin de finasser, désolé ;-)
-
Bonjour, Merci à zebulon_ d'avoir complété la réponse avec l'usage du symbol @, et merci à Olivier pour le clin d'oeil (j'avoue y avoir pensée mais j'étais attendu en réunion et je n'ai pas pris le temps de finasser ma réponse) Pour la sélection implicite personnellement je l'aurais bien vu comme ceci ;) : (cond ((ssget "_I")) ((ssget))) Mais comme souligné par zebulon_, pour coller un peu plus à la demande il est possible d'adapter le principe pour une sélection précédente au lieu d'une sélection implicite.. (cond ((ssget "_P")) ((ssget))) A+ Bruno
