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. 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.
  2. 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.
  3. 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
  4. 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+
  5. 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) '<)) )
  6. 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+
  7. 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+
  8. Pas besoin de taper laspoint Tu lance la commande cercle, puis en réponse centre du cercle tu tape @ A+
  9. 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+
  10. 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+
  11. VDH-Bruno

    Objets dans "Defpoints"

    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+
  12. VDH-Bruno

    Objets dans "Defpoints"

    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
  13. VDH-Bruno

    Objets dans "Defpoints"

    Bonjour, Pas besoin de geler tes calques, fait une sélection rapide _QSELECT des objets sur le calque defpoint A+
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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 )
  19. VDH-Bruno

    SdZ -> ZdS

    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+
  20. VDH-Bruno

    CODE de caractères

    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
  21. VDH-Bruno

    Décalage cadre texte

    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+
  22. VDH-Bruno

    Décalage cadre texte

    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
  23. VDH-Bruno

    Décalage cadre texte

    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
  24. 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é ;-)
  25. 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
×
×
  • 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é